For problem statement at 1000-1999/1800-1899/1870-1879/1874/problemD.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1870-1879/1874/verifierD.go ends with wrong answer on test 1
input:
3 12
expected:
5.428571428571
got:
4.6666666667
exit status 1 can you fix the verifier? package main
import (
"fmt"
"math"
)
func main() {
var n, m int
if _, err := fmt.Scan(&n, &m); err != nil {
return
}
dp := make([]float64, m+1)
nextDp := make([]float64, m+1)
var compute func(L, R, optL, optR int)
compute = func(L, R, optL, optR int) {
if L > R {
return
}
mid := (L + R) / 2
bestY := -1
bestVal := math.Inf(1)
start := mid + 1
if start < optL {
start = optL
}
end := optR
for y := start; y <= end; y++ {
val := float64(mid)/float64(y-mid) + dp[y]
if val < bestVal {
bestVal = val
bestY = y
}
}
nextDp[mid] = bestVal
if bestY == -1 {
bestY = optL
}
compute(L, mid-1, optL, bestY)
compute(mid+1, R, bestY, optR)
}
for k := 1; k < n; k++ {
compute(n-k, m-k, n-k+1, m-k+1)
for i := n - k; i <= m-k; i++ {
dp[i] = nextDp[i]
}
}
ans := math.Inf(1)
for a1 := 1; a1 <= m-(n-1); a1++ {
if dp[a1] < ans {
ans = dp[a1]
}
}
fmt.Printf("%.10f\n", float64(n)+2.0*ans)
}