#include<stdio.h>
#include<string.h>
#define fab(a)(a<1e-6)?-1:1
const int MAXN=5002;
typedef struct
{
__int64 x,_x,y,_y;
}Point;
Point p[MAXN];
double det(double x1,double y1,double x2,double y2)
{
return x1*y2-x2*y1;
}
double cross(__int64 x,__int64 y,Point loc)
{
return fab(det(loc.x*1.0-x*1.0,loc.y*1.0-y*1.0,loc._x*1.0-x*1.0,loc._y*1.0-y*1.0));
}
int fun(__int64 x,__int64 y,__int64 front,__int64 rear)
{
int mid;
do
{
mid=front+(rear-front)/2;
int ans1=cross(x,y,p[mid]);
int ans2=cross(x,y,p[mid+1]);
if(ans1*ans2<0)return mid;
else if(ans1>0)front=mid;
else rear=mid;
}while(1);
}
int main()
{
__int64 n,m,i,num[MAXN];
__int64 a,b,X,Y,_X,_Y;
while(scanf("%I64d",&n),n)
{
memset(num,0,sizeof(num));
scanf("%I64d%I64d%I64d%I64d%I64d",&m,&X,&Y,&_X,&_Y);
p[0].x=p[0]._x=X;
p[0].y=p[n+1].y=Y;
p[0]._y=p[n+1]._y=_Y;
p[n+1].x=p[n+1]._x=_X;
for(i=1;i<=n;i++)
{
scanf("%I64d%I64d",&X,&_X);
p[i].x=X;
p[i].y=Y;
p[i]._x=_X;
p[i]._y=_Y;
}
for(i=0;i<m;i++)
{
scanf("%I64d%I64d",&a,&b);
num[(fun(a,b,0,n+1))]++;
}
for(i=0;i<=n;i++)
printf("%I64d: %I64d\n",i,num[i]);
printf("\n");
}
return 0;
}
POJ 2318 TOYS
最新推荐文章于 2021-05-12 20:50:00 发布