#P14582. [Bulgarian 2025]monkey

    ID: 13799 传统题 700ms 512MiB 尝试: 2 已通过: 1 难度: 7 上传者: 标签>CF2300KMP字符串概率DP模运算动态规划数学

[Bulgarian 2025]monkey

题目描述

还记得前几题中的 Eli 和 Deni 吗?你知道他们还养了一只小猴子吗?

这只小猴子会不停敲击键盘,它每次只会按下 01

  • 按下 0 的概率为 pp
  • 按下 1 的概率为 1p1-p

每按下一次后,小猴子都会查看到目前为止的按键序列;只要它还没有看到预先给定的长度为 NN 的二进制模式串 SS,它就会继续按下去。一旦它看到了这个模式串,就会停止。

例如,当模式串为 1010 时,以下序列都可能作为一次结束时的完整按键序列:

  • 11011001011010
  • 1010
  • 1111111010

已知模式串 SS,请你求出:直到第一次看到该模式串为止,按键次数的期望值,并将答案对 109+710^9+7 取模后输出。

输入格式

第一行输入一个整数 NN,表示模式串长度。
第二行输入两个整数 pA,pBp_A,p_B,满足

p=pApBp=\frac{p_A}{p_B}

即小猴子按下 0 的概率为 pApB\dfrac{p_A}{p_B}
第三行输入一个长度为 NN 的仅由 01 组成的字符串 SS

输出格式

输出一行一个整数,表示所求期望值对 109+710^9+7 取模后的结果。

关于“取模后的有理数”

设期望值为 PQ\dfrac{P}{Q},其中 Q0Q\ne 0。你需要输出一个整数 aa,满足:

0a<109+70\le a<10^9+7

aQP(mod109+7)a\cdot Q\equiv P\pmod{10^9+7}

也就是说,输出的是 PQ\dfrac{P}{Q} 在模 109+710^9+7 意义下的值。

你可以使用如下事实:对于任意非零整数 xx,在模 109+710^9+7 下它的逆元为

x109+5mod(109+7)x^{10^9+5}\bmod (10^9+7)

因此最终答案可以写成:

aPQ109+5(mod109+7)a\equiv P\cdot Q^{10^9+5}\pmod{10^9+7}

说明

若把所有可能的停止序列记为第 ii 种,其长度为 xix_i,出现概率为 pip_i,则期望定义为:

E[X]=ixipiE[X]=\sum_i x_i\cdot p_i

数据范围

  • 1N1071\le N\le 10^7
  • 1pA<pB<109+71\le p_A<p_B<10^9+7

子任务

子任务 分值 NN 范围 额外限制
1 11 3000\le 3000 SS 的形式为 11111...00000...
2 6 SS 的形式为 01111...10000...
3 5 SS 中不存在相邻的 0
4 42 200\le 200
5 11 3000\le 3000
6 10 5×105\le 5\times 10^5
7 15 107\le 10^7

只有通过某个子任务中的全部测试点,才能获得该子任务的分数。

样例 1

输入

1
1 2
0

输出

2

解释

此时 p=12p=\dfrac12。小猴子会一直按键,直到第一次看到 0 为止,因此期望按键次数为 22

样例 2

输入

4
3 4
1011

输出

333333425

解释

此时 p=34p=\dfrac34。答案对应的真实值为

89.333=89.3=268389.333\ldots = 89.\overline{3}=\frac{268}{3}

$$333333425\times 3 = 1000000275 \equiv 268 \pmod{10^9+7}$$

因此输出 333333425