
给出S1,S2,S12 。S1,S2长度为C。S2叠一张S1再叠一张 得到一个S 如果S不等于S12 ,则将S的下C张作为新的S1,上C张作为S2 重复;
如果S等于12则 输出 叠了几次,如果永远都得不到 输出-1;
思路:模拟叠牌,记录S,当新叠出的S是被记录过的 即为循环,用不可得S12,输出-1;
map 容器 水过、、、、
#include<iostream>
#include<string>
#include<map>
using namespace std;
string s1,s2,s12,s;
int l;
void shuffle( )
{
int i;
s.clear();
for(i=0; i<l; i++)
{
s+=s2[i];
s+=s1[i];
}
}
int solve ( )
{
int res=1;
map<string,bool> m;
shuffle();
if (s==s12)
return 1;
while(m.find(s)==m.end())
{
m[s]=true;
s1=s.substr(0,l);
s2=s.substr(l,l);
shuffle();
res++;
if(s==s12) return res;
}
return -1;
}
int main ( )
{
int n,i;
cin>>n;
for (i=1; i<=n; i++)
{
cin>>l;
cin>>s1>>s2>>s12;
cout<<i<<" "<<solve()<<endl;
}
}