유사 단어 찾기 1

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

요약
S의 모든 부분 문자열 가운데 T와의 편집 거리가 정확히 i인 것의 개수를 각 i에 대해 구한다.
난이도

보통10점 중 7점

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

문제

선재는 고대 언어를 연구하고 있다. 선재는 오랜 세월 전해 내려오는 기록에서 단어 TT를 발견했다. 연구 끝에 선재는 TT가 고대 언어의 어떤 원본 단어를 잘못 적은 것이며 원래 단어와의 유사도가 KK 이하라는 사실을 알아냈다.

어떤 두 단어의 유사도란 한 단어를 다른 단어로 바꾸기 위해 필요한 최소 연산 횟수로 정의한다.

사용할 수 있는 연산은 다음과 같다.

  • 추가: 현재 단어의 임의의 위치에 글자를 하나 추가한다.
  • 제거: 현재 단어에서 임의의 글자를 하나 제거한다. 제거하면 남은 부분은 그대로 이어 붙는다.
  • 변환: 현재 단어의 임의의 글자를 다른 글자로 바꾼다.

그러던 중 고고학자 정휘가 유물을 발견했다. 유물에는 고대 언어로 된 문장 SS가 써 있었다. 선재는 TT의 원본 단어가 SS에 포함되어 있다는 사실을 알게 되어 SS를 조사하기로 했다.

선재는 문장 SS 안의 비어 있지 않은 모든 연속된 부분 문자열을 원본 단어의 후보로 간주하기로 했다. 고대 언어에서는 글자들의 배열이 같더라도 문장 속 위치에 따라 그 의미가 달라질 수 있다. 따라서 문장 안에 같은 형태의 단어가 여러 번 등장하더라도 그 위치가 다르면 서로 다른 후보로 취급한다.

모든 후보를 전부 조사하기에는 시간이 부족했기에 선재는 유사도가 낮은 후보부터 순서대로 분석하기로 했다. 작업을 시작하기에 앞서 선재는 각 0≤i≤K0 \le i \le K에 대해 유사도가 정확히 ii인 후보가 몇 개나 되는지 조사하기로 했다.

그러나 선재는 너무나 멍청하여 이 문제를 해결하지 못했다. 그래서 여러분에게 도움을 요청했다. 불쌍한 선재를 위해, 문제를 해결해주자!

입력

첫 번째 줄에 SS의 길이 NN과 TT의 길이 MM, 정수 KK가 공백으로 구분되어 주어진다.

두 번째 줄에 문장 SS가 주어진다.

세 번째 줄에 단어 TT가 주어진다.

출력

K+1K+1개의 줄에 걸쳐, 정답을 출력한다. ii번째 줄에는 유사도가 정확히 i−1i-1인 후보의 개수를 출력한다.

제한

  • 1≤N≤50001 \le N \le 5000
  • 1≤M≤10001 \le M \le 1000
  • 0≤K≤M0 \le K \le M
  • SS, TT는 알파벳 소문자로만 구성된 문자열

예제2

  1. 예제 1

    입력
    5 3 1
    ababa
    aaa
    
    예상 출력
    0
    2
    
  2. 예제 2

    입력
    7 3 3
    jooddae
    ode
    
    예상 출력
    0
    2
    16
    8