D - Sum of Large Numbers
D - Sum of Large Numbers。
累積和を使ういい問題。
def solve():
N, K = map(int, input().split())
mod = 10**9+7
increments = []
for i in range(N+1):
increments.append(i)
accumulation = [0]*(N+2)
accumulationReverse = [0]*(N+2)
for i in range(0, N+1):
accumulation[i+1] = accumulation[i] + increments[i]
accumulationReverse[i+1] = accumulationReverse[i] + increments[N-i]
ans = 0
for i in range(K, N+2):
ans += accumulationReverse[i]-accumulation[i] + 1
print(ans % mod)
if __name__ == "__main__":
solve()
各組み合わせにおいて、最小になる累積和accumulation
と最大になる累積和accumulationReverse
を引いていく。