http://poj.org/problem?id=2318

//叉积应用

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;

#define N 5010

struct P
{
int x1;
int x2;
}pt[N];

int n,m,x1,y1,x2,y2;

int toy[N];

bool left(int x,int y,struct P a)
{
if(x<a.x2+(y-y2)*(a.x1-a.x2)*1.0/(y1-y2))
return true;
return false;
}

int binary_search(int x,int y) //二分查找
{
int l=0,r=n;
int mid;
while(l<r)
{
mid=(l+r)/2;
if(left(x,y,pt[mid]))
r=mid;
else
l=mid+1;
}
return l;
}

int main()
{
int i,x,y;
while(scanf("%d",&n)!=EOF&&n)
{
scanf("%d%d%d%d%d",&m,&x1,&y1,&x2,&y2);
memset(toy,0,sizeof(toy));
for(i=0;i<n;i++)
{
scanf("%d%d",&pt[i].x1,&pt[i].x2);
}
for(i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
toy[binary_search(x,y)]++;
}
for(i=0;i<=n;i++)
printf("%d: %d\n",i,toy[i]);
printf("\n");
}
return 0;
}
posted on 2012-02-25 20:39  pcoda  阅读(161)  评论(0编辑  收藏  举报