add new solutions
This commit is contained in:
parent
0c73608ce5
commit
d798d5e8c9
19 changed files with 661 additions and 4 deletions
41
solutions/34/q3453/solution.go
Normal file
41
solutions/34/q3453/solution.go
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
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
|
||||
Loading…
Add table
Add a link
Reference in a new issue