POJ2079 旋转卡壳 凸包内最大三角形
来源:互联网 发布:电信4g网络覆盖 编辑:程序博客网 时间:2024/06/03 14:18
先求个凸包,再求每个点的对踵点。假设I的对踵点是J,那I+1的对踵点必然在J+1后,所以可以用2个指针向后推。
利用叉积来求三角形的面积来找对踵点。
这题要注意的是,数据里既有3点共线,还有重点。
我的代码:
#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>#define MAXN 50010using namespace std;struct point{ int x,y; point(int _x=0,int _y=0) : x(_x),y(_y) {} void input() { scanf("%d%d",&x,&y); }};point operator-(const point p1,const point p2){ return point(p1.x-p2.x, p1.y-p2.y);}int operator*(const point p1,const point p2){ return p1.x*p2.y - p1.y*p2.x;}bool operator<(const point p1,const point p2){ if(p1.x != p2.x) return p1.x < p2.x; else return p1.y < p2.y;}int n,tn;point a[MAXN],tu[MAXN];void init(){ int i,j,k,r,w; for(i=1;i<=n;i++) a[i].input(); }void tubao(){ int i,j,k,r,w,un,dn; point dd[MAXN],du[MAXN]; sort(a+1,a+n+1); un = dn = 2; dd[1] = du[1] = a[1]; dd[2] = du[2] = a[2]; for(i=3;i<=n;i++) { for(;un > 1 && (du[un] - du[un-1]) * (a[i] - du[un]) > 0;un--); for(;dn > 1 && (dd[dn] - dd[dn-1]) * (a[i] - dd[dn]) < 0;dn--); du[++un] = a[i]; dd[++dn] = a[i]; } tn = 0; for(i=1;i<un;i++) tu[++tn] = du[i]; for(i=dn;i>1;i--) tu[++tn] = dd[i];}int dis(point p1, point p2){ return (p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y);}int myabs(int x){ if(x < 0) x = -x; return x;}void solve(){ int i,j,k,r,w,old=0; int ans=0; tubao(); tu[0] = tu[tn]; tu[tn+1] = tu[1]; for(i=1,j=1;i<=tn;i++) { old = j; while( myabs( (tu[i+1]-tu[i]) * (tu[j]-tu[i]) )<= myabs( (tu[i+1]-tu[i]) * (tu[j+1]-tu[i]) )) { ans = max(ans, dis(tu[i],tu[j]) ); j = j % tn + 1; if( j== old) break; } ans = max(ans, dis(tu[i],tu[j]) ); } printf("%d\n",ans);}int main(){ freopen("p2187.in","r",stdin); while(scanf("%d",&n) != EOF) { init(); solve(); } return 0;}
- POJ2079 旋转卡壳 凸包内最大三角形
- poj2079 Triangle (旋转卡壳之最大三角形)
- poj2079旋转卡壳
- 旋转卡壳->POJ2079
- 【POJ2079】Triangle-旋转卡壳
- 旋转卡壳模板(poj2079)
- poj2079(*凸包内最大三角形面积)
- 旋转卡壳法求最大三角形
- hdu2202 最大三角形(旋转卡壳)
- hdu 2202 最大三角形 (旋转卡壳)
- [POJ2079]Triangle(凸包+旋转卡壳)
- poj2079—Triangle(旋转卡壳)
- poj2079 triangle 凸包 旋转卡壳
- poj2079凸包求最大三角形面积
- POJ 2079 Triangle (凸包中的最大三角形&旋转卡壳)
- poj 2079 Triangle,旋转卡壳求点集的最大三角形
- HDU 2202 最大三角形 (凸包+旋转卡壳)
- POJ 2079 旋转卡壳求最大三角形面积
- mtk 添加audio codec芯片注意事项
- java中List对象集合的遍历方法
- 使用.NET中的XML注释(一) -- XML注释标签讲解
- ARM的DSP & SIMD技术
- JAVA版hashtable的使用和学习,使用emuneration
- POJ2079 旋转卡壳 凸包内最大三角形
- 字节对齐_ZZ
- ARM的Jazelle技术
- java 批处理
- 加入jar包
- 为什么要重视应用监控
- POJ2513
- CXF简单WebService例子
- UEFI BIOS ROM 文件格式