题目描述
游游准备开车出游,她的车非常特殊,油越多则最高速度越快,即最高速度和油量是成正比的。另外,行驶过程中油是不会消耗的。
已知游游的车初始的最高速度为v0,当游游花费了ttt时间加油时,车的最高速度会变成v0+t∗x。
游游开车的总里程为y,假设游游始终以最高速度行驶(即忽略加速时间),游游想知道,自己最少花费多少时间可以完成出游?
输入描述:
三个整数v0,x,y,用空格隔开。 0≤v0≤10^9 1≤x,y≤10^9
输出描述:
一个浮点数,代表最终花费的总时间。如果你的答案和标准答案的相对误差不超过10−610^{-6}10−6,则认为答案正确。
示例1
输入
0 1 2
输出
2.8284271
#include<iostream>
#include<algorithm>
using namespace std;
double v0, x, y; // 输入的变量v0, x, y
const double N = 1e6; // 一个很大的常数N,用于表示无穷大
double mintime = N; // 初始化mintime为N,表示初始最小时间为无穷大
// 计算给定时间t时的总时间
double time(double t)
{
return y / (v0 + t * x) + t;
}
int main()
{
cin >> v0 >> x >> y; // 输入v0, x, y的值
double l = 0, r = N; // 初始化左右边界l和r为0和N
// 使用三分法进行迭代
for (int i = 0; i <= 1000; i++)
{
double lmid = l + (r - l) / 3; // 左边界的中点
double rmid = r - (r - l) / 3; // 右边界的中点
// 比较两个中点的时间大小
if (time(lmid) <= time(rmid))
{
r = rmid; // 更新右边界为右中点
mintime = min(mintime, time(lmid)); // 更新最小时间
}
else
{
l = lmid; // 更新左边界为左中点
mintime = min(mintime, time(rmid)); // 更新最小时间
}
}
printf("%.7lf", mintime); // 输出最小时间,保留7位小数
}
文章讨论了一个关于汽车出游的问题,车辆速度与油量成正比。通过使用三分法迭代,求解在最高速度下,以给定总里程y,最少需要花费多少时间。
466

被折叠的 条评论
为什么被折叠?



