zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【题解】[CSP-J 2022] 解密

解密 2022 题解 CSP
2023-06-13 09:13:23 时间

[CSP-J 2022] 解密

样例 #1

样例输入 #1

10
770 77 5
633 1 211
545 1 499
683 3 227
858 3 257
723 37 13
572 26 11
867 17 17
829 3 263
528 4 109

样例输出 #1

2 385
NO
NO
NO
11 78
3 241
2 286
NO
NO
6 88

提示

附件

【样例 #2】

见附件中的 decode/decode2.indecode/decode2.ans

【样例 #3】

见附件中的 decode/decode3.indecode/decode3.ans

【样例 #4】

见附件中的 decode/decode4.indecode/decode4.ans

【数据范围】

题目分析

代码实现

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
ll n,d,e;
//p^2 -(n-e*d+2)p+n = 0
bool chk(ll num){//判断num是否时完全平方数
	ll t=ll(sqrt(num));
	return t*t==num;
}
int main(){
	int k;
	cin>>k;
	while(k--){
		cin>>n>>d>>e;
		ll b=e*d-n-2;
		ll a=1,c=n;
		if(b*b<4*a*c){
			cout<<"NO"<<endl;
		}else{
			ll t=b*b-4*a*c;
			bool f=0;
			if(chk(t)&&(ll(-b+sqrt(t))%(2*a)==0)){
				ll p=(-b-sqrt(t))/(2*a);
				ll q=n/p;
				if(p>=1){
					f=1;
					cout<<p<<" "<<q<<endl;
				}
			}
			if(!f) cout<<"NO"<<endl;
		}
	}
	return 0;
}

Q.E.D.