亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

UESTC 1447 Area 凸包+旋轉卡殼 求最大四邊形面

系統 2120 0
給定一組點集,求至多選四點,使其所圍成的面積最大。
剛開始四重循環,直接超時掉。后來聽說要用到旋轉卡殼,且是在求三角形面積基礎上求四邊形面積的。在AC了一道旋轉卡殼法求最大三角形面積后,終于把這道給A了。
本題可以把四邊形分為兩個三角形的并,再用 旋轉卡殼法 分別求出這兩個三角形的最大面積。
如下圖所示,固定i,j點,分別找到這樣的h,k點使三角形ijk和三角形ijh面積都最大。
UESTC 1447 Area 凸包+旋轉卡殼 求最大四邊形面積 - 某年某月 - zxj015的博客
?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <iostream>
#include <algorithm>
#include<math.h>
using namespace std;
int num,top;
struct Point
{
?int x,y;
?bool operator < (const Point a)const
?{
??return y<a.y||(y==a.y&&x<a.x);
?}
}s[1005],res[1005];
bool multi(Point o,Point a,Point b)
{
?return (b.x-o.x)*(a.y-o.y)>=(a.x-o.x)*(b.y-o.y);
}
int graham(Point s[],int n,Point res[])
{
?sort(s,s+n);
?int len,top=1;
?if(n==0)return 0;
?res[0]=s[0];
?if(n==1)return 1;
?res[1]=s[1];
?if(n==2)return 2;
?res[2]=s[2];
?for(int i=2;i<n;i++)
?{
??while(top&&multi(res[top-1],res[top],s[i]))top--;
??res[++top]=s[i];
?}
?len=top;
?res[++top]=s[n-2];
?for(int i=n-3;i>=0;i--)
?{
??while(top!=len&&multi(res[top-1],res[top],s[i]))top--;
??res[++top]=s[i];
?}
?return top;
}
int Area(Point p1,Point p2,Point p3)
{
?? ?return abs((p1.x*p2.y-p1.y*p2.x)+(p2.x*p3.y-p2.y*p3.x)+(p3.x*p1.y-p3.y*p1.x));
}
int MAX(int a,int b)
{
?? ?if(a>b)
?? ?return a;
?? ?else
?? ?return b;
}
int main()
{
?? ?int aa=1,cas,n,i,j,h,k,top,minx=10005,miny=10005;
?? ?int max1,max2,area,ans,ans1;
?? ?scanf("%d",&cas);
?? ?while(cas--)
?? ?{
?? ?ans=0;minx=10005;miny=10005;
?? ?scanf("%d",&n);
?? ?for(i=0;i<n;i++)
?? ? ? ? scanf("%d%d",&s[i].x,&s[i].y);
?? ? top=graham(s,n,res);
?? ? if(top==0||top==1||top==2)
?? ? ? ? ?ans=0;
?? ? else if(top==3)
?? ? ? ? ?ans=Area(res[0],res[1],res[2]);
?? ? else if(top==4)
?? ? ? ? ?ans=Area(res[0],res[1],res[2])+Area(res[0],res[3],res[2]); ? ?
?? ? else
?? ? {
?? ? for(i=0;i<top;i++)
?? ? {
?? ? ? ? ?j=(i+2)%top;
?? ? ? ? ?k=(i+1)%top;
?? ? ? ? ?h=(j+1)%top;
?? ? ? ? ?while(Area(res[i],res[j],res[k+1])>Area(res[i],res[j],res[k]))
?? ? ? ? ? ? ? k=(k+1)%top;
?? ? ? ? ?max1=Area(res[i],res[j],res[k]);
?? ? ? ? ?while(Area(res[i],res[j],res[h+1])>Area(res[i],res[j],res[h]))
?? ? ? ? ? ? ? h=(h+1)%top;
?? ? ? ? ?max2=Area(res[i],res[j],res[h]);
?? ? ? ? ?ans1=0;
?? ? ? ? ?while(max1+max2>ans1)
?? ? ? ? ?{?
?? ? ? ? ? ? ? j=(j+1)%top;
?? ? ? ? ? ? ? ans1=max1+max2;
?? ? ? ? ? ? ? while(Area(res[i],res[j],res[k+1])>Area(res[i],res[j],res[k]))
?? ? ? ? ? ? ? ? ? k=(k+1)%top;
?? ? ? ? ? ? ? max1=Area(res[i],res[j],res[k]);
?? ? ? ? ? ? ? while(Area(res[i],res[j],res[h+1])>Area(res[i],res[j],res[h]))
?? ? ? ? ? ? ? ? ? h=(h+1)%top; ? ? ? ? ? ? ??
?? ? ? ? ? ? ? max2=Area(res[i],res[j],res[h]);
?? ? ? ? ? ? ?
?? ? ? ? ?}
?? ? ? ? ?ans=MAX(ans,ans1);
?? ? }
?? ? }
?? ? printf("Case #%d: %d\n",aa++,ans);
?? ? }
?? ? //system("pause");
?? ? return 0;
}

UESTC 1447 Area 凸包+旋轉卡殼 求最大四邊形面積


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美性天天影院 | 天天爱添天天爱添天天爱添 | 日日爱影视 | 国产成人免费高清视频 | 久久99久久精品97久久综合 | 欧美香蕉视频 | 九九线精品视频 | 欧美精品blacked中文字幕 | 婷婷色站 | 91色多多| 久久在线一区 | 国产精品伦一区二区三级视频 | 日日干夜夜操s8 | 91中文字幕视频 | 日韩欧美成人免费中文字幕 | 亚州综合激情另类久久久 | 欧美一级毛片免费播放aa | 一级片免费网址 | 色综合综合色综合色综合 | 色综合久久夜色精品国产 | 欧美啪啪毛片一区二区 | 久久se精品一区二区国产 | 日本囗交做爰视频欧美 | 欧美激情一区二区三区中文字幕 | 狠狠激情五月综合婷婷俺 | 视色tv| 草久在线观看 | 中国美女一级a毛片录像在线 | 亚洲欧洲日韩在线 | 色综合久久精品中文字幕 | 四虎永久在线视频 | 黄色毛片在线播放 | 久久亚洲综合 | 天天色天天综合网 | 天天狠狠操 | 国产精品久久久视频 | 深夜福利剧场 | 国产精品夜色一区二区三区 | 黄色综合网 | 看免费一级毛片 | 99在线视频精品费观看视 |