洛谷 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 }

猜你喜欢

转载自www.cnblogs.com/lipeiyi520/p/11267652.html