【codeforces】Radar Installation

本文探讨了一道涉及C语言编程的有趣问题:如何通过计算圆形区域来确定所需的雷达数量以实现有效覆盖。作者分享了自己在解决该问题过程中遇到的挑战及解决方案,特别是对于输出格式的细节进行了反思。

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

这里写图片描述
这里写图片描述
别说话,看注释。

#include<stdio.h>//此题犯了一个超级二,又很可能被忽略而出现的问题
                 //输出-1的时候我竟然忘了Cace %d:格式了 / 大哭/哇/ 
#include<math.h>
#include<algorithm>
using namespace std;
struct note {
    double front;
    double back;
} s[1010];
bool judge(note a,note b) {
    if(a.front==b.front)//因为后面的圆包含在内的话前面的圆一定在内,
//而后面圆不在内的话正好加一(这俩一定用一个雷达的,主要是和前面一个圆比较)
        return a.back>b.back;
    return a.front<b.front;
}
int main() {
    double d;
    int p=0,n;
    while(scanf("%d %lf",&n,&d),n||d) {
        double x,y,mark=1;
        double temp;
        for(int l=1; l<=n; l++) {
            scanf("%lf %lf",&x,&y);
            temp=d*d-y*y;
            if(temp<0||d<0)//
                mark=0;
            else if(mark) {
                s[l].front=x+sqrt((double)d*d-(double)y*y);
                s[l].back=x-sqrt((double)d*d-(double)y*y);
            }
        }
        if(!mark) {
            printf("Case %d: -1\n",++p);
            continue;
        }
        int sum=1;
        sort(s+1,s+n+1,judge);
        temp=s[1].front;
        for(int l=2; l<=n; l++) {
            if(temp<s[l].back) {
                sum++;
                temp=s[l].front;
            }
        }
        printf("Case %d: %d\n",++p,sum);
    }
    return 0;
}

http://acm.hust.edu.cn/vjudge/contest/123357#problem/G

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值