社区讨论
警示后人/如果你只AC第2个点
P3292[SCOI2016] 幸运数字参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m09matps
- 此快照首次捕获于
- 2024/08/25 21:41 2 年前
- 此快照最后确认于
- 2025/11/04 22:26 4 个月前
可能是因为代码里面有ub,比如说我在求线性基的时候
CPPvoid 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回复
共 1 条回复,欢迎继续交流。
正在加载回复...