Rubik's Cube

题目连接:

http://acm.hdu.edu.cn/showproblem.php?pid=5836

Description

As we all know, Zhu is the wisest man. When Liao was ninety-nine years old, the Zhu appeared to him and said, "I am God Almighty; walk before me and be blameless.

I will confirm my covenant between me and you and will greatly increase your wisdom." At that time, Liao has a problem:

Liao has a Rubik's Cube and the surfaces of it are drawn as black or white. He can rotate it as the rules of the Rubik's Cube. Liao asked Zhu:"how many states the Rubik's Cube can reach?"

Zhu is omniscient and omnipotent, but he did not tell the answer. Can you tell the poor man the answer? Remember two states are regarded as the same one if you change views and find the two states is the same one.

For those of you unfamiliar with the puzzle, a Rubik's Cube, comes in the form of a cube where each face is divided into three rows and three columns (nine "squares". Any of the six faces of the cube may be rotated either clockwise or counterclockwise, which also rotates the three nearest squares on each adjoining face onto a new face, respectively.

Input

Intput contains multiple test cases.

The first line is an integer 1≤T≤10, the number of test cases.

Each case begins with an integer n, indicating the number of the squares of blacks.

The next line contains n integers a1,a2,..,an, representing squares indexed as a1,a2,..,an are black respectively. All ai are defferent. The indexes of squares are showed in the pictures. (0≤n≤5,0≤ai≤53).

Output

For each test case,output a single line "Case #x: y", where x is the case number, starting from 1. And y is the answer.

Sample Input

3

2

0 47

2

24 53

2

36 46

Sample Output

Case #1: 15

Case #2: 15

Case #3: 24

Hint

题意

给你一个魔方,告诉你这个魔方有一些格子是黑色的,问你这个魔方旋转之后能够得到多少个不同的魔方。

就是不同的要,完全不同。

就旋转相同,也算相同。

题解:

XJB搜,你需要买一个魔方,然后XJB转一下 ,看看转移是什么样的,当然你有强大的脑补能力也可以……

然后就完了……

代码

//by Atlantis67
#include <bits/stdc++.h>
using namespace std;
#define LL long long
int f[4][54]={
{2,5,8,1,4,7,0,3,6,
36,37,38,12,13,14,15,16,17,
9,10,11,21,22,23,24,25,26,
18,19,20,30,31,32,33,34,35,
27,28,29,39,40,41,42,43,44,
45,46,47,48,49,50,51,52,53}, {6,3,0,7,4,1,8,5,2,
18,19,20,21,22,23,24,25,26,
27,28,29,30,31,32,33,34,35,
36,37,38,39,40,41,42,43,44,
9,10,11,12,13,14,15,16,17,
47,50,53,46,49,52,45,48,51}, {29,32,35,28,31,34,27,30,33,
2,5,8,1,4,7,0,3,6,
20,23,26,19,22,25,18,21,24,
47,50,53,46,49,52,45,48,51,
42,39,36,43,40,37,44,41,38,
11,14,17,10,13,16,9,12,15}, {18,19,20,21,22,23,24,25,26,
11,14,17,10,13,16,9,12,15,
45,46,47,48,49,50,51,52,53,
33,30,27,34,31,28,35,32,29,
8,7,6,5,4,3,2,1,0,
44,43,42,41,40,39,38,37,36}
}; set<LL> s;
LL duilie[10000000];
int tot=0;
void pri(LL a,LL b,int ha)
{
printf("================\n");
for (int j=0;j<54;j++) if ((a>>j)&1) printf("%d ",j);puts("");
for (int j=0;j<54;j++) if ((b>>j)&1) printf("%d ",j);puts("");
printf("%d\n",ha);
getchar();
}
void BFS(LL first)
{
int fron=0,rear=1;
duilie[0]=first;
s.insert(first);
while (fron<rear){
LL now=duilie[fron];
for (int k=0;k<4;k++){
LL next=0;
for (int j=0;j<54;j++) {
if ((now>>j)&1)
next|=(1LL<<f[k][j]);
}
if (s.find(next)==s.end()) {
//pri(now,next,k);
duilie[rear++]=next;
s.insert(next);
}
}
fron++;
}
tot=rear;
}
LL w[100];
set<LL> si;
int wtot;
void gao(LL first)
{
si.clear();wtot=0;
int fron=0,rear=1;
w[0]=first;
si.insert(first);
while (fron<rear){
LL now=w[fron];
for (int k=1;k<4;k++){
LL next=0;
for (int j=0;j<54;j++) {
if ((now>>j)&1)
next|=(1LL<<f[k][j]);
}
if (si.find(next)==si.end()) {
w[rear++]=next;
si.insert(next);
}
}
fron++;
}
wtot=rear;
}
int suan()
{
int ans=0;
for (int j=0;j<tot;j++){
if (s.find(duilie[j])!=s.end()){
gao(duilie[j]);
for (int k=0;k<wtot;k++) s.erase(w[k]);
assert(24%wtot==0);
ans++;
}
}
return ans;
}
int main()
{
int T;
scanf("%d",&T);
int t=T;
while (T--){
int n;
scanf("%d",&n);
LL first=0;
for (int j=0;j<n;j++){
int g;
scanf("%d",&g);
first|=(1LL<<g);
}
//cout<<first<<endl;
s.clear();tot=0;
BFS(first);
printf("Case #%d: %d\n",t-T,suan());
}
return 0;
}

HDU 5836 Rubik's Cube BFS的更多相关文章

  1. hdu 3309 Roll The Cube ( bfs )

    Roll The Cube Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  2. sdutoj 2606 Rubik’s cube

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2606 Rubik’s cube Time Li ...

  3. HDU 2717 Catch That Cow --- BFS

    HDU 2717 题目大意:在x坐标上,农夫在n,牛在k.农夫每次可以移动到n-1, n+1, n*2的点.求最少到达k的步数. 思路:从起点开始,分别按x-1,x+1,2*x三个方向进行BFS,最先 ...

  4. POJ 1955 Rubik's Cube

    暴力模拟就好了.... vim写代码真费事,手都写酸了... Rubik's Cube Time Limit: 1000MS   Memory Limit: 30000K Total Submissi ...

  5. The Mathematics of the Rubik’s Cube

    https://web.mit.edu/sp.268/www/rubik.pdf Introduction to Group Theory and Permutation Puzzles March ...

  6. HDU 5876 关于补图的bfs

    1.HDU 5876  Sparse Graph 2.总结:好题,把STL都过了一遍 题意:n个点组成的完全图,删去m条边,求点s到其余n-1个点的最短距离. 思路:把点分为两个集合,A为所有没有到达 ...

  7. hdu 1240:Asteroids!(三维BFS搜索)

    Asteroids! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  8. HDU(1175),连连看,BFS

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1175 越学越不会,BFS还是很高级的. 连连看 Time Limit: 20000/100 ...

  9. HDU 3085 Nightmare II 双向bfs 难度:2

    http://acm.hdu.edu.cn/showproblem.php?pid=3085 出的很好的双向bfs,卡时间,普通的bfs会超时 题意方面: 1. 可停留 2. ghost无视墙壁 3. ...

随机推荐

  1. 将本地的mongodb迁移到阿里云

    首先在阿里云上安装mongodb,可以根据官方教程 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-amazon/ 完成之后启动 ...

  2. iOS动画1 — UIView动画

    iOS动画基础是Core Animation核心动画.Core Animation是iOS平台上负责图形渲染与动画的基础设施.由于核心动画的实现比较复杂,苹果提供了实现简单动画的接口—UIView动画 ...

  3. requests(二): json请求中固定键名顺序&消除键和值之间的空格

    继上一篇requests发送json请求的文章后,实际工作中遇到了以下2种情况. 1:服务端要求json字符串,键名的顺序固定  2.服务端对于接收到的json数据中,若key和value之间有空格, ...

  4. js自定制周期函数

    function mySetInterval(fn, milliSec,count){ function interval(){ if(typeof count==='undefined'||coun ...

  5. 在Docker中运行EOS(MAC版)

    在Docker中运行EOS(MAC版) 在Docker中也可以简单快速的构建EOS.IO.笔者在Mac平台下参考官方文档躺了一次河.记录如下: 安装依赖 Docker 版本 17.05或者更高 tes ...

  6. C# 特性(Attribute)详细介绍

    1.什么是Atrribute 首先,我们肯定Attribute是一个类,下面是msdn文档对它的描述:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注 ...

  7. idea如何导入一个maven项目

    1.import project 2.选择maven项目 3.选择第二个external moudle,选择maven, 4.点击next,一次点击1,2,3,4 5.设置maven环境 6.点击ok ...

  8. 关于tp5 的验证码遇到的一些问题

    问题1: 网上大部分给的安装包是: composer require topthink/think-captcha 但是会提示你下载失败说要你回复*****的原始数据啥的 那可能是因为你的安装环境版本 ...

  9. 【前端开发】关于闭包最通俗易懂的解释 for循环,定时器,闭包混合一块的那点事。

    for循环,定时器,闭包混合一块的那点事. 1,对于一个基本的for循环,顺序输出变量值. for(var i = 1; i < 4; i++){ console.log(i);//结果不多说了 ...

  10. 关于overflow: hidden;的一个诡异问题

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...