zoukankan      html  css  js  c++  java
  • 「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(无意识),古明地恋狂喜(虽然我并不是恋厨)。

  • 相关阅读:
    Java中间件:淘宝网系统高性能利器(转)
    淘宝的数据库拆分(TDDL)(转)
    java web几种开发模式(转)
    C++模板【转】
    set[c++]
    C# jsonhelper
    Vector[C++]
    list[C++]
    map[C++]
    C[泊车管理系统]
  • 原文地址:https://www.cnblogs.com/Tiw-Air-OAO/p/14550674.html
Copyright © 2011-2022 走看看