题目链接:点击打开链接
此题与poj2318相似,只是最终结果询问的不同,还有就是输入的点没有排序,利用二分前应先排序
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int up[1010],down[1010],num[1010],nu[1010];
int n,m;
int x1,x2,y1,y2,x,y;
int judge(int ax,int ay,int bx,int by,int px,int py)
{
return (ax-px)*(by-py)-(ay-py)*(bx-px);
}
int erfen(int a,int b)
{
int l=0,r=n+1,mid;
while(l<=r)
{
mid=(l+r)/2;
if(judge(up[mid],y1,down[mid],y2,a,b)<0)
r=mid-1;
else
l=mid+1;
}
return r;
}
int main()
{
int i;
while(scanf("%d",&n),n)
{
scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);
for(i=1;i<=n;i++)
scanf("%d%d",&up[i],&down[i]);
up[0]=down[0]=x1;
up[n+1]=down[n+1]=x2;
sort(up,up+n+1);
sort(down,down+n+1);
memset(num,0,sizeof(num));
memset(nu,0,sizeof(nu));
while(m--)
{
scanf("%d%d",&x,&y);
num[erfen(x,y)]++;
}
for(i=0;i<=n;i++)
nu[num[i]]++;
printf("Box\n");
for(i=1;i<=n;i++)
if(nu[i])
printf("%d: %d\n",i,nu[i]);
}
}