记录编号 575484 评测结果 AAAAAAAAAAAAAAAAAAAAAAAAA
题目名称 [CSP 2021S]回文 最终得分 100
用户昵称 Gravatarlihaoze 是否通过 通过
代码语言 C++ 运行时间 1.066 s
提交时间 2022-09-16 21:32:15 内存使用 7.31 MiB
显示代码纯文本
#include <bits/stdc++.h>
 
const int N = 1e6+10;
char res[N];
int n, cnt, a[N];
int q1[N], q2[N], h1, h2, t1, t2;
 
bool solve(char fst) {
    h1 = h2 = 0, t1 = t2 = 1, cnt = 2, res[1] = fst, res[n] = 'L';
    for (int i = 1; i <= n; ++ i) 
        if ((fst == 'L' && a[i] == a[1] && i != 1) || (fst == 'R' && a[i] == a[n] && i != n)) {
            for (int j = i - 1; j > 1 || (j == 1 && fst == 'R'); -- j) 
                q1[++ h1] = a[j];
            for (int j = i + 1; j < n || (j == n && fst == 'L'); ++ j) 
                q2[++ h2] = a[j];
        }
    while (h1 >= t1 || h2 >= t2) {
        if (h1 == t1 && h2 == t2 && q1[h1] == q2[h2]) {
            res[cnt] = 'L', res[cnt + 1] = 'R';
            break;
        } else if ((h1 > t1 && (q1[h1] == q1[t1] || (h2 >= t2 && q1[h1] == q2[t2]))) || (h1 == t1 && q1[h1] == q2[t2])) {
            if (h1 > t1 && q1[h1] == q1[t1]) res[n - cnt + 1] = 'L', ++ t1;
            else res[n - cnt + 1] = 'R', ++ t2;
            -- h1, res[cnt ++] = 'L';
        } else if ((h2 > t2 && (q2[h2] == q2[t2] || (h1 >= t1 && q2[h2] == q1[t1]))) || (h2 == t2 && q2[h2] == q1[t1])) {
            if (h2 > t2 && q2[h2] == q2[t2]) res[n - cnt + 1] = 'R', ++ t2;
            else res[n - cnt + 1] = 'L', ++ t1;
            -- h2, res[cnt ++] = 'R';
        } else return false;
    }
    for (int i = 1; i <= n; ++ i) 
        std::cout << res[i];
    std::cout << '\n';
    return true;
}
 
int main() {
    freopen("2021palin.in", "r", stdin); 
    freopen("2021palin.out", "w", stdout);
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int t; std::cin >> t;
    while (t --) {
        std::cin >> n, n += n;
        for (int i = 1; i <= n; ++ i)
            std::cin >> a[i];
        if (!solve('L') && !solve('R')) 
            std::cout << "-1" << '\n';
    }
    return 0;
}