80pts:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll fixsqrt(ll tar) {
ll sqr = sqrt(tar);
for (ll x = sqr - 10; x <= sqr + 10; x++) {
if (x * x == tar) {
return x;
}
}
return -1;
}
int main() {
// freopen("decode.in", "r", stdin);
// freopen("decode.out", "w", stdout);
int k;
cin >> k;
while (k--) {
ll n, d, e;
cin >> n >> d >> e;
ll m = n - e * d + 2;
ll a = fixsqrt(m * m - 4 * n);
if (a == -1) {
cout << "NO" << endl;
continue;
}
ll b = m;
ll p = (a + b) / 2;
ll q = m - p;
if (n == p * q && e * d == (p - 1) * (q - 1) + 1) {
cout << min(p, q) << " " << max(p, q) << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
100pts:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll fixsqrt(ll tar) {
ll sqr = sqrt(tar);
/*
for (ll x = sqr - 10; x <= sqr + 10; x++) {
if (x * x == tar) {
return x;
}
}
*/
return (sqr * sqr == tar ? sqr : -1);
}
int main() {
// freopen("decode.in", "r", stdin);
// freopen("decode.out", "w", stdout);
int k;
cin >> k;
while (k--) {
ll n, d, e;
cin >> n >> d >> e;
ll m = n - e * d + 2;
ll a = fixsqrt(m * m - 4 * n);
if (a == -1) {
cout << "NO" << endl;
continue;
}
ll b = m;
ll p = (a + b) / 2;
ll q = m - p;
if (n == p * q && e * d == (p - 1) * (q - 1) + 1) {
cout << min(p, q) << " " << max(p, q) << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
80pts 我甚至前后10个找了一下,为什么炸了 20 分?