题目链接: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; }
时间: 2024-11-06 07:36:24