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 = 2
k1+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";
    }
}

对这种问题我的反应一向很慢,,,,,唉

全部评论

相关推荐

learYuan:🐕看了都摇头
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务