Pocket Cube二阶魔方
https://www.nowcoder.com/acm/contest/207/B
HDU5983的一道题,看错了输入,看了题解发现用一位数组存比较方便。
开两个24的数组存完直接暴力交换就完事了,搞了两个小时,才发现这么简单,真是自闭魔方。
#include <bits/stdc++.h> using namespace std; int a[30], b[30]; int isok() { int i, j; for(i = 1; i <= 24; i += 4) { for(j = i + 1; j < i + 4; j++) { if(b[j] != b[j - 1]) return 0; } } return 1; } void cpy() { for(int i = 1;i <= 24;i++) b[i] = a[i]; } int main() { int t; scanf("%d",&t); while(t--) { for(int i = 1; i <= 24; i++) { scanf("%d",&a[i]); b[i] = a[i]; } if(isok()) { printf("YES\n"); continue; } b[2]=a[6]; b[4]=a[8]; b[6]=a[10]; b[8]=a[12]; b[10]=a[14]; b[12]=a[16]; b[14]=a[2]; b[16]=a[4]; if(isok()) { printf("YES\n"); continue; } cpy(); b[2]=a[14]; b[4]=a[16]; b[6]=a[2]; b[8]=a[4]; b[10]=a[6]; b[12]=a[8]; b[14]=a[10]; b[16]=a[12]; if(isok()) { printf("YES\n"); continue; } cpy(); b[3]=a[23]; b[4]=a[24]; b[23]=a[10]; b[24]=a[9]; b[10]=a[19]; b[9]=a[20]; b[19]=a[3]; b[20]=a[4]; if(isok()) { printf("YES\n"); continue; } cpy(); b[3]=a[19]; b[4]=a[20]; b[19]=a[10]; b[20]=a[9]; b[10]=a[23]; b[9]=a[24]; b[23]=a[3]; b[24]=a[4]; if(isok()) { printf("YES\n"); continue; } cpy(); b[5]=a[18]; b[6]=a[20]; b[18]=a[16]; b[20]=a[15]; b[16]=a[23]; b[15]=a[21]; b[23]=a[5]; b[21]=a[6]; if(isok()) { printf("YES\n"); continue; } cpy(); b[5]=a[23]; b[6]=a[21]; b[23]=a[16]; b[21]=a[15]; b[16]=a[18]; b[15]=a[20]; b[18]=a[5]; b[20]=a[6]; if(isok()) { printf("YES\n"); continue; } cpy(); printf("NO\n"); } return 0; }