CSU - 1973
2017-08-01 17:20
232 查看
Radar Installation
Time limit : 1000 ms | Memory limit : 10000K |
---|
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.
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 21 2
-3 1
2 1
1 2
0 2
0 0
Sample Output
Case 1: 2Case 2: 1
题目大意:
你需要在岸边给海上的岛屿建立雷达站。每个雷达站都有覆盖范围,给你n个岛屿的位置以及雷达站的覆盖范围,让你求出最少需要多少个雷达站。
解题思路:
1.采用贪心的方法,先求出每个岛屿在x轴上雷达站可覆盖的范围。(就是求出在Xstart~Xending,使得在这个范围内建造的雷达站能覆盖到这个岛屿)
2.对可行范围进行排序,ending越小的排在前面,对每一个ending都去找start在他前面的岛屿,这些岛屿都可以用同一个雷达站覆盖。直到下一个岛屿的start超过以后,再按照它的ending继续搜索。
3.题目本身不难,但是需要考虑很多边界情况与特殊情况:
岛屿的y值小于0 :跳过该岛屿的判断
岛屿的y值等于0 :需要判断,当作正常岛屿求解
岛屿的y值大于雷达范围/雷达范围小于等于0: 一定无解
4.经常WrongAnswer的可以看看下面附的一些测试数据
源代码:
#include<iostream> #include<stdio.h> #include<vector> #include<string.h> #include<math.h> #include<algorithm> using namespace std; int n,len; struct node{ int x,y; }; struct area{ double start; double ending; bool operator <(const area &a) const { return ending<a.ending || ending == a.ending && start<a.start; } }; node is[1005]; vector<area> ar; bool flag = true; int main(){ int Case=1; while(scanf("%d%d",&n,&len)){ flag = true; if(n==0 && len==0) break; ar.clear(); for(int i=0;i<n;i++){ scanf("%d%d",&is[i].x,&is[i].y); if(is[i].y>len) flag = false; } if(!flag || len<=0 ){ printf("Case %d: -1\n",Case++); continue; } area a; for(int i=0;i<n;i++){ if(is[i].y>=0){ double dx = sqrt((double)(len+is[i].y)*(len-is[i].y)); a.start = (double)is[i].x - dx; a.ending = (double)is[i].x + dx; ar.push_back(a); } } if(ar.empty()){ printf("Case %d: -1\n",Case++); continue; } int j = ar.size(); sort(ar.begin(),ar.end()); int ans=0,now=0,temp; double next; while(now<j){ ans++; next = ar[now].ending; temp = now+1; while(temp<j && ar[temp].start<=next) temp++; now = temp; } printf("Case %d: %d\n",Case++,ans); } return 0; }
input:
2 5
-3 4
-6 3
4 5
-5 3
-3 5
2 3
3 3
20 8
-20 7
-18 6
-5 8
-21 8
-15 7
-17 5
-1 5
-2 3
-9 6
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 7
9 6
10 5
0 0
2 3
0 2
2 3
2 3
0 2
1 3
3 3
1 2
-3 2
2 4
8 5
2 4
-4 4
-3 3
-3 1
-3 0
-1 0
0 5
6 0
3 0
1 2
-3 1
2 1
3 2
1 2
-3 1
2 1
1 2
0 2
2 3
0 2
2 3
4 -5
4 3
4 3
2 3
6 -9
3 -3
1 2
-3 2
2 1
6 2
1 2
1 2
1 2
-3 1
2 1
0 0
1 2
0 2
2 3
0 2
1 3
3 10
1 10
2 3
4 5
3 5
1 10
2 3
4 5
4 7
1 10
2 3
4 5
0 0
3 9
1 10
2 3
4 5
0 0
output:
Case 1: 1
4000
Case 2: 2
Case 3: 4
Case 4: 1
Case 5: 1
Case 6: -1
Case 7: 3
Case 8: -1
Case 9: 2
Case10: 1
Case 11: 1
Case 12: -1
Case 13: -1
Case 14: 2
Case 15: 1
Case 16: 1
Case 17: 1
Case 18: -1
Case 19: -1
Case 20: -1
数据链接
相关文章推荐
- CSU 1973:给自己出题的小X(DFS或DP)
- (CSU - 1973)给自己出题的小X
- CSU - 1973
- csu D(1973): 给自己出题的小X
- CSU 1529: Equator(dp)
- CSU 1541 There is No Alternative (最小生成树+枚举)
- hdu--1973 Prime Path
- CSU 1111-ACM
- csu 1507: 超大型LED显示屏(要重新敲一遍)
- CSU 1032 OSU! Scoring System
- CSU 1328 近似回文词
- CSU 1116 Kingdoms
- CSU 1511 残缺的棋盘
- CSU 1335: 高桥和低桥(扫描线) 13年省赛题
- (TLE待AC)CSU 1110 RMQ with Shifts
- 匈牙利最大匹配+大质数判定 csu1552 Friends
- ACM学习历程—CSU 1216 异或最大值(xor && 贪心 && 字典树)
- CSU1256 天朝的单行道(spfa)
- 【CSU 1556】Pseudoprime numbers
- CSU 1081集训队分组(搜索)