117602024-11-09 15:24:37balintStefan sakkmesteri ambícióipython3Futási hiba 0/10018ms3728 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 < 8:
            if x > 0 and board[y + 1][x - 1] == "P":
                print("YES")
                continue
            elif x < 8 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 < 8 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 < 8 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 < 8 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 < 8 and board[y + 1][x + 2] == "N":
                print("YES")
                continue
        print("NO")


main()
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva16ms3380 KiB
subtask20/11
2Futási hiba17ms3484 KiB
3Futási hiba17ms3728 KiB
4Futási hiba17ms3572 KiB
5Futási hiba17ms3388 KiB
subtask30/12
6Futási hiba17ms3508 KiB
7Futási hiba17ms3328 KiB
8Futási hiba17ms3400 KiB
9Futási hiba17ms3384 KiB
subtask40/15
10Futási hiba17ms3384 KiB
11Elfogadva17ms3384 KiB
12Futási hiba17ms3480 KiB
13Futási hiba18ms3384 KiB
subtask50/16
14Elfogadva17ms3376 KiB
15Elfogadva17ms3384 KiB
16Futási hiba17ms3384 KiB
17Futási hiba17ms3388 KiB
subtask60/46
18Elfogadva17ms3376 KiB
19Futási hiba17ms3384 KiB
20Futási hiba17ms3396 KiB
21Futási hiba18ms3380 KiB
22Futási hiba17ms3384 KiB
23Futási hiba17ms3584 KiB
24Futási hiba17ms3580 KiB
25Futási hiba17ms3384 KiB
26Futási hiba17ms3568 KiB