| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 5 초 (추가 시간 없음) | 1024 MB (추가 메모리 없음) | 220 | 14 | 9 | 9.574% |
먼 옛날, 바다 한가운데에 자리한 섬에는 고대의 문명이 번영했다. 그들은 빛을 신성한 존재로 여겼고, 지금은 잊힌 언어로 자신들의 흔적을 남겼다.
하지만 시간은 흘렀고, 사람들은 사라졌다. 빛은 고요해졌다. 지금 남아 있는 것은 오랜 시간의 풍화 속에서 부서지고, 바래고, 잊힌 기록뿐이다.
오랜 시간 후, 탐험가 브루가 미지의 섬에 첫 발을 디뎠다. 섬은 적막했지만, 땅 곳곳에 흩어진 빛의 파편들이 과거의 흔적을 속삭이고 있었다.
하지만 빛의 파편 속 기록들은 오랜 시간 속에서 일그러지고, 조각나고, 왜곡되었다. 브루는 그 언어를 알지 못했고, 해독할 단서조차 남아 있지 않았다. 이 기록들은 결코 해석되지 않을 것이다. 누군가의 도움이 없다면...
타임위버들이여,
그대들은 시간의 틈에서 태어난 존재. 흩어진 조각 속에서 잊힌 흐름을 짜 맞추고, 조용히 사라진 이야기들을 다시금 세상에 드러내는 자들이다.
과거의 기록은 이미 일그러졌고, 미래의 탐험가는 이를 해독할 수 없다. 하지만 그대들의 손길이 닿는다면, 시간 속에 흩어진 빛의 언어가 다시 이어지고, 기록은 그 형태를 되찾을 것이다. 기억하라. 그대들이 엮어낸 실이 섬의 운명을 바꿀지도 모른다는 것을.
기록은 다음의 방식으로 남겨진다. 먼저 10ドル\times 10$ 격자를 준비한 뒤, 100ドル$개의 칸 각각에 0ドル$ 또는 1ドル$을 새긴다. 이 상태를 기본 격자라 한다. 이때 위에서부터 $r$번째 행, 왼쪽에서부터 $c$번째 열의 칸을 $(r,c)$로 표기한다. 아래는 기본 격자의 예시이다.
기본 격자를 준비한 뒤, 기록할 내용이 생기면 이 격자의 일부 칸에 물감을 이용해 색칠한다. 색칠된 칸의 숫자는 오랫동안 보존되지만, 색칠되지 않은 칸들의 숫자는 오랜 시간이 지나며 완전히 사라진다.
그러나 기록이 발견되기까지 수백 년의 시간이 흐르는 동안 격자의 모습은 완전히 뒤틀린다. 색칠되지 않은 칸의 숫자들은 모두 사라진다. 또한, 무작위로 하나의 행 또는 열 전체가 불완전해져 그 숫자들을 알아볼 수 없게 된다. 다만 해당 위치에 색칠된 흔적은 여전히 남아 있다. 마지막으로, 시간이 지나며 격자의 형태는 더욱 흐려지고, 끝내 남는 것은 물감으로 색칠된 칸에 적힌 숫자들 (또는 색칠된 흔적들), 그리고 그 순서뿐이다. (순서는 행 번호가 작을수록, 같을 경우 열 번호가 작을수록 앞선다.)
다음은 변형이 일어나는 과정을 나타낸 예시이다. 실제 기록은 10ドル\times 10$ 크기의 격자를 활용하지만, 아래의 예시는 편의상 5ドル\times 5$ 격자를 활용하였다.
고대의 기록이 현세로 이어지도록 하는 기록법과 해독법을 전달하고, 그대의 사명을 완수하여라.
이 문제에서 당신의 프로그램은 각 테스트 케이스마다 두 번 실행될 것이다. 당신의 전략을 검증하기 위해, 다양한 이진 문자열을 기록하고 해독하는 과정을 진행할 것이다. 실행 과정을 요약하면 다음과 같다.
첫 줄에 문자열 $R$이 주어진다. $R$은 현재 수행해야 할 역할을 나타내며, $R$이 registrar이면 기록자의 역할을, $R$이 brue이면 기록을 해독하는 탐험가 브루의 역할을 수행해야 한다.
당신의 역할에 따라 다음과 같이 기록법 또는 해독법을 수행한다. 출력이 끝날 때마다 출력 버퍼를 비워야 한다.
첫 줄에는 당신의 전략으로 기록하고 해독할 수 있는 이진 문자열의 길이 $L$을 출력한다.
다음 열 개의 줄에 기본 격자의 형태를 출력한다. 이들 중 $i$번째 줄에는 열 개의 숫자 $G_{i1},G_{i2},\cdots ,G_{i10}$을 이어붙여 출력한다. 이는 칸 $(i,j)$에 숫자 $G_{ij}$를 새긴다는 의미이다.
다음으로 기록해야 할 정보의 수 $T$를 입력받는다. 이후 $T$회 동안 다음 과정을 반복한다.
‘X’로, 색칠하지 않는 칸은 ‘.’로 출력한다. 이때 적어도 한 칸은 색칠해야 한다.이진 문자열의 길이 $L$과 기본 격자의 상태를 출력한 뒤, 그리고 각각의 정보를 기록하기 위한 색칠 방법을 출력한 뒤에 출력 버퍼를 비워야 한다.
먼저 해독해야 할 정보의 수 $T$를 입력받는다. 이후 $T$회 동안 다음 과정을 반복한다.
‘0’, ‘1’, ‘?’로 이루어진 문자열 $S_i$는 격자가 최종적으로 변형된 상태를 나타낸다. 이때 ‘?’는 물감이 색칠된 흔적을 나타낸다. $S_i$가 입력되는 순서는 첫 번째 실행 시와 같다.각각의 해독 결과를 출력하고 난 뒤에는 출력 버퍼를 비워야 한다.
모든 기록에 대해 해독에 성공하지 못한다면, 점수를 받지 못한다.
모든 기록에 대해 해독에 성공한다면, 0ドル\le a,ドル 1ドル\le b\le 10$인 두 정수 $a,b$에 대해 $L=10a+b$라 했을 때, 다음 표와 같은 점수를 받는다.
| $b$ | 1ドル$ | 2ドル$ | 3ドル$ | 4ドル$ | 5ドル$ | 6ドル$ | 7ドル$ | 8ドル$ | 9ドル$ | 10ドル$ |
|---|---|---|---|---|---|---|---|---|---|---|
| $a=0$ | 2ドル$ | 3ドル$ | 4ドル$ | 5ドル$ | 6ドル$ | 8ドル$ | 9ドル$ | 10ドル$ | 11ドル$ | 12ドル$ |
| $a=1$ | 13ドル$ | 14ドル$ | 15ドル$ | 16ドル$ | 17ドル$ | 18ドル$ | 19ドル$ | 20ドル$ | 21ドル$ | 22ドル$ |
| $a=2$ | 23ドル$ | 24ドル$ | 25ドル$ | 26ドル$ | 27ドル$ | 28ドル$ | 29ドル$ | 30ドル$ | 31ドル$ | 33ドル$ |
| $a=3$ | 34ドル$ | 35ドル$ | 36ドル$ | 37ドル$ | 39ドル$ | 40ドル$ | 41ドル$ | 42ドル$ | 43ドル$ | 45ドル$ |
| $a=4$ | 46ドル$ | 47ドル$ | 49ドル$ | 50ドル$ | 51ドル$ | 53ドル$ | 54ドル$ | 56ドル$ | 58ドル$ | 60ドル$ |
| $a=5$ | 62ドル$ | 64ドル$ | 66ドル$ | 68ドル$ | 70ドル$ | 72ドル$ | 75ドル$ | 78ドル$ | 81ドル$ | 84ドル$ |
| $a=6$ | 89ドル$ | 100ドル$ | ||||||||
registrar 2 100101 000000
6 1111100000 0000011111 1111100000 0000011111 1111100000 0000011111 1111100000 0000011111 1111100000 0000011111 X......... .X........ ..X....... ...X...... ....X..... .....X.... ......X... .......X.. ........X. .........X .......... .......... .......... .......... ....XX.... ....XX.... .......... .......... .......... ..........
주어진 예시는 입출력이 어떤 방식으로 이루어지는지 이해를 돕기 위해 의도적으로 개행 간격 등을 조절한 것이며, 실제 입출력에서는 빈 줄을 출력하지 말아야 한다.
brue 2 10101?0101 1001
100101 000000
주어진 예시는 입출력이 어떤 방식으로 이루어지는지 이해를 돕기 위해 의도적으로 개행 간격 등을 조절한 것이며, 실제 입출력에서는 빈 줄을 출력하지 말아야 한다.
이 문제에서는 출력을 마칠 때마다 출력 버퍼를 비워야 한다. 출력 버퍼를 비우지 않으면 예상치 못한 채점 결과를 받을 수 있다.
출력 버퍼를 비우는 방법은 다음과 같다.
fflush(stdout)std::cout << std::flushSystem.out.flush()sys.stdout.flush()이외의 언어에 대해서는 언어별 명세를 참고해야 한다.
Contest > BOJ User Contest > BCF > BCF 2025 1번