Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
这里的测试数据都过了怎么还是WA啊?#include<iostream> #include<cmath> #include<algorithm> using namespace std; #define EPS 1e-8 typedef struct point{int x;int y;double angle;}point; int comp(point &a,point &b) { double r=a.angle-b.angle; if(fabs(r)>EPS) return r>0?1:-1; else return a.x-b.x; }//角度a>b返回1,否则返回-1,角度相等a.x-b.x int area(point &p1,point &p2,point &p3) { return (p2.x-p1.x)*(p3.y-p1.y)-(p2.y-p1.y)*(p3.x-p1.x); }//面积 int len(point &a,point &b) { return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); } point st[50002]; int sp;//定义栈 void pop()//出栈 {sp--;} void push(point &pp) { st[sp].x=pp.x; st[sp].y=pp.y; st[sp].angle=pp.angle; sp++; } int main() { int i,N; int xt,yt,it; cin>>N; point pf[50000]; for(i=0;i<N;i++) cin>>pf[i].x>>pf[i].y; xt=pf[0].x;yt=pf[0].y;it=0; for(i=1;i<N;i++) { if(pf[i].x<xt) { xt=pf[i].x;yt=pf[i].y;it=i; } else if(pf[i].x==xt&&pf[i].y<yt) { xt=pf[i].x;yt=pf[i].y;it=i; } } pf[it].x=pf[0].x; pf[it].y=pf[0].y; pf[0].x=0; pf[0].y=0; for(i=1;i<N;i++) { pf[i].x-=xt;pf[i].y-=yt; pf[i].angle=atan2((double)pf[i].y,(double)pf[i].x); } sort(pf+1,pf+N,comp); push(pf[0]);push(pf[1]); for(i=2;i<N;i++) { while(area(st[sp-2],st[sp-1],pf[i])<0) pop(); push(pf[i]); } int l,length=0; for(i=0;i<sp-1;i++) for(int j=i;j<sp;j++) if((l=len(st[i],st[j]))>length) length=l; cout<<length<<endl; return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator