精度?精度?精度?
查看原帖
精度?精度?精度?
809531
JustForYourself楼主2022/10/30 11:08

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 分?

2022/10/30 11:08
加载中...