POJ-1328Radar Installation(贪心)
2015-12-04 16:47
232 查看
Radar Installation
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
反向考虑,把雷达建立到岛上,则其圆形区域与x轴相交的弦上每个点都可以放雷达侦测到这个岛屿,同理,求其他所有岛屿,按弦的左边坐标排序,把雷达建立到右点上,如果下一段的左端点大于前一个的右端点,则需要一个新的雷达,且雷达建立在这一段弦的右端点,如果下一段的左端点小于前一个的右端点,则不需要新建雷达,但是雷达的位置要改变到下一段的右端点,如此重复!
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 67259 | Accepted: 15091 |
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
反向考虑,把雷达建立到岛上,则其圆形区域与x轴相交的弦上每个点都可以放雷达侦测到这个岛屿,同理,求其他所有岛屿,按弦的左边坐标排序,把雷达建立到右点上,如果下一段的左端点大于前一个的右端点,则需要一个新的雷达,且雷达建立在这一段弦的右端点,如果下一段的左端点小于前一个的右端点,则不需要新建雷达,但是雷达的位置要改变到下一段的右端点,如此重复!
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; struct node { double l,r; }s[1100]; bool cmp(node x,node y) { return x.l<y.l; } int main() { int m,i,j,cot=0,flag; double r,x,y; while(scanf("%d%lf",&m,&r),m+r) { int sum=1; flag=0; for(i=0;i<m;i++) { scanf("%lf%lf",&x,&y); s[i].l=x-sqrt(r*r-y*y); s[i].r=x+sqrt(r*r-y*y); if(y>r) flag=1; } if(flag) { printf("Case %d: -1\n",++cot); continue; } sort(s,s+m,cmp); int t=0; for(i=1;i<m;i++) { if(s[i].l>s[t].r) { sum++; t=i; } else if(s[i].r<=s[t].r) t=i; } printf("Case %d: %d\n",++cot,sum); } return 0; }
相关文章推荐
- mysql key primary key unique index index的区别
- 双线性插值
- PHP利用微信跳转的Code参数获取用户的openid
- xml转bean
- ListView加载图片的错位解决方案(二)
- TabActivity+Tabhost+ActivityGroup 创建多tab的分页APP
- MyBatis学习笔记(五)关联查询
- 常用C语言函数 - 对齐
- Excel单元格发生变化后,使用Outlook给特定的人发邮件
- iOS 面试题汇总
- 【Developer Log】Java1.8在J2EE中疑似leak的修正
- cisco 3560 电源
- 给思想迷途人的文章
- [Canvas绘图] 第12节 帅哥降临
- js给select设置value值和显示值
- Spring注解@Component、@Repository、@Service、@Controller区别
- 编写.gitignore文件的几个小技巧
- PHP new self与new static
- 1035. Password (20)【字符串处理】——PAT (Advanced Level) Practise
- 数据结构与算法-----搜索和排序(C语言库函数的使用)