P6046 纯粹容器

原题

期望不要光往dp想!!!

期望不要光往dp想!!!

期望不要光往dp想!!!


对于每一个数ai分别考虑,E(ti)表示i的期望删除轮数;P(ti=x)表示i恰好在第i轮删除的概率,容易得到:

E(ti)=x1x×P(ti=x)

容易发现可能使i被删除的只有前面距离最近的ax>ai的位置和后面距离最近的ax>ai的位置,我们设这两个位置下标分别为presuf

我们可以O(n)暴力计算P(ti=x)的值:

P(ti=x)=x!×(j+k=x(ipre),j<sufi(ipreipre1)(sufij)(n1(sufpre)k)+j+k=x(sufi),j<ipre(iprej)(sufisufi1)(n1(sufpre)k))x!×(n1x)

这个做法复杂度是O(n3)


我们明显可以感到这个式子不太对劲对吧,感性来说,因为有ti=x的限制,我们必须保证第xi必须被删掉,这个限制似乎成了一种累赘,拉大了计算P(ti=x)的复杂度

我们这时候要用一个比较经典的转化:

(1)E(ti)=x1x×P(ti=x)(2)=x1P(tix)

其中P(tix)表示i消失的轮数x的概率

这时候虽然计算P的复杂度还是不太对,但我们感觉起来就比较舒服了:

P(tix)=x!×a+b+c=x,a<(ipre),b<(sufi)(iprea)(sufib)(n1(sufpre)c)x!×(n1x)

这个做法复杂度是O(n4)


虽然式子变得优美了,但这个复杂度不是我们想要的,因此我们考虑怎么优化复杂度

正难则反,我们考虑能不能计算P(ti<x)的概率,则P(tix)=1P(ti<x)

P(A)prei这一段全部被选的概率,P(B)表示isuf这一段全部被选的概率;P(AB)表示presuf这一段全部被选的概率

我们发现这个比较好做,因为ti<x说明preiisuf中有一个选了,这个可以用容斥原理解决;

(3)P(ti<x)=P(A)+P(B)P(A+B)(4)=(n1(ipre)x(ipre))(n1x)+(n1(sufi)x(sufi))(n1x)(n1(sufpre)x(sufpre))(n1x)(5)=(n1(ipre)x(ipre))+(n1(sufi)x(sufi))(n1(sufpre)x(sufpre))(n1x)

复杂度O(n2)


貌似还有O(n)做法

posted @   FOX_konata  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示