國慶訓練賽第二場 模擬 能否一步還原二階魔方
阿新 • • 發佈:2018-12-13
兩種情況
一、一開始就還原好
二、要想一步還原 一定是有兩面是好的(且是對立)
上下, 左右, 前後
有兩層 可以發現每層模擬一下順逆時針 會出現重複
所以可以得出結論 一共就3* 2種情況 列舉
#include<iostream> #include<cstdio> #include<cstring> using namespace std; bool same(int a, int b, int c, int d){ if (a == b && a == c && a == d) return true; return false; } int a[7][5]; int b[7]; int main(){ int t; scanf("%d", &t); while (t--){ memset(b, 0, sizeof(b)); for (int i = 1; i <= 6; ++i){ b[i] = 1; for (int j = 1; j <= 4; ++j){ scanf("%d", &a[i][j]); //順便看下 這個面是不是都一個顏色 if (j >= 2){ if (a[i][j] != a[i][j - 1]) b[i] = 0; } } } int success = 0; //一開始就好的情況 if (same(a[1][1], a[1][2], a[1][3], a[1][4]) && same(a[2][1], a[2][2], a[2][3], a[2][4]) && same(a[3][1], a[3][2], a[3][3], a[3][4]) && same(a[4][1], a[4][2], a[4][3], a[4][4]) && same(a[5][1], a[5][2], a[5][3], a[5][4]) && same(a[6][1], a[6][2], a[6][3], a[6][4])) success = 1; //轉一步 一定就是有對立面 顏色相同 即上下13, 左右56, 前後24 只需轉一層順逆 就好了 不是轉兩次順逆 因為重複了 //上下面同 if (b[1] && b[3] && same(a[2][1], a[2][2], a[5][3], a[5][1]) && same(a[5][4], a[5][2], a[4][1], a[4][2])&& same(a[4][3], a[4][4], a[6][4], a[6][2])&& same(a[6][3], a[6][1], a[2][3], a[2][4])) success = 1; if (b[1] && b[3] && same(a[2][1], a[2][2], a[6][4], a[6][2]) && same(a[6][3], a[6][1], a[4][1], a[4][2])&& same(a[4][3], a[4][4], a[5][3], a[5][1])&& same(a[5][4], a[5][2], a[2][3], a[2][4])) success = 1; //左右同 if (b[5] && b[6] && same(a[2][2], a[2][4], a[1][3], a[1][1]) && same(a[1][2], a[1][4], a[4][3], a[4][1])&& same(a[4][4], a[4][2], a[3][1], a[3][3])&& same(a[3][2], a[3][4], a[2][1], a[2][3])) success = 1; if (b[5] && b[6] && same(a[2][2], a[2][4], a[3][1], a[3][3]) && same(a[3][2], a[3][4], a[4][1], a[4][3])&& same(a[4][2], a[4][4], a[1][1], a[1][3])&& same(a[1][2], a[1][4], a[2][1], a[2][3])) success = 1; //前後同 if (b[2] && b[4] && same(a[1][3], a[1][4], a[5][2], a[5][1]) && same(a[5][4], a[5][3], a[3][3], a[3][4])&& same(a[3][1], a[3][2], a[6][1], a[6][2])&& same(a[6][3], a[6][4], a[1][1], a[1][2])) success = 1; if (b[2] && b[4] && same(a[1][3], a[1][4], a[6][1], a[6][2]) && same(a[6][3], a[6][4], a[3][3], a[3][4])&& same(a[3][1], a[3][2], a[5][2], a[5][1])&& same(a[5][3], a[5][4], a[1][1], a[1][2])) success = 1; if (success) puts("YES"); else puts("NO"); } return 0; }