之前是假会,现在是真会。而且我还写了博客。不写博客的东西总有一天会忘。
概述
对于线性基中所有的子集的异或和的集合与线性基中的插入所有数的所有子集的异或和的集合相等。
即线性基代表了原数集中的所有异或和。
线性基中所有子集的异或和两两不同。继而不同的异或和数=\(2^{|线性基|}\)。
操作
插入
从高位往低位枚举,若这位上已有数,则异或上这个数后继续,否则将这位赋为当前的数。
查是否存在
从高位往低位枚举,若这位上有数则异或上这个数。当当前值在某时刻=0时说明存在。
查最大异或和
开始答案=0。从高位往低位枚举,若异或上这个数使答案增大则异或。
查与\(x\)异或的最大异或和
开始答案=\(x\),之后查最大异或和。
查最小异或和
答案即为最低的有数的位的数。
查k小异或和
先将线性基重构为线性无关的形式,即若一位上有数,则其他位上的这一位皆为0。如\(\{101101,11111,1010,110\}\)变为\(\{100001,10011,1010,110\}\)。
然后将\(k\)拆为二进制,从低位往高位枚举,若k&(1<<i)则答案异或上第\(i\)大的位的数。
原文地址:https://www.cnblogs.com/utopia999/p/9721484.html
时间: 2024-10-04 01:25:11