Radar Installation
Time Limit: 1000MS |
|
Memory Limit: 10000K |
Total Submissions: 56826 |
|
Accepted: 12814 |
Description
Assume the coasting is a infinite straight line. Side of coasting, sea in the other. Each of small island was a point locating in the sea side. and any radar installation, locating on the coasting, can only cover D-distance, so a island in the sea can is 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 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 a 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 all case contains-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 was followed by n lines each containing and 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 all test case output one line consisting of the test case number followed by the minimal number of radar installation S needed. "-1" installation means no solution for this case.
Sample Input
3 21 2-3 12 11 20 20 0
Sample Output
Case 1:2case 2:1
1#include <stdio.h>2#include <iostream>3#include <algorithm>4#include <math.h>5 using namespacestd;6 struct Island7 {8 Doublex, y;9 DoubleLeft , right;Ten}a[ -]; One intN; A intD; - BOOLCMP (Island A, b) - { the returnA.x <b.x; - } - - intMain () + { - //freopen ("A.txt", "R", stdin); + intCNT; A intAns =1 ; at BOOLFlag; - - while(~ scanf ("%d%d", &n, &d)) { - if(n = =0&& D = =0) - Break ; -Flag =0 ; in - for(inti =0; I < n; i++) { toscanf ("%LF%LF", &a[i].x, &a[i].y); + if(A[i].y >1.0* d | | A[i].y <0|| D <=0) { -Flag =1 ; the } * if(!flag) { $A[i].left = (Double) A[i].x-sqrt (1.0* d * D-A[I].Y *a[i].y);Panax NotoginsengA[i].right = (Double) a[i].x + sqrt (1.0* d * D-A[I].Y *a[i].y); - } the } + if(flag) { Aprintf ("Case %d: -1\n", ans++) ; the Continue ; + } -Sort (A, A +N, CMP); $CNT =1 ; $ DoubleL = a[0].left, R = a[0].right; - for(inti =1; I < n; i++) { - if(A[i].left >r) { thecnt++ ; -L =A[i].left;WuyiR =A[i].right; the } - Else { WuL =A[i].left; -R = A[i].right < r?a[i].right:r; About } $ } -printf ("Case %d:%d\n", ans++, CNT); - } - return 0 ; A}
View Code
Don't forget to keep the radar with the new one every time, Orz.
Radar installation (greedy)