该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
Limits
时间限制:2000ms
内存限制:512MB
Description
漆黑的晚上,小F躺在床上辗转反侧。难以入眠的他想起了今天下午他的一次悲惨的月赛比赛经历。那是一道“基础”的关于lowbit与highbit的题目:
给定一个n位的针对正整数x的0-1操作序列,其中0表示x+=lowbit(x),1表示x+=highbit(x),其中highbit(x)为该数在二进制表示下的最高二进制位的位值,lowbit(x)为该数在二进制表示下的最低非零二进制位的位值,例如
highbit(22(10))=highbit(10110(2))=10000(2))=16(10)
lowbit(22(10))=lowbit(10110(2))=10(2))=2(10)
现在给出q个正整数x1..xq(均在[1,230]之间),对xi依次应用操作序列中[li,ri](这个区间由数据给出)的操作,求操作后的q个数对109+7取模的余数。(1≤n,q≤105)
尽管此时的小F非常的simple,但是他还是发现这题可以争取部分分数。非常young的他写了一个模拟二进制高精度来解决这个问题,其复杂度O(nq)显然不能得满分。不过,他注意到了一个性质:
对于满足x=2a(a∈N,下同)形式的数,有lowbit(x)=highbit(x)=x。
这意味着某些数据经过若干步的模拟操作后,将变成x=2a的形式,然后任何操作都变成乘2,这使得小F可以优化他的算法。然而,由于学院辅导员突然打来电话要他去办公室处理一些问题,小F不得不终止比赛。赛后,小F测试了这种方法,发现可以获得整题一半的分数,这让他非常难过。
尽管这样的方法得不到满分,但是小F还是想要算一下,在区间[2m,2n]内,有多少个数能够在给定的0-1操作序列中截取一段长度不超过k的区间并依次应用区间中所有操作后,能够变成2a的形式?当然,总数量可能太大,因此请输出答案除以109+7的余数。
注意:若一个数无需任何操作即满足2a的形式,也在我们的统计范围内。
Input
第1行,4个整数m,n,k,d。其中,m,n,k含义见上,d表示操作序列的长度。
第2行,一个0-1字符串,表示操作序列。
Output
一个数,表示[2m,2n]中可以按要求转化为2a的形式的数的数量除以109+7的余数。
Samples
Sample Input
Sample Output
Explanation
操作序列“101”共有5个本质不同的操作区间,分别为1,0,10,01,101,由于k=2,合法的本质不同的操作区间只有1,0,10,01,共四个。
在[21,23]中,2,4,8不经任何操作即为2a的形式;
3,6,7只需1次“0”操作(x+=lowbit(x))即可变成2a的形式;
5经过上述任何一个合法的操作区间的操作后均不能变成2a的形式;
因此答案为6。
Data range

对于100%的数据,1≤m≤n≤3×104,1≤k≤1000,1≤d≤3×104,k≤d。
- 由于本题的复杂度可以做到更优,新增5组数据,#21~#25满足 1≤m,n≤109,1≤k≤d≤106