zoukankan      html  css  js  c++  java
  • 洛谷p1325雷达安装(贪心+计算几何)

    传送门

    //p1325雷达安装
     
    //很明显雷达应该安装在海岸线上 
    //而为了满足一个点被覆盖那在区间[x - sqrt(d ^ 2 - y ^ 2), x + sqrt(d ^ 2 - y ^ 2)]之中必有一个雷达 
    //现在就转换为一个区间覆盖问题:选尽量少的点使得每一个区间之内都有一个点 
    //把这些区间按右端点排序,记录last为上次雷达安装的点,若一个区间的左端点>last,那这个区间就不能被之前的点覆盖
    //更新last=该区间的右端点(贪心选择,右端点有几率覆盖更多的区间),ans++ 
    
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    
    using namespace std;
    
    int n;
    double d;
    double x[1010], y[1010];
    double l[1010], r[1010];
    int ra[1010], ans;
    double last = -1000000000.0;
    
    bool cmp(int a, int b) {
        return r[a] < r[b];
    }
    
    int main() {
        cin >> n >> d;
        for (int i = 1; i <= n; i++) {
            cin >> x[i] >> y[i];
            if (y[i] > d) {
                cout << -1;
                return 0;
            }
            l[i] = x[i] - sqrt(d * d - y[i] * y[i]);
            r[i] = x[i] + sqrt(d * d - y[i] * y[i]);
        }
        for (int i = 1; i <= n; i++) ra[i] = i;
        sort(ra + 1, ra + n + 1, cmp);
        for (int i = 1; i <= n; i++) {
            if (l[ra[i]] > last) {
                ans++;
                last = r[ra[i]];
            }
        }
        cout << ans;
        return 0;
    }
  • 相关阅读:
    构建WebGL目标时的内存考量
    译作感想
    sign
    VS code搭建C环境
    003 总线
    计算机混淆概念(更新……)
    002计算机硬件性能指标
    001计算机基本组成与工作过程
    Linux虚拟机手动安装eclipse
    VMware安装vmtools实现宿主机和虚拟机共享粘贴板
  • 原文地址:https://www.cnblogs.com/zcr-blog/p/11930442.html
Copyright © 2011-2022 走看看