POJ1328

Posted fzfn5049

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ1328相关的知识,希望对你有一定的参考价值。

本来是出给集训队新人做的,结果差点出成给我自己做的了...wa差点有点怀疑人生...

首先我们看到这个题目的时候,其实还是要想到建立怎么样的模型,不然就会不知道从哪里入手...我们经过分析这应该是个区间贪心问题(其实这个分析过程才是最重要的,这个可能是通过大量的练习而掌握的,或者思维灵活,可以一下子跳出来...区间贪心相关问题还可以查看刘汝佳书上p232的贪心相关问题)....

然后想到这是个区间贪心问题后,我们就该思考下一个问题,就是我们的区间应该是怎么确定的呢?我们雷达的扫描范围是一个圆,我们可以画一个图,其实就可以发现,我们的极端情况就是我们我们这个点刚好在雷达的圆弧上,我们这里可以求出一个值temp,x-temp就是左极限,x+temp就是右极限....

然后我们每次贪心的取右边的就好,如果第三个的区间小于第二个(其实不可能,只有一种情况,就是这个点的y坐标正好是圆的半径,画个图就行了)...

 

//
// Created by luckybird on 2017/11/12.
//

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;

const int maxn = 1e3 + 10;

struct data{
    int x,y;
    double left,right;
}num[maxn];

bool cmp(data a, data b)
{
    return a.left <= b.left;
}

int main()
{
    int n;
    int d;
    int cases = 1;
    while( ~scanf("%d%d", &n,&d ))
    {
        if( d == 0 && n == 0)
            break;
        int i,j;
        int flag = 0;
        for( i = 0; i < n; i++ )
        {
            scanf("%d%d", &num[i].x,&num[i].y);
            if( num[i].y > d )
            {
                flag = 1;
            }

            double temp = sqrt( (double)1.0*d*d-1.0*num[i].y*num[i].y);
            num[i].left = num[i].x - temp;
            num[i].right = num[i].x + temp;
        }

        if(flag == 1)
        {
            printf("Case %d: -1\n", cases++);
            continue;
        }

        sort(num,num+n,cmp);
        int ans = 1;
        double loc = num[0].right;
        for( i = 1; i < n; i++ )
        {
            if(num[i].left > loc )
            {
                ans++;
                loc = num[i].right;
            }

            else if( num[i].right < loc)
                loc = num[i].right;
        }
        printf("Case %d: %d\n", cases++,ans);
    }
    return 0;
}

 

以上是关于POJ1328的主要内容,如果未能解决你的问题,请参考以下文章

POJ 1328 Radar Installation 贪心算法

poj1328

[POJ1328]Radar Installation

POJ 1328 Radar Installation 贪心题解

POJ 1328 Radar Installation(贪心)

贪心-poj1328