poj 1328 Radar Installation
题目链接:http://poj.org/problem?id=1328
题意:
设x轴为海岸,下方为陆地,上方为海。海上有n个岛屿,现在需要用雷达将所有的岛屿覆盖起来。给定岛屿个数及每个岛屿的坐标,给定雷达覆盖半径,求覆盖所有岛屿所需雷达最小数。(PS:雷达只能安置在海岸上)
设将雷达建在每个岛屿上,求出覆盖海岸的区间。将这些区间以左端点从小到大排序,采用贪心策略。先将雷达建在左端区间的右端点上,看雷达是否能覆盖到下一区间,若能,更新此雷达建设点为两区间右端点的最小值(保证雷达能覆盖所有遍历过的区间);若不能,则只能增加雷达个数,并将建设点选为下一区间右端点。
WA了好多次,TLE了好多次,而且原因都很脑残:WA是因为current的类型设为了int;TLE是因为忘了注释掉文件读取...
代码:
#include<cstdlib>
#include<cmath>
#include<fstream>
using namespace std ;
struct mid{
double l, r ;
}id[1010] ; //岛上雷达可覆盖区间
int cmp(const void* x,const void* y){
return (*(mid *)x).l < (*(mid *)y).l ? -1 : 1 ;
}
int main(){
int n, d, i, j=1, count ;
double x, y, current ;
bool b ;
while(true){
cin >> n >> d ;
if(n==0&&d==0) break ;
b = true ;
for(i=0; i<n; i++){
cin >> x >> y ;
if(d<y) b = false ;
else{
id[i].l = x - sqrt(1.0*d*d-y*y) ;
id[i].r = x + sqrt(1.0*d*d-y*y) ;
}
}
if(d<=0||!b){ //有不能覆盖到的岛屿则输出-1
cout << "Case " << j++ << ": -1" << endl ;
continue ;
}
if(n==1){ //一个岛屿只需一个雷达覆盖
cout << "Case " << j++ << ": 1" << endl ;
continue ;
}
qsort(id, n, sizeof(id[0]), cmp) ;//结构体一级排序,从小到大
count = 1 ;
current = id[0].r ;
for(i=1; i<n; i++){
if(id[i].l>current){
count ++ ;
current = id[i].r ;
}
else{
if(id[i].r<current) current = id[i].r ; //若右端点小于当前雷达建设点,更新current为小值
}
}
cout << "Case " << j++ << ": " << count << endl ;
}
return 0 ;
}
转载于:https://www.cnblogs.com/xiaolongchase/archive/2011/09/05/2168156.html
poj 1328 Radar Installation相关推荐
- POJ 1328 Radar Installation【贪心】
POJ 1328 题意: 将一条海岸线看成X轴,X轴上面是大海,海上有若干岛屿,给出雷达的覆盖半径和岛屿的位置,要求在海岸线上建雷达,在雷达能够覆盖全部岛屿情况下,求雷达的最少使用量. 分析: 贪心法 ...
- POJ - 1328 Radar Installation(贪心+思维)
题目链接:点击查看 题目大意:校长想通过监控设备覆盖学校内的N座建筑物,每座建筑物被视作一个质点,在笛卡尔坐标系中给出他们的坐标(x,y),并且所有建筑物均处在x轴的上方.因为学校的供电和传输线路均沿 ...
- 【贪心】Radar Installation(poj 1328)
Radar Installation poj 1328 题目大意: 在平面直角坐标系的一二象限上有n个小岛,现在让你在x坐标上布置雷达,每个雷达可以侦测以它为原心,半径为m的圆内的所有小岛,现在问侦测 ...
- 【POJ - 1328】Radar Installation(贪心+计算几何)安装雷达辐射岛屿
题干: Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the ot ...
- POJ Radar Installation 1328(雷达)贪心算法
问题描述 问题链接 Description Assume the coasting is an infinite straight line. Land is in one side of coast ...
- 贪心算法—建立雷达(POJ 1328)
贪心算法--区间选点问题 这也是贪心算法的经典问题,一般情况为:有n个闭区间[ai,bj],取尽量少的点,使得每个区间内都至少有一个点. 分析 如果区间i内已经有一个点被取到,则称此区间已经被满足. ...
- 雷达装置 (POJ 1328/ codevs 2625)题解
[问题描述] 假定海岸线是一条无限延伸的直线,陆地在海岸线的一边,大海在另一侧.海中有许多岛屿,每一个小岛我们可以认为是一个点.现在要在海岸线上安装雷达,雷达的覆盖范围是d,也就是说大海中一个小岛能被 ...
- Radar Installation(贪心,sort)
在poj上C++可以AC,但G++不行.杭电上更是好多的TLE,结果把cin改成scanf便可以轻松AC. #include <iostream> #include <algorit ...
- Radar Installation
题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=27586 题意: 在海岸线上摆放雷达并限定雷达覆盖半径d,再以 ...
最新文章
- java切面不需要接口了吗_使用java语言,如何对一个类中的静态方法做切面编程?...
- spring-data-jpa Specification构建动态ql
- 实现threadlocal_ThreadLocal如何实现?
- vs2019使用sqlite数据库远程连接linux
- 【redis】redis应用场景,缓存的各种问题
- 《Android和PHP开发最佳实践》一1.3 如何学习Android和PHP
- Linux上使用Cron启动定时任务
- Docker详解(十四)——Docker网络类型详解
- learning linux
- 最新JMeter面试题,紧扣面试实际要求,看完拿下20K
- 【车标识别】基于SIFT算子的车标识别算法matlab仿真
- android关机铃声代码,android系统添加关机铃声
- 抽象工厂模式(Abstract Factory Pattern)
- 【技法操作】UI界面设计教程,用PS绘制计算器页面
- 一文读懂APS系统的核心算法和数学理论
- 怎么恢复永久删除的文件
- TIMIT dataset - The DARPA TIMIT Acoustic-Phonetic Continuous Speech Corpus
- discuz网站没备案无执照接入支付宝充值功能
- creator 物理画线
- 如何固定Excel的表头和列(滚动时始终显示表头和首列)
热门文章
- Visual Studio 2013 中如何设置断点
- IIS支持http协议的:put、delete等方法
- 查找(三)——基于平衡二叉树的查找(对排序二叉树的改进)
- javascript中的constructor
- Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录(转)
- Tian Ji -- The Horse Racing
- 关于创建Custom Container View Controller
- Android 软键盘按键监控
- android movie studio 下载,Movie Studio+ Video Editor
- b+树时间复杂度_深入理解数据库系统之存储存引擎(二叉搜索树)