Cube painting
程序员文章站
2024-03-18 22:02:58
...
题解也可以看这里个人博客
题目链接,懒得弄图片了hhh
题目大意:给出两个色子,每一个色子是用一个长度为6的字符串描述的,描述的顺序在链接里面。让你判断给出的两个色子是不是同一个色子
这种题一开始上来就感觉好麻烦啊。。。想了好久,后来才想到可以固定一个面,然后在旋转四次对其进行判定。
例如:
如果给出的一个色子是abcdef,下标从0-5,那么我们可以首先把每一面都变成色子的顶面,假设把第2号面变成顶面(其实是3号,因为我的下标从0开始),那么色子的一种表示就是cbfaed,可能会不一样,因为当2号面作为顶面的时候,还有四种可能,这个时候我们就要以纵轴去旋转四次这个色子。这样这个题就解决了。
代码:
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10;
const int dir[][6] = {{0,1,2,3,4,5} , {1,5,2,3,0,4} , {2,1,5,0,4,3} , {3,1,0,5,4,2} , {4,0,2,3,5,1} , {5,4,2,3,1,0}};
//dir数组是对色子翻转之后的下标映射,就是这里的每一组下标,都对应着将每一面变为顶面之后的一种下标
char s[N] , t[N] , str[N];
int main(void)
{
while(scanf("%6s%6s",s, t) != EOF)
{
int flag = false;//标记
for(int i = 0 ; i < 6 && !flag; ++ i)
{
for(int j = 0 ; j < 6 ; ++ j) str[j] = s[dir[i][j]];//将第i面变为最顶面
for(int j = 0 ; j < 4 && !flag; ++ j)//再接着判定四中情况
{
int k;
for(k = 0 ; k < 6 ; ++ k)
if(str[k] != t[k])
break;
if(k >= 6)
{
flag = true;
break;
}
//判定失败之后要以纵轴旋转,这里推理一下很简单的
char tmp = str[1];
str[1] = str[2] , str[2] = str[4];
str[4] = str[3] , str[3] = tmp;
}
}
if(flag) puts("TRUE");
else puts("FALSE");
}
return 0;
}
上一篇: commons-fileupload组件size=0
下一篇: luogu-P7072-直播获奖
推荐阅读
-
Cube painting
-
BI cube的前世今生:商业智能BI为什么需要cube技术 博客分类: 商业智能 商业智能BI数据库
-
Unity随记(八) shader实现立方体Cube显示边框,描边
-
Oracle rollup和cube分析
-
ORACLE ROLLUP和CUBE函数
-
SQLSERVER中的ALL、PERCENT、CUBE关键字和GROUPING函数
-
思岚科技新品SLAM Cube亮相CES 构建机器人智能移动新版图
-
SQL with rollup 、with cube、grouping 统计函数用法
-
Oracle分组函数rollup,cube
-
ORACLE ROLLUP和CUBE的使用