题目链接
做法
$$
概率 = \frac{合法方案数}{总方案数}\\
m = \sum_{i = 1}^{n} a_i\\
总方案数 = \frac{m!}{\prod a_i!}\\
合法方案数 = \frac{m!}{\prod hook(i, j)} = \prod_{1 \leq k \leq i \leq n} \prod_{a_{i + 1} < j \leq a_i} (a_k - k + i - j + 1)\\
= \prod_{1 \leq j \leq i \leq n} \frac{(a_j - a_{i + 1} + i - j)!}{(a_j - a_i + i - j)!}\\
= \frac{\prod_{i = 1}^{n}(n - i + a_i)}{\prod_{1 \leq i < j \leq n}((a_i - i) - (a_j - j))}
$$
$$
概率 = (\prod_{i = 1}^n \frac{a_i!}{(n + a_i - i)!})(\prod_{1 \leq i < j \leq n} ((a_i - i) - (a_j - j)))
$$
我们可以快速处理左边的式子,对于右边的式子,令 $ b_i = a_i - i $ 。
$$
\prod_{1 \leq i \leq j \leq n} ((a_i - i) - (a_j - j)) = \prod_{1 \leq i < j \leq n} (b_i - b_j)
$$
将括号展开发现 $ b_i - b_j > 0 (i < j) $ ,所以当 $ i \geq j $ 时贡献记为负数,可以忽略。
令 $ \prod_{1 \leq i < j \leq n} (b_i - b_j) = \sum x^{f(x)} $ ,显然可以通过卷积求出 $ \sum x^{f(x)} $ 。
注意根据费马小定理 $ f(x) $ 应由 $ mod - 1 $ 取模,所以不能写 $ ntt $ ,由于答案不会爆 $ long~long $ ,所以可以写 $ fft $ 。
1 |
|