【洛谷p1258】小车问题

(……吓人,心有余悸)

小车问题【传送门】

洛谷算法标签::

(行吧它居然是个二分【解方程的我抖抖发瑟】)


作为一个写了一页演草纸才解出来的方程,显然我要好好写一写(希望不会半途而废)

  • 思路:

             先把其中一个人(甲)用车送到某个地方(暂且称那时的时间为t吧),然后车返回去接另一个人(乙),然后车载着乙到达终点(可怜的甲在线走路)。

  • 实现:

              设总路程为s,放下甲去接乙的时间为t车的速度b,人的速度为a最短时间为x。那么首先得到两个式纸:

              bt+a(x-t)=s;  ①

          at+a(bt-at)/(b+a)+b(x-t-(bt-at)/(b+a))=s;  ②(其中表示在小车返回途中乙走的路程,表示小车接到乙后的时间,表示小车载着乙走的路程

              解第一个方程,可以得到:x=(s-bt+at)/a;③

              联立①②,可以解得:bt(2+(b-a)/(b+a))-at(2+(b-a)/(b+a))=(b-a)x;

              令p=2+(b-a)/(b+a);则btp-atp=(b-a)x

              解得x=tp;④

              联立③④,得到:t=s/(pa+b-a);

              将t值再代回④中,得到x的值。

  • 代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstdlib>
using namespace std;
double s,a,b,t,x,p,q;
int main()
{
    scanf("%lf%lf%lf",&s,&a,&b);
    p=(3*b+a)/(a+b);q=p;
    p*=a;
    p=p+b-a;
    s/=p;
    x=s*q;
    printf("%.6lf",x);
    return 0;
}

end-(纪念第一次认真写博)

猜你喜欢

转载自www.cnblogs.com/zhuier-xquan/p/10624054.html