四指针,56tpsRE,求助,解决给关注
查看原帖
四指针,56tpsRE,求助,解决给关注
672776
XTianShuo楼主2022/10/25 10:53
#include<bits/stdc++.h>
using namespace std;

const int N=1e6+10;

int T,n;
int a[N*2];
char c1[N],c2[N],tot1,tot2;

int main()
{
//	freopen("1.in","r",stdin);
//	freopen("1.out","w",stdout);
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		for(int i=1;i<=2*n;i++)	scanf("%d",&a[i]);
		bool flag=true,flag2=true;
		tot1=0,tot2=0;
		int l=1,r=2*n,targetl=0,targetr=0;
		// left
		for(int i=2;i<=2*n;i++)
			if(a[i]==a[1])
			{
				targetl=targetr=i;
				break;
			}
		l++;
		c1[++tot1]='L';c2[++tot2]='L';
		for(int i=2;i<=n;i++)
		{
		//	cout<<i<<" "<<l<<" "<<r<<" "<<targetl<<" "<<targetr<<endl;
			if(targetr>2*n||targetl<=0)
			{
				flag=false;
				break;
			}
			if(a[l]==a[targetl-1]&&(l)<(targetl-1))
			{
				l++;c1[++tot1]='L';c2[++tot2]='L';targetl--;
			}
			else if(a[l]==a[targetr+1]&&(l)<(targetr+1))
			{
				l++;c1[++tot1]='L';c2[++tot2]='R';targetr++;
			}
			else if(a[r]==a[targetl-1]&&(r)>(targetl-1))
			{
				r--;c1[++tot1]='R';c2[++tot2]='L';targetl--;
			}
			else if(a[r]==a[targetr+1]&&(r)>(targetr+1))
			{
				r--;c1[++tot1]='R',c2[++tot2]='R';targetr++;
			}
			else
			{
				flag=false;
				break;
			}
		}
		if(flag)
		{
			reverse(c2+1,c2+1+tot2);
			for(int i=1;i<=tot1;i++)
				printf("%c",c1[i]);
			for(int i=1;i<=tot2;i++)
				printf("%c",c2[i]);
			printf("\n");
		}
		else
		{
			tot1=0,tot2=0;
			l=1,r=2*n;targetl=targetr=0;
			c1[++tot1]='R';c2[++tot2]='L';
			for(int i=1;i<2*n;i++)
				if(a[2*n]==a[i])
				{
					targetl=targetr=i;
					break;
				}
			r--;
			for(int i=2;i<=n;i++)
			{
				if(targetr>2*n||targetl<=0)
				{
					flag2=false;
					break;
				}
				if(a[l]==a[targetl-1]&&(l)<(targetl-1))
				{
					l++;c1[++tot1]='L';c2[++tot2]='L';targetl--;
				}
				else if(a[l]==a[targetr+1]&&(l)<(targetr+1))
				{
					l++;c1[++tot1]='L';c2[++tot2]='R';targetr++;
				}
				else if(a[r]==a[targetl-1]&&(r)>(targetl-1))
				{
					r--;c1[++tot1]='R';c2[++tot2]='L';targetl--;
				}
				else if(a[r]==a[targetr+1]&&(r)>(targetr+1))
				{
					r--;c1[++tot1]='R',c2[++tot2]='R';targetr++;
				}
				else
				{
					flag2=false;
					break;
				}
			}
			if(flag2)
			{
				reverse(c2+1,c2+1+tot2);
				for(int i=1;i<=tot1;i++)
					printf("%c",c1[i]);
				for(int i=1;i<=tot2;i++)
					printf("%c",c2[i]);
				printf("\n");
			}
		}
		if(!flag&&!flag2) printf("-1\n");
	}
	return 0;
}
2022/10/25 10:53
加载中...