| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 | 1024 MB | 111 | 8 | 7 | 7.216% |
$N$ 개의 함수 상자가 있다. 각 함수 상자에는 0ドル$부터 $N-1$까지 번호가 부여되어 있다. 함수 상자 $i$는 $A_i$ 개의 입력 단자와 $B_i$ 개의 출력 단자를 가진다. 각 단자에는 0ドル$부터 차례대로 번호가 부여되어 있다.
기본적으로 함수 상자는 다음과 같이 직사각형 형태로 생겼다. 함수 상자의 둘레는 문자 -, |, +로 표현되고, 내부에는 번호를 의미하는 하나의 수가 적혀있다. 각 함수 상자의 내부에는 수가 정확하게 하나 적혀 있으며, 이 수의 숫자는 모두 하나의 행에 연속해 있다.
...........
.+-------+.
.|.......|.
.|..610..|.
.|.......|.
.+-------+.
...........
위의 경우에는 입력 단자와 출력 단자가 없다. 입력 단자와 출력 단자는 문자 >, ^, <, v로 표시한다. 문자의 좁은 쪽 방향이 함수 상자를 가리키면 입력 단자를, 함수 상자를 등지고 있으면 출력 단자를 나타낸다. 함수 상자의 꼭짓점에 단자가 있는 경우는 없다. 즉, 함수 상자의 네 꼭짓점을 나타내는 문자는 항상 +다.
예를 들어, 함수 상자 3ドル$이 $A_3=7$ 개의 입력 단자, $B_3=3$ 개의 출력 단자를 가진다면, 다음과 같이 나타낼 수 있다.
...........
.+-vv-^--+.
.<.....3.<.
.>.......|.
.|.......>.
.+-^---^^+.
...........
단자의 번호는 다음과 같이 알아낼 수 있다. 함수 상자의 왼쪽 위 꼭짓점에서 시작하여 시계 방향으로 둘레를 따라가면서 만나는 입력 단자와 출력 단자 각각에 0ドル$부터 차례대로 수를 부여하자. 이 수가 그 단자의 번호이다. 예를 들어, 위의 경우, 함수 상자 3ドル$의 입력 단자 3ドル$와 출력 단자 2ドル$를 나타내는 문자는 각각 ^, <이다.
입력 단자와 출력 단자는 하나의 선으로 이어줄 수 있다. 선은 다음과 같이 교차하거나 중간에 갈라지고 합쳐지지 않는 닫힌 선의 형태를 가지며, 문자 -, |, +로 표현된다.
........
..+--+..
..+-+|..
.+--+|..
.|...+-.
........
함수 상자 $a$의 출력 단자를 함수 상자 $b$의 입력 단자에 연결했다면, $a<b$임이 보장된다. 또한, 어떤 두 단자가 연결되어 있다면, 그 둘 중 하나는 입력 단자, 다른 하나는 출력 단자임이 보장된다.
예를 들어, 다음 그림에는 네 개의 함수 상자가 있고, 모든 선의 연결 상태를 표현하면 이러하다.
............
.+v+........
.<0>+...+-+.
.+^+|+-->.<.
....++.+<1>.
...+--+|+-+.
...|..++....
...|........
.+-v^-+.....
.|....|+v+..
.<.2..>>3|..
.+-v--+|.>..
.......+^+..
............
예시에서 마지막 연결의 표현 방법을 유의하라. 선끼리, 혹은 함수 상자끼리는 서로 교차하거나 영역을 공유하지 않는다.
그림에서 문자 +는 모호하게 사용되지 않는다. 엄밀하게 말하자면, 함수 상자의 모서리에 놓이지 않은 각 문자 +에 대해 다음 조건 중 적어도 하나를 만족하는 문자가 정확하게 두 개다.
+.|, v, ^.-, >, <.모든 함수 상자의 입력과 출력은 문자열이다. 함수 상자 $i$의 입력 단자 $j$에 주어지는 문자열이 $\text{IN}_{i,j}$라고 하자. 입력 단자에 어떠한 단자도 연결되어 있지 않다면, 빈 문자열이 주어진다고 생각한다. 먼저, 다음 과정을 통해 중간 문자열 $\text{PROC}_i$를 만든다. 이 과정은 길이 $C_i$의 수열 $D_{i,0},D_{i,1},\cdots ,D_{i,C_i-1}$에 의존한다.
출력 또한 길이 $E_i$의 수열 $F_{i,0},F_{i,1},\cdots ,F_{i,E_i-1}$에 의존한다. 출력 단자 $j$에 출력할 문자열 $\text{OUT}_{i,j}$는 다음과 같이 결정된다.
예외적으로, 함수 상자 0ドル$의 출력은 다음과 같이 결정한다. 먼저, 알파벳으로 이루어진 $K$ 개의 문자열 $S_0,S_1,\cdots ,S_{K-1}$을 잡는다. 단, 문자열 $S_i$에서 정수 0ドル\le n\le i-1$에 대해, “($n$)”의 표현을 사용할 수 있다. 이는 이 부분을 문자열 $S_n$으로 대치하라는 뜻이다.
예를 들어, $S_0,ドル $S_1,ドル $S_2$가 다음과 같이 주어졌다고 하자.
Good”(0)Day(0)Night”Hello(1)(0)ByeGood”각 문자열이 실제로 의미하는 값은 아래와 같다.
Good”GoodDayGoodNight”HelloGoodDayGoodNightGoodByeGood”함수 상자 0ドル$의 출력 단자 $i$에 출력되는 문자열은 $\text{actual}\left( S_{G_i} \right)$와 같다.
이제, $Q$ 개의 쿼리가 주어진다. $i$ 번째 쿼리에서 여러분은 함수 상자 $Y_i$의 출력 단자 $O_i$에서 출력되는 문자열 $\text{OUT}_{Y_i,O_i}$의 $P_i$ 번째 문자를 알아내야 한다.
첫 번째 줄에 두 정수 $H,ドル $W$가 주어진다. 그다음 줄부터 $H$ 개의 줄에 걸쳐, $N$ 개의 함수 상자가 모두 그려진 $H\times W$의 그림이 문자열 형식으로 주어진다.
그다음 줄에 $N$ 이상의 정수 $N'$이 주어진다. 그다음 줄부터 $N'$ 개의 줄에 걸쳐, 수열 $D_i$가 주어진다. 이 중 $i+1$ 번째 줄에는 $C_i+1$ 개의 정수 $C_i,ドル $D_{i,0},\cdots ,D_{i,C_i-1}$가 차례대로 주어진다. 그다음 줄부터 $N'$ 개의 줄에 걸쳐, 수열 $F_i$가 주어진다. 이 중 $i+1$ 번째 줄에는 $E_i+1$ 개의 정수 $E_i,ドル $F_{i,0},\cdots ,F_{i,E_i-1}$가 차례대로 주어진다.
그다음 줄에 정수 $K$가 주어진다. 그다음 줄부터 $K$ 개의 줄에 걸쳐, 문자열 $S_i$가 주어진다. 이 중 $i+1$ 번째 줄에는 문자열 $S_i$가 주어진다.
그다음 줄에 $B_0$ 이상의 정수 $M'$이 주어진다. 그다음 줄에 $M'$ 개의 정수 $G_0,G_1,\cdots ,G_{M'-1}$가 차례대로 주어진다.
그다음 줄에 정수 $Q$가 주어진다. 그다음 줄에 $Q$ 개의 정수 $Y_1,\cdots ,Y_Q$가 주어진다. 그다음 줄에 $Q$ 개의 정수 $O_1,\cdots ,O_Q$가 주어진다. 그다음 줄에 $Q$ 개의 정수 $P_1,\cdots ,P_Q$가 주어진다.
첫 번째 줄에 길이 $Q$의 문자열을 출력한다.
이 문자열의 $i$ 번째 문자는 아래와 같아야 한다.
!여야 한다.., -, |, +, >, <, ^, v, 0, ..., 9로만 이루어진, $N$ 개의 함수 상자가 모두 그려진 올바른 그림이다.+는 진행 방향이 변할 때에만 사용된다.14 12 ............ .+v+........ .<0>+...+-+. .+^+|+-->.<. ....++.+<1>. ...+--+|+-+. ...|..++.... ...|........ .+-v^-+..... .|....|+v+.. .<.2..>>3|.. .+-v--+|.>.. .......+^+.. ............ 5 4 0 1 1 1 3 0 1 0 4 0 0 0 0 7 2 0 1 1 0 2 2 3 1 0 1 3 1 1 0 3 0 1 1 5 1 0 1 1 2 2 0 0 4 2 3 1 0 3 Good (0)Day(0)Night Hello(1)(0)ByeGood 3 1 2 0 5 0 1 2 3 3 1 0 1 0 0 4 2 1 3 8
ldoa!
Contest > BOJ User Contest > 유틸컵 > 제1회 유틸컵 - Chapter 2 F번