東東有乙個二階魔方,即2×2×2的乙個立方體組。立方體由八個角組成。
魔方的每一塊都用三維座標(h, k, l)標記,其中h, k, l∈。六個面的每乙個都有四個小麵,每個小麵都有乙個正整數。
對於每一步,東東可以選擇乙個特定的面,並把此面順時針或逆時針轉90度。
請你判斷,是否東東可以在乙個步驟還原這個魔方(每個面沒有異色)。
輸入的第一行包含乙個整數n(n≤30),這是測試用例的數量。
對於每個測試用例, 第 1~4 個數描述魔方的頂面,這是常見的2×2面,由(0,0,1),(0,1,1),(1,0,1),(1,1,1)標記。四個整數對應於上述部分。
第 5~8 個數描述前面,即(1,0,1),(1,1,1),(1,0,0),(1,1,0)的公共面。四個整數 與上述各部分相對應。
第 9~12 個數描述底面,即(1,0,0),(1,1,0),(0,0,0),(0,1,0)的公共面。四個整數與上述各部分相對應。
第 13~16 個數描述背面,即(0,0,0),(0,1,0),(0,0,1),(0,1),(0,1,1)的公共面。四個整數與上述各部分相對應。
第 17~20 個數描述左面,即(0,0,0),(0,0,1),(1,0,0),(1,0,1)的公共面。給出四個整數與上述各部分相對應。
第 21~24 個數描述了右面,即(0,1,1),(0,1,0),(1,1,1),(1,1,0)的公共面。給出四個整數與上述各部分相對應。
換句話說,每個測試用例包含24個整數a、b、c到x。你可以展開表面以獲得平面圖
如下所示。
+ - + - + - + - + - + - +對於每個測試用例,魔方如果可以至多 "只轉一步" 恢復,輸出yes,則輸出no。| q | r | a | b | u | v |
+ - + - + - + - + - + - +
| s | t | c | d | w | x |
+ - + - + - + - + - + - +
| e | f |
+ - + - +
| g | h |
+ - + - +
| i | j |
+ - + - +
| k | l |
+ - + - +
| m | n |
+ - + - +
| o | p |
+ - + - +
1 #include 2 #include 3 #include 4 #include 5view codeusing
namespace
std;
6int a[100][100];7
int *u,*d,*f,*b,*l,*r;8//
int u[100],d[100],f[100],b[100],r[100],l[100];
9void
upshift()
1017
void
leftshift()
1826
void
frontshift()
2734
bool
judge()
3541
void
initial()
4249
intmain()
5056
57upshift();
58if(judge())
59upshift();upshift();
60if(judge())
61upshift();
6263
leftshift();
64if(judge())
65leftshift();leftshift();
66if(judge())
67leftshift();
6869
frontshift();
70if(judge())
71frontshift();frontshift();
72if(judge())
73frontshift();
74 cout<
<
76return0;
77 }
week10限時模擬 東東轉魔方
陣列a 存放的是原魔方的情況 陣列b 存放的是旋轉之後魔方的情況。1 模擬旋轉的6種情況 找到乙個正方體,標上代表數字,分別模擬6中旋轉的情況,將結果存放到b 陣列裡面 2 判斷旋轉之後的魔方是否成功,即判斷陣列b的六個面是否每個面數字一樣。這是一道蠻暴力的題,只要正方體疊的好,沒有什麼是解決不了滴...
魔方 大模擬
魔方 cube.cpp 題目描述 給出乙個二階魔方,保證 n 步以內能夠還原。還原 被定義為每個面均為純色。請給出,操作編號字典序最小,且不存在同類操作相鄰,的還原方案。輸入格式 第一行乙個正整數n,表示最多步數。接下來24個整數,按上圖的順序依次給出ci,ci 輸出格式 一行,t個用空格隔開的正整...
HDU 5983 模擬魔方 模擬
題意是說給定乙個 2 2 魔方的各個面的情況,問是否能轉動不超過一次使得魔方復原。思路是先在輸入的時候統計一下已完成的面數,要想以最多一次的轉動使得魔方復原,那麼已完成的面數只能是 2 面或者 6 面,此處可剪枝。若已完成 6 面,那麼一定可以復原 若已完成 2 面,則要用一次轉動完成其他六面,開始...