求助,96分,wa一个点
查看原帖
求助,96分,wa一个点
342494
wxh666楼主2022/10/29 11:12

测试信息

代码

#include<bits/stdc++.h>
using namespace std;
int T;
int n;
int a[500713];
int bz[500713];
struct seque{
	int dl[5000713],head=1,tail=0;
	void add(int x) {dl[++tail]=x;}
	int h_c() {return dl[head];}
	int t_c() {return dl[tail];}
	void h_g() {head++;}
	void t_g() {tail--;}
	bool empty() {return head>tail?1:0;}
}q,p;
signed main()
{
	freopen("P7915_17.in","r",stdin);
	freopen("17.out","w",stdout);
	cin>>T;
	while(T--)
	{
		while(!q.empty()) q.h_g();
		while(!p.empty()) p.h_g();
		scanf("%d",&n);n*=2;
		for(int i=1;i<=n;i++) scanf("%d",&a[i]);
		//L
		bz[1]=1;bz[n]=1;
		int h=a[1];
		for(int i=2;i<=n;i++) if(h==a[i]) {h=i;break;}
		for(int i=2;i<h;i++) q.add(a[i]);
		for(int i=n;i>h;i--) p.add(a[i]);
		int cnt=2,flag=1;
		while(!q.empty()&&!p.empty())
		{
			flag=0;
			if(q.h_c()==q.t_c()&&q.head!=q.tail)
				bz[cnt]=1,bz[n-cnt+1]=1,
				q.h_g(),q.t_g(),
				flag=1;
			else
				if(q.h_c()==p.t_c())
					bz[cnt]=1,bz[n-cnt+1]=2,
					q.h_g(),p.t_g(),
					flag=1;
				else
					if(p.h_c()==q.t_c())
						bz[cnt]=2,bz[n-cnt+1]=1,
						p.h_g(),q.t_g(),
						flag=1;
					else
					if(p.h_c()==p.t_c()&&p.head!=p.tail)
						bz[cnt]=2,bz[n-cnt+1]=2,
						p.h_g(),p.t_g(),
						flag=1;
			if(flag==0) break;
			cnt++;
		}
		if(flag!=0)
		{
			if(!q.empty())
			{
				while(!q.empty())
				{
					flag=0;
					if(q.h_c()==q.t_c())
						bz[cnt]=1,bz[n-cnt+1]=1,
						q.h_g(),q.t_g(),
						flag=1;
					else
						break;
					cnt++;
				}
			}
			if(!p.empty())
			{
				while(!p.empty())
				{
					flag=0;
					if(p.h_c()==p.t_c())
						bz[cnt]=2,bz[n-cnt+1]=2,
						p.h_g(),p.t_g(),
						flag=1;
					else
						break;
					cnt++;
				}
			}
			if(flag!=0)
			{
				for(int i=1;i<=n;i++)
				{
					if(bz[i]==1)
						printf("L");
					if(bz[i]==2)
						printf("R");
					if(bz[i]==0)
						printf("E");
				}
				printf("\n");
				continue;
			}
		}
		while(!q.empty()) q.h_g();
		while(!p.empty()) p.h_g();
		//R
		bz[1]=2;bz[n]=1;
		h=a[n];
		for(int i=1;i<n;i++) if(h==a[i]) {h=i;break;}
		for(int i=1;i<h;i++) q.add(a[i]);
		for(int i=n-1;i>h;i--) p.add(a[i]);
		cnt=2,flag=1;
		while(!q.empty()&&!p.empty())
		{
			flag=0;
			printf("q->%d %d p->%d %d\n",q.h_c(),q.t_c(),p.h_c(),p.t_c());
			if(q.h_c()==q.t_c()&&q.head!=q.tail)
				bz[cnt]=1,bz[n-cnt+1]=1,
				q.h_g(),q.t_g(),
				flag=1;
			else
				if(q.h_c()==p.t_c())
					bz[cnt]=1,bz[n-cnt+1]=2,
					q.h_g(),p.t_g(),
					flag=1;
				else
					if(p.h_c()==q.t_c())
						bz[cnt]=2,bz[n-cnt+1]=1,
						p.h_g(),q.t_g(),
						flag=1;
					else
					if(p.h_c()==p.t_c()&&p.head!=p.tail)
						bz[cnt]=2,bz[n-cnt+1]=2,
						p.h_g(),p.t_g(),
						flag=1;
			if(flag==0) break;
//			cout<<"error\n";
			cnt++;
		}
		if(flag!=0)
		{
			if(!q.empty())
			{
				while(!q.empty())
				{
					flag=0;
					if(q.h_c()==q.t_c())
						bz[cnt]=1,bz[n-cnt+1]=1,
						q.h_g(),q.t_g(),
						flag=1;
					else
						break;
					cnt++;
				}
			}
			if(!p.empty())
			{
				while(!p.empty())
				{
					flag=0;
					if(p.h_c()==p.t_c())
						bz[cnt]=2,bz[n-cnt+1]=2,
						p.h_g(),p.t_g(),
						flag=1;
					else
						break;
					cnt++;
				}
			}
			if(flag!=0)
			{
				for(int i=1;i<=n;i++)
				{
					if(bz[i]==1)
						printf("L");
					if(bz[i]==2)
						printf("R");
					if(bz[i]==0)
						printf("E");
				}
				printf("\n");
			}
		}
		if(flag==0)
			printf("-1\n");
	}
	return 0;
}
/*

1
10
4 9 3 10 10 1 4 2 7 6 8 5 9 3 1 5 8 6 7 2

*/
2022/10/29 11:12
加载中...