社区讨论
AC代码(非本人)
P7915[CSP-S 2021] 回文参与者 5已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lobhbaqq
- 此快照首次捕获于
- 2023/10/29 21:00 2 年前
- 此快照最后确认于
- 2023/11/04 02:17 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
const int N=1e6+10;
inline int read(){
int f=1, x=0; char ch=getchar();
while(!isdigit(ch)) { if(ch=='-') f=-1; ch=getchar(); }
while(isdigit(ch)) { x=x*10+ch-48; ch=getchar(); }
return f*x;
}
int T, a[N], num[N], to[N], n;
int vis[N];
int stk[N], l, r;
bool dfs(int k){
if(k==n+1) return 1;
bool flag=0;
if((vis[to[l]+1]||vis[to[l]-1]||k==1)&&!vis[l]){
vis[to[l]]=k; ++l; stk[k]=1;
flag|=dfs(k+1); --l; vis[to[l]]=0;
}
if(flag) return 1;
if((vis[to[r]+1]||vis[to[r]-1]||k==1)&&!vis[r]){
vis[to[r]]=k; --r; stk[k]=2;
flag|=dfs(k+1); ++r; vis[to[r]]=0;
}
return flag;
}
signed main(void){
T=read();
while(T--){
n=read(); l=1, r=n<<1;
memset(vis, 0, sizeof vis);
memset(num, 0, sizeof num);
memset(stk, 0, sizeof stk);
memset(to, 0, sizeof to);
for(int i=1; i<=n<<1; ++i) a[i]=read();
for(int i=1; i<=n<<1; ++i){
if(!num[a[i]]) num[a[i]]=i;
else to[i]=num[a[i]], to[num[a[i]]]=i;
}
bool flag=dfs(1);
if(!flag) { puts("-1"); continue; }
l=1, r=n<<1;
for(int i=1; i<=n; ++i){
stk[i]==1 ? printf("L") : printf("R");
if(stk[i]==1) vis[to[l++]]=i;
else vis[to[r--]]=i;
}
while(l<=r){
if(vis[l]>=vis[r]) printf("L"), ++l;
else printf("R"), --r;
}
puts("");
}
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...