题目:http://poj.org/problem?id=3087
AC代码(C++):
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <queue>
#include <map>
#include <math.h>
#include <string>
#include <string.h>
#include <bitset>
#define INF 0xfffffff
#define MAXN 100005
using namespace std;
int c;
map<string,bool> vis;
int main(){
int t;
cin>>t;
string s1,s2,s12,se;
int ans;
for(int tt = 0; tt < t; tt++){
cin>>c>>s1>>s2>>se;
vis.clear();
ans = 0;
while(1){
s12.clear();
for(int i = 0; i < c; i++){
s12 += s2[i];
s12 += s1[i];
}
ans++;
if(!vis[s12]){
if(s12 == se){
cout<<tt+1<<' '<<ans<<endl;
break;
}
vis[s12] = true;
s1 = s12.substr(0,c);
s2 = s12.substr(c,2*c);
}
else{
cout<<tt+1<<' '<<-1<<endl;
break;
}
}
}
}
总结: 模拟题, 用map查字符串.