CF2103E.Keep the Sum

省选/NOI-

通过率:0%

AC君温馨提醒

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

题目描述

给你一个长为 nn 的数列 aa 和一个整数 kk,满足 ai∈[0,k]a_i\in[0,k]。你可以执行若干次如下操作:

  • 选择 i≠ji\ne j 满足 ai+aj=ka_i+a_j=k;
  • 选择一个整数满足 −aj≤x≤ai-a_j\le x\le a_i;
  • 令 ai←ai−x,aj←aj+xa_i\leftarrow a_i-x,a_j\leftarrow a_j+x。

可以发现,操作后的数列仍然满足 ai∈[0,k]a_i\in [0,k]。

你需要判断能否通过若干次操作使得 aa 单调不降。如果可以,给出一个长为 mm 的操作序列,你需要保证 m≤3nm\le 3n。可以证明如果有解,那么存在长度 ≤3n\le 3n 的操作序列。

输入格式

多组数据。第一行一个整数 t(1≤t≤104)t(1\le t\le 10^4),表示数据组数。

对于每组数据,第一行两个整数 n,k(4≤n≤2×105,1≤k≤109)n,k(4\le n\le 2\times 10^5,1\le k\le 10^9)。
第二行 nn 个整数 a1,a2,⋯ ,an(0≤ai≤k)a_1,a_2,\cdots,a_n(0\le a_i\le k)。

保证单个测试点中 ∑n≤2×105\sum n\le 2\times 10^5。

输出格式

对于每组数据:

如果无解,输出一行一个整数 −1-1;
如果有解,第一行输出一个整数 m(0≤m≤3n)m(0\le m\le 3n),表示你给出的操作序列长度;
接下来 mm 行,每行三个整数 i,j,xi,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

说明/提示

样例解释

对于第一组数据,aa 初始时就单调不降,所以我们不需要操作。

对于第二组数据,执行一次操作 i=4,j=1,x=1i=4,j=1,x=1,a4←5−1=4a_4\leftarrow 5-1=4,a1←1+1=2a_1\leftarrow 1+1=2,序列变为 [2,2,3,4,4][2,2,3,4,4],单调不降。
需要注意还有其他的操作序列可以完成目标,只要它们的长度不超过 3n=153n=15 就会被视作正确。

对于第三组数据,不可能使得 aa 单调不降。这是因为不存在 ai+aj=7a_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

输入解题思路,AI测评打分。不知道怎么写?

首页