Shovels and Swords (Codeforces 1366A)
Tags: Greedy, binary search

Polycarp plays a well-known computer game (we won't mention its name). In this game, he can craft tools of two types — shovels and swords. To craft a shovel, Polycarp spends two sticks and one diamond; to craft a sword, Polycarp spends two diamonds and one stick.Each tool can be sold for exactly one emerald. How many emeralds can Polycarp earn, if he has $$$a$$$ sticks and $$$b$$$ diamonds?

Input: The first line contains one integer $$$t$$$ ($$$1 \le t \le 1000$$$) — the number of test cases.The only line of each test case contains two integers $$$a$$$ and $$$b$$$ ($$$0 \le a, b \le 10^9$$$) — the number of sticks and the number of diamonds, respectively.

Output: For each test case print one integer — the maximum number of emeralds Polycarp can earn.

Note: In the first test case Polycarp can earn two emeralds as follows: craft one sword and one shovel.In the second test case Polycarp does not have any diamonds, so he cannot craft anything.

Sample Inputs:
4
4 4
1000000000 0
7 15
8 7

Sample Outputs:
2
0
7
5

Solution (Python):
for s in [*open(0)][1:]:
    a = (*map(int, s.split()),)
    print(min(*a, sum(a) // 3))

Solution (Python):
import math, bisect
from collections import defaultdict

def find_bit(a, b):
    xor = a ^ b
    count = 0
    while xor:
        count += xor & 1
        xor >>= 1
    return count

def main():
    t = int(input())
    arr = []
    for _ in range(t):
        (a, b) = map(int, input().strip().split())
        arr.append((a, b))
    for item in arr:
        (a, b) = item
        print(min(a, b, (a + b) // 3))
if __name__ == '__main__':
    main()

Solution (Python):
def shovel_swords(a, b):
    return min(a, b, (a + b) // 3)
if __name__ == '__main__':
    for test_case in range(int(input())):
        (a, b) = map(int, input().split())
        print(shovel_swords(a, b))