CF2237B Annoying the Ghost
题目描述
Ja the Ghost 在玩橡皮鸭。 他有 $n$ 堆橡皮鸭排成一排,第 $i$ 堆中有 $a_i$ 只鸭子。Quack the Duck 给 Ja 一个严格递增的序列 $b_1, b_2, \ldots, b_n$ 并命令他把这 $n$ 堆橡皮鸭变为这个序列。
Ja 的操作过程分为两个阶段:
1. 他可以往每一堆中加入任意数量的鸭子。具体而言,对每一堆 $i$,他可以选择一个非负整数 $x_i$,将 $a_i$ 替换为 $a_i + x_i$。
2. 他可以反复交换两堆相邻的橡皮鸭。具体而言,他可以进行如下操作若干次(可以为零次):选择一个下标 $i$,其中 $1 \le i \le n-1$,交换 $a_i$ 和 $a_{i+1}$ 的值。
如果两个阶段结束后,堆中橡皮鸭的数量恰好为序列 $b_1, b_2, \ldots, b_n$,这样的过程称为合法过程。
求所有合法过程中,第二阶段需要操作的最少次数。如果无法完成,输出 $-1$。
输入格式
每组测试包含多组数据。第一行为测试组数 $t$($1 \le t \le 2000$)。接下来依次给出每组测试数据。
每组测试数据第一行为一个整数 $n$($1 \le n \le 2000$),表示橡皮鸭堆的数量。
第二行为 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le 10^9$),表示每堆初始橡皮鸭的数量。
第三行为 $n$ 个整数 $b_1, b_2, \ldots, b_n$($1 \le b_1 < b_2 < \cdots < b_n \le 10^9$),表示目标序列。
保证所有测试数据的 $n$ 之和不超过 $2000$。
输出格式
对每组测试数据输出一行,每行一个整数——所有合法过程中第二阶段最少的操作次数。如果无法完成,输出 $-1$。
说明/提示
在第一个测试用例中,Ja 只需要进行第一阶段。他可以设 $x_1=0, x_2=1, x_3=3$,这样三堆分别变为 $1, 3, 5$。不需要交换,因此答案为 $0$。
在第二个测试用例中,Ja 需要两步操作。他可以设 $x_1=0, x_2=1, x_3=0$,此时三堆分别为 $2, 3, 1$。然后他可以进行两次交换:
$$
[2, 3, 1] \to [2, 1, 3] \to [1, 2, 3]
$$
只有一只鸭子的那堆需要从第三个位置移动到第一个位置,最少需要两次交换,所以答案为 $2$。
在第三个测试用例中,无法完成。第一堆初始有 $5$ 只鸭子,而目标序列中每个数最大为 $4$。由于 Ja 只能添加橡皮鸭,不能减少,所以无法让这堆等于目标中任意一个数。因此答案为 $-1$。
在第四个测试用例中,无需添加鸭子,只需要将橡皮鸭堆按递增序列重新排序,将需要 $15$ 次相邻交换。
在第五个测试用例中,同样不用加鸭子,最少需要 $12$ 次相邻交换。
由 ChatGPT 5 翻译