P1258 小车问题

题意:给出路途距离,给出车的速度,给出两个人的速度(两人速度相同)

   题目给出的车的速度一定大于车的速度

   车一次只能载一人,要求用最短的时间,同时走完这段路程

思路:题目给出的车的速度一定大于车的速度

   要想最短的时间同时到达目的地,我们就要先载一个人,然后再丢下她去载另一个人

     于是,我们要确定的就是丢下第一个人的位置

       那么要如何求出这个位置呢?我们采用二分的方式来枚举位置

         然后求出在位置的时候,A B 两个人要到达目的地所用的时间

            当两者的时间差小于1e-8的时候,我们就输出这个时间(因为题目要求精确小数点后6位)

 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 }
View Code

 

posted @ 2020-04-10 17:49  古比  阅读(189)  评论(0编辑  收藏  举报