• Virtual Judge POJ 1328 Radar Installation


    贪心

    #include<algorithm>
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    struct Radar {
        double start,end;
    } radar[1005];
    bool cmp(Radar a,Radar b) {
        return a.start<b.start;
    }
    int main() {
        int n,d,x,y,m,num,flag;
        double l,r;
        m = 1;
        while(scanf("%d%d",&n,&d)) {
            if(!n && !d)  //如果为0
                break;
            flag = true;
            for(int i = 0; i < n; i++) {
                scanf("%d%d",&x,&y);
                if(y > d)
                    flag = false;
                radar[i].start = x - sqrt(d * d - y * y);  //勾股定理
                radar[i].end = x + sqrt(d * d - y * y);  //区间覆盖范围
            }
            if(!flag) {
                printf("Case %d: -1
    ",m++);
                continue;
            }
            sort(radar,radar + n,cmp);   //排序  n为岛屿数目
            num = 1,l = radar[0].start,r = radar[0].end;//l和r是double  l为最左端的区间的左端  r为右端
            for(int i = 1; i < n; i++) {
                if(radar[i].start >= l && radar[i].end <= r) { // 某两块区间存在包含关系
                    l = radar[i].start;
                    r = radar[i].end;
                } else if(radar[i].start <= r && radar[i].end >= r) //某两个区间交叉
                    l = radar[i].start;
                else if(radar[i].start > r) { //两个区间没有交集
                    l = radar[i].start;
                    r = radar[i].end;
                    num++;
                }
            }
            printf("Case %d: %d
    ",m++,num);
        }
        return 0;
    }
  • 相关阅读:
    23.Vue技术栈开发实战-Icon组件
    shell脚本每行后面多了一个^M的原因和解决办法
    mmap概述
    camera otp介绍
    brk实现
    USB技术浅析
    带你遨游USB世界
    echarts 更换主题颜色
    Hive UDAF介绍与开发
    2020湖北高考理科第一名唐楚玥的学习方法演讲
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11746397.html
Copyright © 2020-2023  润新知