32pts求调
查看原帖
32pts求调
1015347
MingDynasty楼主2025/6/16 17:49

提交记录

五颜六色

我的代码:

#include<bits/stdc++.h>
using namespace std;
int a[823232],n;
bool solve(int l1,int r1,int l2,int r2,string &ans){
	ans.clear();
	deque<int> L,R;
	for(int i=l1;i<=r1;i++) L.push_back(a[i]);
	for(int i=r2;i>=l2;i--) R.push_back(a[i]);
	string op1,op2;
	for(int i=1;i<=n-1;i++){
		if(L.size()>=2&&L.front()==L.back()){
			op1+="L";
			op2+="L";
			L.pop_front();
			L.pop_back();
		}else if(L.size()>=1&&R.size()>=1&&L.front()==R.back()){
			op1+="L";
			op2+="R";
			L.pop_front();
			R.pop_back();
		}else if(R.size()>=2&&R.front()==R.back()){
			op1+="R";
			op2+="R";
			R.pop_front();
			R.pop_back();
		}else if(R.size()>=1&&L.size()>=1&&R.front()==L.back()){
			op1+="R";
			op2+="L";
			R.pop_front();
			L.pop_back();
		}else return 0;
	}
	reverse(op2.begin(),op2.end());
	ans=op1+op2;
	return 1;
}
void solve(){
	cin>>n;
	for(int i=0;i<2*n;i++) cin>>a[i];
	int p=-1;
	for(int i=1;i<2*n;i++) if(a[i]==a[0]){
		p=i;
	}
	string ans;
	if(solve(1,p-1,p+1,2*n-1,ans)){ cout<<"L"<<ans<<"L\n";return;}
	p=-1;
	for(int i=0;i<2*n-1;i++) if(a[i]==a[2*n-1]) p=i;
	if(solve(0,p-1,p+1,2*n-2,ans)) cout<<"R"<<ans<<"L\n";
	cout<<-1<<'\n';
}
int t;
int main(){
	cin.tie(0)->sync_with_stdio(0);
	cin>>t;
	while(t--) solve();
	return 0;
}

求调,玄3关

2025/6/16 17:49
加载中...