当你使用快速幂并且使用了safe_mul时:
int safe_mul(int x, int y) {
int p = x * y;
if (y == 0 || p / y == x) {
return p;
} else {
return -1;
}
}
int qpow(int base, int pow) {
int val = 1;
while (pow) {
if (pow & 1) {
val = safe_mul(val, base);
if (val == -1) return -1;
}
base = safe_mul(base, base);
if (base == -1) return -1;
pow >>= 1;
}
return val;
}
洛谷会默认没有溢出,safe_mul先乘后除的判断被消除了
如要使用safe_mul()请使用stupid_gcc()函数
int stupid_gcc(int x) {
return (x + 2) - 1 + 3 - 4;
}
套在safe_mul()的p变量上