CF2062G Permutation Factory

题目描述

给定两个长度为 $n$ 的排列 $p_1, p_2, \ldots, p_n$ 和 $q_1, q_2, \ldots, q_n$。每次操作中,你可以选择两个不同的整数 $1 \leq i, j \leq n$ 并交换 $p_i$ 和 $p_j$。该操作的成本为 $\min(|i - j|, |p_i - p_j|)$。 请找到使 $p_i = q_i$ 对所有 $1 \leq i \leq n$ 成立的最小总成本,并输出达成该目标的交换操作序列。 一个长度为 $n$ 的排列是由 $1$ 到 $n$ 的不同整数按任意顺序组成的数组。例如,$[2, 3, 1, 5, 4]$ 是排列,但 $[1, 2, 2]$ 不是排列($2$ 重复出现),$[1, 3, 4]$ 也不是排列(当 $n=3$ 时出现 $4$)。

输入格式

第一行输入包含一个整数 $t$($1 \leq t \leq 10^4$)——测试用例数量。 每个测试用例: - 第一行包含一个整数 $n$($2 \le n \le 100$)——排列 $p$ 和 $q$ 的长度。 - 第二行包含 $n$ 个整数 $p_1, p_2, \ldots, p_n$($1 \leq p_i \leq n$)——排列 $p$。保证 $p$ 是 $1, 2, \ldots, n$ 的排列。 - 第三行包含 $n$ 个整数 $q_1, q_2, \ldots, q_n$($1 \leq q_i \leq n$)——排列 $q$。保证 $q$ 是 $1, 2, \ldots, n$ 的排列。 保证所有测试用例的 $n^3$ 之和不超过 $10^6$。

输出格式

对于每个测试用例: - 第一行输出操作总次数 $k$($0 \le k \le n^2$)。 - 接下来 $k$ 行每行输出两个整数 $i, j$($1 \le i, j \le n$,$i \neq j$),表示按顺序执行的交换操作。 可以证明最优解的操作序列长度不会超过 $n^2$。

说明/提示

第二个测试用例中,交换 $p_1$ 和 $p_3$ 的成本为 $\min(|1 - 3|, |1 - 3|) = 2$,此时 $p$ 等于 $q$,总成本为 $2$。 第三个测试用例中,可执行以下操作: 初始时 $p = [2, 1, 4, 3]$。 1. 交换 $p_1$ 和 $p_4$,成本 $\min(|1 - 4|, |2 - 3|) = 1$,得到 $p = [3, 1, 4, 2]$。 2. 交换 $p_2$ 和 $p_4$,成本 $\min(|2 - 4|, |1 - 2|) = 1$,得到 $p = [3, 2, 4, 1]$。 3. 交换 $p_1$ 和 $p_3$,成本 $\min(|1 - 3|, |3 - 4|) = 1$,此时 $p$ 等于 $q$,总成本为 $3$。 翻译由 DeepSeek R1 完成