Мини-урок · перед практикой

Улитка

Последний дневной подъём рассматриваем отдельно: после достижения вершины ночного спуска нет.

Как к ней подойти

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

Коротко о теме

Операции // и % помогают разделить число на целую часть и остаток. Для дробных вычислений следите за точностью и порядком действий: одно и то же число может требовать разного способа обработки.

Ключевая идея · Целочисленная формула

За полные сутки до последнего дня улитка прибавляет a−b. Нужно накопить не меньше h−a метров, после чего последний подъём завершит путь. Деление с округлением вверх вычисляется только целыми числами.

Проверьте перед запуском

  • Нельзя делить всю высоту h на a−b: в последний день спуска нет.
  • Если a≥h, ответ сразу 1.
  • Деление с округлением вверх лучше выполнять целыми числами, без погрешности float.

Сравните свой подход

Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.

Ваше принятое решение

Рекомендуемое решение: Целочисленная формула

За полные сутки до последнего дня улитка прибавляет a−b. Нужно накопить не меньше h−a метров, после чего последний подъём завершит путь. Деление с округлением вверх вычисляется только целыми числами.

h = int(input())
a = int(input())
b = int(input())
if h <= a:
    print(1)
else:
    gain = a - b
    remaining = h - a
    print((remaining + gain - 1) // gain + 1)

Время: O(1) арифметических операций. Память: O(1) числовых переменных.

Другой способ: Моделирование суток

Пока текущий дневной подъём не достигает вершины, добавляем чистый прирост за сутки и переходим к следующему дню. Условие a>b гарантирует завершение, но для большой высоты цикл может быть медленным.

h = int(input())
a = int(input())
b = int(input())
height = 0
day = 1
while height + a < h:
    height += a - b
    day += 1
print(day)

Время: O(D), где D — искомое число дней. Память: O(1) числовых переменных.