二階魔方又叫小魔方,是2*2*2的立方形結構。每一面都有4個塊,共有24個塊。每次操作可以將任意一面逆時針或者順時針旋轉90°,如將上面逆時針旋轉90°操作如下。
nero在小魔方上做了一些改動,用數字替換每個塊上面的顏色,稱之為數字魔方。魔方上每一面的優美度就是這個面上4個數字的乘積,而魔方的總優美度就是6個面優美度總和。
現在nero有乙個數字魔方,他想知道這個魔方在操作不超過5次的前提下能達到的最大優美度是多少。
魔方展開後每一塊的序號如下圖:
輸入一行包含24個數字,按序號順序給出魔方每一塊上面的數字。所有數大小範圍為[-100,100]。
輸出一行包含乙個數字,表示最大優美度。示例1
複製
2 -3 -2 3 7 -6 -6 -7 9 -5 -9 -3 -2 1 4 -9 -1 -10 -5 -5 -10 -4 8 2複製
8281這道題粗略一看很難,靜下心來仔細想一想,就是寫出轉動的過程,然後用dfs進行遍歷,求出最大值就行了。
#include //定義乙個最小值
long max = -0x3fff;
//轉動魔方
void swap(int a,int b,int c,int d,int arr)
//右面的轉動
void right(int arr)
void left(int arr)
void up(int arr)
void down(int arr)
void front(int arr)
void began(int arr)
//求當前形態下的完美值
long getsum(int arr)
//dfs遍歷
void dfs(int arr,int depth)
int newarr[24];
for(int i=0;i<24;i++)
newarr[i] = arr[i];
right(newarr);
dfs(newarr,depth-1);
for(int i=0;i<24;i++)
newarr[i] = arr[i];
left(newarr);
dfs(newarr,depth-1);
for(int i=0;i<24;i++)
newarr[i] = arr[i];
up(newarr);
dfs(newarr,depth-1);
for(int i=0;i<24;i++)
newarr[i] = arr[i];
down(newarr);
dfs(newarr,depth-1);
for(int i=0;i<24;i++)
newarr[i] = arr[i];
front(newarr);
dfs(newarr,depth-1);
for(int i=0;i<24;i++)
newarr[i] = arr[i];
began(newarr);
dfs(newarr,depth-1);
}int main()
dfs(map,5);
printf("%ld\n",max);
return 0;
}
位元組跳動2019校招前端筆試
題目描述 開心消消樂 給定乙個一維的正整數陣列,逐次選擇其中乙個數做消除,消除所獲得的分數為當前數字和左右相鄰數字的乘積 當左邊或者右邊沒有數字可以認為是1 e.g.輸入陣列 3,1,5,8 step1 消除1 獲得分數 15 3x1x5,陣列變為 3,5,8 step2 消除5,獲得分數 120 ...
位元組跳動2019校招前端筆試
題目描述 給一些駝峰式的變數名,將它們轉換為下劃線式的,要求及說明如下 輸入資料一定為合法的 駝峰式 變數名,變數名由若干單詞組成,單詞應當為首字母大寫,或全大寫,或全小寫。如 variable onevariable onehttprequest 如 variable one variable o...
位元組跳動校招 附加題(Python)
存在n 1個房間,每個房間依次為房間1 2 3.i,每個房間都存在乙個傳送門,i房間的傳送門可以把人傳送到房間pi 1 pi i 現在路人甲從房間1開始出發 當前房間1即第一次訪問 每次移動他有兩種移動策略 a.如果訪問過當前房間 i 偶數次,那麼下一次移動到房間i 1 b.如果訪問過當前房間 i ...