#loj5712. 「BalticOI 2026」木块
「BalticOI 2026」木块
#5712. 「BalticOI 2026」木块
标签: 传统 | 时间限制: 1000 ms | 内存限制: 512 MiB |
题目描述
题目译自 BalticOI 2026 Day1「Block」
你有 个木块,它们有 种不同的颜色,排成一行。这些木块的颜色分别为 ,且所有颜色编号均在 到 之间。
若某种颜色的木块所在的平均位置恰好为 ,则称该颜色是平衡的。注意,这个数值不一定为整数。

例如,若有 个木块按上述方式排列,颜色 的平均位置为 ,颜色 的平均位置为 ,颜色 的平均位置为 。因为 ,所以颜色 是平衡的,而颜色 和颜色 则不是。
你能重新排列这些木块,使得所有颜色都是平衡的吗?
输入格式
输入的第一行包含一个整数 ,表示测试用例的数量。
接下来描述各个测试用例,每个测试用例由两行组成:
第一行包含两个整数 和 ,分别表示积木的数量和颜色的种类数。
第二行包含积木的颜色 。每种颜色至少包含一个积木。
输出格式
对于每个测试用例,若存在一种解决方案,则输出 YES,否则输出 NO。若存在解决方案,则在另一行输出一种可能的排列:即按顺序输出每个位置上的积木颜色。
样例
输入
3
7 2
1 1 1 1 2 2 2
2 2
1 2
2 1
1 1
输出
YES
1 2 2 1 1 1 2
NO
YES
1 1
在第一个测试用例的输出中,颜色 是平衡的,因为它的平均位置是 ,这等于 。类似地,颜色 的平均位置是 。因此,两种颜色都是平衡的。
在第二个测试用例中,两种可能的排列方式都不能使颜色平衡。
在第三个测试用例的输出中,颜色 的积木出现在位置 和 。平均值为 ,所以颜色 是平衡的。
数据范围与提示
对于所有输入数据,满足:
- 所有 的总和不超过
详细子任务附加限制及分值如下表所示。
| 子任务 | 附加限制 | 分值 |
|---|---|---|
| 最多只有一种颜色出现的次数为奇数 | ||
| 所有颜色出现的次数相同 | ||
| 无附加限制 |