这是AC的记录
这是75分记录
其实我只是改了代码中的一个表达式的计算顺序,
AC代码中:
bool h(tree tr, __int128 l, __int128 r) {
if (tr.c >= 0)
return tr.b * (r - l + 1) + tr.c * (r + l) * (r - l + 1) / 2 >= tr.a;
else {
__int128 imax = (1 - tr.b) / tr.c;
if (l > imax) return r - l + 1 >= tr.a;
else if (r < imax) return tr.b * (r - l + 1) + tr.c * (r + l) * (r - l + 1) / 2 >= tr.a;
else return tr.b * (imax - l + 1) + tr.c * (l + imax) * (imax - l + 1) / 2 + r - imax >= tr.a;
}
}
75分代码中:
bool h(tree tr, __int128 l, __int128 r) {
if (tr.c >= 0)
return tr.b * (r - l + 1) + tr.c * (r + l) / 2 * (r - l + 1) >= tr.a;
else {
__int128 imax = (1 - tr.b) / tr.c;
if (l > imax) return r - l + 1 >= tr.a;
else if (r < imax) return tr.b * (r - l + 1) + tr.c * (r + l) / 2 * (r - l + 1) >= tr.a;
else return tr.b * (imax - l + 1) + tr.c * (l + imax) / 2 * (imax - l + 1) + r - imax >= tr.a;
}
}
为什么只是把除法放在前面就会产生这种问题?