题目链接:https://www.luogu.com.cn/problem/P1258
大意是给出两个城市的距离,给出人行走速度和车辆行驶速度,有两个人需要同时从一个城市到达另一个城市。车上除了司机之外只能做一个人,问最快两人多长时间能够同时达到目的地。
这个题可以用公式法推导出来,很头疼,小学奥数题mdzz
推导过程:
还有一种方法就是二分解法:我们易知一定有一个点,可以使得先用车带甲走到改点再返回到乙走到的位置,然后带乙冲向终点的同时甲走到了终点。
我们可以通过二分查找这个分割点,使得甲花费的时间和乙花费的时间相同。
code:
#include<bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); double s,s1,s2,v1,v2,t1,t2,p; double a,b; cin>>s>>v1>>v2; s1 = 0;s2 = s; do{ p = (s1+s2)/2.0; a = p/v2; b = (p-a*v1)/(v1+v2); //车与b会和的时间 t1 = a+(s-p)/v1;//a走完的时间 t2 = a+b+(s-(a+b)*v1)/v2;//b走完的时间 if(t1<t2) s2 = p; else s1 = p; }while(fabs(t1-t2)>1e-8); printf("%.6lf",t1); }