AcWing 112. 雷达设备(区间贪心)

[题目概述]

假设海岸是一条无限长的直线,陆地位于海岸的一侧,海洋位于另外一侧。
每个小岛都位于海洋一侧的某个点上。
雷达装置均位于海岸线上,且雷达的监测范围为 d,当小岛与某雷达的距离不超过 d 时,该小岛可以被雷达覆盖。
我们使用笛卡尔坐标系,定义海岸线为 x 轴,海的一侧在 x 轴上方,陆地一侧在 x 轴下方。
现在给出每个小岛的具体坐标以及雷达的检测范围,请你求出能够使所有小岛都被雷达覆盖所需的最小雷达数目。

输入格式

第一行输入两个整数 n 和 d,分别代表小岛数目和雷达检测范围。
接下来 n 行,每行输入两个整数,分别代表小岛的 x,y 轴坐标。
同一行数据之间用空格隔开。

输出格式

输出一个整数,代表所需的最小雷达数目,若没有解决方案则所需数目输出 −1。

数据范围

1 ≤ n ≤ 1000,
−1000 ≤ x, y ≤ 1000

输入样例:

3 2
1 2
-3 1
2 1

输出样例:

2 

分析题意
按照题意我们能画出来这个图,就是让我们求,最少几个红圆就能将所有点覆盖。
请添加图片描述
但是通过这个圆求范围我们是不好求的,可以将其转换一下,变成区间问题,看每个小岛雷达的可安置范围,如果多个小岛的安置范围有重合,那么我们只要安一个雷达就能全覆盖。只有不重合的区间我们才需要安多个雷达
请添加图片描述
这就是典型的区间贪心问题。
取雷达:我们每次取都是取区间的右端点,因为我们的排序是按照右端点地递增的顺序来排,如果两个区间重合,那么我们取的点一定是在重合的范围内的,如果两个区间没有交集,那么上次取的点一定是在此区间左端点的左边请添加图片描述
红色的标记就是我们需要的雷达
完整代码(详细注释)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define x first
#define y secondusing namespace std;
typedef pair<double, double> PDD;
const int N = 1010;
int n, d;
PDD seg[N];
int main (){cin >> n >> d;// 判断是否有解bool is_failed = false;for(int i = 0; i < n; i ++){int x, y;cin >> x >> y;if(y > d){is_failed = true;break;} double len = sqrt(d * d - y * y);// 存放的顺序是区间右端点和左端点,方便比较seg[i] = {x + len, x - len};}if(is_failed){cout << -1;}else {// 将区间排序,保证右端点是递增的sort(seg, seg + n);int cnt = 0, last = -1e20;for(int i = 0; i < n; i ++){// 取雷达条件,if(last < seg[i].y){cnt ++; last = seg[i].x;}}cout << cnt << endl;}return 0;
}
  • 本题的分享就结束了,此题属于区间贪心的经典问题,可以多思考一下,第一次做应该是想不到的,有问题欢迎留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/683454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验5-4 使用函数计算两点间的距离

本题要求实现一个函数&#xff0c;对给定平面任意两点坐标(x1​,y1​)和(x2​,y2​)&#xff0c;求这两点之间的距离。 函数接口定义&#xff1a; double dist( double x1, double y1, double x2, double y2 );其中用户传入的参数为平面上两个点的坐标(x1, y1)和(x2, y2)&…

[Angular 基础] - 自定义事件 自定义属性

[Angular 基础] - 自定义事件 & 自定义属性 之前的笔记&#xff1a; [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 以上是能够实现渲染静态页面的基础 之前的内容主要学习了怎么通过…

科技魔法!阿里通义千问让你跟随音乐摇摆起来!

2024年&#xff0c;一个名叫《科目三》的舞蹈在众多社交平台上火爆开来。它的火爆程度&#xff0c;甚至让一向以科技惊人闻名的亿万富翁马斯克也不得不对其前来“致敬”。然而&#xff0c;学习这种舞蹈却是一项颇具挑战的任务&#xff0c;尤其是对于四肢并非十分协调的人来说。…

第13章 网络 Page727~728 asio定时器例子:后创建的定时器先产生到点事件

代码&#xff1a; 35行&#xff0c;42行&#xff0c;51行&#xff0c;分别构造三个对象&#xff0c; 36行&#xff0c;43行&#xff0c;52行&#xff0c;设置了三个任务peng1、peng2、peng3&#xff0c;并将任务交给io_service对象&#xff08;不需要ios的run()方法启动起来&a…

如何创建和填写 PDF 表单,简化您的文档工作流

阅读本文&#xff0c;了解如何在开源办公套件 ONLYOFFICE 中创建和填写 PDF 表单。 ONLYOFFICE表单发展小史 ONLYOFFICE 表单首个版本发布于2022年1月18日&#xff0c;是 ONLYOFFICE 版本 7.0 更新的一部分。 您可以使用 ONLYOFFICE 表单&#xff0c;创建各种类型的模板文档&a…

记1024创作纪念日感想

2024.02.15 初心 不得不感慨时间过得真的很快&#xff0c;不知不觉距离我第一次写文章已经过去了1024天。我很自豪的一件事就是截止目前我依然保持着我写博客的初心。 希望通过我的文章&#xff0c;尽可能地帮助到渴望收获知识的人。在我过去读书和工作的生涯中&#xff0c;…

Linux多线程[一]

引入知识 进程在线程内部执行是OS的系统调度单位。 内核中针对地址空间&#xff0c;有一种特殊的结构&#xff0c;VM_area_struct。这个用来控制虚拟内存中每个malloc等申请的空间&#xff0c;来区别每个malloc的是对应的堆区哪一段。OS可以做到资源的精细度划分。 对于磁盘…

java的线程串行和并行执行

package chapter03;public class Test01 {public static void main(String[] args) {//串行执行&#xff1a;多个线程连接成串&#xff0c;然后按照顺序执行//并非执行:多个线程是独立的&#xff0c;誰抢到了CPU的执行权&#xff0c;誰就能执行Mythread1 t1 new Mythread1();M…

springboot/ssm二手物品交易系统Java校园闲置物品管理系统

springboot/ssm二手物品交易系统Java校园闲置物品管理系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&am…

Android之Android.bp文件格式语法(一百八十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

vue学习106-120

创建项目p106 router&#xff0c;store和app.vue不用删 清一下router里的路由配置 vant组件库p107 目标&#xff1a;认识第三方vue组件库vant-ui&#xff08;cv战士&#xff09; 封装好了的组件整合在一起就是组件库 http://vant-contrib.gitee.io/vant/v2/#/zh-CN/ vue2用va…

2024.02.13作业

21. c 22. b 23. b 5先出栈意味着1234都在栈内&#xff0c;此时1不能比2&#xff0c;3先出栈 24. b, c, d: 10, 12, 120 25. 2, 5 26. 数组越界&#xff0c;可能出现段错误 27. 0, 41 28. 1, 320 29. *a *b; *b *a - *b; *a - *b; 30. 0x801005&#xff1b;0x8…

计算机设计大赛 深度学习YOLOv5车辆颜色识别检测 - python opencv

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0…

Java实现贫困地区人口信息管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 人口信息管理模块2.2 精准扶贫管理模块2.3 特殊群体管理模块2.4 案件信息管理模块2.5 物资补助模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 人口表3.2.2 扶贫表3.2.3 特殊群体表3.2.4 案件表3.2.5 物资补助表 四…

Spring Boot开启SSL/Https进行交互。

为2个springboot工程开启进行SSL进行交互的认证步骤 //哪个犬玩意举报我侵权的? 一、认证步骤 1、 为服务器生成证书 keytool -genkey -v -alias testServer -keyalg RSA -keystore E:\ssl\testServer.p12 -validity 36500 2、 为客户端生成证书 keytool -genkey -v -alias…

幻兽帕鲁连接游戏时提示:Format Error Example: 127.0.0.1:7777 怎么办?

检查你在连接游戏时&#xff0c;输入的内容是否正确&#xff0c;一般格式为&#xff1a;幻兽帕鲁游戏服务器公网IP:8211 例如&#xff0c;你的幻兽帕鲁游戏服务器公网IP为&#xff1a;12.13.14.15&#xff0c;那么&#xff0c;你在连接游戏时需要输入12.13.14.15:8211&#xff…

NARF关键点检测及SAC-IA粗配准

一、生成对应深度图 C #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/io.h> #include <pcl/range_image/range_image.h> #include <pcl/visualization/range_image_visualizer.h>…

动态内存管理:new和delete的底层探索

之前我们在C语言上是学过malloc和calloc还要realloc等函数来在堆上获取相应的内存&#xff0c;但是这些函数是存在缺陷的&#xff0c;今天引入对new和delete的学习&#xff0c;来了解new和delete的底层实现。 首先就是在C中我们为什么要对内存进行区域的分块&#xff1f; 答案…

SpaCy的使用例子总结

当使用Spacy进行自然语言处理时&#xff0c;常见的用例包括文本分词、命名实体识别、词性标注、句法分析等。下面是一些常见的使用例子及相应的代码&#xff1a; 文本分词&#xff08;Tokenization&#xff09;&#xff1a; 将文本划分成单词或标点符号等基本单元。 import …

数据分析 — Pandas 分组聚合

目录 一、函数应用和映射1、apply2、map 二、汇总和描述统计1、计算平均值2、计算中位数3、计算总和4、找到最小值5、找到最大值6、计算标准差7、计算方差8、计算非空值的数量9、生成摘要统计信息10、计算唯一值的频率 三、str 属性1、str.len()2、str.lower() 和 str.upper()3…