就算不要求同时到达答案也是一样的,因为两人同时到达最省时间。
而在任意时刻,可能是小车载着某个人在前面开,另一个人在后面走;也可能是两人都在走,小车在两人之间,去追在后面的那个人。这样两人走的路程和坐车的路程分别相同。
其它情况肯定不优,而上面两种情况又可以把小车的折返全部搞到一起,如下图。
(L) 是人坐车的路程。根据人和车路程不同时间相同列出等式。
[frac{(2L-s+2L)}{b}=frac{s-L}{a}+frac{L}{b}
]
[a(4L-s)=b(s-L)+aL
]
[(3a+b)L=(a+b)s
]
[L=frac{(a+b)s}{3a+b}
]
算出 (L) 之后,代入算出人或车的时间即是答案。
时间复杂度 (O(1))。
code:
#include<bits/stdc++.h>
using namespace std;
#define Db double
int main()
{
Db s,a,b,l;
cin>>s>>a>>b;
l=(a+b)*s/(3.0*a+b);
cout<<fixed<<setprecision(6)<<l/b+(s-l)/a;
return 0;
}