题目名称 3621. [CSP 2021S]回文
输入输出 2021palin.in/out
难度等级 ★★☆
时间限制 1000 ms (1 s)
内存限制 512 MiB
测试数据 25
题目来源 Gravatarsyzhaoss 于2021-10-23加入
开放分组 全部用户
提交状态
分类标签
找规律 双端队列 搜索法 剪枝
查看题解 分享题解
通过:20, 提交:72, 通过率:27.78%
Gravatarlihaoze 100 1.066 s 7.31 MiB C++
Gravatar遥时_彼方 100 1.071 s 5.38 MiB C++
Gravatar00000 100 1.168 s 16.92 MiB C++
Gravatardsn 100 1.189 s 13.31 MiB C++
Gravatarsyzhaoss 100 1.192 s 4.60 MiB C++
Gravatardsn 100 1.311 s 13.31 MiB C++
Gravatarムラサメ 100 1.346 s 16.60 MiB C++
Gravatarop_组撒头屯 100 1.510 s 9.61 MiB C++
Gravatar┭┮﹏┭┮ 100 1.525 s 10.69 MiB C++
Gravatarqqqqq 100 1.585 s 18.43 MiB C++
本题关联比赛
近5年noip/csp题目回顾
关于 回文 的近10条评论(全部评论)
为什么 std::list 比 std::deque 还慢?/yiw
Gravataryrtiop
2022-10-11 00:10 2楼
两个队列,想明白后解题思路甚至比第一题简单
Gravatar遥时_彼方
2021-11-19 19:37 1楼

3621. [CSP 2021S]回文

★★☆   输入文件:2021palin.in   输出文件:2021palin.out   简单对比
时间限制:1 s   内存限制:512 MiB

【题目描述】

给定正整数 $n$ 和整数序列 $a_1,a_2,\cdots,a_{2n}$,在这 $2n$ 个数中,$1,2,\cdots,n$ 分别各出现恰好 2 次。现在进行 $2n$ 次操作,目标是创建一个长度同样为 $2n$ 的序列 $b_1,b_2,\cdots,b_{2n}$,初始时 $b$ 为空序列,每次可以进行以下两种操作之一:

  1.将序列 $a$ 的开头元素加到 $b$ 的末尾,并从 $a$ 中移除

  2.将序列 $a$ 的末尾元素加到 $b$ 的末尾,并从 $a$ 中移除

我们的目的是让 $b$ 成为一个回文数列,即令其满足对所有 $1\leq i\leq n$,有 $b_i=b_{2n+1-i}$。请你判断该目的是否能达成,如果可以,请输出字典序最小的操作方案,具体在【输出格式】中说明。

【输入格式】

每个测试点包含多组测试数据。

输入的第一行包含一个整数 $T$,表示测试数据的组数。

每组测试数据的第一行包含一个正整数 $n$,第二行包含 $2n$ 个用空格隔开的整数 $a_1,a_2,\cdots,a_{2n}$。

【输出格式】

对每个测试数据输出一行答案。

如果无法生成出回文数列,输出一行 $-1$,否则输出一行一个长度为 $2n$ 的、由字符 LR 构成的字符串(不含空格),其中 L 表示移除开头元素的操作 1,R 表示操作 2。你需要输出所有方案对应的字符串中字典序最小的一个。

字典序的比较规则如下:长度均为 $2n$ 的字符串 $s_{1..2n}$ 比 $t_{1..2n}$ 字典序小,当且仅当存在下标 $1\leq k\leq 2n$ 使得 $\forall 1\leq i<k$ 有 $s_i=t_i$ 且 $s_k<t_k$。

【样例1输入】

2
5
4 1 2 4 5 3 1 2 3 5
3
3 2 1 2 1 3

【样例1输出】

LRRLLRRRRL
‐1

【样例1解释】

在第一组数据中,生成的的$b$数列是4 5 3 1 2 2 1 3 5 4,可以看出这是一个回文数列。

另一种可能的操作方案是LRRLLRRRRR,但比答案方案的字典序要大。

【样例2】

下载

【数据规模与约定】

令$\sum n$示所有$T$组测试数据中$n$的和。

对所有测试点保证$1\leq T\leq 100,1\leq n,\sum n\leq 5\times 10^5$。

特殊性质:如果我们每次删除$a$中两个相邻且相等的数,存在一种方式将序列删空(例如 $a = [1,2,2,1]$)。

【来源】

CSP2021 提高组 Task3