POJ 3087 Shuffle’m Up(简单模拟题)
题目大意:
给出两个长度为len的字符串s1, s2和一个长度为2 * len的字符串s12,每次先让s2先s1后先后依次取一个字符得到一个长度为2 * len 的字符串s,如果发现得到的字符串s与s12相等就输出交换的次数,否则让s的左半边等于s1右半边等于s2再进行上面的变换,如果无法使的变换后的s == s12则输出-1。
具体思路:
直接模拟,注意判断为-1的条件是,经过若干次洗牌后,s1和s2变成了原来的s1,s2
具体代码:
#include<iostream>
#include<string>
#include<cstdio>
#include<stdlib.h>
using namespace std;
int main()
{
int n;
string ss1, ss2;
cin >> n;
for(int i=0;i<n;i++)
{
int c;
string s1, s2, s12;
cin >> c >> s1 >> s2 >> s12;
ss1 = s1;
ss2 = s2;
int cnt = 0;
int flag = 1;
string newStr;
do
{
cnt++;
newStr = "";
for (int i = 0; i < c; i++)
{
newStr += s2[i];
newStr += s1[i];
}
s1 = newStr.substr(0, c);
s2 = newStr.substr(c);
if (s1 == ss1 && s2 == ss2) {
flag = 0;
break;
}
} while (s12 != newStr);
if (flag)printf("%d %d\n", i+1, cnt);
else printf("%d -1\n", i+1);
}
return 0;
}
来源:CSDN
作者:三寸雪
链接:https://blog.csdn.net/weixin_44339734/article/details/104174914