poj1328
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 73588 | Accepted: 16470 |
Description
We use Cartesian coordinate system, defining the coasting is the x-axis. The sea side is above x-axis, and the land side below. Given the position of each island in the sea, and given the distance of the coverage of the radar installation, your task is to write a program to find the minimal number of radar installations to cover all the islands. Note that the position of an island is represented by its x-y coordinates.
Figure A Sample Input of Radar Installations
Input
The input is terminated by a line containing pair of zeros
Output
Sample Input
3 2
1 2
-3 1
2 1 1 2
0 2 0 0
Sample Output
Case 1: 2
Case 2: 1
Source
题解:
刚开始不知道从哪分析,后经指点发现圆心位置是个突破口,首先得出每一个点所对应的圆心位置,注意若想覆盖最多,每一个圆都尽量做到使点刚好位于圆边界,比如我们左右两边各有一个水果,我们不确定能否拿得到两个,为了使得尽量拿到两个,我们会使左手刚好触碰到一个,伸右手去抓另一个,而不是直接以某一个为中心而忽略增大自身所能更加接近另一个的机会,于是问题就变成了求解圆心,按照圆心排序,不断更新雷达圆心,最终使数量最小。此外,注意代码注释部分。。。
圆心竖轴为0,横轴坐标计算公式:
r=x+sqrt(d*d-y*y)//圆心从左向右移动
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
#define N 10100
struct node{
int x,y;double z;
}land[N];
inline bool cmp(const node &a,const node &b){
return a.z<b.z;
}
int main(){
int n,d,count,num=;
while(cin>>n>>d){
if(!n&&!d) break;
int flag=;count=;
for(int i=;i<=n;i++){
scanf("%d%d",&land[i].x,&land[i].y);
land[i].z=(double)land[i].x+sqrt((double)(d*d-land[i].y*land[i].y));//圆心必须浮点数啊有木有
if(abs(land[i].y)>d||d<=) flag=;//注意,当雷达无法笼罩时的情况输
}
if(flag){
printf("Case %d: -1\n",++num);continue;
}
sort(land+,land+n+,cmp); //对圆心位置从左到右进行排序
double x=land[].z;
for(int i=;i<=n;i++){
if((land[i].x-x)*(land[i].x-x)+land[i].y*land[i].y>d*d)
x=land[i].z,count++;
}
printf("Case %d: %d\n",++num,count);
}
return ;
}
poj1328的更多相关文章
- [POJ1328]Radar Installation
[POJ1328]Radar Installation 试题描述 Assume the coasting is an infinite straight line. Land is in one si ...
- POJ-1328 Radar Installation--区间选点问题(贪心)
题目链接: https://vjudge.net/problem/POJ-1328 题目大意: 假设陆地的海岸线是一条无限延长的直线,海岛是一个个的点,现需要在海岸线上安装雷达,使整个雷达系统能够覆盖 ...
- poj1328 Radar Installation(贪心 策略要选好)
https://vjudge.net/problem/POJ-1328 贪心策略选错了恐怕就完了吧.. 一开始单纯地把island排序,然后想从左到右不断更新,其实这是错的...因为空中是个圆弧. 后 ...
- 《挑战程序设计竞赛》2.2 贪心法-区间 POJ2376 POJ1328 POJ3190
POJ2376 Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14585 Accepte ...
- poj1328 贪心
http://http://poj.org/problem?id=1328 神TM贪心. 不懂请自行搜博客. AC代码: #include<cstdio> #include<algo ...
- poj1328贪心 雷达,陆地,岛屿问题
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 60381 Accepted: 13 ...
- poj1328解题报告(贪心、线段交集)
POJ 1328,题目链接http://poj.org/problem?id=1328 题意: 有一海岸线(x轴),一半是陆地(y<0).一半是海(y>0),海上有一些小岛(用坐标点表示P ...
- POJ1328——Radar Installation
Radar Installation Description Assume the coasting is an infinite straight line. Land is in one side ...
- POJ1328 Radar Installation(贪心)
题目链接. 题意: 给定一坐标系,要求将所有 x轴 上面的所有点,用圆心在 x轴, 半径为 d 的圆盖住.求最少使用圆的数量. 分析: 贪心. 首先把所有点 x 坐标排序, 对于每一个点,求出能够满足 ...
随机推荐
- Spring中的设计模式
[Spring中的设计模式] http://www.uml.org.cn/j2ee/201301074.asp [详解设计模式在Spring中的应用] [http://www.geek521.c ...
- Linux 上的基础网络设备详解
抽象网络设备的原理及使用 网络虚拟化是 Cloud 中的一个重要部分.作为基础知识,本文详细讲述 Linux 抽象出来的各种网络设备的原理.用法.数据流向.您通过此文,能够知道如何使用 Linux 的 ...
- 在类库中使用Session
昨天在做优化网站代码的时候,突发奇想想将页面的代码和业务逻辑代码分离开.就是页面下的.cs文件只用于收集前台上的数据而业务处理都放到一些类库中.可是问题来了,在类库中是无法直接使用Session.在网 ...
- hdu 1861-游船出租
游船出租 Time Limit: 1 ...
- Object Pascal对象模型中构造函数之研究
http://www.delphi2007.net/delphiblog/html/delphi_2004511950333715.html 前言 近期,一直在使用 C++ 与 Object Pasc ...
- linux tar.gz zip 解压缩 压缩命令
http://apps.hi.baidu.com/share/detail/37384818 download ADT link http://dl.google.com/android/ADT-0. ...
- JLayer初体验。。
Java最近推出的JLayer虽然和sharped window or translucent window一起有位JavaFX的开发做准备之嫌,但是试了一下还是感觉不错滴.. JLayer 和 gl ...
- win7远程桌面连接
远程桌面连接 1.在防火墙上设置同意同意远程桌面通过防火墙: 2.为管理员设置password.以便訪问者訪问: 3.我的电脑-右键属性-远程设置-远程-选上"同意远程协助远程这台计算机.同 ...
- Cocos2d-x 3.0 动作
http://blog.csdn.net/lnb333666/article/details/16858635 //运行一个action动作对象 runAction("action对象&qu ...
- boost.asio源码剖析(五) ---- 泛型与面向对象的完美结合
有人说C++是带类的C:有人说C++是面向对象编程语言:有人说C++是面向过程与面向对象结合的语言.类似的评论网上有很多,虽然正确,却片面,是断章取义之言. C++是实践的产物,C++并没有为了成为某 ...