第二题直接搜索79%

import sys


def dfs(board, x, y, last_dir, count, cls):
    if count == 5:
        return True
    if not last_dir:
        for each_dir in DIR:
            temp_x = x + each_dir[0]
            temp_y = y + each_dir[1]
            if 0 <= temp_x < N and 0 <= temp_y < N and board[temp_x][temp_y] == cls:
                rvt = dfs(board, temp_x, temp_y, each_dir, count + 1, cls)
                if rvt:
                    return True
    else:
        temp_x = x + last_dir[0]
        temp_y = y + last_dir[1]
        if 0 <= temp_x < N and 0 <= temp_y < N and board[temp_x][temp_y] == cls:
            rvt = dfs(board, temp_x, temp_y, last_dir, count + 1, cls)
            if rvt:
                return True
    return False


if __name__ == '__main__':
    N = 15
    DIR = [[1, 0], [0, 1], [-1, 1], [1, 1]]

    chess_board = []
    for i in range(N):
        temp = sys.stdin.readline().strip()
        chess_board.append(temp)

    count_white, count_black = 0, 0
    for i in range(N):
        count_white += chess_board[i].count('W')
        count_black += chess_board[i].count('B')

    if count_white > count_black or count_black > count_white + 1:
        print("invalid board")
    else:
        rvt_w, rvt_b = False, False
        for i in range(N):
            if rvt_w:
                break
            for j in range(N):
                if chess_board[i][j] == 'W':
                    rvt_w = dfs(chess_board, i, j, None, 1, 'W')
                    if rvt_w:
                        break
        for i in range(N):
            if rvt_b:
                break
            for j in range(N):
                if chess_board[i][j] == 'B':
                    rvt_b = dfs(chess_board, i, j, None, 1, 'B')
                    if rvt_b:
                        break

        if not rvt_w and not rvt_b:
            if count_white + count_black == N * N:
                print("draw")
            else:
                print("not finished")
        elif rvt_w:
            if count_white == count_white:
                print("white win")
            else:
                print("invalid board")
        elif rvt_b:
            if count_black > count_white:
                print("black win")
            else:
                print("invalid board")