zoukankan      html  css  js  c++  java
  • poj1328 Radar Installation —— 贪心

    题目链接:http://poj.org/problem?id=1328


    题解:区间选点类的题目,求用最少的点以使得每个范围都有点存在。以每个点为圆心,r0为半径,作圆。在x轴上的弦即为雷达可放置的范围。这个范围可用勾股定理求得。记录每个点的范围,然后排序,贪心。

    (由于不熟悉qsort的用法,折腾了一个小时。后来清晰了:qsort 的cmp是通过正负判断(但结构体又不是),而sort的cmp是通过对错判断,即0或1。所以qsort的cmp用‘-’(结构体除外),sort的cmp用‘<’和‘>’判断,决定以后用sort,要加上<algorithem>  和 std。


    代码如下:

    #include<cstdio>//poj 1328 贪心
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    
    typedef struct
    {
        double l,r;
    }edge, *E;
    edge e[1010];
    
    int cmp(const void *a, const void*b)
    {   
        return ((E)a)->r > ((E)b)->r?1:-1;
    }
    
    int solve(int n)
    {
        int sum = 1;
        double brim = e[0].r;
        for(int i = 1; i<n; i++)
        {
            if(brim<e[i].l)
            {
                brim = e[i].r;
                sum ++;
            }
        }
        return sum;
    }
    
    int main()
    {
        int n,B,t = 0;
        double r0,x,y,r;
        while(scanf("%d %lf",&n,&r0) && (n||r0))
        {
            B = 1;
            for(int i = 0; i<n; i++)
            {
                scanf("%lf %lf",&x,&y);
                if(y>r0)
                    B = 0;
                r = sqrt(r0*r0-y*y);
                e[i].l = x - r;
                e[i].r = x + r;
            }
    
            if(B)
            {
                qsort(e,n,sizeof(e[0]),cmp);
                printf("Case %d: %d
    ",++t,solve(n));
            }
            else
                printf("Case %d: -1
    ",++t);
        }
        return 0;
    }
    


  • 相关阅读:
    MySQL Sandbox安装使用
    主从复制延时判断
    Carthage
    QCon 2015 阅读笔记
    QCon 2015 阅读笔记
    Scrum&Kanban在移动开发团队的实践 (一)
    移动开发-第三方聊天服务
    开通博客
    spark的若干问题
    hadoop2.2.0安装需要注意的事情
  • 原文地址:https://www.cnblogs.com/DOLFAMINGO/p/7538787.html
Copyright © 2011-2022 走看看