Radar Installation(贪心 区间覆盖)
来源:互联网 发布:弗洛伊德算法流程图 编辑:程序博客网 时间:2024/05/02 02:42
Radar Installation
Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u
Submit
Status
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
3 2
1 2
-3 1
2 1
1 2
0 2
0 0
Sample Output
Case 1: 2
Case 2: 1
题意:多组数据输入,每组数据第一行给出N,R接着有N组小岛坐标,雷达半径为R。X轴以上是海洋,X轴以下是陆地,雷达只能部署到X轴上,输出覆盖海洋上N个小岛最少需要多少雷达,如果不能完全覆盖,输出-1;
思路:假设雷达在小道上,那么雷达覆盖范围和X轴就有相交区间,记录下这个区间的左右极限,接着就是区间覆盖问题,有重叠区间的部分只要一个雷达就够了,如果发现有雷达覆盖范围不和X轴相交,那就输出-1吧
代码
#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>#include<math.h>#include<queue>using namespace std;const int maxn=1005;//区间覆盖问题struct node{ double left; double right;} point[maxn]; //记录小岛雷达站在陆地覆盖的区间bool cmp(node x,node y){ if(x.right==y.right) return x.left<y.left; return x.right<y.right;}int main(){ int N;//岛屿数量 double D;//雷达半径 int casen=1; while(~scanf("%d%lf",&N,&D)&&N&&D) { bool flag=0; for(int i=0; i<N; i++) { double x,y; scanf("%lf%lf",&x,&y); if(y>D) flag=1; point[i].left=x-sqrt(D*D-y*y); point[i].right=x+sqrt(D*D-y*y); } if(flag==1) { printf("Case %d: -1\n",casen++); continue; } sort(point,point+N,cmp); int result=1; double right=point[0].right; for(int i=1;i<N;i++) { if(point[i].left>right) { result++; right=point[i].right; } } printf("Case %d: %d\n",casen++,result); } return 0;}
- Radar Installation(贪心 区间覆盖)
- 【贪心专题】POJ 1328 G - Radar Installation (区间覆盖)
- POJ 1328 Radar Installation(区间覆盖、贪心)
- POJ 1328 Radar Installation(贪心+区间覆盖)
- POJ 1328 Radar Installation(区间贪心)
- [POJ 1328] Radar Installation (区间贪心)
- POJ1328 Radar Installation(区间覆盖)
- poj Radar Installation 【贪心 区间】
- Radar Installation(贪心。 区间选点)
- Radar Installation(贪心)
- Radar Installation(贪心)
- Radar Installation(贪心)
- Radar Installation (贪心!)
- POJ——1328 Radar Installation(区间覆盖问题)
- Radar Installation(poj1328,贪心,区间交集问题)
- [ACM] POJ 1328 Radar Installation (贪心,区间选点问题)
- POJ - 1328 Radar Installation (贪心,区间选点问题)
- POJ 1328 Radar Installation(贪心+区间选点问题)
- RabbitMQ性能测试案例
- 鼠标放到图片上会滑出提示文字
- python下载任意网页图片
- Java enum的用法
- Neo4j安装后的密码修改
- Radar Installation(贪心 区间覆盖)
- SetErrorMode
- Linux的网卡由eth0变成了eth1,如何修复
- 鼠标滑过,缩略图放大显示(纯CSS)
- winform应用程序之各控件学习
- 为什么中国出不了Facebook和Twitter?
- 使用IntelliJ IDEA 14和Maven创建java web项目
- Tkinter教程之Scrollbar篇
- 鼠标经过图片时显示半透明文字,边框变色