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;
}
posted @ 2023-08-15 11:34  _Unnamed  阅读(16)  评论(0)    收藏  举报