这题的界线不是很清楚。到底属于模拟还是搜索呢?
16ms模拟水过23333
#include <cstdio>
#include <iostream>
#include <map>
#include <cstring>
using namespace std;
const int maxn = 10000;
int main(){
int T,n;
scanf("%d",&T);
for(int t=1;t<=T;t++){
char a[maxn],b[maxn],c[maxn*2],sum[maxn*2];
map<string, int> m;
memset(sum, 0, sizeof(sum));
scanf("%d",&n);
scanf("%s %s %s",a,b,c);
m[c]=1;
int count=0;
while(1){
int p=0;
for(int i=0;i<n;i++)
{sum[p++]=b[i];sum[p++]=a[i];}
count++;
if(!strcmp(sum,c)){
printf("%d %d\n",t,count);
break;
}
if(m[sum]){
printf("%d -1\n",t);
break;
}
m[sum]=1;
for(int j=0;j<n;j++)
a[j]=sum[j];
for(int j=0;j<n;j++)
b[j]=sum[j+n];
}
}
return 0;
}