POJ 1328Radar Installation
来源:互联网 发布:cf免费刷枪软件 编辑:程序博客网 时间:2024/05/21 17:38
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
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
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 21 2-3 12 11 20 20 0
Sample Output
Case 1: 2Case 2: 1
题目的意思就是 :把x轴当作海岸线 , x轴上方为海 , 海中有许多小岛(用坐标表示), 在x轴要设置雷达 , 题目给了雷达的覆盖范围半径d, 问要把所有的小岛覆盖 所需雷达的最少数目 。
思路 :以小岛的坐标为圆心,以雷达的半径为半径画圆,会与x轴有一个或两个交点(也可能没有),两个圆可能会有重叠部分,只要雷达处于重叠部分内(图中x轴为黑色的部分),只用一个雷达将这两个岛屿覆盖。(见下图,可能画的不太标准,但是意思能表达清楚)。。
需要注意的是:
如果有一个小岛不能被覆盖的话 输出-1 但是输出的时候也要加上 Case %d 因为这个WA一次 ; 还有一点要想到的是 当给出的雷达半径为0 的时候 也是要输出-1 的 所以while(scanf ("%d%d",&m,&d)&&m&&d)这样是不对滴 又WA了好多。。。
总而言之题目不难 有了思路基本很快就能做出来,注意上边那段话。。
代码之后将会有许多测试数据 。。
#include <stdio.h>#include <stdlib.h>#include <math.h>double x[10000],y[10000],ll[10000],rr[10000],t;int m,d,i,j;int main (){ int l=1; while (~scanf ("%d%d",&m,&d)) { if (m==0 && d==0) break; int f=1,sum=1; for (i=0; i<m; i++) { scanf ("%lf %lf",&x[i],&y[i]); if (y[i]>d) f=0; } if (f==0 || d==0) { printf ("Case %d: -1\n",l++); continue; } for (i=0; i<m-1; i++) { for (j=0; j<m-1-i; j++) { if (x[j] > x[j+1])//按x轴排序 { t=x[j]; x[j]=x[j+1]; x[j+1]=t; t=y[j]; y[j]=y[j+1]; y[j+1]=t; } } } for (i=0; i<m; i++) { double s = sqrt (d*d-y[i]*y[i]); ll[i] = x[i] - s; rr[i] = x[i] + s; } double x = rr[0]; for (i=1; i<m; i++) { if (ll[i] > x)//这里的意思就是如果下一个的ll坐标比上一个的rr坐标大的话,也就是两个圆没有重叠部分 { x=rr[i];//x为下一个圆的rr坐标 sum++; } //另外为什么还要加下边这个if 呢 ??好好想想 就能明白 if (rr[i] < x) { x=rr[i]; } } printf ("Case %d: %d\n",l++,sum); } return 0;}
测试数据:来自http://poj.org/showmessage?message_id=141734
2 5-3 4-6 34 5-5 3-3 52 33 320 8-20 7-18 6-5 8-21 8-15 7-17 5-1 5-2 3-9 61 22 33 44 55 66 77 88 79 610 50 02 30 22 32 30 21 33 31 2-3 22 48 52 4-4 4-3 3-3 1-3 0-1 00 56 03 01 2-3 12 13 21 2-3 12 11 20 22 30 22 34 -54 34 32 36 -93 -31 2-3 22 16 21 21 21 2-3 12 10 01 20 22 30 21 33 101 102 34 53 51 102 34 54 71 102 34 50 03 91 102 34 50 0================结果Case 1: 1Case 2: 2Case 3: 4Case 4: 1Case 5: 1Case 6: -1Case 7: 3Case 8: -1Case 9: 2Case 10: 1Case 11: 1Case 12: -1Case 13: -1Case 14: 2Case 15: 1Case 16: 1Case 17: 1Case 18: -1Case 19: -1Case 20: -1
0 0
- POJ 1328 "Radar Installation"
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- 1328 poj Radar Installation
- poj 1328 Radar Installation
- POJ 1328 Radar Installation
- poj 1328 Radar Installation
- poj 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- poj 1328 Radar Installation
- POJ-1328-Radar Installation
- poj 1328 Radar Installation
- POJ 1328 Radar Installation
- 使用maven3 创建自定义的archetype
- leetcode-Maximum Subarray
- 实战 SSH 端口转发
- 黑马程序员——this应用
- 设计模式——观察者模式(Observer)
- POJ 1328Radar Installation
- 设置plsql自动登录
- 正则表达式基本语法
- 编外话3:卖糖的人怎么当上乌克兰总统:押宝功夫超一流
- 黑马程序员_Java基础常用API
- python 学习----raw_input()
- SSH tunnel tips
- 第二次实验作业(算法基本功 与 综合思考)
- Android 相对布局 RelativeLayout常用属性