def min_tir(n, k, wysokości):
obecne_wysokości = wysokości[:]
# Przejście od prawej do lewej:
# jeśli a[i] jest za niskie względem a[i+1], podnieś a[i]
for i in range(n - 2, -1, -1):
if obecne_wysokości[i] < obecne_wysokości[i + 1] - k:
obecne_wysokości[i] = obecne_wysokości[i + 1] - k
# Przejście od lewej do prawej:
# jeśli a[i+1] jest za niskie względem a[i], podnieś a[i+1]
for i in range(n - 1):
if obecne_wysokości[i + 1] < obecne_wysokości[i] - k:
obecne_wysokości[i + 1] = obecne_wysokości[i] - k
return sum(obecne_wysokości[i] - wysokości[i] for i in range(n))
def rozwiąż():
n, k = map(int, input().split())
wysokości = list(map(int, input().split()))
print(min_tir(n, k, wysokości))
if __name__ == "__main__":
rozwiąż()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | def min_tir(n, k, wysokości): obecne_wysokości = wysokości[:] # Przejście od prawej do lewej: # jeśli a[i] jest za niskie względem a[i+1], podnieś a[i] for i in range(n - 2, -1, -1): if obecne_wysokości[i] < obecne_wysokości[i + 1] - k: obecne_wysokości[i] = obecne_wysokości[i + 1] - k # Przejście od lewej do prawej: # jeśli a[i+1] jest za niskie względem a[i], podnieś a[i+1] for i in range(n - 1): if obecne_wysokości[i + 1] < obecne_wysokości[i] - k: obecne_wysokości[i + 1] = obecne_wysokości[i] - k return sum(obecne_wysokości[i] - wysokości[i] for i in range(n)) def rozwiąż(): n, k = map(int, input().split()) wysokości = list(map(int, input().split())) print(min_tir(n, k, wysokości)) if __name__ == "__main__": rozwiąż() |
English