CF1102B Array K-Coloring

题目描述

给定一个由 $n$ 个整数组成的数组 $a$。 你需要用 $k$ 种颜色对该数组进行染色,要求满足以下条件: - 数组中的每个元素都必须被染上某种颜色; - 对于每种颜色 $i$($1 \le i \le k$),数组中至少有一个元素被染成第 $i$ 种颜色; - 对于每种颜色 $i$,所有被染成第 $i$ 种颜色的元素必须互不相同。 显然,这样的染色方案可能不存在。如果不存在,输出 "NO"。否则,输出 "YES" 以及任意一种满足上述条件的染色方案(即 $c_1, c_2, \dots, c_n$,其中 $1 \le c_i \le k$,$c_i$ 表示第 $i$ 个元素的颜色)。如果有多种方案,可以输出任意一种。

输入格式

输入的第一行包含两个整数 $n$ 和 $k$($1 \le k \le n \le 5000$),分别表示数组 $a$ 的长度和颜色的数量。 第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($1 \le a_i \le 5000$),表示数组 $a$ 的元素。

输出格式

如果不存在满足条件的染色方案,输出 "NO"。否则,输出 "YES" 和任意一种满足条件的染色方案(即 $c_1, c_2, \dots, c_n$,其中 $1 \le c_i \le k$,$c_i$ 表示第 $i$ 个元素的颜色)。如果有多种方案,可以输出任意一种。

说明/提示

在第一个样例中,答案 $2~ 1~ 2~ 1$ 也是可行的。 在第二个样例中,答案 $1~ 1~ 1~ 2~ 2$ 也是可行的。 对于这两个样例,还存在其他可行的答案。 由 ChatGPT 4.1 翻译