3 条题解

  • 2
    @ 2025-11-22 14:31:35

    不可能包AC

    方法1:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    ll k,n,e,d;
    int main() {
        cin >> k;
        while (k--) { 
            cin >> n >> e >> d;
            ll m=n+2-e*d,de=m*m-4*n;
            if (de<0) {
                cout << "NO" << endl;
                continue;
            }
            long long sqrt_de = sqrt(de);
            if (sqrt_de * sqrt_de != de) {
                cout << "NO" << endl;
                continue;
            }
            ll p=(m-sqrt_de)/2,q=(m+sqrt_de)/2;
            if (p>0&&q>0&&p*q==n) {
                cout << p << " " << q << endl;
            } else {
                cout << "NO" << endl;
            }
        }
        //彭子洋原创^_^; 
        return 0;
    }
    

    方法2:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    ll k,n,d,e,m,p,q; 
    int main(){
    	cin >> k;
    	while(k--){
    		cin >> n >> d >> e;
    		m=n+2-e*d;
    		ll lf=1,rt=m/2;
    		bool f=0;
    		while(lf<=rt){
    			p=(lf+rt)/2;
    			q=m-p;
    			if(p*q>n){
    				rt=p-1;
    			}
    			else if(p*q<n) {
    				lf=p+1;
    			}
    			else {
    				cout << p << " " << q << "\n";
    				f=1;
    				break;
    			}
    		}
    		if(!(f)) cout << "NO\n";
    	}
    	return 0;
    }
    //
    
    • 0
      @ 2025-11-22 14:24:16
      #include <iostream>
      #include <cmath>
      using namespace std;
      typedef long long ll;
      int main() {
          int k;
          cin >> k;
          while (k--) {
              ll n, e, d;
              cin >> n >> e >> d;
              ll m = n - e * d + 2;
              ll delta = m * m - 4 * n;
              if (delta < 0) {
                  cout << "NO\n";
                  continue;
              }
              ll root = sqrt(delta);
              if (root * root != delta) {
                  cout << "NO\n";
                  continue;
              }
              ll p = (m - root) / 2;
              ll q = (m + root) / 2;
              if (p > 0 && q > 0 && p * q == n) {
                  cout << p << " " << q << "\n";
              } else {
                  cout << "NO\n";
              }
          }
          return 0;
      }
      
      • -1
        @ 2025-11-22 14:48:56

        包AC

        #include<bits/stdc++.h>
        using namespace std;
        int k,n,d,e,m,p,q,ans=1;
        int main(){
        	cin>>k;
        	while(k--){
        		cin>>n>>d>>e;
        		m=n+2-e*d;
        		long long lf=1,rt=m/2;
        		bool ok=0;
        		while(lf<=rt){
        		 p=(lf+rt)/2;
        		 q=m-p;		
        		 if(p*q>n) rt=p-1;
        		 else if(p*q<n) lf=p+1;
        		 else {
        		 	cout<<p<<" "<<q<<endl;
        		 	ok=1;
        		 	break;
        		 }	
        		}
        		if(ok==0)cout<<"NO"<<endl;
        	} 
        	return 0;
        }
        
        • 1

        信息

        ID
        2917
        时间
        1000ms
        内存
        256MiB
        难度
        8
        标签
        递交数
        193
        已通过
        48
        上传者