188AC - ABC048C: Boxes and Candies

ABC048-C (300 points)
問題

それぞれ a_i 個のキャンディが入った箱が  N 個並んでいる.
箱に入っているキャンディを食べて, どの隣り合う箱を見ても, それらの箱に入っているキャンディの個数の和が  x 以下になるようにするとき, 食べなければならない最小個数を求める.

  •  2 \leq N \leq 10^5
  •  0 \leq a_i \leq 10^9
  •  0 \leq x \leq 10^9
方針

素直に端から順番に条件を満たすように食べていきましょう.

# input

N, x = map(int, input().split())
a = list(map(int, input().split()))

ans = 0
for i in range(N - 1):
    if a[i] > x:
        ans += a[i] - x
        a[i] = x
    if a[i] + a[i + 1] > x:
        ans += a[i] + a[i + 1] - x
        a[i + 1] -= a[i] + a[i + 1] - x

print(ans)