BOJ 단계별 17 누적합
11659 구간 합 구하기 4
2559 수열 - partial sum으로 해도 되고, sliding window로 풀어도 된다. 근데 문제 특성상 k가 주어지기 때문에 sliding window로 푸는 게 더 쉬울 듯.
16139 인간-컴퓨터 상호작용 - 알파벳 별로 누적합을 만들어야 했음
10986 나머지 합 - 흥미로운 문제. psum을 구할 때 % 연산을 하고, 해당 값이 몇 번 나왔는지를 기록한다. 그리고 모든 %값의 개수에 대해, combination 2를 택해주고(% M이 같은 두 구간을 뺀다면 그 구간은 M의 배수이다. 이 구간 중 순서 상관없이 2개를 택하는 경우의 수), 마지막으로 0이 나온 횟수(첫번째부터 i까지 %K == 0이라는 의미)를 더해주면 된다.
int main(void) {
cin.tie(0);
cout.tie(0);
std::ios_base::sync_with_stdio(0);
////////////////////// write your code below
ll N, M; cin>>N>>M;
vector<ll> arr(N);
for(ll i = 0; i<N; i++) cin>>arr[i];
vector<ll> psum(N);
vector<ll> cnt(M, 0);
psum[0] = arr[0] % M;
cnt[psum[0]]++;
for(ll i = 1; i<N; i++){
psum[i] = (psum[i-1] + arr[i]) % M;
cnt[psum[i]]++;
}
ll answer = 0;
for(ll i = 0; i<M; i++){
answer += cnt[i] * (cnt[i] - 1) / 2;
}
cout<<answer + cnt[0];
//////////////////////
return 0;
}
11660 구간 합 구하기 5 - 2차원 psum 문제
Codeforces #787 Div. 3 Upsolving
E
'PS > PS Log' 카테고리의 다른 글
22.07.12. 풀었던 문제들 (0) | 2022.07.12 |
---|---|
22.07.11. 풀었던 문제들 (0) | 2022.07.11 |
22.07.09. 풀었던 문제들 - Codeforces #787 Div. 3 4/7 *** euler tour, path, circuit (0) | 2022.07.09 |
22.07.08. 풀었던 문제들 (0) | 2022.07.08 |
22.07.07. 풀었던 문제들 (0) | 2022.07.07 |