aacord’s memo

abcを中心にpythonで解いた問題のメモ、整理をしています。緑になった。

abc 105 D - Candy Distribution (python)

連続する部分列→累積和を取る
累積和をとって、差を考える
余りの種類は m 個あるけど、数列の長さから高々 n 個に座圧できる。
基本テクの詰め合わせ。

import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
from collections import defaultdict

n,m = map(int,readline().split())
a = list(map(int,readline().split()))
c = [0]*(n+1)
for i in range(n):
  c[i+1] = a[i]+c[i]

d = defaultdict(int)
for i in c:
  d[i%m] += 1
  
ans = 0
for i in d.values():
  ans += (i-1)*i//2
print(ans)