HDU 5292 Pocket Cube

Pocket Cube



Problem Description
Pocket Cube is the 2×2×2 equivalent of a Rubik’s Cube(3×3×3). The cube consists of 8 pieces, all corners. (from wiki)

 


The right position rotates in red face clockwisely. 
You can get more details from input case.
w represents white , y represents yellow , o represents orange , r represents red , g represents green , b represents blue. In the right position, white and yellow , orange and red , green and blue are in the opposite face. 
 

Input
The first line of input contains only one integer T(<=10000), the number of test cases. 
Each case contains a Pocket Cube described above. After each case , there is a blacnk line. It guarantees that the corners of the Cube is right.
 

Output
Each case contains only one line. Each line should start with “Case #i: ”,with i implying the case number, followed by “YES” or “NO”,”YES” means you can return it to the right position, otherwise “NO”.
 

Sample Input
2 g y g y o o w g r r o o w g r r b w b w y b y b r w g b b y o w o r y g y o g b r w o y b r w g
 

Sample Output
Case #1: YES Case #2: NO

/*
 * 二阶魔方任何一个块都可以旋转,这里考虑对色面,(黄,白), (绿, 蓝), (红, 橙)
 * 将标准魔方展开
 *          0  0
 *          0  0
 *    1 -1  1  -1  1  -1
 *    -1  1  -1  1  -1  1
 *          0  0
 *          0  0
 *          1  -1
 *          -1  1
 * 只要考虑一组对立面即可,比如(黄, 白),对应到上述展开后,只要最后总和模三等于零就是合理的
 */

#include <bits/stdc++.h>
#define endl "\n"
using namespace std;

const int cube[] = {0, 0, 0, 0, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 0, 0, 0, 0, 1, -1, -1, 1};

int main() {
    int T;
    cin >> T;
    for(int cas = 1; cas <= T; ++cas) {
        char color[2];
        int ret = 0;
        for(int i = 0; i < 24; ++i) {
            scanf("%s", color);
            if(color[0] == 'w' || color[0] == 'y') ret += cube[i];
        }
        cout <<  "Case #" << cas << ": " << (ret % 3 ? "NO" : "YES") << endl;
    }
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值