为什么一个代码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了,感觉没什么区别