[Maths] 数学做题记录

一些前置内容

Min-Max 容斥

maxxSx=TS(1)T1minxTx

minxSx=TS(1)T1maxxTx

E(maxxSx)=TS(1)T1E(minxTx)

E(minxSx)=TS(1)T1E(maxxTx)

P7481 梦现时刻

由题得:

F(a,b)=i=0b(bi)(nia)

根据公式 (nm)=(n1m1)+(n1m),有:

F(a,b)=i=0b(b1i1)(nia)+i=0b(b1i)(nia)

F(a,b)=i=0b(b1i1)(nia)+F(a,b1)

好的我们发现这个式子烦人的一点就是 i=0b(b1i1)(nia),考虑将其也写成若干个 F 乘系数的形式。

i=0b(b1i1)(nia)=i=1b1(b1i)(ni1a)

=i=1b1(b1i)(nia)i=1b1(b1i)(ni1a1)

=F(a,b1)i=1b1(b1i)(ni1a1)

现在的目标转化为化简 i=1b1(b1i)(ni1a1),继续:

i=1b1(b1i)(ni1a1)=i=1b1(bi+1)(ni1a1)i=1b1(b1i+1)(ni1a1)

=i=0b(bi)(nia1)i=0b(b1i)(nia1)

因为 (b1b)=0,所以有:

=i=0b(bi)(nia1)i=0b1(b1i)(nia1)

=F(a1,b)F(a1,b1)

整理一下,有:

i=1b1(b1i)(ni1a1)=F(a1,b)F(a1,b1)

i=0b(b1i1)(nia)=F(a,b1)(F(a1,b)F(a1,b1))

i=0b(b1i1)(nia)=F(a,b1)F(a1,b)+F(a1,b1)

F(a,b)=F(a,b1)F(a1,b)+F(a1,b1)+F(a,b1)

F(a,b)=2F(a,b1)F(a1,b)+F(a1,b1)

好的!我们现在得到了递推式,可以 O(m2) 计算,但是考虑一些边界情况:

F(0,b)=2b

F(a,0)=(na)

因为 n109,所以需要使用以下公式计算:

(na)=i=na+1nia!

P3175 [HAOI2015] 按位或

这里设 U={0,1,,n1}

ti(0i<n) 表示 2i 这个二进制位在第 ti 次操作时 第一次从 01

那么答案为 maxi=0n1ti,为了方便转化为 Min-Max 容斥的形式,考虑将其写成 maxiUti

因为 maxiSti 很难求解,所以考虑求 miniSti

我们考虑求选出的数集与 S 的交集不为空的概率:这样很难计算,考虑正难则反:求出选出的数集与 S 的交集为空的概率,也就是选出的数集是 US 的子集的概率,高维前缀和可以 O(2n×n) 求解。

然后考虑套用 Min-Max 容斥的公式:

maxxSx=TS(1)T1minxTx

然后将 (1)T1minxTx 扔到一个数组中,然后跑一遍高维前缀和即可。

posted @   CountingGroup  阅读(24)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示