专栏文章

CF2056F2 题解

CF2056F2题解参与者 3已保存评论 2

文章操作

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

当前评论
2 条
当前快照
1 份
快照标识符
@miqd4fhd
此快照首次捕获于
2025/12/04 02:50
3 个月前
此快照最后确认于
2025/12/04 02:50
3 个月前
查看原文
困难 *3000。
cc 代替题面中的 cnt\text{cnt},因为不想打 \text{}
考虑如何通过 F1。
注意到题目要求的是异或,而在 cc 数组确定时中位数 xx 也是确定的。因此我们要考虑的,就是对于一个指定的 cc 数组,有多少个合法的原数组,并且只需要考虑这个值的奇偶性。而这个值显然就是多重集全排列,即
(nc0,c1,,cm1)mod2\begin{aligned}\dbinom{n}{c_0,c_1,\cdots,c_{m-1}}\operatorname{mod}2\end{aligned}
由卢卡斯定理的经典结论,设 nn 中为 11 的二进制位的集合是 SS,则这个式子为 11 当且仅当 c0,c1,,cm1c_0,c_1,\cdots,c_{m-1} 不重不漏的划分了 SS。即,SS 中每一位都恰属于一个 cic_i
考虑最大的 cc,设为 cxc_x。则一定有 2cxn2c_x\ge n,因为 cxc_x 包含了 nn 的最高位。那么中位数其实就是 xx
由于 F1 中 m,km,k 较小,可以枚举一些东西。尝试枚举非零元的数量 yy,那么划分 SS 的方案数直接可以用斯特林数计算。然后就是把划分出来的数按大小关系填进 cc 里面去,显然只需选位置就行,又因为最大值在 xx 处,因此这部分方案数就是 (xy1)\dbinom{x}{y-1}
到这里可以得到最终答案表达式:
y=1min(m,S)x=0m1[(xy1){Sy}mod2]×x\begin{aligned}\bigoplus_{y=1}^{\min(m,|S|)}\end{aligned}\bigoplus_{x=0}^{m-1}\left[\dbinom{x}{y-1}\begin{Bmatrix}|S|\\y\end{Bmatrix}\operatorname{mod} 2\right]\times x
直接实现上式就是 O(km)O(km) 的,可以通过 F1。
继续做的话首先需要前置知识:
(nm)\dbinom{n}{m} 为奇数等价与 nandm=mn\operatorname{and} m=m
{nm}\begin{Bmatrix}n\\m\end{Bmatrix} 为奇数等价于 (nm)andm12=0(n-m)\operatorname{and} {\lfloor\frac{m-1}{2}\rfloor}=0
(前者是卢卡斯定理,后者可以考虑递推公式中 mm 的奇偶性证明。)
考虑继续优化。发现如果对某个特定的 xx,能快速找出对应的 yy 的贡献总和就很好。利用上述结论可知,设 f(y)={Sy+1}mod2f(y)=\begin{Bmatrix}|S|\\y+1\end{Bmatrix}\operatorname{mod} 2,则 F1 中的式子可以进一步化简为
x=0m1x×[(yxf(y))mod2]\begin{aligned}\bigoplus_{x=0}^{m-1}x\times \left[\left(\bigoplus_{y\subset x}f(y)\right)\operatorname{mod} 2\right]\end{aligned}
这里的 包含符号 是二进制意义下的。
看上去还是要枚举 xx,但实际上由于 yy 很小,设 r=logSr=\log |S|,后面那个求和式子的值只跟 xx 的后 rr 位有关。枚举这些位,发现我们要算一个 012w0\oplus 1\oplus 2\cdots \oplus w 的形式,这是容易的,分类讨论一下就行。
子集的 ff 之和显然可以高维前缀和。
至此我们以 O(klogk)O(k\log k) 的复杂度解决了 F2。F2 submission

评论

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

正在加载评论...