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

本文介绍了一个基于距离限制的共享单车分配算法,通过计算用户与车辆之间的距离,统计每位用户可使用车辆的数量。采用暴力模拟方法实现,注意坐标输入输出细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值