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

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

주기

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

요약
문자열 x를 여러 조각으로 나누어 y와의 편집 거리 최댓값이 가장 작아지도록 합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 문자열
정답자
아직 제출이 없습니다

문제

알파벳 Σ\Sigma 위에서 정의된 두 문자열 AA와 BB에 대해, AA와 BB 사이의 편집 거리는 AA를 BB로 바꾸는 데 필요한 최소 편집 연산 횟수이다. 편집 연산은 다음 세 가지이다.

  • 교체(change): AA의 한 문자를 BB의 한 문자로 바꾼다.
  • 삭제(deletion): AA에서 한 문자를 지운다.
  • 삽입(insertion): BB의 한 문자를 AA에 끼워 넣는다.

예를 들어 아래 그림은 A=abcdefgA = abcdefg와 B=ahcefigB = ahcefig의 편집 거리가 33임을 보여 준다. b를 h로 바꾸는 교체, d를 지우는 삭제, i를 끼워 넣는 삽입, 이렇게 세 번의 연산이 필요하다.

편집 거리 예시

반복되는 문자열의 정확한 주기(exact period)는 다음과 같이 정의한다. 문자열 xx를 x=pkx = p^k (k≥1k \ge 1) 꼴로 쓸 수 있고 pp가 그러한 문자열 중 가장 짧을 때, pp를 xx의 정확한 주기라고 한다. 예를 들어 x=ababababx = abababab이면 x=(abababab)1=(abab)2=(ab)4x = (abababab)^1 = (abab)^2 = (ab)^4이므로 abab가 xx의 정확한 주기이다.

근사 주기(approximate period)도 비슷하게 정의한다. 두 문자열 xx와 yy가 주어졌을 때, xx를 비어 있지 않은 부분 문자열 p1,p2,…,ptp_1, p_2, \dots, p_t로 나누어 x=p1⋅p2⋯ptx = p_1 \cdot p_2 \cdots p_t로 쓴다고 하자. yy와 모든 부분 문자열 pip_i 사이의 편집 거리가 정수 kk 이하이면, yy를 xx의 kk-근사 주기라고 부른다.

xx와 yy가 주어질 때, yy가 xx의 kk-근사 주기가 되는 최소의 kk를 구하여라. 예를 들어 x=abcdabcabbx = abcdabcabb이고 y=abcy = abc이면, xx를 x=p1⋅p2⋅p3=abcd⋅abc⋅abbx = p_1 \cdot p_2 \cdot p_3 = abcd \cdot abc \cdot abb로 나눌 수 있고, y=abcy = abc와 abcd, abc, abb 사이의 편집 거리는 각각 11, 00, 11이다. 이 중 가장 큰 값이 11이므로 yy는 xx의 11-근사 주기이고, 최소의 kk는 11이다.

입력

입력은 표준 입력으로 주어진다. 첫째 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 두 줄로 이루어지며, 첫째 줄에는 문자열 yy가, 둘째 줄에는 문자열 xx가 주어진다. yy의 길이는 1≤∣y∣≤501 \le |y| \le 50을, xx의 길이는 1≤∣x∣≤50001 \le |x| \le 5000을 만족하고, 두 문자열은 모두 알파벳 Σ\Sigma인 소문자 영어 문자로만 이루어져 있다.

출력

출력은 표준 출력으로 한다. 각 테스트 케이스마다 yy가 xx의 kk-근사 주기가 되는 최소 정수 kk를 한 줄에 하나씩 출력한다.

예제4

  1. 예제 1

    입력
    3
    abc
    abcdabcabb
    abab
    abababababab
    xyz
    abcdefghikjlmn
    
    예상 출력
    1
    0
    3
    
  2. 예제 2

    입력
    1
    abc
    abc
    
    예상 출력
    0
    
  3. 예제 3

    입력
    1
    ab
    abababab
    
    예상 출력
    0
    
  4. 예제 4

    입력
    1
    ab
    ba
    
    예상 출력
    1