社区讨论

警钟撅烂:关于取模

P7671[GDOI2016] 疯狂动物城参与者 6已保存回复 5

讨论操作

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

当前回复
5 条
当前快照
1 份
快照标识符
@m1uei9ag
此快照首次捕获于
2024/10/04 15:25
去年
此快照最后确认于
2025/11/04 18:06
4 个月前
查看原帖
如果你不在计算过程中取模,可能会爆 long long
我只在计算出结果后取模,导致大部分测试点都 RE 了,我还以为是数组开小了调了半天。最后发现是因为计算出负数,导致异或之后的结果出了大问题,直接数组越界了。
如果你取模了还是错,要注意:计算过程中如果有减法,取模之后可能出现减数大于被减数的情况,会出现负数,这时需要通过取模将负数变成正数:
我的 40 分代码的错误之处:
CPP
ll sd(int l, int r) { return pd[r] - pd[l - 1]; }
ll sdd(int l, int r) { return pdd[r] - pdd[l - 1]; }
这样改之后,变成了 100 分:
CPP
ll sd(int l, int r) { return (((pd[r] - pd[l - 1]) % mod) + mod) % mod; }
ll sdd(int l, int r) { return (((pdd[r] - pdd[l - 1]) % mod) + mod) % mod; }

回复

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

正在加载回复...