zoukankan      html  css  js  c++  java
  • 【9703】小车问题

    Time Limit: 3 second
    Memory Limit: 2 MB

    【问题描述】

    甲、乙两人同时从A地出发要尽快同时赶到B地。出发时A地有一辆小车,可是这辆小车除了驾驶员外只能带一人。已知甲、乙两人的步行速度一样,且小于车的速度。问:怎样利用小车才能使两人尽快同时到达。
    

    【输入格式】

    仅一行,三个数据分别表示AB两地的距离S,人的步行速度a,车的速度b。
    

    【输出格式】

    两人同时(到达时间差小于0.00001)到达B地需要的最短时间,保留4位小数。
    

    【输入样例】

    120 5 25
    

    【输出样例】

    9.6000
    

    【题目链接】:http://noi.qz5z.com/viewtask.asp?id=9703

    【题解】

    之前在CF上做过的一道类似题的迷你版;
    那题是有n个人,每个人都能坐车,且车可以载k个人;问到终点的最短时间;(给你长度l和每个人的走路速度以及在车上的速度);
    具体的看这个;
    http://blog.csdn.net/harlow_cheng/article/details/52821115
    每个人在车上的时间是一样的;在车上的路程也是一样的;
    车到终点经过的时间和人到终点经过的时间也是一样的;
    (车先载第一波人到一个位置,然后回头载另外一个人,然后车上的人和走路的人一起到达终点);
    假如每个人在车上的时间不同。
    最后一波人到终点的时候,假设有人先到了终点则总是可以调整那堆人少坐一会车,最后这波人多做一会车以减少总时间;
    设车载到第一个人然后又回来接到第二个人的时间间隔为△t
    设第二个人原来的位置
    为x,等车又返回载它们的时候位置变成x+△t*v1
    则有
    x+△t*v1=x+g-(△t-g/v2)*v2; ····①
    右边的(△t-g/v2)*v2是这辆车接人到一个合适的位置后又往回走的距离;
    根据①式可得
    △t=(2g)/(v1+v2); ·····②
    且有
    △t+g/v2 = (l-g)/v1 + g/v2; ····③
    左边是车到达的时间,右边是人到达的时间;
    右边,(l-g)/v1就是每波人走路的时间了,g/v则是在车上的时间
    左边的一个△t表示要接到一个人到某个位置后再回来接到那个人的时间;
    然后再加上g/v2(最后坐车到终点);
    由③式,将②式代入可得
    g= l(v1+v2)/(2*v1+v1+v2);
    答案就是(l-g)/v1 + g/v2;

    【完整代码】

    #include <cstdio>
    
    int n;
    double l, v1, v2;
    
    int main()
    {
        scanf("%lf%lf%lf", &l, &v1, &v2);
        int n = 2;
        double g = (l*(v1 + v2)) / (2 * v1 + v1 + v2);
        double ans = (l - g) / v1 + g / v2;
        printf("%.4lf
    ", ans);
        return 0;
    }
  • 相关阅读:
    java中并发包简要分析01
    java中的集合包简要分析
    多线程学习——终结任务
    大型高并发高负载网站的系统架构
    An expression evaluator
    java公式解析器学习与开发(2)——前缀表达式
    java公式解析器学习与开发(1)
    程序员遇到bug时常见的30种反应
    图论--SCC强连通缩点--Tarjan
    图论--割边--Tarjan模板
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626895.html
Copyright © 2011-2022 走看看