利用向量叉积求三角形的面积(+STL:nth_element求第K大的数)
牛客寒假算法集訓營2
https://ac.nowcoder.com/acm/contest/327/A
A.處女座的簽到題
題目描述
平面上有n個點,問:平面上所有三角形面積第k大的三角形的面積是多少?
/*
已知坐標求三角形的面積,最好的方法是求出相鄰兩個向量的叉積的絕對值(平行四邊形面積)然后除以2
比如由三個點A(x1,y1),B(x2,y2),C(x3,y3)構成的三角形ABC
求它面積的公式為:
|向量AB×向量AC| / 2 = |(x2-x1)(y3-y1)-(x3-x1)(y2-y1)| / 2;
關于向量叉積求三角形面積,這里有一篇寫的十分好比較全的博客:傳送門
對于本題,因為要除以2,并且要求保留2位小數,叉積的絕對值要不是奇數要不就是偶數,所以可以把叉積絕對值算出來用long long數組(喜歡省內存)存起來,然后分奇數偶數討論保留的后兩位小數是什么(even : %lld.00 odd :%lld.50)~
然后要求第K大的面積,時間復雜度為O(n),可以用快排的思想(“快速選擇算法”),也可以用STL里的nth_element;
nth_element基本用法和sort有點像:
nth_element作用為求第n大的元素,并把它放在第n位置上,如果數組是從0開始存的數據,那么用法為nth_element(a,a+k-1,a+n,cmp);
第一個為數組首地址,第二個為第K個數的地址,第三個為末地址,最后一個是排序方式(不寫cmp,默認是升序的)
注意:nth_element()函數不過將第n大的數排好了位置,并不返回值
*/
AC_code:
總結
以上是生活随笔為你收集整理的利用向量叉积求三角形的面积(+STL:nth_element求第K大的数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Problem A: 素数对
- 下一篇: Applese 涂颜色(欧拉定理降幂+快