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了... ...
随机推荐
- Vue.js:轻量高效的前端组件化方案
转发一篇尤老师对vue.js的介绍,了解vue.js的来龙去脉.不过现在已经是2.0了,也有添加一些新的东西,当然有些东西也改了. Vue.js:轻量高效的前端组件化方案 Vue.js 是我在2014 ...
- 在程序中执行shell命令
在linux系统下的操作中我们会经常用到shell命令来进行,一开始学习进程的时候对于shell命令也进行了思考,认为shell命令就是一个进程的外壳,经过了后来的学习对于这一点也有了更多的认识. 用 ...
- WPF获取应用程序启动目录的方法
1.AppDomain.CurrentDomain.BaseDirectory using System; namespace ConsoleApplication1 { class Program ...
- python supervisor使用
Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2 ...
- MQTT(三)-----连接与心跳
MQTT协议笔记之连接和心跳 - 推酷 http://www.tuicool.com/articles/AFvmee 互联网推送服务原理:长连接+心跳机制(MQTT协议) - clh604的专栏 - ...
- maven中classpath路径(转)
前几天看见一个大神总结classpath文章,觉得特别有用.所以,特此转载(http://my.oschina.net/GivingOnenessDestiny/blog/603505) 各种path ...
- Appium for iOS setup
windows下appium设置 之前研究了一段时间的appium for native app 相应的总结如下: ...
- 《Caffe下跑AlxNet之数据处理过程》
环境:Windows 最近用Caffe跑了一下AlxNet网络,现在总结一下数据处理部分:(处理过的数据打包链接:http://pan.baidu.com/s/1sl8M5ad 密码:ph1y) ...
- c# 保存数据到txt (追加)
StringBuilder sb = new StringBuilder(); sb.AppendLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:s ...
- Ruby字符串
在Ruby中的String对象持有和操纵的任意序列的一个或多个字节,通常表示人类语言的字符表示.简单的字符串文本括在单引号中,如 'This is a simple Ruby string liter ...