P16822 [蓝桥杯 2026 国 Python B] 零段积分

题目描述

小蓝在做一种随机字符串实验。她有一个长度为 $N$ 的序列,初始时所有位置均为 $0$。实验开始后,序列中的每个位置独立地以概率 $\frac{P}{Q}$ 变为 $1$,其余位置保持为 $0$。 实验结束后,所有连续的 $0$ 会被 $1$ 分隔成若干段。 设从左到右出现的非空连续零段长度依次为 $l_1, l_2, \dots, l_k$。 小蓝定义该序列的价值为 $$ S = \sum_{i=1}^{k-1} l_i \times l_{i+1} $$ 也就是说,价值是所有相邻零段长度乘积之和。若零段数量少于 $2$,则价值为 $0$。 现在,请你计算 $S$ 的期望值,并输出其对 $10^9 + 7$ 取模后的结果。

输入格式

输入一行,包含三个整数 $N, P, Q$,分别表示序列长度,以及每个位置变为 $1$ 的概率的分子和分母。 保证 $0 \le P \le Q$,$Q > 0$,且 $\gcd(P, Q) = 1$。

输出格式

输出一行,一个整数,表示 $S$ 的期望值对 $10^9 + 7$ 取模后的结果。 若期望值为分数 $\frac{a}{b}$,则输出 $a \times b^{-1} \bmod (10^9 + 7)$,其中 $b^{-1}$ 表示 $b$ 在模 $10^9 + 7$ 意义下的乘法逆元。

说明/提示

### 【样例说明】 当 $N=4$ 且每个位置以概率 $\frac{1}{2}$ 变为 $1$ 时,所有 $2^4$ 种状态等概率出现,但只有以下状态的价值非零: | 状态 | 零段长度 | 价值 | |:-:|:-:|:-:| | $0010$ | $2, 1$ | $2$ | | $0100$ | $1, 2$ | $2$ | | $0101$ | $1, 1$ | $1$ | | $0110$ | $1, 1$ | $1$ | | $1010$ | $1, 1$ | $1$ | 因此 $E[S] = \frac{2+2+1+1+1}{16} = \frac{7}{16}$。在模 $10^9 + 7$ 意义下,$\frac{7}{16}$ 等于 $937500007$。 ### 【评测用例规模与约定】 对于 $30\%$ 的评测用例,$1 \le N \le 20$。 对于所有评测用例,$1 \le N \le 10^6$,$0 \le P \le Q \le 10^9$,$\gcd(P, Q) = 1$。