0分求助,阴沟里翻船了

P1032 [NOIP2002 提高组] 字串变换

如果输入没有问题,那么就是其他语句的问题
by gztony @ 2021-01-20 08:02:10


```cpp #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<map> using namespace std; string ta[15],tb[15]; int n; string a,b; map<string,int>mp[3]; queue<string>q[3]; //queue<int>st[3]; int BFS(){ mp[1][a]=1;mp[2][b]=1; q[1].push(a);q[2].push(b); int i,j; while(!q[1].empty() && !q[2].empty()){ int u;if(q[1].size()<=q[2].size())u=1;else u=2; string s; s=q[u].front(); if(u==1){ for(i=1;i<=n;i++){ int k=0; while(s.find(ta[i],k)!=-1){ k=s.find(ta[i],k); int len=ta[i].size(); s.replace(k,len,tb[i]); if(mp[1][s]==0){ mp[1][s]=mp[1][q[u].front()]+1; q[u].push(s); } if(mp[2][s]!=0){ int tmp=mp[2][s]+mp[1][q[u].front()]-1; if(tmp<=10)return tmp; } k++; s=q[u].front(); } } } else{ for(i=1;i<=n;i++){ int k=0; while(s.find(tb[i],k)!=-1){ k=s.find(tb[i],k); int len=tb[i].size(); s.replace(k,len,ta[i]); if(!mp[2][s]){ mp[2][s]=mp[2][q[u].front()]+1; q[u].push(s); } if(mp[1][s]){ int tmp=mp[1][s]+mp[2][q[u].front()]-1; if(tmp<=10)return tmp; } k++; s=q[u].front(); } } } q[u].pop(); } return -1; } int main(){ cin>>a>>b; int i,j; while(cin>>ta[n+1]>>tb[n+1]) n++; int ans=BFS(); if(ans==-1)printf("NO ANSWER!\n"); else cout<<ans<<endl; return 0; } ```
by _红_ @ 2021-02-15 19:03:05


这是代码
by _红_ @ 2021-02-15 19:03:28


|