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