玄关52pts求调,本地跑的没问题
查看原帖
玄关52pts求调,本地跑的没问题
1173481
xjm114514楼主2024/10/4 17:27
#include<bits/stdc++.h>
using namespace std;
int n;
int T;
int a[1000099];
int see(){
	for(int i=2;i<=n*2;i++) if(a[1]==a[i]) return i;
}
deque<int> c;
deque<int> d;
bool o;
char ans[1000099];
int cnt;
void check(){
	c.clear();
	d.clear();
	for(int i=see()-1;i>=2;i--) c.push_back(a[i]);
	for(int i=see()+1;i<=2*n;i++) d.push_back(a[i]);
	while(!c.empty() or !d.empty()){
//		cout << "dp1:" <<endl;
//		for(int i=0;i<c.size();i++) cout << c[i] << ' ';
//		cout << endl;
//		cout << "dq2:" << endl;
//		for(int i=0;i<d.size();i++) cout << d[i] << ' ';
//		cout << endl;
		if(c.empty()){
			if(d.front()==d.back()){
				ans[++cnt]='R';
				ans[2*n-cnt+1]='R';
				d.pop_front();
				d.pop_back();
			}else{
				o=1;
				return;
			}
		}else if(d.empty()){
			if(c.front()==c.back()){
				ans[++cnt]='L';
				ans[2*n-cnt+1]='L';
				c.pop_back();
				c.pop_front();
			}else{
				o=1;
				return;
			}
		}else if(c.back()==c.front() and c.size()>1){
			ans[++cnt]='L';
			ans[2*n-cnt+1]='L';
			c.pop_back();
			c.pop_front();
		}else if(d.back()==d.front() and d.size()>1){
			ans[++cnt]='R';
			ans[2*n-cnt+1]='R';
			d.pop_back();
			d.pop_front();
		}else if(c.back()==d.front()){
			ans[++cnt]='L';
			ans[2*n-cnt+1]='R';
			c.pop_back();
			d.pop_front();
		}else if(c.front()==d.back()){
			ans[++cnt]='R';
			ans[2*n-cnt+1]='L';
			c.pop_front();
			d.pop_back();
		}else{
			o=1;
			return;
		}
	}
	o=0;
}
void check1(){
	c.clear();
	d.clear();
	for(int i=see()-1;i>=2;i--) c.push_back(a[i]);
	for(int i=see()+1;i<=2*n;i++) d.push_back(a[i]);
	while(!c.empty() or !d.empty()){
//		cout << "dp1:" <<endl;
//		for(int i=0;i<c.size();i++) cout << c[i] << ' ';
//		cout << endl;
//		cout << "dq2:" << endl;
//		for(int i=0;i<d.size();i++) cout << d[i] << ' ';
//		cout << endl;
		if(c.empty()){
			if(d.front()==d.back()){
				ans[++cnt]='L';
				ans[2*n-cnt+1]='L';
				d.pop_front();
				d.pop_back();
			}else{
				o=1;
				return;
			}
		}else if(d.empty()){
			if(c.front()==c.back()){
				ans[++cnt]='R';
				ans[2*n-cnt+1]='R';
				c.pop_back();
				c.pop_front();
			}else{
				o=1;
				return;
			}
		}else if(c.back()==c.front() and c.size()>1){
			ans[++cnt]='R';
			ans[2*n-cnt+1]='R';
			c.pop_back();
			c.pop_front();
		}else if(d.back()==d.front() and d.size()>1){
			ans[++cnt]='L';
			ans[2*n-cnt+1]='L';
			d.pop_back();
			d.pop_front();
		}else if(c.back()==d.front()){
			ans[++cnt]='R';
			ans[2*n-cnt+1]='L';
			c.pop_back();
			d.pop_front();
		}else if(c.front()==d.back()){
			ans[++cnt]='L';
			ans[2*n-cnt+1]='R';
			c.pop_front();
			d.pop_back();
		}else{
			o=1;
			return;
		}
	}
	o=0;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> T;
	while(T--){
		cin >> n;
		for(int i=1;i<=n*2;i++) cin >> a[i];
		memset(ans,0,sizeof(ans));
		cnt=0;
		ans[++cnt]='L';
		ans[2*n-cnt+1]='L';
		o=0;
		check();
		if(o){
			memset(ans,0,sizeof(ans));
			cnt=0;
			ans[++cnt]='R';
			ans[2*n-cnt+1]='L';
			reverse(a+1,a+1+2*n);
			check1();
		}
		if(o){
			cout << "-1" << endl;
		}else {
			for(int i=1;i<=2*n;i++) cout << ans[i];
			cout << endl;
		}
	}
	return 0;
}
2024/10/4 17:27
加载中...