For problem statement at 1000-1999/1800-1899/1840-1849/1845/problemE.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1840-1849/1845/verifierE.go ends with case 2 failed
input:
2 2
1 2
expected: 1
got: 0
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n, k int
fmt.Fscan(reader, &n, &k)
a := make([]int, n)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &a[i])
}
const maxDiff = 45
const offset = maxDiff
const numDiffs = maxDiff*2 + 1
dp := make([]int, numDiffs*(k+1))
nextDp := make([]int, numDiffs*(k+1))
dp[offset*(k+1)+0] = 1
for j := 0; j < n; j++ {
x := a[j]
for i := 0; i < len(nextDp); i++ {
nextDp[i] = 0
}
for diff := -maxDiff; diff <= maxDiff; diff++ {
diffOffset := diff + offset
baseIdx := diffOffset * (k + 1)
for dist := 0; dist <= k; dist++ {
val := dp[baseIdx+dist]
if val == 0 {
continue
}
for y := 0; y <= 1; y++ {
newDiff := diff + y - x
if newDiff < -maxDiff || newDiff > maxDiff {
continue
}
absDiff := newDiff
if absDiff < 0 {
absDiff = -absDiff
}
newDist := dist + absDiff
if newDist <= k {
nIdx := (newDiff + offset) * (k + 1) + newDist
nextDp[nIdx] += val
if nextDp[nIdx] >= 1000000007 {
nextDp[nIdx] -= 1000000007
}
}
}
}
}
dp, nextDp = nextDp, dp
}
ans := 0
baseIdx := offset * (k + 1)
for d := 0; d <= k; d++ {
if (k-d)%2 == 0 {
ans += dp[baseIdx+d]
if ans >= 1000000007 {
ans -= 1000000007
}
}
}
fmt.Println(ans)
}