Logo
(追記) (追記ここまで)

31911번 - ChatGPT 만들기 서브태스크

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB4691259625.946%

문제

GIST AI대학원에 재학 중인 지원이는 원칙적으로는 집에서 가정용 ChatGPT 정도는 쉽게 만들 수 있어야 한다. 하지만 지원이는 귀찮기 때문에 딥 러닝을 사용한 언어 모델 대신에 기본 NLP 기술인 n-gram 모델을 약간 수정하여 사용할 것이다.

지원이의 언어 모델은 문자 하나가 주어지면 훈련 코퍼스를 참조하여 다음 문자를 예측해 낸다. 훈련 코퍼스는 문자열 여러 개로 이루어져 있다. 어떤 문자 $c$가 주어지면, 지원이의 언어 모델은 훈련 코퍼스에 있는 모든 문자 $c$를 검색한 다음, 훈련 코퍼스에서 $c$ 바로 다음 위치에 가장 많이 나오는 문자 $c'$를 찾아서 $c$ 다음 문자가 $c'$일 것이라고 예측한다. $c=c'$일 수도 있음에 주의하라. 만약 그런 문자가 여러 개 있다면, 아스키 코드가 가장 작은 것을 선택한다. 만약 훈련 코퍼스에 문자 $c$가 존재하지 않는다면, 언어 모델이 다음 문자를 예측할 수 없어 오류가 발생한다.

훈련 코퍼스는 문장의 시작을 나타내는 문자 [와 문장의 끝을 나타내는 문자 ], 알파벳 소문자 a-z, 그리고 띄어쓰기를 대체하는 문자 -로만 구성되어 있다. 훈련 코퍼스 내의 모든 문장은 [로 시작하고 ]로 끝나며 길이가 3ドル$ 이상이다. 문자 [는 반드시 문장의 시작에만 등장하고, 문자 ]는 반드시 문장의 끝에만 등장한다.

언어 모델을 사용하여 문장을 생성하는 방법은 다음과 같다. 먼저 언어 모델에 문장의 시작을 나타내는 문자 [을 입력한다. 그 다음 언어 모델이 다음 문자 $c_1$을 예측하면, 생성하고 있는 문장의 끝에 예측한 문자를 추가한다. 그 다음 문자 $c_1$을 다시 언어 모델에 입력해 다음 문자 $c_2$를 예측한다. 이를 반복한다. 만약 반복 과정에서 문장의 끝을 나타내는 문자 ]가 등장하면 반복을 끝내고 예측을 종료한다. 그렇지 않다면, 다음 문자를 예측하는 과정은 무한히 반복된다. 훈련 코퍼스가 공집합이 아닌 한, 이 과정에서 언어 모델이 다음 문자를 예측할 수 없는 오류가 발생하지 않음을 증명할 수 있다.

훈련 코퍼스가 주어지면, 지원이와 함께 이 모델이 생성하는 문자열의 부분 문자열을 추측해 보자.

입력

첫째 줄에 세 정수 $N, K, M$이 공백으로 구분되어 주어진다. 이는 훈련 코퍼스가 총 $N$개의 문장으로 이루어져 있고, 프로그램은 이 훈련 코퍼스로 훈련한 언어 모델이 생성한 문자열의 $K$번째 문자부터 $K+M-1$번째 문자까지를 출력해야 한다는 것을 의미한다. (1ドル \leq N \leq 100,000円,ドル 1ドル \leq K \leq 10^{18},ドル 1ドル \leq M \leq 1,000円$)

둘째 줄부터 $N$개의 줄에 걸쳐 훈련 코퍼스에 들어 있는 문장들이 문자열의 형태로 한 줄에 하나씩 주어진다. 각 줄은 [로 시작하고 ]로 끝나며 길이가 3ドル$ 이상이다. 문자 [는 반드시 각 줄의 시작에만 등장하고, 문자 ]는 반드시 각 줄의 끝에만 등장한다.

훈련 코퍼스에 존재하는 모든 문자의 길이의 합은 300ドル,000円$을 넘지 않는다.

출력

입력된 훈련 코퍼스로 훈련한 언어 모델이 생성한 문자열의 $K$번째 문자부터 $K+M-1$번째 문자까지를 출력한다. $i$번째 문자를 출력할 때, 만약 언어 모델이 생성한 문자열의 길이가 짧아 $i$번째 문자가 존재하지 않는다면, 문자 .를 대신 출력한다.

제한

서브태스크

번호배점제한
125

$K \leq 100,000円$

275

추가 제약 조건이 없다.

예제 입력 1

3 1 15
[i-love-you]
[my-name-is-james]
[gist-algorithm-masters]

예제 출력 1

[gis]..........

언어 모델이 문장을 생성하는 방식은 다음과 같다.

언어 모델에 문장의 시작을 나타내는 문자 [를 입력한다. 훈련 코퍼스에서 문자 [ 바로 다음 위치에 등장하는 문자는 g 1ドル$개, i 1ドル$개, m 1ドル$개이다. 따라서 g, i, m이 가장 많이 등장하므로 이들 중 아스키 코드가 가장 작은 g를 다음 문자로 선택한다.

언어 모델에 g를 입력한다. 훈련 코퍼스에서 g 바로 다음 위치에 등장하는 문자는 i 1ドル$개, o 1ドル$개이다. 따라서 i, o가 가장 많이 등장하므로 이들 중 아스키 코드가 가장 작은 i를 다음 문자로 선택한다.

언어 모델에 i를 입력한다. 훈련 코퍼스에서 i 바로 다음 위치에 등장하는 문자는 - 1ドル$개, s 2ドル$개, t 1ドル$개이다. 따라서 s가 가장 많이 등장하므로 s를 다음 문자로 선택한다.

언어 모델에 s를 입력한다. 훈련 코퍼스에서 s 바로 다음 위치에 등장하는 문자는 - 1ドル$개, ] 2ドル$개, t 2ドル$개이다. 따라서 ], t가 가장 많이 등장하므로 이들 중 아스키 코드가 가장 작은 ]를 다음 문자로 선택한다.

언어 모델이 문장의 끝을 나타내는 문자 ]를 선택했으므로 더 이상 예측을 진행하지 않는다. 따라서 그 이후 자리를 모두 .로 채운다.

예제 입력 2

4 1 15
[i-love-you]
[my-name-is-james]
[gist-algorithm-masters]
[dresscode]

예제 출력 2

[de-ame-ame-ame

노트

문자 -의 아스키 코드는 45, [의 아스키 코드는 91, ]의 아스키 코드는 93, a의 아스키 코드는 97이다.

출처

University > 광주과학기술원 > 2024 GIST 알고리즘 마스터즈 E번

채점 및 기타 정보

  • 예제는 채점하지 않는다.
(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /