POJ 3087 模拟+hash
也可以用map来搞
样例推出来 就没啥问题了 (先读的是B 然后是A 被坑好久)
//By SiriusRen
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
#define mod 10000007
int n,T,cases,rec,vis[10000007];
char a[605],b[605],c[933],s[933];
int main()
{
scanf("%d",&T);
for(cases=1;cases<=T;cases++){
int t=0;rec=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)cin>>b[i];
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=2*n;i++)cin>>c[i],rec=(rec*128+c[i])%mod;
while(++t){
int temp=0;
for(int i=1;i<=n;i++){
s[i*2-1]=a[i],s[i*2]=b[i];
temp=(128*temp+s[i*2-1])%mod;
temp=(128*temp+s[i*2])%mod;
}
if(temp==rec){printf("%d %d\n",cases,t);break;}
else if(vis[temp]==cases){printf("%d -1\n",cases);break;}
else vis[temp]=cases;
for(int i=1;i<=n;i++)b[i]=s[i];
for(int i=1;i<=n;i++)a[i]=s[i+n];
}
}
}