二分法看过来,注意程序中注释
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
long long k,e,d,m,n;
int main()
{
cin >> k;
while(k--)
{
cin >> n >> e >> d;
m = n - e * d + 2;
int l = 1,r = m / 2 + 1;
bool flag = false;
while(l < r)
{
int mid = (l + r) >> 1;
long long num = mid * (m - mid);
if(num == n)
{
cout << mid << ' ' << m - mid << endl;
flag = true;
break;
}
if(num < n)l = mid + 1;
else r = mid;
}
if(!flag)cout << "NO" << endl;
}
}