CF1427A Avoiding Zero
题目描述
给定一个长度为 $n$ 的整数数组 $a_1,a_2,\dots,a_n$。
你需要构造一个长度为 $n$ 的整数数组 $b_1,b_2,\dots,b_n$,使得:
- 数组 $b$ 是数组 $a$ 的一个重排,也就是说,$b$ 包含与 $a$ 相同的元素,并且每个元素出现的次数也相同。换句话说,多重集 $\{a_1,a_2,\dots,a_n\}$ 与 $\{b_1,b_2,\dots,b_n\}$ 相等。例如,如果 $a=[1,-1,0,1]$,那么 $b=[-1,1,1,0]$ 和 $b=[0,1,-1,1]$ 都是 $a$ 的重排,但 $b=[1,-1,-1,0]$ 和 $b=[1,0,2,-3]$ 不是 $a$ 的重排。
- 对于所有 $k=1,2,\dots,n$,$b$ 的前 $k$ 项的和都不为零。形式化地说,对于所有 $k=1,2,\dots,n$,都必须满足 $b_1+b_2+\cdots+b_k\not=0$。
如果不存在满足要求的数组 $b_1,b_2,\dots,b_n$,你需要输出 NO。
输入格式
每个测试点包含多组测试数据。第一行包含一个整数 $t$($1\le t \le 1000$)——表示测试用例的组数。
每组测试数据的第一行包含一个整数 $n$($1\le n\le 50$)——数组 $a$ 的长度。
每组测试数据的第二行包含 $n$ 个整数 $a_1,a_2,\dots,a_n$($-50\le a_i\le 50$)——数组 $a$ 的元素。
输出格式
对于每组测试数据,如果不存在满足要求的数组 $b_1,b_2,\dots,b_n$,输出一行 NO。
否则,输出一行 YES,接着输出一行 $n$ 个整数 $b_1,b_2,\dots,b_n$。
如果存在多个满足要求的数组 $b_1,b_2,\dots,b_n$,你可以输出任意一个。
说明/提示
第一个测试用例说明:一个满足条件的数组为 $b=[1,-2,3,-4]$。对于该数组,有:
- $b$ 的第一个元素是 $1$。
- 前两个元素的和为 $-1$。
- 前三个元素的和为 $2$。
- 前四个元素的和为 $-2$。
第二个测试用例说明:由于 $a$ 的所有元素都是 $0$,所以任何 $a$ 的重排 $b$ 也都全为 $0$,因此显然无法满足第二个条件(例如 $b_1=0$)。因此答案为 NO。
第三个测试用例说明:一个满足条件的数组为 $b=[1, 1, -1, 1, -1]$。对于该数组,有:
- $b$ 的第一个元素是 $1$。
- 前两个元素的和为 $2$。
- 前三个元素的和为 $1$。
- 前四个元素的和为 $2$。
- 前五个元素的和为 $1$。
第四个测试用例说明:一个满足条件的数组为 $b=[-40,13,40,0,-9,-31]$。对于该数组,有:
- $b$ 的第一个元素是 $-40$。
- 前两个元素的和为 $-27$。
- 前三个元素的和为 $13$。
- 前四个元素的和为 $13$。
- 前五个元素的和为 $4$。
- 前六个元素的和为 $-27$。
由 ChatGPT 4.1 翻译