【数据结构】线性基
参考题:https://www.luogu.com.cn/problem/P3812
作用
- 查询某个数是否能被一组数异或得到
- 查询一组数能够异或的到的最大/小值,第k大值
解释
本质上就是作用在 串的高斯消元,只不过消元的途径是异或。
比如一组数(二进制):
1010
1100
0011
建立线性基的过程是:
对第一个数:
从最高位开始扫,发现第一位就是 ,故更新:
对第二个数:
依然从最高位开始扫,发现第一位是 ,所以第二个数要异或第一位对应的基底得到 ,继续扫,第二位是,故更新为:
类似的,对第三个数,可以更新矩阵得到:
可以发现上面整个过程就是通过异或来进行高斯消元。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=55;
ll base[N];
int main(){
int n; cin>>n;
while(n--){
ll k; cin>>k;
for(int j=N-1;~j;j--){
if(k&(1LL<<j)){
if(!base[j]) base[j]=k;
k^=base[j];
}
}
}
ll ans=0;
for(int j=N-1;~j;j--){
if((ans^base[j])>ans) ans=ans^base[j];
}
cout<<ans<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】