CF2084C You Soared Afar With Grace
题目描述
给定两个长度为 $n$ 的排列 $a$ 和 $b$ $^{\text{∗}}$。你最多可以进行 $n$ 次如下操作:
- 选择两个下标 $i$ 和 $j$($1 \le i, j \le n$,$i \ne j$),交换 $a_i$ 和 $a_j$,同时交换 $b_i$ 和 $b_j$。
判断是否可以通过这些操作使得 $a$ 和 $b$ 互为逆序排列。换句话说,对于每个 $i = 1, 2, \ldots, n$,满足 $a_i = b_{n + 1 - i}$。
如果可能,输出任意一个有效的操作序列;否则输出 $-1$。
$^{\text{∗}}$ 长度为 $n$ 的排列是指由 $1$ 到 $n$ 的 $n$ 个不同整数按任意顺序组成的数组。例如,$[2,3,1,5,4]$ 是一个排列,但 $[1,2,2]$ 不是排列(因为 $2$ 在数组中出现了两次),$[1,3,4]$ 也不是排列(因为 $n=3$ 但数组中包含 $4$)。
输入格式
每个测试包含多个测试用例。第一行包含测试用例的数量 $t$($1 \le t \le 10^4$)。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 $n$($2 \le n \le 2 \cdot 10^5$)——排列的长度。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le n$)。
第三行包含 $n$ 个整数 $b_1, b_2, \ldots, b_n$($1 \le b_i \le n$)。
保证 $a$ 和 $b$ 都是长度为 $n$ 的排列。
保证所有测试用例的 $n$ 之和不超过 $2 \cdot 10^5$。
输出格式
对于每个测试用例:
- 如果不可能满足条件,输出一行 $-1$。
- 否则,第一行输出一个整数 $m$($0 \le m \le n$)表示操作次数。接下来的 $m$ 行,每行输出两个整数 $i$ 和 $j$($1 \le i, j \le n$,$i \ne j$),表示每次操作交换的下标。如果有多个解,输出任意一个即可。
说明/提示
- 在第二个测试用例中,$b$ 已经是 $a$ 的逆序排列,因此不需要操作。
- 在第三个测试用例中,执行以下操作后,$b$ 将成为 $a$ 的逆序排列:
- 交换 $a_1, a_2$ 和 $b_1, b_2$。此时 $a = [3, 1, 2, 4]$,$b = [4, 2, 1, 3]$。
- 在第四个测试用例中,按顺序执行以下操作后,$b$ 将成为 $a$ 的逆序排列:
- 交换 $a_1, a_2$ 和 $b_1, b_2$。此时 $a = [5, 2, 1, 3, 4]$,$b = [5, 3, 4, 2, 1]$。
- 交换 $a_1, a_3$ 和 $b_1, b_3$。此时 $a = [1, 2, 5, 3, 4]$,$b = [4, 3, 5, 2, 1]$。
翻译由 DeepSeek V3 完成