社区讨论

96pts 求助

P7915[CSP-S 2021] 回文参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lobdwam5
此快照首次捕获于
2023/10/29 19:24
2 年前
此快照最后确认于
2023/11/04 01:05
2 年前
查看原帖
第17个点TLE了
CPP
#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");
	}
}

回复

1 条回复,欢迎继续交流。

正在加载回复...