前往央都之行
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
刀光哥桐人和尤吉欧两人为了拯救爱丽丝,同时从卢利特村出发要尽快同时赶到央都。出发时卢利特村有一位公理教会的整合骑士,可是他的龙只能带一人。已知刀光哥和尤吉欧两人的步行速度一样,且小于龙的速度。问:怎样利用整合骑士的龙能使两人尽快同时到达央都。
Input:
输入数据有多组,每组有三个数据分别表示卢利特村和央都两地的距离s,桐人和尤吉欧的步行速度a,龙的速度b。
Output:
两人同时到达央都地需要的最短时间,保留6位小数。
Sample Input:
120 5 25
Sample Output:
9.600000
思路分析:最后同时到达,一个人走着到,一个人坐着龙飞到。
已知路程s,人的速度a,龙的速度b。人甲乙和龙,可分为三个阶段:
第一阶段t1:甲坐着龙飞,乙走路。
第二阶段t2:龙放下甲返回接乙,此间甲走路,乙也走路。
第三阶段t3:龙接到乙,乙坐龙飞,甲走路。
甲的路程:t1*b + t2*a + t3*a = s;
乙的路程: t1*a + t2*a + t3*b = s;
可得: t1*b + t3*a = t1*a + t3*b; → t1*(b-a) = t3*(b-a); → t1 = t3;
结论:甲乙走路时间一样: t1 + t2 ,坐龙飞的时间一样 t1
明显,只有一条式子,只能有一个变量,要把t2解决掉。设走路的路程为x,则坐龙飞的时间为s-x。
甲走路的时间 = 乙坐龙飞的时间 + 龙返回接乙的时间
龙返回接乙的路程如何表示?
龙放下甲后,甲一直走到终点,抛下甲的地点为s-x,龙接到乙之前,乙都是在走路,接到乙的地点为x,行程为(s-2x)
x/a = (s-x)/b + (s-2x)/b;
x = (2*s*a) / (b+3a);
全程时间 = 走路时间 + 坐龙飞时间
t = x/a + (s-x)/b;
AC代码:
#include<iostream> #include<stdio.h> #include<algorithm> #include<set> #include<string.h> using namespace std; int main() { double x,t1,t2,t,s,a,b; while( scanf("%lf%lf%lf",&s,&a,&b)!=-1) ///不要用整型输入,有误差导致wa { x = (2*s*a) / (b+3*a); t1 = x/a; t2 = (s-x)/b; t = t1 + t2; printf("%.6lf\n",t); } return 0; }