思路:定长滑动窗口+贪心。我们要让每个滑动窗口的值都并且操作数最少,那就主要操作窗口中靠近右侧的元素。为什么?因为越靠近右侧的元素,在我们向右滑动窗口时,更容易被保留下来,也就会产生更大的贡献。

因此,我们就滑动窗口,当发现窗口中的和时,就累加操作数,然后从窗口右端开始往左端,对元素进行减操作,修改元素值。这里我理解错了题意,题目说的是输入数据,我就下意识以为操作后的每个盒子,其糖果数也必须,这里调了挺久,其实是可以变成0的。

最后,输出累加后的操作数即可,他的时间复杂度应该是,但能过就很神秘

代码:

import sys
input = lambda: sys.stdin.readline().strip()

import math
inf = 10 ** 18

def I():
    return input()

def II():
    return int(input())

def MII():
    return map(int, input().split())

def GMI():
    return map(lambda x: int(x) - 1, input().split())

def LI():
    return input().split()

def LII():
    return list(map(int, input().split()))

def LFI():
    return list(map(float, input().split()))

fmax = lambda x, y: x if x > y else y
fmin = lambda x, y: x if x < y else y
isqrt = lambda x: int(math.sqrt(x))

'''

'''

def solve():
    n, m, x = LII()
    a = LII()

    op = s = 0
    for r, v in enumerate(a):
        s += v
        if r < m - 1:
            continue

        if s > x:
            diff = s - x
            op += diff

            i = r
            while i >= r - m + 1 and diff > 0:
                if diff > a[i]:
                    diff -= a[i]
                    s -= a[i]
                    a[i] = 0
                else:
                    a[i] -= diff
                    s -= diff
                    diff = 0
                i -= 1

        s -= a[r - m + 1]

    print(op)

t = 1
# t = II()
for _ in range(t):
    solve()