CF1770F Koxia and Sequence

题解都太莫名其妙了,提供一个自然做法。

首先观察到 \(+,\cup,\oplus\) 均具有交换律,也就是你是枚举一个合法可重集 \(S\),其会贡献 \(\binom{n}{c_0,c_1,\dots,c_{2^{20}-1}}\) 次,其中 \(c_i\) 表示 \(i\)\(S\) 中出现次数。

熟知 \(x\oplus x=0\),因此只需关注 \(\binom{n}{c_0,c_1,\dots,c_{2^{20}-1}}\equiv1\pmod2\) 的可重集 \(S\)

不妨回想下对组合数是整数的证明,有一个做法是对每个 \(p\) 分析其次数,那个 \(\geq0\) 的等号显然取在在 \(p\) 进制下不进位的情况。

由此得知答案即为所有满足 \(c_0,c_1,\dots,c_{2^{20}-1}\) 在二进制下加起来不进位且合法的情况的异或和的异或和。

于是其中只有至多一个 \(c_i\) 为奇数(当 \(n\) 为偶数时一定没有,否则恰有一个),而 \(c_i\) 为偶数时异或偶数次贡献为 \(0\),因此当 \(n\) 为偶数时答案为 \(0\),否则每个方案恰好由那唯一一个奇数 \(c_i\)\(i\) 贡献。

好了性质很够用了,我们回头来处理对或和的限制,直接对原问题做高维前缀和,即统计只有 \(i\) 每一位 \(1\) 所在位都属于 \(T\)\(c_i\) 可以非 \(0\) 的所有方案异或和,然后高维差分回来,即对每个 \(T\subseteq S\)\(T\) 统计这个答案异或起来即可(\(S\)\(y\) 二进制下每一位 \(1\) 的次数构成集合)。

观察下,首先你限制 \(c\) 不进位,因此相当于把 \(n\) 的每一位 \(1\) 分配给某一个 \(c_i\),进一步的,你对 \(c_i\) 可否非 \(0\) 的限制也是对位独立的,因此你可以拆为 \(\text{count}_2(n)|T|\)\(0/1\) 变量,限制加权总和为 \(x\),其中第 \(i\) 个变量权为 \(2^{t_i}(t_i\in\mathbb{N}_+)\),统计前 \(|T|\) 个变量的加权异或和的异或和。

那么由线性性,你不妨枚举前 \(|T|\) 中每个变量的贡献次数,即枚举 \(i\),在钦定 \(x_i=1\) 时统计合法方案数,对异或和贡献这么多次 \(t_i\)

那显然这个方案数也对 \(2\) 取模,接下来我们将详细揭秘如何解决计算 \(\sum\limits_{i=1}^{m}x_i2^{t_i}=s\) 的方案数模 \(2\)

发现如若 \(t_i\) 两两不等则方案数至多为 \(1\)(取到 \(1\) 当且仅当 \(s\) 二进制下的每个 \(1\) 都有对应的 \(2^{t_i}\))。

而且你仍然有对称性,可以类比着合并 \(t_i\) 相同的项,继续由于不能进位所以还是二进制拆分,重复该过程最终得到一个 \(t_i\) 互不相等时的计数,且始终有 \(\sum 2^{t_i}\) 不变,因此最终 \(\{t_i\}\) 恰好为初始 \(\sum2^{t_i}\) 的二进制拆分。

综上所述,容易做到 \(O(2^{\text{count}_2(y)}\text{count}_2(y))\)

posted @ 2025-11-07 21:00  山田リョウ  阅读(12)  评论(0)    收藏  举报