AtCoder Grand Contest 023 / A - Zero-Sum Ranges
解法
- 入力配列の累積和を作る(A(n) -> s(n+1))。
累積和の値について同じ値を集計する。※累積和のうちについてとなる区間は累積和が0になる。
(Pythonの場合) collectionsにあるCounterで累積和の同じ数を集計する。
(n個)の中で2個選ぶ組み合わせの総数を、すべての登場した数について数えあげる(個の中で個を選ぶ組み合わせは)
import sys from collections import Counter def solve(N: int, A: "List[int]"): s = [0]*(N+1) for i in range(N): s[i+1] = s[i] + A[i] # print(s[:10]) c = Counter(s) ans = 0 for k,v in c.items(): ans += v*(v-1)//2 print(ans) return
参考
解説AC @drkenさんの神解説