zoukankan      html  css  js  c++  java
  • UVA 1615 Highway 高速公路 (区间选点)

    题意:在一条线段上选出尽量少的点,使得和所有给出的n个点距离不超过D。

    分别计算出每个点在线段的满足条件的区间,然后就转化成了区间选点的问题了,按照右端点排序,相同时按照左端点排序,按照之前的排序一定保证了包含这个点的区间是连续的。贪心,每次选右边的端点,维护一个当前选择点的位置,每遇到区间就判断一下并更新一下点的位置。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5+5;
    struct seg
    {
        double l,r;
        bool operator < (const seg& x) const{
            return r < x.r || (r == x.r && l > x.l);
        }
    }S[maxn];
    
    
    int main()
    {
        int L,D,N;
        while(~scanf("%d%d%d",&L,&D,&N)){
            double dis = D;
            for(int i = 0; i < N; i++){
                double x,y; scanf("%lf%lf",&x,&y);
                double r = sqrt(dis*dis-y*y);
                S[i].l = x-r;
                S[i].r = x+r;
            }
            sort(S,S+N);
            double cur = -1e9;
            int ans = 0;
            for(int i = 0; i < N; i++){
                if(cur < S[i].l) {
                    cur = S[i].r < L ?S[i].r : L;
                    ans++;
                }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Java字符串(String类)
    Java异常处理
    Scanner使用方法
    OOP之重载
    构造函数和析构函数
    类、对象、方法
    函数
    数组
    ahk之路:利用ahk在window7下实现窗口置顶
    指针的问题
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4706196.html
Copyright © 2011-2022 走看看