社区讨论
40分求调,玄关
P8814[CSP-J 2022] 解密参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhj3d5un
- 此快照首次捕获于
- 2025/11/03 20:03 4 个月前
- 此快照最后确认于
- 2025/11/03 20:03 4 个月前
RT
CPP#include<bits/stdc++.h>
using namespace std;
using ll = long long;
bool isCompletelySquare(ll n, ll &sqrt_n) {
if (n < 0) return false;
ll root = (ll)sqrtl(n);
if (root * root == n) {
sqrt_n = root;
return true;
}
return false;
}
int main() {
int k;
cin >> k;
while (k--) {
ll n, d, e;
cin >> n >> d >> e;
ll s = n + 2 - e * d;
if (s < 2) {
cout << "NO\n";
return 0;
}
ll discriminant = s * s - 4 * n;
if (discriminant < 0) {
cout << "NO\n";
return 0;
}
ll sqrt_delta;
if (!isCompletelySquare(discriminant, sqrt_delta)) {
cout << "NO\n";
return 0;
}
if ((s + sqrt_delta) % 2 != 0 || (s - sqrt_delta) % 2 != 0) {
cout << "NO\n";
return 0;
}
ll p = (s - sqrt_delta) / 2;
ll q = (s + sqrt_delta) / 2;
if (p > 0 && q > 0 && p * q == n) {
cout << p << " " << q << "\n";
} else {
cout << "NO\n";
}
}
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...