zoukankan      html  css  js  c++  java
  • poj1328(Radar Installation)

    题目大意:

    X轴为陆地,X轴上方为大海,海中有多个小岛,坐标为(x,y)。给你任意多个雷达,雷达的扫描范围i是一个以半径为D的圆,问你至少用几个雷达可以将所有小岛覆盖。如不能完全覆盖输出“-1”。

    解题思路:

    简单贪心。以每个小岛为圆心作以半径为D的圆,找出与X轴相交的区间,意思为在这个区间上的任意一点都可以作为圆心,包含这个小岛。 这时就需要把所有小岛的在X轴的区间找到。 有交集的部分说明可以用一个圆覆盖。这是算出最小的圆, 先排序,排序之后找到最左边小岛的的右区间,然后看每一个小岛的左区间是否比右区间小,如果小的话,说明有交集,就可以用一个圆来覆盖。

    代码:

     1 #include<cstdio>
     2 #include<math.h>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 
     7 using namespace std;
     8 
     9 struct Node
    10 {
    11     double x,y;
    12 };
    13 Node node[2000];
    14 
    15 Node x[2000];
    16 double cmp(Node a,Node b)
    17 {
    18     return a.y<b.y;
    19 }
    20 int main()
    21 {
    22     int n;
    23     double d;
    24     int cas=1;
    25     while(scanf("%d%lf",&n,&d)!=EOF)
    26     {
    27         if (d==0&&n==0)
    28             break;
    29         int i,j;
    30         int ce=0;
    31         for(i=0; i<n; i++)
    32         {
    33             scanf("%lf%lf",&node[i].x,&node[i].y);
    34             if (node[i].y>d)
    35                 ce=1;
    36         }
    37         printf("Case %d: ",cas++);
    38         if (ce)
    39         {
    40             printf("-1
    ");
    41             continue;
    42         }
    43         double c;
    44         int flag=0;
    45         for(i=0; i<n; i++)
    46         {
    47             c=d*d-node[i].y*node[i].y;
    48             c=sqrt(c);
    49             x[i].x=node[i].x-c;
    50             x[i].y=node[i].x+c;
    51         }
    52         sort(x,x+n,cmp);
    53         double k=0;
    54         int sum=1;
    55         k=x[0].y;
    56         for(j=1; j<n; j++)
    57         {
    58             if (k<x[j].x)
    59             {
    60                 sum++;
    61                 k=x[j].y;
    62             }
    63         }
    64         printf("%d
    ",sum);
    65     }
    66     return 0;
    67 }
    View Code
    屌丝终有逆袭日,*******。
  • 相关阅读:
    单词接龙
    字符串,字符数组
    马的遍历
    约瑟夫问题
    扫雷游戏
    寻找道路
    传纸条
    数的划分
    火柴棒等式
    火星人
  • 原文地址:https://www.cnblogs.com/ZhaoPengkinghold/p/3735093.html
Copyright © 2011-2022 走看看