4 条题解

  • 1
    @ 2024-6-1 7:39:05
    import math
    
    # 读取输入的第一行,站点数量 n 和每升油可以行驶的距离 d
    n, d = map(int, input().split())
    # 初始化 v 和 a 数组,长度是站点数 n + 1(因为索引从1开始使用),初始化为0
    v = [0] * (n + 1)
    a = [0] * (n + 1)
    
    # 读取输入的第二行,站点间的距离
    t1 = list(map(int, input().split()))
    # 读取输入的第三行,各站点的油价
    t2 = list(map(int, input().split()))
    
    # 填充 v 数组,v[i] 表示从站点 1 到站点 i 的总距离
    for i in range(1, n):
        v[i] = t1[i - 1]
    
    # 计算从站点 1 到每个站点的累积距离
    for i in range(1, n):
        v[i] = v[i - 1] + v[i]
    
    # 填充 a 数组,a[i] 表示第 i 个站点的油价
    for i in range(1, n + 1):
        a[i] = t2[i - 1]
    
    # mi[i] 表示从站点 1 到站点 i 的最低油价
    mi = [0] * (n + 1)
    mi[0] = a[1]  # 初始化第一个站点的油价
    
    # 计算每个站点的最低油价
    for i in range(1, n + 1):
        mi[i] = min(a[i], mi[i - 1])
    
    # 初始化当前油量和总花费
    now = 0
    ans = 0
    
    # 遍历每个站点
    for i in range(1, n + 1):
        # 如果当前油量比到达下一个站点所需的距离多,则无需加油
        if now > v[i]:
            continue
        # 计算到达下一个站点最少需要的油量
        must = math.ceil((v[i] - now) * 1.0 / d)
        # 计算在当前站点加这么多油需要的费用
        ans += must * mi[i]
        # 更新当前油量
        now += must * d
    
    # 输出最小总花费
    print(ans)
    

    信息

    ID
    935
    时间
    1000ms
    内存
    512MiB
    难度
    8
    标签
    递交数
    326
    已通过
    49
    上传者