比赛 |
20201031 |
评测结果 |
AAAAAAAT |
题目名称 |
字串变换 |
最终得分 |
87 |
用户昵称 |
数声风笛ovo |
运行时间 |
1.049 s |
代码语言 |
C++ |
内存使用 |
1.33 MiB |
提交时间 |
2020-10-31 23:41:36 |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define re register
using namespace std;
const int maxn=15;
struct node{
string str;
int step;
};
string a,b;
string orginal[maxn];
string translated[maxn];
int n,ans;
map<string,int> ma;
string trans(const string &str,int i,int j){
string ans="";
if (i+orginal[j].length()>str.length())
return ans;
for (int k=0; k < orginal[j].length();k++){
if (str[i+k]!=orginal[j][k]) return ans;
}
ans=str.substr(0,i);
ans+=translated[j];
ans+=str.substr(i+orginal[j].length());
return ans;
}
void bfs(){
queue <node> q;
node s;
s.str=a;
s.step=0;
q.push(s);
while(!q.empty()){
node u=q.front();
q.pop();
string temp;
if(ma.count(u.str)==1) continue;
if(u.str==b){
ans=u.step;
break;
}
ma[u.str] = 1;
for(int i=0;i<u.str.length();i++){
for(int j=0;j<n;j++){
temp=trans(u.str,i,j);
if(temp!=""){
node v;
v.str=temp;
v.step=u.step+1;
q.push(v);
}
}
}
}
if(ans>10||ans==0) cout<<"NO ANSWER!"<<endl;
else cout<<ans<<endl;
}
int main(){
freopen("string.in","r",stdin);
freopen("string.out","w",stdout);
cin>>a>>b;
while(cin>>orginal[n]>>translated[n]) n++;
bfs();
return 0;
}