• Radar Installation


    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

    海岛和雷达问题,看看怎样用最少的雷达覆盖所有海岛;
    输入 3 2 是海岛数 和雷达覆盖半径;
    接下来是 : 海岛坐标
    我感觉这题好奇葩,测试数据都过了,就是提交不上,说明你还是有地方用了整形(%d),看看能换的全部用double 试试;
    下面是我同学的代码……我的是数据都过 ……就是WA
     1 #include <stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<math.h>
     5 using namespace std;
     6 struct node
     7 {
     8    double a,b;
     9 }area[1005];
    10 int cmp(const void *a,const void *b)
    11 {
    12     return (*(node *)a).b>(*(node *)b).b?1:-1;
    13 }
    14 int main()
    15 {
    16     int n,i,sum,f,h=1;
    17     double x,y,d,e;
    18     while(~scanf("%d%lf",&n,&d)&&(n!=0||d!=0))
    19     {
    20          f=0;   sum=1;
    21         for(i=0; i<n; i++)
    22         {
    23             scanf("%lf%lf",&x,&y);
    24             area[i].a=x-sqrt(d*d-y*y);//这里是坐标转区间
    25             area[i].b=x+sqrt(d*d-y*y);
    26             if(y<0)
    27             y=-y;
    28             if(y>d)
    29             f=1;
    30         }
    31 
    32         if(f)
    33         printf("Case %d: -1
    ",h);
    34 
    35         else
    36         {
    37             qsort(area,n,sizeof(area[0]),cmp);
    38             e=area[0].b;
    39             for(i=1; i<n; i++)
    40             {
    41                 if(area[i].a>e)//找左边界小于该右边界的
    42                 {
    43                     sum++;
    44                     e=area[i].b;
    45                 }
    46             }
    47             printf("Case %d: %d
    ",h,sum);
    48         }
    49         h++;
    50     }
    51     return 0;
    52 }
    View Code
  • 相关阅读:
    sql Test
    使用Team Foundation Server进行源代码管理
    幸运的秘密
    使用Dotmsn扩展Joymsg聊天机器人,使其同时支持QQ.MSN
    发布.net项目开发工具新版
    C#.Net项目生成器(ibatis)使用说明
    敏捷开发,Agile Development
    单元测试基础篇VS2008
    iBATIS.NET
    IBatis.Net学习笔记系列
  • 原文地址:https://www.cnblogs.com/kongkaikai/p/3241781.html
Copyright © 2020-2023  润新知