Menu
CoddyTech

Book Allocation Problem

Na półce znajdują się książki w ustalonej kolejności, a pages[i] to liczba stron w książce i. Podziel książki między students uczniów: każdy uczeń otrzymuje jeden nieprzerwany ciąg sąsiadujących książek, co najmniej jedną książkę, a każda książka trafia dokładnie do jednego ucznia. Obciążenie ucznia to łączna liczba stron otrzymanych przez niego książek.

Zwróć najmniejszą możliwą wartość największego obciążenia. Jeśli uczniów jest więcej niż książek, zwróć -1.

Funkcja

allocateBooks(pages: integer-array, students: integer) → integer
pagesinteger-array
liczba stron każdej książki, w kolejności na półce
studentsinteger
liczba uczniów, którzy dzielą się książkami
Zwracainteger
najmniejszy możliwy największy ciężar lub -1, gdy liczba uczniów jest większa niż liczba książek

Ograniczenia

  • 1 ≤ pages.length ≤ 5000
  • 1 ≤ pages[i] ≤ 105
  • 1 ≤ students ≤ 104
  • Zwróć -1, gdy students > pages.length.

Przykłady

Wejście
pages = [25, 40, 15, 30, 50]students = 3
Wyjście
65
Wyjaśnienie
Rozdaj [25, 40], [15, 30] i [50]: obciążenia wynoszą 65, 45 i 50. Limit 64 nie wystarcza: podział daje [25], [40, 15], [30], [50], czyli czterech uczniów.
challenge icon

Pytanie dodatkowe

Udowodnij, że średni udział, zaokrąglony w górę, plus najgrubsza książka zawsze stanowi działającą granicę. Ile sprawdzeń pozwala zaoszczędzić ta górna granica na półce z cienkimi książkami?

Zresetuj kod
def allocateBooks(pages, students):
    # Wpisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

65