zoukankan      html  css  js  c++  java
  • Radar Installation(POJ 1328 贪心)

    ~题目链接~

    http://poj.org/problem?id=1328

    输入

    3 2
    1 2
    -3 1
    2 1
    
    1 2
    0 2
    
    0 0

    结果

    Case 1: 2
    Case 2: 1

    1.小岛上的雷达在X轴上有覆盖区域,左点 x-sqrt(d*d-y*y)和 右点 x+sqrt(d*d-y*y).

    2.对左覆盖点就行排序,(区域覆盖问题)。

    贪心

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
    #define maxn 1000+10
    
    int num=0;
    
    struct node
    {
        double l,r;
    } N[maxn],M;
    
    int main()
    {
        int n;
        double d;
        while(~scanf("%d%lf",&n,&d) && (n!=0 || d!=0))
        {
            num++;
            int i,j,flag=0,sum=1;
            double x,y,f;
            for(i=0; i<n; i++)
            {
                scanf("%lf%lf",&x,&y);
                if(y<=d && y>=0)
                {
                    N[i].l=x-sqrt(d*d-y*y);//左点
                    N[i].r=x+sqrt(d*d-y*y);//右点
                }
                else
                    flag=1;
            }
            if(!flag)
            {
                for(i=0; i<n-1; i++)
                    for(j=0; j<n-i-1; j++)
                        if(N[j].r>=N[j+1].r)//对有点进行排序
                        {
                            M=N[j];
                            N[j]=N[j+1];
                            N[j+1]=M;
                        }
                f=N[0].r;
                for(i=1; i<n; i++)
                {
                    if(N[i].l>f)//如果该区域的右点大于前一个区域的右点,则无覆盖,雷达数增加
                    {
                        sum++;
                        f=N[i].r;
                    }
                }
                printf("Case %d: %d
    ",num,sum);
            }
            else
                printf("Case %d: -1
    ",num);
        }
    
        return 0;
    }
    

     给出20组测试数据,以便测试

    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
    
    ================结果
    Case 1: 1
    Case 2: 2
    Case 3: 4
    Case 4: 1
    Case 5: 1
    Case 6: -1
    Case 7: 3
    Case 8: -1
    Case 9: 2
    Case 10: 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
    

      

  • 相关阅读:
    Search a 2D Matrix
    binary search bug
    Find Minimum in Rotated Sorted Array II
    Search in Rotated Sorted Array 【新思路】
    Find Peak Element
    Find Minimum in Rotated Sorted Array
    DFS判断连通图
    分支限界法解决01背包问题
    python中ndarray和matrix
    python对数组缺失值进行填充
  • 原文地址:https://www.cnblogs.com/guoyongzhi/p/3243106.html
Copyright © 2011-2022 走看看