| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
2318tijie#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int n,m,bx1,bx2,by1,by2;
struct node
{
int x,y;
}up[1100000],down[1100000];
int a[1100000];
int multi(node p0,node p1,node p2)
{
int x1=p1.x-p0.x;
int y1=p1.y-p0.y;
int x2=p2.x-p0.x;
int y2=p2.y-p0.y;
if((x1*y2-x2*y1)<=0)return 1;
else return 0;
}
void check(node p0)
{
int l=0,r=n+1,kk;
while(l<=r)
{
int mid=(l+r)/2;
if(!multi(p0,up[mid],down[mid]))
{
kk=mid;
l=mid+1;
}
else r=mid-1;
}
a[kk]++;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==0)break;
scanf("%d%d%d%d%d",&m,&bx1,&by1,&bx2,&by2);
memset(a,0,sizeof(a));
up[0].x=bx1;up[0].y=by1;
down[0].x=bx1;down[0].y=by2;
up[n+1].x=bx2;up[n+1].y=by1;
down[n+1].x=bx2;down[n+1].y=by2;
for(int i=1;i<=n;i++)
{
int x,y;scanf("%d%d",&x,&y);
up[i].x=x;up[i].y=by1;
down[i].x=y;down[i].y=by2;
}
for(int i=1;i<=m;i++)
{
node toy;scanf("%d%d",&toy.x,&toy.y);
check(toy);
}
for(int i=0;i<=n;i++)printf("%d: %d\n",i,a[i]);
printf("\n");
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator