CF1427A.Avoiding Zero

传统题 时间 2000 ms 内存 256 MiB 4 尝试 1 已通过 1 标签

Avoiding Zero

题目描述

给定一个长度为 nn 的整数数组 a1,a2,…,ana_1,a_2,\dots,a_n。

你需要构造一个长度为 nn 的整数数组 b1,b2,…,bnb_1,b_2,\dots,b_n,使得:

  • 数组 bb 是数组 aa 的一个重排,也就是说,bb 包含与 aa 相同的元素,并且每个元素出现的次数也相同。换句话说,多重集 {a1,a2,…,an}\{a_1,a_2,\dots,a_n\} 与 {b1,b2,…,bn}\{b_1,b_2,\dots,b_n\} 相等。例如,如果 a=[1,−1,0,1]a=[1,-1,0,1],那么 b=[−1,1,1,0]b=[-1,1,1,0] 和 b=[0,1,−1,1]b=[0,1,-1,1] 都是 aa 的重排,但 b=[1,−1,−1,0]b=[1,-1,-1,0] 和 b=[1,0,2,−3]b=[1,0,2,-3] 不是 aa 的重排。
  • 对于所有 k=1,2,…,nk=1,2,\dots,n,bb 的前 kk 项的和都不为零。形式化地说,对于所有 k=1,2,…,nk=1,2,\dots,n,都必须满足 b1+b2+⋯+bk≠0b_1+b_2+\cdots+b_k\not=0。

如果不存在满足要求的数组 b1,b2,…,bnb_1,b_2,\dots,b_n,你需要输出 NO。

输入格式

每个测试点包含多组测试数据。第一行包含一个整数 tt(1≤t≤10001\le t \le 1000)——表示测试用例的组数。

每组测试数据的第一行包含一个整数 nn(1≤n≤501\le n\le 50)——数组 aa 的长度。

每组测试数据的第二行包含 nn 个整数 a1,a2,…,ana_1,a_2,\dots,a_n(−50≤ai≤50-50\le a_i\le 50)——数组 aa 的元素。

输出格式

对于每组测试数据,如果不存在满足要求的数组 b1,b2,…,bnb_1,b_2,\dots,b_n,输出一行 NO。

否则,输出一行 YES,接着输出一行 nn 个整数 b1,b2,…,bnb_1,b_2,\dots,b_n。

如果存在多个满足要求的数组 b1,b2,…,bnb_1,b_2,\dots,b_n,你可以输出任意一个。

说明/提示

第一个测试用例说明:一个满足条件的数组为 b=[1,−2,3,−4]b=[1,-2,3,-4]。对于该数组,有:

  • bb 的第一个元素是 11。
  • 前两个元素的和为 −1-1。
  • 前三个元素的和为 22。
  • 前四个元素的和为 −2-2。

第二个测试用例说明:由于 aa 的所有元素都是 00,所以任何 aa 的重排 bb 也都全为 00,因此显然无法满足第二个条件(例如 b1=0b_1=0)。因此答案为 NO。

第三个测试用例说明:一个满足条件的数组为 b=[1,1,−1,1,−1]b=[1, 1, -1, 1, -1]。对于该数组,有:

  • bb 的第一个元素是 11。
  • 前两个元素的和为 22。
  • 前三个元素的和为 11。
  • 前四个元素的和为 22。
  • 前五个元素的和为 11。

第四个测试用例说明:一个满足条件的数组为 b=[−40,13,40,0,−9,−31]b=[-40,13,40,0,-9,-31]。对于该数组,有:

  • bb 的第一个元素是 −40-40。
  • 前两个元素的和为 −27-27。
  • 前三个元素的和为 1313。
  • 前四个元素的和为 1313。
  • 前五个元素的和为 44。
  • 前六个元素的和为 −27-27。

由 ChatGPT 4.1 翻译

样例

4
4
1 -2 3 -4
3
0 0 0
5
1 -1 1 -1 1
6
40 -31 -9 0 13 -40
YES
1 -2 3 -4
NO
YES
1 1 -1 1 -1
YES
-40 13 40 0 -9 -31

在线编程 IDE

建议全屏模式获得最佳体验