CF2103E Keep the Sum

题目描述

给你一个长为 $n$ 的数列 $a$ 和一个整数 $k$,满足 $a_i\in[0,k]$。你可以执行若干次如下操作: - 选择 $i\ne j$ 满足 $a_i+a_j=k$; - 选择一个整数满足 $-a_j\le x\le a_i$; - 令 $a_i\leftarrow a_i-x,a_j\leftarrow a_j+x$。 可以发现,操作后的数列仍然满足 $a_i\in [0,k]$。 你需要判断能否通过若干次操作使得 $a$ 单调不降。如果可以,给出一个长为 $m$ 的操作序列,你需要保证 $m\le 3n$。可以证明如果有解,那么存在长度 $\le 3n$ 的操作序列。

输入格式

多组数据。第一行一个整数 $t(1\le t\le 10^4)$,表示数据组数。 对于每组数据,第一行两个整数 $n,k(4\le n\le 2\times 10^5,1\le k\le 10^9)$。\ 第二行 $n$ 个整数 $a_1,a_2,\cdots,a_n(0\le a_i\le k)$。 保证单个测试点中 $\sum n\le 2\times 10^5$。

输出格式

对于每组数据: 如果无解,输出一行一个整数 $-1$;\ 如果有解,第一行输出一个整数 $m(0\le m\le 3n)$,表示你给出的操作序列长度;\ 接下来 $m$ 行,每行三个整数 $i,j,x$ 表示一次操作。

说明/提示

**样例解释** 对于第一组数据,$a$ 初始时就单调不降,所以我们不需要操作。 对于第二组数据,执行一次操作 $i=4,j=1,x=1$,$a_4\leftarrow 5-1=4$,$a_1\leftarrow 1+1=2$,序列变为 $[2,2,3,4,4]$,单调不降。\ 需要注意还有其他的操作序列可以完成目标,只要它们的长度不超过 $3n=15$ 就会被视作正确。 对于第三组数据,不可能使得 $a$ 单调不降。这是因为不存在 $a_i+a_j=7$,故不能执行任何操作。 对于第四组数据,数列的变化情况如下: 1. $ [\textbf{0}, 5, 3, 2, 7, 3, 1, \textbf{10}, 4, 0] $ 2. $ [0, 5, \textbf{1}, 2, \textbf{9}, 3, 1, 10, 4, 0] $ 3. $ [0, 5, 1, 2, \textbf{6}, 3, \textbf{4}, 10, 4, 0] $ 4. $ [0, 5, 1, 2, \textbf{3}, 3, 4, 10, \textbf{7}, 0] $ 5. $ [0, 5, 1, 2, 3, 3, 4, \textbf{5}, 7, \textbf{5}] $ 6. $ [0, \textbf{1}, 1, 2, 3, 3, 4, 5, 7, \textbf{9}] $ By @[chenxi2009](/user/1020063)