首页 > 代码库 > codeforces 701 D. As Fast As Possible(数学题)
codeforces 701 D. As Fast As Possible(数学题)
题目链接: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(数学题)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。