C - 安装雷达
C - 安装雷达
Problem Description
我们假设海岸线是一条无限直线:以海岸线为界,陆地和海洋被分开,在海边分布着很多小岛。现在,我们在海岸线上安装雷达,每个雷达有固定的通讯范围(以d为半径的圆形区域),这样,海边的小岛就可以被某个雷达信号覆盖。
这里我们使用笛卡尔坐标系,定义海岸线为x轴,x轴上方是海洋,下方是陆地。给出分布在海边每个小岛的坐标位置和雷达信号能覆盖的范围d,你的任务是计算出最小需要安装的雷达数目,使得这些雷达信号能覆盖到所有海边的小岛。每个小岛的坐标格式为(x,y)。
如下图所示,给出第一个输入样例的坐标表示,这样在(-2,0),(1,0)上分别安装雷达就可以覆盖所有的小岛(p点),所以我们只需要安装2个雷达。
Input
输入包含多组测试样例。每组测试第一行包含两个整数n(1<=n<=1000)和d,n表示小岛的数目,d表示雷达能覆盖的范围的半径。接下来n行,每行由整数x和y组成,表示n个小岛的坐标位置。每两组数据之间有一个空行。
输入0 0表示输入的结束。Output
对于每一组输入,按照输出样例中的格式输出:包含输出序号和最少需要安装雷达的数目。如果找不到解决方案,即不能找到一种安装方案覆盖所有的小岛,输出”-1”。
Sample Input
3 2
1 2
-3 1
2 1 1 2
0 2 0 0Sample Output
Case 1: 2
Case 2: 1
#include<cstdio>
#include<cmath>
#include<algorithm>
#define fi first // 宏定义 为了代码简便
#define se second // 分别表示pair中的第一个数和第二个数
using namespace std;
const int maxn = 1e5+; pair<double, double> a[maxn]; int main()
{
int n, d, cs = ;
while(~scanf("%d%d", &n, &d) && n){
double x, y;
bool can = true;
for(int i=; i<n; i++){
scanf("%lf%lf", &x, &y);
if(y > d || y < -d) { // 无法覆盖的点
can = false;
continue;
}
a[i].fi = x - sqrt(d*d - y*y); // 可覆盖第i个点,在x轴上最左侧的位置
a[i].se = x + sqrt(d*d - y*y); // 可覆盖第i个点,在x轴上最右侧的位置
} printf("Case %d: ", cs++);
if(!can) {
puts("-1");
continue;
} int cnt = ;
sort(a, a+n); // 默认按照第一个数升序优先,第二个数升序的顺序排序
pair<double, double> now = a[]; // 初始化可用区间
for(int i=; i<n; i++){
if(now.se < a[i].fi) { // 当前区间不能覆盖a[i] 更新可能区间
cnt ++;
now = a[i];
}
else if(now.se > a[i].se) now = a[i]; // 当前区间过大,需要减小可用区间
}
printf("%d\n", cnt);
} return ;
}
C - 安装雷达的更多相关文章
- POJ 1328 安装雷达 (贪心)
<题目链接> 题目大意: 以x轴为分界,y>0部分为海,y<0部分为陆地,给出一些岛屿坐标(在海中),再给出雷达可达到范围,雷达只可以安在陆地上,问最少多少雷达可以覆盖所以岛屿 ...
- poj1328贪心 雷达,陆地,岛屿问题
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 60381 Accepted: 13 ...
- 雷达装置 (POJ 1328/ codevs 2625)题解
[问题描述] 假定海岸线是一条无限延伸的直线,陆地在海岸线的一边,大海在另一侧.海中有许多岛屿,每一个小岛我们可以认为是一个点.现在要在海岸线上安装雷达,雷达的覆盖范围是d,也就是说大海中一个小岛能被 ...
- 利用move_base导航--42
摘要: 原创博客:转载请标明出处:http://www.cnblogs.com/zxouxuewei/ 各位博友好长时间又没有写博客了,突然发现上班和在学校是不一样的,在公司的却没有时间写博客了,不过 ...
- Radar Installation 分类: POJ 2015-06-15 19:54 8人阅读 评论(0) 收藏
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 60120 Accepted: 13 ...
- C-C Radar Installation 解题报告
C-C Radar Installation 解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=86640#pr ...
- POJ-1328 Radar Installation--区间选点问题(贪心)
题目链接: https://vjudge.net/problem/POJ-1328 题目大意: 假设陆地的海岸线是一条无限延长的直线,海岛是一个个的点,现需要在海岸线上安装雷达,使整个雷达系统能够覆盖 ...
- UVA 2519 Radar Installtion
思路: #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> ...
- move_base
1>准备导航所需要的包. a.ros-indigo-gampping :我们不需要修改包内的东西,所以直接安装可执行文件就好了. sudo apt-get install ros-indigo- ...
随机推荐
- C/C++使用keybd_event模拟键盘按键
#include <stdio.h> #include <Windows.h> /* 设置键盘大小写状态 big:为TRUE则切换大写状态,否则切换小写状态 */ VOID M ...
- tidb损坏tikv节点怎么恢复集群
tikv节点宕机(机器再起不来),或者数据节点被rm -rf 掉了怎么办 正常情况下tikv节点down掉了.此时不要去执行store delete store_id .数据一般可以正常访问,但是如 ...
- PHP无法用下标访问
php数组分为普通数组和关联数组,普通数组可以用下标访问,而关联数组不可以.
- jquery easyui alert闪一下的问题
最近做项目使用了 jQuery EasyUI,版本是 1.4.3.x,在使用alert方法的时候如果alert后面执行页面跳转的话alert的消息只会闪一下,就跳到其他页面了 $.messager.a ...
- Python学习之模块基础
模块就是程序 编写以下简单代码 print('hello python') 并将py文件保存在c盘的python(假设新建)文件下,通过pycharm的Terminal 或者windom命令窗口调出p ...
- 渗透测试实验(i春秋 真的很简单)
首先利用给的提示: 所以用户名是 ichunqiu 密码是adab29e084ff095ce3eb 可以确定一般密码都是md5的,但是这个20位 应该去掉ada b29e084ff095ce3e才是正 ...
- Python3 列表,元组,字典,字符串知识小结
一.知识概要 1. 列表,元组,字典,字符串的创建方式 2. 列表,元组,字典,字符串的方法调用 3. 列表,元组,字典,字符串的常规用法 二.列表 # 列 表 # 列表基础 list_1 = ['a ...
- ABAP CDS ON HANA-(5)テーブル結合ビュー
JOINs in CDS View In ABAP CDS, Join between two data sources is allowed. Allowed joins are:- Inner J ...
- Spring + MySQL + Mybatis + Redis【二级缓存】执行流程分析
一级缓存基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就 ...
- mock.js中新增测试接口无效,返回404
项目是使用的npm+vue+mock模拟数据 我碰到的是在mock配置文件中新增接口,但是接口在测试时无效,返回404.但是在前端代码中把新接口换成配置文件中之前就有的,然后测试就正常了. 所以按问题 ...
