41 lines
577 B
Go
41 lines
577 B
Go
package main
|
|
|
|
import "slices"
|
|
|
|
func maxDistance(position []int, m int) int {
|
|
placed := func(distance int) bool {
|
|
counter := 1
|
|
|
|
last := position[0]
|
|
for _, p := range position {
|
|
if p-last >= distance {
|
|
counter++
|
|
last = p
|
|
}
|
|
|
|
if counter >= m {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
slices.Sort(position)
|
|
|
|
low := 1
|
|
high := (position[len(position)-1] - position[0]) / (m - 1)
|
|
|
|
foundMax := 1
|
|
for low <= high {
|
|
mid := low + (high-low)/2
|
|
if placed(mid) {
|
|
foundMax = mid
|
|
low = mid + 1
|
|
} else {
|
|
high = mid - 1
|
|
}
|
|
}
|
|
|
|
return foundMax
|
|
}
|