2019 Multi-University Training Contest 1 1004(思路

原文地址:http://nuoyanli.com/contest_hdu_multi-university-training-contest-1-1004/

1004 Vacation (HDU - 6581)

题意:

n + 1 n+1 n+1辆车,你在最后一辆车上,每辆车有自己的长度,速度,以及车头到重点的距离只有一个车道,不能超车,若后车行进中碰到前车(明显后车速度大于前车)则以前车的速度贴在前后后面继续前进。问你所在的车什么时候到达终点。

思路:

要注意,所有车到达终点之后不会消失,所以在终点后相撞的可能性是有的。我们考虑每一辆车,到达终点的时间不会小于在他前面的车到达的时间,而后车即便相撞,也不会对当前车到达终点的时间产生影响。所以我们枚举每一辆车为车头(车头几位后车全部连接在这辆车上),计算到达终点的时间,取最大值既为答案。
ps:万恶的榜单,我整个比赛都在学网络流,最后十几分钟才看这道题。

代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int inf = 0x3f3f3f3f;
const int N = 2000055;
double len[N], dis[N], spd[N];
inline double mymax(double a, double b) {
    return (a>b) ? a:b;
}
int main() {
    int n;
    while (~scanf("%d", &n)) {
        double tot = 0;
        for (int i = 0; i <= n; i++) scanf("%lf", len + i);
        for (int i = 0; i <= n; i++) scanf("%lf", dis + i);
        for (int i = 0; i <= n; i++) scanf("%lf", spd + i);
        double ans = dis[0] / spd[0];
        for (int i = 0; i <= n; i++) {
            tot += len[i];
            ans = mymax(ans, (tot + dis[i]) / spd[i]);
        }
        printf("%.10lf\n", ans);
    }
    return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务