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