线性基
线性基
定义
一个正整数序列,让线性基可以用异或和表示其中任意一个数,并且线性基的个数最少
性质
-
序列中的任何一个数都可以由线性基中的数异或得到
-
任何数的异或和不为零
-
保持性质一的前提下,线性基的数量唯一且最少
线性基的构造
不能插入线性基,即x经过若干次异或变成0,根据性质三不需加入
可以被插入,\(x\) 被异或了一些数,剩下的数为 \(y\),将 \(y\) 插入,可以表达 \(x\)。
线性基操作
原理如上
bool insert(long long x){
for(int i=MAXS;i>=0;--i)
if(x>>i&1){
if(d[i])x^=d[i];
else{d[i] = x;return 0;}
}
return 1;
}
求最大最小值,使用从高到低贪心法
long long qmax(long long x){
for(int i=MAXS;i>=0;--i)
if((x>>i&1)==0&&d[i]!=0)
x ^= d[i];
return x;
}
long long qmin(long long x){
for(int i=MAXS;i>=0;--i)
if((x>>i&1)==1&&d[i]!=0)
x ^= d[i];
return x;
}
练习题
闲谈
01trie和线性基都可以处理异或问题,要根据问题选择合适的方法

浙公网安备 33010602011771号