題目連結(jié):
題目大意:
給定一個 2 × 2 魔方的展開圖並指定魔方的特定面為正面、背面、上面、底面、左面以及右面,如下:
一開始正面的數(shù)字都標(biāo)記為 1 ,同理右面、上面、底面、左面和背面也被依序標(biāo)為 2 、 3 、 4 、 5 、 6。
現(xiàn)在定義指令 CMD,CMD 只會有以下四種值:
CMD = 1 ,順時針旋轉(zhuǎn)右面;
CMD = 2 ,順時針旋轉(zhuǎn)上面;
CMD = 3 ,順時針旋轉(zhuǎn)左面;
CMD = 4 ,順時針旋轉(zhuǎn)底面。
至於順時針的基準(zhǔn)點可以參考上面的展開圖。因此當(dāng)展開圖重組回一個魔方(保持正面面朝己的組法)時,可以看到
CMD = 1 會使得正面的右半側(cè)向上轉(zhuǎn)動;
CMD = 2 會使得正面的上半側(cè)向左轉(zhuǎn)動;
CMD = 3 會使得正面的左半側(cè)向下轉(zhuǎn)動;
CMD = 4 會使得正面的下半側(cè)向右轉(zhuǎn)動。
現(xiàn)在輸入有若干列(≦ 1000 列),每列給定一個 CMD 之值。試問全部的旋轉(zhuǎn)指令執(zhí)行完後的魔方,其正面四個數(shù)字分別為多少?
範(fàn)例輸入:
範(fàn)例輸入 #1
1
2
3
4
範(fàn)例輸入 #2
4
3
2
1
範(fàn)例輸入 #3
1
1
1
1
2
2
2
2
3
3
3
3
4
4
4
4
範(fàn)例輸出:
範(fàn)例輸出 #1
3 2
5 4
範(fàn)例輸出 #2
2 4
3 4
範(fàn)例輸出 #3
1 1
1 1
解題思維:
對於空間感較不好、腦部快取記憶體不夠記不起來(像是我)或是覺得畫下來很麻煩(像是我)等等且手邊沒有 2 × 2 魔術(shù)方塊的人,可以使用
這個網(wǎng)站把玩看看 2 × 2 魔術(shù)方塊。
本題就單純只是模擬即可。
我的模擬法是根據(jù)展開圖中,將上底左右正背六面命名為 Top 、 Bottom 、 Left 、 Right 、 Front 、 Back 。
並對於每一面的數(shù)字按照特定順序標(biāo)記,以 Top 來說:Top[0] 代表左上的數(shù)字、Top[1] 代表右上、Top[2] 代表左下數(shù)字 、 Top[3] 則代表右下。其他面同理。
因此,對於每一面自身的順時針旋轉(zhuǎn)就只是將原本的位置 0 的數(shù)字移到位置 1 、 位置 1 移到位置 2 、位置 2 移到位置 3 、位置 3 移到位置 0。
而上面以及底面的旋轉(zhuǎn)造成的正面、背面、左面以及右面的數(shù)字位移也相當(dāng)?shù)刂庇^,例如正面左上的數(shù)字會跑到左面的左上、左面的左上會跑到背面的左上等等,而這些位置之編號剛好都相同。
至於左面與右面的旋轉(zhuǎn)就沒有很直觀了,因為此時背面的數(shù)字編號的對應(yīng)移動到其他面會怪怪的,需要特判。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。