题目传送门
解题思路:
首先,每个人都要做一次车,而且两个人要同时到达,这样才能使总时间最短。
那么,我们设起点为A,终点为B,小车先带甲开到C点后甲下车走到B点,同时小车掉头与已经走到D点的乙相向而行,相遇于点E,最后小车带乙向B开去,和甲同时到达。
然后我们就二分C点,直到误差小于某个值即可。
AC代码:
#include<iostream>
#include<cstdio>
#include<cmath> using namespace std; double s,b,a,be,end,p,t1,t2,s1,s2,ta,tb; int main() {
cin >> s >> a >> b;
be = ;
end = s;
do {
p = (be + end) / 2.0;
ta = p / b;
tb = (p - a * ta) / (a + b);
t1 = ta + (s - p) / a;
t2 = tb + ta + (s - (ta + tb) * a) / b;
if(t1 < t2)
end = p;
else
be = p;
}
while(fabs(t1 - t2) > 1e-);
printf("%0.6lf",t1);
return ;
}