题目描述

甲、乙两人同时从 A 地出发要尽快同时赶到 B 地。出发时 A 地有一辆小车,可是这辆小车除了驾驶员外只能带一人。已知甲、乙两人的步行速度一样,且小于车的速度。问:怎样利用小车才能使两人尽快同时到达。

输入格式

仅一行,三个实数,分别表示 A,B 两地的距离 ss,人的步行速度 aa,车的速度 bb

输出格式

两人同时到达 B 地需要的最短时间,保留 6 位小数。

说明/提示

数据规模与约定

对于 100100% 的数据,保证 0s,a,b1090 \leq s, a, b \leq 10^9

题目分析

驾驶员先带甲走,同时乙也还在走,当驾驶员到达某个地方后把甲放下走路,返回在半路上遇到乙,然后再带乙行驶到终点,并且和甲同时到达终点。

设驾驶员先带甲行驶到距离起点xx处,用时xb\frac{x}{b},此时乙走到了xba\frac{x}{b}a

接着小车返回,与乙在距离起点yy处相遇,用时xyb\frac{x-y}{b},此时甲走到了x+xybax+\frac{x-y}{b}a

此时有关系

xyb=yxbaa\frac{x-y}{b}=\frac{y-\frac{x}{b}a}{a}

最后在终点相遇,小车用时syb\frac{s-y}{b},甲用时s(x+xyba)a\frac{s-(x+\frac{x-y}{b}a)}{a}

此时有关系

syb=s(x+xyba)a\frac{s-y}{b}=\frac{s-(x+\frac{x-y}{b}a)}{a}

此时有未知数x,y两个关于x,y的一元二次方程,可解得

{x=s(a+b)3a+by=2as3a+b\left\{ \begin{array}{l} x=\frac{s(a+b)}{3a+b} \\ y=\frac{2as}{3a+b} \end{array} \right.

题目要求的最终量为花费总时长,可以用小车全程运行的时间去计算

小车开始行驶了x后来行驶了x-y然后又行驶了s-y, 总计行驶了s+2x-2y,用时为

t=s+2x2ybt = \frac{s+2x-2y}{b}

程序编写

简单写一个程序实现计算

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;
}