RE求助,40pts
查看原帖
RE求助,40pts
774854
qzmoot楼主2023/10/7 16:40
#include <bits/stdc++.h>
using namespace std;
const int N=4e4+5;
int n,a[N],b[N],c[N],zb,za,ta,tb=1,cnt=0,maxn1,maxn2,now=1;
char ans[1000005][3];
int check()
{
	int id=-1,maxn=0;
	for(int i=1;i<ta;i++)
	{
		if(maxn<a[i])
		{
			id=1;
			maxn=a[i];
		}
	}
	for(int i=1;i<tb;i++)
	{
		if(maxn<b[i])
		{
			id=2;
			maxn=b[i];
		}
	}
	return id;
}
void dfs()
{
	if(now>n)
		return;
	if(check()==1)
	{
		maxn1=maxn2;
		now++;
		maxn2=c[now];
		while(a[ta-1]!=maxn1 && ta>1)
		{
			ans[++cnt][1]='A';
			ans[cnt][2]='B';
			b[tb++]=a[--ta];
		}
		--ta;
		ans[++cnt][1]='A';
		ans[cnt][2]='C';
	}
	if(check()==2)
	{
		maxn1=maxn2;
		now++;
		maxn2=c[now];
		while(b[tb-1]!=maxn1)
		{
			ans[++cnt][1]='B';
			ans[cnt][2]='A';
			a[ta++]=b[--tb];
		}
		--tb;
		ans[++cnt][1]='B';
		ans[cnt][2]='C';
	}
	if(check()==-1)
		return;
	dfs();
}
bool cmp(int x,int y)
{
	return x>y;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&c[i]);
		a[n-i+1]=c[i];
		maxn1=max(maxn1,c[i]);
	}
	sort(c+1,c+1+n,cmp);
	maxn2=c[1];
	za=1;
	ta=n+1;
	dfs();
	cout<<cnt<<endl;
	for(int i=1;i<=cnt;i++)
		cout<<ans[i][1]<<" "<<ans[i][2]<<endl;
	return 0;
}
2023/10/7 16:40
加载中...