#tANXINlydlt00x0705. 雷达设备 Radar Installation
雷达设备 Radar Installation
雷达安装问题
题目描述
假设海岸是一条无限长的直线,陆地位于海岸的一侧,海洋位于另外一侧。
每个小岛都位于海洋一侧的某个点上。
雷达装置均位于海岸线上,且雷达的监测范围为 ,当小岛与某雷达的距离不超过 时,该小岛可以被雷达覆盖。
我们使用笛卡尔坐标系,定义海岸线为 轴,海的一侧在 轴上方,陆地一侧在 轴下方。
现在给出每个小岛的具体坐标以及雷达的检测范围,请你求出能够使所有小岛都被雷达覆盖所需的最小雷达数目。
输入格式
第一行输入两个整数 和 ,分别代表小岛数目和雷达检测范围。
接下来 行,每行输入两个整数,分别代表小岛的 , 轴坐标。
同一行数据之间用空格隔开。
输出格式
输出一个整数,代表所需的最小雷达数目,若没有解决方案则所需数目输出 。
输入输出样例 #1
输入 #1
3 2
1 2
-3 1
2 1
输出 #1
2
输入输出样例 #2
输入 #2
4 3
0 1
2 2
3 1
5 1
输出 #2
2
限制条件
样例解释 #1
小岛坐标:
雷达监测范围
首先判断是否有解:如果某个小岛的纵坐标 ,则该小岛无法被任何雷达覆盖,输出 。
这里所有小岛的纵坐标都 ,所以有解。
对于每个小岛 ,可以计算出在海岸线( 轴)上能够覆盖该小岛的雷达位置区间:
- 雷达到小岛的距离
- 设雷达位置为 ,小岛位置为
- 距离公式:
- 解得:
对于样例1:
- 小岛1 :,区间
- 小岛2 :,区间
- 小岛3 :区间
现在问题转化为:在数轴上有若干个区间,选择最少的点,使得每个区间内至少有一个点。
使用贪心算法:
- 将所有区间按右端点从小到大排序
- 遍历每个区间:
- 如果当前区间的左端点 > 上一个雷达的位置,则需要新建一个雷达,雷达位置设在该区间的右端点
- 否则,当前区间可以被上一个雷达覆盖
对于排序后的区间:
- 小岛2:
- 小岛1:
- 小岛3:
贪心过程:
- 第一个雷达:放在区间1的右端点
- 区间2:左端点 ,需要新雷达,放在区间2的右端点
- 区间3:左端点 ,可以被第二个雷达覆盖
需要2个雷达,输出2。