Radar Installation POJ - 1328(贪心)
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 题意:N座岛屿,坐标用xi,yi表示,岛屿都位于x轴上。在x轴上建造雷达,每个雷达的的探测范围是以【x,0】为圆心,半径为R的圆(下半圆一看就没用),问最少几个雷达可以探测全部岛屿? 思路:我们把每个岛屿为圆心,做出x轴上雷达的可行建造区域,那么问题就变成用最小的雷达覆盖最多的区域(每个区域一个雷达)。
我们先将区域按左边界递增排序,每取到一个区间,就记录在这个区间右边界pos,如果下个区间的左边界>pos,说明这个雷达无法探测,需要新建雷达,
否则就pos = min(pos,r),就是让原有的雷达去探测它,但是雷达需要移至两个区间的最小右边界处(交集嘛)。 ①因为要用比较左边界和上一次区间的右边界,所以一定是按照左边界排序的。(这样处理后面的区域和之前区域没啥关系,只和pos有关)
置于为什么pos取右边界,因为右边界代表了雷达最远可放置位置(极值),其包含了区间内可行取值了。(决策包容性?) ②当然如果你反过来,右边界排序,你就需要比较右边界和上一次的左边界也行。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std; int n,r;
struct Node
{
double l,r;
} L[]; double calc(int y,int r)
{
return sqrt(r*r-y*y);
} int dcmp(double a,double b)
{
if(fabs(a-b) < 1e-)
return ;
else
return a-b > ?:-;
}
bool cmp(Node a,Node b)
{
return dcmp(a.l,b.l)<;
}
int main()
{
int cas = ;
while(~scanf("%d%d",&n,&r) && (n || r))
{
int ans=;
for(int i=; i<=n; i++)
{
double x,y;
scanf("%lf%lf",&x,&y);
if(dcmp(y,r) > )
{
ans = -;
continue;
}
double add = calc(y,r);
L[i].l = x-add;
L[i].r = x+add;
}
if(ans == -){printf("Case %d: -1\n",++cas);continue;}
sort(L+,L++n,cmp);
double pos = -0x3f3f3f3f3f3f3f;
for(int i=; i<=n; i++)
{
if(dcmp(L[i].l,pos)>)
{
ans++;
pos = L[i].r;
}
else
{
pos = min(L[i].r,pos);
}
}
printf("Case %d: %d\n",++cas,ans);
}
}
Radar Installation POJ - 1328(贪心)的更多相关文章
- Radar Installation POJ - 1328
Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. ...
- Radar Installation POJ - 1328 (贪心)
题目大意(vj上的翻译版本) 假定海岸线是无限长的直线.陆地位于海岸线的一侧,海洋位于另一侧.每个小岛是位于海洋中的一个点.对于任何一个雷达的安装 (均位于海岸线上),只能覆盖 d 距离,因此海洋中的 ...
- Greedy:Radar Installation(POJ 1328)
装雷达 题目大意,就是令在海岸线的(直线)一边是海(y>0),另一边是陆地(y<=0),在海岸线上装雷达,雷达可以覆盖的范围为d,海上有岛,(x,y),问你应该怎么装雷达,才能做到技能雷达 ...
- poj 1328 Radar Installation (简单的贪心)
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 42925 Accepted: 94 ...
- poj 1328贪心
Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea i ...
- poj 1328 贪心
/* 贪心.... 处理处每个点按照最大距离在x轴上的映射 然后我们就有了一些线段 目的是选取尽量少的点 使得每个线段内都有点出现 我们按照左端点排序 然后逐一处理 假设第一个雷达安在第一个线段的右端 ...
- poj1328 Radar Installation —— 贪心
题目链接:http://poj.org/problem?id=1328 题解:区间选点类的题目,求用最少的点以使得每个范围都有点存在.以每个点为圆心,r0为半径,作圆.在x轴上的弦即为雷达可放置的范围 ...
- 贪心 POJ 1328 Radar Installation
题目地址:http://poj.org/problem?id=1328 /* 贪心 (转载)题意:有一条海岸线,在海岸线上方是大海,海中有一些岛屿, 这些岛的位置已知,海岸线上有雷达,雷达的覆盖半径知 ...
- POJ 1328 Radar Installation 贪心 A
POJ 1328 Radar Installation https://vjudge.net/problem/POJ-1328 题目: Assume the coasting is an infini ...
随机推荐
- chkconfig: command not found
问题描述 Ubuntu 16.04 下安装 Nginx 服务器,在添加 nginx 服务时出现如下信息 # chkconfig --add nginx chkconfig: command not f ...
- Confluence 6 H2 数据库连接与合并整合
使用 H2 console 连接到你嵌入的 H2 数据库 可以选的,你可以使用 H2 console 来连接到你的 H2 数据库.最简单的访问 Console 的方法是双击 H2 数据库的 jar 文 ...
- 【DOS】文件统计命令
1. 统计当前文件夹下文件的个数 ls -l|grep "^-"|wc -l 2. 统计当前文件夹下目录的个数 ls -l|grep "^d"|wc -l 3. ...
- python之vscode配置开发调试环境
在vscode中下载python插件,下载量最多的就是 打开launch.json,把以下代码粘贴进去即可 { // 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述. ...
- ubuntu MySQL的卸载
非常彻底的删除的方法https://www.jianshu.com/p/fff94ae9be4a 可能会误删慎用 输入以下命令 sudo apt-get remove mysql-server sud ...
- maven依赖查找方法
http://mvnrepository.com 1. 搜索依赖库 2. 选择合适版本 3. 复制配置 点击合适的版本进入,负责maven配置: <dependency> ...
- RHEL7恢复root密码
RHEL7恢复root密码 首先关闭SELINUX [root@panda ~]# getenforce Disabled 然后重启,按↑↓键,进入如下界面,选择第一项,按下e键进行编辑 在此界面找到 ...
- paython3-练习
在文本每行末尾加; f = open(r'D:\test1\1.txt','rb') w = open(r'D:\test1\2.txt','wb') for line in f.readlines( ...
- Django_Admin操作
Django_Admin 创建Django_Admin 管理账户 D:\github\Django_Aadmin>python manage.py createsuperuser Usernam ...
- EXcel vba 获取批注信息
Public Function pizhu(i As Range) pizhu = i.Cells.Comment.Text End Function EXcel VBA获取批注信息