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三方)