www.pudn.com > zhejiang_university_acm_onlinejudge_code.rar > zp1081.cpp
//--------------------------------------------------------------------------- #include#pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused #include struct pointa { int x,y; }; struct pointa a[100]; int n,rght; int det(int x1,int y1,int x2,int y2,int x3,int y3) { return (x1-x3)*(y2-y3)-(x2-x3)*(y1-y3); } int onborder(int x,int y) { int i; for (i=0;i =0 && (a[i].y-y)*(y-a[i+1].y)>=0) break; if (i==n) return 0; return 1; } int within(int x,int y) { if (onborder(x,y)) return 1; int j,i=0,t=0; while (a[i].y==y && a[i].x>x && i x) i++; if (i==j) { if (det(x,y,a[i].x,a[i].y,rght,y)*det(x,y,a[i+1].x,a[i+1].y,rght,y)<0 && det(a[i].x,a[i].y,x,y,a[i+1].x,a[i+1].y)*det(a[i].x,a[i].y,rght,y,a[i+1].x,a[i+1].y)<0) t++; } else { if ((a[(i+1)%n].y-y)*(y-a[j].y)>0) t++; } } if (t%2) return 1; return 0; } int main(int argc, char* argv[]) { int m,f,i,x,y,cs=0; while (scanf("%d",&n) && n) { scanf("%d",&m); f=0; for (i=0;i rght) { f=1; rght=a[i].x; } } rght++; a[n].x=a[0].x; a[n].y=a[0].y; if (cs) printf("\n"); printf("Problem %d:\n",++cs); for (i=0;i