CF1546A.AquaMoon and Two Arrays

传统题 时间 2000 ms 内存 256 MiB 3 尝试 1 已通过 1 标签

AquaMoon and Two Arrays

题目描述

AquaMoon 和 Cirno 正在玩一个有趣的数组游戏。Cirno 准备了两个数组 aabb,它们都包含 nn 个非负整数。AquaMoon 可以进行如下操作任意次(也可以不做操作):

  • 她选择两个下标 iijj1i,jn1 \le i, j \le n),然后将数组 aa 的第 ii 个元素减 11,并将第 jj 个元素加 11。操作后,aa 的第 ii 个元素变为 ai1a_i - 1,第 jj 个元素变为 aj+1a_j + 1。每次操作后,数组 aa 的所有元素都必须保持非负。如果 i=ji = j,则该操作不会改变数组 aa

AquaMoon 想通过若干次操作使数组 aabb 完全相等。只有当对于所有 1in1 \leq i \leq n 都有 ai=bia_i = b_i 时,两个数组才被认为是相等的。

请你帮助 AquaMoon 找出一组操作序列,使她能够完成目标;或者判断是否不可能通过上述操作将数组 aa 变为数组 bb

注意,你不需要最小化操作次数。

输入格式

输入包含多组测试数据。第一行包含一个整数 tt1t1001 \leq t \leq 100),表示测试用例的数量。

每个测试用例的第一行包含一个整数 nn1n1001 \leq n \leq 100)。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n0ai1000 \leq a_i \leq 100)。所有 aia_i 的和不超过 100100

第三行包含 nn 个整数 b1,b2,,bnb_1, b_2, \dots, b_n0bi1000 \leq b_i \leq 100)。所有 bib_i 的和不超过 100100

输出格式

对于每个测试用例,如果无法通过若干次操作将数组 aa 变为数组 bb,则输出一行 "-1"(不含引号)。

否则,第一行输出一个整数 mm0m1000 \leq m \leq 100),表示操作次数。接下来输出 mm 行,每行两个整数 iijj,表示一次操作中选择的下标。

可以证明,如果存在可行解,则一定存在 m100m \leq 100 的解。

如果有多种可行方案,你可以输出任意一种。

说明/提示

在第一个样例中,操作如下:

  • i=2i = 2j=1j = 1[1,2,3,4][2,1,3,4][1, 2, 3, 4] \rightarrow [2, 1, 3, 4]
  • i=3i = 3j=1j = 1[2,1,3,4][3,1,2,4][2, 1, 3, 4] \rightarrow [3, 1, 2, 4]

在第二个样例中,不可能将两个数组变为相等。

由 ChatGPT 4.1 翻译

样例

4
4
1 2 3 4
3 1 2 4
2
1 3
2 1
1
0
0
5
4 3 2 1 0
0 1 2 3 4
2
2 1
3 1
-1
0
6
1 4
1 4
1 5
1 5
2 5
2 5

在线编程 IDE

建议全屏模式获得最佳体验