Menu
CoddyTech

Book Allocation Problem

棚には本が決まった順序で並んでおり、pages[i] は本 i のページ数です。本を students 人の学生に分けます。各学生は隣り合う本を連続して、少なくとも1冊ずつ受け取り、すべての本はちょうど1人の学生に割り当てられます。学生の負荷は、受け取った本のページ数の合計です。

最も負荷の大きい学生の負荷として可能な最小値を返してください。学生の人数が本の冊数より多い場合は、-1 を返してください。

関数

allocateBooks(pages: integer-array, students: integer) → integer
pagesinteger-array
棚の並び順で各本のページ数
studentsinteger
本を共有する生徒の数
戻り値integer
可能な限り小さい最大負荷、または生徒数が本の数を上回る場合は -1

制約

  • 1 ≤ pages.length ≤ 5000
  • 1 ≤ pages[i] ≤ 105
  • 1 ≤ students ≤ 104
  • students > pages.length の場合は -1 を返します。

例

入力
pages = [25, 40, 15, 30, 50]students = 3
出力
65
説明
[25, 40]、[15, 30]、[50]を配ると、合計はそれぞれ65、45、50です。上限を64にすると失敗します。配分結果は[25]、[40, 15]、[30]、[50]となり、4人になります。
challenge icon

発展問題

切り上げた平均冊数に最も厚い本を足した数が、常に有効な上限であることを証明してください。薄い本が並ぶ棚では、この上限によって確認回数をどれだけ減らせますか?

コードをリセット
def allocateBooks(pages, students):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

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

期待される出力

65