题目链接:https://www.luogu.com.cn/problem/P1258

大意是给出两个城市的距离,给出人行走速度和车辆行驶速度,有两个人需要同时从一个城市到达另一个城市。车上除了司机之外只能做一个人,问最快两人多长时间能够同时达到目的地。

这个题可以用公式法推导出来,很头疼,小学奥数题mdzz

推导过程:

QQ图片20220726125518.jpg

还有一种方法就是二分解法:我们易知一定有一个点,可以使得先用车带甲走到改点再返回到乙走到的位置,然后带乙冲向终点的同时甲走到了终点。

我们可以通过二分查找这个分割点,使得甲花费的时间和乙花费的时间相同。

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);
}