CFCF2178D.Xmas or Hysteria

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Mass Hysteria(炉石传说)

You are sus\color{white}{\text{You are sus}}

Franklin 正在策划一场圣诞袭击,他将在一个精灵村庄中施放 Mass Hysteria(集体狂乱)法术。

村庄中有 nn 个精灵,编号为 11nn,其中第 ii 个精灵拥有生命值 hih_i 和攻击力 aia_i。起始时,hi=aih_i = a_i,所有 aia_i 均不相同。当 hi>0h_i > 0 时,精灵 ii 视为存活。

当 Franklin 施放 Mass Hysteria 时,过程如下反复执行:

  • 选择一对尚存活的不同精灵 xxyy(即 hx,hy>0h_x, h_y > 0),其中精灵 xx 之前没有进行过攻击。如果已不存在这样的精灵对,则流程终止。
  • 然后,精灵 xx 攻击精灵 yyhyh_y 减少 axa_x,并且由于反作用力,hxh_x 也减少 aya_y。注意 axa_xaya_y 始终保持不变。

该过程会反复进行,直到无法再选择有效的精灵对为止。可以证明 Mass Hysteria 最多进行 nn 次迭代。

给定一个整数 mm,请你构造一个合理的攻击序列,使得过程结束时正好有 mm 个精灵存活;或判断是否不存在这样的攻击序列。

输入格式

每个测试包含多个测试用例。第一行包含一个整数 tt1t1041\le t\le 10^4),表示测试用例数。每个测试用例描述如下。

每个测试用例的第一行包含两个整数 nnmm2n2105,0mn2\le n\le 2\cdot 10^5,\,0\le m\le n),分别表示村庄中精灵的数量和最后希望存活的精灵数。

第二行包含 nn 个整数 a1,a2,,ana_1,a_2,\ldots,a_n1ai1091\le a_i\le 10^9),表示每个精灵初始时的攻击力与生命值。

保证所有的 aia_i 互不相同。

保证所有用例的 n2105\sum n \le 2\cdot 10^{5}

输出格式

对于每个测试用例,如果无法让恰好 mm 个精灵存活,输出 1-1

否则,输出一组合法的攻击操作序列,格式如下:

  • 第一行输出一个整数 kk0kn0\le k\le n),表示 Mass Hysteria 共进行了 kk 次迭代。
  • 接下来的 kk 行,每行输出两个整数 xix_iyiy_i1xi,yin1\le x_i, y_i \le nxiyix_i \ne y_i),表示第 ii 次迭代中精灵 xix_i 攻击精灵 yiy_i

输出序列必须满足如下条件:

  • 在每次攻击前,xix_iyiy_i 均存活,且 xix_i 此前未进行过攻击;
  • kk 次攻击后,恰好 mm 个精灵存活,且不存在一对剩余存活的不同精灵 (x,y)(x, y) 满足 xx 未攻击过(即流程无法继续)。

如有多组答案,输出任意一组合法解即可。只要满足上述条件即可被判为正确。

输入输出样例

  • 输入#1

    7
    4 2
    1 4 2 3
    2 2
    6 7
    3 0
    1 2 3
    3 1
    1 2 3
    3 2
    1 2 3
    4 1
    2 3 4 5
    6 0
    998244353 1000000000 314159265 676767677 999999999 987654321

    输出#1

    2
    3 1
    2 4
    -1
    2
    3 2
    1 3
    2
    1 2
    3 2
    -1
    2
    1 4
    4 2
    4
    3 1
    2 5
    6 1
    4 2

说明/提示

在第一个测试用例中,可能的攻击序列如下:

# xx yy 攻击后生命值 攻击过的精灵
0 —— [1,4,2,3][1, 4, 2, 3] [][]
1 33 11 [1,4,1,3][-1, 4, 1, 3] [3][3]
2 22 44 [1,1,1,1][-1, 1, 1, -1] [2,3][2, 3]

经过 22 次攻击,只剩下精灵 2233 存活。由于两者均已攻击过,无法继续攻击,Mass Hysteria 结束。

在第二个测试用例中,第一次攻击的合法 (x,y)(x, y) 只有 (1,2)(1, 2)(2,1)(2, 1)。无论选择哪一种,精灵 11 生命值都变成 1-1,因此无法让两个精灵同时存活在最后。注意 Mass Hysteria 至少会进行一次攻击,因为开局存在合法的精灵对。

在第六个测试用例中,最后只剩精灵 33 存活。即便精灵 33 从未攻击过,但由于没有其它精灵可攻击,Mass Hysteria 依然终止。

首页