Ферзь в шахматах обладает уникальной возможностью угрожать другим фигуркам в пределах своего диапазона движений: он может двигаться по горизонтали, вертикали и диагоналям. Давайте рассмотрим, как именно это функционирует на шахматной доске размера N×N.
Количество угрожаемых клеток по горизонтали и вертикали:
- Ферзь угрожает всем клеткам в своем ряду и колонне. В ряду (горизонтали) находится N клеток, из которых одна занята ферзем (где он стоит), а значит, угрожаемых клеток по горизонтали: \(N - 1\).
- В колонне (вертикали) также находятся N клеток, и, снова исключая клетку, где стоит ферзь, угрожаемых клеток по вертикали: \(N - 1\).
Количество угрожаемых клеток по диагоналям:
- На доске есть две диагонали, по которым может двигаться ферзь:
- По диагонали, где клетка (x, y) находится на одной из диагоналей, угрожаемые клетки можно посчитать, учитывая, что ферзь может двигаться как в направлении увеличения, так и уменьшения координат (x и y).
- Максимальное количество клеток, которые он угрожает на диагонали, определяется минимальным расстоянием до границ доски с обеих сторон. Для каждой из диагоналей можно использовать следующий алгоритм.
- На доске есть две диагонали, по которым может двигаться ферзь:
Объединив всё это, формула для количества клеток под угрозой будет выглядеть так:
\[ \text{Общее количество угрожаемых клеток} = (N - 1) + (N - 1) + \text{Угрозы по диагоналям} \]
Итак, посчитаем угрожаемые клетки по диагоналям:
- По диагонали (x - d, y - d): Угрозы равны минимальному значению из (x, y) — это клетки, находящиеся влево и вверх.
- По диагонали (x + d, y + d): Угрозы равны минимальному значению из (N - x - 1, N - y - 1) — это клетки, находящиеся вправо и вниз.
- Аналогичным образом считаем для другой диагонали.
В конечном итоге, максимальное количество угрожаемых клеток (без учета той, на которой стоит ферзь) будет равным:
\[ \text{Максимум} = (N - 1) + (N - 1) + \text{Угрозы по диагоналям} \]
Таким образом, обобщив, получаем, что максимальное количество клеток, находящихся под боем ферзя, рассчитывается так:
def max_attacked_cells(N):
if N < 1:
return 0
horizontal_vertical = (N - 1) * 2 # горизонтальные и вертикальные
diagonal = (N - 1) * 2 # диагонали
return horizontal_vertical + diagonal
N = int(input())
print(max_attacked_cells(N))
Этот код вычисляет общее количество клеток под угрозой, не считая той, на которой стоит ферзь. Если у вас возникнут вопросы или потребуются разъяснения по коду, не стесняйтесь спрашивать!