(之前写在小号里了,现在大号找回来了,所以再搬回来)
一、算法分析
首先想到将x+y=z写成Ai+Aj=ABk,这样可以约掉A.变成i+j=Bk,然后令i=1,j=B−1,k=B
即可。
接着构造数据考虑特殊情况,要求x和y不能是AB的倍数,则需要考虑对于以上的构造方式,什么情况下x和y是AB的倍数,结果只有B=1的情况下成立,则特判B=1的情况即可。
同理,对于题目中要求x,y,z三个数不同的条件,特判B=2的情况即可。
二、代码
1 #include<iostream>
2 #include<cstring>
3 #include<algorithm>
4 #include<cstdio>
5 #define LL long long
6 using namespace std;
7 LL a,b;
8 int main(){
9
10 int T;
11 cin>>T;
12 while(T--){
13 cin>>a>>b;
14 if(b==1) cout<<"NO"<<endl;
15 else if(b==2){
16 cout<<"YES"<<endl;
17 cout<<a*3<<' '<<a<<' '<<a*4<<endl;
18 }
19 else{
20 cout<<"YES"<<endl;
21 cout<<a<<' '<<a*(b-1)<<' '<<a*b<<endl;
22 }
23 }
24
25
26
27 return 0;
28
29 }