求助!怎么就编译错了,本地编译能过a
查看原帖
求助!怎么就编译错了,本地编译能过a
548118
caizihaolg楼主2023/4/4 12:35
#include<bits/stdc++.h>
using namespace std;
string a,b,ga[10],gb[10];
int n=1;
struct node{
	string now;
	int ans;
	node():now(),ans(){}
	node(string now,int ans):now(now),ans(ans){}
};
int fin(string s,int ya)
{
	for(int i=0;i<s.size();i++)
		if(s[i]==ga[ya][0])
		{
			for(int j=1;j<ga[ya].size();j++)
				if(s[i+j]!=ga[ya][j])
					return -1;
			return i;
		}
	return -1;
}
bool sjb(string s)
{
	for(int i=0;i<s.size();i++)
		if(s[i]!=b[i] && s[i]!='-')
			return false;
	return true;
}
void bfs()
{
	queue<node>q;
	q.push(node(a,0));
	while(q.size())
	{
		int ans=q.front().ans;string now=q.front().now;q.pop();
		if(now==b)
		{
			printf("%d",ans);
			return ;
		}
		if(ans>10)
		{
			printf("NO ANSWER!");
			return ;
		}
		for(int i=1;i<=n;i++)
		{
			int wa=fin(now,i);
			if(wa!=-1)
			{
				string sj=now;
				int siz=abs(gb[i].size()-ga[i].size());
				if(ga[i].size()<gb[i].size())
				{


					for(int j=0;j<ga[i].size();j++)
						sj[wa+j]=gb[i][j];
					for(int j=sj.size()+siz;j>=wa+ga[i].size();j--)
						sj[j]=sj[j-siz];
				}
				for(int j=0;j<gb[i].size();j++)
					sj[wa+j]=gb[i][j];
				if(ga[i].size()>gb[i].size())
				{
					for(int k=wa+gb[i].size();k<=wa+ga[i].size();k++)
						sj[k]=sj[k+1];
					for(int k=sj.size()-siz;k<sj.size();k++)
						sj[k]='-';
				}
				if(sjb(sj))
				{
					printf("%d",ans+1);
					return;
				}
				q.push(node(sj,ans+1));
			}
		}
	}
}
int main()
{
	cin>>a>>b;
	while(cin>>ga[n]>>gb[n]) n++;
	bfs();
	
	return 0;
}
2023/4/4 12:35
加载中...