线性基,给定一个数列,需要我们求出一个集合,要求对于每一个数列中的元素,都可以在集合中找到一些元素异或起来与其相等,并且要求集合元素最少。
代码出奇的简单好懂……
for(int i = 1;i <= m;i ++) {
ll t = a[i];
for(int j = 50;j >= 0;j --) {
if(!(t>>j&1)) continue;
if(b[j]) t ^= b[j];
else {b[j] = t,ans ++;break;}
}
}
其中a是给定数列,b是所求线性基。