Codeforces Round #720 (Div. 2) A. Nastia and Nearly Good Numbers

一、写在前面

昨天虽然没有很长的时间打比赛,只打了一个小时就去睡了。但是昨天的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     }

 

上一篇:python中join()函数的使用方法


下一篇:B. Nastia and a Good Array