Menu
CoddyTech

Book Allocation Problem

На полке книги расположены в фиксированном порядке, а pages[i] — количество страниц в книге i. Распределите книги между students учениками: каждый ученик получает один непрерывный ряд соседних книг, не менее одной книги, и каждая книга достаётся ровно одному ученику. Нагрузка ученика — это общее количество страниц в полученных им книгах.

Верните наименьшее возможное значение наибольшей нагрузки. Если учеников больше, чем книг, верните -1.

Функция

allocateBooks(pages: integer-array, students: integer) → integer
pagesinteger-array
количество страниц каждой книги в порядке расположения на полке
studentsinteger
количество учеников, которые делят книги
Возвращаетinteger
минимально возможная максимальная нагрузка или -1, если учеников больше, чем книг

Ограничения

  • 1 ≤ pages.length ≤ 5000
  • 1 ≤ pages[i] ≤ 105
  • 1 ≤ students ≤ 104
  • Верни -1, если students > pages.length.

Примеры

Ввод
pages = [25, 40, 15, 30, 50]students = 3
Вывод
65
Пояснение
Раздайте [25, 40], [15, 30] и [50]: нагрузки составляют 65, 45 и 50. Ограничение в 64 не подходит: при раздаче получаются [25], [40, 15], [30], [50] — четыре ученика.
challenge icon

Дополнительный вопрос

Докажите, что средняя доля, округлённая вверх, плюс самая толстая книга всегда является рабочей верхней границей. Сколько проверок позволяет сэкономить эта верхняя граница на полке с тонкими книгами?

Сбросить код
def allocateBooks(pages, students):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргументы

pages = [25, 40, 15, 30, 50]
students = 3

Ожидаемый вывод

65