UVA 253 Cube painting(枚举 模拟)
2024-10-11 02:20:29
题意:
按如图的顺序给定2个骰子的颜色(只有r、b、g三种颜色)
问2个骰子是否一模一样
如
可表示为“rbgggr” 和 “rggbgr”, 第二个就是绕着Z轴顺时针旋转90度与第一个相同的骰子.
分析:
记录一个错误的做法:并不是只要两面两面互相映射, 如rbrggb 与 rgrgbb, 即使 rb 对应 rb、gb 对应 bg、 rg对应rg, 但他们并不是一模一样的骰子。(可以借助真正的骰子旋转尝试一下,就是123456 和 153426, 想象一下2与5互换, 根本不可能从原来的骰子转出来)
正确做法是枚举每一个面向上, 然后分别绕Z轴旋转90度, 每个面有4种情况, 总共24种情况, 再与原来的对应匹配就好, 24个不算太多我就把表打出来了, 其实可以仔细找一下规律, 减少代码量。
代码:
#include <bits/stdc++.h>
using namespace std;
int dir[][] = {{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},
{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},
{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,}};
char t[];
bool judge(int kase)
{
for(int i = ; i < ; i++){
if(t[i] != t[dir[kase][i] + ])
return false;
}
return true;
}
int main()
{ while(scanf("%s", &t) != EOF){
int ok = ;
for(int i = ; i < ; i++){
if(judge(i)) ok = ;
}
printf("%s\n", ok? "TRUE":"FALSE");
}
return ;
}
最新文章
- string常用函数
- C#中的匿名方法
- SharePoint Server 2016 Update
- Autodesk 招人了,开发顾问,感兴趣的或者有推荐的人扔简历过来啊
- 正则表达式(.NET)
- [.NET]Repeater控件使用技巧
- android系统的图片资源
- Spring 系列: Spring 框架简介(转载)
- Servlet 浅谈(一)
- collections模块方法详解
- C#中StreamReader读取中文时出现乱码问题总结
- FPGA上如何求32个输入的最大值和次大值:分治
- Android之自定义AlertDialog和PopupWindow实现(仿微信Dialog)
- oracle角色、权限和用户
- Windows Server 2012 R2 英文版安装中文语言包教程
- dubbo . dubbo Please check registry access list (whitelist/blacklist) 错误
- js基础语法之函数
- 安装BouncyCastle
- Swift语言精要 - 属性
- thinkphp前台模版字符串截取
热门文章
- mysql 循环批量插入
- linux下的日志压缩脚本
- Poj 3436 ACM Computer Factory (最大流)
- poj 3253 Fence Repair (水哈夫曼树)
- 题解报告:hdu 5750 Dertouzos(最大真约数、最小素因子)
- Exception in thread ";main"; java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext
- libtool版本过新的问题
- Oracle中的日期数据类型
- Android学习备忘笺01Activity
- mybatis的mapper.xml文件细节