ACM 2017 香港区域赛 F-Nearby Bicycles(模拟)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxxjxw/article/details/84000115

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;
}

猜你喜欢

转载自blog.csdn.net/hxxjxw/article/details/84000115