Улитка
Вы решили задачу. Теперь можно сравнить подходы.
Последний дневной подъём рассматриваем отдельно: после достижения вершины ночного спуска нет.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Целочисленная формула
За полные сутки до последнего дня улитка прибавляет 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) числовых переменных.
На что обратить внимание
- Нельзя делить всю высоту h на a−b: в последний день спуска нет.
- Если a≥h, ответ сразу 1.
- Деление с округлением вверх лучше выполнять целыми числами, без погрешности float.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.