#CSP202609D. 数字分组

数字分组

题目来自第 43 次 CSP 认证 T4,评测使用自造高质量复刻数据。我们承认原始题面与大样例版权均归中国计算机学会(CCF)所有,因此题面与评测服务均免费对外开放。如果您认为我们侵犯了您的权益,可联系我们。

时间限制: 1.0 秒

空间限制: 512 MB

题目描述

小 C 非常讨厌正整数 kk。对于一个正整数集合,如果此集合内存在两个元素 x,yx,y 使得两者的商为 kk,那么小 C 会感到不满意。

在不同情况下,小 C 的要求会有所不同。输入会给出 opop 表示小 C 的要求情况:如果 op=0op=0,表示此时小 C 要求宽松,只有 x/y=kx/y=k (必须恰好整除)的时候小 C 才会不满意;如果 op=1op=1,表示此时小 C 要求严格,只要 ⌊x/y⌋=k\left\lfloor x/y\right\rfloor=k,小 C 就会不满意。其中 ⌊x/y⌋\left\lfloor x/y\right\rfloor 表示对 x/yx/y 下取整,得到的值为不大于 x/yx/y 的最大整数。

现在有 nn 个互不相同的正整数 a1,a2,⋯ ,ana_1,a_2,\cdots,a_n,求最少需要将它们划分为多少个集合,才能让小 C 感到满意,同时你需要给出一种划分方案。

输入格式

从标准输入读入数据。

第一行给出三个整数 n,k,opn,k,op。

第二行给出 nn 个互不相同的正整数 a1,a2,⋯ ,ana_1,a_2,\cdots,a_n。

输出格式

输出到标准输出。

第一行输出一个正整数 mm,表示划分出的集合数量的最小值。

接下来输出 mm 行,每行描述一个集合。

每行第一个非负整数为该集合的大小 cic_i。接下来为 cic_i 个正整数 bi,1,bi,2,⋯ ,bi,cib_{i,1},b_{i,2},\cdots,b_{i,c_i},表示该集合内的所有元素。

5 2 1
2 4 8 16 32
2
3 2 8 32
2 4 16

样例 1 解释

容易验证这两个集合均满足条件。

由于 ⌊4/2⌋=2\left\lfloor 4/2\right\rfloor=2,因此只分成一个集合必然不满足要求。

故至少需要分成 22 个集合。

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 解释

容易验证这三个集合均满足条件。

由于 ⌊4/2⌋=2\left\lfloor 4/2\right\rfloor=2,因此只分成一个集合必然不满足要求。

假设可以分成两个集合,由于 $\left\lfloor 8/4\right\rfloor=\left\lfloor 16/8\right\rfloor=\left\lfloor 11/4\right\rfloor=2$,那么必然是 4,164,16 在一个集合,8,118,11 在另一个集合。此时考察数字 3232,由于 $\left\lfloor 32/16\right\rfloor=\left\lfloor 32/11\right\rfloor=2$,那么 3232 无法被放入任何一个集合中,产生矛盾。

故至少需要分成 33 个集合。

样例 3

见题目文件区的 3.in 和 3.ans。

样例 3 解释

该组样例满足子任务 2 的限制。

样例 4

见题目文件区的 4.in 和 4.ans。

样例 4 解释

该组样例满足子任务 4 的限制。

子任务

对于所有测试点,保证 1≤n≤5×1051\le n\le 5 \times 10^{5},2≤k≤1092\le k\le 10^{9},1≤ai≤10181\le a_i\le 10^{18} 且所有的 aia_i 互不相同,op∈{0,1}op\in\{0,1\}。

本题采用捆绑测试,具体评分方式见后续部分。

子任务编号 分值 n≤n\le op=op=
1 10 1010 11
2 20 2,0002,000 00
3 25 5×1055 \times 10^{5}
4 20 2,0002,000 11
5 25 5×1055 \times 10^{5}

评分方式

本题有部分分,且采用捆绑测试。

如果在某个子任务的所有测试点中均输出正确的集合数量的最小值 mm,将得到对应子任务分数的 40%40\%。在此基础上,在该子任务内所有测试点中均输出正确划分集合的方案,将得到剩下 60%60\% 的分数。

如果仅希望获得第一部分的分数,也请输出一个符合输出格式的方案。比如你可以在输出 mm 之后再输出 mm 行,每行只有一个整数 00,表示所有集合均是空集。该方案显然不正确,但可以帮助你保持输出格式的正确。

本题使用 Special Judge 判断方案正确性。

你可以输出任意一种满足题目要求的方案。对于一个集合内的元素,你可以按照任意顺序输出。但请注意,你需要保证输入的所有数字出现且仅出现在一个集合内,输出某个数字多次、缺少某个数字以及输出未给出的数字均会被认为是错误的方案。