警示后人(二分法)
查看原帖
警示后人(二分法)
349545
youyew2007楼主2022/10/29 16:44

二分法看过来,注意程序中注释

#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;//不写 +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;
    }
}
2022/10/29 16:44
加载中...