Dice

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

Problem Description
   There are 2 special dices on the table. On each face of the dice, a distinct number was written. Consider a1.a2,a3,a4,a5,a6 to be numbers written on top face, bottom face, left face, right face, front face and back face of dice A. Similarly, consider b1.b2,b3,b4,b5,b6 to be numbers on specific faces of dice B. It’s guaranteed that all numbers written on dices are integers no smaller than 1 and no more than 6 while ai ≠ aj and bi ≠ bj for all i ≠ j. Specially, sum of numbers on opposite faces may not be 7.
   At the beginning, the two dices may face different(which means there exist some i, ai ≠ bi). Ddy wants to make the two dices look the same from all directions(which means for all i, ai = bi) only by the following four rotation operations.(Please read the picture for more information)   Now Ddy wants to calculate the minimal steps that he has to take to achieve his goal.
 
Input
   There are multiple test cases. Please process till EOF.
   For each case, the first line consists of six integers a1,a2,a3,a4,a5,a6, representing the numbers on dice A.
   The second line consists of six integers b1,b2,b3,b4,b5,b6, representing the numbers on dice B.
 
Output
   For each test case, print a line with a number representing the answer. If there’s no way to make two dices exactly the same, output -1.
 
Sample Input
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 5 6 4 3
1 2 3 4 5 6
1 4 2 5 3 6
 
Sample Output
0
3
-1
 
Source
 
Recommend
hujie   |   We have carefully selected several similar problems for you:  5017 5016 5014 5013 5011 
 

卜神的代码

为了测试康托展开, 文中注释部分是卜神原来的代码,也是ac的。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std; typedef long long ll; const int CANTO = ;
const int LEN = ; int fac[];
bool vis[CANTO];
int begin, end;
struct Sit
{
int arr[LEN];
int step;
}; void makefac()
{
fac[] = fac[] = ;
for(int i = ; i <= ; i++)
fac[i] = i * fac[i-];
} int canto(int arr[])
{
int res = ;
for(int i = ; i < LEN; i++){
int num=;
for(int j=i+;j<LEN;j++)
if(arr[j]<arr[i]) num++;
res+=(num*fac[LEN-i-]);
}
// res += fac[i+2] * arr[i];
return res;
} int bfs(Sit src)
{
queue <Sit> q;
Sit now, tmp;
int t, c;
vis[begin] = true;
q.push(src);
while(!q.empty())
{
now = q.front();
q.pop();
tmp = now, tmp.step++; t = tmp.arr[];
tmp.arr[] = tmp.arr[];
tmp.arr[] = tmp.arr[];
tmp.arr[] = tmp.arr[];
tmp.arr[] = t;
c = canto(tmp.arr);
if (c == end){
return tmp.step;
}
if (!vis[c]){
vis[c] = true;
q.push(tmp);
}
tmp = now, tmp.step++; t = tmp.arr[];
tmp.arr[] = tmp.arr[];
tmp.arr[] = tmp.arr[];
tmp.arr[] = tmp.arr[];
tmp.arr[] = t;
c = canto(tmp.arr);
if (c == end){
return tmp.step;
}
if (!vis[c]){
vis[c] = true;
q.push(tmp);
} tmp = now, tmp.step++; t = tmp.arr[];
tmp.arr[] = tmp.arr[];
tmp.arr[] = tmp.arr[];
tmp.arr[] = tmp.arr[];
tmp.arr[] = t;
c = canto(tmp.arr);
if (c == end){
return tmp.step;
}
if (!vis[c]){
vis[c] = true;
q.push(tmp);
} tmp = now, tmp.step++; t = tmp.arr[];
tmp.arr[] = tmp.arr[];
tmp.arr[] = tmp.arr[];
tmp.arr[] = tmp.arr[];
tmp.arr[] = t;
c = canto(tmp.arr);
if (c == end){
return tmp.step;
}
if (!vis[c]){
vis[c] = true;
q.push(tmp);
}
}
return -;
} int main()
{
makefac();
int src[LEN];
int dst[LEN];
while(~scanf("%d", src)){
memset(vis, , sizeof(vis));
for(int i = ; i < LEN; i++)
scanf("%d", src+i);
for(int i = ; i < LEN; i++)
scanf("%d", dst+i);
begin = canto(src);
end = canto(dst);
if (begin == end){
printf("0\n");
continue;
}
Sit x;
memcpy(x.arr, src, LEN*sizeof(int));
x.step = ;
printf("%d\n", bfs(x));
}
return ;
}

经过以下代码验证,网上的代码,康托展开是连续值,卜神的只是起到了展开作用,不过代码更加简洁。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std; typedef long long ll; const int CANTO = ;
const int LEN = ; int fac[];
int a[LEN]; void makefac()
{
fac[] = fac[] = ;
for(int i = ; i <= ; i++)
fac[i] = i * fac[i-];
} int canto(int arr[])
{
int res = ;
for(int i = ; i < LEN; i++){
int num=;
for(int j=i+;j<LEN;j++)
if(arr[j]<arr[i]) num++;
res+=(num*fac[LEN-i-]);
}
// res += fac[i+2] * arr[i];
return res;
} int canto2(int arr[])
{
int res = ;
for(int i = ; i < LEN; i++){
// int num=0;
// for(int j=i+1;j<LEN;j++)
// if(arr[j]<arr[i]) num++;
// res+=(num*fac[LEN-i-1]);
res += fac[i+] * arr[i];
}
// res += fac[i+2] * arr[i];
return res;
} int main()
{
freopen("data.out","w",stdout);
makefac();
a[]=;a[]=;a[]=;a[]=;a[]=;a[]=;
printf("a=%d %d %d %d %d %d ",a[],a[],a[],a[],a[],a[]);
printf("can=%d %d\n",canto(a),canto2(a));
while(next_permutation(a+, a + LEN) ){
printf("a=%d %d %d %d %d %d ",a[],a[],a[],a[],a[],a[]);
printf("can=%d %d\n",canto(a),canto2(a));
}
return ;
}
 a=      can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=
a= can=

hdu 5012 bfs 康托展开的更多相关文章

  1. hdu 1430 (BFS 康托展开 或 map )

    第一眼看到这题就直接BFS爆搜,第一发爆了内存,傻逼了忘标记了,然后就改,咋标记呢. 然后想到用map函数,就8!个不同的排列,换成字符串用map标记.然后又交一发果断超时,伤心,最恨超时,还不如来个 ...

  2. hdu 1430(BFS+康托展开+映射+输出路径)

    魔板 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  3. HDU_1043 Eight 【逆向BFS + 康托展开 】【A* + 康托展开 】

    一.题目 http://acm.hdu.edu.cn/showproblem.php?pid=1043 二.两种方法 该题很明显,是一个八数码的问题,就是9宫格,里面有一个空格,外加1~8的数字,任意 ...

  4. HDU 1043 Eight(双向BFS+康托展开)

    http://acm.hdu.edu.cn/showproblem.php?pid=1043 题意:给出一个八数码,求出到达指定状态的路径. 思路:路径寻找问题.在这道题里用到的知识点挺多的.第一次用 ...

  5. HDU - 1430 魔板 【BFS + 康托展开 + 哈希】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1430 思路 我刚开始 想到的 就是 康托展开 但是这个题目是 多组输入 即使用 康托展开 也是会T的 ...

  6. POJ 1077 && HDU 1043 Eight A*算法,bfs,康托展开,hash 难度:3

    http://poj.org/problem?id=1077 http://acm.hdu.edu.cn/showproblem.php?pid=1043 X=a[n]*(n-1)!+a[n-1]*( ...

  7. 【HDU - 1043】Eight(反向bfs+康托展开)

    Eight Descriptions: 简单介绍一下八数码问题:在一个3×3的九宫格上,填有1~8八个数字,空余一个位置,例如下图: 1 2 3 4 5 6 7 8   在上图中,由于右下角位置是空的 ...

  8. hdu.1430.魔板(bfs + 康托展开)

    魔板 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  9. loj 1165(bfs+康托展开)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26879 思路:题目意思很简单,就是通过一些位置的交换,最后变成有序 ...

随机推荐

  1. UVA 12549 Sentry Robots (最小点覆盖)

    这道题挺像hdu 5093 Battle ships的,不过那道题是要求最多放置的点数,而这道题是要求最小点覆盖. 顶点覆盖的定义是:在G中任意边至少有一个端点属于顶点集合S. 一个重要的位置有(x, ...

  2. codeforces Gym 100338H High Speed Trains (递推,高精度)

    递推就好了,用二项式定理算出所有连边的方案数,减去不合法的方案, 每次选出一个孤立点,那么对应方案数就是上次的答案. 枚举选几个孤立点和选哪些,选到n-1个点的时候相当于都不选,只减1. 要用到高精度 ...

  3. 【Selenium-WebDriver问题点】driver和浏览器版本之间的兼容性问题

    今天把手头有的一些关于selenium测试的资源整理了一下,分享出来. 1. 所有版本chrome下载 是不是很难找到老版本的chrome?博主收集了几个下载chrome老版本的网站,其中哪个下载的是 ...

  4. Vue和SuperSlide做轮播效果

    使用这个插件做轮播需要的js应该知道,就是vue.js和jquery.SuperSlide.2.1.1.js 下载地址: vue:https://vuejs.org/js/vue.js 这里直接Ctr ...

  5. crop层

    A是要进行剪裁的blob,B是参考,C是由A剪裁出来的输出. 模式1和模式2不同在于offset,模式1中每个dimension可以不同,模式2中用一个值表示了所有dimension的值. axis表 ...

  6. 2019的hdu暑假作业(欢迎纠错)

    1219 遍历计数. #include<bits/stdc++.h> #define QAQ 0 using namespace std; ]; ]; int main(){ )){ me ...

  7. Spring框架bean的注解管理方法之一 使用注解生成对象

    首先在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans .context.core 和expression 下载地址: https://pan.baidu.com/s/1qXLH ...

  8. ios 登录功能学习研究

    登录功能是我在湖畔做的第一个需求. 当时PD给我的草图和下图类似: (图片来自知乎iOS客户端登录界面) 不过需求中要求用户名或者密码错误时,输入框要抖动(类似Mac登录密码错误的抖动效果). 如果实 ...

  9. JavaScript设计模式基础之闭包(终)

    对于前端程序员来说闭包还是比较难以理解的, 闭包的形成与变量的作用域以及变量的生产周期密切相关,所以要先弄懂变量的作用域和生存周期. 1.变量作用域 变量的作用域,就是指变量的有效范围,通常我们指的作 ...

  10. Centos7下安装iptables防火墙

    说明:centos7默认使用的firewalld防火墙,由于习惯使用iptables做防火墙,所以在安装好centos7系统后,会将默认的firewall关闭,并另安装iptables进行防火墙规则设 ...