Нашли ошибку?

Сколько страниц в день

СложнаяДописатьГлава 1

#бинарный поиск#поиск по ответу#O(log n)id: ga-reading-speed

Нужно прочитать книгу из глав по chapters[i] страниц за days дней. Каждый день вы читаете не больше s страниц и только одну главу: если глава закончилась раньше, новую в тот же день не начинаете. Допишите days_needed и min_daily_pages: вторая функция возвращает минимальное s, при котором вы успеваете. Пропуски помечены # TODO.

Пример

min_daily_pages([30, 11, 23, 4, 20], 6)  # 23
# при s = 23: 2 + 1 + 1 + 1 + 1 = 6 дней; при s = 22 уже 7 дней
days_needed([30, 11, 23, 4, 20], 23)     # 6

Ограничения

Решение

def days_needed(chapters: list[int], speed: int) -> int:
    """Сколько дней уйдёт на книгу при скорости speed страниц в день."""
    # TODO: сложите дни по всем главам (каждая глава читается отдельно)
    ...


def min_daily_pages(chapters: list[int], days: int) -> int:
    """Минимальная скорость (страниц в день), чтобы успеть за days дней."""
    low, high = 1, max(chapters)  # при скорости max(chapters) — ровно день на главу
    while low < high:
        mid = (low + high) // 2
        if ...:  # TODO: успеваем ли со скоростью mid?
            high = mid
        else:
            low = mid + 1
    return low

Можно решать и в своём редакторе: «Скопировать с тестами» и запустите python3 reading_speed.py — тесты те же, результат покажет ✓ / ✗ и итог.