題目描述:
據(jù)說,網(wǎng)易有自主開發(fā)的游戲引擎,參與開發(fā)的個(gè)個(gè)都是算法高手,喜歡研究各種好玩的東西。
有一天,有個(gè)小mm得到了一個(gè)魔方,不過魔方不是常規(guī)的3*3*3的!
而是大小是2*2*3的一個(gè)長方體!她實(shí)在搞不定這種異形魔方,
于是只好求助于引擎部某GG。那GG看到后說,這太簡單了,等我一會兒。
沒多久,程序?qū)懞煤,一下子就把小mm需要的公式算出來了,
那個(gè)mm驚嘆不已,并用這些公式迅速把魔方還原好了。讓小mm佩服的不得了。
你的算法能力怎么樣呢?你也能辦到嗎?
輸入:
魔方擺放例圖(并且假設(shè)顏色分布為上黃下白左藍(lán)右綠前紅后橙):
2 3
1 0
10 11
9 8
6 7
5 4
請你編寫函數(shù):
int solve(const int m[], const int s[], char ans[])
參數(shù)意義如下:
m[] : 例圖中的是位置編號,也是復(fù)原后的方塊編號;
m[a] = b 表示在位置a的地方,放了一個(gè)編號為b的方塊
m這個(gè)數(shù)組的長度為12
s[] : 用來表示每一塊主色的朝向,黃白為主色,沒有前兩色時(shí)以紅橙為主色;
主色面向上為0,向下為1,左為2,右為3,前為4,后為5
如附圖sample,U面上各塊,主色都面向上,朝向值為0
中層RF塊,橙色面朝右,值為3。s這個(gè)數(shù)組的長度為12
輸出:
ans[]:返回復(fù)原(只需要各面同色)的最少的操作步驟,寫法類似魔方公式:
UDLRFB分別表示相應(yīng)面,單獨(dú)寫一個(gè)字母表示這個(gè)面順時(shí)針旋轉(zhuǎn)90度,
R2表示R面旋轉(zhuǎn)180度,U'表示U面逆時(shí)針旋轉(zhuǎn)90度。
U的旋轉(zhuǎn)方向是0->1->2->3,U'是0->3->2->1
D的旋轉(zhuǎn)方向是4->7->6->5,D'是4->5->6->7
R2只算一步,步數(shù)以這6個(gè)字母的出現(xiàn)次數(shù)為準(zhǔn),之間不要用空格分隔
函數(shù)返回值:返回還原的最少步數(shù),要與ans里的步數(shù)一致。
樣例輸入:
m= 3 2 4 5 0 1 7 6 9 11 10 8 s= 0 0 0 0 1 1 1 1 4 4 5 5
樣例輸出:
4 DUF2R2
其它信息:
輸出的如4 DUF2R2,4表示返回值,返回值的答案唯一
DUF2R2為ans數(shù)組中的內(nèi)容,ans中的內(nèi)容不唯一,只要是任意一解即可
樣例中的實(shí)際形狀見題目數(shù)據(jù)保證出的數(shù)據(jù)是合理的,不會出現(xiàn)還原不了的情況
提交的代碼不要出現(xiàn)main函數(shù)
另:如果你是色盲或者色弱,看不清楚圖片上的顏色,
也請加初級一群19472277(已經(jīng)在中級群或者主群的就免加了),會給你更詳細(xì)的解釋
難度:Hard