CF2084C.You Soared Afar With Grace
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定两个长度为 n 的排列 a 和 b ∗。你最多可以进行 n 次如下操作:
- 选择两个下标 i 和 j(1≤i,j≤n,i=j),交换 ai 和 aj,同时交换 bi 和 bj。
判断是否可以通过这些操作使得 a 和 b 互为逆序排列。换句话说,对于每个 i=1,2,…,n,满足 ai=bn+1−i。
如果可能,输出任意一个有效的操作序列;否则输出 −1。
∗ 长度为 n 的排列是指由 1 到 n 的 n 个不同整数按任意顺序组成的数组。例如,[2,3,1,5,4] 是一个排列,但 [1,2,2] 不是排列(因为 2 在数组中出现了两次),[1,3,4] 也不是排列(因为 n=3 但数组中包含 4)。
输入格式
每个测试包含多个测试用例。第一行包含测试用例的数量 t(1≤t≤104)。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 n(2≤n≤2⋅105)——排列的长度。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤n)。
第三行包含 n 个整数 b1,b2,…,bn(1≤bi≤n)。
保证 a 和 b 都是长度为 n 的排列。
保证所有测试用例的 n 之和不超过 2⋅105。
输出格式
对于每个测试用例:
- 如果不可能满足条件,输出一行 −1。
- 否则,第一行输出一个整数 m(0≤m≤n)表示操作次数。接下来的 m 行,每行输出两个整数 i 和 j(1≤i,j≤n,i=j),表示每次操作交换的下标。如果有多个解,输出任意一个即可。
输入输出样例
输入#1
5 2 1 2 1 2 2 1 2 2 1 4 1 3 2 4 2 4 1 3 5 2 5 1 3 4 3 5 4 2 1 5 3 1 2 4 5 1 2 3 4 5
输出#1
-1 0 1 1 2 2 1 2 1 3 -1
说明/提示
- 在第二个测试用例中,b 已经是 a 的逆序排列,因此不需要操作。
- 在第三个测试用例中,执行以下操作后,b 将成为 a 的逆序排列:
- 交换 a1,a2 和 b1,b2。此时 a=[3,1,2,4],b=[4,2,1,3]。
- 在第四个测试用例中,按顺序执行以下操作后,b 将成为 a 的逆序排列:
- 交换 a1,a2 和 b1,b2。此时 a=[5,2,1,3,4],b=[5,3,4,2,1]。
- 交换 a1,a3 和 b1,b3。此时 a=[1,2,5,3,4],b=[4,3,5,2,1]。
翻译由 DeepSeek V3 完成
输入解题思路,AI测评打分。不知道怎么写?