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 |
求大神指点#include<iostream> #include<stdio.h> #include<cmath> #include<algorithm> using namespace std; const double eps=1e-8; const int maxn=1000+10; const double maxx=2e10; const double pi=acos(-1.0); int top; struct point{ //平面上的点 int x; int y; point(int x0=0,int y0=0) { //构造 x=x0; y=y0; } point operator -(point b) { //减 表示向量AB=A-B,实际运算B-A; return point(b.x-x,b.y-y); } int operator %(point b) { //叉积 return x*b.y-y*b.x; } }Null; point yd(0,0); int st[maxn]; point pp[maxn]; int n1; point pt; int pnum; double dist(point p1,point p2) { double px,py; px=p1.x-p2.x; py=p1.y-p2.y; return sqrt(px*px+py*py); } bool operator <(const point a,const point b) { int m=(pp[0]-a)%(pp[0]-b); if(m>0) { return true; } else if(m==0&&(dist(pp[0],a)>dist(pp[0],b))) { return true; } return false; } void graham(int n) { //三个以上的点集,以排序按Y-X top=2; st[0]=0; st[1]=1; st[2]=2; int i; for(i=2;i<=n;i++) { while((pp[st[top-1]]-pp[st[top]])%(pp[i]-pp[st[top-1]])>=0) { if(top==0)break; top--; } top++; st[top]=i; } return ; } void init() { int i; pt.y=-1; for(i=0;i<n1;i++) { scanf("%d %d",&pp[i].x,&pp[i].y); if(pt.y==-1||pp[i].y<pt.y) { pt=pp[i]; pnum=i; } if(pp[i].y==pt.y&&pp[i].x<pt.x) { pt=pp[i]; pnum=i; } } swap(pp[pnum],pp[0]); sort(pp+1,pp+n1); pp[n1]=pp[0]; return ; } void work(int n) { bool ok=true; if(top<2) { ok=false; } int i; for(i=2;i<top;i++) { if(st[i]-st[i-1]==1) { ok=false; break; } } if(i==top&&fabs((pp[n-1]-pp[n-2])%(pp[n-1]-pp[n]))>eps) { ok=false; } if(ok) { printf("YES\n"); } else { printf("NO\n"); } return ; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d",&n1); init(); if(n1<6) { printf("NO\n"); } else { graham(n1); work(n1); } } //system("pause"); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator