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

  

原文地址:https://www.cnblogs.com/guoyongzhi/p/3243106.html