CF1405A Permutation Forgery
题目描述
一个长度为 $n$ 的排列是一个由 $1$ 到 $n$ 的 $n$ 个互不相同的整数组成的数组,顺序任意。例如,$[2,3,1,5,4]$ 是一个排列,但 $[1,2,2]$ 不是排列($2$ 在数组中出现了两次),$[1,3,4]$ 也不是排列($n=3$ 但数组中有 $4$)。
设 $p$ 是任意一个长度为 $n$ 的排列。我们定义排列 $p$ 的指纹 $F(p)$ 为 $p$ 中相邻元素之和组成的数组,并将其排序。更正式地,
$$
F(p) = \mathrm{sort}([p_1+p_2,\, p_2+p_3,\, \ldots,\, p_{n-1}+p_n])。
$$
例如,如果 $n=4$ 且 $p=[1,4,2,3]$,则指纹为 $F(p)=\mathrm{sort}([1+4,\,4+2,\,2+3])=\mathrm{sort}([5,6,5])=[5,5,6]$。
现在给定一个长度为 $n$ 的排列 $p$,你的任务是找到一个**不同的**排列 $p'$,使得 $F(p')=F(p)$。如果存在某个下标 $i$ 使得 $p_i \ne p'_i$,则认为 $p$ 和 $p'$ 不同。
输入格式
每个测试点包含多组测试数据。第一行包含测试组数 $t$($1 \le t \le 668$)。接下来是每组测试数据的描述。
每组测试数据的第一行包含一个整数 $n$($2 \le n \le 100$),表示排列的长度。
第二行包含 $n$ 个整数 $p_1, \ldots, p_n$($1 \le p_i \le n$)。保证 $p$ 是一个排列。
输出格式
对于每组测试数据,输出 $n$ 个整数 $p'_1, \ldots, p'_n$,表示一个满足 $p' \ne p$ 且 $F(p')=F(p)$ 的排列。
可以证明,对于每个满足输入约束的排列,解一定存在。
如果有多组解,输出任意一组均可。
说明/提示
在第一个测试用例中,$F(p)=\mathrm{sort}([1+2])=[3]$。
而 $F(p')=\mathrm{sort}([2+1])=[3]$。
在第二个测试用例中,$F(p)=\mathrm{sort}([2+1,\,1+6,\,6+5,\,5+4,\,4+3])=\mathrm{sort}([3,7,11,9,7])=[3,7,7,9,11]$。
而 $F(p')=\mathrm{sort}([1+2,\,2+5,\,5+6,\,6+3,\,3+4])=\mathrm{sort}([3,7,11,9,7])=[3,7,7,9,11]$。
在第三个测试用例中,$F(p)=\mathrm{sort}([2+4,\,4+3,\,3+1,\,1+5])=\mathrm{sort}([6,7,4,6])=[4,6,6,7]$。
而 $F(p')=\mathrm{sort}([3+1,\,1+5,\,5+2,\,2+4])=\mathrm{sort}([4,6,7,6])=[4,6,6,7]$。
由 ChatGPT 4.1 翻译