#XMOJ11631. 奇怪的计算机
奇怪的计算机
说明
时间限制:1 Sec
内存限制:256 MB
输入文件:computer.in 输出文件:computer.out
小明造了一台奇怪的计算机,机器的规则如下:
1、这台计算机使用 $N$ 位二进制存储非负整数。
例:$N=5$ 时,十进制 $14$ 写作 $01110$,十进制 $22$ 写作 $10110$。
2、这台计算机可以生成数字序列,但是生成数字序列时,每次只能把一个二进制 $0$ 比特翻转为 $1$,绝对不会把已经变成 $1$ 的比特改回 $0$。
因此它能生成的序列固定满足:从数字 $0$ 开头,以 $2^N-1$ 结尾,整条序列恰好有 $N+1$ 个数字。
- 合法示例($N=4$):$0,\ 2,\ 3,\ 11,\ 15$
二进制变化:$0000 → 0010 → 0011 → 1011 → 1111$,只新增 $1$、从不消除 $1$。
- 非法示例($N=4$):$0,\ 1,\ 3,\ 12,\ 15$
$12$ 的二进制是 $1100$,对比前一项 $3(0011)$,低位原本的 $1$ 消失了,违反规则。
给定 $k$ 个数字 $a_1,a_2,\dots,a_k$,请统计满足以下全部条件的合法序列总数量:
1、序列是符合上面机器规则、长度为 $N+1$ 的完整数列;
2、数列里按先后顺序依次包含 $a_1,a_2,\dots,a_k$;
特殊说明:$k=0$ 时,所有合法序列都算作符合条件。
答案数值可能极大,需要对 $10^9+7$ 取模后输出;如果不存在满足条件的序列,直接输出 $0$。
输入格式
第一行两个整数 $N,\ k$
第二行输入 $k$ 个互不重复的非负整数 $a_1\ a_2\ \dots\ a_k$。
注意:当 $k=0$ 时,没有第二行输入。
输出格式
仅输出一行整数:合法序列的总数对 $10^9+7$ 取模的结果。
样例
样例 1
4 2
2 11
2
样例说明:
仅有两组合规数列
1、$0,2,3,11,15$;
2、$0,2,10,11,15$。
样例 2
10 3
5 1 3
0
样例说明:
不存在能按顺序容纳 、、 的合法数列(合法数列二进制 只会只增不减, 含有的 比特比 少,不可能排在 后面)
样例 3
3 0
6
样例说明:
,统计全部原生合法序列,一共 种:
1、$0,1,3,7$
2、$0,1,5,7$
3、$0,2,3,7$
4、$0,2,6,7$
5、$0,4,5,7$
6、$0,4,6,7$
数据范围
对于 10% 的数据,$k=0$。
对于 20% 的数据,$k \le 3$,$N \le 8$。
对于 30% 的数据,$k \le 3$。
对于 100% 的数据,$1 \le N \le 60$,$0 \le k \le N+1$,每个 $a_i$ 满足 $0 \le a_i \le 2^N-1$,所有数字互不相同。
相关
在下列比赛中: