Kaosar və Şəbəkə#12331

Kaosar və Şəbəkə (Həll təhlili)

Problemin Müəllifi: Al Kaosar Hüseyn

Təqdim edən: Al Kaosar Hüseyn

Həll:

Əsas müşahidələr:

dərəcə döndürmə koordinatları dəyişdirir və işarələri tərsinə çevirir, yəni əgər siz hazırda -dəsinizsə, onda əks saat yönündə dərəcə döndürmə (-y,x) olacaq, yenidən dərəcə döndürmə (-x,-y) olacaq, beləliklə, əgər biz -dən başlayırıq:

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

bu dörd əldə edilə bilən mövqe, və tərəfləri olan bir ox-alınmış düzbucaqlı "kənarlarıdır".

Polis Manhattan metrikası ilə hərəkət edir. Mənşədən hər hansı bir küncə olan Manhattan məsafəsi

d=|x|+|y|-dir. Dönmə polis tərəfindən hədəflənəcək küncü dəyişdirir və oyunçu polisə əlavə hərəkətlər sərf etdirmək üçün küncləri ağıllı şəkildə dəyişdirə bilər.

İndi əgər siz |x|=|y|=1 koordinatındasınızsa, onda əgər döndürməniz varsa, maksimum 2(n+1) polis hərəkətində sağ qala bilərsiniz. Burada yaşıl xətt polis üçün optimal yoldur və bənövşəyi nöqtələr sizin teleport edə biləcəyiniz yerdir, qırmızı yol isə optimal yol deyil.

Və əgər siz indi |x|=|y|>1-dirsə, onda optimal şəkildə teleport etsəniz, maksimum |x|(2n+1) + |y| polis hərəkətində sağ qala bilərsiniz.

Və əgər siz hər hansı -dəsinizsə, maksimum 2n(max(|x|,|y|)-1)+|x|+|y| polis hərəkətində sağ qala bilərsiniz.

for _ in range(int(input())):
    n, k = map(int, input().split())
    x, y = map(int, input().split())
    res = "Xeyr"
    if abs(x) == abs(y) and abs(x) == 1:
        if 2 * (n + 1) <= k:
            res = "Bəli"
    elif abs(x) == abs(y):
        if abs(x) * (2 * n + 1) + abs(y) <= k:
            res = "Bəli"
    else:
        if 2 * n * (max(abs(x), abs(y)) - 1) + abs(x) + abs(y) <= k:
            res = "Bəli"
    print(res)