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