#P16107. [ICPC 2019 NAIPC] XOR Sequences

[ICPC 2019 NAIPC] XOR Sequences

题目描述

假设给定两个整数 mm 和 nn。同时还给定一个包含 nn 个互不相同整数的列表 x1,x2,…,xnx_1, x_2, \dots, x_n,满足 0≤xi≤2m−10 \leq x_i \leq 2^m - 1。对于每个 00 到 2m−12^m - 1 之间的数 yy,你找到了数 pyp_y,使得 xpyx_{p_y} 与 yy 的按位异或值最大。也就是说,对于所有 i=1..ni = 1..n,i≠pyi \ne p_y,均有 y⊕xpy>y⊕xiy \oplus x_{p_y} > y \oplus x_i(⊕\oplus 表示按位异或)。

现在考虑逆向问题。给定 mm、nn 以及序列 p0,p1,…,p2m−1p_0, p_1, \dots, p_{2^m - 1},请统计有多少个互不相同的整数序列 x1,x2,…,xnx_1, x_2, \dots, x_n 能够通过上述算法生成给定的 pp 序列。如果两个 xx 序列存在某个下标 ii 使得 xix_i 不同,则认为它们是不同的。输出该计数对 109+710^9 + 7 取模的结果。

输入格式

每个测试用例的第一行包含两个空格分隔的整数 mm(0≤m≤160 \leq m \leq 16)和 nn(1≤n≤2m1 \leq n \leq 2^m),其中 2m2^m 是 pp 序列的长度,nn 是 xx 序列的长度。

接下来的 2m2^m 行,每行包含一个整数 pp(1≤p≤n1 \leq p \leq n)。这些是按顺序给出的序列 p0,p1,…,p2m−1p_0, p_1, \dots, p_{2^m - 1} 的值。11 到 nn 之间的每个整数至少出现一次。

输出格式

输出一个整数,表示能够通过上述算法生成给定 pp 序列的序列 x1,x2,…,xnx_1, x_2, \dots, x_n 的数量,对 109+710^9 + 7 取模。

3 6
1
1
2
2
3
4
5
6
4
2 3
1
2
1
3
0
3 8
1
2
3
4
5
6
7
8
1

提示

翻译由 DeepSeek V3.2 完成