【求调】大概只有我一个人60 MLE on#4 WA on#5
查看原帖
【求调】大概只有我一个人60 MLE on#4 WA on#5
941560
HeiCat0725楼主2024/8/16 16:49

rt,单向bfs感觉有问题但又没看出来哪里有问题。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double lb;

string s,t;
vector<string> vta,vtb;
string bian(string a,int rule){
	string ans="";
	string x=vta[rule],y=vtb[rule];
	int cnt=0,st=0;
	for(int i=0;i<(int)a.size();i++){
		cnt=0;
		bool f=1;
		for(int j=i;j<(int)a.size()&&j<(int)(i+x.size());j++){
			if(a[j]!=x[cnt]){
				f=0;
				break;
			}
			cnt++;
		}
		if(f){
			st=i;
			break;
			//要是有多个可以换的字符串呢?
		}
	}
	if(cnt==(int)x.size()){
		for(int i=0;i<st;i++) ans+=a[i];
		ans+=y;
		for(int i=st+x.size();i<(int)a.size();i++) ans+=a[i];
	}
	return ans;
}
int ans=1e9;
struct node{
	string x;
	int num=0;
};
queue<node> que;
void bfs(){
	que.push({s,0});
	while(!que.empty()){
		node a=que.front();
		que.pop();
		if(a.num>10) continue;
		if(a.x==t){
			ans=min(ans,a.num);
			continue;
		}
		for(int i=0;i<(int)vta.size();i++){
			string b=bian(a.x,i);
			if(b!=""){
				que.push({b,a.num+1});
				//cout<<b<<" "<<a.num+1<<"\n";
			}
		}
	}
}
int main(){
	string a,b;
	cin>>s>>t;
	while(cin>>a>>b){
		if(a=="0"&&b=="0") break;
		vta.push_back(a);
		vtb.push_back(b);
	}
	bfs();
	if(ans==1e9) printf("NO ANSWER!");
	else printf("%d",ans);
	return 0;
}
/*
aaaaaab aaaaaa
aaaab aaaa
 */
2024/8/16 16:49
加载中...