题解:P13275 [NOI2025] 集合

\(\text{Link}\)

前言

感谢本题为我的 OI 生涯画上一个完美的句号,谨以此纪念场上为之奋斗的两个半小时

本题解的解法将会比较暴力。

题意

给定长为 \(2^n\) 的序列 \(a_{0\sim2^n-1}\),定义 \(f(S)\) 为集合 \(S\) 中所有数的二进制按位与。对于所有 \(\{0, 1, \ldots, 2^n - 1\}\) 的不交子集对 \(P,Q\) 满足 \(f(P)=f(Q)\),计算 \(\prod_{i \in P \cup Q} a_i\) 之和。对 \(998244353\) 取模。

\(n\le 20\)\(T\le 3\)

思路

直接写一个容斥可以做到 \(O(8^n)\)\(O(7^n)\),可以获得 \(16\) 分,但没什么前途。

考虑直接看作二元集合幂级数,即

\[\prod_S\left(x^Uy^U+x^Sy^Ua_S+x^Uy^Sa_S\right) \]

其中 \(U\) 表示全集,乘法为集合幂级数 \(\text{and}\) 卷积,其 FWT 与 IFWT 分别为高维后缀和以及高维后缀差分。

维护 FWT 结果,每次乘入一项只会更新 \(x,y\) 的此项中至少有一个是 \(S\) 子集的元素,最终 IFWT 回去后求解所有 \([x^Sy^S]\) 项的系数之和,暴力做即为 \(O(6^n)\),可以获得 \(24\) 分。

瓶颈为乘入一项时枚举子集,要想求答案的 FWT 数组的 \([x^Ay^B]\) 项系数,不妨考虑每个 \(S\) 对其的贡献。记 \(f_S,g_S\) 分别为:

\[f_S=\prod_{S\sube T}(a_T+1) \]

\[g_S=\prod_{S\sube T}\dfrac{2a_T+1}{(a_T+1)^2} \]

那么答案的 FWT 数组的 \([x^Ay^B]\) 项系数即为 \(f_Sf_Tg_{S\cup T}\),做到 \(O(4^nn)\)。注意处理 \(a_S\equiv -1\),不妨将每个数记作 \(v\cdot z^k\),其中 \(z=0\)

最后做 IFWT 很没必要,反向推出 FWT 数组的 \([x^Ay^B]\) 项对答案的贡献系数为 \((-1)^{|A|+|B|}2^{|A\cap B|}\),即可做到 \(O(4^n)\),获得 \(36\) 分。

明显可以发现这是 \(\text{or}\) 卷积的形式,拆一下 \(|A\cap B|\) 即可通过 B 性质获得 \(68\) 分。问题在于此时涉及了加减法,每个值变为了多项式。注意到最终的运算肯定不会涉及 \(z\) 的负次幂,即每个多项式只有最低次项有可能有用,故直接维护最低次项的值即可。

时间复杂度 \(O(2^nn)\),可以通过。

代码之后再补。

为什么要攀登?因为山就在那里。

posted @ 2025-08-05 19:36  ffffyc  阅读(49)  评论(0)    收藏  举报