[ZJOI2020] 抽卡

  • 题目链接

    luoguP6633

    uoj#588

    loj#3315

  • 题目大意

    给定一个集合 \(S=\{a_1,a_2\dots,a_m\}\) ,随机放回抽样,问抽到存在连续元素段长为 \(k\) 的期望次数。

    答案对 \(998244353\) 取模。

    \(|S|=m\le2\times10^5,1\le a_i\le 2m,2\le k\le m\),保证存在长为 \(k\) 的连续段。

  • 题解

    考虑所有长为 \(k\) 的连续段集合 \(K\) ,那么我们要求的就是最早出现一个元素的期望,这可以 \(min-max\) 容斥,转为求其一个子集所有元素均出现的期望。

    而在集合 \(S\) 中选出特定 \(i\) 个元素的期望为 \(\sum_{j=1}^i\frac{m}{j}\) ,所以问题转化为求子集中元素并为 \(i\) 的容斥系数和。

    我们考虑在容斥过程中一个极长连续段的贡献。可以发现,若我们选择了某一连续段 \([i,i+k-1]\),那么接下来有贡献的只有选择 \([i+1,i+k]\) ,因为若选择任意开头 \(j>i+1\) 的连续段,我们关于 \((i,j)\) 中的选择不会影响并的大小,而根据二项式定理,容斥系数和为 \(0\) ,没有贡献。

    那么我们可以将一个极长连续段分为若干长为 \(k+1\) 的连续段,然后计算贡献,利用生成函数,即得:

    \[G_{len}(x)=\sum_{i=0}^{\lfloor \frac{len}{k+1}\rfloor}\binom{len-ik}{i}x^{ik}(x-1)^i \]

    那么再加上选择最后连续 \(k\) 个的贡献,一个长为 \(len\) 的极长连续段贡献即为:

    \[G_{len}(x)-x^kG_{len-k}(x) \]

    \(G\) 以及最后合并答案均可以分治 \(FFT\) 实现,复杂度 \(\mathcal O(m\log^2m)\)

posted @ 2021-03-16 22:43  leukocyte  阅读(109)  评论(0编辑  收藏  举报