[UER #6]逃跑

Posted StaroForgin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[UER #6]逃跑相关的知识,希望对你有一定的参考价值。

逃跑

题解

首先根据期望的线性性,我们可以将方差的期望转化成平方的期望减去期望的平方。
E ( ( x − E ( x ) ) 2 ) = E ( x 2 − 2 x E ( x ) + E 2 ( x ) ) = E ( x 2 ) − 2 E ( x ) E ( x ) + E 2 ( x ) = E ( x 2 ) − E 2 ( x ) E((x-E(x))^2)=E(x^2-2xE(x)+E^2(x))=E(x^2)-2E(x)E(x)+E^2(x)=E(x^2)-E^2(x) E((xE(x))2)=E(x22xE(x)+E2(x))=E(x2)2E(x)E(x)+E2(x)=E(x2)E2(x)所以我们的目的是算出我们的 E ( x ) E(x) E(x) E ( x 2 ) E(x^2) E(x2),这两者可以通过 d p dp dp求解。

首先考虑如何求解 E ( x ) E(x) E(x)
我们可以先算出可以走到一个节点的方案数,记走 i i i步走到节点 ( x , y ) (x,y) (x,y) g ( i , x , y ) g(i,x,y) g(i,x,y)种方案,显然可以递推求出。
但这些方案并不能保证我们是第一次走到节点 ( x , y ) (x,y) (x,y),也就是说这样的话一个节点有可能被统计多次,不妨记录 f ( i , x , y ) f(i,x,y) f(i,x,y)表示在第 i i i步第一次走到节点 ( x , y ) (x,y) (x,y)的方案数。
对于 f f f我们可以通过容斥求出,
f ( i , x , y ) = g ( i , x , y ) − ∑ j = 0 i − 1 f ( j , x , y ) g ( i − j , 0 , 0 ) f(i,x,y)=g(i,x,y)-\\sum_j=0^i-1f(j,x,y)g(i-j,0,0) f(i,x,y)=g(i,x,y)j=0i1f(j,x,y)g(ij,0,0)需要减去先前已经到过该点的方案。
求出 f ( i , x , y ) f(i,x,y) f(i,x,y),之后的方案无论怎么走都显然已经到过 ( x , y ) (x,y) (x,y)了。
实际上该 f ( i , x , y ) f(i,x,y) f(i,x,y)对我们答案的贡献为 ( w 1 + w 2 + w 3 + w 4 ) n − i f ( i , x , y ) (w_1+w_2+w_3+w_4)^n-if(i,x,y) (w1+w2+w3+w4)nif(i,x,y),将所有 f ( i , x , y ) f(i,x,y) f(i,x,y)的贡献加起来就行了。

但我们的 E ( x 2 ) E(x^2) E(x2)又该怎么算呢?
显然有组合恒等式 x 2 = 2 ( x 2 ) + x x^2=2\\binomx2+x x2=2(2x)+x
所以 E ( x 2 ) = 2 E ( ( x 2 ) ) + E ( x ) E(x^2)=2E(\\binomx2)+E(x) E(x2)=2E((2x))+E(x),其中 E ( ( x 2 ) ) E(\\binomx2) E((2x))可以表示成在路径经过两个不同点的期望对数。
这显然也可以通过 d p dp dp求解。
我们定义 q ( i , x , y ) q(i,x,y) q(i,x,y)表示我们从 ( 0 , 0 ) (0,0) (0,0)出发走 i i i步又回到 ( 0 , 0 ) (0,0) (0,0)但路途中又经过点 ( x , y ) (x,y) (x,y)的方案数。
这显然可以通过我们的 f f f g g g求出。
q ( i , x , y ) = ∑ j = 0 i − 1 g ( i , x , y ) f ( i − j , − x , − y ) q(i,x,y)=\\sum_j=0^i-1g(i,x,y)f(i-j,-x,-y) q(i,x,y)=j=0i1g(i,x,y)f(ij,x,y)(如果这里使用 g g g f f f转移的话一条经过 ( x , y ) (x,y) (x,y)的路径不会被统计多次吗,个人对这里存疑。)
我们再定义 p ( i , x , y ) p(i,x,y) p(i,x,y)表示我们走 k k k步到达某点后再走 i − k i-k ik步,移动位置 ( x , y ) (x,y) (x,y)第一次到达某点的方案数。
显然, p p p可以通过容斥求出。
p ( i , x , y ) = ∑ j = 0 i − 1 ( ∑ x ′ , y ′ f ( j , x ′ , y ′ ) ) ( g ( i − j , x , y ) − q ( i − j , − x , − y ) ) − p ( j , x , y ) ( g ( i − j , 0 , 0 ) − q ( i − j , − x , − y ) ) p(i,x,y)=\\sum_j=0^i-1(\\sum_x',y'f(j,x',y'))(g(i-j,x,y)-q(i-j,-x,-y))-p(j,x,y)(g(i-j,0,0)-q(i-j,-x,-y)) p(i,x,y)=j=0i1(x,yf(j,x,y))(g(ij,x,y)q(ij,以上是关于[UER #6]逃跑的主要内容,如果未能解决你的问题,请参考以下文章

UOJ #210UER #6寻找罪犯

uoj#209[UER #6]票数统计 组合数+乱搞

逃跑吧少年拆包乱码问题的解决

程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒

如何将csv读入python中的字典?

Uer-Agent