Codeforces 701D. As Fast As Possible(二分)
来源:互联网 发布:一辈子单身感受知乎 编辑:程序博客网 时间:2024/06/06 01:24
On vacations n pupils decided to go on excursion and gather all together. They need to overcome the path with the lengthl meters. Each of the pupils will go with the speed equal tov1. To get to the excursion quickly, it was decided to rent a bus, which has seats fork people (it means that it can't fit more thank people at the same time) and the speed equal tov2. In order to avoid seasick, each of the pupils want to get into the busno more than once.
Determine the minimum time required for all n pupils to reach the place of excursion. Consider that the embarkation and disembarkation of passengers, as well as the reversal of the bus, take place immediately and this time can be neglected.
The first line of the input contains five positive integers n, l, v1,v2 andk (1 ≤ n ≤ 10 000,1 ≤ l ≤ 109,1 ≤ v1 < v2 ≤ 109,1 ≤ k ≤ n) — the number of pupils, the distance from meeting to the place of excursion, the speed of each pupil, the speed of bus and the number of seats in the bus.
Print the real number — the minimum time in which all pupils can reach the place of excursion. Your answer will be considered correct if its absolute or relative error won't exceed10 - 6.
5 10 1 2 5
5.0000000000
3 6 1 2 1
4.7142857143
In the first sample we should immediately put all five pupils to the bus. The speed of the bus equals2 and the distance is equal to 10, so the pupils will reach the place of excursion in time 10 / 2 = 5.
题意:现在有n个人,路程长度为l,人行走速度为v1,有一辆车,每次能载k人,车行走速度为v2,每个人最多只能坐一次车,求n个人走完l的最少花费时间。
思路:每个人只能坐一次车,所以最后到达终点的人决定总时间,可以看出,用车每次载k个人,行走一定的距离,然后折返载下一趟人追上上一趟的人这种情
况能得出最优值。所以假设第一趟车载人时间为t1,所以两边的人相距v2*t1-v1*t1,假设第二趟车载人时间为t2,因为要追上上一趟,所以v2*t1-v1*t1+v1*t2=v2*t2,
所以t1=t2,也就是每人坐车的时间相等。
车载人的趟数:p=(n+k-1)/k。
设总时间为t,每人坐车的时间t1,则v1*(t-t1)+v2*t1=l,所以t1可以用t表示,设折返时间为t2,则(v2-v1)*t1=(v2+v1)*t2,而且t2*(p-1)+t1*p<=t。这样二分时间t就
可以求出结果。
#include <bits/stdc++.h>using namespace std;double v1, v2, l;int n, k;bool check(double t){ double t2 = (l-t*v1)/(v2-v1); double t3 = (v2-v1)*t2/(v2+v1); int p = (n+k-1)/k; return t2*p+(p-1)*t3<=t;}int main(){ scanf("%d %lf %lf %lf %d", &n, &l, &v1, &v2, &k); double ll = l/v2, r = l/v1, mid; for(int i = 1;i <= 100000;i++){ mid = (ll+r)/2; if(check(mid)) r = mid; else ll = mid; } printf("%.7lf\n", r);}
- Codeforces 701D. As Fast As Possible(二分)
- codeforces 701 D. As Fast As Possible
- CodeForces - 701D As Fast As Possible (数学推导)
- 【45.61%】【codeforces 701D】As Fast As Possible
- Codeforces Round #364 (Div. 2) D. As Fast As Possible 【二分+贪心+验证】
- codeforces round #364 div2 D As Fast As Possible 二分+贪心
- div.2/D. As Fast As Possible<数学题,二分>
- Codeforces Round #364 (Div. 2) D. As Fast As Possible
- Codeforces Round #364 (Div. 2) D. As Fast As Possible
- codeforces 364 div2 D As Fast As Possible
- cf/Codeforces Round #364 D As Fast As Possible 数学
- Codeforces Round #364 (Div. 2) D As Fast As Possible
- Codeforces Round #364 (Div. 2) D. As Fast As Possible(数学推导)
- Codeforces Round #364 (Div. 2) D As Fast As Possible(数学)
- As Fast As Possible
- Codeforces700A Fast As Possible(二分+找规律)
- Codeforces Round #364(Div. 2) D. As Fast As Possible 【数学】
- Codeforces Round #364 (Div. 2), problem: (D) As Fast As Possible
- OpenWrt添加DDNS服务提供商(花生壳)的方法
- 单例模式
- java中的回调函数
- 网络爬虫技术总结
- 【Cocos2d-x】pthread库的使用
- Codeforces 701D. As Fast As Possible(二分)
- 【2016.10.6NOIP普及模拟】Pond
- 图像缩放之双三次插值法
- Android_悬浮效果
- 编译Android出错:Unable to execute dex: Java heap space
- JVM及垃圾回收机制
- HDU 3018 Ant Trip 欧拉路 并查集
- 洛谷P3403 跳楼机 (spfa+图论)
- 动手解决Maven在offline模式中无法使用的BUG