在取模的时候,通常会写 ans = (ans + v) % mod,但是 % 取模太慢了。
有的时候会使用 ans += v % mod , if(ans >= mod) ans -= mod 的方式取模。
并且实测确实在 hd多校 3 的 1001 快了整整 2s(远超我的想象)
但是在 NC多校 5 的 K,使用上述方式,反而把 1200 ms “优化”成了 1800 ms,是为什么?
具体代码如下:
for (int i = 1; i < (1 << m); i++)
dp1[i] = 23;
dp1[0] = 0, dp2[0] = 1;
for (auto u : sec) {
for (int i = 0; i < (1 << m); i++) {
int res = (i | u);
if (dp1[i] + 1 < dp1[res]) {
dp1[res] = dp1[i] + 1;
dp2[res] = dp2[i] * cnt[u] % mod;
} else if (dp1[i] + 1 == dp1[res]) {
dp2[res] += dp2[i] * cnt[u] % mod;
// dp2[res] %= mod;
if (dp2[res] >= mod)
dp2[res] -= mod;
}
}
}