CF2267B Fashionable Array
题目描述
一个数组的众数是指数组中出现次数最多的数字。如果有多个数字出现次数相同且为最大次数,众数取其中最大的一个。例如,数组 $[1, 1, 2]$ 的众数是 $1$,数组 $[3, 4]$ 的众数是 $4$。
给定一个包含 $n$ 个整数的数组 $a$,你可以任意重排数组 $a$ 的顺序。你的任务是重新排列数组 $a$,使得数组所有前缀的众数之和最大。
例如,数组 $[2, 3, 2]$ 可以重排为 $[3, 2, 2]$,则所有前缀的众数之和计算如下:
- 长度为 $1$ 的前缀是 $[3]$,众数是 $3$。
- 长度为 $2$ 的前缀是 $[3, 2]$,众数是 $3$。
- 长度为 $3$ 的前缀是 $[3, 2, 2]$,众数是 $2$。
因此,众数之和为 $3+3+2=8$。可以证明,对于这种排列方法,答案是最大的。
输入格式
每个测试包含多组测试用例。第一行包含测试用例数量 $t$($1 \le t \le 500$)。每组测试用例的数据描述如下。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 100$),表示数组的长度。
每个测试用例的第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le 100$),表示数组中的元素。
输出格式
对于每个测试用例,输出一个新数组,使得所有前缀的众数之和最大。如果存在多种最优方案,输出其中任意一种即可。
说明/提示
第一个测试用例已在题面中描述。
对于第二个测试用例,一种可行的排列方式是 $[4, 4, 3, 2, 1, 1]$。每个前缀的众数都是 $4$。
对于第三个测试用例,排列 $[4, 1, 3, 2, 2]$ 是有效答案。每个前缀的众数如下:
- 长度为 $1$ 的前缀是 $[4]$,众数是 $4$。
- 长度为 $2$ 的前缀是 $[4, 1]$,众数是 $4$。
- 长度为 $3$ 的前缀是 $[4, 1, 3]$,众数是 $4$。
- 长度为 $4$ 的前缀是 $[4, 1, 3, 2]$,众数是 $4$。
- 长度为 $5$ 的前缀是 $[4, 1, 3, 2, 2]$,众数是 $2$。
所以众数之和为 $4+4+4+4+2=18$。可以证明,这种方案可以使众数之和最大。
由 ChatGPT 5 翻译