//https://vjudge.net/contest/508277#problem/B #include #include #include #include using namespace std; const double inf=1e100,EPS=1e-6; const int N=5e3+1; double l,now; int n,m; struct edge { int x[3],y[3],w;//int->double } a[N]; #define xy x1,y1 #define double int double cross(double x1,double y1,double x2,double y2) { // printf("(%d,%d)(%d,%d):%d\n",x1,y1,x2,y2,x1*y2-x2*y1) ; return x1*y2-x2*y1; } //l,r没算好 void find(int l,int r,int mid,int x1,int y1) { // printf("l:%d,r:%d,mid:%d(%d,%d),x1:%d,y1:%d\n",l,r,mid,a[mid].x[0],a[0].y[0],x1,y1); if(l==r) { a[l].w++; return ;//二分结束没有return } if(cross(a[mid].x[0],a[0].y[0],x1-a[mid].x[1],y1-a[0].y[1])<=0)//顺时针是-,逆时针是+ { find(l,mid-1,(l+mid)/2,xy); } else { find(mid,r,(mid+r+1)/2,xy); } } int main() { while(1) { scanf("%d",&n); if(n==0) return 0; int x1,y1; memset(a,0,sizeof(edge)*(n+1)); scanf("%d%d%d%d%d",&m,&a[0].x[1],&a[0].y[1],&a[0].x[2],&a[0].y[2]); a[0].x[2]=a[0].x[1]; a[0].x[0]=a[0].x[2]-a[0].x[1]; a[0].y[0]=a[0].y[2]-a[0].y[1]; for(int i=1;i<=n;i++) { scanf("%d%d",&a[i].x[1],&a[i].x[2]); a[i].x[0]=a[i].x[2]-a[i].x[1]; // cout<