(此配图来自http://blog.csdn.net/zhengnanlee/article/details/9613161)

图中ABCD为海岛的位置。题目中会给出几个海岛的坐标位置,雷达覆盖半径d,问你用几个雷达可实现海岛的全部覆盖,不能就输出-1。

观察图可知:(ABCD已经按照左交点数的大小好位置)

A的右交点>B的左交点,所以AB可共用一个雷达;

B的右交点>C的左交点,所以BC可共用一个雷达;

C的右交点<D的左交点,所以CD不可共用一个雷达;

所以一共用2个雷达即可实现岛屿的全部覆盖。

注意,但岛屿的坐标y的绝对值大于时d,根据勾股定理可知,此时的d<r,即圆心以d为半径所画的圆与x轴是没有交点的,

即这个岛屿绝对无法被雷达覆盖,所以可以直接跳出循环,输出-1。

#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <math.h>
using namespace std; //设圆心为point
struct point
{
double left; //左交点
double right; //右交点
}p[], temp; //p[2010]为圆心数组,temp为指针 //定义小于的运算。代表sort()的排序对象是各圆心与x轴的左交点。
bool operator < (point a, point b)
{
return a.left < b.left;
} int main()
{
int n;
double r;
int kase =;
while (cin >> n >> r )
{
if(n==&&r==)
{
break;
} bool flag = false;
//通过输入的各圆心坐标求出各自与x轴的左右交点坐标
for (int i = ; i < n; i++)
{
double a, b; //x=a,y=b;
cin >> a >> b;
if (fabs(b) > r) //y=b>r表示此时的圆心以r为半径画的圆与x轴没有交点
{
flag = true;
}
else
{
p[i].left = a * 1.0 - sqrt(r * r - b * b); //左交点
p[i].right = a * 1.0 + sqrt(r * r - b * b); //右交点
}
}
cout << "Case " << kase++ << ": ";
if (flag) //代表有的圆与x轴没有交点,即无法实现岛屿的全部覆盖
{
cout << - << endl;
}
else
{
int countt = ;
sort(p, p + n); //对数组p[n]里面的左右交点进行排序
temp = p[]; //用指针temp指向第一个数组元素的地址 //对当前指针指向的圆心的右交点 与 下一个元素的左交点进行比较大小
for (int i = ; i < n; i++)
{
if (p[i].left > temp.right) //如果下一个圆心的左交点>此时圆心的右交点
{
countt++; //则当前的雷达数无法实现所有圆心的覆盖,需要多加1个雷达进行覆盖下一个圆心。
temp = p[i]; //此时指针指向数组的下一个元素
}
else if (p[i].right < temp.right) //如果下一个圆心的左交点<此时圆心的右交点
{
temp = p[i]; //则当前的雷达数可以实现所有圆心的覆盖,即可以覆盖到下一个圆心。
}
}
cout << countt << endl;
}
}
}

Poj1328 用雷达覆盖所有的岛屿的更多相关文章

  1. poj1328贪心 雷达,陆地,岛屿问题

    Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 60381   Accepted: 13 ...

  2. 雷达覆盖,贪心,类似活动安排(POJ1328)

    题目链接:http://poj.org/problem?id=1328 解题报告: 1.按照头结点排序. #include <cstdio> #include <cmath> ...

  3. 贪心 POJ 1328 Radar Installation

    题目地址:http://poj.org/problem?id=1328 /* 贪心 (转载)题意:有一条海岸线,在海岸线上方是大海,海中有一些岛屿, 这些岛的位置已知,海岸线上有雷达,雷达的覆盖半径知 ...

  4. 《挑战程序设计竞赛》2.2 贪心法-区间 POJ2376 POJ1328 POJ3190

    POJ2376 Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14585   Accepte ...

  5. 雷达装置 (POJ 1328/ codevs 2625)题解

    [问题描述] 假定海岸线是一条无限延伸的直线,陆地在海岸线的一边,大海在另一侧.海中有许多岛屿,每一个小岛我们可以认为是一个点.现在要在海岸线上安装雷达,雷达的覆盖范围是d,也就是说大海中一个小岛能被 ...

  6. POJ1328——Radar Installation

    Radar Installation Description Assume the coasting is an infinite straight line. Land is in one side ...

  7. 贪心问题:区间覆盖 POJ 1328 Rader Installation

    题目:http://poj.org/problem?id=1328 题意:给定海岛个数,雷达半径,输入各个海岛坐标,求能覆盖所有海岛的最少雷达数 题解: 1. 贪心的区间覆盖问题,尽量让每个雷达覆盖更 ...

  8. POJ-1328-放置雷达

    这是一道贪心的题目,首先我们要知道,我们放置雷达的话我们可以做一个转换,就是已知岛屿的点坐标的时候,我们可以算一下,这个点以d为半径与x轴交点之间的线段在x轴上的投影,然后我们只需要在这个投影范围内设 ...

  9. [ACM] HDU 2295 Radar (二分法+DLX 重复覆盖)

    Radar Problem Description N cities of the Java Kingdom need to be covered by radars for being in a s ...

随机推荐

  1. Linux / mac OS Shell常用命令

    一.文件.目录操作命令 1.ls命令 功能:显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示文件属性,包括大小,日期,符号连接,是否可 ...

  2. Vue项目中实现图片懒加载

    个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! ---对于图片过多的页面,为了加速页面加载速度,所以很多时候我们需要将页面 ...

  3. 前端程序员难翻身,没有好的学习方法,你永远无法成功,vue.js专题

    学习vue正确思路,是先学vue-cli,再学vue.js单文件引用的用法,这样会在极短时间内撤底撑握vue, 如果先学vue.js单文件用法,再去学vue-cli4,可以说是重新学vue,,,,难处 ...

  4. 码云git本地仓库链接远程仓库

    原文链接: 点我 git提交时,仓库是空的,本地有源码   应该打开cmd   归到项目路径 然后输入git push -u origin master -f 是把本地的项目强制推送到空的仓库 git ...

  5. 【Java8新特性】一张图带你领略Java8有哪些新特性

    写在前面 很多小伙伴留言说,冰河你能不能写一些关于Java8的文章呢,看书看不下去,看视频进度太慢.好吧,看到不少读者对Java8还是比较陌生的,那我就写一些关于Java8的文章吧,希望对大家有所帮助 ...

  6. andorid jar/库源码解析之Butterknife

    目录:andorid jar/库源码解析 Butterknife: 作用: 用于初始化界面控件,控件方法,通过注释进行绑定控件和控件方法 栗子: public class MainActivity e ...

  7. OpenCV 4下darknet修改

    darknet的安装使用直接在官网上获取.https://pjreddie.com/darknet/ 但我用的是OpenCV4.1.1,make时会在image_opencv.cpp中有两个错误. 1 ...

  8. CC2530串口通信

    任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX). RX:接收数据串行输入.通过采样技术来区别数据和噪音,从而恢复数据. TX :发送数据输出.当发送器被禁止时,输出引 ...

  9. C++11之STL多线程

    STL库跨平台: VS2010不支持std::thread库,至少VS2012/2013及其以上可以: 一.库概要 (1)std::thread成员函数 thread(fun, args...); / ...

  10. 软路由OpenWrt(LEDE)2020.4.4编译 UnPnP+NAS+多拨+网盘+DNS优化

    近期更新:2020.04.24编译-基于OpenWrt R2020.3.19版本.   2020.04.04更新记录: 修正国内域名加速脚本部分缺陷 内置打印机共享,ZeroTier 新增多套主题 S ...