总是在后面输出ASCII 0,求助。
查看原帖
总是在后面输出ASCII 0,求助。
477118
Noby_Gld楼主2021/11/16 12:56

实在改不出来。

#include<bits/stdc++.h>
using namespace std;
int T,n,a[1000010],tot,pp;
char sum[1000010],ans[1000010];
deque<int>p;
deque<int>q;
void cheak(){
	while(1){
		if(p.empty()&&q.empty()) break;
		if(q.empty()){
			if(p.front()!=p.back()){
				pp=1;
				return;
			}
			sum[++tot]=sum[n*2-tot+1]='L';
			p.pop_front();
			p.pop_back();
			continue;
		}
		if(p.empty()){
			if(q.front()!=q.back()){
				pp=1;
				return;
			}
			sum[++tot]='R';
			sum[n*2-tot+1]='R';
			q.pop_back();
			q.pop_front();
			continue;
		}
		if(p.front()==p.back()&&p.size()>1){
			sum[++tot]='L';
			sum[n*2-tot+1]='L';
			p.pop_back();
			p.pop_front();
			continue;
		}
		if(p.front()==q.back()){
			sum[++tot]='L';
			sum[n*2-tot+1]='R';
			p.pop_front();
			q.pop_back();
			continue;
		}
		if(q.front()==q.back()&&q.size()>1){
			sum[++tot]='R';
			sum[n*2-tot+1]='R';
			q.pop_back();
			q.pop_front();
			continue;
		}
		if(q.front()==p.back()){
			sum[++tot]='R';
			sum[n*2-tot+1]='L';
			q.pop_front();
			p.pop_back();
			continue;
		}
		pp=1;
		break;
	}
}
bool cal(){
	int ww=1;
	while(ans[ww]==sum[ww]&&ww<=2*n) ww++;
	return sum[ww]<ans[ww];
}
int main(){
	cin>>T;
	while(T--!=0){
		cin>>n;
		int x,y;
		ans[1]='Z';
		for(int i=1;i<=2*n;i++){
			cin>>a[i];
			if(a[i]==a[1]&&i!=1) x=i;
		}
		for(int i=1;i<2*n;i++){
			if(a[i]==a[2*n]){
				y=i;
				break;
			}
		}
		tot=0,pp=0;
		sum[++tot]=sum[2*n]='L';
		for(int i=2;i<x;i++) p.push_back(a[i]);
		for(int i=2*n;i>x;i--) q.push_back(a[i]);
		cheak();
		p.clear();
		q.clear();
		if(pp==0&&cal()){
			for(int i=1;i<=2*n;i++) ans[i]=sum[i];
		}
		tot=0,pp=0;
		sum[++tot]='R';
		sum[2*n]='L';
		for(int i=1;i<y;i++) p.push_back(a[i]);
		for(int i=2*n-1;i>y;i--) q.push_back(a[i]);
		cheak();
		p.clear();
		q.clear();
		if(pp==0&&cal()){
			for(int i=1;i<=2*n;i++) ans[i]=sum[i];
		}
		if(ans[1]=='Z'){
			cout<<"-1"<<endl;
			continue;
		}
		for(int i=1;i<=2*n;i++) printf("%c",ans[i]);
		cout<<endl;
	}
	return 0;
}
2021/11/16 12:56
加载中...