数学做法 70 pts 求助
查看原帖
数学做法 70 pts 求助
363036
chlchl楼主2022/10/30 09:56
#include<bits/stdc++.h>
#define ll long long
using namespace std;

int k;//二元二次方程组都会解吧
ll q[5];

ll sqr(ll a){
	return a * a;
}

int main(){
//	freopen("decode.in", "r", stdin);
//	freopen("decode.out", "w", stdout);
	scanf("%d", &k);
	while(k--){
		ll n, d, e;
		scanf("%lld%lld%lld", &n, &d, &e);
		ll delta = sqr(n + 2ll - e * d) - 4ll * n;
		if(delta < 0){
			printf("NO\n");
			continue;
		}
		ll b = 1LL * (n + 2ll - e * d);
		q[0] = (b + sqrt(delta)) / 2ll, q[1] = (b - sqrt(delta)) / 2ll;
		q[2] = n / q[0], q[3] = n / q[1];
		sort(q, q + 4);
		int cnt = 0;
		ll lst = -1e18, ans[4] = {};
		for(int i=0;i<4;i++){
			if(q[i] != lst)
				ans[cnt++] = q[i], lst = q[i];
		}
		if(cnt == 2)
			printf("%lld %lld\n", ans[0], ans[1]);
		else
			printf("NO\n");
	}
	return 0;
}

2022/10/30 09:56
加载中...