zoukankan      html  css  js  c++  java
  • 「CF923E Perpetual Subtraction」

    初始时,黑板上有一个正整数 (n) ,初始为 (i) 的概率是 (p_i) 。每一轮执行以下操作:

    • ([0,n]) 内随机选取一个正整数 (p)

    • (n) 擦掉,替换成 (p)

    给定 (m) , 对每个 (iin[0,n])(m) 轮之后这个数为 (i) 的概率。

    (1le nle 10^5,1le mle 10^{18})

    考虑一个位置 i 对位置 j 的贡献,推一推

    [F_j=sum_ifrac{p_i}i[x^{m-1}]prod_{k=j}^ifrac 1{1-frac xk} ]

    考虑怎么快速的算右边的东东,先说点前置的知识

    对于一些互不相同的 ( ho_i),存在 (a_i) 满足

    [frac 1{prod_{i=1}^k(1- ho_ix)}=sum_{i=1}^kfrac{a_i}{1- ho_ix} ]

    hy 说只要下面比上面次数大都可以(?)

    同时乘上左边分母

    [1=sum_{i=1}^ka_iprod_{j eq i}(1- ho_jx) ]

    代入 (x=frac 1{ ho_i})

    [a_i=frac 1{prod_{j eq i}(1-frac{ ho_j}{ ho_i})} ]

    然后对于这个式子的第 n 项

    [egin{aligned} left[x^n ight]prod_{i=1}^kfrac 1{1- ho_ix}&=[x^n]sum_{i=1}^kfrac{a_i}{1- ho_i x}\ &=sum_{i=1}^ka_i ho_i^n\ &=sum_{i=1}^kfrac{ ho_i^n}{prod_{j eq i}left(1-frac{ ho j}{ ho i} ight)}\ &=sum_{i=1}^kfrac{ ho_i^{n+k-1}}{prod_{j eq i}( ho_i- ho_j)} end{aligned} ]

    有了前置知识后,我们考虑如何求出这个东东:

    [egin{aligned} left[x^{m-1} ight]prod_{k=j}^ifrac 1{1-frac xk}&=sum_{k=j}^ifrac{(frac 1k)^{m-1+i-j+1-1}}{prod_{t eq k,jle tle i}(frac 1k-frac 1t)}\ &=sum_{k=j}^ifrac{(prod_{t eq k,jle tle i}t)(frac 1k)^{m-1}}{prod_{t eq k,jle tle i}(t-k)}\ &=sum_{k=j}^ifrac{i!}{(j-1)!}frac{(frac 1k)^m}{(k-j)!(i-k)!(-1)^{k-j}} end{aligned} ]

    于是

    [egin{aligned} F_j&=sum_ifrac{p_i}i[x^{m-1}]prod_{k=j}^ifrac 1{1-frac xk}\ &=frac 1{(j-1)!}sum_{k=j}^nfrac{(-1)^{k-j}}{(k-j)!k^m}sum_{i=k}^nfrac{p_i(i-1)!}{(i-k)!} end{aligned} ]

    附上一张胡杨爷的手稿

  • 相关阅读:
    Springmvc全局异常处理
    SpringMVC异常处理一
    [GDB7] gdb 的学习
    《Python 第七章》更加抽象
    python问题:IndentationError:expected an indented block错误解决
    [C/C++] C++ 类的学习
    [GCC6] gcc 的学习
    [Python] 列表 list
    [python] 循环与轻量级 pass, del, eval
    《Python 第八章》异常
  • 原文地址:https://www.cnblogs.com/xay5421/p/13603675.html
Copyright © 2011-2022 走看看