警钟敲烂,不是位运算和优先级的 12pts
查看原帖
警钟敲烂,不是位运算和优先级的 12pts
515836
__Louis__楼主2024/11/30 09:29

不能直接先把 xx 拆位,而是要边异或边判断。

12pts:


void insert(int x){
	cnt=0;
	int p=x;
	while(x>0){
		h[++cnt]=x&1;
		x>>=1;
	}
	for(int i=cnt;i>=1;i--){
		if(h[i]){
			if(!w[i]){
				w[i]=p;
				return;
			}else{
				p^=w[i];
			}
		}
	}
	return;
}

100pts:


void insert(int x){
	for(int i=60;i>=0;i--){
		if(x&(1ll<<i)){
			if(!w[i]){
				w[i]=x;
				return;
			}else{
				x^=w[i];
			}
		}
	}
	return;
}

2024/11/30 09:29
加载中...