CF2178D Xmas or Hysteria

题目描述

[Mass Hysteria](https://hearthstone.blizzard.com/en-us/cards/50071-mass-hysteria)(炉石传说) $\color{white}{\text{You are sus}}$ Franklin 正在策划一场圣诞袭击,他将在一个精灵村庄中施放 Mass Hysteria(集体狂乱)法术。 村庄中有 $n$ 个精灵,编号为 $1$ 到 $n$,其中第 $i$ 个精灵拥有生命值 $h_i$ 和攻击力 $a_i$。起始时,$h_i = a_i$,所有 $a_i$ 均不相同。当 $h_i > 0$ 时,精灵 $i$ 视为存活。 当 Franklin 施放 Mass Hysteria 时,过程如下反复执行: - 选择一对尚存活的不同精灵 $x$ 和 $y$(即 $h_x, h_y > 0$),其中精灵 $x$ 之前没有进行过攻击。如果已不存在这样的精灵对,则流程终止。 - 然后,精灵 $x$ 攻击精灵 $y$,$h_y$ 减少 $a_x$,并且由于反作用力,$h_x$ 也减少 $a_y$。注意 $a_x$ 和 $a_y$ 始终保持不变。 该过程会反复进行,直到无法再选择有效的精灵对为止。可以证明 Mass Hysteria 最多进行 $n$ 次迭代。 给定一个整数 $m$,请你构造一个合理的攻击序列,使得过程结束时正好有 $m$ 个精灵存活;或判断是否不存在这样的攻击序列。

输入格式

每个测试包含多个测试用例。第一行包含一个整数 $t$($1\le t\le 10^4$),表示测试用例数。每个测试用例描述如下。 每个测试用例的第一行包含两个整数 $n$ 和 $m$($2\le n\le 2\cdot 10^5,\,0\le m\le n$),分别表示村庄中精灵的数量和最后希望存活的精灵数。 第二行包含 $n$ 个整数 $a_1,a_2,\ldots,a_n$($1\le a_i\le 10^9$),表示每个精灵初始时的攻击力与生命值。 保证所有的 $a_i$ 互不相同。 保证所有用例的 $\sum n \le 2\cdot 10^{5}$。

输出格式

对于每个测试用例,如果无法让恰好 $m$ 个精灵存活,输出 $-1$。 否则,输出一组合法的攻击操作序列,格式如下: - 第一行输出一个整数 $k$($0\le k\le n$),表示 Mass Hysteria 共进行了 $k$ 次迭代。 - 接下来的 $k$ 行,每行输出两个整数 $x_i$ 和 $y_i$($1\le x_i, y_i \le n$,$x_i \ne y_i$),表示第 $i$ 次迭代中精灵 $x_i$ 攻击精灵 $y_i$。 输出序列必须满足如下条件: - 在每次攻击前,$x_i$ 和 $y_i$ 均存活,且 $x_i$ 此前未进行过攻击; - 第 $k$ 次攻击后,恰好 $m$ 个精灵存活,且不存在一对剩余存活的不同精灵 $(x, y)$ 满足 $x$ 未攻击过(即流程无法继续)。 如有多组答案,输出任意一组合法解即可。只要满足上述条件即可被判为正确。

说明/提示

在第一个测试用例中,可能的攻击序列如下: \# $x$ $y$ 攻击后生命值 攻击过的精灵 0 —— $[1, 4, 2, 3]$ $[]$ 1 $3$ $1$ $[-1, 4, 1, 3]$ $[3]$ 2 $2$ $4$ $[-1, 1, 1, -1]$ $[2, 3]$ 经过 $2$ 次攻击,只剩下精灵 $2$ 和 $3$ 存活。由于两者均已攻击过,无法继续攻击,Mass Hysteria 结束。 在第二个测试用例中,第一次攻击的合法 $(x, y)$ 只有 $(1, 2)$ 或 $(2, 1)$。无论选择哪一种,精灵 $1$ 生命值都变成 $-1$,因此无法让两个精灵同时存活在最后。注意 Mass Hysteria 至少会进行一次攻击,因为开局存在合法的精灵对。 在第六个测试用例中,最后只剩精灵 $3$ 存活。即便精灵 $3$ 从未攻击过,但由于没有其它精灵可攻击,Mass Hysteria 依然终止。 由 ChatGPT 5 翻译