LightOJ 1027 A Dangerous Maze:
预先求出递推式,最后通过公式直接计算。
1 |
|
LightOJ 1284 Lights inside 3D Grid:
要判断经过k次变换后的开灯的数目,我们可以先计算对于每一个cell而言,在经历了k次变换后,仍然开灯的期望,最后将每一个cell的期望相加即可。
有一个M*N*P的立方体,每次随机选两个格子,把它们之间的灯全打开(如果已经是打开的就关闭),经过K次操作之后开着的灯的个数的期望是多少。
把每个灯经过K次操作亮着的概率P求出来,因为每个灯是独立的,最后的期望也就是:
$$\Sigma(Pi*1+(1-Pi)*0)$$
对于一个灯来说, 设f[i]是经过i次操作亮着的概率,g[i]是经过i次操作不亮的概率,则有$f[i]+p[i]=1,f[i]=f[i-1]*(1-p)+g[i-1]*p$,这里的p是操作一次能操作到这个灯的概率。
通过这两个式子,能得到$f[i]=f[i-1]*(1-2p)+p$,两边加上b/(a-1),也就是0.5,成为等比数列,最后得到$f[i]=0.5-0.5*(1-2p)^i$。
那么只要对每个灯求出p就能算出答案了。能操作到这个灯等价于选的两个点的坐标在x轴,y轴,z轴都分别在这个灯坐标的两侧,对每个轴分别算符合的情况,然后相乘,最后除以所有情况就是概率。
1 |
|