poj-1328-Radar Installation
2015-07-28 16:53
253 查看
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
Sample Output
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 /* 题意是给定大海中有n个岛屿,需要用扫描半径为m的雷达去扫描他们,问 最少用多少个雷达就可以全部扫描到全部的岛屿。 方法(贪心): 通过给定岛屿的坐标根据雷达的扫描半径求出每个岛屿所对应的扫描范 围,将所有的范围求出后,按照左端点或右端点统一排序,如果出现两个相 邻岛屿的范围重叠情况,将标记范围端点的变量更新到最右端(按左端点排序), 反之亦然。直到遍历完所有的岛屿,求出最少雷达数目。 */#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <queue> #include <vector> #include <stack> #include <cmath> #define INF 0x3f3f3f3f using namespace std; struct node { double x,y,u,v; }a[1010]; bool cmp(node x,node y) { return x.u < y.u; } int main() { int n,t = 1; double m,k; while(~scanf("%d %lf",&n,&m) && n && m) { int flag = 0; for(int i=0;i<n;i++) { scanf("%lf %lf",&a[i].x,&a[i].y); if(a[i].y > m) flag = 1; a[i].u = a[i].x - sqrt(m*m-a[i].y*a[i].y); //求出每个岛屿的左端点 a[i].v = a[i].x + sqrt(m*m-a[i].y*a[i].y); //求出每个岛屿的右端点 } if(flag) //判断输入是否大于雷达扫描半径 { cout<<"Case "<<t++<<": "<<-1<<endl; continue; } sort(a,a+n,cmp); int sum = 1; k = a[0].v; //开始判断 for(int i=0;i<n-1;i++) { if(a[i+1].u > k) { k = a[i+1].v; sum++; } else if(a[i+1].v < k) k = a[i+1].v; } cout<<"Case "<<t++<<": "<<sum<<endl; } return 0; }
相关文章推荐
- [家里蹲大学数学杂志]第410期定积分难题
- 解决linux系统CentOS下调整home和根分区大小
- Oracle的in/not in(x,...,null)
- openGL构造二维旋转矩阵
- Linux下源码安装MySQL 5.6(经典)
- [知识点整理]Android事件传递机制
- hdoj.1757 A Simple Math Problem【矩阵快速幂】 2015/07/28
- UITableViewCell中自定义cell上UILabel添加手势没有响应解决方案
- Android Studio导入项目
- 百度地图API(四)
- Flask安装配置
- golang 中的定时器(timer),更巧妙的处理timeout
- 自己封装了一个EF的上下文类.,分享一下,顺便求大神指点
- Android学习笔记--Binder
- ListView的复用及如何优化
- Java 反射
- Snail—OC学习之本地数据持久化(归档)
- PHP编译动态文件
- hdu 5326 Work
- android 图片三级缓存实现