思路
\textbf{思路}
思路:
\quad
不妨设 b >= a,否则swap。 显然必须有 a <= b <= 2a,否则由于b最多以a的2倍速减小,不可能成立,return false。 如果可以变换到零,等价于最后可变换至 b = 2a,那么必须有 b - 3x = 2(a - 3x),等价于 (2a - b) % 3 == 0。
\quad
-3x的含义就是取相同的x同时进行两个可选操作。这怎么理解呢?
\quad
显然如果此时只需只执行其中一个子操作,而另外一个不执行,那么此时已经是b = 2a了。否则,我们应该两个操作同时执行,使其逼近这个等式。
\quad
其次从数学上来说,我们显然有 (b - 3x) / (a - 3x) > b / a,因此在 a <= b < 2a时,经过-3x以后比值必然增大,更加接近 b = 2a这个等式
附上AC代码
#include<bits/stdc++.h>
using namespace std;
int t, a, b;
bool helper(int a, int b)
{
if (a >= b) swap(a, b);
if (b > 2 * a) return false;
if ((2 * a - b) % 3 == 0) return true;
else return false;
}
int main()
{
cin >> t;
while (t--)
{
cin >> a >> b;
cout << (helper(a, b) ? "YES" : "NO") << endl;
}
return 0;
}