구간 합 + 나머지(mod)
배열 + 합 ㅡ> 구간 합 저장
나머지 ㅡ> (A + B) % C = ((A%C) + (B%C)) % C
ll arr[1000001] = { 0, };
ll idx[1001] = { 0, };
ll combination(ll x) {
if (x == 1) return 1;
return (x * (x - 1)) / 2;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
ll res = 0;
ll n, m;
cin >> n >> m;
for (ll i = 0; i < n; i++) {
ll x;
cin >> x;
arr[i + 1] = (arr[i] + x)%m;
idx[arr[i + 1]]++;
}
for (ll i = 1; i <= n; i++) {
if (arr[i] == 0) res++;
}
for (ll i = 0; i <= 1000; i++) {
if (idx[i] > 1) {
res += combination(idx[i]);
}
}
cout << res;
return 0;
}
'PS' 카테고리의 다른 글
백준 11286번 [절댓값 힙] (0) | 2025.02.12 |
---|---|
백준 11003번 [최솟값 찾기] (0) | 2025.02.11 |
백준 1253번 [좋다] (0) | 2025.02.11 |
최단 경로 알고리즘 정리 (다익스트라, 플로이드 워셜, 벨만 포드) (0) | 2023.08.07 |
백준 플래티넘 달성 과정 및 후기 (5) | 2023.07.23 |