【湖南集训 4.1】巧克力

题目描述

你有 C 种不同的巧克力,每种都有无限个。
问有次序地取出n个后,个数为奇数的巧克力种类数恰为 m 的概率。

n109,0mC105


分析

考虑生成函数。令

f(x)=(10!+x22!+x44!)Cm(x1!+x33!+x55!)m

那么答案就是

(Cm)n![xn]f(x)Cn

上面那两个式子的生成函数,其实分别是

exex2


ex+ex2

(这部分考场上没推出来,一直纠结怎么把奇数项和偶数项提出来,实际上这么简单的小技巧是要记住的。

那么剩下的就顺理成章了。

f(x)=(exex2)Cm(ex+ex2)m

=(e2x12ex)Cm(e2x+12ex)m

=(e2x1)Cm(e2x+1)m2CeCx

换元 y=e2x

f(x)=(y1)Cm(y+1)m2CeCx

现在要求出这个函数的 n 次项系数。

想一下这个东西乘开以后长啥样,大概是一个二次项展开的形式。

f(x)=max(m,Cm)i=0diyi2CeCx

这里下面除的一个 eCx 实际上可以直接在对应的系数上减掉。
用快速幂FFT可以 O(ClogC) 算出 di

y 带回去,我们要考虑e2ix n 次项的贡献。
实际上e2ix泰勒展开以后长这个样

10!+(2ix)11!+(2ix)22!

因此,它对 n 次项的贡献显然就是

(2i)nn!

而我们最后乘上的 n! 恰好与这里的抵消掉了。

于是问题就这样被解决了。

时间复杂度 O(ClogC)
空间复杂度 O(C)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值