50 lines
868 B
Go
50 lines
868 B
Go
package q2975
|
|
|
|
import "slices"
|
|
|
|
func maximizeSquareArea(m int, n int, hFences []int, vFences []int) int {
|
|
slices.Sort(hFences)
|
|
slices.Sort(vFences)
|
|
nHFences := len(hFences) + 2
|
|
|
|
lengths := make(map[int]struct{}, nHFences*(nHFences-1)/2)
|
|
for i := -1; i < len(hFences); i++ {
|
|
a := 1
|
|
if i >= 0 {
|
|
a = hFences[i]
|
|
}
|
|
for j := i + 1; j <= len(hFences); j++ {
|
|
b := m
|
|
if j < len(hFences) {
|
|
b = hFences[j]
|
|
}
|
|
lengths[b-a] = struct{}{}
|
|
}
|
|
}
|
|
|
|
maxEdge := -1
|
|
for i := -1; i < len(vFences); i++ {
|
|
a := 1
|
|
if i >= 0 {
|
|
a = vFences[i]
|
|
}
|
|
for j := i + 1; j <= len(vFences); j++ {
|
|
b := n
|
|
if j < len(vFences) {
|
|
b = vFences[j]
|
|
}
|
|
|
|
if _, ok := lengths[b-a]; ok {
|
|
maxEdge = max(maxEdge, b-a)
|
|
}
|
|
}
|
|
}
|
|
if maxEdge == -1 {
|
|
return -1
|
|
}
|
|
|
|
maxEdge %= 1e9 + 7
|
|
return (maxEdge * maxEdge) % (1e9 + 7)
|
|
}
|
|
|
|
var _ = maximizeSquareArea
|