#P14714. [Bulgarian2024秋季赛]xor_set

[Bulgarian2024秋季赛]xor_set

题目描述

给定一个多重集,其中每个数都属于区间 [0,2L)[0, 2^L)

定义函数 f(S,k)f(S, k):它接受一个多重集 SS 和一个满足 0k<2L0 \le k < 2^L 的整数 kk,并返回新的多重集

S={xkxS}S' = \{\, x \oplus k \mid x \in S \,\}

其中 \oplus 表示按位异或运算。

对于固定的 SS,请你求出当 kk 取遍所有满足 0k<2L0 \le k < 2^L 的整数时,f(S,k)f(S, k) 一共会产生多少个不同的多重集。

输入格式

第一行输入两个整数 nnLL,分别表示多重集 SS 中元素的个数,以及每个元素二进制表示所使用的位数。

第二行输入多重集 SS 中的所有元素。

输出格式

输出一个整数,表示函数 ff 的不同结果个数。

数据范围

  • 1n1051 \le n \le 10^5
  • 0L200 \le L \le 20
  • 对于任意 xSx \in S,都有 0x<2L0 \le x < 2^L

子任务

子任务 分值 nn 限制 LL 限制 其他限制
0 样例测试
1 9 300\le 300 9\le 9
2 11 3000\le 3000 12\le 12
3 10 10000\le 10000 20\le 20
4 18 100000\le 100000 5\le 5
5 19 10\le 10
6 18 20\le 20 SS 中每个数最多出现一次
7 15

某一子任务的分数,只有在通过其全部测试点时才能获得。

样例

输入

6 3
0 1 3 4 6 7

输出

4

说明

f(S,0)={0,1,3,4,6,7}f(S, 0) = \{\, 0, 1, 3, 4, 6, 7 \,\} f(S,1)={0,1,2,5,6,7}f(S, 1) = \{\, 0, 1, 2, 5, 6, 7 \,\} f(S,2)={1,2,3,4,5,6}f(S, 2) = \{\, 1, 2, 3, 4, 5, 6 \,\} f(S,3)={0,2,3,4,5,7}f(S, 3) = \{\, 0, 2, 3, 4, 5, 7 \,\}

因此,不同结果共有 4 个。