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