解法洛谷P3406 海底高铁 python解法

这里采用一维差分的方法,用python实现,代码如下:
"""差分是前缀和的逆过程,a[i]=sum(b1,b2,b3.....bi)。通过bi+1,a[i]之后的都会加一"""

t = [0]*100010
class Solution():
    @staticmethod
    def insert(l,r,c):  #由于初始值都是0就省去了两个列表的转化
        t[l] += c
        t[r] -= c

    def solution(self):
        n,m = map(int,input().split())
        k=list(map(int,input().split()))
        for i in range(1,m):
            if k[i-1] > k[i]:
                Solution.insert(k[i],k[i-1],1)
            else:
                Solution.insert(k[i-1],k[i],1)
        for i in range(1,n):
            t[i] += t[i-1]
        sum = 0
        for i in range(1,n):
            a,b,c = map(int,input().split())
            if a*t[i] > c+b*t[i]:
                sum += (c+b*t[i])
            else:
                sum += a*t[i]
        print(sum)
s=Solution()
s.solution()

posted @ 2023-01-03 17:03  CH-Yu  阅读(9)  评论(0)    收藏  举报  来源