hdu 5012 bfs 康托展开
Dice
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 491 Accepted Submission(s): 290
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.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.
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
3
-1
卜神的代码
为了测试康托展开, 文中注释部分是卜神原来的代码,也是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 康托展开的更多相关文章
- hdu 1430 (BFS 康托展开 或 map )
第一眼看到这题就直接BFS爆搜,第一发爆了内存,傻逼了忘标记了,然后就改,咋标记呢. 然后想到用map函数,就8!个不同的排列,换成字符串用map标记.然后又交一发果断超时,伤心,最恨超时,还不如来个 ...
- hdu 1430(BFS+康托展开+映射+输出路径)
魔板 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- HDU_1043 Eight 【逆向BFS + 康托展开 】【A* + 康托展开 】
一.题目 http://acm.hdu.edu.cn/showproblem.php?pid=1043 二.两种方法 该题很明显,是一个八数码的问题,就是9宫格,里面有一个空格,外加1~8的数字,任意 ...
- HDU 1043 Eight(双向BFS+康托展开)
http://acm.hdu.edu.cn/showproblem.php?pid=1043 题意:给出一个八数码,求出到达指定状态的路径. 思路:路径寻找问题.在这道题里用到的知识点挺多的.第一次用 ...
- HDU - 1430 魔板 【BFS + 康托展开 + 哈希】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1430 思路 我刚开始 想到的 就是 康托展开 但是这个题目是 多组输入 即使用 康托展开 也是会T的 ...
- 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]*( ...
- 【HDU - 1043】Eight(反向bfs+康托展开)
Eight Descriptions: 简单介绍一下八数码问题:在一个3×3的九宫格上,填有1~8八个数字,空余一个位置,例如下图: 1 2 3 4 5 6 7 8 在上图中,由于右下角位置是空的 ...
- hdu.1430.魔板(bfs + 康托展开)
魔板 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- loj 1165(bfs+康托展开)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26879 思路:题目意思很简单,就是通过一些位置的交换,最后变成有序 ...
随机推荐
- PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20)
PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20) http://www.patest.cn/contests/pat-b-practise/1024 ...
- 洛谷 P1032 字串变换 (BFS)
题目传送门 我即使是死了,钉在棺材里了,也要在墓里,用这腐朽的声带喊出 STL大法好 这题最麻烦的其实是处理字符串,真正的搜索部分我个人认为也就只有橙题或黄题的难度.而处理字符串,正如前面所说,STL ...
- shell脚本,awk如何处理文件中上下关联的两行。
文件d.txt如下内容 ggg 1portals: 192.168.5.41:3260werew 2portals: 192.168.5.43:3260 如何把文件d.txt内容变为如下内容 ggg ...
- 几种常用库在CentOS下的编译
1操作环境 通过命令查看操作系统版本信息: [root@localhost ~]# cat /proc/version Linux version 3.10.0-327.el7.x86_64 (bui ...
- JavaScript 基础:Babel 转译 class 过程窥探
零.前言 虽然在 JavaScript 中对象无处不在,但这门语言并不使用经典的基于类的继承方式,而是依赖原型,至少在 ES6 之前是这样的.当时,假设我们要定义一个可以设置 id 与坐标的类,我们会 ...
- 条款37:绝不重新定义继承而来的缺省参数值(Never redefine a function's inherited default parameter value)
NOTE: 1.绝不重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定的,而virtual 函数-----你唯一应该覆盖的东西----却是动态绑定的.
- python 实现计算器功能 输入字符串,输出相应结果
import re formul='1 - 2 *( (6 0- 30+(0-40/5) * (9-2* 5/3 +7 /3*99/4*2998 +10 *568/14)) - (-4*3) / (1 ...
- centos7中的网卡一致性命名规则、网卡重命名方法
一致性网络设备命名(Consistent Network Device Naming) 背景介绍: 在centos5的时候,我们习惯了eth0这样的网络设备命名,在centos6发现网络设备变成了em ...
- EIGRP
因为rip的收敛时间长 尤其是使用过程中 链路down掉 重收敛的时间比较长 所以在中到大型的园区网中很少用到rip协议 只有在很小的局域网中用到rip 因为收敛时间可能会稍微短一些 ...
- Django深入----django.db.transaction
django 的事务: transaction.py atomic---原子性 def atomic(using=None, savepoint=True): # Bare decorator: @a ...