link。
一个简单的转化:允许抽取已经 (geq a) 的。
枚举每个 (geq a) 的贡献,再枚举最后一个 (geq b),最后概率乘以 (n(n - 1)) 即为答案。
如果记:
[egin{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) imes frac{i!}{n^{i+1}})。
考虑将其化简成 (F(x) = sum F_{i, j}e^{ix}x^j),有:
[egin{aligned}
sum_{k}[x^k]e^{ix}x^j imes frac{k!}{n^{k+1}}
&= sum_{p}frac{(p + j)!}{p!} imesfrac{i^p}{n^{p+j+1}} \
&= frac{j!}{n^{j+1}} imessum_{p}inom{p + j}{j} imes(frac{i}{n})^p \
&= frac{j!}{n^{j+1}} imes 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^3log 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^{0dots n-2}) 与 (A imes B^{0dots n-2})。
注意到 (B' = B + frac{x^{b-1}}{(b-1)!}),于是:
[egin{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(无意识),古明地恋狂喜(虽然我并不是恋厨)。