菜鸡手写指针写挂求调
查看原帖
菜鸡手写指针写挂求调
263414
Sktic楼主2022/10/20 23:23

思路就是维护删和没有删的区间。然后一片 WA 。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
typedef long long ll;
inline int read()
{
	int x=0;
	char c=getchar();
	while(c<'0'||c>'9')
		c=getchar();
	while(c>='0'&&c<='9')
		x=x*10+(c-'0'),c=getchar();
	return x;
}
int a[maxn];
char ans[maxn];
int n;
inline int check(int a,int b)
{
	return (1<=a&&a<=2*n)&&(1<=b&&b<=2*n);
}
int main()
{
	int t=read();
	while(t--)
	{
		memset(a,0,sizeof(a));
		memset(ans,'\0',sizeof(ans));
		n=read();
		for(int i=1;i<=2*n;i++)
			a[i]=read();
		int xl=1,xr=2*n,ql=1,qr=1,cnt=1,flag=0;
		while(a[++ql]!=a[1]);
		xl++;if(ql==2)xl++;if(ql==2*n)xr--;
		qr=ql+1;ql--;
		ans[cnt]='L',ans[2*n-cnt+1]='L';cnt++;
		while(cnt<=n)
		{
			if(a[xl]==a[ql]&&xl<=ql&&check(xl,ql))
			{
				ans[cnt]='L',ans[2*n-cnt+1]='L',cnt++;
				xl++,ql--;
			}
			else if(a[xl]==a[qr]&&xl!=qr&&check(xl,qr))
			{
				ans[cnt]='L',ans[2*n-cnt+1]='R',cnt++;
				xl++,qr++;
			}
			else if(a[xr]==a[ql]&&xr!=ql&&check(xr,ql))
			{
				ans[cnt]='R',ans[2*n-cnt+1]='L',cnt++;
				xr--,ql--;
			}
			else if(a[xr]==a[qr]&&xr>=qr&&check(xr,qr))
			{
				ans[cnt]='R',ans[2*n-cnt+1]='R',cnt++;
				xr--,qr++;
			}
			else
			{
				flag=1;
				cout<<-1<<endl;
				break;
			}
		}
		if(flag==0)
		{
			for(int i=1;i<=2*n;i++)
				putchar(ans[i]);
			putchar('\n');
		}
	}
	return 0;
}


2022/10/20 23:23
加载中...