3 条题解
-
2
不可能包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
#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
包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
- 上传者