zoukankan      html  css  js  c++  java
  • POJ 1328 Radar Installation【贪心】

    POJ 1328

    题意:

    将一条海岸线看成X轴,X轴上面是大海,海上有若干岛屿,给出雷达的覆盖半径和岛屿的位置,要求在海岸线上建雷达,在雷达能够覆盖全部岛屿情况下,求雷达的最少使用量。

    分析:

    贪心法,先研究一下每个岛屿,设岛屿到海岸线的垂直距离为d,雷达的覆盖半径为k,若d>k,直接输出-1,若d<=k,则雷达的建造有一个活动区间[x1,x2](用平面几何可以求得出来)。因此,在可以覆盖的情况下每个岛屿都有一个相应的活动区间。该问题也就转变成了最少区间选择问题即:

    在n个区间中选择一个区间集合,集合中的各个区间都不相交,集合中元素的个数就是答案了。

    #include <iostream>
    #include <algorithm>
    #include <stdlib.h>
    #include <math.h>
    #include <stdio.h>
    using namespace std;
    
    struct point
    {
        double left, right;
    }p[2010], temp;
    
    bool operator < (point a, point b)
    {
        return a.left < b.left;
    }
    
    int main()
    {
        int n;
        double r;
        int kase = 0;
        while(true)
        {
            scanf("%d%lf",&n,&r);
            if(n==0&&r==0)break;
            bool flag = false;
            for (int i = 0; i < n; i++)
            {
                double a, b;
                scanf("%lf%lf",&a,&b);
                if (fabs(b) > r)
                {
                    flag = true;
                }
                else
                {
                    p[i].left = a * 1.0 - sqrt(r * r - b * b);
                    p[i].right = a * 1.0 + sqrt(r * r - b * b);
                }
            }
            cout << "Case " << ++kase << ": ";
            if (flag)
            {
                cout << -1 << endl;
            }
            else
            {
                int count = 1;
                sort(p, p + n);
                temp = p[0];
    
                for (int i = 1; i < n; i++)
                {
                    if (p[i].left > temp.right)//不重叠
                    {
                        count++;
                        temp = p[i];
                    }
                    else if (p[i].right < temp.right)//重叠取里面的端点
                    {
                        temp = p[i];
                    }
                }
                cout << count << endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    【已解决】github中git push origin master出错:error: failed to push some refs to
    好记心不如烂笔头,ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题
    THINKPHP 5.0目录结构
    thinkphp5.0入口文件
    thinkphp5.0 生命周期
    thinkphp5.0 架构
    Django template
    Django queryset
    Django model
    Python unittest
  • 原文地址:https://www.cnblogs.com/demian/p/6557032.html
Copyright © 2011-2022 走看看