96pts 求助
查看原帖
96pts 求助
409437
xiongjunxiang楼主2021/11/8 19:21

第17个点TLE了

#include<bits/stdc++.h>
using namespace std;
int a[1000005],v[1000005],t,n,L,R;
int calc(int l,int r,int x,string s1,string s2){
	memset(v,0,sizeof(v));
	deque<int>q1,q2;
	for(int i=l;i<x;++i)q1.push_back(a[i]);
	for(int i=x+1;i<=r;++i)q2.push_back(a[i]);
	for(int i=2;i<=n;++i){
		if(q2.size()&&!v[q2.back()]&&(q1.size()&&q1.back()==q2.back()||q2.size()>1&&q2.front()==q2.back())){
			if(q1.size()&&q1.back()==q2.back())q1.pop_back(),s2=s2+"L";
			else q2.pop_front(),s2=s2+"R";			
			s1=s1+"R",v[q2.back()]=1,q2.pop_back();
		}		
		else if(q1.size()&&!v[q1.front()]&&(q1.size()>1&&q1.front()==q1.back()||q2.size()&&q1.front()==q2.front())){
			if(q1.size()>1&&q1.front()==q1.back())q1.pop_back(),s2=s2+"L";
			else q2.pop_front(),s2=s2+"R";
			s1=s1+"L",v[q1.front()]=1,q1.pop_front();
		}
		else return 0;
	}
	reverse(s2.begin(),s2.end());
	cout<<s1<<s2<<"\n";
	return 1;
}
main(){
	for(scanf("%d",&t);t--;){
		scanf("%d",&n);
		for(int i=1;i<=2*n;++i)scanf("%d",a+i);
		for(int i=1;i<=2*n;++i)a[i]-a[1]||(L=i),a[i]-a[2*n]||i-2*n&&(R=i);
		if(!calc(2,2*n,L,"L","L")&&!calc(1,2*n-1,R,"R","L"))puts("-1");
	}
}
2021/11/8 19:21
加载中...