[CodeForces] 1260B — Obtain Two Zeroes
原题链接:https://vjudge.net/problem/2953420/origin
题目大意:
给定两个数a,b,判断是否可以通过若干个
操作1:选择一个数x,a = a - 2x,b = b - x;或
操作2:选择一个数x,a = a - x,b = b - 2x;
使a,b都等于0
题目分析:
无论进行多少个操作1,都可以结合成1个,对于操作2也是一样。
假设a,b满足要求,操作1所选数位x,操作2所选数为y,那么
a - 2x - y = 0,b - x - 2y = 0,即
a = 2x + y,b = x + 2y,那么进行消元
x = (2a - b)/3,y = (2b - a)/3,
所以只要 2a - b 和 2b - a 都不小于0,且都为3的倍数即可。
代码实现:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int t;
int a, b;
cin >> t;
while(t--)
{
cin >> a >> b;
if((a != 0 && b != 0) && (2*a-b >= 0 && 2*b-a >= 0) && ((2*a-b)%3 == 0 && (2*b-a)%3 == 0)) cout << "YES" << endl;
else if(a == 0 && b == 0)cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
最后,希望路过的dl们能给予改进的建议!