Allocate Minimum Pages using Binary Search on Answer
📖 Scenario: Imagine you are a librarian who needs to allocate books to students. Each student must get consecutive books, and you want to minimize the maximum number of pages assigned to any student.This is a common problem in resource allocation where you want to balance the load fairly.
🎯 Goal: You will write a program to find the minimum possible maximum number of pages that can be assigned to a student using binary search on the answer.
📋 What You'll Learn
Create a list called books with the exact values [100, 200, 300, 400]
Create a variable called students and set it to 2
Write a function called is_possible that takes mid and checks if allocation is possible with max pages mid
Use binary search between low and high to find the minimum max pages
Print the final minimum maximum pages
💡 Why This Matters
🌍 Real World
This technique is useful in scheduling tasks, dividing workloads, and resource allocation where fairness and limits matter.
💼 Career
Binary search on answer is a common pattern in coding interviews and software engineering roles involving optimization.
Progress0 / 4 steps
1
Create the list of books
Create a list called books with these exact values: [100, 200, 300, 400]
DSA Python
Hint
Use square brackets and separate numbers by commas.
2
Set the number of students
Create a variable called students and set it to 2
DSA Python
Hint
Just assign the number 2 to the variable students.
3
Write the function to check allocation possibility
Write a function called is_possible that takes a parameter mid and returns True if it is possible to allocate books to students such that no student reads more than mid pages. Use variables current_sum and count_students inside the function.
DSA Python
Hint
Check if adding a book exceeds mid. If yes, allocate to next student.
4
Find and print the minimum maximum pages
Use binary search with variables low set to the maximum pages in books and high set to the sum of books. Use a while loop to find the minimum maximum pages. Print the final answer using print(min_pages).
DSA Python
Hint
Start low at the largest book pages and high at total pages. Narrow down using binary search.
Practice
(1/5)
1. What is the main goal of the Allocate Minimum Pages problem when using binary search on the answer?
easy
A. To find the minimum maximum number of pages assigned to a student
B. To maximize the total pages assigned to all students
C. To find the maximum number of students that can be assigned books
D. To minimize the total number of books assigned
Solution
Step 1: Understand the problem goal
The problem aims to allocate books to students such that the maximum pages assigned to any student is minimized.
Step 2: Clarify the binary search target
Binary search is used on the range of possible maximum pages to find the smallest feasible maximum.
Final Answer:
To find the minimum maximum number of pages assigned to a student -> Option A
Quick Check:
Minimum max pages = goal [OK]
Hint: Focus on minimizing the largest pages any student gets [OK]
Common Mistakes:
Confusing total pages with maximum pages per student
Trying to maximize pages instead of minimizing
Ignoring the binary search on answer approach
2. Which of the following is the correct way to initialize the binary search boundaries for the Allocate Minimum Pages problem given an array pages of book pages?
easy
A. low = sum(pages), high = max(pages)
B. low = max(pages), high = sum(pages)
C. low = 0, high = max(pages)
D. low = 0, high = sum(pages) * 2
Solution
Step 1: Determine minimum and maximum possible max pages
The minimum max pages is at least the largest single book (max of pages), and the maximum is the sum of all pages if one student gets all books.
Step 2: Set binary search boundaries accordingly
Set low = max(pages) and high = sum(pages) to cover all feasible max page values.
Final Answer:
low = max(pages), high = sum(pages) -> Option B
Quick Check:
Boundaries = max and sum [OK]
Hint: Low starts at max single book, high at total pages sum [OK]
Common Mistakes:
Setting low to 0 which is invalid
Swapping low and high values
Using arbitrary high value instead of sum
3. What will be the output of the following code snippet?
def is_possible(pages, students, mid):
count = 1
total = 0
for p in pages:
if total + p > mid:
count += 1
total = p
if count > students:
return False
else:
total += p
return True
pages = [10, 20, 30, 40]
students = 2
mid = 50
print(is_possible(pages, students, mid))
Hint: Check if books fit in mid pages per student [OK]
Common Mistakes:
Miscounting students needed
Adding pages incorrectly
Confusing > and >= in condition
4. Identify the bug in the following code snippet for the Allocate Minimum Pages problem:
def allocate_pages(pages, students):
low = max(pages)
high = sum(pages)
result = 0
while low <= high:
mid = (low + high) // 2
if is_possible(pages, students, mid):
result = mid
low = mid + 1
else:
high = mid - 1
return result
medium
A. The high pointer should move to mid - 1 when allocation is possible
B. The low pointer should move to mid + 1 when allocation is possible
C. The low pointer should move to mid when allocation is possible
D. The low pointer should move to mid - 1 when allocation is not possible
Solution
Step 1: Understand binary search update rules
If allocation is possible at mid, we try to find smaller max pages by moving high to mid - 1. If not possible, we increase low to mid + 1.
Step 2: Identify incorrect pointer update
The code incorrectly moves low to mid + 1 when allocation is possible instead of high to mid - 1, which searches larger values instead of smaller.
Final Answer:
The high pointer should move to mid - 1 when allocation is possible -> Option A
Quick Check:
Move high down when allocation succeeds [OK]
Hint: Move low up only when allocation fails, else move high down [OK]
Common Mistakes:
Swapping low and high updates
Not updating pointers correctly causing infinite loop
Returning wrong result due to pointer errors
5. Given the books with pages [12, 34, 67, 90] and 3 students, what is the minimum possible maximum number of pages assigned to a student using binary search on answer?