前言
做济南A,发现并不会线性基,记下。
算法思想
用有限的几个数字表示出所有的数字,类似基向量的求解。但相对基向量有一些特殊的解释。这里只说一个可能注意不到的。
任意几个个数字异或不能得到0<-这就是正交性。
算法代码
const int maxn = 1e3+5;
long long nums[maxn];
void add(int a){
for(int i=63;i>=0;i--){
if(a&nums[i]) {
if(!nums[i]) {nums[i]=a;break;}//更新
a^=nums[i];//检测是否能表示a,是否有遗漏
}
}
}
这是最简单的线性基求法,如果全部插入,大约是64n的效率。
/**
本来想结合高斯消元学一下,结果发现就是求秩,都会就没动笔,放着也碍事,发了。
***/