Andysun06的博客

  • 首页
  • 文章列表 
  • 博客统计
  • 个人中心
Andysun06的博客
  1. 首页
  2. 其他
  3. 正文

【YbtOJ】雷达装置

2021年8月27日 145点热度 2人点赞 1条评论

题目

#include<bits/stdc++.h>
#define reint register int
#define ll long long
using namespace std;
struct nod{    //存雷达区间
    double l,r;
}f[1005];
int x[1005],y[1005],ans;
bool cmp(nod a,nod b){   //按右边缘排序
    return a.r<b.r;
}
int main(){
    int n,d;
    scanf("%d%d",&n,&d);
    for(reint i=1;i<=n;++i){
        scanf("%d%d",&x[i],&y[i]);
        if(abs(y[i])>d){   //如果无法与x边相交
            puts("-1");
            return 0;
        }
    }
    for(reint i=1;i<=n;++i){
        f[i].l=x[i]-sqrt(1ll*d*d-1ll*y[i]*y[i]);   //勾股计算左区间
        f[i].r=x[i]+sqrt(1ll*d*d-1ll*y[i]*y[i]);   //勾股计算右区间
    }
    sort(f+1,f+n+1,cmp);  //排序
    ans=1;  //计数
    double pos=f[1].r;  //现在第一个区间的右边缘建雷达
    for(reint i=2;i<=n;++i){
        if(f[i].l<=pos&&f[i].r>=pos)  //如果区间内已经有雷达
            continue;
        else
            ans++,pos=f[i].r;    //否则新增雷达
    }
    cout<<ans;
    return 0;
}

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: C++ YBTOJ 信息奥赛 原创 总结 笔记 题解
最后更新:2021年10月6日

Andysun06

王帅加油!!!

打赏 点赞
< 上一篇
下一篇 >

文章评论

  • 匿名

    链接:https://pan.baidu.com/s/1aG7Fui6VdExMBLQyNR9cZw
    提取码:1470
    复制这段内容后打开百度网盘手机App,操作更方便哦

    2021年12月15日
    回复
  • 取消回复

    COPYRIGHT © 2021 hackingfans.top. ALL RIGHTS RESERVED.

    THEME KRATOS MADE BY VTROIS

    油
    加
    王
    帅