<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;
}
全部评论

相关推荐

Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
一表renzha:你点进去没打招呼他也会有提示的,之前我点进美的,还没打招呼,他马上给我发了不太合适哦
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务