poj 2187 Beauty Contest (凸包)
2013-03-08 17:44
405 查看
题目:http://poj.org/problem?id=2187
题意:给定平面上的一些散点集,求最远两点距离的平方值。
基于水平序的Andrew算法(Graham算法的变种)
1、按照x从小到大排序(如果x相同就按照y从小到大排序),删除重复点后得到序列p1,p2,。。。。
2、把p1和p2放到凸包中。从p3开始,当新点在凸包的前进方向的左边时继续,否则依次删除最近加入凸包的点,直到新点在左边。
3、依次枚举凸包的的任意两点,求出最大距离的平方
View Code
题意:给定平面上的一些散点集,求最远两点距离的平方值。
基于水平序的Andrew算法(Graham算法的变种)
1、按照x从小到大排序(如果x相同就按照y从小到大排序),删除重复点后得到序列p1,p2,。。。。
2、把p1和p2放到凸包中。从p3开始,当新点在凸包的前进方向的左边时继续,否则依次删除最近加入凸包的点,直到新点在左边。
3、依次枚举凸包的的任意两点,求出最大距离的平方
View Code
#include <iostream> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; const double eps=1e-6; typedef struct node { int x,y; }point; int n; point pt[50010]; point res[50010]; bool cmp(point a,point b) { if(a.x==b.x) return a.y<b.y; else return a.x<b.x; } int dcml(double x) { if(fabs(x)<eps) return 0; if(x<0) return -1; else return 1; } double dot(int x1,int y1,int x2,int y2) { return x1*y2-x2*y1; } int cross(point a,point b,point c) { return dcml(dot(a.x-c.x,a.y-c.y,b.x-c.x,b.y-c.y)); } int dist(point a,point b) { return ((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } int main() { scanf("%d",&n); int i; for(i=0;i<n;i++) { scanf("%d%d",&pt[i].x,&pt[i].y); } sort(pt,pt+n,cmp); int m; m=0; for(i=0;i<n;i++) { while(m>1&&cross(res[m-1],pt[i],res[m-2])<=0) m--; res[m++]=pt[i]; } int k=m; for(i=n-2;i>=0;i--) { while(m>k&&cross(res[m-1],pt[i],res[m-2])<=0) m--; res[m++]=pt[i]; } if(n>1) m--; int dis=0; int j; for(i=0;i<m;i++) { for(j=i+1;j<m;j++) { int h=dist(res[i],res[j]); if(dis<h) dis=h; } } printf("%d\n",dis); return 0; }
相关文章推荐
- 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(凸包)
- POJ 2187 Beauty Contest(凸包-Graham扫描法)
- POJ 2187 Beauty Contest(凸包,旋转卡壳)
- poj 2187 Beauty Contest(二维凸包旋转卡壳)
- POJ 2187 Beauty Contest (凸包)
- POJ 2187 Beauty Contest(凸包+旋转卡壳)