题目描述
甲、乙两人同时从 A 地出发要尽快同时赶到 B 地。出发时 A 地有一辆小车,可是这辆小车除了驾驶员外只能带一人。已知甲、乙两人的步行速度一样,且小于车的速度。问:怎样利用小车才能使两人尽快同时到达。
输入格式
仅一行,三个实数,分别表示 A,B 两地的距离 s s s ,人的步行速度 a a a ,车的速度 b b b 。
输出格式
两人同时到达 B 地需要的最短时间,保留 6 位小数。
说明/提示
数据规模与约定
对于 100 100% 1 0 0 的数据,保证 0 ≤ s , a , b ≤ 1 0 9 0 \leq s, a, b \leq 10^9 0 ≤ s , a , b ≤ 1 0 9 。
题目分析
驾驶员先带甲走,同时乙也还在走,当驾驶员到达某个地方后把甲放下走路,返回在半路上遇到乙,然后再带乙行驶到终点,并且和甲同时到达终点。
设驾驶员先带甲行驶到距离起点x x x 处,用时x b \frac{x}{b} b x ,此时乙走到了x b a \frac{x}{b}a b x a 处
接着小车返回,与乙在距离起点y y y 处相遇,用时x − y b \frac{x-y}{b} b x − y ,此时甲走到了x + x − y b a x+\frac{x-y}{b}a x + b x − y a 处
此时有关系
x − y b = y − x b a a \frac{x-y}{b}=\frac{y-\frac{x}{b}a}{a}
b x − y = a y − b x a
最后在终点相遇,小车用时s − y b \frac{s-y}{b} b s − y ,甲用时s − ( x + x − y b a ) a \frac{s-(x+\frac{x-y}{b}a)}{a} a s − ( x + b x − y a )
此时有关系
s − y b = s − ( x + x − y b a ) a \frac{s-y}{b}=\frac{s-(x+\frac{x-y}{b}a)}{a}
b s − y = a s − ( x + b x − y a )
此时有未知数x,y两个关于x,y的一元二次方程,可解得
{ x = s ( a + b ) 3 a + b y = 2 a s 3 a + b \left\{
\begin{array}{l}
x=\frac{s(a+b)}{3a+b} \\
y=\frac{2as}{3a+b}
\end{array}
\right.
{ x = 3 a + b s ( a + b ) y = 3 a + b 2 a s
题目要求的最终量为花费总时长,可以用小车全程运行的时间去计算
小车开始行驶了x后来行驶了x-y然后又行驶了s-y, 总计行驶了s+2x-2y,用时为
t = s + 2 x − 2 y b t = \frac{s+2x-2y}{b}
t = b s + 2 x − 2 y
程序编写
简单写一个程序实现计算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <bits/stdc++.h> using namespace std;int main () { double s, a, b; cin >> s >> a >> b; double under = 3 * a + b; double x = (s * (a + b)) / under; double y = (2 * a * s) / under; double t = (s + 2 * x - 2 * y) / b; printf ("%.6f\n" ,t); return 0 ; }