2094 - ルービックキューブ
時間制限 1 秒 / メモリ制限 256 MB / 得点 10 / Writer syoribu / x 0 / 統計 /
-
タグ:
- PCK本選_08問目
- PCK2024予選
問題
ルービックキューブは、図のように表面に色のついた27個の立方体から構成されている立体パズルである。以下の図では、説明のためにルービックキューブの各面にアルファベットが書かれている。同じ文字は同じ色を表す。
![]() |
![]() |
$x>0,y>0,z>0$方向から見たとき | $x<0,y<0,z<0$方向から見たとき |
ルービックキューブでは、1回の操作で、x軸、y軸、またはz軸に垂直な同一平面上にある9つの立方体を選んで、90度回転させることができる。具体的には、以下の図のような操作方法だけが許されている。ただし、説明のために、以下のすべての操作を始める前には上の図のような状態だとする。
操作方法 | 操作の説明 | 操作時の状態 | 操作後の状態 |
1 | x軸方向の負の側にある立方体9つを右図のようにx軸周りに90度回転させる |
![]() |
![]() |
2 | x軸方向の負の側にある立方体9つを右図のようにx軸周りに90度回転させる |
![]() |
![]() |
3 | x軸方向の中間にある立方体9つを右図のようにx軸周りに90度回転させる |
![]() |
![]() |
4 | x軸方向の中間にある立方体9つを右図のようにx軸周りに90度回転させる |
![]() |
![]() |
5 | x軸方向の正の側にある立方体9つを右図のようにx軸周りに90度回転させる |
![]() |
![]() |
6 | x軸方向の正の側にある立方体9つを右図のようにx軸周りに90度回転させる |
![]() |
![]() |
7 | y軸方向の負の側にある立方体9つを右図のようにy軸周りに90度回転させる |
![]() |
![]() |
8 | y軸方向の負の側にある立方体9つを右図のようにy軸周りに90度回転させる |
![]() |
![]() |
9 | y軸方向の中間にある立方体9つを右図のようにy軸周りに90度回転させる |
![]() |
![]() |
10 | y軸方向の中間にある立方体9つを右図のようにy軸周りに90度回転させる |
![]() |
![]() |
11 | y軸方向の正の側にある立方体9つを右図のようにy軸周りに90度回転させる |
![]() |
![]() |
12 | y軸方向の正の側にある立方体9つを右図のようにy軸周りに90度回転させる |
![]() |
![]() |
13 | z軸方向の負の側にある立方体9つを右図のようにz軸周りに90度回転させる |
![]() |
![]() |
14 | z軸方向の負の側にある立方体9つを右図のようにz軸周りに90度回転させる |
![]() |
![]() |
15 | z軸方向の中間にある立方体9つを右図のようにz軸周りに90度回転させる |
![]() |
![]() |
16 | z軸方向の中間にある立方体9つを右図のようにz軸周りに90度回転させる |
![]() |
![]() |
17 | z軸方向の正の側にある立方体9つを右図のようにz軸周りに90度回転させる |
![]() |
![]() |
18 | z軸方向の正の側にある立方体9つを右図のようにz軸周りに90度回転させる |
![]() |
![]() |
ルービックキューブの操作をシミュレーションしてみよう。
現在のルービックキューブの各面の状態と、そこからルービックキューブに対して行う操作が与えられる。操作がすべて終わった後の、ルービックキューブの各面の状態を求めるプログラムを作成せよ。
入力
入力は以下の形式で与えられる。
$f_1$ $f_2$ $f_3$ $f_4$ $f_5$ $f_6$ $f_7$ $f_8$ $f_9$ $f_{10}$ $f_{11}$ $f_{12}$ $f_{13}$ $f_{14}$ $f_{15}$ $f_{16}$ $f_{17}$ $f_{18}$ $f_{19}$ $f_{20}$ $f_{21}$ $f_{22}$ $f_{23}$ $f_{24}$ $f_{25}$ $f_{26}$ $f_{27}$ $f_{28}$ $f_{29}$ $f_{30}$ $f_{31}$ $f_{32}$ $f_{33}$ $f_{34}$ $f_{35}$ $f_{36}$ $f_{37}$ $f_{38}$ $f_{39}$ $f_{40}$ $f_{41}$ $f_{42}$ $f_{43}$ $f_{44}$ $f_{45}$ $f_{46}$ $f_{47}$ $f_{48}$ $f_{49}$ $f_{50}$ $f_{51}$ $f_{52}$ $f_{53}$ $f_{54}$ $Q$ $p_1$ $p_2$ $:$ $p_Q$
最初の6行に、現在のルービックキューブの各面の色を表す文字$f_i$ ($f_i$ はA,B,C,D,E,またはF)が与えられる。$f_i$は、下図のように、ルービックキューブの各面に番号$i$を振ったときの面の色を表す。
![]() |
![]() |
$x>0,y>0,z>0$方向から見たとき | $x<0,y<0,z<0$方向から見たとき |
続く1行に、ルービックキューブに対して行う操作の数$Q$ ($1 \leq Q \leq 100$)が与えられる。続く$Q$行に、$i$番目の操作$p_i$ ($1 \leq p_i \leq 18$)が与えられる。$p_i$は、何番目の操作方法でルービックキューブを操作するかを表す。たとえば、$p_1$が5なら、最初に行う操作が操作方法5であることを表す。
出力
すべての操作が終わった後のルービックキューブの面の色を表す文字を、入力でルービックキューブの面の色を与えたときと同じ形式で6行に出力する。
入出力例
入力例1
A A A A A A A A A B B B B B B B B B C C C C C C C C C D D D D D D D D D E E E E E E E E E F F F F F F F F F 1 1
出力例1
A A A A A A A A A B B B B B B B B B F C C F C C F C C E D D E D D E D D C E E C E E C E E D F F D F F D F F
入力例2
A A A A A A A A A B B B B B B B B B F C C F C C F C C E D D E D D E D D C E E C E E C E E D F F D F F D F F 2 7 13
出力例2
E D D E A A C A A C C C F B B D B B A A E C C C F F F B B F E D D E D D C C B E E B E E B A A A D F F D F F