题目:CF1862D这是一个WA on test 10的代码,为什么二分中的if条件用double类型是错误的(我把条件中的运算换成__int128类型时就AC了)?
#include <bits/stdc++.h>
#define int long long
#define sz(a) ((int)a.size())
using namespace std;
using PII = pair<int, int>;
using i128 = __int128;
const int N = 2e5 + 10;
int n;
i128 lll = 1;
void solve() {
cin >> n;
int l = 2, r = n;
while (l < r) {
int mid = (l + r) / 2;
if (1.0 * mid * (mid - 1) / 2 + 1e-6 >= n) { // 为什么用double时错误的?
r = mid;
} else {
l = mid + 1;
}
}
cout << " ";
if (lll * l * (l - 1) / 2 == n) {
cout << l << "\n";
} else {
cout << (l - 1) + n - (l - 1) * (l - 2) / 2 << "\n";
}
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int T = 1;
cin >> T; cin.get();
while (T --) solve();
return 0;
}