CSES - Coin Piles | Cọc xu

Xem PDF

Điểm: 1000 (p) Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Bạn có hai cọc xu lần lượt chứa \(a\)\(b\) đồng xu. Với mỗi lượt, bạn có thể loại bỏ \(1\) đồng xu ở cọc bên trái và \(2\) đồng xu ở cọc bên phải, hoặc loại bỏ \(2\) đồng xu ở cọc bên trái và \(1\) đồng xu ở cọc bên phải.

Nhiệm vụ của bạn đó chính là tìm ra liệu bạn có thể loại bỏ tất cả các đồng xu ở cả hai cọc.

Input

  • Ở dòng đầu tiên chứa một số nguyên \(t\): số lượng test.
  • Sau đó, có \(t\) dòng, mỗi dòng chứa hai số nguyên \(a\)\(b\): là số lượng đồng xu ở mỗi túi.

Output

  • Với mỗi test, hãy in YES nếu bạn có thể loại bỏ tất cả các đồng xu ở cả hai cọc và in NO nếu ngược lại.

Constraints

  • \(1 \leq t \leq 10^5\)
  • \(0 \leq a, b \leq 10^9\)

Example

Sample input

3
2 1
2 2 
3 3

Sample output

YES
NO
YES


Bình luận


  • 1
    hoangphucnguyen2012    2:39 p.m. 8 Tháng 8, 2024 đã chỉnh sửa

    Spoiler Alert

    Để giải quyết bài toán này, chúng ta cần kiểm tra liệu có thể loại bỏ tất cả đồng xu ở cả hai cọc bằng cách sử dụng hai loại hành động đã cho.

    Đặt a là số đồng xu ở cọc bên trái và b là số đồng xu ở cọc bên phải. Có hai loại hành động:
    Loại bỏ 1 đồng xu ở cọc bên trái và 2 đồng xu ở cọc bên phải.
    Loại bỏ 2 đồng xu ở cọc bên trái và 1 đồng xu ở cọc bên phải.

    Chúng ta cần tìm ra liệu có thể giảm số đồng xu ở cả hai cọc về 0 bằng cách lặp lại hai loại hành động trên. Để làm được điều này, ta cần xem xét các điều kiện sau:

    1. Tổng số đồng xu ở hai cọc phải chia hết cho 3(a+b mod 3 = 0). Điều này là do mỗi hành động luôn loại bỏ 3 đồng xu tổng cộng.

    2. Không được có cọc nào có số đồng xu âm trong quá trình thực hiện các hành động. Nghĩa là, tại bất kỳ thời điểm nào, số đồng xu ở mỗi cọc phải không nhỏ hơn số đồng xu bị loại bỏ trong hành động tiếp theo.

    Công thức cụ thể để kiểm tra liệu có thể loại bỏ tất cả đồng xu ở cả hai cọc là:

    (a + b) mod 3 = 0 và min(a,b) >= max(a,b) // 2

    Giải thích:

    (a + b) mod 3 = 0:Tổng số đồng xu phải chia hết cho 3.

    min(a,b) >= max(a,b) // 2: Số đồng xu ở cọc ít hơn hoặc bằng không được nhỏ hơn một nửa số đồng xu ở cọc nhiều hơn.

    Code Python 3 ví dụ cho các bạn (code hơi ngu nên các bạn đừng quan tâm)

    Lưu ý chỉ xem code khi các bạn quá bí ý tưởng


    t = int(input())
    for i in range(t):
        a, b = map(int, input().split())
        if (a + b) % 3 == 0 and a <= 2 * b and b <= 2 * a:
            print("YES")
        else:
            print("NO")