Fresh Cartridges 解题报告

容易发现题意等价于选出两个集合 \(A,B\) 使得 \(A\cap B=\varnothing\),\(A,B\) 分别线性无关,求 \(\max(|A|+|B|)\)。下面默认 \(v_i\) 是列向量。

考虑对于每个 \(i\) 随机两个数 \(a_i,b_i\),令

\[V=\begin{pmatrix}v_1,v_2,\dots\end{pmatrix},u_i=\begin{pmatrix}a_iv_i\\ b_iv_i\end{pmatrix},U=\begin{pmatrix}u_1,u_2,\dots\end{pmatrix} \]

下面我们声称极大概率有 \(\text{rank}(U)\) 就是答案。

首先选出 \(u\) 的下标集合 \(T\),我们声称 \(T\) 中元素线性无关等价于 \(T\) 可以划分为 \(A\sqcup B\),使得 \(\{v_i\mid i\in A\},\{v_i\mid i\in B\}\) 都线性无关。

首先若 \(T\) 可以划分为 \(A\sqcup B\),使 \(\{v_i\mid i\in A\},\{v_i\mid i\in B\}\) 线性无关,设 \(|A|=x,|B|=y\),那么由于 \(A\) 中的 \(v_i\) 线性无关,可以选出一个大小为 \(x\) 的行下标集合 \(R_A\),然后取 \(V\) 中属于 \(R_A\) 的行,属于 \(A\) 的列形成一个矩阵 \(T_A\),则这个矩阵的 \(\text{rank}\) 为 \(x\),\(\det\) 不为 \(0\)。同理可以选出一个 \(R_B\) 和 \(B\) 构成一个矩阵 \(T_B\),这个矩阵的 \(\det\) 也不是 \(0\)。现在,在 \(U\) 中选择 \(\{i\mid i\in R_A\lor i-n\in R_B\}\) 这些行,即上半部分取 \(R_A\) 对应的行,下半部分取 \(R_B\) 对应的行,列取所有 \(T\) 对应的向量得到一个矩阵 \(M\),那么 \(\det M\) 中有一项 \(\pm\det T_A\det T_B\prod\limits_{i\in A}a_i\prod\limits_{i\in B}b_i\)。由于 \(\det T_A,\det T_B\ne0\),形式上,如果把 \(\det M\) 看成所有 \(a_i,b_i\) 的单项式,那么这一项不会被抵消,\(\det M\ne0\),所以 \(T\) 中元素线性无关。

另一边的证明也是同理,所以 \(\text{rank}(U)=\max(|A|+|B|)\)。如果不成立,说明存在 \(\det M\) 代表的多项式变成了 \(0\)。设答案为 \(K\),则 \(\text{rank}\) 在形式意义下为 \(K\),所以任何 \((K+1)\times(K+1)\) 的子式的行列式都是零。于是始终有 \(\text{rank}\le K\)。

然而实际情况下 \(a,b\) 都是变量,不能看成多项式,而根据 Schwartz–Zippel 引理,设一个多项式 \(f(x_1,x_2,\dots,x_s)\) 非零且次数 \(\le d\),那么当 \(x_i\) 在大小为 \(N\) 的集合中随机时,\(f(x_1,x_2,\dots,x_s)\) 变为 \(0\) 的概率不超过 \(\frac dN\)。这是因为,可以把 \(f\) 看成关于 \(x_s\) 的多项式 \(g_0(x_1,x_2,\dots,x_{s-1})+g_1(x_1,x_2,\dots,x_{s-1})x_s+g_2(x_1,x_2,\dots,x_{s-1})x_s^2+\dots+g_t(x_1,x_2,\dots,x_{s-1})x_s^t\),那么 \(\deg g_t\le d-t\),根据归纳假设,\(g_t=0\) 的概率为 \(\frac{d-t}N\),所以 \(g_t=0\) 且 \(f=0\) 的概率不超过 \(\frac{d-t}N\),\(g_t\ne 0\) 时可以看成一个关于 \(x_s\) 的一元 \(t\) 次多项式,根据代数基本定理,至多有 \(t\) 个根,所以 \(f=0\) 的概率为 \(\frac{d-t}N+\frac tN=\frac dN\)。

在本题中,单次错误率不超过 \(\frac {2n}p=3.005\times10^{-7}\)。由于用了同一组 \(a,b\),所以错误率不超过 \(q\frac{2n}p=0.09\),尝试两次就基本不会出问题了。

于是现在问题转化为求一个区间的 \(u_i\) 的 \(\text{rank}\),区间线性基,前缀线性基之类的做一下就好了,时间复杂度 \(\mathcal{O}(T(mn^2+nq))\),其中 \(T\) 为尝试次数。可以用树状数组优化到 \(\mathcal{O}(T(mn^2+q\log m))\)。

总结:为什么想到这样的随机化?这里一个比较高妙的转化是,对于每个 \(i\in A\) 变为 \(\begin{pmatrix}v_i\\ 0\end{pmatrix}\),\(i\in B\) 变为 \(\begin{pmatrix}0\\ v_i\end{pmatrix}\),那么 \(A,B\) 线性无关等价于整体线性无关。然而由于不知道 \(i\) 属于 \(A\) 还是 \(B\),那么这个时候我们构造一个向量 \(u_i\),使得在判断行列式展开时,由于每一列用一次,会自动判断放在 \(A\) 还是 \(B\),于是多项式意义下是正确的。甚至推广到划分为 \(k\) 个集合也是一样的做法。

posted @ 2026-09-28 15:33  循环一号  阅读(10)  评论(0)    收藏  举报