题目链接:Shuffle'm Up
除了英文题有点恶心。发现模拟 + bfs 就可以过的时候,就是水了。
一个bug 就是filp函数得到string s12失败了。恩。据大腿告知,string 并不指定字符串的初始化长度是0,也就是说我每个元素的赋值是没有意义的。或者。string 是引用型数据类型,所以名字是一个指针吧。然后str.resize()函数愉快的解决了这个问题。
还有就是对题意。字符串从左到右是从下到上。我是懵了一下的。
题意思路见代码吧。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /* 2 题目很长。也没有看。百度到题意。给出两个长度相同的牌。洗牌方式见图得到s12。然后以最下面的相应长度为s1,上面的为s2,然后,重新洗牌。 3 问s12 是否有可能得到s12 和目标牌一样。步数是多少。 4 开始是没有思路。然后模拟。然后。bfs。把第一个s12当做初始状态,然后开始进队列。用map标记是否出现过 5 样例: 6 下 上 7 AHAH 8 HAHA 9 HHAAAAHH 10 11 AHAH 12 HAHA 13 HAAHHAAH 14 15 HAAH 16 HAAH 17 HHAAAAHH 18 */ 19 20 #include <string.h> 21 #include <iostream> 22 #include <queue> 23 #include <map> 24 #include <string> 25 #define maxn 1000000 26 using namespace std; 27 28 queue<string>que; 29 map<string, int>mp; 30 string s1, s2, s12; 31 string temp, now; 32 33 int ans; 34 int len; 35 36 void filp(string s1, string s2) { 37 string tempans; 38 //cout << "====== "; 39 for (int i=0, j=0; i<len; i++, j+=2) { 40 temp[j] = s2[i]; 41 } 42 //cout << "------ "; 43 for (int i=0, j=1; i<len; i++, j+=2) { 44 temp[j] = s1[i]; 45 } 46 temp[2*len] = '