基础入门题,做法单一。
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
#include <vector>
#include <map>
#include <string>
#include <iostream>
#include <deque>
using namespace std;
struct node
{
long long u,l;
}geban[6000];
int ans[6000];
long long yy1,yy2;
bool cmp(const struct node &a,const struct node &b)
{
return a.u<b.u;
}
bool f(long long x,long long y,long long u,long long l)
{//0 left 1 right
if(u==l)
{
if(x<u) return 0;
else return 1;
}
double k,b,newx;
k=double(yy1-yy2)/double(u-l);
b=double(yy1)-k*double(u);
newx=(y-b)/k;
if(newx<double(x)) return 1;
else return 0;
}
int main()
{
long long i,j,k,l,t,m,n,a,b,h,x1,x2,r,mid;
while(1)
{
scanf("%lld",&n);
if(n==0) return 0;
scanf("%lld",&m);
scanf("%lld",&x1);scanf("%lld",&yy1);
scanf("%lld",&x2);scanf("%lld",&yy2);
for(i=0;i<n;i++)
{
scanf("%lld",&geban[i].u);scanf("%lld",&geban[i].l);
ans[i]=0;
}
ans[n]=0;
sort(geban,geban+n,cmp);
for(i=0;i<m;i++)
{
scanf("%lld",&j);scanf("%lld",&k);
if(f(j,k,geban[0].u,geban[0].l)==0)
ans[0]++;
else if(f(j,k,geban[n-1].u,geban[n-1].l)==1)
ans[n]++;
else
{
l=0;r=n-1;
while(l<r-1)
{
mid=(l+r)/2;
if(f(j,k,geban[mid].u,geban[mid].l)==0)
r=mid;
else l=mid;
}
ans[l+1]++;
}
}
for(int i=0;i<=n;i++)
{
printf("%d: %d\n",i,ans[i]);
}
printf("\n");
}
return 0;
}