Loading

10.17 NOIP 模拟赛 T2. 箱思客

前言

很难不注意到我还有一个线段树合并, 一个神秘的 \(\text{CSP-S T4}\) 排列没有搞, 还有一个 \(\text{T3}\)
不管怎么样一定要注意停滞, 解决

思路

不难发现就是每次取了之后是否放回去的一个期望问题
首先考虑概率期望问题, 本题比较好想的一种做法就是直接利用期望定义来做


我们先处理每次概率空间不变的问题, 也就是每次都把取了的数放回去的情况

处理这个问题时的草稿

考虑一个选择 x1,x2,xkxk+1x_1, x_2, \cdots x_k \mid x_{k + 1}, 其中 gcd(x1,x2,,xk)1\gcd(x_1, x_2, \cdots, x_k) \neq 1, 而 gcd(x1,x2,,xk,xk+1)=1\gcd(x_1, x_2, \cdots, x_k, x_{k + 1}) = 1, 我们取到其的概率是 1nk+1\dfrac{1}{n^{k + 1}}, 事实上我们就需要找到所有的情形并计算概率与 kk 的乘积之和

考虑怎么处理到所有的情形, 一种想法是 dp\rm{dp}
常用的方法是 fi,jf_{i, j} 表示选择到第 ii 个数, 且存在一个公约数是 ii 的第 jj 个质因数这样一种情形的概率((本质上是单个数的不同质因数个数有限))
这个方法是有问题的, 但是不妨先列出一下转移
fi,xt1ntfj,ypi,x=pj,y\begin{gather*} f_{i, x} \stackrel{t}{\longleftarrow} \frac{1}{n^t} f_{j, y} & p_{i, x} = p_{j, y} \end{gather*}
然后我们要计算选择一个 xk+1x_{k + 1} 的概率来完成这个形态
需要注意的是, 这是一个无穷项求和, 但是并不困难

问题出在哪? 不难发现对于 gcd(x1,x2,,xk)\gcd(x_1, x_2, \cdots, x_k) 不为一个质数的情况, 我们显然会算重
当然不难猜测去重是一个容斥的形式, 但是这样子计算复杂度不能保证, 而且由于 xk+1x_{k + 1} 的存在, 算重的部分也不好处理

因此我们考虑换成另一种常见的处理方法, 即枚举一个约数
考虑钦定最终 gcd(x1,x2,,xk)=g\gcd(x_1, x_2, \cdots, x_k) = g, 不妨找到 gg 的倍数集合 S\mathbb{S}, 则每次我们选择集合内外的概率分别已知, 剩下的就是一个无穷项求和, 可以用等比数列求和公式计算

具体的, 记 p(x)p(x) 表示在 nn 个数中选出 ai=xa_i = x 的概率, 求 f(x)f(x) 表示钦定最终 gcd(x1,x2,,xk)=x\gcd(x_1, x_2, \cdots, x_k) = x, 找到的形态概率之和
P(x)=xyp(y)x>1,f(x)=i=1+Pi(x)P(x) = \sum_{x|y} p(y) \\ x > 1, \quad f(x) = \sum_{i=1}^{+\infty} P^i(x)

这样仍然会算重, 但是去重是很简单的, 我们只需要倒序处理, 然后每次处理掉 xx 倍数即可

P(x)=xyp(y)x>1,f(x)=i=1+Pi(x)xyf(y)P(x) = \sum_{x|y} p(y) \\ x > 1, \quad f(x) = \sum_{i=1}^{+\infty} P^i(x) - \sum_{x|y} f(y) \\

到这里我发现我对期望的计算还有问题, 让我们来处理这一部分
不妨同样设置 PP 函数, 但是先不管去重
f(x)={1P(x)}i=1+iPi(x)={1P(x)}i=1+j=i+Pj(x)={1P(x)}i=1+Pi(x)1P(x)=i=1+Pi(x)\begin{align*} f(x) &= \Big\{1 - P(x)\Big\}\sum_{i=1}^{+\infty} iP^i(x) \\ &= \Big\{1 - P(x)\Big\}\sum_{i=1}^{+\infty} \sum_{j = i}^{+\infty} P^j(x) \\ &= \Big\{1 - P(x)\Big\}\sum_{i=1}^{+\infty} \frac{P^i(x)}{1 - P(x)} \\ &= \sum_{i=1}^{+\infty} P^i(x) \\ \end{align*}

进而我们可以轻松地完成这一工作

考虑一个选择 \(x_1, x_2, \cdots x_k \mid x_{k + 1}\), 其中 \(\gcd(x_1, x_2, \cdots, x_k) \neq 1\), 而 \(\gcd(x_1, x_2, \cdots, x_k, x_{k + 1}) = 1\), 我们取到其的概率是 \(\dfrac{1}{n^{k + 1}}\), 事实上我们就需要找到所有的情形并计算概率与 \(k\) 的乘积之和

首先, 刻画形态的一种通用方法是 \(\rm{dp}\)
常用的方法是 \(f_{i, j}\) 表示选择到第 \(i\) 个数, 且存在一个公约数是 \(i\) 的第 \(j\) 个质因数这样一种情形的概率\((\)本质上是单个数的不同质因数个数有限\()\)
不难发现对于 \(\gcd(x_1, x_2, \cdots, x_k)\) 不为一个质数的情况, 我们显然会算重
当然不难猜测去重是一个容斥的形式, 但是这样子计算复杂度不能保证, 而且由于 \(x_{k + 1}\) 的存在, 算重的部分也不好处理

我们尝试使用另一种方法, 钦定 \(\gcd(x_1, x_2, \cdots, x_k) = g\), 然后处理符合条件的情形
具体的, 记 \(p(x)\) 表示在 \(n\) 个数中选出 \(a_i = x\) 的概率, 求 \(f(x)\) 表示钦定最终 \(\gcd(x_1, x_2, \cdots, x_k) = x\), 找到的形态所计算的概率与 \(k\) 的乘积之和

\[P(x) = \sum_{x|y} p(y) \\ f(x) = \Big\{1 - P(x)\Big\}\sum_{i=1}^{+\infty} iP^i(x) \\ \]

考虑 \(f(x)\) 还有更好的形式

\[ \begin{align*} f(x) &= \Big\{1 - P(x)\Big\}\sum_{i=1}^{+\infty} iP^i(x) \\ &= \Big\{1 - P(x)\Big\}\sum_{i=1}^{+\infty} \sum_{j = i}^{+\infty} P^j(x) \\ &= \Big\{1 - P(x)\Big\}\sum_{i=1}^{+\infty} \frac{P^i(x)}{1 - P(x)} \\ &= \sum_{i=1}^{+\infty} P^i(x) \\ \end{align*} \]

我们需要考虑去重, 令正确的 \(f(x)\)\(f_t(x)\)

\[f_t(x) = f(x) - \sum_{x|y} f_t(y) \\ \]

这种形式是显而易见的
还有一个小问题, 期望应当是 \(\sum f(x) + 1\), 因为我们没有考虑 \(x_{k + 1}\) 同样带来 \(1\) 的贡献


现在我们处理每次概率空间变化的问题, 也就是每次取了数之后就把他拿出来

我们仍然采用形态法, 仍然考虑一个选择 \(x_1, x_2, \cdots x_k \mid x_{k + 1}\), 其中 \(\gcd(x_1, x_2, \cdots, x_k) \neq 1\), 而 \(\gcd(x_1, x_2, \cdots, x_k, x_{k + 1}) = 1\)
\(c(x)\) 表示 \(a_i = x\) 的个数, \(g(x)\) 表示钦定最终 \(\gcd(x_1, x_2, \cdots, x_k) = x\), 找到的形态所计算的概率与 \(k\) 的乘积之和

\[ \begin{align*} C(x) =&\sum_{x|y} c(y) \\ g(x) =& \sum_{i = 1}^{C(x)} \bigg\{\frac{n - C(x)}{n - i}\bigg\}\dfrac{\displaystyle i{C(x) \choose i}}{\displaystyle{n \choose i}} \\ =& \sum_{i = 1}^{C(x)} \sum_{j = i}^{C(x)} \bigg\{\frac{n - C(x)}{n - j}\bigg\} \dfrac{\displaystyle {C(x) \choose j}}{\displaystyle{n \choose j}} \\ \end{align*} \]

我们来分析一下处理的复杂度
等价于分析 \(\mathcal{O} \Big(\sum_{x \geq 1} C(x)\Big)\), 考虑每个数会在自己的因数处被计算一次, 而 \(v\) 的因数个数大概也就 \(\mathcal{O}(v^{\frac{1}{3}})\), 我们不难发现是 \(10^8\) 级别可以勉强接受

注意我们仍然要用相同的方法去重并统计进期望里

总结

\(\gcd(\alpha_i, \alpha_j) > 1\) 的本质是存在质数 \(x | \alpha_i, x | \alpha_j\)\(x > 1\), 因此如果要求一堆数的 \(\gcd\) 大于 \(1\), 那么可以枚举存在的质因数/因数然后做判断

\(\sum_{i=1}^{k} iP^i(x)\) 可以转化成后缀和相加处理

关于 \(\gcd\) 的一种去重方法
尝试计算 \(x \mid \textrm{gcd}\)\(\textrm{gcd}\) 个数从而计算出 \(x = \textrm{gcd}\)\(\textrm{gcd}\) 个数, 具体来讲, 倒着处理, 每次删去当前考虑到的 \(\gcd\) 的倍数, 复杂度是 \(\mathcal{O} (V \ln V)\) 级别的

posted @ 2025-10-23 15:46  Yorg  阅读(7)  评论(0)    收藏  举报