题意:雷达如何放置?在xoy二维平面坐标系里面,x轴上方的为岛屿,x轴下方的是雷达要放到位置,如何放使得雷达放的最少?

思路

  1. 肯定放在x轴上减少浪费是最好的选择
  2. 什么情况下,雷达无法到达呢?--以这个岛屿为圆心,d为半径,如果这个圆与x轴没有交点的话,就是无法覆盖到---即y>d
  3. 现在就可以这么想了,每个岛屿都当成圆心C,然后都取画圆,跟x轴的交点例如交点A,B.如果雷达放到AB之间那就是可以将刚才C覆盖住了。--转为区间贪心问题

区间贪心问题:

  1. 先将各个区间的左端点按照从小到大排序
  2. 然后按递增序列开始选取区间,有两种情况 实例说明

pos---为当前位置 lefe,right分别为当前区间的左右端点

if(pos<left){ num++;pos=right;}

if(pos>right) {pos=right;}

注:针对本题num为雷达的数量

数学方法

C(x,y) 圆的方程(X-x)^2+(Y-y)^2=d^2   与x轴的交点为 x+根号(d^2-y^2) ,x-根号(d^2-y^2)

解题代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <math.h>
using namespace std;
typedef struct Node
{
double left, right;
}node;
int cmp(node a, node b)
{
return a.left < b.left;
}
int x[], y[];
node dis[];
int main()
{
int n, d;
double z;
int ans = ;
while (scanf("%d%d", &n, &d) != EOF)
{
if (n == && d == )
break;
else
{
int flag = ;
ans++;
for (int i = ; i < n; i++)
{
scanf("%d%d", &x[i], &y[i]);
if (y[i] > d)
flag = ;
else
{
z = sqrt(d*d*1.0 - y[i] * y[i] * 1.0);
dis[i].left = x[i] - z;
dis[i].right = x[i] + z;
}
}
if (!flag)
{
printf("Case %d: -1\n", ans);
}
else
{
sort(dis, dis + n, cmp);
int num = ;
double p = -;
for (int i = ; i < n; i++)
{
if (dis[i].left > p)
{
num++;
p = dis[i].right;
}
else if (dis[i].right < p)
{
p = dis[i].right;
}
}
printf("Case %d: %d\n", ans, num);
}
}
}
return ;
}

poj 1328 安雷达问题 贪心算法的更多相关文章

  1. POJ 1328 Radar Installation【贪心】

    POJ 1328 题意: 将一条海岸线看成X轴,X轴上面是大海,海上有若干岛屿,给出雷达的覆盖半径和岛屿的位置,要求在海岸线上建雷达,在雷达能够覆盖全部岛屿情况下,求雷达的最少使用量. 分析: 贪心法 ...

  2. POJ 1328 安装雷达 (贪心)

    <题目链接> 题目大意: 以x轴为分界,y>0部分为海,y<0部分为陆地,给出一些岛屿坐标(在海中),再给出雷达可达到范围,雷达只可以安在陆地上,问最少多少雷达可以覆盖所以岛屿 ...

  3. poj 1328 Radar Installatio【贪心】

    题目地址:http://poj.org/problem?id=1328 Sample Input 3 2 1 2 -3 1 2 1 1 2 0 2 0 0 Sample Output Case 1: ...

  4. POJ 1328 Radar Installation【贪心 区间问题】

    题目链接: http://poj.org/problem?id=1328 题意: 在x轴上有若干雷达,可以覆盖距离d以内的岛屿. 给定岛屿坐标,问至少需要多少个雷达才能将岛屿全部包含. 分析: 对于每 ...

  5. poj 1328 Radar Installation(贪心)

    Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...

  6. POJ 1328 Radar Installation 【贪心 区间选点】

    解题思路:给出n个岛屿,n个岛屿的坐标分别为(a1,b1),(a2,b2)-----(an,bn),雷达的覆盖半径为r 求所有的岛屿都被覆盖所需要的最少的雷达数目. 首先将岛屿坐标进行处理,因为雷达的 ...

  7. poj 1328 Radar Installation【贪心区间选点】

    Radar Installation Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Java/Other) ...

  8. poj 2586 Y2K Accounting Bug(贪心算法,水题一枚)

    #include <iostream> using namespace std; /*248K 32MS*/ int main() { int s,d; while(cin>> ...

  9. poj 1328 Radar Installation 排序贪心

    Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 56702   Accepted: 12 ...

随机推荐

  1. 专题《一》mysql优化 ---------主从复制,读写

    主从复制是mysql自带的功能,读写分离用第三方插件 主从复制作用:读写分离(mycat),数据备份,高可用,集群 原理:二进制sql执行文件-----insert,update,delete,cre ...

  2. 走进docker的世界之入门篇

    by zhouzhipeng from https://blog.zhouzhipeng.com/walk-in-docker-beginning.html本文可全文转载,但需要保留原作者和出处. 什 ...

  3. JAVA变量介绍

    1.变量: 变量是内存中存储数据的小盒子(小容器),用来存数据和取数据: 2.计算机存储设备的最小信息单元叫位(bit   b); 计算机最小的存储单元叫字节(byte B);   存储单位有(bit ...

  4. CF713C Sonya and Problem Wihtout a Legend & hihocoder1942 单调序列

    这两个题是一样的,不过数据范围不同. 思路1: 在CF713C中,首先考虑使生成序列单调不下降的情况如何求解.因为单调上升的情况可以通过预处理将a[i]减去i转化成单调不下降的情况. 首先,生成的序列 ...

  5. 《移动Web前端高效开发实战》笔记2——使用Gulp构建一个ECMAScript 6和Sass应用

    8.3.1 安装和配置 运行Gulp需要Node.js环境,请参看第二章内容搭建Node.js环境.使用NPM全局安装Gulp,命令如下: npm install gulp-cli –g 然后,在项目 ...

  6. Jenkins系列——使用SonarQube进行代码质量检查

    1.目标 之前已经写过一篇关于Jenkins和SonarQube的一篇博客<jenkins集成sonar>,本文在参考前文的基础上,做了详细的补充. 使用SonarQube进行代码质量检查 ...

  7. Java 反射机制(二)

    <Core Java Volume I --- Fundamentals>介绍了三种创建Class对象的方法.本文将举例说明这三种创建Class对象---创建类的方法. 一.public ...

  8. POJ Charlie's Change 查理之转换(多重背包,变形)

    题意: 给定身上的4种硬币,分别是1 ,5 ,10, 25面额各有多张,要求组成面额p的硬币尽可能多.输出组成p的4种硬币各自的数量. 思路: 多重背包,300+ms.用01背包+二进制的方法.记录下 ...

  9. js创建弹框(提示框,待确认框)

    ;;} html,body{text-size-adjust:none;-webkit-text-size-adjust:none;-webkit-user-select:none;} a{color ...

  10. atoi 函数实现

      要考虑的东西实在也挺多的.总结如下:   1 前面空格分隔符号的时候   2 第一个符号位处理+ -   3 遇到非数字字符退出   4 为正数的时候,大于INT_MAX上溢   5 为负数的时候 ...