RT,人麻了,在q1为一个空的队列时push_front居然RE了???求调qaq
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
int n,num[100010],b[100010];
char tmp1[100010],tmp2[100010];
deque<int>q1;
deque<int>q2;
bool found;
void work(int start_i)
{
q1.clear();
q2.clear();
int cnt=1;
tmp1[1]=start_i==1?'L':'R';
int start_num=num[start_i],end_i;
for(int i=start_i==1?2:1;i<=(start_i==1?2*n:2*n-1);i++)
if(num[i]==start_num)
{
end_i=i;
break;
}
for(int i=(start_i==1?2:1);i<=end_i-1;i++)
q1.push_back(num[i]);
for(int i=(start_i==1?2*n:2*n-1);i>=end_i+1;i--)
q2.push_back(num[i]);
while(q1.size()&&q2.size())
{
int tmp_front_1=q1.front(),tmp_front_2=q2.front();
int tmp_back_1=q1.back(),tmp_back_2=q2.back();
if(tmp_front_1==tmp_back_1&&q1.size()!=1)
{
tmp1[++cnt]='L';
tmp2[cnt]='L';
q1.pop_back();
q1.pop_front();
}
else if(tmp_front_1==tmp_back_2)
{
tmp1[++cnt]='L';
tmp2[cnt]='R';
q1.pop_front();
q2.pop_back();
}
else if(tmp_front_2==tmp_back_1)
{
tmp1[++cnt]='R';
tmp2[cnt]='L';
q2.pop_front();
q1.pop_back();
}
else if(tmp_front_2==tmp_back_2&&q2.size()>1)
{
tmp1[++cnt]='R';
tmp2[cnt]='R';
q2.pop_front();
q2.pop_back();
}
else
{
found=0;
return;
}
}
while(!q1.empty())
{
int tmp_front_1=q1.front(),tmp_back_1=q1.back();
if(tmp_front_1==tmp_back_1&&q1.size()>1)
{
tmp1[++cnt]='L';
tmp2[cnt]='L';
}
else
{
found=0;
return;
}
}
while(!q2.empty())
{
int tmp_front_2=q2.front(),tmp_back_2=q2.back();
if(tmp_front_2==tmp_back_2&&q2.size()>1)
{
tmp1[++cnt]='R';
tmp2[cnt]='R';
}
else
{
found=0;
return;
}
}
for(int i=1;i<=cnt;i++) printf("%c",tmp1[i]);
for(int i=cnt;i>=2;i--) printf("%c",tmp2[i]);
printf("L\n");
}
int main()
{
freopen("palin.in","r",stdin);
freopen("palin.out","w",stdout);
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=2*n;i++) scanf("%d",&num[i]);
found=1;
work(1);
if(found==0)
{
found=1;
work(2*n);
if(found==0)
printf("-1\n");
}
}
}