POJ 1328 Radar Installation(贪心法区间问题)

传送门

题目大意就是在平面直角坐标系中给定n个点,在x轴上建立尽可能少的信息发射站,在给定信息发射站的传输范围的情况下,求出最少建设的发射站使所有点都被覆盖。在平面直角坐标系中给定n个点,在x轴上建立尽可能少的信息发射站,在给定信息发射站的传输范围的情况下,求出最少建设的发射站使所有点都被覆盖。注意在每一次通过右端大于当前发射站的坐标而使区间出队后,都要判断一次队列是否为空。

代码如下

#include<iostream>
#include<cstdio>
#include<queue>
#include<cmath>
using namespace std;
int main()
{
    int n,d,cas = 0;
    while(scanf("%d %d",&n,&d) && (n!=0||d!=0))
    {
        priority_queue<pair<double,double> > qj;
        int flag = 1;
        for(int i = 1;i <= n; i++)
        {
            int x,y;
            scanf("%d %d",&x,&y);
            if(d >= y)
            {
                double temp = sqrt(d * d - y * y);
                qj.push(make_pair(x-temp,x+temp));
            }
            else    flag = 0;
        }
        if(flag == 0)
        {
            printf("Case %d: -1\n",++cas);
            continue;
        }
        int cnt = 0;
        double ed = 0x3f3f3f3f;
        while(!qj.empty())
        {
            while(!qj.empty() && qj.top().second >= ed)
                qj.pop();
            if(!qj.empty())
            {
                cnt++;
                ed = qj.top().first;
            }
        }
        printf("Case %d: %d\n",++cas,cnt);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/xiao__hei__hei/article/details/87874950