zoukankan      html  css  js  c++  java
  • UVA 1616 Caravan Robbers 商队*者(二分)

    x越大越难满足条件,二分,每次贪心的选区间判断是否合法。此题精度要求很高需要用long double,结果要输出分数,那么就枚举一下分母,然后求出分子,在判断一下和原来的数的误差。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long double ld;
    const int maxn = 1e5+5;
    const ld eps = 1e-11;
    struct Seg
    {
        int l,r;
        bool operator < (const Seg& x) const {
            return l<x.l || (l == x.l && r < x.r);
        }
    }S[maxn];
    #define bug(x) cout<<#x<<'='<<x<<endl
    #define Pld(x) printf("%Lf
    ",x)
    int n;
    
    bool P(ld x)
    {
     //   Pld(x);
        ld cur = 0;
        for(int i = 0; i < n; i++){
            cur = max(cur,(ld)S[i].l);
            cur += x;
            if(cur-S[i].r>eps) return false;
    
        }
        return true;
    }
    
    int main()
    {
        //freopen("in.txt","r",stdin);
        while(~scanf("%d",&n)){
            for(int i = 0; i < n; i++){
                scanf("%d%d",&S[i].l,&S[i].r);
            }
            sort(S,S+n);
            ld L,R,mid;
            for(L = 0,R = S[n-1].r; R-L>eps; P(mid)?L=mid:R=mid)mid = (L+R)/2;
    
            int p,q;
            for(q = 1; q <= n+1; q++){
                p = round(L*q);
                ld t = (ld)p/q;
                if(fabs(t-L)<eps) { break;}
            }
            printf("%d/%d
    ",p,q);
        }
        return 0;
    }
  • 相关阅读:
    [转]Torch是什么?
    去掉 CONSOLE 窗口(转)
    最短路径问题
    最短路,dijstra算法
    最短路,floyd算法,图的最短路径
    freckles
    还是畅通工程,最小生成树kruskal
    More is better
    畅通工程
    人见人爱
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4716840.html
Copyright © 2011-2022 走看看