zoukankan      html  css  js  c++  java
  • 「codeforces

    link


    以下记 (L = sum l_i)

    (p_{i,j}) 表示第 (i) 块巧克力切 (j) 刀,使得每段长度 (< k) 的概率。

    (P_i(z) = sumfrac{p_{i,j}}{j!}(frac{l_i}{L}z)^j)

    (Q(z) = e^z -prod P_i(z) = sumfrac{q_k}{k!}z^k),表示第 (k) 步仍未结束的概率为 (q_k)

    则可以得到 (E = sum[z^i]Q(z) imes i!)


    考虑给定单个巧克力原长为 (l),求切 (m) 刀,使得每段长度 (< k) 的概率 (p_m)

    换元:原长为 (w = frac{l}{k}),每段长度 (< 1)

    即随机生成 ((X_1, X_2, dots, X_m)) 满足 (0 < X_i < frac{l}{k}),求加入 (X_0 = 0, X_{m+1} = frac{l}{k}) 并排序后 (X'_{i+1} - X'_i < w) 的概率 (p_m)

    考虑直接随机生成差分变量 (Y_1,Y_2,dots Y_m),则需满足要求 (0 < Y_i < 1, w - 1 < sum Y_i < w)

    注意此时生成 (Y_i) 时要求 (Y_i > 0,sum Y_i < w),积分可得 (frac{w^m}{m!})

    考虑计算如下的积分:

    [F(x) = int_{Y_iin(0, 1),sum Y_i < x}1dY_1dY_2dots dY_m ]

    几何意义即 (m) 维下的超立方体((Y_iin(0, 1)))与超棱锥((Y_i>0,sum Y_i<x))的交。

    可以证明 (F(x) = sum_{t=0}^{lfloor x floor}(-1)^kinom{n}{t} imes frac{(x-t)^m}{m!})

    证明思路可以考虑容斥,枚举有 (t)(Y > 1)

    这个分布在 tutorial 中被称为 "Irwin–Hall distribution"(连百度都百度不到的东西 那只能说明百度是屑)。

    由上,我们已经可以计算概率 (p_m)(下记 (u = lfloor w floor)):

    [egin{aligned} p_m &= frac{F(w) - F(w-1)}{frac{w^m}{m!}} \ &= left(sum_{t=0}^u(-1)^tinom{m}{t}(1-frac{t}{w})^m ight) - left(sum_{t=0}^{u-1}(-1)^tinom{m}{t}(1-frac{t+1}{w})^m ight) end{aligned} ]

    通过变换可得 (p_m = sum_{t=0}^{u}(-1)^tinom{m+1}{t}(1-frac{t}{w})^m),但这个形式只是更简洁,其实并不影响我们下面的代入。


    后面的推导就比较 trivial 了,稍微写简略一点吧。 对不起,我一开始推错了。后面的某些推导还是有些 tricky 的。

    (w_i = frac{l_i}{k}, u_i = lfloor w_i floor),直接代入 (p_{i,j})

    [egin{aligned} F_i(z) &= sum_{jgeq 0}left(sum_{t=0}^{u_i}(-1)^tinom{j}{t}(1-frac{t}{w_i})^j ight) imesfrac{(frac{l_i}{L}z)^j}{j!} \ G_i(z) &= sum_{jgeq 0}left(sum_{t=0}^{u_i-1}(-1)^tinom{j}{t}(1-frac{t+1}{w_i})^j ight) imesfrac{(frac{l_i}{L}z)^j}{j!}\ P_i(z) &= F_i(z) - G_i(z) end{aligned} ]

    接下来算 (F_i)(G_i) 同理),注意 ((1-frac{t}{w_i}) imesfrac{l_i}{L} = frac{l_i-tk}{L})

    [egin{aligned} F_i(z) &= sum_{t=0}^{u_i}frac{(-1)^t}{t!} imesleft(sum_{jgeq 0}frac{(frac{l_i-tk}{L}z)^j}{(j-t)!} ight)\ &= sum_{t=0}^{u_i}frac{(-1)^t}{t!} imesleft(frac{l_i-tk}{L}z ight)^t imesexp(frac{l_i-tk}{L}z) \ &= exp(frac{l_i}{L}z) imes left(sum_{t=0}^{u_i}frac{(-1)^t}{t!} imesleft(frac{l_i-tk}{L}z ight)^t imesexp(-frac{kt}{L}z) ight) end{aligned} ]

    稍后会看到,提出因子 (exp(frac{l_i}{L}z)) 这一步将会简化我们的状态定义。

    在提出因子 (exp(frac{l_i}{L}z)) 后,(F_i(z)) 剩余部分可以表示成 (f_tz^texp^t(-frac{k}{L}z));同理 (G_i(z)) 剩余部分可以表示成 (g_tz^texp^{t+1}(-frac{k}{L}z))

    因此 (Q(z)) 可以表示成 (exp(z) imes(1 - sum a_{i,j}z^iexp^{i+j}(-frac{k}{L}z))),其中 (ileq L, j leq n)

    之后只需要考虑计算 (sum[z^t]z^i imesexp(Az) imes t!),即 (sum_{tgeq 0}(t+i)^{underline{i}}A^t=frac{i!}{(1 - A)^{i+1}})

    可以错位相减得到结果,也可以考虑变形成 (i!suminom{t+i}{i}A^t)

    时间瓶颈卡在求 (Q(z)) 的系数,暴力复杂度 (O(nL^2))(虽然看似是 (O(n^2L^2))),但是出题人很仁慈,所以可以通过。

    直接 fft 可做到 (O(n^2Llog(L))),分治 fft 可做到 (O(nLlog(nL)))


    小疑惑:

    虽然说连续函数考虑端点取值没有意义。

    但是考虑如果仅有一根长度为 (k) 的巧克力棒,要求长度 (< k) 和要求长度 (leq k) 的答案不一样。

    嗯,想不透彻。

    连续概率好难!!!好难!!!好难啊!!!


    代码实现大概之后会补上,由于现在没有实现所以不保证内容的正确性。

    边写代码边修锅过后的结果:https://codeforces.com/contest/1477/submission/106333507 (force)。

  • 相关阅读:
    linux ubuntu 指令
    java tomcat linux 环境变量设置
    ubuntu 窗口操作快捷键
    vim 常用命令
    ubuntu 语言设置
    SQL用户存在则更新不存在则插入
    下载组件Jspsmartupload中文乱码解决办法
    ExtJS学习
    JSP 通过Session和Cookie实现网站自动登录
    SpringMVC XXX-servlet.xml ApplicationContext.xml
  • 原文地址:https://www.cnblogs.com/Tiw-Air-OAO/p/14364775.html
Copyright © 2011-2022 走看看