记录编号 |
576486 |
评测结果 |
AAAAAAAAAAAAAAAAAAAAAAAAA |
题目名称 |
[CSP 2021S]回文 |
最终得分 |
100 |
用户昵称 |
yrtiop |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.637 s |
提交时间 |
2022-10-10 20:15:48 |
内存使用 |
7.81 MiB |
显示代码纯文本
#include <bits/stdc++.h>
const int maxn = 1e6 + 5;
int a[maxn],n,m;
std::deque<int> q[2];
char ans[maxn],s[maxn];
void chkmax() {
for(int i = 1;i <= m;++ i) {
if(ans[i] > s[i]) {
std::swap(ans , s);
return ;
}
if(ans[i] < s[i])return ;
}
return ;
}
void GetLeft() {
q[0].clear();
q[1].clear();
bool flag = false;
for(int i = 2;i <= m;++ i) {
if(a[i] == a[1]) {
flag = true;
continue ;
}
if(!flag)q[0].push_back(a[i]);
else q[1].push_front(a[i]);
}
s[1] = s[m] = 'L';
return ;
}
void GetRight() {
q[0].clear();
q[1].clear();
bool flag = false;
for(int i = m - 1;i;-- i) {
if(a[i] == a[m]) {
flag = true;
continue ;
}
if(!flag)q[1].push_back(a[i]);
else q[0].push_front(a[i]);
}
s[1] = 'R';
s[m] = 'L';
return ;
}
void solve() {
for(int i = 2;i <= n;++ i) {
if(q[0].empty()) {
if(q[1].front() != q[1].back())return ;
s[i] = s[m - i + 1] = 'R';
q[1].pop_front();
q[1].pop_back();
continue ;
}
else if(q[1].empty()) {
if(q[0].front() != q[0].back())return ;
s[i] = s[m - i + 1] = 'L';
q[0].pop_front();
q[0].pop_back();
continue ;
}
else if(q[0].size() > 1&&q[0].front() == q[0].back()) {
s[i] = s[m - i + 1] = 'L';
q[0].pop_front();
q[0].pop_back();
continue ;
}
else if(q[0].front() == q[1].back()) {
s[i] = 'L';
s[m - i + 1] = 'R';
q[0].pop_front();
q[1].pop_back();
continue ;
}
else if(q[1].front() == q[0].back()) {
s[i] = 'R';
s[m - i + 1] = 'L';
q[0].pop_back();
q[1].pop_front();
continue ;
}
else if(q[1].size() > 1&&q[1].front() == q[1].back()) {
s[i] = s[m - i + 1] = 'R';
q[1].pop_front();
q[1].pop_back();
continue ;
}
else return ;
}
chkmax();
return ;
}
void work() {
scanf("%d",&n);
m = n << 1;
for(int i = 1;i <= m;++ i)
scanf("%d",&a[i]),ans[i] = 'R';
GetLeft();
solve();
GetRight();
solve();
int cnt = 0;
for(int i = 1;i <= m;++ i)
cnt += ans[i] == 'R';
if(cnt == m)printf("-1");
else
for(int i = 1;i <= m;++ i)putchar(ans[i]);
puts("");
return ;
}
int main() {
freopen("2021palin.in","r",stdin);
freopen("2021palin.out","w",stdout);
int T;
scanf("%d",&T);
while(T --)work();
return 0;
}