警钟撅烂:关于取模
查看原帖
警钟撅烂:关于取模
186472
AC_loveRealNewbie楼主2024/10/4 15:25

如果你不在计算过程中取模,可能会爆 long long

我只在计算出结果后取模,导致大部分测试点都 RE 了,我还以为是数组开小了调了半天。最后发现是因为计算出负数,导致异或之后的结果出了大问题,直接数组越界了。

如果你取模了还是错,要注意:计算过程中如果有减法,取模之后可能出现减数大于被减数的情况,会出现负数,这时需要通过取模将负数变成正数:

我的 40 分代码的错误之处:

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 分:

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; }
2024/10/4 15:25
加载中...