70分求助
查看原帖
70分求助
148204
张文瀚楼主2023/2/6 15:47
#include<bits/stdc++.h>
using namespace std;
int n,ccs,a[27];
char ch[1000001][3];
string s,s0,s1,s2,s3;
void dfs(int cs,string ss0,string ss1,string ss2,string ss3)
{
	string ssss;
	if(cs>ccs)
	  return;
//	cout<<cs<<'|'<<ss0<<'|'<<ss1<<'|'<<ss2<<'|'<<ss3<<endl;
	if(ss3==s)
	{
		for(int i=1;i<=cs;i++)
		  cout<<ch[i][0]<<' '<<ch[i][1]<<' '<<ch[i][2]<<endl;
		exit(0);
	}  
//	cout<<cs<<'|'<<ss0<<'|'<<ss1<<'|'<<ss2<<'|'<<ss3<<"!1"<<endl;
	if(!ss0.empty())
	{
	  ch[cs][0]=ss0[ss0.size()-1],ch[cs][1]='A';
	  ss0.erase(ss0.size()-1,1);
	  if(s[s.size()-ss3.size()-1]==ch[cs][0])
	  {
		ch[cs][2]='D';
		ssss=ch[cs][0];
		ss3.insert(0,ssss);
		dfs(cs+1,ss0,ss1,ss2,ss3);
		ss3.erase(0,1);	
	  }else
	  {
		ch[cs][2]='B';
	  	dfs(cs+1,ss0,ss1+ch[cs][0],ss2,ss3);
	  	if(a[ch[cs][0]-'a']>a[ss2[ss2.size()-1]-'a'])
	  	{
			ch[cs][2]='C';
	  	    dfs(cs+1,ss0,ss1,ss2+ch[cs][0],ss3);	
		}
	  	
	  }
	  ss0+=ch[cs][0];
	}
//	cout<<cs<<'|'<<ss0<<'|'<<ss1<<'|'<<ss2<<'|'<<ss3<<"!2"<<endl;
	if(!ss1.empty())
	{
	  ch[cs][0]=ss1[ss1.size()-1],ch[cs][1]='B';
	  ss1.erase(ss1.size()-1,1);
	  if(s[s.size()-ss3.size()-1]==ch[cs][0])
	  {
		ch[cs][2]='D';
		ssss=ch[cs][0];
		ss3.insert(0,ssss);
		dfs(cs+1,ss0,ss1,ss2,ss3);
		ss3.erase(0,1);	
	  }else
	  if(a[ch[cs][0]-'a']>a[ss2[ss2.size()-1]-'a'])
	  {
	  	ch[cs][2]='C';
	  	dfs(cs+1,ss0,ss1,ss2+ch[cs][0],ss3);
	  }
	  ss1+=ch[cs][0];
	}
//	cout<<cs<<'|'<<ss0<<'|'<<ss1<<'|'<<ss2<<'|'<<ss3<<"!3"<<endl;
	if(!ss2.empty())
	{
	  ch[cs][0]=ss2[ss2.size()-1],ch[cs][1]='C';
	  ss2.erase(ss2.size()-1,1);
	  if(s[s.size()-ss3.size()-1]==ch[cs][0])
	  {
		ch[cs][2]='D';
		ssss=ch[cs][0];
		ss3.insert(0,ssss);
		dfs(cs+1,ss0,ss1,ss2,ss3);
		ss3.erase(0,1);		
	  }
	  ss2+=ch[cs][0];
	}
}
int main()
{
	//freopen("track.in","r",stdin);
//	freopen("track.out","w",stdout);
	cin>>n>>s;
	for(int i=1;i<=n;i++)
	  a[s[i-1]-'a']=n-i+1;
	for(int i=1;i<=n;i++)
	  s0+=char(i+'a'-1);
    for(int i=n;i<=3*n;i++)
	  ccs=i,dfs(1,s0,s1,s2,s3);	  
	printf("NO");
//	fclose(stdin);fclose(stdout);
	return 0;
}
2023/2/6 15:47
加载中...