• 「uoj


    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(无意识),古明地恋狂喜(虽然我并不是恋厨)。

  • 相关阅读:
    android自定义Dialog
    go笔记-内存回收分析、内存统计信息字段释义
    go笔记-defer以及性能
    go笔记-goroutine和panic
    并发编程-高性能IO-reactor模式
    go笔记-查看coredump:delve调试工具
    IO多路复用[转]
    kubernates 1.20.6安装
    JavaScript 数组元素的一些操作
    如何理解 Java 多线程
  • 原文地址:https://www.cnblogs.com/Tiw-Air-OAO/p/14550674.html
Copyright © 2020-2023  润新知