五颜六色
我的代码:
#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关