#arc111c. [arc111_c]Too Heavy
[arc111_c]Too Heavy
题目描述
有 个人,编号从 到 ,和 个行李,编号从 到 。第 个人的重量为 ,第 个行李的重量为 。初始时,第 个人携带第 个行李。我们希望进行以下操作零次或多次,使得每个人都携带编号与其相同的行李。
- 选择 ,交换第 个人和第 个人的行李。
然而,当一个人携带的行李的重量大于等于他自己的重量时,这个人会变得疲倦,无法参与后续的操作(也就是说,我们不能选择他作为 或 )。特别地,如果 ,第 个人将无法参与任何操作。
判断是否存在一系列操作可以达到目标,并且如果存在,构造一种满足条件且操作次数最少的操作序列。
约束条件
- 是 的一个排列。
- 输入中的所有数字都是整数。
输入
输入包含以下格式的标准输入:
输出
如果不存在一系列操作可以达到目标,则输出 -1
。否则,按照以下格式输出一系列操作:
其中, 是操作次数, 表示第 次操作中选择的人员。
如果存在多个解,任何一个都会被接受。
示例输入 1
4
3 4 8 6
5 3 1 3
3 4 2 1
示例输出 1
3
3 4
1 3
4 2
初始时,第 个人携带的行李重量分别为 ,因此没有人感到疲倦。
首先,我们选择第 和第 个人进行交换。现在,第 个人携带的行李重量分别为 ,因此暂时没有人疲倦。
其次,我们选择第 和第 个人进行交换。现在,第 个人携带的行李重量分别为 ,因此第 个人感到疲倦。
最后,我们选择第 和第 个人进行交换。现在,第 个人携带的行李重量分别为 ,因此没有人感到疲倦。
这个操作序列使得每个人都携带了正确的行李,并且是操作次数最少的,因此是有效的。
示例输入 2
4
1 2 3 4
4 3 2 1
4 3 2 1
示例输出 2
-1
无法找到一系列操作来达到目标。
示例输入 3
1
58
998244353
1
示例输出 3
0
初始状态已经达到了目标。