「uoj - 514」【UR #19】通用测评号
link。
一个简单的转化:允许抽取已经 \(\geq a\) 的。
枚举每个 \(\geq a\) 的贡献,再枚举最后一个 \(\geq b\),最后概率乘以 \(n(n - 1)\) 即为答案。
如果记:
则答案为 \(\sum [x^i]F(x)\times \frac{i!}{n^{i+1}}\)。
考虑将其化简成 \(F(x) = \sum F_{i, j}e^{ix}x^j\),有:
因此概率为 \(\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)!}\),于是:
类似地,有:
因此可以递推计算。于是最终复杂度 \(O(n^3)\)。
在 duls 的 https://codeforces.com/blog/entry/76447 中可以见到更多 ODE 的应用。
一开始发现自己跑得跟 fft 一样快,冷静一下发现自己多写了个快速幂。
如果没有最开始的那一步转化,其实也可以做,类似 uoj#449 的那种 dp 即可。
参考 https://blog.csdn.net/suncongbo/article/details/105853197 里的做法。
题号 514(无意识),古明地恋狂喜(虽然我并不是恋厨)。