P1258 小车问题
题意:给出路途距离,给出车的速度,给出两个人的速度(两人速度相同)
题目给出的车的速度一定大于车的速度
车一次只能载一人,要求用最短的时间,同时走完这段路程
思路:题目给出的车的速度一定大于车的速度
要想最短的时间同时到达目的地,我们就要先载一个人,然后再丢下她去载另一个人
于是,我们要确定的就是丢下第一个人的位置
那么要如何求出这个位置呢?我们采用二分的方式来枚举位置
然后求出在位置的时候,A B 两个人要到达目的地所用的时间
当两者的时间差小于1e-8的时候,我们就输出这个时间(因为题目要求精确小数点后6位)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<bits/stdc++.h> 2 using namespace std; 3 double sum,a,b; 4 int main() 5 { 6 scanf("%lf%lf%lf",&sum,&a,&b); 7 double L=0,R=sum; 8 double tmp1=1.0,tmp2=2.0; 9 while(fabs(tmp1-tmp2)>1e-8){ 10 double mid=(L+R)/2; 11 double x=mid; 12 tmp1=x/b+(sum-x)/a; 13 double t=(x-(a*x/b))/(a+b); 14 tmp2=x/b+t+(sum-(a*t+a*x/b))/b; 15 if(tmp1>tmp2) L=mid; 16 else R=mid; 17 // printf("%.6f %.6f\n",tmp1,tmp2); 18 } 19 printf("%.6f\n",tmp1); 20 }