3. Given the Rust code below, what is the output printed?
let stalls = vec![1, 2, 8, 4, 9];
let cows = 3;
let mut sorted_stalls = stalls.clone();
sorted_stalls.sort();
fn can_place_cows(stalls: &Vec<i32>, cows: i32, dist: i32) -> bool {
let mut count = 1;
let mut last_pos = stalls[0];
for &pos in stalls.iter().skip(1) {
if pos - last_pos >= dist {
count += 1;
last_pos = pos;
if count == cows {
return true;
}
}
}
false
}
let mut low = 1;
let mut high = sorted_stalls[sorted_stalls.len() - 1] - sorted_stalls[0];
let mut result = 0;
while low <= high {
let mid = (low + high) / 2;
if can_place_cows(&sorted_stalls, cows, mid) {
result = mid;
low = mid + 1;
} else {
high = mid - 1;
}
}
println!("{}", result);