如题,这道题我写了个二分答案,AC了但是不知道原因。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll INF = 1e18;
int k;
ll n, d, e, sum;
ll F() {
ll l = 1, r = sum;
while (l < r) {
ll mid = (l + r) >> 1;
if (mid * (sum - mid) == n && (mid - 1) * (sum - mid - 1) + 1 == e * d) {
return mid;
} else if (mid * (sum - mid) > n) {
r = mid - 1;
} else if (mid * (sum - mid) < n) {
l = mid + 1;
}
}
return (l * (sum - l) != n || (l - 1) * (sum - l - 1) + 1 != e * d ? sum : l);
}
void Solve() {
cin >> n >> d >> e;
sum = n - e * d + 2;
ll ans = F();
if (ans == sum) {
cout << "NO\n";
} else {
cout << min(ans, sum - ans) << ' ' << max(ans, sum - ans) << '\n';
}
}
int main() {
ios::sync_with_stdio(0), cin.tie(0);
for (cin >> k; k--; Solve()) {
}
return 0;
}