P1258 小车问题
思路分析
首先车带一个人行驶x段距离,然后丢下第一个人返回带另外一个人回终点刚好与第一人同时到终点,这样才能实现时间最短;根据上述列出公式:(s-x)/a=2*(2*x/(a+b)-x/b)+(s-x)/b,化简得 x=(b+a)*s/(b+3a),时间即 x/b+(s-x)/a;
注意事项
由题可知:对于100%的数据,保证0 ≤ s, a, b ≤ 10^9,且 s, a, b 均为实数,所以数据都定义为 double 型;输出时须保留 6 位小数,所以用 %.6lf 格式输出;
代码实现
#include <stdio.h>
int main(){
double s
, a
, b
, x
;
scanf("%lf%lf%lf", &s
, &a
, &b
);
x
= (2*a
*s
) / (3*a
+ b
);
printf("%.6lf",x
/a
+ (s
- x
)/b
);
return 0;
}