社区讨论

警示后人/如果你只AC第2个点

P3292[SCOI2016] 幸运数字参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m09matps
此快照首次捕获于
2024/08/25 21:41
2 年前
此快照最后确认于
2025/11/04 22:26
4 个月前
查看原帖
可能是因为代码里面有ub,比如说我在求线性基的时候
CPP
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的数据类型是inti的数据类型也是int,所以返回值为int,但是i的取值很大的时候左移位数超出了int类型的表达范围,运行结果将会是无法预知的。
所以应该改成1ll<<i

回复

1 条回复,欢迎继续交流。

正在加载回复...