• Radar Installation(贪心)


    Radar Installation
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 56826   Accepted: 12814

    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<stdio.h>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<math.h>
     5 using namespace std;
     6 struct island
     7 {
     8     double x , y ;
     9     double left , right ;
    10 }a[2000];
    11 int n ;
    12 int d ;
    13 bool cmp (island a , island b)
    14 {
    15     return a.x < b.x ;
    16 }
    17 
    18 int main ()
    19 {
    20   //  freopen ("a.txt" , "r" , stdin) ;
    21     int cnt ;
    22     int ans = 1 ;
    23     bool flag ;
    24 
    25     while (~ scanf ("%d%d" , &n , &d)) {
    26             if (n == 0 && d == 0)
    27                 break ;
    28             flag = 0 ;
    29 
    30         for (int i = 0 ; i < n ; i++) {
    31             scanf ("%lf%lf" , &a[i].x , &a[i].y) ;
    32             if (a[i].y > 1.0 * d || a[i].y < 0 || d <= 0) {
    33                 flag = 1 ;
    34             }
    35             if (!flag) {
    36                 a[i].left = (double) a[i].x - sqrt (1.0 * d * d - a[i].y * a[i].y) ;
    37                 a[i].right = (double) a[i].x + sqrt (1.0 * d * d - a[i].y * a[i].y) ;
    38             }
    39         }
    40         if (flag) {
    41             printf ("Case %d: -1
    " , ans++) ;
    42             continue ;
    43         }
    44         sort (a , a + n , cmp) ;
    45         cnt = 1 ;
    46         double l = a[0].left , r = a[0].right ;
    47         for (int i = 1 ; i < n ; i++) {
    48                     if (a[i].left > r) {
    49                             cnt++ ;
    50                             l = a[i].left ;
    51                             r = a[i].right ;
    52                         }
    53                     else {
    54                         l = a[i].left ;
    55                         r = a[i].right < r ? a[i].right : r ;
    56                     }
    57                 }
    58         printf ("Case %d: %d
    " , ans++ , cnt) ;
    59     }
    60     return 0 ;
    61 }
    View Code

    别忘记每次都要跟新放radar的区间 ,orz

  • 相关阅读:
    PCLint
    pthread_join
    作业过程查找
    sqlcmd (转)
    整合问题
    PATINDEX
    回归Dos操作的快感,进入PowerShell世界 (转)
    Javascript 面向对象编程(一):封装
    理解闭包
    Javascript 面向对象编程(三):非构造函数的继承
  • 原文地址:https://www.cnblogs.com/get-an-AC-everyday/p/4298582.html
Copyright © 2020-2023  润新知