zoukankan      html  css  js  c++  java
  • 贪心,区间覆盖问题 Watering Grass UVA

    思路:贪心策略,对每个区间进行排序,然后先总的全区间为(0,0),然后,对区间不断的更新操作。每次只要去相对上的最大区间即可。

    #include<iostream>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int maxn = 10010;
    double l, w;
    pair<double, double>a[maxn];
    int n;
    int main(){
        while (cin >> n >> l >> w){
            int m = 0;
            for (int i = 0; i < n; ++i)
            {
                double x, r;
                cin >> x >> r;
                if (w>2 * r)continue;
                double temp = sqrt(r*r - w*w / 4);
                a[m++] = make_pair(x - temp, x + temp);        //计算区间
            }
            sort(a, a + m);
            double low = 0, up = 0;
            int cnt = 0;
            bool flag = 0;
            for (int i = 0; i < m; ++i)
            {
                if (a[i].first>up){ break; }        //保证新的区间与总的区间有交集
                if (a[i].second > up){
                    for (int j = i; j < m&&a[j].first <= low;++j)
                    if (a[j].second>up){
                        up = a[j].second;        //更新总的区间
                    }
                    cnt++;
                    if (up >= l){
                        flag = 1;
                        break;
                    }
                    low = up;
                }
            }
            cout << (flag ? cnt : -1) << endl;
        }
    }
  • 相关阅读:
    太湖杯WriteUp
    第九届网安竞赛writeup
    湖湘杯2020 writeup
    利用DNS缓存和TLS协议将受限SSRF变为通用SSRF
    十月学习计划
    2020GACTF部分wp
    2020 天翼杯 部分wp
    DASCTF 安恒七月赛wp
    开发步骤
    垃圾收集器与内存分配策略
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/10909023.html
Copyright © 2011-2022 走看看