#CF2081A. 数学除法
数学除法
A. 数学除法
每次测试的时间限制:2 秒
每次测试的内存限制:512 兆字节
Ecrade 有一个整数 。他会以长度为 的二进制数的形式向你展示这个数。
有两种操作:
- 将 替换为 ,其中 是不超过 的最大整数。
- 将 替换为 ,其中 是不小于 的最小整数。
Ecrade 会执行若干次操作,直到 变成 。每次操作,他会独立地以 的概率选择第一种操作,以 的概率选择第二种操作。
Ecrade 想知道为了使 等于 ,他所执行的操作次数的期望值,并对 取模。但这似乎有点难,所以请你帮帮他!
输入
第一行包含一个整数 ()—— 测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 ()—— 二进制数 的长度。
第二行包含一个长度为 的二进制字符串:数字 的二进制表示,从最高位到最低位给出。保证 的最高位是 。
所有测试用例的 之和不超过 。
输出
对于每个测试用例,输出一个整数,表示使 等于 所需的操作次数的期望值,对 取模。
形式化地说,设 。可以证明精确答案可以表示为不可约分数 ,其中 和 是整数且 。输出 的整数,即输出整数 满足 且 。
示例
输入
3
3
110
3
100
10
1101001011
输出
500000006
2
193359386
提示
为简单起见,我们将第一种操作称为“操作 1”,第二种操作称为“操作 2”。
在第一个测试用例中,,共有 6 种可能的操作序列:
- $6 \xrightarrow{\text{操作 1}} 3 \xrightarrow{\text{操作 1}} 1$,概率为 。
- $6 \xrightarrow{\text{操作 1}} 3 \xrightarrow{\text{操作 2}} 2 \xrightarrow{\text{操作 1}} 1$,概率为 。
- $6 \xrightarrow{\text{操作 1}} 3 \xrightarrow{\text{操作 2}} 2 \xrightarrow{\text{操作 2}} 1$,概率为 。
- $6 \xrightarrow{\text{操作 2}} 3 \xrightarrow{\text{操作 1}} 1$,概率为 。
- $6 \xrightarrow{\text{操作 2}} 3 \xrightarrow{\text{操作 2}} 2 \xrightarrow{\text{操作 1}} 1$,概率为 。
- $6 \xrightarrow{\text{操作 2}} 3 \xrightarrow{\text{操作 2}} 2 \xrightarrow{\text{操作 2}} 1$,概率为 。
因此,操作次数的期望值为
$$2 \cdot \frac14 + 3 \cdot \frac18 + 3 \cdot \frac18 + 2 \cdot \frac14 + 3 \cdot \frac18 + 3 \cdot \frac18 = \frac52 \equiv 500000006 \pmod{10^9 + 7}. $$