#include <iostream>
#include <cstring>
#define ll long long
using namespace std;
//const int maxn=
struct point
{
int x,y;
};
struct node
{
point a,b;
} pp[5100];
int pos[5100];
int judge(int x,int y,int mid)
{
int k=(pp[mid].a.x-x)*(pp[mid].b.y-y)-(pp[mid].a.y-y)*(pp[mid].b.x-x);//叉积计算
if (k<0)
return 0;//点在线段左边
else
return 1;//点在线段右边
}
void search(int x,int y,int n)//二分搜索
{
int l=0,r=n-1;
while(l<=r)
{
int mid=(l+r)/2;
if (judge(x,y,mid))//玩具的坐标在mid所在线段的右侧
{
l=mid+1;
}
else//左侧
r=mid-1;
}
pos[l]++;//果然,记录不同箱子里玩具的数量
}
int main()
{
int i,j,k,n,m;
int x1,x2,y1,y2;
//纸隔板数量n,玩具数量m,框左上角和右下角坐标
while(cin>>n&&n)
{
memset(pos,0,sizeof(pos));
cin>>m>>x1>>y1>>x2>>y2;
for (i=0; i<n; i++)
{
int u,l;
cin>>u>>l;
pp[i].a.x=u;
pp[i].a.y=y1;
pp[i].b.x=l;
pp[i].b.y=y2;
}//第i个纸板的两个坐标,从左到右排列
for (i=0; i<m; i++)
{
int x,y;
cin>>x>>y;
search(x,y,n);
}//第i个玩具的位置,用search看它在哪个隔间里
for (i=0; i<=n; i++)
cout<<i<<": "<<pos[i]<<endl;
cout<<endl;
}
return 0;
}
05-05
05-05
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交