• hust 1536


    题目描述【问题背景】
    Yy成功地破解了密文。但是乘车到X国的时候,发现钱包被偷了,于是无奈之下只好作快递员来攒足路费完成旅行……
     
    【问题描述】
    一个快递公司要将n个包裹分别送到n个地方,并分配给邮递员yy一个事先设定好的路线,yy需要开车按照路线给的地点顺序相继送达,且不能遗漏一个地点。Yy得到每个地方可以签收的时间段,并且也知道路线中一个地方到下一个地方的距离。若到达某一个地方的时间早于可以签收的时间段,则必须在这个地方停留至可以签收,但不能晚于签收的时间段,可以认为签收的过程是瞬间完成的。
    为了节省燃料,yy希望在全部送达的情况下,车的最大速度越小越好,就找到了你给他设计一种方案,并求出车的最大速度最小是多少。
    输入

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

    每组数据一行,仅包括一个整数,为车的最大速度最小值,结果保留两位小数。
    样例输入

    3
    1 2 2
    6 6 2
    7 8 4

    样例输出

    2.00

    没什么好说的,直接二分最大速度,每一段都以最大速度来走
    #include<map>
    #include<set>
    #include<stack>
    #include<queue>
    #include<cmath>
    #include<vector>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #define  inf 0x0f0f0f0f
     
    using namespace std;
    const double eps=1e-6;
    const int maxn=200005;
    double be[maxn],ed[maxn],dis[maxn];
    int n;
     
    bool if_find(double s)
    {
         bool cut=true;
         double time=0;
         for (int i=1;i<=n;i++)
         {
              double t=time+dis[i]/s;
              if (t<=be[i]) time=be[i];
              else if (t>ed[i])
              {
                   cut=false;
                   break;
              }
              else if (t<=ed[i] && t>be[i]) time=t;
         }
         return cut;
    }
     
    double find(double x,double y)
    {
         while (y-x>eps)
         {
              double m=x+(y-x)/2;
              if (if_find(m)) y=m;
              else x=m;
         }
         return x;
    }
     
    int main()
    {
         double time;
         while(scanf("%d",&n)!=EOF)
         {
              time=0;
              for (int i=1;i<=n;i++)
              {
                   scanf("%lf%lf%lf",&be[i],&ed[i],&dis[i]);
                   time=max((dis[i]/(be[i]-be[i-1])),time);
              }
              printf("%.2lf
    ",find(0,time));
         }
         return 0;
    }

    作者 chensunrise

  • 相关阅读:
    Spring Boot 2.3.0 正式发布!
    当互联网码农遇见国企老同学
    GitHub发布重大更新,关系到所有程序员!
    开发者被要求向破解者道歉,竟揪出“阿里云假员工”,网友:这人有前科
    等了整整12年!Linux QQ 终于更新了!
    我的电脑不联网,很安全,黑客:你还有风扇呢
    grpc的简单用例 (golang实现)
    grpc的简单用例 (C++实现)
    redis键过期 (redis 2.6及以上)
    安装folly库以及folly的ConcurrentHashMap的简单使用
  • 原文地址:https://www.cnblogs.com/chensunrise/p/3829216.html
Copyright © 2020-2023  润新知