Obtain Two Zeroes CodeForces - 1260B
思维
题意
现在给你两个正整数a,b,
每一次操作你可以让a = a-x , b =b-2x 或者 a = a-2x , b = b - x,
每次操作的x为任意正整数,
每***作的x可以不同,
请问是否可以经过若干***作使得a,b同时为0。
分析
这题老实说刚拿到手上有点懵逼。没大有思路。
其实这种题,我们应该去看她的本质。
对于数a,b,我们不妨就令x == 1!!!!!
这样我们就已经做出来了。
假设,操作一用了k1次,操作二用了k2次
那么a = k1+2k2
b = 2k1+k2
求这个方程,能不能有非负整数k1,k2满足
OK了
下面代码,注意细节:
#include<iostream>; using namespace std; int a, b, tmp; int main() { ios::sync_with_stdio(0); int t;cin >> t; while (t--) { cin >> a >> b; if (a > b) { tmp = a; a = b; b = tmp; } int tmp1 = (2 * b - a); int tmp2 = (2 * a - b); if (b < 0 || a < 0 || tmp1 < 0 || tmp2 < 0 || tmp1 % 3 != 0 || tmp2 % 3 != 0) { cout << "NO\n"; } else cout << "YES\n"; } }
对这种问题我的反应一向很慢,,,,,唉