【洛谷p1258】小车问题

时间:2022-03-21 07:53:25

(……吓人,心有余悸)

小车问题【传送门】

洛谷算法标签::

【洛谷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=(*b+a)/(a+b);q=p;//相当于p=2+(b-a)/(b+a)【我化辽一下简
p*=a;
p=p+b-a;
s/=p;//这里把s当作辽t,以上三步都在计算t=s/(pa+b-a);
x=s*q;//相当于x=t*p(因为p值改变辽所以令p=q)
printf("%.6lf",x);
return ;
}

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