Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Решение задачи на Python

Антон Иванов Ученик (82), на голосовании 2 недели назад
Шахматная ладья находится в левом верхнем углу прямоугольного поля, разбитого на клетки, размером n × m. n обозначает число строк, m — число столбцов. Она хочет попасть в правую нижнюю клетку этого поля кратчайшим путем. Ладья может передвигаться либо вправо, либо вниз на любое количество клеток. Ладья обязана посетить заданную клетку с координатами (x, y), где x — номер строки этой клетки, а y — номер её столбца.

Требуется найти количество способов построить путь ладьи из левого верхнего угла в правый нижний, которые проходят через обязательную клетку с заданными координатами.

Формат ввода
В первой строке находятся два числа через пробел n — число строк и m — число столбцов прямоугольного поля. 2 ≤ n, m ≤ 25. Во второй строке через пробел находятся координаты (x, y) обязательной для посещения клетки. 1 ≤ x ≤ n, 1 ≤ y ≤ m. Координаты x и y не совпадают с координатами левой верхней и правой нижней клеток.

Формат вывода
Вывести одно число — количество кратчайших путей ладьи из верхней левой в правую нижнюю клетку, проходящих через заданную клетку.
Голосование за лучший ответ
Сергей Меньшиков Мыслитель (9895) 1 месяц назад
 import math 

def count_paths(n, m, x, y):
# Функция для вычисления количества путей
def combinations(a, b):
return math.comb(a, b)

# Путь от (1, 1) до (x, y)
steps_to_xy = (x - 1) + (y - 1) # Общее количество шагов
right_steps_to_xy = y - 1 # Количество шагов вправо
paths_to_xy = combinations(steps_to_xy, right_steps_to_xy)

# Путь от (x, y) до (n, m)
steps_from_xy_to_end = (n - x) + (m - y) # Общее количество шагов
right_steps_from_xy_to_end = m - y # Количество шагов вправо
paths_from_xy_to_end = combinations(steps_from_xy_to_end, right_steps_from_xy_to_end)

# Общее количество путей через клетку (x, y)
total_paths = paths_to_xy * paths_from_xy_to_end
return total_paths

# Чтение входных данных
n, m = map(int, input().split())
x, y = map(int, input().split())

# Вычисление и вывод результата
result = count_paths(n, m, x, y)
print(result)
Чат гопоты родил вот это
Антон Иванов Ученик (82) 1 месяц назад
n, m = map(int, input().split())
x, y = map(int, input().split())
if ((x == 1 and y == 1) or (x == n and y == m)):
print(1)
elif (x == 1 and y != 1) or (x != n and y == m):
print(2)
else:
print(6)
Написал такой код вроде работает
Похожие вопросы