UVA - 253 Cube painting(骰子涂色)

原创 2015年11月21日 18:11:31

题目链接:UVA - 253 Cube painting

题目大意:
输入两个骰子,判断两个骰子是否等价,每个骰子用6个字母表示,例如
123456, 顺序为上前左右后下。

思路:
任取一个面让其位于正前( 总共6个面),然后转动上下左右四个面(转4次),这样一个骰子的所有可能表示形式就全遍历到了。
举个例子,骰子123456上下方向转动时,改变的是上前下后即1265四个面,可转动至2651,6512,5126总计四种。

代码:

#include <stdio.h>
#include <iostream>
#include <vector>
#include <math.h>
#include <algorithm>
#include <queue>
#include <string.h>
#include <set>
#include <stack>
#include <stdlib.h>
#include <time.h>

using namespace std;

int fa[6][6] = {
    1,2,3,4,5,6,
5,1,3,4,6,2,
    2,6,3,4,1,5,
    1,4,2,5,3,6,
    1,5,4,3,2,6,
    1,3,5,2,4,6
};

int fb[4][6] = {
    1,2,3,4,5,6,
    3,2,6,1,5,4,
    6,2,4,3,5,1,
    4,2,1,6,5,3
};

bool is(char s[], char b[])
{
    for(int i=0;i<4;i++)
    {
        char t[7];
        for(int j=0;j<6;j++)
            t[j] = s[fb[i][j]-1];
        t[6] = '\0';
        if(strcmp(t, b) == 0)
            return true;
    }
    return false;
}

int main()
{
    char a[7], b[7], s[15];
    while(cin>>s)
    {
        for(int i=0;i<6;i++)
            a[i] = s[i];
        for(int i=0;i<6;i++)
            b[i] = s[i+6];
        int i;
        b[6] = a[6] = '\0';
        for(i=0;i<6;i++)
        {
            char t[7];
            for(int j=0;j<6;j++)
                t[j] = a[fa[i][j]-1];
            t[6] = '\0';
            if(is(t, b))
                break;
        }
        if(i == 6)
            cout<<"FALSE"<<endl;
        else
            cout<<"TRUE"<<endl;
    }
    return 0;
}
版权声明:本文为博主原创文章,转载请附上链接http://blog.csdn.net/to_be_better

相关文章推荐

uva253Cube painting骰子涂色

背景:这题我写出来发生了一个奇怪的现象,就是同样的代码,在vc6.0里面运行的好好的,但在codebloke里面却死活不对,最后费了我九牛二虎之力,我终于找到了,原来数组开小了,o(︶︿︶)o 唉。 ...
  • qiweigo
  • qiweigo
  • 2015年02月05日 17:56
  • 737

骰子涂色(Cube painting)

Cube painting  We have a machine for painting cubes. It is supplied with three different colors: bl...

算法竞赛入门经典 第二版 习题4-4 骰子涂色 Cube painting uva253

题目:https://vjudge.net/problem/UVA-253比想象中的要简单不少,抱着试一试的想法码了一下就AC了。思路:如果两骰子有三组相同的相对面,那么两骰子相同。 本以为还需要加...

UVa253骰子涂色

一开始太蠢,犯迷糊了,以为先确定一个轴再考虑其他的旋转,后来想想,其实只要骰子的3个对面都相同,绕一个轴转肯定可以转回来。 在实现自己的想法的时候,wa了两次,就觉得自己的想法是错的,搜了一下其他人...
  • Nick_le
  • Nick_le
  • 2016年09月13日 23:59
  • 380

UVA - 253 Cube painting(模拟)

Cube painting Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Subm...

UVa 253 Cube painting(骰子涂色)

Description  Cube painting  We have a machine for painting cubes. It is ...

UVa 253 Cube painting (骰子涂色)

题意: 给两个骰子,每枚骰子每个面由红(red),蓝(blue),绿(green)三种颜色之一染色,可以把每枚骰子按照图示方式编号,然后按照编号给出颜色顺序,问这两枚骰子能否通过旋转变成展示的颜色相对...
  • Ramay7
  • Ramay7
  • 2015年12月19日 09:53
  • 369

UVa253--Cube painting--骰子涂色--重在算法思想

题目链接https://vjudge.net/problem/UVA-253 输入两个骰子,判断二者是否等价。每个骰子用6个字母表示,如下图1所示。      图 1 例如rbg...

UVA253——骰子涂色(Cube painting)

别人都是1000bytes就搞定了。我却要3000bytes。不过一次性AC的感觉真的很不错! 用的方法是:将第二个骰子的每个面都转到第1个面,然后以第1个面为轴旋转4次来判断是否相等。这样就能枚举...

算法竞赛入门经典(第2版)习题4-4 骰子涂色 Cube painting UVa 253

这题用穷举法未免太单调,我来设计一种高大上d
  • archya
  • archya
  • 2014年08月08日 17:37
  • 953
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVA - 253 Cube painting(骰子涂色)
举报原因:
原因补充:

(最多只允许输入30个字)