题目描述
甲、乙两人同时从 A 地出发要尽快同时赶到 B 地。出发时 A 地有一辆小车,可是这辆小车除了驾驶员外只能带一人。已知甲、乙两人的步行速度一样,且小于车的速度。问:怎样利用小车才能使两人尽快同时到达。
输入格式
仅一行,三个实数,分别表示 AB 两地的距离 s,人的步行速度 a,车的速度 b。
输出格式
两人同时到达 B 地需要的最短时间,保留 6 位小数。
输入输出样例
输入 #1
120 5 25
输出 #1
9.600000
说明/提示
数据规模与约定
对于 100% 的数据,保证 0≤s,a,b≤10^9。
import java.util.*;
public class Main {
public static void main(String[] args) {
new Main().sf();
}
double a = 0, b = 0,s = 0, x = 0;
public void sf() {
Scanner in = new Scanner(System.in);
s = in.nextDouble();
a = in.nextDouble();
b = in.nextDouble();
x = (a+b)*s/(b+3*a);
System.out.println(String.format("%.6f", (x/b+(s-x)/a)));
}
}
首先明确一下最短时间的求法,先将一个人运到一个位置x,再往回运另一个人,同时x位置的那个人向终点走,最后人和车一起走到终点。
证明:
首先看最后一段,人和车一起走到终点,最后的s-x用人的速度所用的时间(s-x)/a应该等于车的时间。
重点在于计算车的时间。
在第一次把人运到x的位置时,没有被运的那个人也在走,走了ax/b的距离,车返回时,我们要求出车和第二个人相遇的地点y,根据时间相等:
(y-ax/b)/a=(x-y)/b;可以得到y=2ax/(a+b),这样我们可以求得车返回拉人再返回到x所用时间为2((2ax/(a+b)-ax/b)/a)化简得:
2(2x/(a+b)-x/b)之后车还要走完s-x的距离所以等式为:
(s-x)/a=2(2x/(a+b)-x/b)+(s-x)/b;
然后求x.