만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

문자열학

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

요약
각 i에 대해 s의 i글자 접두사에 t를 이어 붙인 문자열의 접미사가 되는, n보다 짧은 s의 가장 긴 접두사 길이를 구합니다.
난이도

보통10점 중 7점

유형
문자열, 문자열 매칭
정답자
아직 제출이 없습니다

문제

문자열 u=u1…unu = u_1 \dots u_n에 대해 pre(u,i)\mathrm{pre}(u, i)는 접두사 u1…uiu_1 \dots u_i를 나타낸다. 같은 방식으로 suf(u,i)\mathrm{suf}(u, i)는 접미사 un−i+1…unu_{n-i+1} \dots u_n을 나타낸다. pre(u,0)\mathrm{pre}(u, 0)과 suf(u,0)\mathrm{suf}(u, 0)은 모두 빈 문자열이다.

두 문자열 u=u1…unu = u_1 \dots u_n과 v=v1…vmv = v_1 \dots v_m에 대해 u+vu + v는 u1…unv1…vmu_1 \dots u_n v_1 \dots v_m을 이어 붙인 문자열이다. 또한

presuf(u,v)=max⁡{i∣i<n and i≤m and pre(u,i)=suf(v,i)}\mathrm{presuf}(u, v) = \max\{i \mid i < n \text{ and } i \leq m \text{ and } \mathrm{pre}(u, i) = \mathrm{suf}(v, i)\}

문자열 s=s1…sns = s_1 \dots s_n과 t=t1…tmt = t_1 \dots t_m이 주어진다. f(i)=presuf(s,pre(s,i)+t)f(i) = \mathrm{presuf}(s, \mathrm{pre}(s, i) + t)라 할 때, f(0),…,f(n−1)f(0), \dots, f(n-1)의 값을 구하라.

입력

입력은 여러 테스트 케이스로 이루어지며 파일 끝에서 끝난다. 각 테스트 케이스는 두 줄로 되어 있다. 첫 줄에는 문자열 s1…sns_1 \dots s_n이, 둘째 줄에는 문자열 t1…tmt_1 \dots t_m이 주어진다.

출력

각 테스트 케이스마다 f(0),…,f(n−1)f(0), \dots, f(n-1)을 나타내는 정수 nn개를 출력한다.

제한

1≤n,m≤1061 \leq n, m \leq 10^6이다. 모든 sis_i와 tit_i는 a부터 z까지의 소문자다. 한 입력에서 max⁡(n,m)\max(n, m)의 합은 10610^6을 넘지 않는다.

힌트

두 번째 케이스에서 f(4)=presuf(ababa,abab+a)=presuf(ababa,ababa)f(4) = \mathrm{presuf}(\mathtt{ababa}, \mathtt{abab} + \mathtt{a}) = \mathrm{presuf}(\mathtt{ababa}, \mathtt{ababa})이다.

iipre(ababa,i)\mathrm{pre}(\mathtt{ababa}, i)suf(ababa,i)\mathrm{suf}(\mathtt{ababa}, i)
00(빈 문자열)(빈 문자열)
11a\mathtt{a}a\mathtt{a}
22ab\mathtt{ab}ba\mathtt{ba}
33aba\mathtt{aba}aba\mathtt{aba}
44abab\mathtt{abab}baba\mathtt{baba}

따라서 f(4)=3f(4) = 3이다.

예제1

  1. 예제 1

    입력
    aaa
    a
    ababa
    a
    ab
    cd
    
    예상 출력
    1 2 2
    1 1 3 1 3
    0 0