Каосар і Сітка#12331

Каосар і Сітка (Розбір)

Автор проблеми: Ал Каосар Хусейн

Підготовлено: Ал Каосар Хусейн

Рішення:

Ключові спостереження:

градусів обертання переставляє координати та змінює знаки, це означає, що якщо ви зараз на , то обертання на градусів проти годинникової стрілки буде (-y,x), знову обертання на градусів буде (-x,-y), тому якщо ми почнемо з

(x,y) \rightarrow (-y,x) \rightarrow (-x,-y) \rightarrow (y,-x) \rightarrow (x,y)

ці чотири досяжні позиції є чотирма "кутами" прямокутника, вирівняного по осях, зі сторонами та .

Поліція рухається в метричній системі Манхеттена. Манхеттенська відстань від початку до будь-якого кута є

d=|x|+|y|. Обертання змінює, до якого кута поліція повинна прагнути, і гравець може

змусити поліцію витратити додаткові ходи, коли гравець розумно чергує кути.

Тепер, якщо ви на координаті |x|=|y|=1, то якщо у вас є обертів, то максимальний час, який ви можете вижити, становить 2(n+1)

ходів поліції. Подивіться на малюнок тут, зелений — це оптимальний шлях для поліції, а фіолетові точки — це місця, де

ви можете зміститися, а червоний шлях не є оптимальним шляхом.

Якщо ви зараз на |x|=|y|>1, то якщо ви виберете оптимальний шлях для зміщення, ви можете вижити максимум

|x|(2n+1) + |y| ходів поліції.

Якщо ви на будь-якій координаті , ви можете вижити максимум 2n(max(|x|,|y|)-1)+|x|+|y| ходів поліції.

for _ in range(int(input())):
    n, k = map(int, input().split())
    x, y = map(int, input().split())
    res = "Ні"
    if abs(x) == abs(y) and abs(x) == 1:
        if 2 * (n + 1) <= k:
            res = "Так"
    elif abs(x) == abs(y):
        if abs(x) * (2 * n + 1) + abs(y) <= k:
            res = "Так"
    else:
        if 2 * n * (max(abs(x), abs(y)) - 1) + abs(x) + abs(y) <= k:
            res = "Так"
    print(res)