(此配图来自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. 15个 MySQL 基础面试题,DBA 们准备好了吗?

    此前我们已经有发表过Linux 面试基础问答之一.二和三共3篇文章,获得读者的好评,同时我们得到反馈,有些读者希望这种交互式学习方法能够做得更加灵活.心动不如行动,我们这就为您奉上 15个 MySQL ...

  2. Nginx SSL/HTTPS 配置

    使用OpenSSL生成证书 1.生成RSA密钥的方法 openssl genrsa -des3 -out privkey.pem 2048 这个命令会生成一个2048位的密钥,同时有一个des3方法加 ...

  3. (PSO-BP)结合粒子群的神经网络算法以及matlab实现

    原理:           PSO(粒子群群算法):可以在全局范围内进行大致搜索,得到一个初始解,以便BP接力           BP(神经网络):梯度搜素,细化能力强,可以进行更仔细的搜索.数据: ...

  4. [svc]frp内网穿透

    什么是穿透 可以任意暴漏内网任何服务,加入你在你的办公网络有台pc,可以上网就可以了, 你可以在你电脑上安装各类服务器, 暴漏如80 22等端口, 注意 这可以暴漏到公网哦, 在出口不做任何nat情况 ...

  5. 【万字长文】别再报班了,一篇文章带你入门Python

    本文始发于个人公众号:TechFlow,原创不易,求个关注 最近有许多小伙伴后台联系我,说目前想要学习Python,但是没有一份很好的资料入门.一方面的确现在市面上Python的资料过多,导致新手会不 ...

  6. Nginx入门资料

    最近在学习Nginx,记录一下自己的学习历程. 1. Nginx开发从入门到精通 (淘宝技术团队编写,值得一看) 2. <深入理解Nginx:模块开发与架构解析> 3. Nginx模块开发 ...

  7. 练习//编写函数norepeat(arr) 将数组的重复元素去掉,并返回新的数组

    function norepeat(n){         for(var i=0;i<arr.length;i++){             for(var j=i+1;j<arr.l ...

  8. 在web项目中使用shiro(记住我功能)

    第一步,添加“记住我”复选框,rememberMe要设置参数 第二步,配置shiro的主配置文件 注意 rememberMeCookie对应的bean中要声明 <constructor-arg ...

  9. Spring源码阅读 之 bean的注册

    在前面我们已经学习了配置的加载,读取,解析.现在我们已经能够将一份配置转变成对应的一个个beandefinition了,我们知道Spring是一个IOC的容器,那么我们如何将这个一个个beandefi ...

  10. 201771010113 李婷华 《面向对象程序设计(Java)》第八周总结

    一.理论知识部分 1.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个接口. 2.在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.接口 ...