题目描述
假设给定两个整数 m 和 n。同时还给定一个包含 n 个互不相同整数的列表 x1,x2,…,xn,满足 0≤xi≤2m−1。对于每个 0 到 2m−1 之间的数 y,你找到了数 py,使得 xpy 与 y 的按位异或值最大。也就是说,对于所有 i=1..n,i=py,均有 y⊕xpy>y⊕xi(⊕ 表示按位异或)。
现在考虑逆向问题。给定 m、n 以及序列 p0,p1,…,p2m−1,请统计有多少个互不相同的整数序列 x1,x2,…,xn 能够通过上述算法生成给定的 p 序列。如果两个 x 序列存在某个下标 i 使得 xi 不同,则认为它们是不同的。输出该计数对 109+7 取模的结果。
输入格式
每个测试用例的第一行包含两个空格分隔的整数 m(0≤m≤16)和 n(1≤n≤2m),其中 2m 是 p 序列的长度,n 是 x 序列的长度。
接下来的 2m 行,每行包含一个整数 p(1≤p≤n)。这些是按顺序给出的序列 p0,p1,…,p2m−1 的值。1 到 n 之间的每个整数至少出现一次。
输出格式
输出一个整数,表示能够通过上述算法生成给定 p 序列的序列 x1,x2,…,xn 的数量,对 109+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 完成