运用第i个s12和第i+1个s12中,每个位置具有的确定的映射关系:

pos = pos * 2 + 1 (pos < c)

pos = pos * 2 - c * 2 (pos >= c)

例如c =3, 则位置为 0 1 2 3 4 5  会映射成 3 0 4 1 5 2

从第1到第2c个位置依次进行匹配,用搜索应该也可以做,合适于数据大的情况。

#include<string.h>
#include<stdio.h> int main(){
int n, c;
char s1[], s2[], s12[], des[];
scanf("%d",&n);
//cin >> n;
for(int t = ; t <= n; t ++){
scanf("%d %c %c %c",c,s1,s2,des);
int ans = ;
bool flag = false;
char str1[];
strcpy(str1, s1); // str1保存原始状态的s1。 while(!flag){
int i, k = ;
for(i = ; i < c; i ++){ // s1和s2按规则合成s12。
s12[k ++] = s2[i];
s12[k ++] = s1[i];
}
s12[k] = ;
ans ++;
if(!strcmp(s12, des)){ // 若s12与目标相同。
flag = true;
break;
}
for(i = , k = ; k < c; k ++) // 新的s1。
s1[i ++] = s12[k];
s1[i] = ;
for(i = , k = c; k < * c; k ++) // 新的s2。
s2[i ++] = s12[k];
s2[i] = ;
if(!strcmp(s1, str1)) // 等到s1经过x次变换后回到str1,则说明不可能到达目标情况了。 break;
}
if(flag) printf("%d %d\n",t,ans);
else printf("%d -1",t);
}
return ;
}

最新文章

  1. ZeroMQ(ZMQ)函数接口英汉直译
  2. Hadoop学习笔记—4.初识MapReduce
  3. C++Builder XE8_upd1破解安装成功纪要
  4. C# 串口操作系列(3) -- 协议篇,二进制协议数据解析
  5. 借个例子说明sed的模式空间,以及针对模式空间的N,P,D用法
  6. ASP.NET MVC 5 入门教程 (3) 路由route
  7. WPF WebBroswer可以用到的接口
  8. codeforces#1132 F. Clear the String(神奇的区间dp)
  9. 判断是否某App
  10. 转 jeecg3.5中多数据源的配置
  11. Django框架 (一) 虚拟环境配置及简单使用
  12. centos 7 源代码安装mysql5.6
  13. jq 在字符串中,去掉指定的元素
  14. MFC让进程利用所有处理器核心
  15. 项目加入 TFS报错
  16. MongoDB C# 驱动教程
  17. linux中echo的使用方法
  18. pycharm使用技巧。(mac版本)
  19. Problem J: 零起点学算法89——程序设计竞赛
  20. struts转换器

热门文章

  1. day11 闭包函数和装饰器
  2. Java读取文件-BufferedReader/FileReader/InputStreamReader/FileInputStream的关系和区别
  3. PHPActiveRecord 学习三
  4. angularjs $injector:nomod
  5. PUDN用户名与密码
  6. Idea单元测试Junit Generator设置
  7. WAS 常见报错
  8. &lt;asp:Button点击查询后,调用js中函数展现加载圈
  9. 【go】http实验
  10. vue路由传值方式