CF1558C Bottom-Tier Reversals
题目描述
你有一个排列:一个由 $1$ 到 $n$ 的互不相同整数构成的数组 $a = [a_1, a_2, \ldots, a_n]$。排列的长度 $n$ 是奇数。
你需要将该排列按升序排序。
每一步,你可以选择排列的任意一个奇数长度前缀并将其翻转。具体来说,如果 $a = [a_1, a_2, \ldots, a_n]$,你可以选择 $1$ 到 $n$ 之间的任意奇数 $p$,然后将 $a$ 变为 $[a_p, a_{p-1}, \ldots, a_1, a_{p+1}, a_{p+2}, \ldots, a_n]$。
请找出一种方法,在不超过 $\frac{5n}{2}$ 次上述翻转操作内将 $a$ 排序,或者判断是否无法做到。翻转次数不必最小。
输入格式
每组测试数据包含多个测试用例。第一行包含测试用例数 $t$($1 \le t \le 100$)。每个测试用例的描述如下。
每个测试用例的第一行包含一个整数 $n$($3 \le n \le 2021$,$n$ 为奇数),表示排列的长度。
第二行包含 $n$ 个互不相同的整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le n$),表示排列本身。
保证所有测试用例中 $n$ 的总和不超过 $2021$。
输出格式
对于每个测试用例,如果无法在不超过 $\frac{5n}{2}$ 次翻转内将给定排列排序,输出一个整数 $-1$。
否则,输出一个整数 $m$($0 \le m \le \frac{5n}{2}$),表示你操作的翻转次数,接着输出 $m$ 个整数 $p_i$($1 \le p_i \le n$,$p_i$ 为奇数),表示每次翻转的前缀长度,按操作顺序输出。
注意,$m$ 不必最小。如果有多种方案,输出任意一种均可。
说明/提示
在第一个测试用例中,排列已经有序。任意偶数次长度为 $3$ 的前缀翻转都不会改变这一事实。
在第二个测试用例中,先翻转长度为 $3$ 的前缀,排列变为 $[5, 4, 3, 2, 1]$,再翻转长度为 $5$ 的前缀,排列变为 $[1, 2, 3, 4, 5]$。
在第三个测试用例中,无法将排列排序。
由 ChatGPT 4.1 翻译