• Vijos1450 包裹快递[二分答案]


    背景

    小K成功地破解了密文。但是乘车到X国的时候,发现钱包被偷了,于是无奈之下只好作快递员来攒足路费去Orz教主……

    描述

    一个快递公司要将n个包裹分别送到n个地方,并分配给邮递员小K一个事先设定好的路线,小K需要开车按照路线给的地点顺序相继送达,且不能遗漏一个地点。小K得到每个地方可以签收的时间段,并且也知道路线中一个地方到下一个地方的距离。若到达某一个地方的时间早于可以签收的时间段,则必须在这个地方停留至可以签收,但不能晚于签收的时间段,可以认为签收的过程是瞬间完成的。

    为了节省燃料,小K希望在全部送达的情况下,车的最大速度越小越好,就找到了你给他设计一种方案,并求出车的最大速度最小是多少。

    格式

    输入格式

    第1行为一个正整数n,表示需要运送包裹的地点数。

    下面n行,第i+1行有3个正整数xi,yi,si,表示按路线顺序给出第i个地点签收包裹的时间段为[xi, yi],即最早为距出发时刻xi,最晚为距出发时刻yi,从前一个地点到达第i个地点距离为si,且保证路线中xi递增。

    可以认为s1为出发的地方到第1个地点的距离,且出发时刻为0。

    输出格式

    仅包括一个整数,为车的最大速度最小值,结果保留两位小数。

    样例1

    样例输入1[复制]

    3
    1 2 2
    6 6 2
    7 8 4

    样例输出1[复制]

    2.00

    限制

    对于20%的数据,n≤10;
    对于30%的数据,xi,yi,si≤1000。

    对于50%的数据,n≤1000;
    对于100%的数据,n≤200000;xiyi108xiyi108si107si107

    时限1s

    提示

    第一段用1的速度在时间2到达第1个地点,第二段用0.5的速度在时间6到达第2个地点,第三段用2的速度在时间8到达第3个地点。


    实数二分,维护一个当前时间t,每到一个地方先判可行再更新t
    精度1e-3都可以
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    using namespace std;
    typedef long long ll;
    const int N=2e5+5;
    inline int read(){
        char c=getchar();int x=0,f=1;
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*f;
    }
    int n,x[N],y[N],s[N];
    double l=0,r=0;
    bool check(double v){
        double t=0;
        for(int i=1;i<=n;i++){
            t+=(double)s[i]/v;//printf("t %d %lf
    ",i,t);
            if(t>y[i]) return 0;
            t=max(t,(double)x[i]);
        }
        return 1;
    }
    int main(){
        n=read();
        for(int i=1;i<=n;i++){x[i]=read();y[i]=read();s[i]=read();r=max(r,(double)y[i]);}
        while(r-l>=1e-3){
            double m=(l+r)/2;//printf("%lf
    ",m);
            if(check(m)) r=m;
            else l=m;
        }
        printf("%.2f",l);
    }
     
  • 相关阅读:
    初学vue,vue2.0+vue-router+vuex的小项目
    解决安卓键盘将下面元素顶上来的问题
    ng1 与 vue 状态管理比较--个人理解
    js数组内元素移动,适用于拖动排序
    vuex--mutation,action个人理解
    git--删除.DS_Store
    app的设计 有感
    transformClassesWithDexForArmv7Debug --解决办法
    :mergeArmv7DebugResources:Some file crunching failed, see logs for details解决办法
    CET-6 分频周计划生词筛选(Week 2)
  • 原文地址:https://www.cnblogs.com/candy99/p/5937152.html
Copyright © 2020-2023  润新知