求助
查看原帖
求助
879789
H2230823025楼主2024/12/9 19:34

为什么一个代码RE,一个代码AC了

#include<bits/stdc++.h>
using namespace std;
int l=1;
typedef pair<string ,int> pii;
string a,b;
string sa[10],sb[10];
map<string,int>map1;
void bfs()
{
	queue<pii>q;
	q.push({a,0});
	while(q.size())
	{
		pii t=q.front();
		q.pop();
		if(t.second>10)
		{
			cout<<"NO ANSWER!";
			return ;
		}
		if(t.first==b)
		{
			cout<<t.second;
			return ;
		}
		for(int i=1;i<=l;i++)
		{
			for(int j=0;j<=t.first.size()-sa[i].size();j++)
			{
				string f=t.first;
				int k=t.second;
				if(f.substr(j,sa[i].size())==sa[i])
				{
					f.replace(j,sa[i].size(),sb[i]);
					map1[f]++;
					if(map1[f]<=1)
					{
						q.push({f,k+1});
					}
				}
			}
		}
	}
	cout<<"NO ANSWER!";
}
int main() 
{
	cin>>a>>b;
	while(cin>>sa[l]>>sb[l])l++;
	l--;
	bfs();
	return 0;
}

这个代码第四个数据RE了

#include<bits/stdc++.h>
using namespace std;
int l=1;
typedef pair<string ,int> pii;
string a,b;
string sa[10],sb[10];
map<string,int>map1;
void bfs()
{
	queue<pii>q;
	q.push({a,0});
	while(q.size())
	{
		pii t=q.front();
		q.pop();
		if(t.second>10)
		{
			cout<<"NO ANSWER!";
			return ;
		}
		if(t.first==b)
		{
			cout<<t.second;
			return ;
		}
		for(int i=1;i<=l;i++)
		{
			int u=t.first.size()-sa[i].size();
			if(u<0)continue;
			for(int j=0;j<=u;j++)
			{
				string f=t.first;
				int k=t.second;
				if(f.substr(j,sa[i].size())==sa[i])
				{
					f.replace(j,sa[i].size(),sb[i]);
					map1[f]++;
					if(map1[f]<=1)
					{
						q.push({f,k+1});
					}	
				}
			}
		}
	}
	cout<<"NO ANSWER!";
}
int main() 
{
	cin>>a>>b;
	while(cin>>sa[l]>>sb[l])l++;
	l--;
	bfs();
	return 0;
}

这样改了又AC了,感觉没什么区别

2024/12/9 19:34
加载中...