【SCOI2007】bzoj1069 最大土地面积
2017-04-14 08:01
411 查看
先求出凸包,然后枚举一个顶点,旋转着枚举对角线同时维护两边和对角线最远的点。因为对角线和那两个点最多转一圈,复杂度是O(n2)的。
#include<cstdio> #include<cmath> #include<algorithm> using namespace std; const double eps=1e-8,pi=acos(-1); int cmp(double x) { if (x>eps) return 1; if (fabs(x)<=eps) return 0; return -1; } struct Vector { double x,y; bool operator < (const Vector &v) const { return cmp(x-v.x)==-1; } void rd() { scanf("%lf%lf",&x,&y); } Vector operator + (const Vector &v) const { return (Vector){x+v.x,y+v.y}; } Vector operator - (const Vector &v) const { return (Vector){x-v.x,y-v.y}; } }a[2010],f[2010]; typedef Vector Point; double dot(Vector v,Vector u) { return v.x*u.x+v.y*u.y; } double cross(Vector v,Vector u) { return v.x*u.y-v.y*u.x; } double len(Vector v) { return sqrt(dot(v,v)); } double size(Point a,Point b,Point c) { return fabs(cross(b-a,c-a))/2; } struct Line { Point p; Vector v; }l1; double dis(Point p,Line l) { return fabs(cross(l.v,p-l.p))/len(l.v); } int n,m,mm; int main() { double ans=0; scanf("%d",&n); for (int i=1;i<=n;i++) a[i].rd(); sort(a+1,a+n+1); f[0]=a[1]; m=1; for (int i=2;i<=n;i++) { while (m>1&&cmp(cross(f[m-1]-f[m-2],a[i]-f[m-2]))>=0) m--; f[m++]=a[i]; } mm=m; for (int i=n-1;i;i--) { while (m>mm&&cmp(cross(f[m-1]-f[m-2],a[i]-f[m-2]))>=0) m--; f[m++]=a[i]; } m--; for (int i=0;i<m;i++) for (int j=(i-2+m)%m,x=(i-1+m)%m,nex=(x-1+m)%m,y=(j-1+m)%m,ney=(y-1+m)%m; j!=(i+1)%m;j=(j-1+m)%m) { while (nex!=j&&cmp(size(f[i],f[j],f[nex])-size(f[i],f[j],f[x]))==1) x=nex,nex=(x-1+m)%m; while (ney!=j&&cmp(size(f[i],f[j],f[ney])-size(f[i],f[j],f[y]))==1) y=ney,ney=(y-1+m)%m; ans=max(ans,size(f[i],f[j],f[x])+size(f[i],f[j],f[y])); } printf("%.3f\n",ans); }
相关文章推荐
- 【旋转卡壳】【bzoj 1069】: [SCOI2007]最大土地面积
- bzoj1069【SCOI2007】最大土地面积
- [BZOJ1069][SCOI2007]最大土地面积(凸包+旋转卡壳)
- bzoj 1069: [SCOI2007]最大土地面积(旋转卡壳)
- BZOJ-1069 [SCOI2007]最大土地面积
- BZOJ 1069 [SCOI 2007] 最大土地面积 (凸包+旋转卡壳)
- BZOJ 1069 [SCOI2007]最大土地面积 旋转卡壳
- [BZOJ1069][SCOI2007]最大土地面积 凸包+旋转卡壳
- BZOJ 1069 SCOI2007 最大土地面积 旋转卡壳
- BZOJ 1069 [SCOI2007] 最大土地面积
- bzoj1069[SCOI2007]最大土地面积
- [BZOJ1069][SCOI2007][凸包][旋转卡壳]最大土地面积
- 【BZOJ1069】【SCOI2007】最大土地面积 凸包 单调性
- BZOJ1069 [SCOI2007]最大土地面积
- 1069: [SCOI2007]最大土地面积 - BZOJ
- bzoj1069 [SCOI2007]最大土地面积
- bzoj 1069: [SCOI2007]最大土地面积
- [凸包] BZOJ1069: [SCOI2007]最大土地面积
- [BZOJ1069]SCOI2007最大土地面积|凸包|旋转卡壳
- bzoj1069: [SCOI2007]最大土地面积