Allocate Minimum Pages using Binary Search on Answer
📖 Scenario: You are a librarian who needs to allocate books to students. Each book has a certain number of pages. You want to assign books to students so that the maximum number of pages assigned to a student is as small as possible. Books must be assigned in order and each student gets at least one book.
🎯 Goal: Build a program that finds the minimum possible maximum number of pages assigned to any student using binary search on the answer.
📋 What You'll Learn
Create an integer array called books with these exact values: 12, 34, 67, 90
Create an integer variable called students and set it to 2
Write a function called IsPossible that takes books, students, and a maxPages integer and returns true if allocation is possible with maxPages, otherwise false
Use binary search between the maximum single book pages and sum of all pages to find the minimum maximum pages
Print the minimum maximum pages found
💡 Why This Matters
🌍 Real World
This problem models real-world scenarios like dividing workloads, tasks, or resources evenly among people or machines.
💼 Career
Understanding binary search on answer is useful for software engineers working on optimization, scheduling, and resource allocation problems.
Progress0 / 4 steps
1
Create the books array
Create an integer array called books with these exact values: 12, 34, 67, 90
DSA C#
Hint
Use int[] books = {12, 34, 67, 90}; to create the array.
2
Create the students variable
Create an integer variable called students and set it to 2
DSA C#
Hint
Write int students = 2; to create the variable.
3
Write the IsPossible function
Write a function called IsPossible that takes int[] books, int students, and int maxPages and returns true if it is possible to allocate books so that no student reads more than maxPages, otherwise false. Books must be assigned in order and each student must get at least one book.
DSA C#
Hint
Check if you can assign books without exceeding maxPages per student. Increase student count when sum exceeds maxPages.
4
Find and print the minimum maximum pages
Use binary search between the maximum single book pages and the sum of all pages to find the minimum maximum pages that can be allocated to students. Print the result using Console.WriteLine.
DSA C#
Hint
Use binary search between the max single book pages and total pages. Print the minimum max pages found.
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 minimize the maximum number of pages assigned to a student
B. To maximize the total number of pages assigned
C. To find the average number of pages per student
D. To assign pages randomly to students
Solution
Step 1: Understand the problem goal
The problem wants to split book pages among students so that the student with the most pages has as few pages as possible.
Step 2: Identify the binary search target
Binary search is used to find the minimum possible maximum pages assigned to any student.
Final Answer:
To minimize the maximum number of pages assigned to a student -> Option A
Quick Check:
Goal = minimize max pages [OK]
Hint: Focus on minimizing the largest pages any student gets [OK]
Common Mistakes:
Thinking it maximizes total pages
Confusing average with maximum
Assuming random assignment
2. Which of the following is the correct way to initialize the binary search range for the minimum pages problem in C#?
easy
A. int low = 0, high = pages.Max();
B. int low = 0, high = pages.Sum();
C. int low = pages.Max(), high = pages.Sum();
D. int low = pages.Sum(), high = pages.Max();
Solution
Step 1: Determine the minimum and maximum possible pages
The minimum max pages must be at least the largest single book (pages.Max()), and the maximum is the sum of all pages (pages.Sum()).
Step 2: Set binary search range accordingly
Set low = pages.Max() and high = pages.Sum() to cover all possible max page values.
Final Answer:
int low = pages.Max(), high = pages.Sum(); -> Option C
Quick Check:
low = max page, high = sum pages [OK]
Hint: Low starts at max single book, high at total pages [OK]
Common Mistakes:
Starting low at 0 (too low)
Swapping low and high
Using max as low and max as high
3. Given the array pages = [10, 20, 30, 40] and students = 2, what is the minimum maximum pages assigned after running the binary search solution?
medium
A. 70
B. 50
C. 40
D. 60
Solution
Step 1: Understand the problem with given input
We want to split [10,20,30,40] into 2 students minimizing the max pages assigned.
Step 2: Check possible splits and their max pages
Possible splits: [10,20,30] & [40] max=60; [10,20] & [30,40] max=70; [10] & [20,30,40] max=90; [10,20,30,40] & [] invalid. The minimum max is 60 or 50? Actually, [10,20,30] & [40] max=60, but [10,20] & [30,40] max=70. Check if 50 is possible: [10,20] & [30,40] max=70 >50 no; [10,20,30] & [40] max=60 >50 no; So 50 is not possible. But 60 is possible. So minimum max pages is 60.
Final Answer:
60 -> Option D
Quick Check:
Minimum max pages = 60 [OK]
Hint: Try splitting pages to minimize largest sum per student [OK]
Common Mistakes:
Choosing max single book (40) as answer
Choosing total sum (100) as answer
Not checking all splits
4. Consider this C# code snippet for checking feasibility in the minimum pages problem:
bool IsPossible(int[] pages, int students, int mid) {
int count = 1, sum = 0;
foreach (int page in pages) {
if (sum + page > mid) {
count++;
sum = page;
} else {
sum += page;
}
}
return count <= students;
}
What is the bug in this code?
medium
A. It should return count >= students instead of count <= students
B. It does not handle the case when a single book has more pages than mid
C. It increments count incorrectly inside the loop
D. It resets sum to zero instead of page after incrementing count
Solution
Step 1: Analyze the feasibility check logic
The function checks if pages can be allocated so no student gets more than mid pages.
Step 2: Identify missing check for single book pages
If any single book has pages > mid, allocation is impossible, but code does not check this, causing wrong results.
Final Answer:
It does not handle the case when a single book has more pages than mid -> Option B
Quick Check:
Check single book > mid to avoid wrong feasibility [OK]
Hint: Always check if any single book exceeds mid [OK]
Common Mistakes:
Ignoring single book size check
Wrong comparison operator in return
Resetting sum incorrectly
5. You have pages = [12, 34, 67, 90] and students = 2. Using binary search on answer, what is the minimum maximum pages that can be allocated? Also, explain why the answer is not the maximum single book pages.
hard
A. 113, because splitting as [12,34,67] and [90] minimizes max pages
B. 90, because the largest single book sets the minimum max pages
C. 67, because the average pages per student is less than 70
D. 123, because total pages must be divided equally
Solution
Step 1: Calculate total and max pages
Total pages = 12+34+67+90 = 203; max single book = 90.
Step 2: Check possible splits for 2 students
Splits: [12,34,67] & [90] max=113; [12,34] & [67,90] max=157; [12] & [34,67,90] max=191. Minimum max pages is 113.
Step 3: Explain why answer is not max single book
Because 90 alone is too small to cover all pages in 2 students without exceeding max pages, the minimum max pages must be higher than 90.
Final Answer:
113, because splitting as [12,34,67] and [90] minimizes max pages -> Option A
Quick Check:
Minimum max pages = 113 > max single book 90 [OK]
Hint: Check splits; answer ≥ max single book, often higher [OK]
Common Mistakes:
Choosing max single book as answer
Ignoring total pages sum
Assuming equal division always works
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.