※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 26007번 문제인 Codepowers이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/26007
26007번: Codepowers
첫째 줄에 정수 $N$, $M$, $K$, $X$가 주어진다. $(1 \leq N \leq 10^5, 1 \leq M \leq 10^6, -10^9 \leq K \leq 10^9, -10^4 \leq X \leq 10^4)$ 둘째 줄에는 수열 $A$를 이루고 있는 정수 $A_i$가 주어진다. $(-10^4 \leq A_i \leq 10^4)$
www.acmicpc.net
각 라운드를 거친 뒤의 점수 X'와 그 이전라운드까지의 그 라운드가 끝났을 때 "점수가 K보다 낮았던 라운드의 수"를 알고 있다면 이 라운드까지의 라운드가 끝났을 때 "점수가 K보다 낮았던 라운드의 수"를 계산해낼 수 있을 것이다.
위의 식을 이용해 각 라운드 k까지의 라운드가 끝났을 때 "점수가 K보다 낮았던 라운드의 수"의 값을을 미리 계산해두고 이를 이용해 문제를 해결하자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int N, M, K, X;
int psum[100001];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M >> K >> X;
for (int i = 1; i <= N; i++) {
int A; cin >> A;
X += A;
if (X < K) psum[i] = psum[i - 1] + 1;
else psum[i] = psum[i - 1];
}
while (M--) {
int l, r; cin >> l >> r;
cout << psum[r - 1] - psum[l - 1] << '\n';
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 13700 // C++] 완전 범죄 (0) | 2022.12.26 |
---|---|
[BOJ 26005 // C++] 나뭇잎 학회 (0) | 2022.12.26 |
[BOJ 26863 // C++] Absolutely Flat (0) | 2022.12.26 |
[BOJ 26006 // C++] K-Queen (0) | 2022.12.26 |
[BOJ 26008 // C++] 해시 해킹 (0) | 2022.12.26 |