首页 > 代码库 > 【推导】Codeforces Round #364 (Div. 2) D. As Fast As Possible
【推导】Codeforces Round #364 (Div. 2) D. As Fast As Possible
一种方法是二分总时间,复杂度O(nlogn)。
另外我们可以证明,当所有人同时到达终点的时候,是最优的,因为没有人的时间“浪费”了。
我们又发现,每个人的运动过程总是两段,要么是走路,要么是坐车。于是每个人的运动都是等价的(坐车的时间也相等,走路的时间也相等)。
这里借用一下这个推导,懒得写了。
(http://blog.csdn.net/say_c_box/article/details/52001850)
根据上面的过程得出d以后,于是有d*(组数-1)+l1=l,然后就可以解出l1,然后l1/v2+(l-l1)/v1就是答案,因为每个人的运动过程相同,我们只需要算第一组人的运动总时间即可。
#include<cstdio> using namespace std; int n,K; double l,v1,v2; int main(){ while(scanf("%d%lf%lf%lf%d",&n,&l,&v1,&v2,&K)!=EOF){ int zu=n/K+(n%K ? 1 : 0); double l1=l*(v1+v2)/(2.0*v1*((double)zu-1.0)+v1+v2); printf("%.10f\n",l1/v2+(l-l1)/v1); } return 0; }
【推导】Codeforces Round #364 (Div. 2) D. As Fast As Possible
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。