아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Append — 부호열 분할 개수

시간 제한1초메모리 제한128 MB

요약
LZ 방식으로 인코딩된 (뒤 참조 거리, 길이) 쌍의 목록이 주어질 때, 원래 문자열을 재현하는 두 개의 비어 있지 않은 유효한 인코딩으로 나뉘는 분할 지점의 수를 센다.
난이도

어려움10점 중 8점

유형
문자열, 구현, 완전 탐색, 동적 계획법
정답자
아직 제출이 없습니다

문제

잘 알려진 압축 알고리즘에서 쓰이는 부호화 방식을 생각하자. 소문자 알파벳으로만 이루어진 문자열을 부호화한다. 이러한 문자열은 쌍 (pi,ri)(p_i, r_i) 들의 나열로 부호화되며, pi≥0p_i \ge 0 은 정수이고 rir_i 는 pi=0p_i = 0 일 때는 하나의 문자, pi>0p_i > 0 일 때는 0<ri≤pi0 < r_i \le p_i 를 만족하는 정수이다.

복호화는 쌍을 순서대로 처리하면서 결과 문자열을 만들어 간다.

  • pi=0p_i = 0 이면 rir_i 는 문자이며, 지금까지 복호화된 문자열의 끝에 그 문자를 덧붙인다.
  • pi>0p_i > 0 이면 rir_i 는 0<ri≤pi0 < r_i \le p_i 인 정수이며, 지금까지 복호화된 문자열의 현재 끝에서 pip_i 칸 앞의 위치부터 시작해 rir_i 개의 문자를 복사하여 끝에 덧붙인다.

예를 들어 쌍 (0,a),(1,1),(0,b),(3,3),(3,3),(3,2),(0,c)(0, a), (1, 1), (0, b), (3, 3), (3, 3), (3, 2), (0, c) 는 다음과 같이 복호화된다. (0,a)(0, a) 로 a, (1,1)(1, 1) 로 aa, (0,b)(0, b) 로 aab, (3,3)(3, 3) 은 aab 를 덧붙여 aabaab, 다음 (3,3)(3, 3) 은 다시 aab 를 덧붙여 aabaabaab, (3,2)(3, 2) 는 aa 를 덧붙여 aabaabaabaa, 마지막으로 (0,c)(0, c) 로 aabaabaabaac 가 된다. 하나의 문자열 ww 에 대해 서로 다른 부호가 여러 개 존재할 수 있음에 유의하라.

두 문자열 uu, vv 에 대해 uvuv 는 이들을 이어 붙인 문자열을 뜻한다. CwC_w 를 소문자 문자열 ww 의 한 부호라고 하자. 주어진 부호 CwC_w 를 앞뒤로 이어지는 두 부분 Cw=CuCvC_w = C_u C_v 로 나누는 방법이 몇 가지인지 세어라. 단,

  • CuC_u 는 앞쪽 몇 개의 쌍으로 이루어진 접두부이고, CvC_v 는 나머지 접미부이다.
  • CuC_u 자체가 어떤 문자열 uu 의 올바른 부호이고, CvC_v 자체도 어떤 문자열 vv 의 올바른 부호이다.
  • w=uvw = uv 이며 uu 와 vv 는 모두 비어 있지 않다.

이 개수를 출력하는 프로그램을 작성하라.

입력

입력은 여러 개의 블록으로 이루어진다. 각 블록은 하나의 부호 CwC_w 를 나타낸다. 블록의 각 줄은 공백 하나로 구분된 두 정수 pip_i, rir_i (ri≤pi<1000r_i \le p_i < 1000) 이거나, 정수 00 뒤에 공백 하나와 소문자 하나가 오는 형태이다. 각 블록은 빈 줄 하나로 끝난다. 입력에는 이러한 블록이 여러 개 연달아 주어질 수 있다.

출력

각 블록마다 한 줄에, 부호 CwC_w 를 w=uvw = uv 이고 uu, vv 가 모두 비어 있지 않으며 두 부분이 각각 그 자체로 올바른 부호가 되도록 CuCvC_u C_v 로 나누는 방법의 수를 출력한다.

예제4

  1. 예제 1

    입력
    0 a
    1 1
    0 b
    3 3
    3 3
    3 2
    0 c
    
    
    예상 출력
    1
    
  2. 예제 2

    입력
    0 a
    
    
    예상 출력
    0
    
  3. 예제 3

    입력
    0 a
    0 b
    
    
    예상 출력
    1
    
  4. 예제 4

    입력
    0 a
    0 b
    0 c
    
    
    예상 출력
    2