https://nanti.jisuanke.com/t/19930
(uva有问题,计蒜客可以交)
题目大意:
有m辆共享单车,n个人,分别给出他们的坐标,每个人有一个距离上限。
问对于每个人,到他的距离小于等于其距离上限的车的个数。
题解:
直接暴力模拟即可
注意坐标的输入输出,需要getchar()
#include<bits/stdc++.h>
#include<cstring>
#define ll long long
using namespace std;
struct node1
{
int x,y;
}cir[1010];
struct node2
{
int x,y,lim,num;
}per[1010];
ll dis(node2 x,node1 y)
{
ll t=(x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y);
return t;
}
int main()
{
int n,m;
while(~scanf("%d%d",&m,&n))
{
if(n==0 && m==0)return 0;
getchar();
for(int i=1;i<=m;++i)
{
scanf("(%d,%d)",&cir[i].x,&cir[i].y);
getchar();
}
for(int i=1;i<=n;++i)
{
scanf("(%d,%d)",&per[i].x,&per[i].y);
getchar();
}
for(int i=1;i<=n;++i)
scanf("%d",&per[i].lim);
for(int i=1;i<=n;++i)
{
per[i].num=0;
for(int j=1;j<=m;++j)
if(dis(per[i],cir[j])<=((ll)per[i].lim*per[i].lim))
per[i].num++;
}
for(int i=1;i<n;++i)
printf("%d ",per[i].num);
printf("%d\n",per[n].num);
}
return 0;
}