Nugine 的个人博客关于

洛谷 P1258 小车问题

题目:小车问题

甲乘车到C,下车走到B

车由C向A开,在D点与走路的乙相遇

乙上车到B

|-------|--------|-----------|
A       D        C           B
TAC=ACbT_{AC}=\frac{AC}{b}TCB=CBaT_{CB}=\frac{CB}{a}TAD=ADaT_{AD}=\frac{AD}{a}TDB=DBbT_{DB}=\frac{DB}{b}T=TAC+TCBT_\text{甲}=T_{AC}+T_{CB}T=TAD+TDBT_\text{乙}=T_{AD}+T_{DB}T=TT_\text{甲}=T_\text{乙}ACb+CBa=ADa+DBb \frac{AC}{b}+\frac{CB}{a}=\frac{AD}{a}+ \frac{DB}{b}

pp 为两速度之比,由题中“步行速度小于车速”可得比值大于1

p=ba,  p>1 p=\frac{b}{a},\;p>1

CB=x,  AD=yCB=x,\;AD=y

sxp+x=y+syp \frac{s-x}{p}+x=y+\frac{s-y}{p}x(p1)=y(p1),  p1 x(p-1)=y(p-1),\;p\ne1x=y x=y

因此 AD=CB=xAD=CB=x

|-------|--------|---------|
A   x   D  s-2x  C    x    B
TDB=xa=s2xb+sxbbx=a(2s3x)(b+3a)x=2asx=2asb+3a\begin{aligned} T_{DB}=\frac{x}{a}&=\frac{s-2x}{b}+\frac{s-x}{b}\\ bx&=a(2s-3x)\\ (b+3a)x&=2as\\ x&=\frac{2as}{b+3a}\\ \end{aligned}TAB=t=xa+sxbt=xbaab+sbt=2(ba)s(b+3a)b+sbt=3b+ab+3asb\begin{aligned} T_{AB}=t&=\frac{x}{a}+\frac{s-x}{b}\\ t&=x\cdot\frac{b-a}{ab}+\frac{s}{b}\\ t&=\frac{2(b-a)s}{(b+3a)b}+\frac{s}{b}\\ t&=\frac{3b+a}{b+3a}\cdot\frac{s}{b} \end{aligned}

公式

t=3b+ab+3asbt=\frac{3b+a}{b+3a}\cdot\frac{s}{b}

代码

#include <iostream>
using namespace std;

int main() {
    double s, a, b, ans;

    cout.setf(ios::fixed);
    cout.precision(6);

    cin >> s >> a >> b;
    ans = (3 * b + a) / (b + 3 * a) * s / b;
    cout << ans << endl;

    return 0;
}
发布于 2019-01-30地址: GitHub