hdu6581 Vacation 【贪心】【2019 Multi-University Training Contest 1】

题意:

有n+1辆车,在一条单车道上(假设车道方向从左到右,车头向右), 在终点线的左边,他们按照1,2,....,n,n+1  从右到左在终点线的左边,每辆车有三个属性 s(车头到终点线的距离), l(车子本身的长度), v (车的最大速度),不能超车,请问第n+1辆车最快什么时候车头能碰到终点线。

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=6581

题解:

最终通过终点线的时候,一定是一个车后面堵着剩余所有的车,不同车超过终点线停止的位置也不同,那么影响时间的就只有最前面这辆车。最前面这辆车没有被其他车限制,所以他可以按他的最大速度行驶,根据这个时间来限制后面的车速,每一辆车都会被他的前一辆车的速度所限制,那我们最从最右边的车开始计算,不同计算出不同车到达停止位置所需要的最大时间,进行更新,时间复杂度是O(n)。

AC_code:

#include<bits/stdc++.h>
#define maxn 100005
using namespace std;
int l[maxn], v[maxn], s[maxn];

int main() {
    int n;
    while(~scanf("%d", &n)) {
        for(int i = 0; i < n+1; i++) {
            scanf("%d", &l[i]);
        }
        for(int i = 0; i < n+1; i++) {
            scanf("%d", &s[i]);
        }
        for(int i = 0; i < n+1; i++) {
            scanf("%d", &v[i]);
        }
        long long sum = 0;
        for(int i = 1; i < n+1; i++) {
            sum += l[i];
        }
        double ans = 0.0;
        for(int i = n; i >= 0; i--){
            long long h = sum +s[i];
            double t = h * 1.0 / v[i];
            ans = max(ans, t); 
            sum -= l[i];
        }
        printf("%.10lf\n", ans);
    }
    return 0;
}

 

全部评论

相关推荐

10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务