STL deque 莫名RE
查看原帖
STL deque 莫名RE
242317
xiaofu15191楼主2024/1/21 17:26

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");
		}
	}
}
2024/1/21 17:26
加载中...