专栏文章
CF441E Valera and Number - Solution
CF441E题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minnfave
- 此快照首次捕获于
- 2025/12/02 05:15 3 个月前
- 此快照最后确认于
- 2025/12/02 05:15 3 个月前
先把原题的 除 。
简单来说, 开始, 概率乘 , 概率加 ,求期望末尾 个数。
最朴素想法是设 代表 次操作后 变为 的概率,当然这个状态数超级大,没啥讨论的必要。
对比之下显得很小,接下来有几条路可以走。
- 加 至多有两百次,那我直接维护后 位即可!
不过我们的 毕竟是一个任意的数,它是完全有可能加一些 就产生超过 位的进位的。
那我们把 位以上连续 的个数也加入状态,毕竟显然超过 位的进位至多只有一次。
不过这样就要把两个过程拆开来,毕竟这种情况我们默认产生了进位,并且后面没有 把进位产生的这坨 顶掉。所以如果超八位进位后还有加 ,那么进位产生的这坨 对最终末尾 的个数当然产生不了影响,于是要设另一个 dp 来转移这种情况。
设 代表前 次操作使得八位以上末尾连续 的个数是 ,且末尾八位是 的概率。
代表前 次操作,末尾有 个零的方案数,强制令 。
写起来会比较复杂,但总之我们容易获得一个 的做法。
- 考虑时光倒流!
不难发现我们是越靠后的操作产生的影响越大。比如我们在末尾进行了几次乘 ,那么继续往前的加 肯定不会对最低位产生影响。
假设我们末尾进行了 次乘 ,在这坨乘 之前我们对 产生了 的影响
首先如果 是偶数,那么可以看成 次乘 和前面 的的影响。
如果 是奇数,显然我们的末尾 个数直接就是 了。
代表进行了末尾 次操作,并且结尾有 个乘 ,在这 个乘 之前有 的影响。
转移上面直接得出来了,讨论 的奇偶性即可。
至于 的范围,只有加 是能扩展 的范围的,至多有 次加 。
复杂度 。
- 费用提前计算!
上面这个东西其实可以做得更好,我们为什么要把末尾乘 的数量 纳入状态,因为我们要在最后乘上一个 的 次方得到这个状态的概率,但是我们知道期望具有线性性,于是可以把 这一维直接去了,直接乘 贡献给答案。
大概是个这样的东西:
CPPif (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);
时间复杂度 。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...