#P14582. [Bulgarian 2025]monkey
[Bulgarian 2025]monkey
题目描述
还记得前几题中的 Eli 和 Deni 吗?你知道他们还养了一只小猴子吗?
这只小猴子会不停敲击键盘,它每次只会按下 0 或 1:
- 按下
0的概率为 ; - 按下
1的概率为 。
每按下一次后,小猴子都会查看到目前为止的按键序列;只要它还没有看到预先给定的长度为 的二进制模式串 ,它就会继续按下去。一旦它看到了这个模式串,就会停止。
例如,当模式串为 1010 时,以下序列都可能作为一次结束时的完整按键序列:
1101100101101010101111111010
已知模式串 ,请你求出:直到第一次看到该模式串为止,按键次数的期望值,并将答案对 取模后输出。
输入格式
第一行输入一个整数 ,表示模式串长度。
第二行输入两个整数 ,满足
即小猴子按下 0 的概率为 。
第三行输入一个长度为 的仅由 0 和 1 组成的字符串 。
输出格式
输出一行一个整数,表示所求期望值对 取模后的结果。
关于“取模后的有理数”
设期望值为 ,其中 。你需要输出一个整数 ,满足:
且
也就是说,输出的是 在模 意义下的值。
你可以使用如下事实:对于任意非零整数 ,在模 下它的逆元为
因此最终答案可以写成:
说明
若把所有可能的停止序列记为第 种,其长度为 ,出现概率为 ,则期望定义为:
数据范围
子任务
| 子任务 | 分值 | 范围 | 额外限制 |
|---|---|---|---|
| 1 | 11 | 的形式为 11111... 或 00000... |
|
| 2 | 6 | 的形式为 01111... 或 10000... |
|
| 3 | 5 | 中不存在相邻的 0 |
|
| 4 | 42 | 无 | |
| 5 | 11 | ||
| 6 | 10 | ||
| 7 | 15 |
只有通过某个子任务中的全部测试点,才能获得该子任务的分数。
样例 1
输入
1
1 2
0
输出
2
解释
此时 。小猴子会一直按键,直到第一次看到 0 为止,因此期望按键次数为 。
样例 2
输入
4
3 4
1011
输出
333333425
解释
此时 。答案对应的真实值为
而
$$333333425\times 3 = 1000000275 \equiv 268 \pmod{10^9+7}$$因此输出 333333425。