문자열 테이블
시간 제한2초메모리 제한512 MB
이웃한 칸의 문자열을 사전순으로 비교해 이어 붙이는 표를 만들고, 마지막 칸 문자열의 지정된 위치부터 50자를 출력한다.
문제
두 문자열 와 가 주어진다. 두 문자열에 쓰인 문자는 모두 서로 다르다. 즉, 같은 문자가 두 번 이상 나오지 않으며, 에 나오는 문자는 에 나오지 않고 에 나오는 문자도 에 나오지 않는다.
의 길이를 , 의 길이를 이라 하자. 2차원 배열 table은 다음과 같이 정의한다.
table[i][0] = s[i-1]()table[0][j] = t[j-1]()table[i][j] = min(table[i-1][j], table[i][j-1]) + max(table[i-1][j], table[i][j-1])(, )
min은 두 문자열 중 사전 순으로 앞서는 문자열을, max는 사전 순으로 뒤에 오는 문자열을 돌려주는 함수이다. 문자는 ASCII 코드 순서로 비교하므로 숫자가 대문자보다, 대문자가 소문자보다 앞선다. A+B는 문자열 A 뒤에 문자열 B를 이어 붙이는 연산이다.
table[N][M]의 부분 문자열을 구하는 프로그램을 작성하시오. 부분 문자열이 매우 길어질 수 있으므로 pos번째 문자부터 개의 문자만 출력한다. 여기서 은 table[N][M]의 길이이고, 문자의 위치는 0부터 센다.
입력
첫째 줄에 , 둘째 줄에 , 셋째 줄에 가 주어진다. ()
와 의 길이는 각각 1 이상 30 이하이며, 알파벳 대문자, 소문자, 숫자로만 이루어져 있다.
출력
첫째 줄에 table[N][M]의 번째 문자부터 개의 문자로 이루어진 부분 문자열을 출력한다.