zoukankan      html  css  js  c++  java
  • 【贪心】时空定位II 区间覆盖

    问题 : 【贪心】时空定位II

    题目描述

    有一块空间,横向长w,纵向长为h,在它的横向中心线上不同位置处装有n(n≤10000)个点状的定位装置,每个定位装置i定位的效果是让以它为中心半径为Ri的圆都被覆盖。请在给出的定位装置中选择尽量少的定位装置,把整个空间全部覆盖。

    输入

    第一行输入一个正整数N表示共有n次测试数据。
    每一组测试数据的第一行有三个整数n,w,h,n表示共有n个定位装置,w表示空间的横向长度,h表示空间的纵向长度。
    随后的n行,都有两个整数xi和ri,xi表示第i个定位装置的横坐标(最左边为0),ri表示该定位装置能覆盖的圆的半径。

    输出

    每组测试数据输出一个正整数,表示共需要多少个定位装置,每个输出单独占一行。
    如果不存在一种能够把整个空间覆盖的方案,请输出0。

    样例输入

    2
    2 8 6
    1 1
    4 5
    2 10 6
    4 5
    6 5
    

    样例输出

    1
    2
    思路:求出每个区间的左右端点, 然后按左端点排序;
    从左到右扫一遍就好。
    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn = 605;
    struct uct {
        double left, right;
    };
    bool cmp(uct a, uct b) {
        if(a.left == b.left) {
            return a.right > b.right;
        }
        return a.left < b.left;
    }
    
    int main() {
        ios::sync_with_stdio(false);
        uct s[maxn];
        int n, t;
        cin >> t;
        while(t--) {
            double r, w, h, x;
            cin >> n >> w >> h;
            h = h*1.0/2;
            for(int i = 0; i < n; i++) {
                cin >> x >> r;
                if(r > h) {
                    double y = r*r - h*h;
                    s[i].left =  max(x - sqrt(y), 0.0);
                    s[i].right = min(x + sqrt(y), w);
                } else {
                    s[i].left = x;
                    s[i].right = x;
                }
            }
            sort(s, s+n, cmp);
            int cnt = 0;
            double start = 0;
            int i = -1;
            while(start < w && s[i+1].left <= start) {
                double MAX = -1;
                for(int j = i + 1; s[j].left <= start && j < n; j++) {
                   if(MAX < s[j].right){
                    MAX =  s[j].right;
                    i = j;
                   }
                }
                start  = MAX;
                cnt++;
            }
            if(start >= w) cout << cnt << endl;
            else cout << 0 << endl;
        }
        return 0;
    }
    我咋帅得一塌糊涂
  • 相关阅读:
    classpath多个包添加
    不错的博客
    ARCGIS10.1 GeoDatabase深入理解:客户端连接与退出地理数据库时系统表的初始化
    ArcGIS Geodatabase版本控制机制的学习总结
    ARCGIS 10.1 发布服务问题以及注意事项汇总
    关于项目外包的一些总结
    ArcGIS与SuperMap的使用比较(1)
    [译]关于JavaScript 作用域你想知道的一切
    Apache 配置ArcGIS server/portal 反向代理
    arcgis server 无法手动删除切片
  • 原文地址:https://www.cnblogs.com/cshg/p/5689647.html
Copyright © 2011-2022 走看看