2019杭电多校赛第一场Vacation
Vacation
题意:
n 辆车排队过路口,每辆车给定最大车速、车长、车头到路口的距离,求最后一辆车的最短通过时间
分析:
确定每辆车通过路口需要的总路程 sum[i], 然后分情况讨论:
- 前车速度小于后车速度,后车只能以前车速度运行,这样就会导致前后车花费相同时间到达
- 前车速度大于后车速度,都以自己的速度运行
统计一遍每辆车到达的最大时间,答案取 max
实现:
#include <bits/stdc++.h>
using namespace std;
#define mst(x, y) memset(x, y, sizeof x)
#define endl '\n'
#define INF LONG_LONG_MAX
#define pb push_back
#define x first
#define y second
#define int long long
#define Lson u << 1, l, mid
#define Rson u << 1 | 1, mid + 1, r
#define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
const int N = 2000010, MOD = 1e9 + 7;
const double EPS = 1e-6;
typedef pair<int, int> PII;
typedef unordered_map<int, int> Ump;
int T;
int n;
double l[N], s[N], v[N];
int sum[N];
void solve()
{
for (int i = 0; i <= n; i++)
scanf("%lf", &l[i]);
for (int i = 0; i <= n; i++)
scanf("%lf", &s[i]);
for (int i = 0; i <= n; i++)
scanf("%lf", &v[i]);
sum[0] = s[0];
for (int i = 1; i <= n; i++)
sum[i] = sum[i - 1] - s[i - 1] + s[i] + l[i];
double res = 0;
for (int i = 0; i <= n; i++)
res = max(res, sum[i] * 1.0 / v[i]);
printf("%.10lf\n", res);
}
signed main()
{
while (~scanf("%lld", &n))
solve();
return 0;
}
本文作者:347Foricher
本文链接:https://www.cnblogs.com/Aidan347/p/17241102.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步