P1258 小车问题洛谷c++题解

    科技2024-10-03  27

    P1258 小车问题

    题目描述 甲、乙两人同时从 A 地出发要尽快同时赶到 B 地。出发时 A 地有一辆小车,可是这辆小车除了驾驶员外只能带一人。已知甲、乙两人的步行速度一样,且小于车的速度。问:怎样利用小车才能使两人尽快同时到达。

    输入格式 仅一行,三个实数,分别表示 AB 两地的距离 s,人的步行速度 a,车的速度 b。

    输出格式 两人同时到达 B 地需要的最短时间,保留 6 位小数。

    输入输出样例 输入 120 5 25 输出 9.600000

    看到这个题目第一个想法就是想到用数学来解题QAQ。 因为要时间最短,所以甲、乙两个人到达的时间一定要是相同的,同时我们也需要考虑车子返回情况(我就是没考虑这个卡了半天—) 我们假设甲先上车并在半路上下车最后一直步行到终点, 这个转折点到起点的距离设为x,在甲坐车期间,乙走的距离为ax/b,到了x点,甲下车了,车子返回而乙继续走,他们是相向行走的,我们设置它们相遇的距离为y,因为乙和车子相遇时间相同,可列方程(y-ax/b)/a = (x-y)/a,解出来y = (2ax)/(a+b), 因为甲乙到达时间相同,所以甲走路的时间(s-x)/a 与车子回去接乙和乙在车上的时间(x-((2ax)/(a+b)))/b+(s-((2ax)/(a+b)))/b相同 (s-x)/a = (x-((2ax)/(a+b)))/b+(s-((2ax)/(a+b)))/b 解的x = (a+b)s/(3a+b);

    #include<bits/stdc++.h> using namespace std; int main() { double s, a, b; cin >> s >> a >> b; double x = (a+b)*s/(3*a+b); cout << fixed << setprecision(6) << x/b+(s-x)/a <<endl; }
    Processed: 0.009, SQL: 8