问题描述
小M拥有一个长度为n
的数组 a
,由于他非常喜欢数字 w
,他希望将所有数组中的数都变为 w
。
小M每次操作可以选择一个区间 [l, r]
,并将该区间内的所有数字都加 1(包括左右边界 l
和 r
)。但为了让挑战更具趣味性,小M要求每次操作的l
均不相同,r
也均不相同。
小M现在想知道,有多少种不同的操作方案可以让数组中的所有数都变为 w
。注意,如果所有操作的区间相同,则视为同一种操作方式,操作顺序不同并不会形成新的方案。
代码
def solution(n, w, array):
# Edit your code here
assert n == len(array)
assert w >= max(array)
mod = 10 ** 9 + 7
d = 0
s = 1
for a in array:
a = w - a
if a == d:
s = s * (d + 1) % mod
elif a == d + 1:
pass
elif a == d - 1:
s = s * d % mod
else:
s = 0
break
d = a
return 0 if d > 1 else s
if __name__ == "__main__":
# Add your test cases here
print(solution(2, 2, [1, 1]) == 2)
print(solution(3, 3, [1, 2, 3]) == 0)