CF1546A AquaMoon and Two Arrays

题目描述

AquaMoon 和 Cirno 正在玩一个有趣的数组游戏。Cirno 准备了两个数组 $a$ 和 $b$,它们都包含 $n$ 个非负整数。AquaMoon 可以进行如下操作任意次(也可以不做操作): - 她选择两个下标 $i$ 和 $j$($1 \le i, j \le n$),然后将数组 $a$ 的第 $i$ 个元素减 $1$,并将第 $j$ 个元素加 $1$。操作后,$a$ 的第 $i$ 个元素变为 $a_i - 1$,第 $j$ 个元素变为 $a_j + 1$。每次操作后,数组 $a$ 的所有元素都必须保持非负。如果 $i = j$,则该操作不会改变数组 $a$。 AquaMoon 想通过若干次操作使数组 $a$ 和 $b$ 完全相等。只有当对于所有 $1 \leq i \leq n$ 都有 $a_i = b_i$ 时,两个数组才被认为是相等的。 请你帮助 AquaMoon 找出一组操作序列,使她能够完成目标;或者判断是否不可能通过上述操作将数组 $a$ 变为数组 $b$。 注意,你不需要最小化操作次数。

输入格式

输入包含多组测试数据。第一行包含一个整数 $t$($1 \leq t \leq 100$),表示测试用例的数量。 每个测试用例的第一行包含一个整数 $n$($1 \leq n \leq 100$)。 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($0 \leq a_i \leq 100$)。所有 $a_i$ 的和不超过 $100$。 第三行包含 $n$ 个整数 $b_1, b_2, \dots, b_n$($0 \leq b_i \leq 100$)。所有 $b_i$ 的和不超过 $100$。

输出格式

对于每个测试用例,如果无法通过若干次操作将数组 $a$ 变为数组 $b$,则输出一行 "-1"(不含引号)。 否则,第一行输出一个整数 $m$($0 \leq m \leq 100$),表示操作次数。接下来输出 $m$ 行,每行两个整数 $i$ 和 $j$,表示一次操作中选择的下标。 可以证明,如果存在可行解,则一定存在 $m \leq 100$ 的解。 如果有多种可行方案,你可以输出任意一种。

说明/提示

在第一个样例中,操作如下: - $i = 2$,$j = 1$:$[1, 2, 3, 4] \rightarrow [2, 1, 3, 4]$; - $i = 3$,$j = 1$:$[2, 1, 3, 4] \rightarrow [3, 1, 2, 4]$; 在第二个样例中,不可能将两个数组变为相等。 由 ChatGPT 4.1 翻译