记录编号 576486 评测结果 AAAAAAAAAAAAAAAAAAAAAAAAA
题目名称 [CSP 2021S]回文 最终得分 100
用户昵称 Gravataryrtiop 是否通过 通过
代码语言 C++ 运行时间 1.637 s
提交时间 2022-10-10 20:15:48 内存使用 7.81 MiB
显示代码纯文本
#include <bits/stdc++.h>

const int maxn = 1e6 + 5;
int a[maxn],n,m;
std::deque<int> q[2];
char ans[maxn],s[maxn];

void chkmax() {
	for(int i = 1;i <= m;++ i) {
		if(ans[i] > s[i]) {
			std::swap(ans , s);
			return ;
		}
		if(ans[i] < s[i])return ;
	}
	return ;
}

void GetLeft() {
	q[0].clear();
	q[1].clear();
	
	bool flag = false;
	for(int i = 2;i <= m;++ i) {
		if(a[i] == a[1]) {
			flag = true;
			continue ;
		}
		if(!flag)q[0].push_back(a[i]);
		else q[1].push_front(a[i]);
	}
	
	s[1] = s[m] = 'L';
	return ;
}

void GetRight() {
	q[0].clear();
	q[1].clear();
	
	bool flag = false;
	for(int i = m - 1;i;-- i) {
		if(a[i] == a[m]) {
			flag = true;
			continue ;
		}
		if(!flag)q[1].push_back(a[i]);
		else q[0].push_front(a[i]);
	}
	
	s[1] = 'R';
	s[m] = 'L';
	return ;
}

void solve() {
	for(int i = 2;i <= n;++ i) {
		if(q[0].empty()) {
			if(q[1].front() != q[1].back())return ;
			s[i] = s[m - i + 1] = 'R';
			q[1].pop_front();
			q[1].pop_back();
			continue ;
		}
		else if(q[1].empty()) {
			if(q[0].front() != q[0].back())return ;
			s[i] = s[m - i + 1] = 'L';
			q[0].pop_front();
			q[0].pop_back();
			continue ;
		}
		else if(q[0].size() > 1&&q[0].front() == q[0].back()) {
			s[i] = s[m - i + 1] = 'L';
			q[0].pop_front();
			q[0].pop_back();
			continue ;
		}
		else if(q[0].front() == q[1].back()) {
			s[i] = 'L';
			s[m - i + 1] = 'R';
			q[0].pop_front();
			q[1].pop_back();
			continue ;
		}
		else if(q[1].front() == q[0].back()) {
			s[i] = 'R';
			s[m - i + 1] = 'L';
			q[0].pop_back();
			q[1].pop_front();
			continue ;
		}
		else if(q[1].size() > 1&&q[1].front() == q[1].back()) {
			s[i] = s[m - i + 1] = 'R';
			q[1].pop_front();
			q[1].pop_back();
			continue ;
		}
		else return ;
	}
	
	chkmax();
	return ;
}

void work() {
	scanf("%d",&n);
	m = n << 1;
	for(int i = 1;i <= m;++ i)
		scanf("%d",&a[i]),ans[i] = 'R';
		
	GetLeft();
	solve();
	GetRight();
	solve();
	
	int cnt = 0;
	for(int i = 1;i <= m;++ i)
		cnt += ans[i] == 'R';
	if(cnt == m)printf("-1");
	else 
		for(int i = 1;i <= m;++ i)putchar(ans[i]);
	puts("");
	return ;
}

int main() {
	freopen("2021palin.in","r",stdin);
	freopen("2021palin.out","w",stdout);
	int T;
	scanf("%d",&T);
	while(T --)work();
	return 0;
}