十分淦,万花丛中一抹红
查看原帖
十分淦,万花丛中一抹红
261262
WaltVBAlston楼主2021/11/16 18:24

RT,被CCF#17卡了,民间数据#26卡了,都是第一行就错了,输出-1,十分淦

求大佬帮忙看看,不胜感激!:

#include<iostream>
using namespace std;
int t,n,a[500005],p1,p2;
char ans[500005];
bool check(int l1,int r1,int l2,int r2){
	for(int i=2;i<=n;i++){
		if(l1<r1&&a[l1]==a[r1]){
			l1++,r1--;
			ans[i]='L',ans[2*n-i+1]='L';
		}
		else if(l1<=r1&&l2<=r2&&a[l1]==a[l2]){
			l1++,l2++;
			ans[i]='L',ans[2*n-i+1]='R';
		}
		else if(l2<r2&&a[l2]==a[r2]){
			l2++,r2--;
			ans[i]='R',ans[2*n-i+1]='R';
		}
		else if(l1<=r1&&l2<=r2&&a[r1]==a[r2]){
			r1--,r2--;
			ans[i]='R',ans[2*n-i+1]='L';
		}
		else
			return false;
	}
	return true;
}
int main(){
	cin>>t;
	while(t--){
		cin>>n;
		for(int i=1;i<=2*n;i++)
			cin>>a[i];
		for(int i=2;i<=2*n;i++)
			if(a[i]==a[1]){
				p1=i;
				break;
			}
		for(int i=1;i<=2*n-1;i++)
			if(a[i]==a[2*n]){
				p2=i;
				break;
			}
		if(check(2,p1-1,p1+1,2*n)){
			ans[1]='L',ans[2*n]='L';
			for(int i=1;i<=2*n;i++)
				cout<<ans[i];
		}
		else if(check(1,p2-1,p2+1,2*n-1)){
			ans[1]='R',ans[2*n]='L';
			for(int i=1;i<=2*n;i++)
				cout<<ans[i];
		}
		else
			cout<<-1;
		cout<<endl;
	}
	return 0;
}
2021/11/16 18:24
加载中...