16分,AC on #16#18#19#20和subtask,其余全部WA
显示都是“Wrong Answer.wrong answer On line * column *, read (ASCII 0), expected *.” 下载数据本机测没问题。
下附代码,思路:四个指针分别记录左右栈头和栈尾下标
#include<bits/stdc++.h>
#define N 1000005
using namespace std;
int n,a[N],ltop,lbot,rtop,rbot,pos,c;
char ans[N];
bool flag;
int main()
{
int TTTTT;cin>>TTTTT;
while(TTTTT--)
{
scanf("%d",&n);
for(int i=1;i<=2*n;i++) scanf("%d",&a[i]);//-----------------------
flag=true,ans[1]=ans[2*n]='L';pos=-1,c=1;
for(int i=2;i<=2*n;i++) if(a[i]==a[1]) {pos=i;break;}
if(pos==-1) {printf("-1\n");continue;}
ltop=2,lbot=pos-1,rtop=2*n,rbot=pos+1;
//cout<<pos<<' '<<ltop<<' '<<lbot<<' '<<rtop<<' '<<rbot<<endl;
while(1)
{
//cout<<ltop<<' '<<lbot<<' '<<rtop<<' '<<rbot<<endl;
if(ltop<lbot&&a[ltop]==a[lbot])
ltop++,lbot--,ans[++c]=ans[2*n-c+1]='L';
else if(ltop<=lbot&&rtop>=rbot&&a[ltop]==a[rtop])
ltop++,rtop--,ans[++c]='L',ans[2*n-c+1]='R';
else if(ltop<=lbot&&rtop>=rbot&&a[ltop]==a[rbot])
ltop++,rbot++,ans[++c]='L',ans[2*n-c+1]='R';
else if(ltop<=lbot&&rtop>=rbot&&a[rtop]==a[lbot])
rtop--,lbot--,ans[++c]='R',ans[2*n-c+1]='L';
else if(rtop>rbot&&a[rtop]==a[rbot])
rtop--,rbot++,ans[++c]=ans[2*n-c+1]='R';
else
{
if(!(ltop>lbot&&rtop<rbot)) flag=false;
break;
}
}
if(flag)
{
for(int i=1;i<=2*n;i++) cout<<ans[i];
cout<<endl;
continue;
}//-----------------------------------------------------------------
//cout<<"$$$$$$$$$$$";
flag=true,ans[1]='R',ans[2*n]='L';pos=-1,c=1;
for(int i=1;i<2*n;i++) if(a[i]==a[2*n]) {pos=i;break;}
if(pos==-1) {printf("-1\n");continue;}
ltop=1,lbot=pos-1,rtop=2*n-1,rbot=pos+1;
while(1)
{
//cout<<ltop<<' '<<lbot<<' '<<rtop<<' '<<rbot<<endl;
if(ltop<lbot&&a[ltop]==a[lbot])
ltop++,lbot--,ans[++c]=ans[2*n-c+1]='L';
else if(ltop<=lbot&&rtop>=rbot&&a[ltop]==a[rtop])
ltop++,rtop--,ans[++c]='L',ans[2*n-c+1]='R';
else if(ltop<=lbot&&rtop>=rbot&&a[ltop]==a[rbot])
ltop++,rbot++,ans[++c]='L',ans[2*n-c+1]='R';
else if(ltop<=lbot&&rtop>=rbot&&a[rtop]==a[lbot])
rtop--,lbot--,ans[++c]='R',ans[2*n-c+1]='L';
else if(rtop>rbot&&a[rtop]==a[rbot])
rtop--,rbot++,ans[++c]=ans[2*n-c+1]='R';
else
{
if(!(ltop>lbot&&rtop<rbot)) flag=false;
break;
}
}
if(flag)
{
for(int i=1;i<=2*n;i++) cout<<ans[i];
cout<<endl;
continue;
}
printf("-1\n");
}
return 0;
}