HDU5983 Pocket Cube

题目大意:

      给出一个二阶魔方的状态,问能否转至多一次就复原。

思路:

     我直接枚举了六种转法。(第一次交的那个居然有4种都有点小错误。/(ㄒoㄒ)/~~)

 

 

 

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<algorithm>
  4 using namespace std;
  5 int T,cube[7][5],cu[7][5];
  6 void work()
  7 {
  8     for(int i=1;i<=6;i++)
  9        for(int j=1;j<=4;j++)cu[i][j]=cube[i][j];
 10     return ;
 11 }
 12 bool work0()
 13 {
 14     for(int i=1;i<=6;i++)
 15         for(int j=1;j<=4;j++)
 16              if(cu[i][j]!=cu[i][1])return false;
 17     return true;
 18 }
 19 bool work1()
 20 {
 21     work();
 22     int tem[5];
 23     for(int i=1;i<=4;i++)tem[i]=cu[1][i];
 24     cu[1][2]=cu[2][2];cu[1][4]=cu[2][4];
 25     cu[2][2]=cu[3][2];cu[2][4]=cu[3][4];
 26     cu[3][2]=cu[4][2];cu[3][4]=cu[4][4];
 27     cu[4][2]=tem[2];cu[4][4]=tem[4];
 28     return work0();
 29 }
 30 bool work2()
 31 {
 32     work();
 33     int tem[5];
 34     for(int i=1;i<=4;i++)tem[i]=cu[1][i];
 35     cu[1][2]=cu[4][2];cu[1][4]=cu[4][4];
 36     cu[4][2]=cu[3][2];cu[4][4]=cu[3][4];
 37     cu[3][2]=cu[2][2];cu[3][4]=cu[2][4];
 38     cu[2][2]=tem[2];cu[2][4]=tem[4];
 39     return work0();
 40 }
 41 bool work3()
 42 {
 43     work();
 44     int tem[5];
 45     for(int i=1;i<=4;i++)tem[i]=cu[1][i];
 46     cu[1][3]=cu[6][3];cu[1][4]=cu[6][4];
 47     cu[6][3]=cu[3][2];cu[6][4]=cu[3][1];
 48     cu[3][2]=cu[5][3];cu[3][1]=cu[5][4];
 49     cu[5][3]=tem[3];cu[5][4]=tem[4];
 50     return work0();
 51 }
 52 bool work4()
 53 {
 54     work();
 55     int tem[5];
 56     for(int i=1;i<=4;i++)tem[i]=cu[1][i];
 57     cu[1][3]=cu[5][3];cu[1][4]=cu[5][4];
 58     cu[5][3]=cu[3][2];cu[5][4]=cu[3][1];
 59     cu[3][2]=cu[6][3];cu[3][1]=cu[6][4];
 60     cu[6][3]=tem[3];cu[6][4]=tem[4];
 61     return work0();
 62 }
 63 bool work5()
 64 {
 65     work();
 66     int tem[5];
 67     for(int i=1;i<=4;i++)tem[i]=cu[5][i];
 68     cu[5][2]=cu[2][1];cu[5][4]=cu[2][2];
 69     cu[2][1]=cu[6][3];cu[2][2]=cu[6][1];
 70     cu[6][3]=cu[4][4];cu[6][1]=cu[4][3];
 71     cu[4][4]=tem[2];cu[4][3]=tem[4];
 72     return work0();
 73 }
 74 bool work6()
 75 {
 76     work();
 77     int tem[5];
 78     for(int i=1;i<=4;i++)tem[i]=cu[5][i];
 79     cu[5][2]=cu[4][4];cu[5][4]=cu[4][3];
 80     cu[4][4]=cu[6][3];cu[4][3]=cu[6][1];
 81     cu[6][3]=cu[2][1];cu[6][1]=cu[2][2];
 82     cu[2][1]=tem[2];cu[2][2]=tem[4];
 83     return work0();
 84 }
 85 int main()
 86 {
 87     scanf("%d",&T);
 88     for(int I=1;I<=T;I++)
 89     {
 90         for(int i=1;i<=6;i++)
 91             for(int j=1;j<=4;j++)scanf("%d",&cube[i][j]);
 92         work();
 93         if(work0())
 94         {
 95             printf("YES\n");
 96             continue;
 97         }
 98         if(work1())
 99         {
100             printf("YES\n");
101             continue;
102         }
103         if(work2())
104         {
105             printf("YES\n");
106             continue;
107         }
108         if(work2())
109         {
110             printf("YES\n");
111             continue;
112         }
113         if(work3())
114         {
115             printf("YES\n");
116             continue;
117         }
118         if(work4())
119         {
120             printf("YES\n");
121             continue;
122         }
123         if(work5())
124         {
125             printf("YES\n");
126             continue;
127         }
128         if(work6())
129         {
130             printf("YES\n");
131             continue;
132         }
133         printf("NO\n");
134     }
135     return 0;
136 } 
View Code

 

/*****今天,队友A掉两题后,竟然还有水题,我非常激动(前几天我都是没做一道就结束了),结果wa了6次才a,以后模拟还是要细心点。*******/

posted @ 2018-10-05 17:09  liqgnonqfu  阅读(178)  评论(0编辑  收藏  举报