前往央都之行
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
刀光哥桐人和尤吉欧两人为了拯救爱丽丝,同时从卢利特村出发要尽快同时赶到央都。出发时卢利特村有一位公理教会的整合骑士,可是他的龙只能带一人。已知刀光哥和尤吉欧两人的步行速度一样,且小于龙的速度。问:怎样利用整合骑士的龙能使两人尽快同时到达央都。
Output:
两人同时到达央都地需要的最短时间,保留6位小数。
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
",t);
}
return 0;
}