RAM

시간 제한2초메모리 제한512 MB

요약
파일을 차례로 처리하면서, 매번 지금까지 본 문자열의 마지막 K개 문자 중 주어진 문자가 몇 번 나오는지 센다.
난이도

보통10점 중 6점

유형
배열, 시뮬레이션, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

해커들이 셸쇼크(Shellshock) 취약점으로 미르코의 컴퓨터에 침입했고, 시스템 전압을 높여서 마지막 2MB를 제외한 RAM을 거의 다 망가뜨렸다. 미르코의 컴퓨터에는 영어 대문자 A부터 Z까지로 이름을 붙인 하드디스크가 정확히 26개 있다. 다행히 미르코에게는 하드디스크 접근 기록을 담은 거대한 로그가 있다. 로그는 접근한 순서대로 하드디스크 이름을 나열한 문자열이다.

미르코는 해커의 공격을 다음과 같이 분석했다.

  • 로그를 RAM에 올릴 수 있는 작은 파일 NN개 S1,S2,…,SNS_1, S_2, \ldots, S_N으로 나누었다. 각 파일은 영어 대문자로 이루어진 문자열이고, 이 파일들을 순서대로 이어 붙이면 전체 로그가 된다.
  • 파일을 하나씩 차례로 읽었다. 파일 SiS_i를 읽은 직후에는 로그의 처음부터 SiS_i의 끝까지 이어 붙인 문자열에서 마지막 KiK_i번의 접근 가운데 하드디스크 HiH_i에 접근한 횟수를 구했다.

미르코의 질문 NN개에 모두 답하는 프로그램을 작성하시오.

입력

첫째 줄에 파일의 개수 NN이 주어진다. (1≤N≤200 0001 \le N \le 200\,000)

다음 2N2N개의 줄은 두 줄씩 NN개의 묶음으로 나뉜다. ii번째 묶음은 다음과 같다.

  • 첫 번째 줄에는 영어 대문자로 이루어진 문자열 SiS_i가 주어진다. (1≤∣Si∣≤4 0001 \le |S_i| \le 4\,000)
  • 두 번째 줄에는 하드디스크 이름을 나타내는 영어 대문자 HiH_i와 접근 횟수 KiK_i가 공백으로 구분되어 주어진다. (1≤Ki≤∑j=1i∣Sj∣1 \le K_i \le \sum_{j=1}^{i} |S_j|)

모든 파일 길이의 합 ∑i=1N∣Si∣\sum_{i=1}^{N} |S_i|는 2 000 0002\,000\,000 이하이다.

출력

NN개의 줄에 미르코의 질문에 대한 답을 차례로 출력한다. ii번째 줄에는 S1S_1부터 SiS_i까지 이어 붙인 문자열의 마지막 KiK_i개 문자 가운데 HiH_i와 같은 문자의 개수를 정확히 출력한다.

예제2

  1. 예제 1

    입력
    3
    BAAB
    B 2
    AABB
    A 6
    ZA
    Z 1
    
    예상 출력
    1
    3
    0
    
  2. 예제 2

    입력
    1
    A
    A 1
    
    예상 출력
    1