一、写在前面
昨天虽然没有很长的时间打比赛,只打了一个小时就去睡了。但是昨天的A题是自己做构造题的第一个突破,是自己第一次在赛场上用分析和一些解题技巧(如手动模拟样例),有条不紊地解决的一道题。
二、算法分析
首先想到将$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 }