1 条题解

  • 1
    @ 2025-5-6 18:19:31

    错,得,好,冤!

    没加freopen错了

    上代码

    #include <bits/stdc++.h>
    using namespace std;
    long long n, k, e, d, m, p, q;
    int main(){ 
    	freopen("decode.in", "r", stdin);
    	freopen("decode.out","w",stdout);   
        cin >> k;
        while(k--){
            cin >> n >> d >> e;
            long long m = n - e*d +2;
            long long l = 1, r = m/2, p, q;  // p <= q  所以 p <= m/2
            while(l <= r) {
                p = (l + r) / 2;
                q = m - p;
                if(n == p*q) {  // 在 p 的值域范围内,p*q 是单调递增的
                    break;
                } else if(n < p*q) {
                    r = p - 1;
                } else {
                    l = p + 1;
                }
            }
            if(n == p*q) {
                cout << p << ' ' << q << '\n';
            } else {
                cout << "NO\n";
            }
        }
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    

    信息

    ID
    303
    时间
    1000ms
    内存
    512MiB
    难度
    7
    标签
    递交数
    70
    已通过
    18
    上传者