Radar Installation
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 73588   Accepted: 16470

Description

Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the coasting, can only cover d distance, so an island in the sea can be covered by a radius installation, if the distance between them is at most d.

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 consists of several test cases. The first line of each case contains two integers n (1<=n<=1000) and d, where n is the number of islands in the sea and d is the distance of coverage of the radar installation. This is followed by n lines each containing two integers representing the coordinate of the position of each island. Then a blank line follows to separate the cases.

The input is terminated by a line containing pair of zeros

Output

For each test case output one line consisting of the test case number followed by the minimal number of radar installations needed. "-1" installation means no solution for that case.

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

 
中文版:见 codevs2625 雷达安装 传送门:http://codevs.cn/problem/2625/

题解:

刚开始不知道从哪分析,后经指点发现圆心位置是个突破口,首先得出每一个点所对应的圆心位置,注意若想覆盖最多,每一个圆都尽量做到使点刚好位于圆边界,比如我们左右两边各有一个水果,我们不确定能否拿得到两个,为了使得尽量拿到两个,我们会使左手刚好触碰到一个,伸右手去抓另一个,而不是直接以某一个为中心而忽略增大自身所能更加接近另一个的机会,于是问题就变成了求解圆心,按照圆心排序,不断更新雷达圆心,最终使数量最小。此外,注意代码注释部分。。。

圆心竖轴为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的更多相关文章

  1. [POJ1328]Radar Installation

    [POJ1328]Radar Installation 试题描述 Assume the coasting is an infinite straight line. Land is in one si ...

  2. POJ-1328 Radar Installation--区间选点问题(贪心)

    题目链接: https://vjudge.net/problem/POJ-1328 题目大意: 假设陆地的海岸线是一条无限延长的直线,海岛是一个个的点,现需要在海岸线上安装雷达,使整个雷达系统能够覆盖 ...

  3. poj1328 Radar Installation(贪心 策略要选好)

    https://vjudge.net/problem/POJ-1328 贪心策略选错了恐怕就完了吧.. 一开始单纯地把island排序,然后想从左到右不断更新,其实这是错的...因为空中是个圆弧. 后 ...

  4. 《挑战程序设计竞赛》2.2 贪心法-区间 POJ2376 POJ1328 POJ3190

    POJ2376 Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14585   Accepte ...

  5. poj1328 贪心

    http://http://poj.org/problem?id=1328 神TM贪心. 不懂请自行搜博客. AC代码: #include<cstdio> #include<algo ...

  6. poj1328贪心 雷达,陆地,岛屿问题

    Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 60381   Accepted: 13 ...

  7. poj1328解题报告(贪心、线段交集)

    POJ 1328,题目链接http://poj.org/problem?id=1328 题意: 有一海岸线(x轴),一半是陆地(y<0).一半是海(y>0),海上有一些小岛(用坐标点表示P ...

  8. POJ1328——Radar Installation

    Radar Installation Description Assume the coasting is an infinite straight line. Land is in one side ...

  9. POJ1328 Radar Installation(贪心)

    题目链接. 题意: 给定一坐标系,要求将所有 x轴 上面的所有点,用圆心在 x轴, 半径为 d 的圆盖住.求最少使用圆的数量. 分析: 贪心. 首先把所有点 x 坐标排序, 对于每一个点,求出能够满足 ...

随机推荐

  1. Spring中的设计模式

    [Spring中的设计模式] http://www.uml.org.cn/j2ee/201301074.asp [详解设计模式在Spring中的应用]    [http://www.geek521.c ...

  2. Linux 上的基础网络设备详解

    抽象网络设备的原理及使用 网络虚拟化是 Cloud 中的一个重要部分.作为基础知识,本文详细讲述 Linux 抽象出来的各种网络设备的原理.用法.数据流向.您通过此文,能够知道如何使用 Linux 的 ...

  3. 在类库中使用Session

    昨天在做优化网站代码的时候,突发奇想想将页面的代码和业务逻辑代码分离开.就是页面下的.cs文件只用于收集前台上的数据而业务处理都放到一些类库中.可是问题来了,在类库中是无法直接使用Session.在网 ...

  4. hdu 1861-游船出租

    游船出租                                                                                   Time Limit: 1 ...

  5. Object Pascal对象模型中构造函数之研究

    http://www.delphi2007.net/delphiblog/html/delphi_2004511950333715.html 前言 近期,一直在使用 C++ 与 Object Pasc ...

  6. linux tar.gz zip 解压缩 压缩命令

    http://apps.hi.baidu.com/share/detail/37384818 download ADT link http://dl.google.com/android/ADT-0. ...

  7. JLayer初体验。。

    Java最近推出的JLayer虽然和sharped window or translucent window一起有位JavaFX的开发做准备之嫌,但是试了一下还是感觉不错滴.. JLayer 和 gl ...

  8. win7远程桌面连接

    远程桌面连接 1.在防火墙上设置同意同意远程桌面通过防火墙: 2.为管理员设置password.以便訪问者訪问: 3.我的电脑-右键属性-远程设置-远程-选上"同意远程协助远程这台计算机.同 ...

  9. Cocos2d-x 3.0 动作

    http://blog.csdn.net/lnb333666/article/details/16858635 //运行一个action动作对象 runAction("action对象&qu ...

  10. boost.asio源码剖析(五) ---- 泛型与面向对象的完美结合

    有人说C++是带类的C:有人说C++是面向对象编程语言:有人说C++是面向过程与面向对象结合的语言.类似的评论网上有很多,虽然正确,却片面,是断章取义之言. C++是实践的产物,C++并没有为了成为某 ...