42 lines
577 B
Go
42 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
|
||
|
}
|