题目大意
给你一个二阶魔方,问一步操作后是否复原
简要题解
暴力乱搞即可,可以根据给定的那个说明来写。
1 #include <bits/stdc++.h> 2 using namespace std; 3 namespace my_header { 4 #define pb push_back 5 #define mp make_pair 6 #define pir pair<int, int> 7 #define vec vector<int> 8 #define pc putchar 9 #define clr(t) memset(t, 0, sizeof t) 10 #define pse(t, v) memset(t, v, sizeof t) 11 #define bl puts("") 12 #define wn(x) wr(x), bl 13 #define ws(x) wr(x), pc(' ') 14 const int INF = 0x3f3f3f3f; 15 typedef long long LL; 16 typedef double DB; 17 inline char gchar() { 18 char ret = getchar(); 19 for(; (ret == ' ' || ret == ' ' || ret == ' ') && ret != EOF; ret = getchar()); 20 return ret; } 21 template<class T> inline void fr(T &ret, char c = ' ', int flg = 1) { 22 for(c = getchar(); (c < '0' || '9' < c) && c != '-'; c = getchar()); 23 if (c == '-') { flg = -1; c = getchar(); } 24 for(ret = 0; '0' <= c && c <= '9'; c = getchar()) 25 ret = ret * 10 + c - '0'; 26 ret = ret * flg; } 27 inline int fr() { int t; fr(t); return t; } 28 template<class T> inline void fr(T&a, T&b) { fr(a), fr(b); } 29 template<class T> inline void fr(T&a, T&b, T&c) { fr(a), fr(b), fr(c); } 30 template<class T> inline char wr(T a, int b = 10, bool p = 1) { 31 return a < 0 ? pc('-'), wr(-a, b, 0) : (a == 0 ? (p ? pc('0') : p) : 32 (wr(a/b, b, 0), pc('0' + a % b))); 33 } 34 template<class T> inline void wt(T a) { wn(a); } 35 template<class T> inline void wt(T a, T b) { ws(a), wn(b); } 36 template<class T> inline void wt(T a, T b, T c) { ws(a), ws(b), wn(c); } 37 template<class T> inline void wt(T a, T b, T c, T d) { ws(a), ws(b), ws(c), wn(d); } 38 template<class T> inline T gcd(T a, T b) { 39 return b == 0 ? a : gcd(b, a % b); } 40 template<class T> inline T fpw(T b, T i, T _m, T r = 1) { 41 for(; i; i >>= 1, b = b * b % _m) 42 if(i & 1) r = r * b % _m; 43 return r; } 44 }; 45 using namespace my_header; 46 47 int b[30], a[30]; 48 49 inline int val(char c) { 50 return c - 'a'; 51 } 52 53 void X() { 54 memcpy(a, b, sizeof b); 55 a[val('u')] = b[val('v')]; 56 a[val('v')] = b[val('x')]; 57 a[val('w')] = b[val('u')]; 58 a[val('x')] = b[val('w')]; 59 a[val('b')] = b[val('n')]; 60 a[val('d')] = b[val('p')]; 61 a[val('f')] = b[val('b')]; 62 a[val('h')] = b[val('d')]; 63 a[val('j')] = b[val('f')]; 64 a[val('l')] = b[val('h')]; 65 a[val('n')] = b[val('j')]; 66 a[val('p')] = b[val('l')]; 67 memcpy(b, a, sizeof a); 68 } 69 void Y() { 70 memcpy(a, b, sizeof b); 71 a[val('a')] = b[val('b')]; 72 a[val('b')] = b[val('d')]; 73 a[val('c')] = b[val('a')]; 74 a[val('d')] = b[val('c')]; 75 a[val('e')] = b[val('r')]; 76 a[val('f')] = b[val('t')]; 77 a[val('w')] = b[val('e')]; 78 a[val('u')] = b[val('f')]; 79 a[val('p')] = b[val('w')]; 80 a[val('o')] = b[val('u')]; 81 a[val('r')] = b[val('p')]; 82 a[val('t')] = b[val('o')]; 83 memcpy(b, a, sizeof a); 84 } 85 void Z() { 86 memcpy(a, b, sizeof b); 87 a[val('e')] = b[val('f')]; 88 a[val('f')] = b[val('h')]; 89 a[val('g')] = b[val('e')]; 90 a[val('h')] = b[val('g')]; 91 a[val('i')] = b[val('t')]; 92 a[val('j')] = b[val('s')]; 93 a[val('x')] = b[val('i')]; 94 a[val('w')] = b[val('j')]; 95 a[val('d')] = b[val('x')]; 96 a[val('c')] = b[val('w')]; 97 a[val('t')] = b[val('d')]; 98 a[val('s')] = b[val('c')]; 99 memcpy(b, a, sizeof b); 100 } 101 102 bool chk() { 103 vector<int> st; 104 st.clear(); 105 for (int i = 0; i < 6; ++i) { 106 for (int j = 1; j < 4; ++j) { 107 int k = i * 4 + j - 1; 108 if (b[k] != b[k + 1]) 109 return false; 110 } 111 st.pb(b[i * 4]); 112 } 113 sort(st.begin(), st.end()); 114 st.erase(unique(st.begin(), st.end()), st.end()); 115 //printf("%d ", (int)st.size()); 116 if (st.size() != 6) 117 return false; 118 return true; 119 } 120 121 bool judge() { 122 if (chk()) 123 return true; 124 X(); 125 if (chk()) return true; 126 X(), X(); 127 if (chk()) return true; 128 X(); 129 130 Y(); 131 if (chk()) return true; 132 Y(), Y(); 133 if (chk()) return true; 134 Y(); 135 136 Z(); 137 if (chk()) return true; 138 Z(), Z(); 139 if (chk()) return true; 140 Z(); 141 142 return false; 143 } 144 145 int main() { 146 #ifdef lol 147 freopen("5983.in", "r", stdin); 148 freopen("5983.out", "w", stdout); 149 #endif 150 151 int T; 152 scanf("%d", &T); 153 while (T--) { 154 for (int i = 0; i < 24; ++i) 155 scanf("%d", &b[i]); 156 if (judge()) 157 puts("YES"); 158 else puts("NO"); 159 } 160 return 0; 161 }