抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

有一个 (n+2)×m(n + 2) \times m 的长方形,除了第一行和最后一行,其他每一行每一天最左边和最右边的格子都有 pp 的概率被摧毁,每行之间独立且左边和右边独立,求 kk 天之后最上面一行与最下面一行四联通的概率。

其中 1≤n,m≤1500, 0≤k≤1051\le n,m\le 1500,\,0\le k\le 10^5,答案对 109+710^9+7 取模。

一个简单的想法就是我们令 hi,l,rh_{i,l,r} 表示 kk 天后第 ii 行还剩下 [l,r][l,r],前 ii 行联通的概率。Pl,rP_{l,r} 表示单独一行只剩 [l,r][l,r] 的概率。

首先我们有:

hi,l,r=Pl,r∑[l,r]∩[l′,r′]≠∅hi−1,l′,r′h_{i,l,r}=P_{l,r}\sum_{[l,r]\cap[l',r']\neq\emptyset}h_{i-1,l',r'}

接下来我们考虑 Pl,rP_{l,r},我们令 qi=(ki)pi(1−p)k−iq_{i}=\binom{k}{i}p^i(1-p)^{k-i},不难发现:

Pl,r=ql−1qm−rP_{l,r}=q_{l-1}q_{m-r}

然后我们令 fi,rf_{i,r} 表示右端点为 rr 的所有 hh 之和,同理 gi,lg_{i,l} 表示以左端点为 ll 的所有 hh 之和,再令 Fi,rF_{i,r} 表示右端点小于等于 rr 的所有 hh 之和,同理 Gi,lG_{i,l} 表示以左端点大于等于 ll 的所有 hh 之和。

具体地:

fi,r=∑l=1rhi,l,rgi,l=∑r=lmhi,l,rFi,r=∑R=1rfi,RGi,l=∑L=lmgi,L\begin{aligned} f_{i,r}&=\sum_{l=1}^rh_{i,l,r}\\ g_{i,l}&=\sum_{r=l}^mh_{i,l,r}\\ F_{i,r}&=\sum_{R=1}^rf_{i,R}\\ G_{i,l}&=\sum_{L=l}^mg_{i,L} \end{aligned}

于是我们就有:

hi,l,r=Pl,r(Fi−1,m−Fi−1,l−1−Gi−1,r+1)h_{i,l,r}=P_{l,r}\left(F_{i-1,m}-F_{i-1,l-1}-G_{i-1,r+1}\right)

将 hh 代入 ff 和 gg,我们有:

fi,r=∑l=1rql−1qm−r(Fi−1,m−Fi−1,l−1−Gi−1,r+1)=qm−r(∑l=1rql−1(Fi−1,m−Fi−1,l−1)−Gi−1,r+1∑l=1rql−1)gi,l=∑r=lmql−1qm−r(Fi−1,m−Fi−1,l−1−Gi−1,r+1)=ql−1(∑r=lmqm−r(Fi−1,m−Gi−1,r+1)−Fi−1,l−1∑r=lmqm−r)\begin{aligned} f_{i,r}&=\sum_{l=1}^rq_{l-1}q_{m-r}\left(F_{i-1,m}-F_{i-1,l-1}-G_{i-1,r+1}\right)\\ &=q_{m-r}\left(\sum_{l=1}^rq_{l-1}\left(F_{i-1,m}-F_{i-1,l-1}\right)-G_{i-1,r+1}\sum_{l=1}^rq_{l-1}\right)\\ g_{i,l}&=\sum_{r=l}^mq_{l-1}q_{m-r}\left(F_{i-1,m}-F_{i-1,l-1}-G_{i-1,r+1}\right)\\ &=q_{l-1}\left(\sum_{r=l}^mq_{m-r}\left(F_{i-1,m}-G_{i-1,r+1}\right)-F_{i-1,l-1}\sum_{r=l}^mq_{m-r}\right) \end{aligned}

考虑到最后答案是 Fn,mF_{n,m},我们发现我们可以绕过 hh 来求 FF。

最终复杂度 O(k+nm)\mathcal{O}(k+nm)。

代码可以看 这里。

评论