CF1546A.AquaMoon and Two Arrays

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

AquaMoon and Two Arrays

题目描述

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

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

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

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

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

输入格式

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

每个测试用例的第一行包含一个整数 nn(1≤n≤1001 \leq n \leq 100)。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \dots, a_n(0≤ai≤1000 \leq a_i \leq 100)。所有 aia_i 的和不超过 100100。

第三行包含 nn 个整数 b1,b2,…,bnb_1, b_2, \dots, b_n(0≤bi≤1000 \leq b_i \leq 100)。所有 bib_i 的和不超过 100100。

输出格式

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

否则,第一行输出一个整数 mm(0≤m≤1000 \leq m \leq 100),表示操作次数。接下来输出 mm 行,每行两个整数 ii 和 jj,表示一次操作中选择的下标。

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

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

说明/提示

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

  • i=2i = 2,j=1j = 1:[1,2,3,4]→[2,1,3,4][1, 2, 3, 4] \rightarrow [2, 1, 3, 4];
  • i=3i = 3,j=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

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