UER #6 逃跑

设总方案数为 \(all=(w_1+w_2+w_3+w_4)^n\) 种,第 \(i\) 个方案经过的不同位置个数为 \(d_i\),则有:

\[V\times all=\sum (d_i-\overline d)^2\times all=(\sum d_i^2+all\times \overline d^2-2\overline d\sum d_i)\times all \]

由于 \(\overline d=\frac{\sum d_i}{all}\),故有:

\[V\times all=all\sum d_i^2-(\sum d_i)^2 \]

所以我们只需要算出 \(\sum d_i^2\)\(\sum d_i\) 即可。

先考虑 \(\sum d_i\) 怎么做。考虑利用期望的线性性,把贡献下放到每个位置上,统计第 \(i\) 步能走到的首次经过位置个数。则对于这些节点,贡献为后面步数随便走的方案数。(我们可以总结的套路是,如果存在取多次只算一次贡献,不妨将贡献放到取第一次上)

考虑我们在第 \(i\) 步走到某个位置时,该位置不是第一次走到,那么我们一定可以找到第一次走到该位置的步数 \(p\),且在 \(p\) 后的 \(i-p\) 步一定是绕了若干圈又回到原地。

所以不妨设 \(f_i\) 表示第 \(i\) 步能走到的新位置的总贡献,\(all_i=(w_1+w_2+w_3+w_4)^i\)\(s(p,i,j)\) 表示从当前节点 \((x,y)\) 开始,走 \(p\) 步之后走到 \((x+i,y+j)\) 的方案数。其中 \(s(p,i,j)\) 可以通过递推在 \(O(n^3)\) 以内求出。则有转移:

\[f_i=all_i-\sum_{j=0}^{i-1}f_js(i-j,0,0) \]

初始为 \(f_0=1\)。则:

\[\sum d=\sum_{i=0}^n f_iall_{n-i} \]

接下来考虑 \(\sum d^2\)请在求平方期望时考虑其组合意义,对于方案中新位置对计数。

故我们现在要求的就是,中途经过位置 \((i,j)\)、第 \(p\) 步时第一次经过另一个位置 \((i+x,j+y)\) 的方案数,我们将其设为 \(g(p,x,y)\)。总方案数可以为 \(f_k\)\(s(p-k,x,y)\) 拼接的结果,但如果这样我们会算重一些方案:

  • 我们并非先走到了 \((i,j)\) 再走到了 \((i+x,j+y)\),而是先 \((i+x,j+y)\),再到 \((i,j)\)。这部分的方案数为 \(g(k,-x,-y)\times s(p-k,x,y)\)

  • 我们并非第一次走到 \((i+x,j+y)\)。这部分的方案数为 \(g(k,x,y)\times s(p-k,0,0)\)

把它们减去,即可得到 \(g(p,x,y)\)

\[g(p,x,y)=\sum_{k=0}^{p-1}f_ks(p-k,x,y)-g(k,-x,-y)s(p-k,x,y)-g(k,x,y)s(p-k,0,0) \]

于是我们可以得到:

\[\sum d^2=\sum d+2\sum g(p,x,y) all_{n-p} \]

\(all_{n-p}\) 的原因和前面一样,我们找到位置对之后后面的步数可以随便走。乘 \(2\) 是因为一个位置对会造成两次贡献。

总时间复杂度 \(O(n^4)\),瓶颈在 \(g\) 的求解。

注意 \(g(*,0,0)\) 不合法一定为 \(0\),以及在求解 \(g\) 时需要尽量减少枚举常数。

posted @ 2023-10-13 17:29  ydtz  阅读(15)  评论(0编辑  收藏  举报