这个... 看到一个大佬的证明,没看懂,就自己证了一下...
定律
对于一个集合 S (可重),设它任意个元素(至少一个)异或后能取到的值的集合为 T ,那么 T 中所有元素从 S 中异或得到概率是相等的
证明
我们先将原集合 S 中搞个线性基,那么此时线性基就相当于一个集合 H ,里面包含一些 S 中的元素,那么线性基中就有 |H| 个元素,按照定义, H 可以表示出 (2^{|H|}-1) 种权值(减去的一是线性基中默认的 0 ,可以理解为空集)。
然后我们在 S 中取出 H 的补集 G ,那么这个补集可以异或出 (2^{|G|}) 个值(可重)
现在我们分两步走:
第一步
我们发现所有的 G 集合能异或得到的值 x 都能在线性基 H 中找到唯一确定的子集(包括空集)使其异或和与 x 相等
然后我们据此可以得到 (2^{|G|) 个 S 的子集,使得其中所有子集异或和为 0
第二步
首先我们拿出一个集合 A ,使得 A 的异或和为 x 且不能拆出任意一个异或和为 0 的子集
然后我们在上面得到的 (2^{|G|}) 个异或和为 0 的集合中选出任意个集合(方案数为 (2^{2^{|G|}}) )
最后我们把这些集合并起来,这里的合并指的是出现偶数次的元素丢掉,奇数次的保留,最后我们可以得到一个异或和为 x 的集合
上面的做法看上去貌似是会算重的,但事实上我们发现每种值被算重的次数都是相等的,这样所有取值的选择集合方案数减去算重次数还是相等的
证明总结: 玄学,背结论就好,不然感性理解...