Вопрос задан 09.02.2025 в 09:28. Предмет Информатика. Спрашивает Кандалова Кристина.

Ограничение по времени: 0.5 секунды

Ограничение по памяти: 256

мегабайт


Родители Лизы подключили пакет, содержащий N телевизионных каналов, пронумерованных числами от 1 до N.

Переключать каналы можно с помощью двух кнопок на пульте: «+» и «–».

Короткое нажатие на кнопку «+» приведёт к переключению на следующий канал, если номер текущего канала меньше N; если же номер текущего канала равен N, то телевизор продолжит показывать этот канал. Если кнопку «+» нажать и удерживать некоторое время, произойдёт переход на K каналов вперёд при условии, что номер текущего канала не превосходит N−K. В противном случае произойдёт переход на канал N.

Аналогично, короткое нажатие на кнопку «−» приведёт к переключению на предыдущий канал, если номер текущего канала больше 1; если же номер текущего канала равен 1, телевизор продолжит показывать этот канал. Если кнопку «−» нажать и удерживать некоторое время, то произойдёт переход на K каналов назад при условии, что номер текущего канала превышает K. В противном случае произойдёт переход на канал 1. Лиза включила телевизор и обнаружила, что он показывает канал P. Лиза знает, что очень скоро по каналу с номером U начнётся интересная передача. Определите, какое минимальное количество нажатий на кнопки пульта потребуется сделать Лизе, чтобы переключиться на канал U .

Формат входных данных

В первой строке содержится целое число N

(3≤N≤109) — количество телевизионных каналов.

Во второй строке содержится целое число K

(2≤K
В третьей строке содержится целое число P

(1≤P≤N) — номер канала, который показывает телевизор.

В четвёртой строке содержится целое число U

(1≤U≤N)—номер канала, на который желает переключиться Лиза.

Гарантируется, что P≠U.


Формат выходных данных

Выведите одно целое неотрицательное число —

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


Система оценки

Решения, правильно работающие при P
Решения, правильно работающие при N≤100, будут оцениваться в 48 баллов.


Замечание

В первом примере Лизе следует сначала выполнить одно короткое нажатие на кнопку «+» и переключиться с канала 3 на канал 4, а затем трижды осуществить переход вперёд на 5 каналов: сначала переключиться с 4 на 9, затем с 9 на 14 и, наконец, с 14на 19 канал.

Во втором примере Лиза может сначала переключиться коротким нажатием на кнопку «−» на канал 2, после чего выполнить три перехода вперёд на 5 каналов: с канала 2 на канал 7, затем на канал 12 и, наконец, на канал 17.

В третьем примере Лиза дважды выполнит короткое нажатие кнопки «−».

В четвёртом примере Лизе нужно сначала перейти назад, на канал 1, после чего трижды выполнить переход вперёд, последовательно на каналы 6, 11, 16.

ОТВЕТ ДАТЬ КОДОМ НА PYTHON!!!!!!!!!!!!!!!!!!!!!

Перейти к ответам

Ответы на вопрос

Отвечает Худоярова Полина.

Вот решение задачи на Python:

python
def min_button_presses(N, K, P, U): # Если цель выше текущего канала if U > P: forward_steps = (U - P) % K forward_holds = (U - P) // K forward_moves = forward_holds + (1 if forward_steps > 0 else 0) else: forward_moves = float('inf') # Если цель ниже текущего канала if U < P: backward_steps = (P - U) % K backward_holds = (P - U) // K backward_moves = backward_holds + (1 if backward_steps > 0 else 0) else: backward_moves = float('inf') return min(forward_moves, backward_moves)

# Ввод данных N = int(input("Введите N (количество каналов): ")) K = int(input("Введите K (шаг при удержании кнопки): ")) P = int(input("Введите P (текущий канал): ")) U = int(input("Введите U (целевой канал): "))

# Вычисление и вывод результата result = min_button_presses(N, K, P, U) print(result)

Объяснение решения:

  1. Проверка движения вперёд:
    Если целевой канал U больше текущего канала P, мы считаем, сколько коротких и длинных нажатий потребуется:

    • forward_steps — остаток, чтобы добраться до U.
    • forward_holds — сколько раз удерживать кнопку для больших шагов.
    • Итоговое количество действий: длинные удержания + одно короткое (если остаток больше 0).
  2. Проверка движения назад:
    Аналогично для движения назад, если U < P, считаем, сколько коротких и длинных нажатий нужно для достижения целевого канала.

  3. Минимум:
    Возвращаем минимальное количество нажатий между движением вперёд и назад.

Программа принимает на вход значения и выводит минимальное количество нажатий для достижения целевого канала.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос