📖 Scenario: You are managing a farm with several stalls placed along a straight line. You want to place cows in these stalls such that the minimum distance between any two cows is as large as possible. This helps reduce fights between cows.
🎯 Goal: Build a program that finds the largest minimum distance possible between cows placed in the given stalls.
📋 What You'll Learn
Create a vector called stalls with the exact stall positions: 1, 2, 8, 4, 9
Create an integer variable called cows and set it to 3
Write a function canPlaceCows that checks if cows can be placed with at least a given minimum distance
Use binary search to find the maximum minimum distance to place all cows
Print the maximum minimum distance found
💡 Why This Matters
🌍 Real World
This problem models placing resources or people in locations to maximize minimum spacing, useful in agriculture, networking, and event planning.
💼 Career
Understanding binary search on answer space and greedy checking is important for coding interviews and optimization problems.
Progress0 / 4 steps
1
Create the stalls vector
Create a vector of integers called stalls with these exact values: 1, 2, 8, 4, 9
DSA C++
Hint
Use std::vector<int> and initialize it with the given numbers inside curly braces.
2
Set the number of cows
Create an integer variable called cows and set it to 3
DSA C++
Hint
Use int cows = 3; to create the variable.
3
Write the function to check placement feasibility
Write a function called canPlaceCows that takes const std::vector<int>& stalls, int cows, and int minDist as parameters and returns bool. The function should check if it is possible to place all cows in stalls so that the minimum distance between any two cows is at least minDist. Use a greedy approach starting from the first stall after sorting.
DSA C++
Hint
Sort the stalls first before calling this function. Use a loop to count how many cows can be placed with at least minDist distance.
4
Find and print the maximum minimum distance
Sort the stalls vector. Use binary search with variables low and high to find the largest minimum distance to place all cows. Print the maximum minimum distance found using std::cout.
DSA C++
Hint
Use binary search between 1 and the maximum distance between the first and last stall. Update the result when placement is possible.
Practice
(1/5)
1. What is the main goal of the Aggressive Cows Maximum Minimum Distance problem?
easy
A. To arrange cows so that all are placed in consecutive stalls
B. To place cows in stalls so that the minimum distance between any two cows is as large as possible
C. To minimize the total distance cows travel between stalls
D. To find the maximum number of cows that can fit in a single stall
Solution
Step 1: Understand the problem goal
The problem asks to place cows in given stalls such that the smallest distance between any two cows is as large as possible.
Step 2: Identify the objective
This means maximizing the minimum distance between cows, not minimizing or counting cows per stall.
Final Answer:
To place cows in stalls so that the minimum distance between any two cows is as large as possible -> Option B
Quick Check:
Maximize minimum distance = Place cows far apart [OK]
Hint: Focus on maximizing the smallest gap between cows [OK]
Common Mistakes:
Thinking it's about minimizing total distance
Confusing maximum cows per stall with distance
Assuming cows must be in consecutive stalls
2. Which of the following is the correct way to start the binary search for the minimum distance in the aggressive cows problem in C++?
easy
A. int low = min_position, high = max_position;
B. int low = 1, high = number_of_cows;
C. int low = 0, high = number_of_stalls;
D. int low = 0, high = max_position - min_position;
Solution
Step 1: Define search space for distance
The minimum distance can be from 0 to the maximum possible distance between the farthest stalls, which is max_position - min_position.
Step 2: Set binary search boundaries
So, low = 0 and high = max_position - min_position correctly define the search space for distance.
Final Answer:
int low = 0, high = max_position - min_position; -> Option D
Quick Check:
Distance range = 0 to max - min positions [OK]
Hint: Binary search distance between min and max stall positions [OK]
Common Mistakes:
Using number of cows or stalls as high boundary
Setting low to min_position instead of 0
Confusing stall indices with distances
3. Given stalls at positions [1, 2, 8, 4, 9] and 3 cows, what is the maximum minimum distance between any two cows?
medium
A. 3
B. 4
C. 5
D. 6
Solution
Step 1: Sort stall positions
Sorted stalls: [1, 2, 4, 8, 9]
Step 2: Use binary search to find max minimum distance
Try distance 4: place first cow at 1, second at 8 (distance 7), third at 9 (distance 1 from 8, too close). So place third at 4 (distance 3 from 1, less than 4). Not possible. Try distance 3: place cows at 1, 4, 8 - all distances >=3 possible.
4. Identify the error in this C++ snippet for checking if cows can be placed with given distance:
bool canPlaceCows(vector<int>& stalls, int cows, int dist) {
int count = 1, last_pos = stalls[0];
for (int i = 1; i < stalls.size(); i++) {
if (stalls[i] - last_pos >= dist); {
count++;
last_pos = stalls[i];
}
}
return count >= cows;
}
medium
A. Extra semicolon after if condition causing logic error
B. Incorrect initialization of count variable
C. Wrong comparison operator in if condition
D. Missing return statement
Solution
Step 1: Inspect the for loop and if statement
There is an extra semicolon after the if condition which ends the if prematurely.
Step 2: Understand effect of extra semicolon
This causes the if condition to do nothing, and the following block always executes, leading to incorrect count increment.
Final Answer:
Extra semicolon after if condition causing logic error -> Option A
Quick Check:
Extra semicolon breaks if logic [OK]
Hint: Watch for stray semicolons after if statements [OK]
Common Mistakes:
Ignoring semicolon after if condition
Assuming count starts at 0 instead of 1
Misreading comparison operators
5. You have stalls at positions [2, 5, 11, 15, 17, 23] and 4 cows. What is the maximum minimum distance to place all cows? Choose the correct approach and answer.
hard
A. Maximum minimum distance is 5 by placing cows at 2, 5, 15, 23
B. Maximum minimum distance is 7 by placing cows at 2, 11, 18, 23
C. Maximum minimum distance is 6 by placing cows at 2, 11, 17, 23
D. Maximum minimum distance is 8 by placing cows at 2, 11, 15, 23
Step 2: Use binary search to find max minimum distance
Check mid=9: place cows at 2, next at >=11 (11), next at >=20 (23), only 3 cows placed, less than 4. So reduce high to 8.
Step 3: Check mid=4: place cows at 2, 11, 15, 23 (4 cows placed). Try higher mid=6: place cows at 2, 11, 17, 23 (4 cows placed). Try mid=7: only 3 cows placed. So max min distance is 6.
Final Answer:
Maximum minimum distance is 6 by placing cows at 2, 11, 17, 23 -> Option C