64pts咋回事?为什么死循环?
查看原帖
64pts咋回事?为什么死循环?
519113
SeccHtigy590楼主2024/10/5 12:24

其他的测试点是tle,跑了一遍发现死循环了?为什么死循环?

#include<bits/stdc++.h>
using namespace std;
const int N=5*1e5+2;
int t,n;
int a[2*N];
int another[2*N];
char ans[2*N];
int vis[2*N];
int idx;
int f;
int x1,x2;
void search(int l,int r){	
	if(idx==n){f=1;return;}
	if(f==1)return;
	if(l>=r)return;
	if(x1<=0 || x2>2*n)return;	
	if((another[l]==x1 || another[l]==x2)&&l<=x1){
		ans[++idx]='L';
		//cerr<<idx<<"->"<<"L"<<endl;
		if(another[l]==x1){			
			ans[2*n-idx+1]='L';
			x1--;
			search(l+1,r);			
			x1++;			
		}
		else if(another[l]==x2){
			ans[2*n-idx+1]='R';
			x2++;
			search(l+1,r);
			x2--;			
		}	
		idx--;	
	}if(f==1)return;
	if((another[r]==x1 || another[r]==x2)&&r>=x2){			
		ans[++idx]='R';
		//cerr<<idx<<"->"<<"R"<<endl;	
		if(another[r]==x1){
			ans[2*n-idx+1]='L';
			x1--;
			search(l,r-1);
			x1++;			
		}
		else if(another[r]==x2){
			ans[2*n-idx+1]='R';
			x2++;
			search(l,r-1);
			x2--;			
		}	
		idx--;
	}
}void print(){
	for(int i=1;i<=2*n;i++)cout<<ans[i];
	cout<<endl;
}
int main(){
	//freopen("P7915_11.in","r",stdin);
	//freopen("answer.out","w",stdout);
	cin>>t;
	while(t--){
		idx=0;
		f=0;
		memset(vis,0,sizeof vis);
		memset(another,0,sizeof another);
		memset(ans,0,sizeof ans);	
		cin>>n;
		for(int i=1;i<=n*2;i++){
			cin>>a[i];		
			if(!vis[a[i]]){				
				vis[a[i]]=i;
			}else{
				another[vis[a[i]]]=i;
				another[i]=vis[a[i]];
			}
		}
		ans[++idx]='L';
		ans[2*n-idx+1]='L';
		x1=another[1]-1;x2=another[1]+1;				
		search(2,2*n);
		if(f==1){print();continue;}
		memset(ans,0,sizeof ans);
		idx=0;
		ans[++idx]='R';
		ans[2*n-idx+1]='L';
		x1=another[2*n]-1;x2=another[2*n]+1;
		search(1,2*n-1);		
		if(f==0)cout<<-1<<endl;
		else print();
	}
	return 0;
}

2024/10/5 12:24
加载中...