题目大意
给定两个长度为len的字符串s1和s2, 接着给出一个长度为len*2的字符串s12。
将字符串s1和s2通过一定的变换变成s12,找到变换次数
变换规则如下:
假设s1=12345,s2=67890
假设变换后的序列 s=6172839405
如果s和s12完全相等那么输出变换次数
如果不完全相等,s的前半部分作为s1,后半部分作为s2,重复上述过程。
注意:变换的时候是先放s2再放s1的,刚开始我就迷失再这个地方了
暴力模拟就好,上代码
#include<iostream>
#include<string>
using namespace std;
const int N=1111;
int main()
{
string s1,s2,s12;
int n,cnt;
int len;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>len;
cin>>s1>>s2>>s12;
cnt=0;
while(cnt<N)
{
if(s1+s2==s12)
{
cout<<i<<' '<<cnt<<endl;
break;
}
string temp="";
for(int j=0;j<len;j++)
{
temp = temp+s2[j]+s1[j];
}
s1=temp.substr(0,len);
s2=temp.substr(len);
cnt++;
}
if(cnt==N) cout<<i<<' '<<-1<<endl;
}
return 0;
}