lc-go/solutions/34/q3453/solution.go
2026-01-15 14:57:22 +09:00

41 lines
706 B
Go

package q3453
import (
"math"
"slices"
)
func separateSquares(squares [][]int) float64 {
slices.SortFunc(squares, func(a, b []int) int { return a[1] - b[1] })
var totalArea float64
var maxY int
for i := range squares {
totalArea += math.Pow(float64(squares[i][2]), 2)
maxY = max(maxY, squares[i][1]+squares[i][2])
}
target := totalArea / 2
// Binary search
var l, r float64 = 0, float64(maxY)
for range 64 {
m := (l + r) / 2
var area float64
for i := range squares {
y, l := float64(squares[i][1]), float64(squares[i][2])
if y >= m {
break
}
area += l * min(l, m-y)
}
if area < target {
l = m
} else {
r = m
}
}
return l
}
var _ = separateSquares