1. 程式人生 > >【推導】Codeforces Round #364 (Div. 2) D. As Fast As Possible

【推導】Codeforces Round #364 (Div. 2) D. As Fast As Possible

std %d while pre 分享 mage oss 時間 http

技術分享

一種方法是二分總時間,復雜度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