HDU 4801 Pocket Cube
去年现场,虎哥1Y的,现在刷刷题,找找状态...
一共6种转法,把3个面放到顶部,左旋和右旋,感觉写的还不错....都写成常数了。
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- #include <queue>
- #include <algorithm>
- #define LL long long
- using namespace std;
- struct node
- {
- int num[];
- int st;
- };
- int dr[] = {,,,,,,,,,,,};
- int dc[] = {,,,,,,,,,,,};
- int a[] = {,,,,,,,,,,,};
- int b[] = {,,,,,,,,,,,};
- int c[] = {,,,,,,,,,,,};
- int aim[][] = {
- {,,,},
- {,,,},
- {,,,},
- {,,,},
- {,,,},
- {,,,}
- };
- int judge(int *p)
- {
- int ans = ,i,j;
- for(i = ;i < ;i ++)
- {
- for(j = ;j < ;j ++)
- {
- if(p[aim[i][j]] != p[aim[i][]])
- break;
- }
- if(j == ) ans ++;
- }
- return ans;
- }
- int main()
- {
- node u,v;
- int n,i,ans;
- while(scanf("%d",&n)!=EOF)
- {
- for(i = ;i < ;i ++)
- {
- scanf("%d",&u.num[i]);
- }
- u.st = ;
- queue<node>que;
- que.push(u);
- ans = ;
- while(!que.empty())
- {
- u = que.front();
- que.pop();
- if(ans == ) break;
- ans = max(ans,judge(u.num));
- if(u.st == n) continue;
- v.st = u.st + ;
- //a
- for(i = ;i < ;i ++)
- {
- v.num[i] = u.num[i];
- }
- for(i = ;i < ;i ++)
- {
- v.num[a[dr[i]]] = u.num[a[i]];
- }
- que.push(v);
- for(i = ;i < ;i ++)
- {
- v.num[a[dc[i]]] = u.num[a[i]];
- }
- que.push(v);
- //b
- for(i = ;i < ;i ++)
- {
- v.num[i] = u.num[i];
- }
- for(i = ;i < ;i ++)
- {
- v.num[b[dr[i]]] = u.num[b[i]];
- }
- que.push(v);
- for(i = ;i < ;i ++)
- {
- v.num[b[dc[i]]] = u.num[b[i]];
- }
- que.push(v);
- //c
- for(i = ;i < ;i ++)
- {
- v.num[i] = u.num[i];
- }
- for(i = ;i < ;i ++)
- {
- v.num[c[dr[i]]] = u.num[c[i]];
- }
- que.push(v);
- for(i = ;i < ;i ++)
- {
- v.num[c[dc[i]]] = u.num[c[i]];
- }
- que.push(v);
- }
- printf("%d\n",ans);
- }
- return ;
- }
HDU 4801 Pocket Cube的更多相关文章
- HDU 5292 Pocket Cube 结论题
Pocket Cube 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5292 Description Pocket Cube is the 2×2× ...
- 【HDOJ】4801 Pocket Cube 的几种解法和优化
1. 题目描述给定一个$2 \times 2 \times 2$的魔方,当某个面上的4个小块颜色均相同时,称这个面为complete.求对这个魔方进行$n \in [1,7]$次旋转(沿某个面顺时针或 ...
- 2013区域赛长沙赛区现场赛 K - Pocket Cube
K - Pocket Cube Time Limit:10000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Su ...
- Pocket Cube
Pocket Cube http://acm.hdu.edu.cn/showproblem.php?pid=5983 Time Limit: 2000/1000 MS (Java/Others) ...
- 【】【】Pocket Cube
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s) ...
- 2013 ACM区域赛长沙 K Pocket Cube hdu 4801
题意:给了一个2*2的魔方..每步操作可以将任意一面翻转90度..现在问在N(<=7)步内.最多能翻出几面相同的. 直接打表模拟每种翻转情况 #include<cstdio> #in ...
- HDU 1220 B - Cube
http://acm.hdu.edu.cn/showproblem.php?pid=1220 一开始的做法是,先暴力算出一个面,就是n * n的面,能有多少对.记作face 然后从上开始算下来,最上一 ...
- hdu 3547 DIY Cube (Ploya定理)
DIY Cube Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total S ...
- 模拟 ZOJ 3736 Pocket Cube
题目传送门 题意:魔方最多旋转n次,问最多能使多少面颜色相同 分析:6种状态(3种旋转方式*顺逆方向,其他对称的!),首先先打个表,然后很愉快的DFS.自己写的时候费劲脑汁,代码很长,还TLE了... ...
随机推荐
- 使用svn分支
使用svn分支 原文: https://my.oschina.net/cobish/blog/652984
- final和包装类
==================================================================================================== ...
- JavaBean的用法
JavaBean是一个可重复使用的软件组件,是用Java语言编写的.遵循一定标准的类. JavaBean是Java Web的重要组件,它封装了数据和操作的功能类,供JSP和Servlet调用,完成数据 ...
- debian命令行删除postgresql数据库
创建数据库 $ createdb odoo-test 删除数据库 $ dropdb odoo-test
- vue.js 接收url参数
1) 路由配置传参方式 在配置路由时 例如 "/firewall/authorize/:uid/:uname/:token" 页面url为 http://XXX.com/firew ...
- quicktest Professional下载地址,无限制使用方法
QTP是quicktest Professional的简称,是一种自动测试工具.使用QTP的目的是想用它来执行重复的自动化测试,主要是用于回归测试和测试同一软件的新版本.因此你在测试前要考虑好如何对应 ...
- 现有iOS项目集成React Native过程记录
在<Mac系统下React Native环境搭建>配置了RN的开发环境,然后,本文记录在现有iOS项目集成React Native的过程,官方推荐使用Cocoapods,项目一开始也是使用 ...
- python之Socket网络编程
什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系.在数学上,网络是一种图,一般认为专指加权图.网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型.在 ...
- 网络请求 __ NSURLSession
首先配置into.plist文件 1. 添加 App Transport Security Settings , Type栏自动变为Dictionary 2. 点击左边箭头,使之向下,点击右边加号,添 ...
- hdu 2191 珍惜现在,感恩生活
链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2191 思路:多重背包模板题 #include <stdio.h> #include ...