【UOJ#514】通用测评号

题目

直接算是非常困难的,因为每填满一个仓库之后分母就变了。

但是不难发现"等概率随机选一个没有满的燃料舱"其实是没什么用的,直接转化为等概率选取一个位置\(+1\),求\(\geq a\)位置个数的期望。这样的话概率就一直是\(\frac{1}{n}\)

考虑对于\(1\)号位置计算在全部位置\(\geq b\)之前\(1\)号位置\(\geq a\)的概率是多少,由于每个位置是等价的,所以乘\(n\)就是答案了。

将每次填的位置拿出来形成一个序列,考虑在这个序列有\(a\)\(1\)的时候就停下来。这样概率就和序列长度相关了。同时我们还需要保证至少有一个位置在序列的出现次数少于\(b\)次,否则在出现\(a\)\(1\)之前就停下来了。

\(F(x)=\sum_{i=0}^{b-1}\frac{x^i}{i!}\),可以用生成函数将序列写成如下形式:

\[\frac{x^{a-1}}{(a-1)!}\sum_{i=1}^n\binom{n-1}{i}F^i(x)(e^x-F(x))^{n-1-i} \]

即选出\(i\)个位置来出现次数少于\(b\),剩下的\(n-1-i\)个位置出现次数大于等于\(b\)\(1\)出现了\(a\)次且必定出现在最后,于是只剩下\(a-1\)个位置可以随便排列。

后面用一下二项式定理,就能得到:

\[\frac{x^{a-1}}{(a-1)!}[e^{(n-1)x}-(e^x-F(x))^{n-1}] \]

再用一下二项式定理将\((e^x-F(x))^{n-1}\)展开得:

\[\frac{x^{a-1}}{(a-1)!}[e^{(n-1)x}-\sum_{i=0}^{n-1}\binom{n-1}{i}(-F(x))^ie^{(n-1-i)x}] \]

之后我们会得到一些形如\(c\times x_i\times e^{jx}\)的东西,直接展开得\(c\sum_{k=0}^{\infty}\frac{j^k(k+i)!}{k!n^{k+i+1}}=\frac{c}{n^{i+1}}\sum_{k=0}^{\infty}(\frac{j}{n})^k(k+i)^{\underline i}\)。这里的\(\frac{1}{n^{i+k+1}}\)是这个长度为\(i+k+1\)的序列出现的概率,\(+1\)是因为还有被钦定在最后一个位置的\(1\)

之后推一波式子:

\[\begin{aligned} &\sum_{k=0}^{\infty}(\frac{j}{n})^k(k+i)^{\underline i}\\ =&i!\sum_{k=0}^{\infty}(\frac{j}{n})^k\binom{k+i}{i}\\ =&i!\sum_{k=0}^{\infty}(\frac{j}{n})^k\binom{k+(i+1)-1}{(i+1)-1} \end{aligned} \]

生成函数中有一个经典结论,\(\sum_{k=0}^{\infty}x^k\binom{k+i-1}{i-1}=\frac{1}{(1-x)^{i}}\),于是我们可以将\(\frac{j}{n}\)看成\(x\),就能得到

\[i!\sum_{k=0}^{\infty}(\frac{j}{n})^k\binom{k+i}{i}=\frac{1}{(1-\frac{j}{n})^{i+1}} \]

于是\(c\times x_i\times e^{jx}=\frac{i!c}{n^{i+1}(1-\frac{j}{n})^{i+1}}=\frac{i!c}{(n-j)^{i+1}}\)\((-F(x))\)的各次幂可以直接暴力NTT来算,于是复杂度为\(O(n^3\log n)\)

代码

posted @ 2020-05-27 13:34  asuldb  阅读(256)  评论(1编辑  收藏  举报