题目链接

去年现场,虎哥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的更多相关文章

  1. HDU 5292 Pocket Cube 结论题

    Pocket Cube 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5292 Description Pocket Cube is the 2×2× ...

  2. 【HDOJ】4801 Pocket Cube 的几种解法和优化

    1. 题目描述给定一个$2 \times 2 \times 2$的魔方,当某个面上的4个小块颜色均相同时,称这个面为complete.求对这个魔方进行$n \in [1,7]$次旋转(沿某个面顺时针或 ...

  3. 2013区域赛长沙赛区现场赛 K - Pocket Cube

    K - Pocket Cube Time Limit:10000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Su ...

  4. Pocket Cube

    Pocket Cube http://acm.hdu.edu.cn/showproblem.php?pid=5983 Time Limit: 2000/1000 MS (Java/Others)    ...

  5. 【】【】Pocket Cube

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s) ...

  6. 2013 ACM区域赛长沙 K Pocket Cube hdu 4801

    题意:给了一个2*2的魔方..每步操作可以将任意一面翻转90度..现在问在N(<=7)步内.最多能翻出几面相同的. 直接打表模拟每种翻转情况 #include<cstdio> #in ...

  7. HDU 1220 B - Cube

    http://acm.hdu.edu.cn/showproblem.php?pid=1220 一开始的做法是,先暴力算出一个面,就是n * n的面,能有多少对.记作face 然后从上开始算下来,最上一 ...

  8. hdu 3547 DIY Cube (Ploya定理)

    DIY Cube Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total S ...

  9. 模拟 ZOJ 3736 Pocket Cube

    题目传送门 题意:魔方最多旋转n次,问最多能使多少面颜色相同 分析:6种状态(3种旋转方式*顺逆方向,其他对称的!),首先先打个表,然后很愉快的DFS.自己写的时候费劲脑汁,代码很长,还TLE了... ...

随机推荐

  1. Android Studio 快捷键

    1.显示注解:F2 2.显示大括号包含范围:Ctrl 3.显示当前文档结构:Ctrl+F12 4.快速打开类:Ctrl+N 5.格式化代码:Ctrl+Alt+L 6.折叠代码:Ctrl+[+/-] 7 ...

  2. mapReduce的shuffle过程

    http://www.jianshu.com/p/c97ff0ab5f49 总结shuffle 过程: map端的shuffle: (1)map端产生数据,放入内存buffer中: (2)buffer ...

  3. 去除html的&nbsp;标签

    // 去除html的 标签 String str = "  2016-09-02"; if (str.indexOf("\u00A0") != -1) { st ...

  4. c++单链表基本功能

    head_LinkNode.h /*单链表类的头文件*/#include<assert.h>#include"compare.h"typedef int status; ...

  5. PDF虚拟打印机

    1.安装福昕PDF阅读器,自己就会安装上PDF虚拟打印机 2.通过office2010之后版本中自带的另存为功能转换为pdf 3.pdf虚拟打印机工具:工具1:http://www.win2pdf.c ...

  6. 关于Vue vuex vux 文档

    01. vue 链接 http://vuejs.org.cn/guide/ 02. vuex  ----->>状态管理模块儿<<------- https://vuex.vue ...

  7. mina中游戏客户端服务端数据交互流程

    ====================================================================================CLIENT    encode ...

  8. Nodejs实现简单的反向代理

    var http = require('http'), httpProxy = require('http-proxy'); // 新建一个代理 Proxy Server 对象 var proxy = ...

  9. 为什么使用Junit Test而不用普通java main方法来完成测试?

    因为在程序里边,一个接口对应一个实现方法,而在接口中常常会定义相关的很多方法,所以在测试的时候,如果都在main方法里边进行测试,main方法就会显得臃肿,而且不便于以后其他人测试以及查看测试数据,用 ...

  10. shell 输出九九乘法表

    #/bin/bash i= j= )) do while(($j<=$i)) do echo -ne $j×$i=$[$j*$i]"\t" j=$[$j+] done ech ...