luogu#P10310. 「Cfz Round 2」01 String

    ID: 14269 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 难度: 5 上传者: 标签>数学洛谷原创O2优化组合数学洛谷月赛

「Cfz Round 2」01 String

题目描述

定义一个 01\tt{01} 串是合法的,当且仅当它的首字符为 0\tt 0 而尾字符为 1\tt 1。我们继而定义一个 01\tt{01}TT 的权值 f(T)f(T) 为,将 TT 划分若干个连续的合法子串的方案数。

例如 f(001)=1f(\tt{001}) = \text{1},因为它仅可以被分割为 [001][\tt 001]f(0101101)=4f(\tt{0101101}) = \text{4},因为它可以被分割为 [0101101][01,01101][01011,01][01,011,01][\tt 0101101][01, 01101][01011, 01][01, 011, 01] 共四种不同的方案;而 f(1001010101)=0f(\tt{1001010101}) = \text{0}

给定一个长度为 nn01\tt{01}SS。定义 $f_k(l, r) = \begin{cases} f(S_{l\dots r}) & k = 0 \\ \displaystyle\sum_{l\leq l' \leq r' \leq r} f_{k-1}(l', r') & k \gt 0\end{cases}$,你需要求出 fk(1,n)f_k(1, n) 的值。

由于答案可能很大,所以你只需要输出答案对 109+710^9+7 取模的结果。

输入格式

本题有多组测试数据。

第一行输入一个整数 TT,表示测试数据组数。

接下来依次输入每组测试数据。对于每组测试数据:

  • 第一行输入两个整数 n,kn,k,分别表示 S\lvert S\rvert 和给定的参数。
  • 接下来一行,输入一个长度为 nn01\tt{01} 串表示 SS

输出格式

对于每组数据,输出一行一个整数,表示答案。

4
3 1
001
5 2
00101
30 10
010100110101001010010010011101
10 1000000000000
0010110101
2
19
926292963
340558843

提示

「样例解释 #1」

对于第 11 组数据,用表格的交叉点表示 fk(l,r)f_k(l, r) 的值:

k=0\bm{k = 0} r=1r = 1 22 33
l=1l = 1 00 00 11
22 /
33 / 00
k=1\bm{k = 1} r=1r = 1 22 33
l=1l = 1 00 00 22
22 / 11
33 / 00

其中:

  • $f_1(2, 3)= f_0(2, 2) + f_0(2, 3) + f_0(3, 3)= 0 + 1 + 0 = 1$;
  • $f_1(1, 3) = f_0(1, 1) + f_0(1, 2) + f_0(1, 3) + f_0(2, 2) + f_0(2, 3) + f_0(3, 3) = 0 + 0 + 1 + 0 + 1 + 0 = 2$;

所以答案为 22

「数据范围」

n\sum n 表示单个测试点中 nn 的和。

对于所有数据,1T1001 \leq T \leq 1001n2×1051 \leq n \leq 2\times 10^50k10180 \leq k \leq 10^{18}n6×105\sum n \leq 6\times 10^5,保证 SS 中只包含 0\tt{0}1\tt{1}

只有你通过本题的所有测试点,你才能获得本题的分数。