CF353B Two Heaps
题目描述
Valera 有 $2·n$ 个立方体,每个立方体上都写有一个从 $10$ 到 $99$ 之间的整数。他可以任意选择 $n$ 个立方体,将它们放入第一堆中,其余的立方体组成第二堆。
Valera 决定用这些立方体进行游戏。在游戏中,他会从第一堆中拿出一个立方体,并记下它上面的数字。然后再从第二堆中拿出一个立方体,将其上面的两位数字写在之前记下的两位数字的右边。最后,他就得到了一个四位数——这个四位数的前两位来自第一堆的立方体,后两位来自第二堆的立方体。
Valera 数学很好,所以他很容易计算出他能从游戏中获得不同的四位数的数量。现在的问题是:应如何将立方体分成两堆,才能使他能获得的不同四位数的数量尽可能多?
输入格式
第一行包含一个整数 $n$,满足 $1 \leq n \leq 100$。
第二行包含 $2·n$ 个用空格分隔的整数 $a_{i}$,表示每个立方体上的数字,满足 $10 \leq a_{i} \leq 99$。
输出格式
第一行输出一个整数,表示 Valera 能获得的不同四位数的最大数量。
第二行输出 $2·n$ 个数字 $b_{i}$,其中 $1 \leq b_{i} \leq 2$。这些数字表示:第 $i$ 个立方体属于第 $b_{i}$ 堆。
如果存在多种不同的最优划分方式,任意输出其中一种即可。
说明/提示
在第一个样例中,Valera 可以将第一个立方体放入第一堆,第二个立方体放入第二堆,这样他能得到数字 $1099$。如果将第二个立方体放入第一堆,第一个立方体放入第二堆,那么他能得到数字 $9910$。在两种情况下,最多都只能得到一个不同的四位数。
在第二个样例中,Valera 可以得到数字 $1313, 1345, 2413, 2445$。注意,如果他将第一个和第三个立方体放入第一堆,则只能得到 $1324$ 和 $1345$ 两个不同的数字。
由 ChatGPT 5 翻译