CFCF2178D.Xmas or Hysteria
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Mass Hysteria(炉石传说)
You are sus
Franklin 正在策划一场圣诞袭击,他将在一个精灵村庄中施放 Mass Hysteria(集体狂乱)法术。
村庄中有 n 个精灵,编号为 1 到 n,其中第 i 个精灵拥有生命值 hi 和攻击力 ai。起始时,hi=ai,所有 ai 均不相同。当 hi>0 时,精灵 i 视为存活。
当 Franklin 施放 Mass Hysteria 时,过程如下反复执行:
- 选择一对尚存活的不同精灵 x 和 y(即 hx,hy>0),其中精灵 x 之前没有进行过攻击。如果已不存在这样的精灵对,则流程终止。
- 然后,精灵 x 攻击精灵 y,hy 减少 ax,并且由于反作用力,hx 也减少 ay。注意 ax 和 ay 始终保持不变。
该过程会反复进行,直到无法再选择有效的精灵对为止。可以证明 Mass Hysteria 最多进行 n 次迭代。
给定一个整数 m,请你构造一个合理的攻击序列,使得过程结束时正好有 m 个精灵存活;或判断是否不存在这样的攻击序列。
输入格式
每个测试包含多个测试用例。第一行包含一个整数 t(1≤t≤104),表示测试用例数。每个测试用例描述如下。
每个测试用例的第一行包含两个整数 n 和 m(2≤n≤2⋅105,0≤m≤n),分别表示村庄中精灵的数量和最后希望存活的精灵数。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤109),表示每个精灵初始时的攻击力与生命值。
保证所有的 ai 互不相同。
保证所有用例的 ∑n≤2⋅105。
输出格式
对于每个测试用例,如果无法让恰好 m 个精灵存活,输出 −1。
否则,输出一组合法的攻击操作序列,格式如下:
- 第一行输出一个整数 k(0≤k≤n),表示 Mass Hysteria 共进行了 k 次迭代。
- 接下来的 k 行,每行输出两个整数 xi 和 yi(1≤xi,yi≤n,xi=yi),表示第 i 次迭代中精灵 xi 攻击精灵 yi。
输出序列必须满足如下条件:
- 在每次攻击前,xi 和 yi 均存活,且 xi 此前未进行过攻击;
- 第 k 次攻击后,恰好 m 个精灵存活,且不存在一对剩余存活的不同精灵 (x,y) 满足 x 未攻击过(即流程无法继续)。
如有多组答案,输出任意一组合法解即可。只要满足上述条件即可被判为正确。
输入输出样例
输入#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
说明/提示
在第一个测试用例中,可能的攻击序列如下:
# 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 依然终止。