提示:这个帖子涉及到 iai.sh.cn 正在进行的比赛题目(楼主已经完赛),故不在此粘贴代码,不打算打这个比赛或者已经完赛的并认为自己可能知道怎么修的大佬可以私信一下我,我私发
某个求最小值的题中,我的有一步计算涉及大约 1e9 * 1e9 * 3e5 的数值,很明显,爆 ll 了,输出为负数。于是我把相应的数组换成了 __int128,但是不管怎么改,代码都可能输出小于 0 的数或者小于标准答案的数(由于是求最小值,故正常来讲这种事情不会发生),因此推断仍然是溢出。然而上述 3e23 的数仍在 __int128 的范围内,请问有人能教教为什么会呢。
几点关于代码的基本信息如下(其实就是我觉得可能挂的地方,主要涉及到类型转换),有需代码者(需满足不打这个比赛或者已经甲组完赛)
inline __int128 Abs(__int128 x) {
if (x < (__int128)0) return -x;
return x;
inline __int128 solve(...) {
return ...; // 此处为 __int128 类型的数
}
...
ans = min(ans, (long long)solve(...));
long long a, b;
__int128 c = (__int128)a * b;