我讨厌字符串
ac代码:
#include<iostream>
#include<queue>
#include<map>
using namespace std;
const int N=10007;
map<string,int>mpa,mpb;
queue<string>qa,qb;
string a[N],b[N];
string A,B;
int n;
int f(queue<string>&qa,map<string,int>&mpa,map<string,int>&mpb,string a[],string b[]){
int len=qa.size(); while(len--&&qa.size()){
string tmp=qa.front(); qa.pop();
int tmplen=tmp.size();
for(int i=0;i<n;i++){
int alen=a[i].size();
for(int j=0;j<=tmplen-alen;j++)
if(tmp.substr(j,alen)==a[i]){
// cout<<"tmp="<<tmp<<" a[i]="<<a[i]<<endl;
string s=tmp.substr(0,j)+b[i];
if(j<tmplen-alen) s+=tmp.substr(j+alen);
// cout<<"%%"<<s<<endl;
// printf("mpa=%d mpb=%d\n",mpa["xy"],mpb["xy"]);
if(mpb[s]>0) return mpa[tmp]+mpb[s]-1;
if(mpa[s]>0) continue;
// cout<<"*****"<<s<<endl;
mpa[s]=mpa[tmp]+1;
// printf("mpa[s]=%d\n",mpa[s]);
qa.push(s);
}
}
}
return -1;
}
int bfs(){
mpa[A]=1; mpb[B]=1;
qa.push(A),qb.push(B);
int step=10,ans=0;
for(int i=1;i<=step;i++){
if(qa.size()<qb.size()) ans=f(qa,mpa,mpb,a,b);
else ans=f(qb,mpb,mpa,b,a);
if(ans>0) return ans;
}
return -1;
}
int main(){
cin>>A>>B;
while(cin>>a[n]>>b[n]) n++;
if(A==B){ printf("0"); return 0; }
int ans=bfs();
if(ans<0) printf("NO ANSWER!");
else printf("%d",ans);
return 0;
}