专栏文章

CF441E Valera and Number - Solution

CF441E题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minnfave
此快照首次捕获于
2025/12/02 05:15
3 个月前
此快照最后确认于
2025/12/02 05:15
3 个月前
查看原文
先把原题的 pp100100
简单来说,xx 开始,pp 概率乘 221p1 - p 概率加 11,求期望末尾 00 个数。

最朴素想法是设 fi,vf_{i,\,v} 代表 ii 次操作后 xx 变为 vv 的概率,当然这个状态数超级大,没啥讨论的必要。
kk 对比之下显得很小,接下来有几条路可以走。
  • 11 至多有两百次,那我直接维护后 88 位即可!
不过我们的 xx 毕竟是一个任意的数,它是完全有可能加一些 11 就产生超过 88 位的进位的。
那我们把 88 位以上连续 11 的个数也加入状态,毕竟显然超过 88 位的进位至多只有一次。
不过这样就要把两个过程拆开来,毕竟这种情况我们默认产生了进位,并且后面没有 +1+1 把进位产生的这坨 00 顶掉。所以如果超八位进位后还有加 11,那么进位产生的这坨 00 对最终末尾 00 的个数当然产生不了影响,于是要设另一个 dp 来转移这种情况。
fi,j,kf_{i,\,j,\,k} 代表前 ii 次操作使得八位以上末尾连续 11 的个数是 jj,且末尾八位是 kk 的概率。
gi,jg_{i,\,j} 代表前 ii 次操作,末尾有 jj 个零的方案数,强制令 j>8j > 8
写起来会比较复杂,但总之我们容易获得一个 Θ(k3)\Theta(k^3) 的做法。
  • 考虑时光倒流!
不难发现我们是越靠后的操作产生的影响越大。比如我们在末尾进行了几次乘 22,那么继续往前的加 11 肯定不会对最低位产生影响。
假设我们末尾进行了 tt 次乘 22,在这坨乘 22 之前我们对 xx 产生了 +w+w 的影响
首先如果 ww 是偶数,那么可以看成 t+1t + 1 次乘 22 和前面 +w2+\frac{w}{2} 的的影响。
如果 ww 是奇数,显然我们的末尾 00 个数直接就是 tt 了。
fi,j,wf_{i,\,j,\,w} 代表进行了末尾 ii 次操作,并且结尾有 jj 个乘 22,在这 jj 个乘 22 之前有 +w+w 的影响。
转移上面直接得出来了,讨论 ww 的奇偶性即可。
至于 ww 的范围,只有加 11 是能扩展 ww 的范围的,至多有 kk 次加 11
复杂度 Θ(k3)\Theta(k^3)
  • 费用提前计算!
上面这个东西其实可以做得更好,我们为什么要把末尾乘 22 的数量 jj 纳入状态,因为我们要在最后乘上一个 ppjj 次方得到这个状态的概率,但是我们知道期望具有线性性,于是可以把 jj 这一维直接去了,直接乘 pp 贡献给答案。
大概是个这样的东西:
CPP
if (j mod 2 == 0) f[i + 1][j / 2] += f[i][j] * p, ans += f[i][j] * p;
f[i + 1][j + 1] += f[i][j] * (1 - p);
时间复杂度 Θ(k2)\Theta(k^2)

评论

0 条评论,欢迎与作者交流。

正在加载评论...