Fortune Telling (Codeforces 1634B)
Tags: Math, bitmasks

Haha, try to solve this, SelectorUnlimited!— antontrygubO_oYour friends Alice and Bob practice fortune telling.Fortune telling is performed as follows. There is a well-known array $$$a$$$ of $$$n$$$ non-negative integers indexed from $$$1$$$ to $$$n$$$. The tellee starts with some non-negative number $$$d$$$ and performs one of the two operations for each $$$i = 1, 2, \ldots, n$$$, in the increasing order of $$$i$$$. The possible operations are: replace their current number $$$d$$$ with $$$d + a_i$$$ replace their current number $$$d$$$ with $$$d \oplus a_i$$$ (hereinafter $$$\oplus$$$ denotes the bitwise XOR operation)Notice that the chosen operation may be different for different $$$i$$$ and for different tellees.One time, Alice decided to start with $$$d = x$$$ and Bob started with $$$d = x + 3$$$. Each of them performed fortune telling and got a particular number in the end. Notice that the friends chose operations independently of each other, that is, they could apply different operations for the same $$$i$$$.You learnt that either Alice or Bob ended up with number $$$y$$$ in the end, but you don't know whose of the two it was. Given the numbers Alice and Bob started with and $$$y$$$, find out who (Alice or Bob) could get the number $$$y$$$ after performing the operations. It is guaranteed that on the jury tests, exactly one of your friends could have actually gotten that number.HacksYou cannot make hacks in this problem.

Input: On the first line of the input, you are given one number $$$t$$$ ($$$1 \le t \le 10^4$$$) — the number of test cases. The following $$$2 \cdot t$$$ lines contain test cases.The first line of each test case contains three numbers $$$n$$$, $$$x$$$, $$$y$$$ ($$$1 \le n \le 10^5$$$, $$$0 \le x \le 10^9$$$, $$$0 \le y \le 10^{15}$$$) — the length of array $$$a$$$, Alice's initial number (Bob's initial number is therefore $$$x+3$$$), and the number that one of the two friends got in the end.The second line of each test case contains $$$n$$$ numbers — the array $$$a$$$ ($$$0 \le a_i \le 10^9$$$).It is guaranteed that the sum of $$$n$$$ over all test cases does not exceed $$$10^5$$$.

Output: For each test case, print the name of the friend who could get the number $$$y$$$: "Alice" or "Bob".

Note: In the first test case, Alice could get $$$9$$$ using the following operations: $$$7 + 2 = 9$$$.In the second test case, Alice could get $$$2$$$ using this operations: $$$(0 + 1) \oplus 3 = 2$$$.In the third test case, Bob started with $$$x+3 = 0+3=3$$$ and could get $$$1$$$ this way: $$$(((3 + 1) + 2) \oplus 3) \oplus 4 = 1$$$.

Sample Inputs:
4
1 7 9
2
2 0 2
1 3
4 0 1
1 2 3 4
2 1000000000 3000000000
1000000000 1000000000

Sample Outputs:
Alice
Alice
Bob
Alice

Solution (Python):
import io
import os
import sys

def main():
    input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline
    t = int(input().decode())
    for _ in range(t):
        (n, x, y) = map(int, input().decode().split())
        v = tuple(map(int, input().decode().split()))
        p = sum(v)
        if x % 2 == y % 2 and p % 2 == 0 or (x % 2 != y % 2 and p % 2):
            sys.stdout.write('Alice\n')
        else:
            sys.stdout.write('Bob\n')
if __name__ == '__main__':
    main()

Solution (Python):
import sys

def getline() -> str:
    return sys.stdin.readline().strip()

def solve():
    (n, x, y) = list(map(int, getline().split()))
    a = list(map(int, getline().split()))
    odds = 0
    for e in a:
        if e % 2 == 1:
            odds += 1
    if x % 2 == y % 2:
        if odds % 2 == 0:
            print('Alice')
            return
        else:
            print('Bob')
            return
    elif odds % 2 == 0:
        print('Bob')
        return
    else:
        print('Alice')
        return
if __name__ == '__main__':
    t = int(getline())
    for _ in range(t):
        solve()

Solution (Python):
from sys import stdin

def solve(n, x, y, s):
    nodd = len(list(filter(lambda x: x % 2 == 1, s)))
    return 'Alice' if (nodd + x + y) % 2 == 0 else 'Bob'
if __name__ == '__main__':
    out = []
    t = int(stdin.readline())
    for _ in range(t):
        (n, x, y) = map(int, stdin.readline().strip().split(' '))
        s = list(map(int, stdin.readline().strip().split(' ')))
        out.append(solve(n, x, y, s))
    print('\n'.join(map(str, out)))