-
백준 10986번: 나머지 합다이나믹프로그래밍(DP) 2018. 7. 1. 19:20반응형
https://www.acmicpc.net/problem/10986
1. 문제
수 N개 A1, A2, ..., AN이 주어진다. 이 때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) 쌍의 개수를 구해야 한다.
2. 알고리즘
키워드 - DP, 부분합
참고 - https://www.slideshare.net/Baekjoon/baekjoon-online-judge-10986
3. 코드
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include <iostream>#include <sstream>#include <string>#include <algorithm>#include <functional>#include <vector>#include <list>#include <queue>#include <deque>#include <map>#include <set>#include <stack>using namespace std;#define MAX_SIZE 100#define INF 0x7fffffff#define CENDL "\n"#define ll long long/** @memory - 1992 kb* @time - 144 ms*/ll ans[1001];int main() {cin.tie(0);std::ios::sync_with_stdio(false);int n, m; cin >> n >> m;ll sum = 0;for(int i=0; i<n; i++) {int cand; cin >> cand;sum += cand;ans[sum % m]++;}ll sol = ans[0];for(int i=0; i<m; i++) {sol += (ans[i] * (ans[i]-1)) /2;}cout << sol << CENDL;return 0;}cs 반응형'다이나믹프로그래밍(DP)' 카테고리의 다른 글
백준 11055 번: 가장 큰 증가 부분 수열 (0) 2018.08.02 백준 1912번: 연속합 (0) 2018.07.03 백준 1904번: 01타일 (0) 2018.06.24 백준 11726번: 2xn 타일링 (0) 2018.06.23 백준 11441번 : 합 구하기 (0) 2018.06.18