Radar Installation -poj 1328

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 60277   Accepted: 13583

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使用贪心算法解决。
 1 #include <iostream>
 2 #include<math.h>
 3 #include <algorithm>
 4 #include <stdlib.h>
 5 using namespace std;
 6 struct point
 7 {
 8     double left, right;
 9 }points[1000], temp;
10
11 bool operator < (point a, point b)
12 {
13     return a.left < b.left;
14 }
15 int main() {
16     int num = 0;
17     double rad = 0;
18     cin >> num >> rad;
19     int casenum=1;
20     while (num || rad) {
21
22
23         int rnum=1;
24         int wrong = 0;
25
26         for (int i = 0; i < num; i++) {
27             double x=0;
28             double y=0;
29             cin >> x >> y;
30
31             if (y > rad) {
32                 //岛屿纵坐标大于雷达半径
33                 wrong = 1;
34             }else{
35                 //以岛屿为圆心,做圆,与x轴的交点
36                 points[i].left=x-sqrt((rad*rad-y*y)*1.0);
37                 points[i].right=x+sqrt((rad*rad-y*y)*1.0);
38
39             }
40         }
41         if (wrong) {
42             //雷达不能覆盖
43             cout<<"Case "<<casenum++<<": "<<-1<<endl;
44         } else {
45             //按照岛屿画圆与x轴的左交点排序
46             sort(points, points + num);
47              temp=points[0];
48             for(int i=1;i<num;i++){
49                 //
50                 if(points[i].left>temp.right)//temp.right为公共区间的右端点,若下一个区间的左端点大于temp.right则该区间与以上的公共区间没有公共部分
51                 {
52                     rnum++;//雷达个数加1
53                     temp=points[i];//更新公共区间右端点
54                 }else if(points[i].right<temp.right){
55                      temp=points[i];//更新公共区间右端点
56                 }
57                 }
58
59             cout<<"Case "<<casenum++<<": "<<rnum<<endl;
60         }
61
62         cin >> num >> rad;
63     }
64     return 0;
65 }
				
时间: 2024-08-10 15:11:58

Radar Installation -poj 1328的相关文章

B - Radar Installation poj 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

POJ 1328、Radar Installation 贪心

jQuery的属性操作非常简单,下面以一个a元素来说明属性的获取/设置/删除操作 <body> <a>jquery.com</a> </body> 添加属性 $('a').attr('href', 'http://www.jquery.com') 添加多个属性 $('a').attr({'href':'http://www.jquery.com', 'title':'jquery.com'}) 获取属性 $('a').attr('href') class属性

[2016-02-04][POJ][1328][Radar Installation]

[2016-02-04][POJ][1328][Radar Installation] 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

POJ 1328:Radar Installation

Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 50843   Accepted: 11415 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 loca

POJ 1328 Radar Installation 贪心题解

本题是贪心法题解,不过需要自己观察出规律,这就不容易了,很容易出错. 一般网上做法是找区间的方法. 这里给出一个独特的方法: 1 按照x轴大小排序 2 从最左边的点循环,首先找到最小x轴的圆 3 以这个圆判断可以包括右边的多少个圆,直到不可以包括下一个点,那么继续第2步,画一个新圆. 看代码吧,应该很清晰直观的了. 效率是O(n),虽然有嵌套循环,但是下标没有重复,一遍循环就可以了,故此是O(n). #include <stdio.h> #include <cmath> #incl

Poj 1328 Radar Installation 贪心

题目链接:http://poj.org/problem?id=1328 Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 52768   Accepted: 11867 Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the othe

Poj 1328 / OpenJudge 1328 Radar Installation

1.Link: http://poj.org/problem?id=1328 http://bailian.openjudge.cn/practice/1328/ 2.Content: Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 52833   Accepted: 11891 Description Assume the coasting is an infinite straig

[ACM] POJ 1328 Radar Installation (贪心,区间选点问题)

Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 51131   Accepted: 11481 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 loca

POJ 1328 Radar Installation 雷达安装 贪心问题求解

题目链接: POJ 1328 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 coas