题目描述 Description
甲、乙两人同时从A地出发要尽快同时赶到B地。出发时A地有一辆小车,可是这辆小车除了驾驶员外只能带一人。已知甲、乙两人的步行速度一样,且小于车的速度。问:怎样利用小车才能使两人尽快同时到达。
输入描述 Input Description
仅一行,三个整数,分别表示AB两地的距离s米(s≤2000),人的步行速度a米/秒,车的速度b米/秒,2000>b>a。
输出描述 Output Description
两人同时到达B地需要的最短时间,单位秒,保留2位小数。
样例输入 Sample Input
120 5 25
样例输出 Sample Output
9.60
分析,大致如图所示;
现在我们设距离为c,人的速度为a, 车的速度为b;我们现在设如图的三种情况的时间分别为t1,t2,t3;1、2、3号时间具有等价性;
那么就有t1* b + t2 * a +t3 * a = c
t1 * a + t2 * a + t3 * b = c ;可以得到t1 = t3 ;
将t1= t3带入得到
( t1 - t2 ) * b = ( t1 + t 2 ) *a ;
( 2 * t 1 - t2 ) * b = c ;
化简得到
x = ( a +b ) *c / ( b +3 * a )
时间t= x / b + (c - x)/ a ;
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<bitset> #include<iomanip> using namespace std; int main() { double a , b , c ; double x , sum ; double t ; cin >> c >> a >> b ; x = ( a + b ) * c / ( b + 3 * a ) ; t = x / b + ( c - x )/ a ; printf( "%.2lf " , t ) ; return 0 ; }