Автор проблеми: Ал Каосар Хусейн
Підготовлено: Ал Каосар Хусейн
Рішення:
Ключові спостереження:
градусів обертання переставляє координати та змінює знаки, це означає, що якщо ви зараз на , то обертання на градусів проти годинникової стрілки буде (-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)