#include<stdio.h>
#include<string.h>
#define N 5010
struct node
{
int upper,down;
}cardboard[N];
int toy[N];
int n,m,x1,y1,x2,y2,x,y;
bool cross(int k)
{
int a,b,c,d;
a=x-cardboard[k].down;
b=y-y2;
c=cardboard[k].upper-cardboard[k].down;
d=y1-y2;
if(b*c-a*d>0)
return 1;
return 0;
}
void binbring()
{
int left=0,right=n,mid=(left+right)/2;
while(left<right)
{
if(cross(mid))//左边cardboard[mid].down,y2,cardboard[mid].upper,y1,x,y)
{
right=mid;
}
else //不在mid的左边 ,在右边
{
left=mid+1;
}
mid=(left+right)/2;
}
toy[right]++;
}
int main()
{
int i;
while(scanf("%d%d%d%d%d%d",&n,&m,&x1,&y1,&x2,&y2)!=EOF)
{
if(n==0)
break;
for(i=0;i<n;i++)
scanf("%d%d",&cardboard[i].upper,&cardboard[i].down);
cardboard[n].upper=cardboard[n].down=x2;
memset(toy,0,sizeof(toy));
for(i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
binbring();
}
for(i=0;i<=n;i++)
printf("%d: %d\n",i,toy[i]);
printf("\n");
}
return 0;
}
poj 2318
最新推荐文章于 2022-02-25 19:38:17 发布
141

被折叠的 条评论
为什么被折叠?



