专栏文章

题解:P13497 【MX-X14-T7】墓碑密码

P13497题解参与者 2已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@miopcx99
此快照首次捕获于
2025/12/02 22:57
3 个月前
此快照最后确认于
2025/12/02 22:57
3 个月前
查看原文
一个简单一点的做法?
由于从 SS 中选出的数是可重的,我们不妨先假设不可重,然后设选出了 kk 个,方案数乘上 C(nk2+S,S)C(\lfloor\frac{n-k}{2}\rfloor+|S|,|S|)。现在转化为求 fkf_k 表示从 SS 中选出 kk 个数的选法数,满足这 kk 个数的异或和属于集合 TT
先考虑值域 2202^{20} 的部分分。将其写成一些短多项式乘积的形式 [yk](1+xaiy0)[y^k]\prod(1+x^{a_i}y^0),这里我们增加了 yy 这一元记录选出了多少个。这个是经典 FWT,简要来说,考虑 1+xai1+x^{a_i} 的 FWT 数组只存在 0022,求出 0022 的个数 c0c_0c2c_2 就可以计算选出 kk 个的方案数,即 i=0k(1)i2kiC(c0,i)C(c2,ki)\sum_{i=0}^k (-1)^i2^{k-i}C(c_0,i)C(c_2,k-i)。求出 FWT 再 IFWT,答案为 tT[xt]\sum_{t\in T}[x^t] 项。对每个 kk 都要做一次 IFWT,时间复杂度 O(20S×220)O(20|S|\times 2^{20}),赛时实现了这个在梦熊上获得了 60 分。
进一步优化,由于我们只需求 IFWT 数组 ww_{*}TT 中的对应项之和,即:
220tTi=02201wi(1)i&t2^{-20}\sum_{t\in T}\sum_{i=0}^{2^{20}-1}w_i(-1)^{|i\& t|}
将其变成:
220i=02201witT(1)i&t2^{-20}\sum_{i=0}^{2^{20}-1}w_i\sum_{t\in T}(-1)^{|i\& t|}
TT 做 FWT,再对应点乘。现在时间复杂度变为 O(S220)O(|S|2^{20})
注意到瓶颈仅仅在于求出 SSTT 的 FWT 数组,计算答案的部分可以在 O(S3)O(|S|^3) 的时间复杂度内完成。
考虑优化 FWT,一个重要的事实是 SSTT 的大小都只有 128128。对每个 0i<2280\le i<2^{28} 记录一个 128 位的二进制数表示每个 SS 中数 ss(1)i&s(-1)^{|i\&s|},通过 ilowbit(i)i-lowbit(i) 转移到 ii,空间复杂度仍然不可接受。一个优化的办法是按位 dfs,任意时刻 dfs 栈中最多只有 2828 个数。这一部分的时间复杂度 O(228×128w)O(\frac{2^{28}\times 128}{w}),空间复杂度 O(1)O(1)
总时间复杂度 O(n2mw+n3+qn+l)O(\frac{n2^{m}}{w}+n^3+qn+l),其中 n=S+Tn=|S|+|T|m=28m=28ww 是位长,ll 是询问的 nn 的大小。在此批评出题人时限只开 2s 重度卡常。

评论

2 条评论,欢迎与作者交流。

正在加载评论...