原题:2016icpc西安现场赛B
题意:给你一个二阶魔方各个方块的颜色,问是否能够一步还原。
分析:简单的模拟一下就行了….总共就六种操作
AC代码:
#include <iostream>
#include <cstdio>
using namespace std;
int a[7][5];
int b[7][5];
bool judge(){
int i=0;
for(int j=1;j<=6;j++){
if(a[j][1]==a[j][2]&&a[j][2]==a[j][3]&&a[j][3]==a[j][4]){
i++;
}
}
if(i==6){
return true;
}else{
return false;
}
}
void opera1(){
int t1,t2;
t1=a[1][3];
t2=a[1][4];
a[1][3]=a[4][4];
a[1][4]=a[4][2];
a[4][2]=a[3][1];
a[4][4]=a[3][2];
a[3][1]=a[5][3];
a[3][2]=a[5][1];
a[5][1]=t1;
a[5][3]=t2;
}
void opera2(){
int t1,t2;
t1=a[5][1];
t2=a[5][3];
a[5][1]=a[3][2];
a[5][3]=a[3][1];
a[3][1]=a[4][2];
a[3][2]=a[4][4];
a[4][2]=a[1][3];
a[4][4]=a[1][4];
a[1][4]=t2;
a[1][3]=t1;
}
void opera3(){
int t1,t2;
t1=a[2][1];
t2=a[2][2];
a[2][1]=a[4][1];
a[2][2]=a[4][2];
a[4][1]=a[6][1];
a[4][2]=a[6][2];
a[6][1]=a[5][1];
a[6][2]=a[5][2];
a[5][1]=t1;
a[5][2]=t2;
}
void opera4(){
int t1,t2;
t1=a[2][1];
t2=a[2][2];
a[2][1]=a[5][1];
a[2][2]=a[5][2];
a[5][1]=a[6][1];
a[5][2]=a[6][2];
a[6][1]=a[4][1];
a[6][2]=a[4][2];
a[4][1]=t2;
a[4][2]=t1;
}
void opera5(){
int t1,t2;
t1=a[1][1];
t2=a[1][3];
a[1][1]=a[2][1];
a[1][3]=a[2][3];
a[2][1]=a[3][1];
a[2][3]=a[3][3];
a[3][1]=a[6][2];
a[3][3]=a[6][4];
a[6][2]=t1;
a[6][4]=t2;
}
void opera6(){
int t1,t2;
t1=a[1][1];
t2=a[1][3];
a[1][1]=a[6][2];
a[1][3]=a[6][4];
a[6][2]=a[3][1];
a[6][4]=a[3][3];
a[3][1]=a[2][1];
a[3][3]=a[2][3];
a[2][1]=t1;
a[2][3]=t2;
}
int main()
{
for(int i=1;i<=6;i++){
for(int j=1;j<=4;j++){
scanf("%d",&a[i][j]);
b[i][j]=a[i][j];
}
}
if(judge()){
printf("NO\n");
return 0;
}
opera1();
if(judge()){
printf("YES\n");
return 0;
}
for(int i=1;i<=6;i++){
for(int j=1;j<=4;j++){
a[i][j]=b[i][j];
}
}
opera2();
if(judge()){
printf("YES\n");
return 0;
}
for(int i=1;i<=6;i++){
for(int j=1;j<=4;j++){
a[i][j]=b[i][j];
}
}
opera3();
if(judge()){
printf("YES\n");
return 0;
}
for(int i=1;i<=6;i++){
for(int j=1;j<=4;j++){
a[i][j]=b[i][j];
}
}
opera4();
if(judge()){
printf("YES\n");
return 0;
}
for(int i=1;i<=6;i++){
for(int j=1;j<=4;j++){
a[i][j]=b[i][j];
}
}
opera5();
if(judge()){
printf("YES\n");
return 0;
}
for(int i=1;i<=6;i++){
for(int j=1;j<=4;j++){
a[i][j]=b[i][j];
}
}
opera6();
if(judge()){
printf("YES\n");
return 0;
}
for(int i=1;i<=6;i++){
for(int j=1;j<=4;j++){
a[i][j]=b[i][j];
}
}
printf("NO\n");
return 0;
}