java P1258 小车问题

题目描述
甲、乙两人同时从 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.

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读