求教,为什么int128的运算顺序会影响结果??
查看原帖
求教,为什么int128的运算顺序会影响结果??
101761
NanNanzi_QvQ楼主2023/12/29 23:39

这是AC的记录

这是75分记录

其实我只是改了代码中的一个表达式的计算顺序,

AC代码中:

bool h(tree tr, __int128 l, __int128 r) {//树tr在第l天到第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) {//树tr在第l天到第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;
	}
}

为什么只是把除法放在前面就会产生这种问题?

2023/12/29 23:39
加载中...