#HK5335. 「清华集训 2024」绝顶之战

「清华集训 2024」绝顶之战

题目描述

有一个长度为 mm 的一维空间,还有 nn 个物品,第 ii 个物品的长度为 aia_i。现在按照编号从小到大的顺序依次将物品放入空间中,对于第 ii 个物品:

  • 如果当前空间中存在一段连续的长度至少为 aia_i 的空余,则你必须将第 ii 个物品放入一段连续的长度为 aia_i 的空余空间中。
  • 否则,第 ii 个物品无法被放入,跳过它。

你需要输出:按照编号从小到大的顺序考虑完所有物品后,所有可能的空间占用长度,它的定义是所有被放入空间的物品的长度之和。

输入格式

输入的第一行两个整数 m,nm,n,分别表示空间长度和物品个数。

第二行 nn 个整数 a1,,ana_1,\cdots,a_n,依次表示每个物品的长度。

输出格式

输出两行,第一行一个整数 SS,表示可能的空间占用长度的数量。

第二行 SS 个整数 b1,,bSb_1,\ldots,b_S从小到大输出所有可能的空间占用长度。

注意,你需要保证 b1,,bSb_1,\ldots,b_S 不重不漏。

8 4
3 4 1 2

4
4 6 7 8

下图分别展示了空间占用长度为 4,6,7,84,6,7,8 的一种可能方式:

样例 2

见题目目录下的 2.in2.ans

样例 3

见题目目录下的 3.in3.ans

数据范围与提示

对于所有测试数据,1m,ai10161\leq m,a_i\leq 10^{16} 1n14\ 1\leq n\leq 14

子任务编号 n=n= m,aim,a_i\le 分数
Subtask 1\text{Subtask}\ 1 55 1010 1515
Subtask 2\text{Subtask}\ 2 22 101610^{16} 55
Subtask 3\text{Subtask}\ 3 33
Subtask 4\text{Subtask}\ 4 55
Subtask 5\text{Subtask}\ 5 77
Subtask 6\text{Subtask}\ 6 99
Subtask 7\text{Subtask}\ 7 1111 1010
Subtask 8\text{Subtask}\ 8 1212
Subtask 9\text{Subtask}\ 9 1313
Subtask 10\text{Subtask}\ 10 1414 3030