线性基

link

线性基模板题目。

何为线性基?线性基是一个集合的衍生物,它也是一个集合,只不过要小得多,只有原集合值域的log级别。它能做的事很多,原集合能异或出来的结果它都可以,由此就可以拿来做许多有趣的事情,以后遇到了再说。

构造方面代码很简洁。

#include<cstdio>
//#define zczc
#define int long long
const int N=52;
inline void read(int &wh){
    wh=0;int f=1;char w=getchar();
    while(w<'0'||w>'9'){if(w=='-')f=-1;w=getchar();}
    while(w<='9'&&w>='0'){wh=wh*10+w-'0';w=getchar();}
    wh*=f;return;
}

signed main(){
	
	#ifdef zczc
	freopen("in.txt","r",stdin);
	#endif
	
	int m,in,ans=0,a[N]={0};
	read(m);
	while(m--){
		read(in);
		for(int i=N-1;i>=0&&in;i--){
			if((in&(1ll<<i))==0)continue;
			if(!a[i])a[i]=in;in^=a[i];
		}
	}
	for(int i=N-1;i>=0;i--)if((ans^a[i])>ans)ans^=a[i];
	printf("%lld\n",ans);
	
	return 0;
}
posted @ 2022-02-19 14:52  Feyn618  阅读(23)  评论(0编辑  收藏  举报