日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用向量叉积求三角形的面积(+STL:nth_element求第K大的数)

發(fā)布時(shí)間:2024/9/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用向量叉积求三角形的面积(+STL:nth_element求第K大的数) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

牛客寒假算法集訓(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:

#include <stdio.h> #include <algorithm> #define ll long long const ll N = 10e6; using namespace std; struct date {ll x;ll y; }; bool cmp(ll a,ll b) {return a > b; } long long a[N]; int main() {int t,n,k;scanf("%d",&t);while(t--){scanf("%d%d",&n,&k);date d[n+2];for(int i = 0; i < n; i++){scanf("%lld%lld",&d[i].x,&d[i].y);}ll v = 0,w;for(int i = 0; i < n; i++){for(int j = i+1; j < n; j++){for(int k = j+1; k < n; k++){w = (d[j].x-d[i].x)*(d[k].y-d[i].y)-(d[k].x-d[i].x)*(d[j].y-d[i].y);a[v++] = w > 0 ? w : - w;}}}nth_element(a,a+k-1,a+v,cmp);if(a[k-1]%2==0)printf("%lld.00\n",a[k-1]/2);elseprintf("%lld.50\n",a[k-1]/2);}return 0; }

總結(jié)

以上是生活随笔為你收集整理的利用向量叉积求三角形的面积(+STL:nth_element求第K大的数)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。