Charmed by the Game (Codeforces 1558A)
Tags: Math, brute force

Alice and Borys are playing tennis.A tennis match consists of games. In each game, one of the players is serving and the other one is receiving.Players serve in turns: after a game where Alice is serving follows a game where Borys is serving, and vice versa.Each game ends with a victory of one of the players. If a game is won by the serving player, it's said that this player holds serve. If a game is won by the receiving player, it's said that this player breaks serve.It is known that Alice won $$$a$$$ games and Borys won $$$b$$$ games during the match. It is unknown who served first and who won which games.Find all values of $$$k$$$ such that exactly $$$k$$$ breaks could happen during the match between Alice and Borys in total.

Input: Each test contains multiple test cases. The first line contains the number of test cases $$$t$$$ ($$$1 \le t \le 10^3$$$). Description of the test cases follows.Each of the next $$$t$$$ lines describes one test case and contains two integers $$$a$$$ and $$$b$$$ ($$$0 \le a, b \le 10^5$$$; $$$a + b > 0$$$) — the number of games won by Alice and Borys, respectively.It is guaranteed that the sum of $$$a + b$$$ over all test cases does not exceed $$$2 \cdot 10^5$$$.

Output: For each test case print two lines.In the first line, print a single integer $$$m$$$ ($$$1 \le m \le a + b + 1$$$) — the number of values of $$$k$$$ such that exactly $$$k$$$ breaks could happen during the match.In the second line, print $$$m$$$ distinct integers $$$k_1, k_2, \ldots, k_m$$$ ($$$0 \le k_1 < k_2 < \ldots < k_m \le a + b$$$) — the sought values of $$$k$$$ in increasing order.

Note: In the first test case, any number of breaks between $$$0$$$ and $$$3$$$ could happen during the match:   Alice holds serve, Borys holds serve, Alice holds serve: $$$0$$$ breaks;  Borys holds serve, Alice holds serve, Alice breaks serve: $$$1$$$ break;  Borys breaks serve, Alice breaks serve, Alice holds serve: $$$2$$$ breaks;  Alice breaks serve, Borys breaks serve, Alice breaks serve: $$$3$$$ breaks. In the second test case, the players could either both hold serves ($$$0$$$ breaks) or both break serves ($$$2$$$ breaks).In the third test case, either $$$2$$$ or $$$3$$$ breaks could happen:   Borys holds serve, Borys breaks serve, Borys holds serve, Borys breaks serve, Borys holds serve: $$$2$$$ breaks;  Borys breaks serve, Borys holds serve, Borys breaks serve, Borys holds serve, Borys breaks serve: $$$3$$$ breaks. 

Sample Inputs:
3
2 1
1 1
0 5

Sample Outputs:
4
0 1 2 3
2
0 2
2
2 3

Solution (Python):
if __name__ == '__main__':
    for _ in range(int(input())):
        (a, b) = map(int, input().split())
        l = abs(a - b) // 2
        r = a + b - l
        j = 1
        if (a + b) % 2 == 0:
            j = 2
        a = list(range(l, r + 1, j))
        print(len(a))
        print(' '.join(map(str, a)))

Solution (Python):
t = int(input())
r = []
for i in range(t):
    n = list(map(int, input().split()))
    a = n[0]
    b = n[1]
    if (a + b) % 2 != 0:
        c = (abs(a - b) - 1) // 2
        d = list(range(0, a + b + 1))
        p = d[c:]
        p.reverse()
        q = p[c:]
        q.reverse()
        m = len(q)
        r.append(m)
        r.append(' '.join(map(str, q)))
    elif (a + b) % 4 == 0:
        if a % 2 == 0 and b % 2 == 0:
            c = abs(a - b) // 4
            d = list(range(0, a + b + 1, 2))
            p = d[c:]
            p.reverse()
            q = p[c:]
            q.reverse()
            m = len(q)
            r.append(m)
            r.append(' '.join(map(str, q)))
        else:
            c = (abs(a - b) - 2) // 4
            d = list(range(1, a + b + 1, 2))
            p = d[c:]
            p.reverse()
            q = p[c:]
            q.reverse()
            m = len(q)
            r.append(m)
            r.append(' '.join(map(str, q)))
    elif a % 2 == 0 and b % 2 == 0:
        c = (abs(a - b) - 2) // 4
        d = list(range(1, a + b + 1, 2))
        p = d[c:]
        p.reverse()
        q = p[c:]
        q.reverse()
        m = len(q)
        r.append(m)
        r.append(' '.join(map(str, q)))
    else:
        c = abs(a - b) // 4
        d = list(range(0, a + b + 1, 2))
        p = d[c:]
        p.reverse()
        q = p[c:]
        q.reverse()
        m = len(q)
        r.append(m)
        r.append(' '.join(map(str, q)))
for i in range(len(r)):
    print(r[i])

Solution (Python):
""""""

def numberBreaks(a, b):
    (a, b) = (max(a, b), min(a, b))
    diff = a - b
    add_breaks = [diff // 2]
    breaks = []
    if diff % 2 == 1:
        add_breaks.append(add_breaks[0] + 1)
    for i in range(0, 2 * b + 1, 2):
        for a in add_breaks:
            breaks.append(i + a)
    breaks.sort()
    breaks = [str(a) for a in breaks]
    print(len(breaks))
    print(' '.join(breaks))
if __name__ == '__main__':
    num_cases = int(input())
    cases = []
    for i in range(num_cases):
        case = input().split()
        cases.append(case)
    for case in cases:
        numberBreaks(int(case[0]), int(case[1]))