CF1260B Obtain Two Zeroes 题解
我们知道,有两次操作:
\(a=a-x,b=b-2\times x(x>0)\)
\(a=a-2\times x,b=b-x(x>0)\)
我们知道,每次 \(a+b\) 总共都减了 \(3x\) 。
所以,我们首先需要判断是否 \(a+b\) 是 \(3\) 的倍数就可以了。
于是,我们写出了一个简单的代码:
#include<bits/stdc++.h>
using namespace std;
int t,a,b;
int main(){
cin>>t;
while(t--){
cin>>a>>b;
if((a+b)%3!=0)cout<<"NO\n";
else cout<<"YES\n";
}
return 0;
}
但是,并没有正确,不然这也不是黄题了。
我们一定是少判断了什么,我们看下面这个样例:
如果 \(a=1 b=10001\) 我们上面的代码会输出 YES 。但是,我们知道,一定是不可以的。
所以,我们还需要判断一下 \(min(a,b)\times 2\) 和 \(max(a,b)\) 的大小就可以了,因为如果我们一直让最小数减小,最大数减大,所以如果是上面那种情况,一定是无法正确的。
那么这样的话,只需要写几个 if 就可以了。
AC code
#include<bits/stdc++.h>
using namespace std;
int a,b,t;
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&a,&b);
if((a+b)%3!=0)printf("NO\n");
else{
if(min(a,b)*2<max(a,b))printf("NO\n");
else printf("YES\n");
}
}
return 0;
}

浙公网安备 33010602011771号