求助,第三个测试点超时
查看原帖
求助,第三个测试点超时
118184
In_blue楼主2020/5/29 19:34
#include<cctype>
#include<cstring>
#include<cstdio>
#include<queue>
#include<vector>
#include<cstring>
#include<iostream>
#include<map>
using namespace std;
inline int max(int a,int b){return a>b?a:b;}
inline int min(int a,int b){return a<b?a:b;}
inline int abs(int a){return a<0?-a:a;}
inline int read()
{
	int a=0,b=1;
	char c=getchar();
	while(!isdigit(c)){if(c=='-')b=-1;c=getchar();}
	while(isdigit(c)){a=(a<<3)+(a<<1)+(c^48);c=getchar();}
	return a*b;
}
inline void write(int a)
{
	if(a<0)putchar('-'),a=-a;
	if(a>9)write(a/10);
	putchar(a%10+48);
	return;
}
struct node{
	int ans;
	string s;
};
string a[10],b[10];
string s1,s2;
int cnt;
map<string,bool>mp;
void bfs()
{
	queue<node>que;
	node t;
	t.ans=0;
	t.s.assign(s1);
	mp[s1]=1;
	que.push(t);
	while(!que.empty())
	{
		t=que.front();
		que.pop();
		for(int i=0;i<t.s.size();i++)
		{
			for(int j=0;j<cnt;j++)
			{
				if(t.s[i]==a[j][0])
				{
					int x=i,y=0;
					bool bol=0;
					while(x<t.s.size()&&y<a[j].size())
					{
						if(t.s[x]!=a[j][y])
						{
							bol=1;
							break;
						}
						x++;
						y++;
					}
					if(bol==1)continue;
					string c;
					for(int k=0;k<i;k++)
						c.push_back(t.s[k]);
					for(int k=0;k<b[j].size();k++)
						c.push_back(b[j][k]);
					for(int k=i+a[j].size();k<t.s.size();k++)
						c.push_back(t.s[k]);
					if(mp.count(c)==1)continue;
					node q;
					mp[c]=1;
					q.ans=t.ans+1;
					q.s.assign(c);
					que.push(q);
					if(q.s==s2)
					{
						write(q.ans);
						puts("");
						return;
					}
				}
			}
		}
	}
	puts("NO ANSWER!");
	return;
}
int main()
{
	cin>>s1>>s2;
	while(cin>>a[cnt]>>b[cnt]&&!a[cnt].empty()&&!b[cnt].empty())cnt++;
	bfs();
	return 0;
}

本题第三个测试点类似于此

abc ab

a b

b a

为什么会超时??蜜汁神奇

2020/5/29 19:34
加载中...