警示后人/如果你只AC第2个点
查看原帖
警示后人/如果你只AC第2个点
912241
dream_on_screen楼主2024/8/25 21:40

可能是因为代码里面有ub,比如说我在求线性基的时候

void insert(long long a)
{
	for(int i=59;i>=0;i--)
		if((a&(1ll<<i))!=0)
			if(num[i]==0)
			{
				num[i]=a;
				return ;
			}
			else
				a^=num[i];
}

第4行里面开始的时候写的是if((a&(1<<i))!=0),在计算1<<i的时候因为1的数据类型是int,i的数据类型也是int,所以返回值为int,但是i的取值很大的时候左移位数超出了int类型的表达范围,运行结果将会是无法预知的。

所以应该改成1ll<<i

2024/8/25 21:40
加载中...