社区讨论

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 条回复,欢迎继续交流。

正在加载回复...