#CF1829H. Don't Blame Me

    ID: 6854 传统题 1000ms 256MiB 尝试: 2 已通过: 1 难度: 10 上传者: 标签>位运算组合数学动态规划数学CodeforcesCodeforces Round 871(Div4)Div4HCF1829H1700

Don't Blame Me

题目描述

很遗憾,出题人没能想出有趣的故事,因此他直接让你解决如下问题。

给定一个由 nn 个正整数组成的数组 aa,请你统计有多少个非空子序列,其所有元素的按位 AND\mathsf{AND} 运算结果的二进制表示中恰好有 kk11。由于答案可能很大,请输出对 109+710^9+7 取模后的结果。

回忆一下,数组 aa 的子序列是可以通过删除一些(可能为零个)元素从 aa 得到的序列。例如,[1,2,3][1, 2, 3][3][3][1,3][1, 3] 都是 [1,2,3][1, 2, 3] 的子序列,但 [3,2][3, 2][4,5,6][4, 5, 6] 不是。

注意,AND\mathsf{AND} 表示按位与运算

输入格式

每组测试数据包含多组测试用例。第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。接下来是每组测试用例的描述。

每组测试用例的第一行包含两个整数 nnkk1n2×1051 \leq n \leq 2 \times 10^50k60 \le k \le 6),分别表示数组的长度和要求按位 AND\mathsf{AND} 结果中 11 的个数。

每组测试用例的第二行包含 nn 个整数 aia_i0ai630 \leq a_i \leq 63),表示数组 aa

保证所有测试用例中 nn 的总和不超过 2×1052 \times 10^5

输出格式

对于每组测试用例,输出一个整数,表示满足条件的子序列数量。由于答案可能很大,请输出对 109+710^9+7 取模后的结果。

样例

6
5 1
1 1 1 1 1
4 0
0 1 2 3
5 1
5 5 7 4 2
1 2
3
12 0
0 2 0 2 0 2 0 2 0 2 0 2
10 6
63 0 63 5 5 63 63 4 12 13
31
10
10
1
4032
15

样例说明

由 ChatGPT 4.1 翻译

来源

Codeforces 1829H,英文题名 Don't Blame Me。