Radar Installation
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 54143   Accepted: 12178

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

算法分析:

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

此外,注意代码凝视部分。。

圆心竖轴为0,横轴坐标计算公式:

r=x+sqrt(d*d-y*y)//圆心从左向右移动

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std; typedef struct island{
int x;
int y;
double z;
}island;
island land[1000];
int Comp(island a,island b)
{
return a.z<b.z;
}
int main()
{
int n,d,i,count,num=1,sign;
while(cin>>n>>d)
{
sign=0;
if(!(n||d))
break;
count=1,i=0;
while(i<n)
{
cin>>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<=0) //注意。当雷达无法笼罩时的情况输出-1
sign=1;
i++;
}
if(sign)
{cout<<"Case "<<num<<": -1"<<endl;num++;continue;}
sort(land,land+n,Comp); //对圆心位置从左到右进行排序
i=1;
double a=land[0].z;
while(i<n)
{
if(!((land[i].x-a)*(land[i].x-a)+land[i].y*land[i].y<=d*d))
{
a=land[i].z;
count++;
}
i++;
}
cout<<"Case "<<num<<": "<<count<<endl;
num++;
}
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

POJ 1328 Radar Installation(经典贪婪)的更多相关文章

  1. 贪心 POJ 1328 Radar Installation

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

  2. POJ 1328 Radar Installation 贪心 A

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

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

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

  4. poj 1328 Radar Installation(nyoj 287 Radar):贪心

    点击打开链接 Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 43490   Accep ...

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

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

  6. poj 1328 Radar Installation(贪心)

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

  7. POJ 1328 Radar Installation【贪心】

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

  8. poj 1328 Radar Installation(贪心+快排)

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

  9. poj 1328 Radar Installation 排序贪心

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

随机推荐

  1. [Node] Run Any Version of a Node Tool with npx

    As node projects evolve, new features are added all the time. This results in different errors or re ...

  2. 翻译《虚幻引擎4艺术大师 - 蓝图 II 》 中文版

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/article/details/46504583 作者:ca ...

  3. 【p092】分数线划定

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 世博会志愿者的选拔工作正在A市如火如荼地进行.为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔 ...

  4. [Angular] Testing @Input and @Output bindings

    Component: import { Component, Input, ChangeDetectionStrategy, EventEmitter, Output } from '@angular ...

  5. Android多线程研究(9)——线程锁Lock

    在前面我们在解决线程同步问题的时候使用了synchronized关键字,今天我们来看看Java 5.0以后提供的线程锁Lock. Lock接口的实现类提供了比使用synchronized关键字更加灵活 ...

  6. PHP 根据对象属性进行对象数组的排序(usort($your_data, "cmp");)(inside the class: usort($your_data, array($this, "cmp")))

    PHP 根据对象属性进行对象数组的排序(usort($your_data, "cmp");)(inside the class: usort($your_data, array($ ...

  7. js进阶正则表达式7点数字字母空格(w d s)(小写表原意,大写表反义)(特殊字符要加反斜杠:var reg22=/\W/g)

    js进阶正则表达式7点数字字母空格(w d s)(小写表原意,大写表反义)(特殊字符要加反斜杠:var reg22=/\W/g) 一.总结 1.w d s,word digital space 2.特 ...

  8. 小强的HTML5移动开发之路(46)——汇率计算器【2】

    在上一篇中我们完成了汇率计算页面,下面来完成汇率设置页面的显示. <div class="setRates"> <div class="header&q ...

  9. 小强的HTML5移动开发之路(42)——HTML4与HTML5文档结构比较

    一般来说,人们在书写包括HTML在内的文档时,习惯上按照类似于"章--节--小节"这样的层次结构来进行. 在HTML4中的描述方式: <html> <head&g ...

  10. 【t082】牛跑步

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 新牛到部队,CG要求它们每天早上搞晨跑,从A农场跑到B农场.从A农场到B农场中有n-2个路口,分别标上 ...