codeforces 701 D. As Fast As Possible(數學題)
阿新 • • 發佈:2017-05-09
1.0 我們 force 時間 tar 遠的 每次 space http
題目鏈接:http://codeforces.com/problemset/problem/701/D
題意:給你n個人,每個人走路的速度v1,有一輛車速度為v2,每次可以載k個人,總路程為l,每個人只能上一次車,問最少需要多少時間把所有人送到終點
題解:首先要使的時間最短肯定是所有人同時到達終點,那麽肯定每人坐車的時間是相同的。
不妨設一下車一趟來回的時間為t,乘車距離為a。可以得到
(l-a)/v1+a/v2=t*(gg-1)+a/v2(意思就是最後一批人乘車到達終點時所有人同時到達終點)
也就是說我們要求的是(l-a)/v1+a/v2,那麽就要把a表示出來。
t*v1=a-(t-a/v2)*v2(在車來回的這段時間裏剩下的人走了t*v1,(t-a/v2)*v2表示車回來開了多遠的路)
結合兩個式子可以得到a=l*(v1+v2)/(v1+v2+2*v1(gg-1))
然後就可以得到答案了。
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int main() { int n , l , v1 , v2 , k; scanf("%d%d%d%d%d" , &n , &l , &v1 , &v2 , &k); int gg = n / k + (n % k ? 1 : 0); double a = 1.0 * l * (v1 + v2) / (1.0 * (v1 + v2 + 2 * v1 * (gg - 1))); printf("%.10lf\n" , a / (1.0 * v2) + (1.0 * l - a) / (1.0 * v1)); return 0; }
codeforces 701 D. As Fast As Possible(數學題)