Vika and Her Friends (Codeforces 1848A)
Tags: Math, games

Vika and her friends went shopping in a mall, which can be represented as a rectangular grid of rooms with sides of length $$$n$$$ and $$$m$$$. Each room has coordinates $$$(a, b)$$$, where $$$1 \le a \le n, 1 \le b \le m$$$. Thus we call a hall with coordinates $$$(c, d)$$$ a neighbouring for it if $$$|a - c| + |b - d| = 1$$$.Tired of empty fashion talks, Vika decided to sneak away unnoticed. But since she hasn't had a chance to visit one of the shops yet, she doesn't want to leave the mall. After a while, her friends noticed Vika's disappearance and started looking for her.Currently, Vika is in a room with coordinates $$$(x, y)$$$, and her $$$k$$$ friends are in rooms with coordinates $$$(x_1, y_1)$$$, $$$(x_2, y_2)$$$, ... $$$, (x_k, y_k)$$$, respectively. The coordinates can coincide. Note that all the girls must move to the neighbouring rooms.Every minute, first Vika moves to one of the adjacent to the side rooms of her choice, and then each friend (seeing Vika's choice) also chooses one of the adjacent rooms to move to.If at the end of the minute (that is, after all the girls have moved on to the neighbouring rooms) at least one friend is in the same room as Vika, she is caught and all the other friends are called.Tell us, can Vika run away from her annoying friends forever, or will she have to continue listening to empty fashion talks after some time?

Input: Each test consists of multiple test cases. The first line contains a single integer $$$t$$$ ($$$1 \le t \le 100$$$) — the number of test cases. The description of the test cases follows.The first line of each test case contains three integers $$$n$$$, $$$m$$$, $$$k$$$ ($$$1 \le n, m, k \le 100$$$) — the sizes of the mall and the number of Vika's friends.The second line of each test case contains a pair of integers $$$x$$$ and $$$y$$$ ($$$1 \le x \le n$$$, $$$1 \le y \le m$$$) — the coordinates of the room where Vika is.Each of the next $$$k$$$ lines of each test case contains a pair of integers $$$x_i$$$ and $$$y_i$$$ ($$$1 \le x_i \le n$$$, $$$1 \le y_i \le m$$$) — the coordinates of the room where the $$$i$$$-th friend is.

Output: For each test case, output "YES" if Vika can run away from her friends forever, otherwise output "NO".You can output each letter in any case (lowercase or uppercase). For example, the strings "yEs", "yes", "Yes", and "YES" will be accepted as a positive answer.

Note: In the first test case, the friend will never catch up with Vika, because Vika can always move to the room diagonally opposite to the one where the friend is.In the second test case, no matter where Vika goes, each of her friends can catch her after the first move.In the third test case, Vika and her friend will always be in different halls.

Sample Inputs:
6
2 2 1
1 1
1 2
2 2 2
1 1
2 2
2 2
1 2 1
1 1
1 2
5 5 4
3 3
1 1
1 5
5 1
5 5
2 2 2
1 1
2 1
1 2
3 4 1
1 2
3 3

Sample Outputs:
YES
NO
YES
NO
YES
YES

Solution (Python):
def solve():
    (n, m, k) = map(int, input().split())
    (x, y) = map(int, input().split())
    t = x + y & 1
    ans = True
    for _ in range(k):
        (x, y) = map(int, input().split())
        if x + y & 1 == t:
            ans = False
    return 'YES' if ans else 'NO'

def main():
    t = int(input())
    while t > 0:
        print(solve())
        t -= 1
if __name__ == '__main__':
    main()

Solution (Python):
for _ in range(int(input())):
    (n, m, K) = map(int, input().split())
    (x, y) = map(int, input().split())
    ok = False
    for i in range(K):
        (xx, yy) = map(int, input().split())
        if (x + y) % 2 == (xx + yy) % 2:
            ok = True
    if ok == False:
        print('Yes')
    else:
        print('No')

Solution (Python):
import sys
input = lambda : sys.stdin.buffer.readline()
mi = lambda : map(int, input().split())
li = lambda : list(mi())
out = []
for _ in range(int(input())):
    (n, m, k) = mi()
    (x, y) = mi()
    ok = True
    for _ in range(k):
        (xx, yy) = mi()
        if (xx + yy) % 2 == (x + y) % 2:
            ok = False
    if ok:
        out.append('YES')
    else:
        out.append('NO')
print('\n'.join(out))