1. 程式人生 > >ACM 2017 香港區域賽 F-Nearby Bicycles(模擬)

ACM 2017 香港區域賽 F-Nearby Bicycles(模擬)

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