「codeforces - 1477F」 Nezzar and Chocolate Bars
link。
以下记 \(L = \sum l_i\)。
记 \(p_{i,j}\) 表示第 \(i\) 块巧克力切 \(j\) 刀,使得每段长度 \(< k\) 的概率。
记 \(P_i(z) = \sum\frac{p_{i,j}}{j!}(\frac{l_i}{L}z)^j\)。
记 \(Q(z) = e^z -\prod P_i(z) = \sum\frac{q_k}{k!}z^k\),表示第 \(k\) 步仍未结束的概率为 \(q_k\)。
则可以得到 \(E = \sum[z^i]Q(z)\times 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!}\)。
考虑计算如下的积分:
几何意义即 \(m\) 维下的超立方体(\(Y_i\in(0, 1)\))与超棱锥(\(Y_i>0,\sum Y_i<x\))的交。
可以证明 \(F(x) = \sum_{t=0}^{\lfloor x\rfloor}(-1)^k\binom{n}{t}\times \frac{(x-t)^m}{m!}\)。
证明思路可以考虑容斥,枚举有 \(t\) 个 \(Y > 1\)。
这个分布在 tutorial 中被称为 "Irwin–Hall distribution"(连百度都百度不到的东西
那只能说明百度是屑)。
由上,我们已经可以计算概率 \(p_m\)(下记 \(u = \lfloor w\rfloor\)):
通过变换可得 \(p_m = \sum_{t=0}^{u}(-1)^t\binom{m+1}{t}(1-\frac{t}{w})^m\),但这个形式只是更简洁,其实并不影响我们下面的代入。
后面的推导就比较 trivial 了,稍微写简略一点吧。 对不起,我一开始推错了。后面的某些推导还是有些 tricky 的。
记 \(w_i = \frac{l_i}{k}, u_i = \lfloor w_i\rfloor\),直接代入 \(p_{i,j}\):
接下来算 \(F_i\)(\(G_i\) 同理),注意 \((1-\frac{t}{w_i})\times\frac{l_i}{L} = \frac{l_i-tk}{L}\)。
稍后会看到,提出因子 \(\exp(\frac{l_i}{L}z)\) 这一步将会简化我们的状态定义。
在提出因子 \(\exp(\frac{l_i}{L}z)\) 后,\(F_i(z)\) 剩余部分可以表示成 \(f_tz^t\exp^t(-\frac{k}{L}z)\);同理 \(G_i(z)\) 剩余部分可以表示成 \(g_tz^t\exp^{t+1}(-\frac{k}{L}z)\)。
因此 \(Q(z)\) 可以表示成 \(\exp(z)\times(1 - \sum a_{i,j}z^i\exp^{i+j}(-\frac{k}{L}z))\),其中 \(i\leq L, j \leq n\)。
之后只需要考虑计算 \(\sum[z^t]z^i\times\exp(Az)\times t!\),即 \(\sum_{t\geq 0}(t+i)^{\underline{i}}A^t=\frac{i!}{(1 - A)^{i+1}}\)。
可以错位相减得到结果,也可以考虑变形成 \(i!\sum\binom{t+i}{i}A^t\)。
时间瓶颈卡在求 \(Q(z)\) 的系数,暴力复杂度 \(O(nL^2)\)(虽然看似是 \(O(n^2L^2)\)),但是出题人很仁慈,所以可以通过。
直接 fft 可做到 \(O(n^2L\log(L))\),分治 fft 可做到 \(O(nL\log(nL))\)。
小疑惑:
虽然说连续函数考虑端点取值没有意义。
但是考虑如果仅有一根长度为 \(k\) 的巧克力棒,要求长度 \(< k\) 和要求长度 \(\leq k\) 的答案不一样。
嗯,想不透彻。
连续概率好难!!!好难!!!好难啊!!!
代码实现大概之后会补上,由于现在没有实现所以不保证内容的正确性。
边写代码边修锅过后的结果:https://codeforces.com/contest/1477/submission/106333507 (force)。