社区讨论
警钟撅烂:关于取模
P7671[GDOI2016] 疯狂动物城参与者 6已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @m1uei9ag
- 此快照首次捕获于
- 2024/10/04 15:25 去年
- 此快照最后确认于
- 2025/11/04 18:06 4 个月前
如果你不在计算过程中取模,可能会爆
long long。我只在计算出结果后取模,导致大部分测试点都 RE 了,我还以为是数组开小了调了半天。最后发现是因为计算出负数,导致异或之后的结果出了大问题,直接数组越界了。
如果你取模了还是错,要注意:计算过程中如果有减法,取模之后可能出现减数大于被减数的情况,会出现负数,这时需要通过取模将负数变成正数:
我的 40 分代码的错误之处:
CPPll sd(int l, int r) { return pd[r] - pd[l - 1]; }
ll sdd(int l, int r) { return pdd[r] - pdd[l - 1]; }
这样改之后,变成了 100 分:
CPPll 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 条回复,欢迎继续交流。
正在加载回复...