1. 程式人生 > >國慶訓練賽第二場 模擬 能否一步還原二階魔方

國慶訓練賽第二場 模擬 能否一步還原二階魔方

兩種情況

一、一開始就還原好

二、要想一步還原  一定是有兩面是好的(且是對立)

上下, 左右, 前後

有兩層 可以發現每層模擬一下順逆時針 會出現重複

所以可以得出結論 一共就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;
}