poj 2187 Beauty Contest 凸包 Graham
2017-02-16 16:21
429 查看
题目大意:给出n个点的坐标,求最远的两个点的距离的平方(点对距离最大值)
可以想到相隔最远的两个点一定都是在凸包上的,于是直接求凸包然后枚举得出最大距离
求凸包用的是Graham扫描法 可以参考Graham扫描法
更多求凸包的方法 可以参考凸包问题的解法
可以想到相隔最远的两个点一定都是在凸包上的,于是直接求凸包然后枚举得出最大距离
求凸包用的是Graham扫描法 可以参考Graham扫描法
更多求凸包的方法 可以参考凸包问题的解法
#include<cstdio> #include<algorithm> #define N 50005 using namespace std; struct node{ int x,y; }p ,s ; int n; inline int read(){ int a=0;char f=1,c=getchar(); while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){a=a*10+c-'0';c=getchar();} return a*f; } inline int dir(node p1,node p2,node p3){ return (p1.x-p3.x)*(p2.y-p3.y)-(p1.y-p3.y)*(p2.x-p3.x); } inline int pw(int x){return x*x;} inline int calc(node a,node b){ return pw(a.x-b.x)+pw(a.y-b.y); } inline bool cmp(node a,node b){ int tmp=dir(p[1],a,b); if(tmp<0||(tmp==0&&calc(p[1],a)>calc(p[1],b))) return 0; return 1; } int main(){ freopen("testdata.in","r",stdin); freopen("testdata.out","w",stdout); n=read(); p[0].x=2e9,p[0].y=2e9; int tmp=0; for(int i=1;i<=n;++i){ p[i].x=read(),p[i].y=read(); if(p[i].x<p[tmp].x||p[i].x==p[tmp].x&&p[i].y<p[tmp].y) tmp=i; } if(tmp!=1) swap(p[1],p[tmp]); sort(p+2,p+n+1,cmp); int top=2; s[1]=p[1],s[2]=p[2]; for(int i=3;i<=n;++i){ while(top>1&&dir(s[top-1],s[top],p[i])<=0) --top; s[++top]=p[i]; } int ans=0; for(int i=1;i<=top;++i) for(int j=1;j<=top;++j) ans=max(ans,calc(s[i],s[j])); printf("%d\n",ans); return 0; }写给自己:刚接触凸包,用了不少时间,但是其中涉及到的很多东西依旧不太明白,要及时填坑到弄明白为止
相关文章推荐
- 【poj 2187】Beauty Contest(凸包,graham扫描法,旋转卡壳法)
- poj 2187 Beauty Contest (凸包 Graham)
- POJ2187-Beauty Contest-凸包
- POJ 2187 Beauty Contest(凸包 + 旋转卡壳)
- POJ 2187 Beauty Contest(凸包优化 || 凸包+旋转卡壳)
- poj 2187 Beauty Contest (凸包)
- POJ 2187 Beauty Contest(凸包:最远点对距离)
- poj 2187 Beauty Contest (凸包)
- POJ 2187 Beauty Contest (求最远点对,凸包+旋转卡壳)
- POJ_2187_Beauty Contest(凸包+暴力)
- POJ 2187 Beauty Contest(凸包暴力法)
- poj 2187 Beauty Contest(凸包)
- POJ 2187 Beauty Contest(凸包+旋转卡壳)
- poj 2187 Beauty Contest(二维凸包旋转卡壳)
- poj 2187 Beauty Contest(凸包)
- poj 2187 Beauty Contest , 旋转卡壳求凸包的直径的平方
- POJ 2187 Beauty Contest(凸包+旋转卡壳)
- POJ 2187 Beauty Contest (凸包+旋转卡壳)
- POJ2187 Beauty Contest(凸包+对踵点对求解)
- POJ 2187 Beauty Contest 凸包的应用