传送门

题意

给出初始序列与终止序列,给出三种操作,问最少经过几次操作能使初始->终止,输出操作(字典序最小)

分析

字符串只有8个字符,使用康托展开。

1.BFS将所有序列从"12345678"操作得到,能够保证字典序与次数最小(采用string)

2.接下来将初始序列变成"12345678",相应终止序列也变化,该操作由下列代码实现

R(i,0,8) pos[s1[i]-'0']=i+1;
R(i,0,8) s2[i]=pos[s2[i]-'0'];

代码

#include<bits/stdc++.h>
using namespace std; #define ll long long
#define F(i,a,b) for(int i=a;i<=b;++i)
#define R(i,a,b) for(int i=a;i<b;++i)
#define mem(a,b) memset(a,b,sizeof(a))
#define cpy(a,b) memcpy(a,b,sizeof(b))
string s1,s2,ans[100100];
int a[10]={1,1,2,6,24,120,720,5040},pos[10];
bool vis[100100];
int cal(string &s)//cnt=a[i]*(n-i-1)!
{
int ret=0;
R(i,0,7)
{
int tmp=0;
R(j,i+1,8) if(s[i]>s[j]) tmp++;
ret+=tmp*a[7-i];
}
//printf("ret=%d\n",ret);
return ret;
}
struct node
{
string s;
int value;
}; void op1(string &s)
{
F(i,1,4) swap(s[i-1],s[8-i]);
}
void op2(string &s)
{
for(int i=3;i;--i) swap(s[i],s[i-1]);
for(int i=4;i<7;++i) swap(s[i],s[i+1]);
}
void op3(string &s)
{
swap(s[1],s[6]);swap(s[6],s[5]);swap(s[2],s[5]);
}
queue<node>q;
void bfs()
{
string s="12345678";
node p;
p.s=s;
p.value=cal(s);
vis[p.value]=1;
ans[p.value]="";
q.push(p);
while(!q.empty())
{
//puts("1");
p=q.front();q.pop();
//if(vis[p.value]) continue;
F(i,1,3)
{
if(i==1)
{
node pp=p;
op1(pp.s);
pp.value=cal(pp.s);
if(!vis[pp.value])
{
vis[pp.value]=1;ans[pp.value]=ans[p.value]+'A';
q.push(pp);
}
}
if(i==2)
{
node pp=p;
op2(pp.s);
pp.value=cal(pp.s);
if(!vis[pp.value])
{
vis[pp.value]=1;ans[pp.value]=ans[p.value]+'B';
q.push(pp);
} }
if(i==3)
{
node pp=p;
op3(pp.s);
pp.value=cal(pp.s);
if(!vis[pp.value])
{
vis[pp.value]=1;ans[pp.value]=ans[p.value]+'C';
q.push(pp);
}
}
}
}
} int main()
{
bfs();
while(cin>>s1>>s2)
{
R(i,0,8) pos[s1[i]-'0']=i+1;
R(i,0,8) s2[i]=pos[s2[i]-'0'];
cout<<ans[cal(s2)]<<endl;
}
return 0;
}

HDU1430;魔板(BFS+康托展开)的更多相关文章

  1. hdu1430魔板(BFS+康托展开)

    做这题先看:http://blog.csdn.net/u010372095/article/details/9904497 Problem Description 在魔方风靡全球之后不久,Rubik先 ...

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

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

  3. HDU 1430 魔板(康托展开+BFS+预处理)

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

  4. hdu1430 魔板(康拓展开 bfs预处理)

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

  5. HDU_1430——魔板,预处理,康托展开,置换,string类的+操作

    Problem Description 在魔方风靡全球之后不久,Rubik先生发明了它的简化版——魔板.魔板由8个同样大小的方块组成,每个方块颜色均不相同,可用数字1-8分别表示.任一时刻魔板的状态可 ...

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

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

  7. 魔板 (bfs+康托展开)

    # 10027. 「一本通 1.4 例 2」魔板 [题目描述] Rubik 先生在发明了风靡全球魔方之后,又发明了它的二维版本--魔板.这是一张有 888 个大小相同的格子的魔板: 1 2 3 4 8 ...

  8. HDU_1430 魔板 【BFS+康托展开+置换】

    一.题面 POJ1430 二.分析 该题与之前做的八数码不同,它是一个2*4的棋盘,并且没有空的区域.这样考虑的情况是很少的,依然结合康托展开,这时康托展开最多也只乘7的阶乘,完全可以BFS先预处理一 ...

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

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

随机推荐

  1. python学习之-- redis模块操作 LIST

    redis 模块操作之 List List 操作,在内存中按照一个name对应一个List来存储. lpush(name,values):在name对应的list中添加元素,每个新的元素都添加到列表的 ...

  2. Codeforces Manthan, Codefest 18 (rated, Div. 1 + Div. 2) D,E

    D. Valid BFS? time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  3. P1195 口袋的天空 洛谷

    https://www.luogu.org/problem/show?pid=1195 题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空. 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美 ...

  4. oracle rac 安装错误整理。

    今天是2014.05.26,离别N久的博客今天继续使用. 近期一直忙着离职.入职另外加上家的网一直没有交费,弄的自己開始不那么安稳.学习就是须要一种心情平静.内心稳妥的去进行. 因换笔记本,特须要又一 ...

  5. 一例Ext4文件系统fsck后损坏的修复过程

    1.故障发生背景 Ext4文件系统没有umount下来,之后做了fsck操作检查一致性,结果导致Ext4文件mount不上(有时也会表现为导致目录变成了文件). 报错提示信息:mount: wrong ...

  6. java重载中的基本类型的自动类型转换

    当传递到函数的参数的数据类型表示的范围小于函数形参的参数类型遵循如下原则 : char类型比较特殊, 直接转换为int:  char ->int ->long->float-> ...

  7. 6 使用Ionic开发天气应用

    简介:本节课我们会制作一款天气应用,这款应用允许用户查看当前的天气情况.天气预报以及地点收藏,在模态框内显示日出和日落的数据,使用分页滚动面板显示天气信息,使用侧滑菜单实现导航. 6.1 项目配置 环 ...

  8. Redis入门教程(二)— 基本数据类型

    阅读以下内容时,手边打开一个redis-cli一起输入,输入命令敲击回车键前在心中想好你的答案,如果结果不合你的预期,请分析原因,使极大地提高学习效率.如果没有条件,每个数据类型后有代码运行结果,供你 ...

  9. 【iOS系列】-textView的非常规使用

    [iOS系列]-textView的非常规使用 文本框坐标设置一点距离 //文本框,左边间距 textView.leftView = [[UIView alloc] initWithFrame:CGRe ...

  10. IE、W3C两种CSS盒子模型

    利用CSS来布局页面布局DIV有点逻辑性!重点理解盒子模型,标准流和非标准流的区别,还有定位原理!把这3个攻破了,就非常简单了!多实践多参考!最后就是兼容问题了,在实践中自然就有经验了!这些兼容技巧都 ...