http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28415#problem/A

题目大意:X轴为海岸线可放雷达监测目标点,告诉n个目标点和雷达监测半径,求最少多少个雷达可全覆盖,如果不能输出-1;

解题思路:赤裸裸的区间选点问题(数轴上有n个闭区间,去尽量少的点,使每个区间至少有一个点)。核心思想就是贪心算法:把所有区间按照b从小到大的顺序(b相同时按a从大到小的顺序),贪心策略:第一区间取最后一个点,然后跳过接下来包含该点的区间,直到遇到不包含该点的区间最为选择第二点的区间,以此类推,直至最后一个区间。

//****************************************************************
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
struct QJ{ //定义一个区间类并重写排序函数
double l,r;
int flag;
};
bool operator<(const QJ& a,const QJ& b){
return (a.r==b.r ? a.l>b.l : a.r<b.r);
}
//****************************************************************
int main(){
double x,y;int n,kase=;
for(double d;cin>>n>>d;kase++){ if(n==&&d==)return ;
QJ qj[];
int ok=; //标记是否有超出雷达监测范围的目标 for(int i=;i<n;i++){ //输入目标点,并转化为X轴上的区间
cin>>x>>y;
if(fabs(y)>d)ok=;
else if(ok){
double ban=sqrt(d*d-y*y);
qj[i].l=x-ban;
qj[i].r=x+ban;
qj[i].flag=;
}
} if(ok==)cout<<"Case "<<kase<<": "<<"-1\n";
else{ //如果都在监测范围内,则贪心求解
sort(qj,qj+n);
int sum=;
double point=qj[].r;
for(int j=;j<n;j++){
if(qj[j].l>point){
point=qj[j].r;
sum++;
}
}
cout<<"Case "<<kase<<": "<<sum<<'\n';
}
}
return ;
}
//****************************************************************

[ACM_贪心] Radar Installation的更多相关文章

  1. 贪心 Radar Installation (求最少探测雷达)

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

  2. 贪心 POJ 1328 Radar Installation

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

  3. poj 1328 Radar Installation(贪心)

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

  4. poj 1328 Radar Installation (简单的贪心)

    Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42925   Accepted: 94 ...

  5. POJ--1328 Radar Installation(贪心 排序)

    题目:Radar Installation 对于x轴上方的每个建筑 可以计算出x轴上一段区间可以包含这个点 所以就转化成 有多少个区间可以涵盖这所有的点 排序之后贪心一下就ok 用cin 好像一直t看 ...

  6. POJ 1328 Radar Installation 贪心 A

    POJ 1328 Radar Installation https://vjudge.net/problem/POJ-1328 题目: Assume the coasting is an infini ...

  7. 【贪心】「poj1328」Radar Installation

    建模:二维转一维:贪心 Description Assume the coasting is an infinite straight line. Land is in one side of coa ...

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

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

  9. Radar Installation(贪心)

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

随机推荐

  1. Charles

    1. charles使用教程指南+客户端弱网测试:http://blog.csdn.net/anualday/article/details/51423457 2.使用Charles对Https请求进 ...

  2. asp.net 跨域服务器 上传文件

    最近一个项目遇到问题,公司局域网中,在F域下有个服务器Fa,我们的项目就部署在Fa.项目里面有个功能,需要把生成的文件(.doc,.xls,.pdf)保存到O域的一台文件共享服务器Ob.在原有的网络环 ...

  3. PBX 评测二

    //由于诸事繁多,结果评测一拖再拖. 博客园的优化还行啊,PBX220搜索, 第一页,第四个就是上一篇的评测文章. 配置没有什么说的(按照说明/还有这篇无线迷你IPPBX-PBX220). 以下是在公 ...

  4. oracle权限语句大全

    Oracle 系统默认的几个用户: sys --------网络管理用户,具有最高数据库管理权限 system------本地管理用户,权限次于sys scott-------普通用户,默认是锁住的( ...

  5. img 是内联元素

    图片是内联元素 ,同时是内联替换元素(替换元素是能设置宽和高的) 取消图片的magin display:block;(一般初始化标签中会把图片设置成块状) replaced element <i ...

  6. C++builder中使用TScrollBox 以后,让scrollBox相应鼠标的上下滑动

    1.在窗口的事件里搜索 mouseWheel的方法 2.在.cpp文件里实现下面的代码 void __fastcall TForm1::mouseWheel(TObject *Sender, TShi ...

  7. Matlab-Octave中绘制网格图和等高线:mesh 和 surf

    x=linspace(-50, 50, 50); % 在x轴上取50点y=linspace(-25, 25, 25); % 在y轴上取25点[xx,yy]=meshgrid(x, y); % xx和y ...

  8. HTML5中的 Canvas

    什么是Canvas? Canvas元素是HTML5的一部分,允许脚本语言动态渲染位图像.Canvas由一个可绘制地区HTML代码中的属性定义决定高度和宽度.JavaScript代码可以访问该地区,通过 ...

  9. python 装饰器学习(decorator)

    最近看到有个装饰器的例子,没看懂, #!/usr/bin/python class decorator(object): def __init__(self,f): print "initi ...

  10. DOM技术实现竞赛题页面

    DOM技术实现竞赛题页面 这一段时间学习了DOM操作和JS开发,我就自己开发一个竞赛题的页面. 一.业务需求 1.目标:做一个一百道选择题的页面 2.功能: 显示题目和选项. 下一题上一题的按钮,到第 ...