AtCoder Regular Contest 064: C - Boxes and Candies

,

http://arc064.contest.atcoder.jp/tasks/arc064_a

solution

貪欲。$O(N)$。

$i$番目まで条件を満たしていて$a_i + a_{i+1} \ge x$とする。 $a_i$と$a_{i+1}$のどちらかを減らすのだが、$a_i$を減らすことに意味はないため$a_{i+1}$を減らせばよい。 $a_{i+1} \ge 0$の制約があることに注意。

implementation

#!/usr/bin/env python3
n, x = map(int, input().split())
a = list(map(int, input().split()))
ans = 0
for i in range(n-1):
    delta = max(0, a[i] + a[i+1] - x)
    a[i+1] -= delta
    if a[i+1] < 0:
        a[i] += a[i+1]
        a[i+1] = 0
    ans += delta
print(ans)