大意就是像我们洗牌一样,只不过脑回路比较奇特,先第二副牌插在地下然后插第一张牌。模拟题,感觉不是搜索题,纯暴力可以解决的题;做poj专题简单搜索碰到的,也不知道为啥
#include<iostream>
#include<cstring>
#include<map>
#include<queue>
using namespace std;
int T,n;
string s1,s2,s12;
string init(string x,string y){
string temp="";
for(int i=0;i<n;i++){
temp+=y[i];temp+=x[i];
}
return temp;
}
int execute()
{
map<string ,int>m;
string temp=init(s1,s2);
m[temp]=1;
queue<string>q;
q.push(temp);
while(!q.empty()) {
string s=q.front();
q.pop();
if(s==s12)return m[s];
string x=s.substr(0,n);
string y=s.substr(n,n);
string z=init(x,y);
if(m[z]>0)return -1;
m[z]=m[s]+1;
q.push(z);
}
return -1;
}
int main()
{
int time=1;
cin>>T;
while(T--){
cin>>n>>s1>>s2>>s12;
int k=execute();
cout<<time<<" "<<k<<endl;
time++;
}
return 0;
}