只会输出No......求调
查看原帖
只会输出No......求调
1288786
meiweid_quanyiang楼主2025/7/21 14:41

rt

#include<bits/stdc++.h>
using namespace std;
int n;
int find(string a,string b){
    bool flag=1;
    if(a.size()>b.size())swap(a,b);
    for(int i=0;i<=b.size()-a.size();i++){
        flag=1;
        if(b[i]==a[0]){
            for(int j=1;j<=a.size();j++){
                if(b[i+j]!=a[j]){
                    flag=0;
                    break;
                }
            }
            if(flag)return i;
        }
    }
    return -1;
}
map<string ,bool> bl;
pair<string,string> d[80];
queue<pair<string,int> >q;
int bfs(string a,string b){
    q.push(make_pair(a,0));
    while(q.front().first!=b&&q.front().second<=10&&!q.empty()){
        string c=q.front().first;
        int d_=q.front().second;
        q.pop();
        if(bl[c])continue;
        bl[c]=1;
        for(int i=1;i<=n;i++){
            if(c.size()>d[i].first.size()){
                int x=find(c,d[i].first);
                if(x!=-1){
                    string l="";
                    for(int j=0;j<c.size();j++){
                        if(j<x)l+=c[i];
                        if(j>=x&&j<x+d[j].second.size()){
                            l+=d[j].second;
                            j+=d[j].first.size();
                        }
                        else{
                            l+=c[j];
                        }
                    }
                    q.push(make_pair(l,d_+1));
                }
            }
        }
        
    }
    if(q.front().first==b)return q.front().second;
    return -1;
}
int main(){
    // freopen("p3.in","r",stdin);
    // freopen("p3.out","w",stdout); 用的vscode终端输入不了^Z
    string a,b;
    cin>>a>>b;
    string c,e;
    while(cin>>c>>e){
        d[n].first=c,d[n++].second=e;
    }
    int bf=bfs(a,b);
    if(bf!=-1){
        cout<<b;
    }
    else cout<<"NO ANSWER!";
}
2025/7/21 14:41
加载中...