【问题描述】

假定海岸线是一条无限延伸的直线,陆地在海岸线的一边,大海在另一侧。海中有许多岛屿,每一个小岛我们可以认为是一个点。现在要在海岸线上安装雷达,雷达的覆盖范围是d,也就是说大海中一个小岛能被安装的雷达覆盖,那么它们之间的距离最大为d。

我们使用平面直角坐标系,定义海岸线是x轴,大海在x轴上方,陆地在下方。给你海中每一个岛屿的坐标位置(x,y)和要安装的雷达所覆盖的范围d,你的任务是写一个程序计算出至少安装多少个雷达能将所有的岛屿覆盖。

(POJ输入中将有多组数据,每组数据间有一行空着,最后用一行0 0表示输入结束,你的任务是对于每组数据,求出最少需要的雷达数,若有岛屿无法被监测到,输出-1)

【样例输入】

3 2

1 2

-3 1

2 1

1 2

0 2

0 0

【样例输出】

Case 1: 2

Case 2: 1

【解题思路】

这题为贪心题,看到题目,不难想到,如果在岛屿正下方的雷达监测不到岛屿,那该岛屿必定是监测的不到的,在读完该组数据后输出-1即可。因此,对于每一个岛屿,我们以h为半径画圆,如果与x轴没有交点,则该岛无法被监测到,否则,将其与x轴的两个交点存入数组a,b。在所有交点存入数组后,以每个岛的左边的交点为关键字排序。设置一个变量r,为雷达的位置,将排序后的b[1]赋值给r,从第二个岛屿开始找,如果第二个岛屿的靠左的交点在r的监测范围之外,则将雷达数+1,将第二个岛屿靠右的交点赋值给r,如果第二个岛屿的靠右的交点在r的监测范围之内,直接将b[2]赋值给r;依此类推。

【代码实现】

 var i,j,n,d,x,y,num,ans:longint;
xx,r:double;
f:boolean;
a,b:array[..] of double;
procedure sort(l,r: longint);
var
i,j: longint;
x,y:double;
begin
i:=l;
j:=r;
x:=a[(l+r) div ];
repeat
while a[i]<x do
inc(i);
while x<a[j] do
dec(j);
if not(i>j) then
begin
y:=a[i];
a[i]:=a[j];
a[j]:=y;
y:=b[i];
b[i]:=b[j];
b[j]:=y;
inc(i);
dec(j);
end;
until i>j;
if l<j then
sort(l,j);
if i<r then
sort(i,r);
end;
begin
readln(n,d);
while n<> do
begin
f:=true;
inc(num);//增加数据数
for i:= to n do
begin
readln(x,y);
if y>d then//判断是否有无论雷达在哪都监测不到的岛屿
begin
f:=false;
continue;
end;
xx:=sqrt(sqr(d)-sqr(y));
a[i]:=x-xx;b[i]:=x+xx;//用勾股定理求与x轴的交点
end;
if not(f) then
begin
writeln('Case ',num,':',' ',-);
readln(n,d);
continue;
end;//存在雷达监测不到的点,输出-,读入下一组数据
sort(,n);//排序
r:=b[];
ans:=;
for i:= to n do//一个个比较
begin
if a[i]>r then//若不在范围雷达数+
begin
inc(ans);
r:=b[i];
end;
if b[i]<r then//若在,直接赋给r
r:=b[i];
end;
writeln('Case ',num,':',' ',ans);
readln(n,d);//读入下一组数据
end;
end.

雷达装置 (POJ 1328/ codevs 2625)题解的更多相关文章

  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【贪心】

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

  4. POJ 2823 Sliding Window 题解

    POJ 2823 Sliding  Window 题解 Description An array of size n ≤ 106 is given to you. There is a sliding ...

  5. B. 【例题2】雷达装置

    B . [ 例 题 2 ] 雷 达 装 置 B. [例题2]雷达装置 B.[例题2]雷达装置 题目解析 求最少所需的雷达数,考虑贪心算法. 以这张图为例.以一个城市为中心,作一个半径为 d d d的圆 ...

  6. POJ 1328 安装雷达 (贪心)

    <题目链接> 题目大意: 以x轴为分界,y>0部分为海,y<0部分为陆地,给出一些岛屿坐标(在海中),再给出雷达可达到范围,雷达只可以安在陆地上,问最少多少雷达可以覆盖所以岛屿 ...

  7. poj 1328 安雷达问题 贪心算法

    题意:雷达如何放置?在xoy二维平面坐标系里面,x轴上方的为岛屿,x轴下方的是雷达要放到位置,如何放使得雷达放的最少? 思路 肯定放在x轴上减少浪费是最好的选择 什么情况下,雷达无法到达呢?--以这个 ...

  8. POJ 1328 Radar Installation 贪心题解

    本题是贪心法题解.只是须要自己观察出规律.这就不easy了,非常easy出错. 一般网上做法是找区间的方法. 这里给出一个独特的方法: 1 依照x轴大小排序 2 从最左边的点循环.首先找到最小x轴的圆 ...

  9. 贪心问题:区间覆盖 POJ 1328 Rader Installation

    题目:http://poj.org/problem?id=1328 题意:给定海岛个数,雷达半径,输入各个海岛坐标,求能覆盖所有海岛的最少雷达数 题解: 1. 贪心的区间覆盖问题,尽量让每个雷达覆盖更 ...

随机推荐

  1. 326.Power of Three

    /* Given an integer, write a function to determine if it is a power of three. Follow up: Could you d ...

  2. Golang在windows下交叉编译linux程序

    1.下载相关程序. Golang下载:http://www.golangtc.com/download Git下载:http://git-scm.com/download/ TDM-GCC下载:htt ...

  3. maven搭建项目的时候,src/main/java无法建立的问题,提示信息The folder is already a source folder.(文件夹已经是源文件夹。)

    原因:maven自己引的jdk包不对,需要重新引包 操作方式: 1.在项目上右击(或用快捷键ALT+ENTER),打开properties-->java builder path-->re ...

  4. Markdown 编辑器语法指南

    基本技巧 代码 如果你只想高亮语句中的某个函数名或关键字,可以使用 `function_name()` 实现 通常编辑器根据代码片段适配合适的高亮方法,但你也可以用 ``` 包裹一段代码,并指定一种语 ...

  5. 如何设置修改WPS批注上的用户信息名称

    http://jingyan.baidu.com/article/6b18230953cec7ba59e1596b.html 点击左上角的“WPS文字”:   选择“选项”:   点击“用户信息”: ...

  6. 【测试】通过SYS用户,对SCOTT用户的会话进行跟踪,并分析此会话中性能消耗较高的SQL,分析并给出优化建议。

    ①连接到scott下,查询scott对应的sid,serial# SQL> select sid,serial#,username from v$session where username=' ...

  7. dwr与ssh框架整合教程

    (1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开 发人员开发包含AJ ...

  8. No.009 Palindrome Number

    9. Palindrome Number Total Accepted: 136330 Total Submissions: 418995 Difficulty: Easy Determine whe ...

  9. TCP/IP详解学习笔记(8)-- UDP:用户数据报协议

    1.UDP概述 UDP是一种无连接的, 即发送数据前不需要建立连接,因此减小的开销和发送数据的延迟. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表. UDP是面向报文 ...

  10. ASP.NET MVC4 学习系统五(Razor)

    Razor ,你好!       Razor 是一种把代码和内容进行平滑集成的语法.尽管它引入了一些新的符号和关键字,但是Razor并不是一种新的语法.相反,Razor允许用户使用已知的语言来编写代码 ...