CF708E Student's Camp

tag:概率期望,dp


首先可以预处理出刮掉长度为 \(i\) 的一段的概率 \(g_i\)

\[g_i=p^i(1-p)^{k-i}\binom ki \]

\(f_{i,l,r}\) 表示前 \(i\) 层联通,且第 \(i\) 层保留的部分为 \([l,r]\)。显然有式子:

\[f_{i,l,r}=g_{l-1}\cdot g_{m-r}\cdot(\sum_{1\leq l'\leq r'\leq m}f_{i-1,l',r'}-\sum_{[l',r']\cap[l,r]=\varnothing}f_{i-1,l',r'}) \]

显然会直接做会TLE。

考虑用前缀和,设:

\[sl_{i,l}=\sum_{r=l}^mf_{i,l,r}\quad\quad sr_{i,r}=\sum_{l=1}^rf_{i,l,r} \]

\[ssl_{i,x}=\sum_{l=x}^msl_{i,l}\quad\quad ssr_{i,x}=\sum_{r=1}^xsr_{i,r} \]

直观地讲,\(sl_{i,l}\)/\(sr_{i,r}\) 就是所有左/右端点为 \(l\)/\(r\) 的区间的 \(dp\) 值的和,\(ssl_{i,x}\)/\(ssr_{i,x}\) 就是 \([x,m]\)/\([1,x]\) 的所有子区间的 \(dp\) 值的和。

那么原式子可以写成:

\[f_{i,l,r}=g_{l-1}\cdot g_{m-r}\cdot(ssr_{i-1,m}-ssr_{i-1,l-1}-ssl_{i-1,r+1}) \]

而由于这道题左右情况实际上是完全对称的,即 \(ssl_{i,x}=ssr_{i,m-x+1}\),于是

\[f_{i,l,r}=g_{l-1}\cdot g_{m-r}\cdot(ssr_{i-1,m}-ssr_{i-1,l-1}-ssr_{i-1,m-r}) \]

由于最后答案为 \(\sum f_{n,l,r}=ssr_{n,m}\),所以我们不用具体把 \(f\) 全部求出来,只需要求出 \(ssr\) 就行了。至于求 \(ssr\),则需要求出 \(sr\)

\[\begin{matrix} sr_{i,r}=\sum_{l=1}^rf_{i,l,r}\\ =\sum_{l=1}^rd_{l-1}d_{m-x}(ssr_{i-1,m}-ssr_{i-1,l-1}-ssr_{i-1,m-x})\\ =(ssr_{i-1,m}-ssr_{i-1,m-x})d_{m-x}\cdot\sum_{l=1}^xd_{l-1}\ -\ d_{m-x}\sum_{l=1}^xd_{l-1}ssr_{i-1,l-1} \end{matrix} \]

于是先扫一遍求出 \(S1_x=\sum_{i=1}^xd_{i-1}\)\(S2_x=\sum_{i=1}^xd_{i-1}ssr_{i-1,l-1}\) 即可

\[sr_{i,r}=(ssr_{i-1,m}-ssr_{i-1,m-x})d_{m-x}S1_x-d_{m-x}S2_x \]

复杂度\(O(n^2)\)直接少了n三方

posted @ 2021-06-26 14:08  oisdoaiu  阅读(29)  评论(0编辑  收藏  举报