Codeforces Round #720 (Div. 2) A. Nastia and Nearly Good Numbers 题解(思维题)

(之前写在小号里了,现在大号找回来了,所以再搬回来)

一、算法分析

首先想到将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     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值