「uoj - 514」【UR #19】通用测评号

link


一个简单的转化:允许抽取已经 \(\geq a\) 的。

枚举每个 \(\geq a\) 的贡献,再枚举最后一个 \(\geq b\),最后概率乘以 \(n(n - 1)\) 即为答案。

如果记:

\[\begin{aligned} F(x) = (e^x - \sum_{i<a}\frac{x^i}{i!})(e^x - \sum_{i<b}\frac{x^i}{i!})^{n-2}\frac{x^{b-1}}{(b-1)!} \end{aligned} \]

则答案为 \(\sum [x^i]F(x)\times \frac{i!}{n^{i+1}}\)

考虑将其化简成 \(F(x) = \sum F_{i, j}e^{ix}x^j\),有:

\[\begin{aligned} \sum_{k}[x^k]e^{ix}x^j\times \frac{k!}{n^{k+1}} &= \sum_{p}\frac{(p + j)!}{p!}\times\frac{i^p}{n^{p+j+1}} \\ &= \frac{j!}{n^{j+1}}\times\sum_{p}\binom{p + j}{j}\times(\frac{i}{n})^p \\ &= \frac{j!}{n^{j+1}}\times \frac{1}{(1-\frac{i}{n})^{j+1}} \\ &= \frac{j!}{(n - i)^{j+1}} \\ \end{aligned} \]

因此概率为 \(\sum f_{i, j}\frac{j!}{(n-i)^{j+1}}\)


考虑怎么化简,直接 fft 可以做到 \(O(n^3\log n)\)(认为 \(n, a, b\) 同阶)。

尝试去掉 \(O(\log n)\)。考虑记 \(A(x) = \sum_{i=0}^{a-1}\frac{x^i}{i!}\),记 \(B(x) = \sum_{i=0}^{b-1}\frac{x^i}{i!}\)。只需要计算 \(B^{0\dots n-2}\)\(A\times B^{0\dots n-2}\)

注意到 \(B' = B + \frac{x^{b-1}}{(b-1)!}\),于是:

\[\begin{aligned} (B^k)' = kB^{k-1}B' = kB^k - kB^{k-1}\frac{x^{b-1}}{(b-1)!} \end{aligned} \]

类似地,有:

\[(AB^k)' = AB^k-\frac{x^{a-1}}{(a-1)!}B^k+kAB^k-kAB^{k-1}\frac{x^{b-1}}{(b-1)!} \]

因此可以递推计算。于是最终复杂度 \(O(n^3)\)

在 duls 的 https://codeforces.com/blog/entry/76447 中可以见到更多 ODE 的应用。


一开始发现自己跑得跟 fft 一样快,冷静一下发现自己多写了个快速幂。

如果没有最开始的那一步转化,其实也可以做,类似 uoj#449 的那种 dp 即可。

参考 https://blog.csdn.net/suncongbo/article/details/105853197 里的做法。


题号 514(无意识),古明地恋狂喜(虽然我并不是恋厨)。

posted @ 2021-03-17 17:28  Tiw_Air_OAO  阅读(141)  评论(0编辑  收藏  举报