CF2103E.Keep the Sum
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给你一个长为 n 的数列 a 和一个整数 k,满足 ai∈[0,k]。你可以执行若干次如下操作:
- 选择 i=j 满足 ai+aj=k;
- 选择一个整数满足 −aj≤x≤ai;
- 令 ai←ai−x,aj←aj+x。
可以发现,操作后的数列仍然满足 ai∈[0,k]。
你需要判断能否通过若干次操作使得 a 单调不降。如果可以,给出一个长为 m 的操作序列,你需要保证 m≤3n。可以证明如果有解,那么存在长度 ≤3n 的操作序列。
输入格式
多组数据。第一行一个整数 t(1≤t≤104),表示数据组数。
对于每组数据,第一行两个整数 n,k(4≤n≤2×105,1≤k≤109)。
第二行 n 个整数 a1,a2,⋯,an(0≤ai≤k)。
保证单个测试点中 ∑n≤2×105。
输出格式
对于每组数据:
如果无解,输出一行一个整数 −1;
如果有解,第一行输出一个整数 m(0≤m≤3n),表示你给出的操作序列长度;
接下来 m 行,每行三个整数 i,j,x 表示一次操作。
输入输出样例
输入#1
4 5 100 1 2 3 4 5 5 6 1 2 3 5 4 5 7 7 1 5 3 1 10 10 2 5 3 2 7 3 1 8 4 0
输出#1
0 1 4 1 1 -1 6 1 8 2 3 5 2 5 7 3 5 9 3 8 10 5 2 10 4
说明/提示
样例解释
对于第一组数据,a 初始时就单调不降,所以我们不需要操作。
对于第二组数据,执行一次操作 i=4,j=1,x=1,a4←5−1=4,a1←1+1=2,序列变为 [2,2,3,4,4],单调不降。
需要注意还有其他的操作序列可以完成目标,只要它们的长度不超过 3n=15 就会被视作正确。
对于第三组数据,不可能使得 a 单调不降。这是因为不存在 ai+aj=7,故不能执行任何操作。
对于第四组数据,数列的变化情况如下:
- $ [\textbf{0}, 5, 3, 2, 7, 3, 1, \textbf{10}, 4, 0] $
- $ [0, 5, \textbf{1}, 2, \textbf{9}, 3, 1, 10, 4, 0] $
- $ [0, 5, 1, 2, \textbf{6}, 3, \textbf{4}, 10, 4, 0] $
- $ [0, 5, 1, 2, \textbf{3}, 3, 4, 10, \textbf{7}, 0] $
- $ [0, 5, 1, 2, 3, 3, 4, \textbf{5}, 7, \textbf{5}] $
- $ [0, \textbf{1}, 1, 2, 3, 3, 4, 5, 7, \textbf{9}] $
By @chenxi2009
输入解题思路,AI测评打分。不知道怎么写?