117622024-11-09 15:28:33balintStefan sakkmesteri ambícióipython3Accepted 100/10025ms3732 KiB
from sys import stdin


def main():
    for _ in range(int(input())):
        board = stdin.read(9 * 8).splitlines()
        # search black queen position
        brk = False
        for y in range(8):
            for x in range(8):
                if board[y][x] == "q":
                    brk = True
                    break
            if brk:
                break

        board_checked = False
        # left
        i = x - 1
        while i >= 0:
            if board[y][i] != ".":
                if board[y][i] in [
                    "Q",
                    "R",
                ]:  # can only be hit from left side if its a rook or queen
                    print("YES")
                    board_checked = True
                break  # continue bc piece blocks attacks from this direction
            i -= 1
        if board_checked:
            continue
        # right
        i = x + 1
        while i < 8:
            if board[y][i] != ".":
                if board[y][i] in [
                    "Q",
                    "R",
                ]:  # can only be hit from right side if its a rook or queen
                    print("YES")
                    board_checked = True
                break  # continue bc piece blocks attacks from this direction
            i += 1
        if board_checked:
            continue
        # up
        i = y - 1
        while i >= 0:
            if board[i][x] != ".":
                if board[i][x] in [
                    "Q",
                    "R",
                ]:  # can only be hit from up if its a rook or queen
                    print("YES")
                    board_checked = True
                break  # continue bc piece blocks attacks from this direction
            i -= 1
        if board_checked:
            continue
        # down
        i = y + 1
        while i < 8:
            if board[i][x] != ".":
                if board[i][x] in [
                    "Q",
                    "R",
                ]:  # can only be hit from down if its a rook or queen
                    print("YES")
                    board_checked = True
                break  # continue bc piece blocks attacks from this direction
            i += 1
        if board_checked:
            continue
        # left up diagonal
        i, j = y - 1, x - 1
        while i >= 0 and j >= 0:
            if board[i][j] != ".":
                if board[i][j] in [
                    "Q",
                    "B",
                ]:  # can only be hit drom diagonal if its queen or bishop
                    print("YES")
                    board_checked = True
                break  # continue bc piece blocks attacks from this direction
            i -= 1
            j -= 1
        if board_checked:
            continue
        # right up diagonal
        i, j = y + 1, x - 1
        while i < 8 and j >= 0:
            if board[i][j] != ".":
                if board[i][j] in ["Q", "B"]:
                    print("YES")
                    board_checked = True
                break
            i += 1
            j -= 1
        if board_checked:
            continue
        # left down diagonal
        i, j = y - 1, x + 1
        while i >= 0 and j < 8:
            if board[i][j] != ".":
                if board[i][j] in ["Q", "B"]:
                    print("YES")
                    board_checked = True
                break
            i -= 1
            j += 1
        if board_checked:
            continue
        # right down diagonal
        i, j = y + 1, x + 1
        while i < 8 and j < 8:
            if board[i][j] != ".":
                if board[i][j] in ["Q", "B"]:
                    print("YES")
                    board_checked = True
                break
            i += 1
            j += 1
        if board_checked:
            continue
        # weird pawn poses
        if y < 7:
            if x > 0 and board[y + 1][x - 1] == "P":
                print("YES")
                continue
            elif x < 7 and board[y + 1][x + 1] == "P":
                print("YES")
                continue
            # no double step pawn in task

        # weird knight poses
        # up
        if y > 1:
            if x > 0 and board[y - 2][x - 1] == "N":
                print("YES")
                continue
            elif x < 7 and board[y - 2][x + 1] == "N":
                print("YES")
                continue
        # down
        if y < 6:
            if x > 0 and board[y + 2][x - 1] == "N":
                print("YES")
                continue
            elif x < 7 and board[y + 2][x + 1] == "N":
                print("YES")
                continue

        # left
        if x > 1:
            if y > 0 and board[y - 1][x - 2] == "N":
                print("YES")
                continue
            elif y < 7 and board[y + 1][x - 2] == "N":
                print("YES")
                continue

        # right
        if x < 6:
            if y > 0 and board[y - 1][x + 2] == "N":
                print("YES")
                continue
            elif y < 7 and board[y + 1][x + 2] == "N":
                print("YES")
                continue
        print("NO")


main()
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted16ms3384 KiB
subtask211/11
2Accepted17ms3380 KiB
3Accepted17ms3520 KiB
4Accepted18ms3372 KiB
5Accepted25ms3488 KiB
subtask312/12
6Accepted17ms3384 KiB
7Accepted17ms3384 KiB
8Accepted18ms3412 KiB
9Accepted24ms3520 KiB
subtask415/15
10Accepted17ms3576 KiB
11Accepted17ms3384 KiB
12Accepted17ms3564 KiB
13Accepted24ms3384 KiB
subtask516/16
14Accepted17ms3732 KiB
15Accepted17ms3384 KiB
16Accepted17ms3384 KiB
17Accepted23ms3632 KiB
subtask646/46
18Accepted17ms3540 KiB
19Accepted17ms3520 KiB
20Accepted17ms3336 KiB
21Accepted23ms3432 KiB
22Accepted24ms3384 KiB
23Accepted24ms3552 KiB
24Accepted23ms3400 KiB
25Accepted21ms3540 KiB
26Accepted23ms3384 KiB