<span>【模板】线性基求交</span>

线性基求交

struct lb{
	ll p[63];
	lb(){
        memset(p,0,sizeof(p));
	}
	void clear(){
		memset(p,0,sizeof(p));
	}
	void ins(ll x){
		for(int i=60;i>=0;i--) if((x>>i)&1){
			if(!p[i]){
				p[i]=x;
				return;
			}else x^=p[i];
		}
	}
};
lb merge(lb a,lb b){
	lb g=lb(),tmp=a;
	ll cur,d;
	for(int i=0;i<=60;i++) if(b.p[i]){
		cur=0,d=b.p[i];
		for(int j=i;j>=0;j--) if(d>>j&1){
			if(tmp.p[j]){
				d^=tmp.p[j],cur^=a.p[j];
				if(d) continue;
				g.p[i]=cur;
			}else tmp.p[j]=d,a.p[j]=cur;
			break;
		}
	}
	return g;
}
全部评论

相关推荐

鼗:四级有点难绷,感觉能拿国家励志奖学金,学习能力应该蛮强的,四级确实不重要,但是拿这个卡你可是很恶心啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务