https://www.acmicpc.net/problem/16139
16139번: 인간-컴퓨터 상호작용
첫 줄에 문자열 $S$가 주어진다. 문자열의 길이는 $200,000$자 이하이며 알파벳 소문자로만 구성되었다. 두 번째 줄에는 질문의 수 $q$가 주어지며, 문제의 수는 $1\leq q\leq 200,000$을 만족한다. 세 번째
www.acmicpc.net
#include <iostream>
using namespace std;
int prefix[26][200001];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string s;
cin >> s;
prefix[s[0] - 'a'][0] = 1;
for (int i = 1; i < s.size(); i++) {
for (int j = 0; j < 26; j++) {
if (s[i] - 'a' == j) {
prefix[j][i] = prefix[j][i - 1] + 1;
} else {
prefix[j][i] = prefix[j][i - 1];
}
}
}
int q;
cin >> q;
for (int qest = 0; qest < q; qest++) {
char a;
int l, r;
cin >> a >> l >> r;
if (l == 0) {
cout << prefix[a - 'a'][r] << "\n";
} else {
cout << prefix[a - 'a'][r] - prefix[a - 'a'][l - 1] << "\n";
}
}
return 0;
}
문자열의 최대 길이가 20만자나 되므로 전수조사를 했다간 시간초과가 난다.
20만자리의 문자열에 대해 각각의 알파벳의 개수의 누적합을 구한 후
주어지는 구간의 구간합을 계산한다.
'Coding Test' 카테고리의 다른 글
백준 15685 드래곤 커브 (1) | 2024.03.28 |
---|---|
백준 1277 발전소 설치 (0) | 2024.03.27 |
백준 1774 우주신과의 교감 (0) | 2024.03.25 |
백준 21919 소수 최소 공배수 (1) | 2024.03.25 |
백준 17276 배열 돌리기 (1) | 2024.03.23 |