반응형

https://www.acmicpc.net/problem/10986

 

10986번: 나머지 합

수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j)

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;

int n, m;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> m;
	long long ans = 0;

	int tmp = 0;

	vector<long long> map(m, 0);
	for (int i = 1; i <= n; i++) {
		int a;
		cin >> a;
		tmp = (tmp + a)%m;

		map[tmp]++;
		if (tmp == 0) {
			ans++;
		}
	}

	for (int i = 0; i < m; i++) {
		ans += map[i] * (map[i] - 1) / 2;
	}

	cout << ans << '\n';


	return 0;
}

백준 10986 C++

 

반응형

+ Recent posts