#756. 构造多重集
构造多重集
题目描述
给定一个多重集合 ,包含 个整数 。你要通过如下过程构造一个新的多重集合 :
- 将 划分为任意个非空的多重子集 ,且每个元素恰好属于其中一个 。
- 初始时 为空。从每个 中任选一个众数(即出现次数最多的元素;若有并列则这些元素都视为众数),将所选的众数插入到 中(对每个 选择一个众数并插入一个元素到 )。
要求统计通过以上过程能得到的不同多重集合 的个数,结果对 取模。
注意:统计的是不同的多重集合(即不考虑元素顺序,但考虑元素的重复计数)。例如 都被视为不同的多重集合。
输入格式
-
第一行包含一个整数 ,表示测试用例个数()。
-
对每个测试用例:
- 第一行包含一个整数 (),表示多重集合 的大小;
- 第二行包含 个整数 (),表示多重集合中的元素。
数据保证所有测试用例中 的总和不超过 。
输出格式
对每个测试用例,输出一行,包含一个整数:
- 通过上述过程可以得到的不同多重集合 的个数(对 取模)。
样例输入
5
3
1 2 3
3
1 1 1
3
1 2 2
10
1 1 1 1 2 2 2 3 3 4
10
1 1 1 2 2 2 3 3 3 4
样例输出
7
3
4
111
126
说明
样例解释
-
第一个样例:元素互不相同,任意非空子集划分后每个块的众数就是该块唯一的元素,因此等价于选取任意非空子集,故共有 种不同的多重集合 。
-
第三个样例()可得出的 有四种:
- 将整个集合作为一个块 ,其众数为 ,得到 ;
- 划分为 与 ,分别选众数得到 ;
- 划分为 与 ,选众数得到 ;
- 划分为 ,得到 。