HDU 5836 Rubik's Cube BFS
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的更多相关文章
- hdu 3309 Roll The Cube ( bfs )
Roll The Cube Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- sdutoj 2606 Rubik’s cube
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2606 Rubik’s cube Time Li ...
- 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,最先 ...
- POJ 1955 Rubik's Cube
暴力模拟就好了.... vim写代码真费事,手都写酸了... Rubik's Cube Time Limit: 1000MS Memory Limit: 30000K Total Submissi ...
- The Mathematics of the Rubik’s Cube
https://web.mit.edu/sp.268/www/rubik.pdf Introduction to Group Theory and Permutation Puzzles March ...
- HDU 5876 关于补图的bfs
1.HDU 5876 Sparse Graph 2.总结:好题,把STL都过了一遍 题意:n个点组成的完全图,删去m条边,求点s到其余n-1个点的最短距离. 思路:把点分为两个集合,A为所有没有到达 ...
- hdu 1240:Asteroids!(三维BFS搜索)
Asteroids! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- HDU(1175),连连看,BFS
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1175 越学越不会,BFS还是很高级的. 连连看 Time Limit: 20000/100 ...
- HDU 3085 Nightmare II 双向bfs 难度:2
http://acm.hdu.edu.cn/showproblem.php?pid=3085 出的很好的双向bfs,卡时间,普通的bfs会超时 题意方面: 1. 可停留 2. ghost无视墙壁 3. ...
随机推荐
- bzoj千题计划281:bzoj4558: [JLoi2016]方
http://www.lydsy.com/JudgeOnline/problem.php?id=4558 容斥原理 全部的正方形-至少有一个点被删掉的+至少有两个点被删掉的-至少有3个点被删掉的+至少 ...
- 【整理】HTML5游戏开发学习笔记(3)- 抛物线运动
1.预备知识(1)Canvas旋转的实现过程 window.onload = function(){ var ctx = document.getElementById('canvas1').getC ...
- 避免css中文字体在浏览器中解析成乱码
许多童鞋在写CSS的时候,设置中文字体常常使用中文字符,例如font-family:”黑体”,这样我们在浏览器中看到的是什么样子的呢 ? 如果不想自己写的界面在浏览器字体声明上有异常,建议在书写css ...
- Flex 自定义 Zlert 组件!
说明: 原生的 Alert.show 参数,要显示的按钮你只能 Alert.OK | Alert.Cancel 这样; 自定义 Zlert 参数跟原生的 差不多,按钮写法是这样写的: {"b ...
- iOS 6 & iOS 7 的适配笔记
iOS 6 & iOS 7 的适配 场景1: 没有NavigationController,同时根视图是UIView- (void)viewWillLayoutSubviews{ if ([[ ...
- Redis配置文件介绍
Redis在源码包中存放了一个Redis配置实例文件,文件中对各个配置点进行了简单的介绍,我也通过这个文件来对Redis的一些配置进行一些简单介绍. 一.UNITS(单位)[了解] 1.Redis服务 ...
- Linux Timer定时器【转】
转自:https://www.jianshu.com/p/66b3c75cae81 timerfd为Linux为用户程序提供的定时器接口,该接口基于文件描述符,通过文件描述符的可读事件进行超时通知,且 ...
- IDEA配置文件的配置文件配置
IDEA配置文件的配置文件配置: 路径 /Applications/IntelliJ IDEA 3.app/Contents/bin/idea.vmoptions (/IntelliJ IDEA 3. ...
- DOM事件阶段以及事件捕获与事件冒泡先后执行顺序
平时浏览这么多技术文章,如过不去实践.深入弄透它,这个技术点很快就会在脑海里模糊.要加深印象,就得好好过一遍.重要的事情说三遍,重要的知识写一遍. 开发过程中我们都希望使用别人成熟的框架,因为站在巨人 ...
- SUSE Enterprise Server 12 SP3 64 设置防火墙开放8080端口,出现Unsafe permissions for file /etc/sysconfig/SuSEfirewall2 to be sourced
SUSE Enterprise Server 12 SP3 64 设置防火墙开放8080端口时出现 Unsafe permissions for file /etc/sysconfig/SuSEf ...