RT,被CCF#17卡了,民间数据#26卡了,都是第一行就错了,输出-1,十分淦
求大佬帮忙看看,不胜感激!:
#include<iostream>
using namespace std;
int t,n,a[500005],p1,p2;
char ans[500005];
bool check(int l1,int r1,int l2,int r2){
for(int i=2;i<=n;i++){
if(l1<r1&&a[l1]==a[r1]){
l1++,r1--;
ans[i]='L',ans[2*n-i+1]='L';
}
else if(l1<=r1&&l2<=r2&&a[l1]==a[l2]){
l1++,l2++;
ans[i]='L',ans[2*n-i+1]='R';
}
else if(l2<r2&&a[l2]==a[r2]){
l2++,r2--;
ans[i]='R',ans[2*n-i+1]='R';
}
else if(l1<=r1&&l2<=r2&&a[r1]==a[r2]){
r1--,r2--;
ans[i]='R',ans[2*n-i+1]='L';
}
else
return false;
}
return true;
}
int main(){
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=2*n;i++)
cin>>a[i];
for(int i=2;i<=2*n;i++)
if(a[i]==a[1]){
p1=i;
break;
}
for(int i=1;i<=2*n-1;i++)
if(a[i]==a[2*n]){
p2=i;
break;
}
if(check(2,p1-1,p1+1,2*n)){
ans[1]='L',ans[2*n]='L';
for(int i=1;i<=2*n;i++)
cout<<ans[i];
}
else if(check(1,p2-1,p2+1,2*n-1)){
ans[1]='R',ans[2*n]='L';
for(int i=1;i<=2*n;i++)
cout<<ans[i];
}
else
cout<<-1;
cout<<endl;
}
return 0;
}