poj 1328 Radar Installation
来源:互联网 发布:必读书 知乎 编辑:程序博客网 时间:2024/06/06 03:41
http://poj.org/problem?id=1328
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
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
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.
3 21 2-3 12 11 20 20 0
Case 1: 2Case 2: 1
题目大意:
在一个平面坐标系中,上部分是海,海上有岛屿,现在要在x轴上放雷达监测这些岛屿,问最少放多少个;
思路:
每个雷达监测半径是d,当岛屿的y坐标大于d时,输出-1;以岛屿为圆心d为半径做圆与x轴交于两点,如果岛屿之间在x轴的交点有重复的地方,那么这几个岛屿用一个雷达就可以监测到。
#include<stdio.h>#include<algorithm>#include<math.h>using namespace std;struct island{float left;float right;};int cmp(island x,island y){if(x.left==y.left)return x.right<y.right;return x.left<y.left;}int main(){int i,j,n,d,flag,x,y,radar,Case=1;float t;island a[1005];while(scanf("%d%d",&n,&d)&&(n!=0||d!=0)){radar=1;flag=1;for(i=0;i<n;i++){scanf("%d%d",&x,&y);if(y>d){flag=0;continue;}a[i].left=x-sqrt(d*d-y*y);a[i].right=x+sqrt(d*d-y*y);}if (!flag) printf ("Case %d: -1\n",Case++); else{ sort(a,a+n,cmp); t=a[0].right; for(i=1;i<n;i++){//找有没有重叠的部分 if(a[i].left<=t){//有 if(a[i].right<t)//再比较右端点,找区间更小的 t=a[i].right;} else{//没有,雷达+1 t=a[i].right; radar++;}}printf ("Case %d: %d\n",Case++,radar);}}return 0;}
阅读全文
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
- 关于<input type="button" value="搜索">默认样式的清除
- React Native学习笔记(1)--九宫格实现
- 【BZOJ】2152 聪聪可可 点分治
- 俄罗斯方块 java小游戏
- hdu-4501-小明系列故事——买年货-dp-java
- poj 1328 Radar Installation
- 功能测试基础知识
- WebAssembly基础
- 两个队列实现一个栈
- Redis 图形化监控方案 RedisLive 介绍
- STL算法
- CSP 火车购票 2016 09 2
- EntityFramework 系列
- 根据输入时间间隔判断EditText是否输入完成