闲话 23.1.27

闲话

今天下午可是被这题干沉默了(
就磕这题了
apj 三点给我的题 我到现在才看懂
我发现我好像脑子真不行

也没啥想说的了 这题挺ex的(

杂题

ARC139F

给定 \(n,m\)\(A_i\)\([0,2^m-1]\) 中随机生成。

\(F(A)\) 为所有子集异或和的最大值,即对于一个下标集合 \(S=\{i_1,i_2,\cdots,i_k\}\)\(A_{i_1}\oplus A_{i_2}\oplus\cdots\oplus A_{i_k}\) 的最大值。

对于 \(2^{nm}\) 种生成方式,求 \(F(A)\) 的和模 \(998244353\)

\(1 \le n,m\le 250000\)

apj 这题成功给我干沉默了一个下午(
作为报复我写篇题解啥的(

首先可以转化成 \(\mathbb F_2^m\) 空间内选择 \(n\) 个向量,设一个向量的值是它写成二进制得到的数,一组向量的贡献就是它的标准正交基的值的加和,需要求出所有可能的向量组的贡献之和。
若希望统计答案,不难想到枚举标准基内向量的数量 \(k\) 和其中每个向量对应为 \(1\) 的位 \(a_i\)。这里位从 \(0\) 开始编号。

可以发现答案由三部分构成。

第一部分是求这一组标准基对应的向量组的数量。我们需要求的就是 \(n\) 个向量张成了一个 \(\mathbb F_2^k\) 空间的方案数。可以作转置得到 \(k\)\(\mathbb F_2^n\) 空间内向量彼此线性无关的方案数,又转化成满秩 \(k\times n\) 的 01 矩阵的方案数,有经典结论答案即为

\[\prod_{i = 0}^{k - 1}\left(2^n - 2^i\right) \]

第二部分是求每个向量组对答案的期望贡献。可以发现标准基 \(k\) 个向量中为 \(1\) 的位在异或和中定为 \(1\),而其他位可能由其他向量异或得到,以 \(\dfrac 12\) 的概率为 \(1\)。因此这部分的答案即为

\[\frac{2^{a_k + 1} - 1 + \sum_{i = 1}^k 2^{a_i}}{2} \]

第三部分是这一组主元对应的其余 \(m - k\) 位的填法。第 \(i\) 个元素前面共有 \(a_i - (i - 1)\) 个位置是未被其他主元占据的,只有这些位可以自由选择 \(01\) 性,其他位由正交性都需要为 \(0\)。对答案求和得到

\[\sum_{i = 1}^k 2^{a_i - (i - 1)} \]

把这三部分乘起来就能得到标准基内向量的数量为 \(k\) 时答案

\[\prod_{i = 0}^{k - 1}\left(2^n - 2^i\right)\times \left(2^{a_k} + \frac{1}{2}\sum_{i = 1}^k 2^{a_i} - \frac{1}{2}\right)\times \sum_{i = 1}^k 2^{a_i - (i - 1)} \]

首先需要对答案进行一些处理。

第一部分可以在枚举 \(k\) 的过程中计算,这部分不是复杂度瓶颈。

第三部分可以将 \(2^{a_i}\)\(2^{-(i - 1)}\) 分离。
前者可以用生成函数枚举 \(a_i\),写出来就是

\[[x^k] \prod_{i = 0}^{m - 1} (1 + 2^ix) = 2^{\binom{k}{2}}\binom{m}{k}_2 \]

其中 \(\dbinom{m}{k}_q\)\(\text{q-binomial}\),展开就是

\[\binom{m}{k}_q = \frac{ \prod_{i=1}^m (q^i-1) }{ \prod_{i=1}^k (q^i-1) \prod_{i=1}^{m-k} (q^i-1) } \]

这点也可以通过前后删去 \((1 + x)\)\((1 + 2^mx)\)对比系数得到。
为方便计算和化简,前者可以首先乘入第二部分后一同化简。
后者显然就是 \(2^{- \binom{k}{2}}\)

然后就是第二部分了。观察这是三个加号,我们分开讨论。
首先是 \(2^{a_k}\) 的部分。由于这只有一个未确定值,我们可以枚举 \(a_k\) 的值。由于这时 \(a_k\) 已经确定,第三部分在乘入时需要将 \(k\)\(1\),且上界已经确定是 \(a_k\) 了。
然后是求和的部分,我们不妨考虑换一个看法,用总的 \(2^m - 1\) 减去再选一个的贡献,乘入第三部分也就是

\[\frac{1}{2}\left((2^m - 1)2^{\binom{k}{2}}\binom{m}{k}_2 - (k + 1)2^{\binom{k + 1}{2}}\binom{m}{k + 1}_2\right) \]

这里需要注意的是这个 \(1/2\) 的系数。笔者由于没有注意到这个系数想了一个小时(
最后是 \(\frac{1}{2}\)。可以直接乘进去。

枚举 \(k\),可以发现最终的答案就是

\[\sum_{k\ge 1} \left(2^{\binom{k - 1}{2}} \sum_{i = k - 1}^{m - 1} (2^i)^2 \binom{i}{k - 1}_2 + \frac{1}{2}\left((2^m - 1)2^{\binom{k}{2}}\binom{m}{k}_2 - (k + 1)2^{\binom{k + 1}{2}}\binom{m}{k + 1}_2\right) - 2^{\binom{k}{2} - 1}\binom{m}{k}_2 \right)2^{-\binom{k}{2}} \prod_{i = 0}^{k - 1}\left(2^n - 2^i\right) \]

化简可以得到

\[\sum_{k\ge 1} \left(2^{\binom{k - 1}{2}} \sum_{i = k - 1}^{m - 1} (2^i)^2 \binom{i}{k - 1}_2 + (2^{m - 1} - 1)2^{\binom{k}{2}}\binom{m}{k}_2 - (k + 1)2^{\binom{k + 1}{2} - 1}\binom{m}{k + 1}_2 \right)2^{-\binom{k}{2}} \prod_{i = 0}^{k - 1}\left(2^n - 2^i\right) \]

\(2^{a_k}\) 那部分的求和号可以转化成 q-吸收恒等式的形式,然后再应用 q-上指标求和即可。其实就只是把配凑阶乘形式换成配凑 \((2^k - 1)\) 形式了。

\[\begin{aligned} &\sum_{i = k}^{m - 1} 2^{2i} \binom{i}{k}_2 \\ = \ & 2^{k - 1} \sum_{i = k}^{m - 1} 2^{i - k} 2^{i + 1} \binom{i}{k}_2 \\ = \ & 2^{k - 1} \left(\sum_{i = k}^{m - 1} 2^{i - k} \left(2^{i + 1} - 1\right) \binom{i}{k}_2 + \sum_{i = k}^{m - 1} 2^{i - k} \binom{i}{k}_2\right) \\ = \ & \left(2^{2k} - 2^{k - 1}\right) \sum_{i = k}^{m - 1} 2^{i - k} \binom{i + 1}{k + 1}_2 + 2^{k - 1} \sum_{i = k}^{m - 1} 2^{i - k} \binom{i}{k}_2 \\ = \ & \left(2^{2k} - 2^{k - 1}\right) \binom{m + 1}{k + 2}_2 + 2^{k - 1} \binom{m}{k + 1}_2 \end{aligned}\]

因此原式可以化为

\[\frac{1}{2} \sum_{k\ge 1} \left( \left(2^{m + 1} - 2^{m - k} - 1\right)\binom{m}{k}_2 - \left(k2^k + 1\right) \binom{m}{k + 1}_2 \right)\prod_{i = 0}^{k - 1}\left(2^n - 2^i\right) \]

直接做即可。总时间复杂度 \(O(m + \log n)\)

Submission.

posted @ 2023-01-27 21:17  joke3579  阅读(90)  评论(4编辑  收藏  举报