IOI 2019 主办方计划向所有参赛者发放 T 恤。这个计划中最具挑战性的部分是装箱过程。
有 $n$ 件 T 恤,编号从 $0$ 到 $n - 1$。每件 T 恤 $i$ 有一个体积(尺码)$A[i]$,它是一个不超过 $10$ 的正整数(对应 XXXS, XXS, XS, S, M, L, XL, XXL, XXXL, XXXXL)。有 $k$ 个箱子可用于装 T 恤,编号从 $0$ 到 $k - 1$。每个箱子的容量为 $20$,因此放入每个箱子中的 T 恤总体积不能超过 $20$。当然,为了让装箱更容易,总是可以选择购买更多的箱子。
一个装箱方案可以用一个由 $n$ 个整数组成的数组 $P$ 来表示,其中 $P[i]$ 表示编号为 $i$ 的 T 恤应该放入的箱子编号。
给你每件 T 恤的体积。你的任务是帮助 IOI 2019 装箱,使得需要尽可能少的额外箱子(理想情况下,不需要额外箱子)。
实现细节
这是一个提交答案型(output-only)任务,有部分分。你将获得 $10$ 个输入文件,每个文件包含整数 $n$、$k$ 以及由 $n$ 个整数组成的数组 $A$。对于每个输入文件,你应该提交一个包含装箱方案的输出文件。对于每个输出文件,你将根据你的装箱方案的得分获得分数。
你不需要为这个任务提交任何源代码。
输入格式
输入格式如下:
- 第 1 行:$n \quad k$
- 第 2 行:$A[0] \quad A[1] \quad \dots \quad A[n - 1]$(体积)
输出格式
输出必须符合以下格式:
- 第 1 行:$l$(需要的箱子总数)
- 第 2 行:$P[0] \quad P[1] \quad \dots \quad P[n - 1]$(装箱方案)
数据范围
- $1 \le n, k \le 100\,000$
- $1 \le A[i] \le 10$(对于 $0 \le i \le n - 1$)
评分方式
如果满足以下所有条件,则认为输出文件是有效的:
- 输出必须符合描述的格式。
- $0 \le P[i] \le l - 1$(对于所有满足 $0 \le i \le n - 1$ 的 $i$)。
- 分配给每个箱子的 T 恤总体积不能超过 $20$。
如果你的输出对于某个测试点无效,你该测试点的得分将为 $0$。否则,设 $R$ 为 $k / l$。你的得分将按如下方式计算:
| 条件 | 得分 |
|---|---|
| $R \le 0.75$ | $8R/3$ |
| $0.75 < R < 1$ | $1 + 9^{4(R-0.75)}$ |
| $1 \le R$ | $10$ |
对于每个测试点,都存在一个能获得 $10$ 分的装箱方案。
样例
输入格式 1
5 2 6 7 10 7 10
输出格式 1
2 0 0 1 0 1
说明
在这个样例中,最好的可能结果是使用 $2$ 个箱子。上面是一个仅使用 $2$ 个箱子的结果,可以获得 $10$ 分。
下面是另一个可能的有效输出:
3 0 2 1 0 1
该输出可以获得 $\frac{2}{3} \cdot \frac{8}{3} \approx 1.778$ 分。
输入格式 2
7 4 8 8 8 8 8 8 8
输出格式 2
4 0 1 2 3 2 1 0
说明
上面是一个可能的有效输出,可以获得 $10$ 分。
下面是另一个可能的有效输出:
5 0 0 1 1 2 3 4
该输出可以获得 $1 + 9^{4(\frac{4}{5} - 0.75)} = 1 + 9^{0.2} \approx 2.552$ 分。