AGC038E Gachapon

充满套路的一道好题,值得记录,单独拎出来了。

转化一下题意就是求最后一个完成xiBi的期望时间。

典型的Min-max容斥形式 转化一下

E(max{S})=TS(1)|T|1E(min{T})

这里max{S}是完成最后一个xiBi的时间所以min{S}就是第一个

考虑如何求E(min{T}) 考虑当前集合T={x1,x2,,xm}我们求它们所有都没有到达Bx的贡献之和

长这样

SAA[xi]0di<B[xi](di)!di!(A[xi]A[xi])di

我来挨个解释一下 SAA[xi]是得到一个指定集合内元素的期望时间 (di)!di!可重元素排列因为每个数出现都是钦定的次数要排列一下 (A[xi]A[xi])di是对于集合内指定每个数的概率

当然我们可以把(1)直接写进柿子里方便dp

考虑对这个柿子里加入一个新的y=xj

SAA[y]+A[xi]0di<B[xi]0dy<B[y](dy+di)!dy!+di!(A[y]A[y]+A[xi])dy(A[xi]A[y]+A[xi])di

可以发现 我们只需要记录影响的A[xi]di就可以了

其余的只是乘了一个A[xi]didi!

最后用f[n][x][y]状态里记录的A[xi]di再算一下总贡献就可以了

因为转移不超过O(Bi)次 所以时间复杂度是O((Bi)2Ai)

代码实现起来超级简单= =

posted @   寒雨微凝  阅读(711)  评论(1编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示