社区讨论

#5MLE,有没有优化策略

P1032[NOIP 2002 提高组] 字串变换(疑似错题)参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m6uqcn4a
此快照首次捕获于
2025/02/07 20:15
去年
此快照最后确认于
2025/11/04 09:47
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
#define ll long long
#define P 1000007
#define hashmod P
#define hashp 182557
using namespace std;
string u,v;
map<string,vector<string>>c;
struct L{
	string tr;
	int d;
};
int kmp[30];
int n,j;
queue<L>q;
inline void bfs(){
	q.push(L{u,0});
	while(!q.empty()){
		string a = q.front().tr;
		int dot = q.front().d;
		if(dot > 10){
			cout << "NO ANSWER!";
			return;
		}
		if(a == v){
			cout << dot;
			return;
		}
		q.pop();
		int la = a.size();
		for(auto tyy : c){
			string b = tyy.first;
			j = 0;
			memset(kmp,0,sizeof(kmp));
			int lb = b.size();
			for (int i=1;i<lb;i++)
		   	{     
			    while(j && b[i]!=b[j])j=kmp[j];    
		        if(b[j]==b[i])j++;    
		        kmp[i + 1]=j;
	       	}
	    	j=0;
	    	for(int i=0;i<la;i++)
		    {
		        while(j>0&&b[j]!=a[i])j=kmp[j];
		        if (b[j]==a[i]) j++;
		        if (j==lb){
		        	string m = a;
					for(auto y : c[b]){
						m.replace(i - lb + 1,lb,y);
						q.push(L{m,dot + 1});
					}
				}
	        }
		}		
	}
	return;
}
int main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin >> u;
	cin >> v;
	n = v.size();
	string x,y;
	int tn;
	cin >> x >> y;
	do{
		int t = x.size();
		c[x].push_back(y);
	}while(cin >> x >> y);
	bfs();
	return 0;
}
感觉是map太占内存,但没有思路,有没有大佬(救救MnZn)

回复

0 条回复,欢迎继续交流。

正在加载回复...