• Codeforces Round #364 (Div.2) D:As Fast As Possible(模拟+推公式)


    题目链接:http://codeforces.com/contest/701/problem/D


    题意:

    给出n个学生和能载k个学生的车,速度分别为v1,v2,需要走一段旅程长为l,每个学生只能搭一次车,问最少时间到达目的地。


    分析:

    要使得时间最少,最后车和所有学生应该是同时到达的,我们可以观察到第一组乘车的学生和最后一组乘车的学生两者搭车时间和走路时间是相同的,那么猜想中间所有组的的学生乘车时间和走路时间是相同的(不是乘车==走路),即所有学生的乘车时间相同,走路时间相同。那么第一组学生时间为 l1/v2+(l-l1)/v1,每组搭车前走路的距离为p,有公式

    p*tot(为组数-1)/v1+(l-p*tot)/v2,然后用l1表示p,可以得到 (v1*l1/v2+v1*(l-v1*l1/v2)/(v1+v2),那么可以得到l1*((v1/v2+v1/(v1+v2)-v1*v1/(v2*(v1+v2))*tot+1)=l

    然后就好了;


    代码:

    #include<cstdio>
    #include<iostream>
    using namespace std;
    #define LL __int64
    
    LL m,l,v1,v2,k,count;
    
    int main()
    {
        double l1=0,t;
        cin>>m>>l>>v1>>v2>>k;
        if(k==m) cout<<l*1.0/v2<<endl;
        else
        {
            count=(m%k)?m/k:m/k-1;
            l1=l*1.0/(count*(v1*1.0/v2+v1*1.0/(v1+v2)-v1*v1*1.0/((v1+v2)*v2))+1);
            t=l1/v2+(l*1.0-l1)/v1;
            printf("%.10f
    ",t);
        }
    } 
  • 相关阅读:
    c++Primer再学习(1)
    c++Primer再学习练习Todo
    感悟(一)
    新目标《C++程序设计原理与实践》
    C++Primer再学习(4)
    开篇
    C++Primer再学习(3)
    C++实现的单例模式的解惑
    使用springboot缓存图片
    springboot h2 database
  • 原文地址:https://www.cnblogs.com/chendl111/p/5698749.html
Copyright © 2020-2023  润新知