Для решения этой задачи необходимо понимать, как слоны могут угрожать клеткам на шахматной доске. Слоны движутся по диагоналям, и начиная от каждой из четырёх угловых клеток, они могут контролировать определённые клетки.
Определение угловых клеток: На шахматной доске углы располагаются в следующих позициях:
- Верхний левый угол: (1, 1)
- Верхний правый угол: (1, m)
- Нижний левый угол: (n, 1)
- Нижний правый угол: (n, m)
Определение клеток под боем: Слон контролирует все клетки по диагоналям. Существует две диагонали:
- Слева направо (скажем, ): ваши диагонали, проходящие через (1,1), ведут к клеткам на позициях вида (x, y) при x + y = constant.
- Справа налево (say, /): ваши диагонали, проходящие через (1,m), ведут к клеткам на позициях вида (x, y) при x - y = constant.
Объединение угроз: Мы можем составить наборы клеток, которые находятся под боем с каждой из угловых клеток, и затем объединим эти клетки, исключая дубликаты.
Теперь давайте выработаем алгоритм:
- Сначала создаем пустое множество для клеток, находящихся под боем.
- Затем, для каждого углового слона, добавим все позиции всех клеток, которые он может атаковать.
Пример алгоритма:
def cells_under_threat(n, m):
threatened_cells = set()
# Угловые позиции
corner_positions = [(1, 1), (1, m), (n, 1), (n, m)]
for x, y in corner_positions:
for i in range(1, n + 1):
for j in range(1, m + 1):
# Проверяем по диагоналям
if abs(x - i) == abs(y - j):
threatened_cells.add((i, j))
# Удаляем угловые клетки, так как они не считаются "под боем"
threatened_cells.discard((1, 1))
threatened_cells.discard((1, m))
threatened_cells.discard((n, 1))
threatened_cells.discard((n, m))
return len(threatened_cells)
# Чтение входных данных
n = int(input())
m = int(input())
# Печать результата
print(cells_under_threat(n, m))
Таким образом, количество клеток, находящихся «под боем», будет равно количеству уникальных клеток, добавленных в множество.