P10005 [集训队互测 2023] 基础寄术练习题

P10005 [集训队互测 2023] 基础寄术练习题

首先可以发现这个题目要求的计数对象非常诡异,我们考虑利用组合意义进行转化。

我们构造如下的一个组合模型:

  • 假设我们有 \(n\) 种球,每种球有 \(a_i\) 个,现在将这些球排成一列,要求第 \(i\) 种球最后一次出现位置在第 \(i+1\) 种球的出现位置之前,求合法的概率是多少。

我们考虑从后往前放球,放第 \(i\) 种球的时候空位应该有 \(s_i\) 个。那么可以推出对于当前这一步合法的概率是 \(\dfrac{a_i}{s_i}\)。所以总的合法概率就是 \(\prod\limits_{i=1}^n\dfrac{a_i}{s_i}\)。这样的话我们就构造出了一个分母上前缀和的积。

\(k=1\)

然后我们来看 \(k=1\) 的部分,此时我们要求 \(\sum\limits_a \prod\limits_{i=1}^n \dfrac{1}{s_i}\)。现在考虑如果我们给定了 \(a_i\) 中出现的数字构成的无序集合 \(A\),那么对于任何一种球的序列满足每种球的出现次数集合与 \(A\) 完全一致,它一定对应唯一的一个 \(a_i\) 的排列。

考虑这有什么用,上面的式子 \(\prod\limits_{i=1}^n\dfrac{a_i}{s_i}\) 告诉我们一个固定的 \(a_i\) 对应的合法球序列概率,而我们要求的实际上是 \(\sum\limits_a \prod\limits_{i=1}^n \dfrac{a_i}{s_i}\),也就是给出一个球序列,它是某个 \(a_i\) 对应的合法序列的概率总和;根据上面的分析,显然这个答案是 \(1\),因此我们有 \(\sum\limits_a \prod\limits_{i=1}^n \dfrac{a_i}{s_i}=1\),于是可以得到一个关键结论:

\[\sum\limits_a \prod\limits_{i=1}^n \dfrac{1}{s_i}= \sum_A \prod_{a\in A} \dfrac{1}{a} \]

我们做一个背包即可求出答案,复杂度 \(O(n^2)\)

\(k=2\)

此时我们需要求出上面答案乘上 \(a_1\) 的结果。很显然结论不能再用了,但是我们依然可以利用上面的模型去求解。

我们考虑有没有什么别的方法去计算这个概率,考虑现在我们还是已知集合 \(A\),并且我们确定了 \(a_1\),考虑合法的概率是多少。此时合法的条件只有一个:出现了 \(a_1\) 次的球的最后一次出现位置是最靠前的。

考虑容斥,枚举一个 \(A\) 的子集 \(B\) 表示出现次数在 \(B\) 集合中的球的最后一次出现位置在 \(1\) 之前,那么可以推出答案的方案数为:

\[\binom{S_B}{b_1,b_2,\cdots}\binom{S_B+a_1-1}{S_B}\dfrac{S_A}{(S_B+a_1)!\prod\limits_{a_i\not\in B,a_i\ne a_1} a_i!} \]

化简一下可以得到:

\[\binom{S_A}{a_1,a_2,\cdots}\dfrac{a_1}{S_B+a_1} \]

而我们要求的是概率,所以要除掉方案数,也就是前面的部分。因此一个集合 \(B\) 的贡献实际上只有 \(\dfrac{a_1}{S_B+a_1}\),同时它的容斥系数也是显然的,应该是 \((-1)^{|B|}\)

所以我们依然考虑用背包 dp 集合 \(A\),设 \(f_{i,j,s,0/1}\) 表示当前处理了 \([1,i]\) 的数,选入 \(A\) 集合的有 \(j\) 个,\(S_B+a_1=s\)\(a_1\) 是否被钦定的方案数。转移的时候考虑当前数的决策,有不放 / 放入 \(B\) / 放入 \(A-B\) / 钦定为 \(a_1\) 四种可能,分别转移即可。注意不要忘了除以 \(a_i\) 才是最终的答案。

总复杂度为 \(O(n^4)\),可以通过。 事实上 \(k=1\) 也可以用这个方法求解,只需要在钦定 \(a_1\) 的时候少乘一个 \(a_1\) 即可。

posted @ 2026-01-31 14:31  UKE_Automation  阅读(3)  评论(0)    收藏  举报