본문 바로가기

백준

16139 인간-컴퓨터 상호작용

부분합 사용해서 풀었다

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <deque>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>
#include <stdio.h>
#include <math.h>
#include <sstream>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using iis = pair<int, string>;
using ii64 = pair<i64, i64>;
using iii = tuple<int, int, int>;

int arr[30][200005];

int main() 
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    
    string s;
    cin >> s;
    // cout << s << "\n";
    
    for (char alpha = 'a'; alpha <= 'z'; alpha++) {
        for (int j = 0; j < s.size(); j++) {
            if (alpha == s[j])
                arr[alpha - 'a'][j]++;
            if (j == 0)
                continue;
            arr[alpha - 'a'][j] += arr[alpha - 'a'][j - 1];
        }
    }
    
    // for (char alpha = 'a'; alpha <= 'z'; alpha++) {
    //     for (int j = 0; j < s.size(); j++) {
    //         printf("%d ",  arr[alpha - 'a'][j]);
    //     }
    //     printf("\n");
    // }

    int n;
    cin >> n;
    
    for (int i = 0; i < n; i++) {
        int idx1, idx2;
        char c;
        
        cin >> c >> idx1 >> idx2;
        
        int n1 = (idx1 == 0) ? 0 : arr[c - 'a'][idx1 - 1];
        int n2 = arr[c - 'a'][idx2];
        
        // cout << c << " " << n1 << " " << n2 << "\n";
        cout << n2 - n1 << "\n";
    }
    
    return 0;
}

 

'백준' 카테고리의 다른 글

18187 평면 분할  (0) 2021.12.24
18870 좌표 압축  (0) 2021.12.24
15979 스승님 찾기  (0) 2021.12.23
11725 트리의 부모 찾기  (0) 2021.12.23
11724 연결 요소의 개수  (0) 2021.12.23