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 翻译