比赛 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;
}