当前位置: 首页 > news >正文

Acwing---112.雷达设备

雷达设备

  • 1.题目
  • 2.基本思想
  • 3.代码实现

1.题目

假设海岸是一条无限长的直线,陆地位于海岸的一侧,海洋位于另外一侧。

每个小岛都位于海洋一侧的某个点上。

雷达装置均位于海岸线上,且雷达的监测范围为 d,当小岛与某雷达的距离不超过 d时,该小岛可以被雷达覆盖。

我们使用笛卡尔坐标系,定义海岸线为 x 轴,海的一侧在 x轴上方,陆地一侧在 x 轴下方。

现在给出每个小岛的具体坐标以及雷达的检测范围,请你求出能够使所有小岛都被雷达覆盖所需的最小雷达数目。

输入格式
第一行输入两个整数 n和 d,分别代表小岛数目和雷达检测范围。

接下来 n 行,每行输入两个整数,分别代表小岛的 x,y轴坐标。

同一行数据之间用空格隔开。

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

数据范围
1≤n≤10001≤n≤10001n1000,
−1000≤x,y≤1000−1000≤x,y≤10001000x,y1000

输入样例:

3 2
1 2
-3 1
2 1

输出样例:

2

2.基本思想

贪心 O(nlogn)

如下图所示,对于任意一个小岛 (x,y)我们都可以在海岸线上求出能覆盖该小岛的建造雷达的区间 [a,b]

在这里插入图片描述
由勾股定理可知:
在这里插入图片描述
将所有小岛转化成区间后,问题转化为:给定 n 个区间,在 x 轴上选择尽量少的点,使得所有区间至少包含一个点。

算法步骤:

  • 1.将所有区间按右端点从小到大排序;
    1. 依次考虑每个区间:
      如果当前区间包含最后一个选择的点,则直接跳过;
      如果当前区间不包含最后一个选择的点,则在当前区间的右端点的位置选一个新的点;

3.代码实现

import java.util.Arrays;
import java.util.Scanner;public class Main {static Scanner sc = new Scanner(System.in);static int N = 1010;static Pair seg[] = new Pair[N];static double esp = 10e-6;static class Pair implements Comparable<Pair> {double l, r;public Pair(double l, double r) {this.l = l;this.r = r;}@Overridepublic int compareTo(Pair o) {return Double.compare(this.r, o.r);}}public static void main(String[] args) throws Exception {int n = sc.nextInt();//小岛数int d = sc.nextInt();//雷达半径for (int i = 1; i <= n; i++) {int x = sc.nextInt();int y = sc.nextInt();if (y > d) {System.out.println("-1");return;}double len = Math.sqrt(d * d - y * y);//每个岛 投射到x轴上的左、右端点seg[i] = new Pair(x - len, x + len);}//对所有区间 排序Arrays.sort(seg, 1, n + 1);int res = 0;double lastNode = Integer.MIN_VALUE;  //上一个雷达位置//以上一个点的右端点 判断是否在当前区间的左端点内for (int i = 1; i <= n; i++) {if (seg[i].l > lastNode) {   //下一段区间的起始点在上一个雷达的右边 即没有交集 则需要加入新的雷达res++;lastNode = seg[i].r;//更新}}System.out.println(res);}
}
http://www.lryc.cn/news/268.html

相关文章:

  • SSJ-21A AC220V静态【时间继电器】
  • m序列发生器——Verilog设计
  • Mysql—触发器
  • DVWA靶场通关和源码分析
  • RocketMQ5.0.0消息存储<二>_消息存储流程
  • 【单片机方案】蓝牙体温计方案介绍
  • React 的受控组件和非受控组件有什么不同
  • 【逐步剖C】-第六章-结构体初阶
  • Java 并发在项目中的使用场景
  • 15.面向对象程序设计
  • Element UI框架学习篇(一)
  • 【算法】【C语言】
  • 【✨十五天搞定电工基础】基本放大电路
  • MyBatis 入门教程详解
  • shiro、springboot、vue、elementUI CDN模式前后端分离的权限管理demo 附源码
  • 智能优化算法——粒子群优化算法(PSO)(小白也能看懂)
  • Lesson 6.4 逻辑回归手动调参实验
  • Oracle数据库入门大全
  • C语言操作符详解(下)
  • 【五六七人口普查】我国省市两级家庭户住房状况
  • 大数据框架之Hadoop:入门(二)从Hadoop框架讨论大数据生态
  • 负载均衡反向代理下的webshell上传+apache漏洞
  • 打造安全可信的通信服务,阿里云云通信发布《短信服务安全白皮书》
  • Python项目实战——外汇牌价(附源码)
  • String、StringBuffer、StringBuilder有什么区别?
  • python基于django+vue的高铁地铁火车订票管理系统
  • 全栈自动化测试技术笔记(一):前期调研怎么做
  • 专家培养计划
  • 583. 两个字符串的删除操作 72. 编辑距离
  • [多线程进阶] 常见锁策略