#CSP202609D. 数字分组
数字分组
题目来自第 43 次 CSP 认证 T4,评测使用自造高质量复刻数据。我们承认原始题面与大样例版权均归中国计算机学会(CCF)所有,因此题面与评测服务均免费对外开放。如果您认为我们侵犯了您的权益,可联系我们。
时间限制: 1.0 秒
空间限制: 512 MB
题目描述
小 C 非常讨厌正整数 。对于一个正整数集合,如果此集合内存在两个元素 使得两者的商为 ,那么小 C 会感到不满意。
在不同情况下,小 C 的要求会有所不同。输入会给出 表示小 C 的要求情况:如果 ,表示此时小 C 要求宽松,只有 (必须恰好整除)的时候小 C 才会不满意;如果 ,表示此时小 C 要求严格,只要 ,小 C 就会不满意。其中 表示对 下取整,得到的值为不大于 的最大整数。
现在有 个互不相同的正整数 ,求最少需要将它们划分为多少个集合,才能让小 C 感到满意,同时你需要给出一种划分方案。
输入格式
从标准输入读入数据。
第一行给出三个整数 。
第二行给出 个互不相同的正整数 。
输出格式
输出到标准输出。
第一行输出一个正整数 ,表示划分出的集合数量的最小值。
接下来输出 行,每行描述一个集合。
每行第一个非负整数为该集合的大小 。接下来为 个正整数 ,表示该集合内的所有元素。
5 2 1
2 4 8 16 32
2
3 2 8 32
2 4 16
样例 1 解释
容易验证这两个集合均满足条件。
由于 ,因此只分成一个集合必然不满足要求。
故至少需要分成 个集合。
25 2 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 17 19 20 23 25 26 28 29 31 32
3
8 1 8 9 10 11 12 13 14
12 2 3 16 17 19 20 23 25 26 28 29 31
5 4 5 6 7 32
样例 2 解释
容易验证这三个集合均满足条件。
由于 ,因此只分成一个集合必然不满足要求。
假设可以分成两个集合,由于 $\left\lfloor 8/4\right\rfloor=\left\lfloor 16/8\right\rfloor=\left\lfloor 11/4\right\rfloor=2$,那么必然是 在一个集合, 在另一个集合。此时考察数字 ,由于 $\left\lfloor 32/16\right\rfloor=\left\lfloor 32/11\right\rfloor=2$,那么 无法被放入任何一个集合中,产生矛盾。
故至少需要分成 个集合。
样例 3
样例 3 解释
该组样例满足子任务 2 的限制。
样例 4
样例 4 解释
该组样例满足子任务 4 的限制。
子任务
对于所有测试点,保证 ,, 且所有的 互不相同,。
本题采用捆绑测试,具体评分方式见后续部分。
| 子任务编号 | 分值 | ||
|---|---|---|---|
| 1 | 10 | ||
| 2 | 20 | ||
| 3 | 25 | ||
| 4 | 20 | ||
| 5 | 25 |
评分方式
本题有部分分,且采用捆绑测试。
如果在某个子任务的所有测试点中均输出正确的集合数量的最小值 ,将得到对应子任务分数的 。在此基础上,在该子任务内所有测试点中均输出正确划分集合的方案,将得到剩下 的分数。
如果仅希望获得第一部分的分数,也请输出一个符合输出格式的方案。比如你可以在输出 之后再输出 行,每行只有一个整数 ,表示所有集合均是空集。该方案显然不正确,但可以帮助你保持输出格式的正确。
本题使用 Special Judge 判断方案正确性。
你可以输出任意一种满足题目要求的方案。对于一个集合内的元素,你可以按照任意顺序输出。但请注意,你需要保证输入的所有数字出现且仅出现在一个集合内,输出某个数字多次、缺少某个数字以及输出未给出的数字均会被认为是错误的方案。