题解 CF963E Circles of Waiting

\(f_{i,j}\) 表示 \((i,j)\) 走出以 \((0,0)\) 为圆心,半径为 \(R\) 的期望步数,显然所有在圆外的点 \((i,j)\) 满足 \(f_{i,j}=0\)

\(f_{i,j}=p_1 f_{i-1,j}+p_2 f_{i,j-1}+p_3f_{i+1,j}+p_4 f_{i,j+1}\)

这东西很套路,高斯消元就行,但状态数是 \(O(R^2)\) 的,复杂度 \(O(R^6)\)

考虑主元法,只用 \(O(R)\) 个参数表示 \(O(R^2)\) 个点,尝试将每行最左边的 \(2R+1\) 个数拉出来当主元。

因为

\[f_{i,j}=p_1 f_{i-1,j}+p_2 f_{i,j-1}+p_3f_{i+1,j}+p_4 f_{i,j+1} \]

所以有

\[f_{i+1,j}=\dfrac{f_{i,j}-p_1 f_{i-1,j}-p_2 f_{i,j-1}-p_4 f_{i,j+1}}{p_3} \]

\[f_{i,j}=\dfrac{f_{i-1,j}-p_1 f_{i-2,j}-p_2 f_{i-1,j-1}-p_4 f_{i-1,j+1}}{p_3} \]

从左往右推即可。

对于每行右边第一个走出圆的点,利用其 \(f\) 值为 \(0\),共可列出 \(2R+1\) 个方程,现在再去高斯消元就是 \(O(R^3)\) 的。

posted @ 2024-02-27 20:37  Terac  阅读(12)  评论(0)    收藏  举报