小车(洛谷P1258)【数学题】

简而言之,大意就是:三个人(买不起三座位的车),还非要同时到达。然后把这个烂摊子扔给你,让你求怎样时间最快?

你们不知道怎么就肯定我能知道啊(蒟蒻问号???)

。。。扯远了,言归正传,怎样找到最快同时到达的时间呢?

蒟蒻来贴思路了:

因为两个不开车的人速度相同。在需要同时到达的要求下,就可以肯定二者总路程是相同的,只是谁先坐车,谁先走的问题。

就有如下图形:

                |||——x——|||— —(s-2*x)— —|||——x——|||

(x为甲,乙坐车)

在(s-2*x)时,甲坐车,乙步行。在(s-2*x)时甲下车,车回去接乙。

               |||——x——|||— —(s-2*x)——|||——x——|||

                                                             ————>|||    (甲的行走路程)

车的路线: ———————————>>|||    (坐车人为甲)

                                  |<<——————|||    (空车,回去接乙)

                                  |———————————>> |||    (接上乙开到终点)

                 ———>>||                (乙的行走路程)

【颜色相同的两段所用时间是相同的】

乙从走路到被接上车,设花费时间为t。

在时间t内,车跑了(s-2*x)*2+x 。而乙只行走了x 。

可建立方程:((s-2*x)*2+x)/b=x/a    (b为车速,a为行走速度)

可求出x。敲代码就转化为  x=2*s*a/(3*a+b)

在通过t=x/a    求出时间。

然后就输出,Over...


顺附蒟蒻的代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    double s,a,b;
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>s>>a>>b;
    double t,x;
    x=2*s*a*(1.0)/(3*a+b);
    t=x/(a*1.0)+(s-x)/(b*1.0);
    printf("%.6lf",t);
    return 0;
}






猜你喜欢

转载自blog.csdn.net/WYQIMJ/article/details/79969760