传送门

题意

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

分析

字符串只有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;
}

最新文章

  1. maven-sprigmvc-mybatis配置
  2. Jquery制作--循环滚动列表
  3. 【新年呈献】高性能 Socket 组件 HP-Socket v3.1.2 正式发布
  4. bzoj 1066 蜥蜴
  5. javascript sandbox
  6. Jetty与tomcat的比较
  7. Android 插件开发,做成动态加载
  8. 「C语言」文件的概念与简单数据流的读写函数
  9. Use a layout_width of 0dip instead of wrap_content for better performance.......【Written By KillerLegend】
  10. Com进程通信(Delphi2007)
  11. ARM 平台上的Linux系统启动流程
  12. STM32之DMA
  13. mybatis用logback日志不显示sql的解决办法
  14. D3.js:坐标轴
  15. 程序员的自我救赎---11.3:WinService服务
  16. 图片处理之 Base64
  17. [Swift]LeetCode121. 买卖股票的最佳时机 I | Best Time to Buy and Sell Stock
  18. Mac环境下的mongodb的安装
  19. 微信小程序开发-第一弹
  20. 学习用Node.js和Elasticsearch构建搜索引擎(6):实际项目中常用命令使用记录

热门文章

  1. idea-自定义Java模板文件
  2. 【Java源码】树-概述
  3. Codeforces 954 D Fight Against Traffic
  4. java . 请在小于99999的正整数中找符合下列条件的数,它既是完全平方数,又有两位数字相同,如:144,676。
  5. 报错: The type ByteInputStream is not accessible due to restriction on required library
  6. CheckStyle: 解决Unicode导致LineLength出错的问题
  7. Hexo搭建个人blog
  8. [LeetCode][Java] Remove Duplicates from Sorted List II
  9. ExtJs 中获取 radiobutton 的值
  10. 2016/3/17 Mysq select 数学函数 字符串函数 时间函数 系统信息函数 加密函数