传送门

题意

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

分析

字符串只有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. JS基本数据类型&流程控制

    JS基本数据类型 number     -----  数值 boolean    -----  布尔值 string     -----  字符串 [x,y] -------数组 undefined  ...

  2. Python中排序的灵活使用

    Python中列表按指定标准排序实例 概述 本题需要先输入机器的数目和任务的数目. 在接下来的n行中每行分别包含机器的最大执行时间和机器所能执行任务的最大强度. 在接下来的n行中每行分别包含任务执行时 ...

  3. POJ 1328 Radar Installation【贪心 区间问题】

    题目链接: http://poj.org/problem?id=1328 题意: 在x轴上有若干雷达,可以覆盖距离d以内的岛屿. 给定岛屿坐标,问至少需要多少个雷达才能将岛屿全部包含. 分析: 对于每 ...

  4. 【webstorm 系列之一】快捷键很好用啊

    书签 bookmarks , 在多文件中调试很方便 断点只能在js文件中用,而bookmark可以在所有文件中使用 书签开关 F11  (给光标所在行加书签) 显示书签 Shift + F11 书签号 ...

  5. 魔咒词典--hdu1880(字符串 暴力)

    http://acm.hdu.edu.cn/showproblem.php?pid=1880 不要想其他的   暴力就能过 #include <iostream> #include < ...

  6. windows上安装mysql

    安装mysql后 命令行闪退 查看服务 也没有MySQL服务启动 你安装了mysql没有,没有就先安装,安装好mysql以后,在bin目录下有个mysqld.exe,运行这个程序就可以添加mysql服 ...

  7. google --SwitchyOmega and switchysharp ***

    https://github.com/FelisCatus https://chrome.google.com/webstore/search/Proxy%20SwitchySharp%20?hl=z ...

  8. Jmeter参数Parameters和Body Data区别

    1.如图: 2.有文章说,Parameters是get的参数:Body Data是post的参数:get的参数存在于url中,post的参数存在于body中:   但是我使用jmeter3.3版本测试 ...

  9. 【Android数据存储】- File

    个人学习整理.如有不足之处,请不吝不吝赐教. 转载请注明:@CSU-Max 读写本应用程序数据目录中的文件        此种方法读写的文件在/data/data/<应用程序包名>中   ...

  10. Xsolla和Hi-Rez工作室联手推行SMITE

    视频游戏店面管理和计费解决方式的领导者,Xsolla.将重拳出击将与Hi-Rez游戏工作室合作.该工作室是一家美国的独立游戏开发商,主要开发MOBA游戏-SMITE. 支持全球600多种支付方式 Xs ...