跳至主要内容

Coin Piles

題目

有兩個硬幣堆,分別有 aabb 個硬幣。 每次你可以有兩種操作

  1. 左側一堆中取出 1 枚硬幣,從右側一堆中取出 2 枚硬幣
  2. 左側一堆中取出 2 枚硬幣,從右側一堆中取出 1 枚硬幣。

請問是否能依照操作同時清空這兩堆硬幣。

輸入

一個整數 tt1n1051 \le n \le 10^5)表示測資數量。 接著有 tt 行,每行有兩個整數 aabb (0a,b1090 \le a, b \le 10^9),表示兩堆的硬幣數量。

輸出

對於每個測資,若可以清空兩硬幣堆則輸出 "YES",否則輸出 "NO"。

範例測資

Input:

3
2 1
2 2
3 3

Output:

YES
NO
YES

1.1. 經過操作 22 後兩堆皆為 00

2.2. 無法透過任何操作使兩堆硬幣為 00

3.3. 經過操作 11 和操作 22 後兩堆皆為 00

想法

因為每次操作都會取走 3 枚硬幣,所以若要同時清空這兩堆硬幣,則這兩堆硬幣數量總和應為 3 的倍數,且須確保 某堆硬幣數量的一半 必須不比另一堆硬幣數量多,不然會導致有一堆無法被清空。

範例程式碼

C++ 範例
#include <bits/stdc++.h>
using namespace std;
int main(){
int a, b, t; cin >> t;
while(t--){
cin >> a >> b;
if((a + b) % 3 != 0 || (a / 2) > b || (b / 2) > a){
cout << "NO" << endl;
}
else {
cout << "YES" << endl;
}
}
}