(此配图来自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. atom 之 前端必备插件

    一. 语法支持 1. Language-label Ø ES2016.ESNext.JXS语法扩展 2. Language-postcss Ø Postcss语法高亮 二. 自动补全 1. Autoc ...

  2. iOS架构入门 - MVC模式实例演示

    MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能.除此之外,此模式通过对复杂度的简化,使程序结构更加直观 控制器(Controller)-- ...

  3. CS Requirements and Resources

    有感于国内令人发指的CS教育,决定以自学为主. 路线会按照计算机科学与技术的技能树,主要学习四大的比较完整的课程,video没时间看,但reading会仔细看.lab会认真做,对于一些比较有意义.代码 ...

  4. 有向图强连通分量SCC(全网最好理解)

    定义: 在有向图中,如果一些顶点中任意两个顶点都能互相到达(间接或直接),那么这些顶点就构成了一个强连通分量,如果一个顶点没有出度,即它不能到达其他任何顶点,那么该顶点自己就是一个强连通分量. 做题的 ...

  5. Java大数据秋招面试题

    以下为整理的自己秋招遇到的面试题:主要是Java和大数据相关题型:根据印象整理了下,有些记不起来了. 死锁.乐观锁.悲观锁synchronized底层原理及膨胀机制ReetrantLock底层原理,源 ...

  6. POJ2376Cleaning Shifts(区间覆盖贪心)

    应该还是蛮简单的一题,但是因为模拟太差,一直没调出来....... \(显而易见的应该按照左区间从小到大排序,相等按照右区间大到小排序\). \(那么第一个区间的l一定要是1,而且必拿(否则没有区间能 ...

  7. 系统基础优化 vim

    系统基础优化 vim 1系统基础优化 (CPU-lscpu 内存-free 磁盘-df 负载-w/uptime) 1.1 系统基础优化 准备工作:如何查看系统的信息 (1)cat /etc/redha ...

  8. matlab数值数据和变量名

    1.2MATLAB数值数据 l  数值数据类型的分类 l  数值数据的输出格式 l  常用数学函数内部函数 1.数值数据类型的分类 l  整型 l  浮点型 l  复数型 (1)整型 1.数值数据类型 ...

  9. NEON的比较是把所有的bit都设置为1

    NEON中的比较指令,如果结果为true,是把所有的bit都设置为1,而不是设置为1. ushort data1[4] = {129,0,136,255}; uint16x4_t v0 = vld1_ ...

  10. OpenWrt R2020.3.11 去广告 抗污染 加速 PSW 无缝集成 UnPnP NAS

    近期更新:OpenWrt R2020.3.11版本2020.03.16编译. 按大家要求,新发布固件携带了编译时用到的全部软件包 加入了国内域名加速解析脚本 解决了原去广告,DNS优化方案与PSW冲突 ...