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
");
            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
");
            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
");
            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
");
            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
");
            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
");
            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
");
            continue;
        }
        cpy();
        printf("NO
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/Json-Five/p/9750198.html