88pts求助
查看原帖
88pts求助
638148
liujiaxi123456楼主2023/1/16 11:56
#include<bits/stdc++.h>
using namespace std;

namespace ljx_9420yy {

	const int maxn = 5e5+5;
	int tot[maxn], T, n, l0, r0, l, r, l1, r1, l2, r2, op;
	char b[maxn];

	struct NOI {
		int num, id;
	} a[maxn];



	int main() {
		cin>> T;
		while(T--) {
			memset(tot, 0, maxn);
			op = 0;	//初始化
			cin>> n;
			for(int i=1; i<=2*n; i++)	cin>> a[i].num, a[i].id = 0;
			for(int i=1; i<=2*n; i++) {
				if(tot[a[i].num] == 0)	tot[a[i].num] = i;
				else	a[i].id = tot[a[i].num], a[tot[a[i].num]].id = i;
			}
			l0 = 2; r0 = 2*n;
			l = 1; r = 2*n;
			b[l++] = 'L'; b[r--] = 'L';
			l1 = 2; r1 = a[1].id-1;
			l2 = a[1].id+1; r2 = 2*n;
			for(int i=1; i<=n-1; i++) {	//循环2n-2次
				if(a[l0].id == r1 && l1<=r1)				b[l++] = 'L', b[r--] = 'L', l1++, r1--, l0++;
				else if(a[l0].id == l2 && l1<=r1 && l2<=r2)	b[l++] = 'L', b[r--] = 'R', l1++, l2++, l0++;
				else if(a[r0].id == r1 && l1<=r1 && l2<=r2)	b[l++] = 'R', b[r--] = 'L', r1--, r2--, r0--;
				else if(a[r0].id == l2 && l2<=r2)			b[l++] = 'R', b[r--] = 'R', l2++, r2--, r0--;
				else {op = 1; break;}
			}
			if(op == 1) {
				op = 0;
				l0 = 1; r0 = 2*n-1;
				l = 1; r = 2*n;
				b[l++] = 'R'; b[r--] = 'L';
				l1 = 1; r1 = a[2*n].id-1;
				l2 = a[2*n].id+1; r2 = 2*n-1;
				for(int i=1; i<=n-1; i++) {	//循环2n-2次
					if(a[l0].id == r1 && l1<=r1)				b[l++] = 'L', b[r--] = 'L', l1++, r1--, l0++;
					else if(a[l0].id == l2 && l1<=r1 && l2<=r2)	b[l++] = 'L', b[r--] = 'R', l1++, l2++, l0++;
					else if(a[r0].id == r1 && l1<=r1 && l2<=r2)	b[l++] = 'R', b[r--] = 'L', r1--, r2--, r0--;
					else if(a[r0].id == l2 && l2<=r2)			b[l++] = 'R', b[r--] = 'R', l2++, r2--, r0--;
					else {printf("-1\n"); op = 1; break;}
				}
			}
			if(op == 1)	continue;
			for(int i=1; i<=2*n; i++)	printf("%c", b[i]);
//			printf("%s", b);
			printf("\n");
		}
		return 0;
	}

}
int main() {
//	freopen("palin3.in", "r", stdin);
//	freopen("palin3.out", "w", stdout);
	ljx_9420yy::main();
	return 0;
}
2023/1/16 11:56
加载中...