ZOJ 3762 Pan's Labyrinth
来源:互联网 发布:java显式与隐式初始化 编辑:程序博客网 时间:2024/05/12 22:34
比赛过程中想到了算法,但是没有敲,事后想到可以直接套模版了...
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define op operator#define cp const Point&using namespace std;const double eps = 1e-8, pi = acos(-1.0);const int N = 505;inline int sig(double x){return (x>eps)-(x<-eps);}inline double sqr(double x){return x*x;}struct Point{ double x,y,ang; void in(){scanf("%lf%lf",&x,&y);} Point(){} Point(double xx,double yy):x(xx),y(yy){} Point op+(cp a)const{return Point(x+a.x,y+a.y);} Point op-(cp a)const{return Point(x-a.x,y-a.y);} double op^(cp a)const{return x*a.y-y*a.x;} double cross(cp a,cp b){return (a-*this)^(b-*this);} bool op<(cp a)const{return x<a.x || (x==a.x && y<a.y);} double angle(){return atan2(y,x)+pi;} double L(){return sqrt(sqr(x)+sqr(y));}} pnt[N],res[N],rot[N];bool cmp(cp a,cp b){return a.ang<b.ang;}double ptoline(Point p,Point a,Point b){ return fabs(p.cross(a,b))/(a-b).L();}int Graham(Point *p,int n,Point *ch){ sort(p,p+n); int m=0; for(int i=0;i<n;++i){ while(m>1 && sig((ch[m-1]-ch[m-2])^(p[i]-ch[m-1]))<0) --m; ch[m++]=p[i]; } int k=m; for(int i=n-2;i>=0;--i){ while(m>k && sig((ch[m-1]-ch[m-2])^(p[i]-ch[m-1]))<0) --m; ch[m++]=p[i]; } if(m>1) --m; return m;}double check(int k,int n,int m){ double ret=0; int cnt=0; for(int i=0;i<n;++i){ if(i!=k){ rot[cnt]=pnt[i]-pnt[k]; rot[cnt].ang=rot[cnt].angle(); ++cnt; } } sort(rot,rot+cnt,cmp); int j=0; while(1){ if(sig(rot[0]^(res[j]-pnt[k]))>=0 && sig(rot[0]^(res[(j+m-1)%m]-pnt[k]))<=0) break; j=(j+1)%m; } for(int i=0;i<cnt;++i){ Point tmp=pnt[k]+rot[i]; while(ptoline(res[j+1],pnt[k],tmp)>ptoline(res[j],pnt[k],tmp) || sig(ptoline(res[j],pnt[k],tmp))==0) j=(j+1)%m; ret=max(ret,ptoline(res[j],pnt[k],tmp)); } return ret;}int main(){ int n; while(scanf("%d",&n)!=EOF){ for(int i=0;i<n;++i) pnt[i].in(); int m=Graham(pnt,n,res); double ans=0;res[n]=res[0]; for(int i=0;i<n;++i) ans=max(ans,check(i,n,m)); printf("%.10lf\n",ans); } return 0;}
0 0
- zoj 3762 Pan's Labyrinth
- ZOJ 3762 Pan's Labyrinth
- zoj 3762 Pan's Labyrinth 几何+贪心
- ZOJ 旋转卡壳 3762 Pan's Labyrinth
- [技巧性枚举] ZOJ 3672 Pan's Labyrinth
- pan's labyrinth
- Pan's Labyrinth
- ZOJ - 3762 Pan's Labyrinth (点到直线距离模板)
- ZOJ 3762 Pan's Labyrinth (点集中的最大点-线距&技巧性枚举)
- ZOJ3762:Pan's Labyrinth(点到直线最短距离)
- Pan's Labyrinth (找组成的三角形最大的高)
- Labyrinth
- Labyrinth
- Labyrinth
- Labyrinth
- Pan
- pan
- UESTC 1272-Final Pan's prime numbers
- c#中比较器的创建
- oracle 创建函数/程序包
- rmmod: can't change directory to '/lib/modules': No such file or directory问题解决
- php获取文件文档大小函数
- [Python] How to use Pyramid?
- ZOJ 3762 Pan's Labyrinth
- How to run OpenMP on Linux?
- CodeSmith : Merge策略
- 随笔散文:孩子娇气可以多参加锻炼
- NYOJ 187 快速查找素数
- select下拉框 option 自动提示
- sql server转mysql 问题
- linux 后台日志 mysql 错误异常解释
- 精通高级CSS选择器