For problem statement at 0-999/400-499/470-479/476/problemE.txt this is a correct solution, but verifier at 0-999/400-499/470-479/476/verifierE.go ends with case 1 failed: expected [2 2 2 2 2 2] got [2 2 1 1 0 0]
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
var s, p string
fmt.Fscan(in, &s, &p)
sb := []byte(s)
pb := []byte(p)
n, m := len(sb), len(pb)
K := 0
if m <= n {
K = n / m
}
nextPos := make([][26]int, n+2)
for i := n; i >= 1; i-- {
nextPos[i] = nextPos[i+1]
nextPos[i][int(sb[i-1]-'a')] = i
}
end := make([]int, n+2)
cost := make([]int, n+2)
for i := 1; i <= n; i++ {
if sb[i-1] != pb[0] {
continue
}
e := i
pos := i + 1
ok := true
for t := 1; t < m; t++ {
j := 0
if pos <= n+1 {
j = nextPos[pos][int(pb[t]-'a')]
}
if j == 0 {
ok = false
break
}
e = j
pos = j + 1
}
if ok {
end[i] = e
cost[i] = e - i + 1 - m
}
}
const INF = int(1e9)
dp := make([][]int, n+3)
for i := 0; i < n+3; i++ {
dp[i] = make([]int, K+1)
for k := 1; k <= K; k++ {
dp[i][k] = INF
}
}
for i := n; i >= 1; i-- {
dp[i][0] = 0
for k := 1; k <= K; k++ {
best := dp[i+1][k]
if end[i] != 0 {
cand := dp[end[i]+1][k-1]
if cand != INF {
cand += cost[i]
if cand < best {
best = cand
}
}
}
dp[i][k] = best
}
}
ans := make([]int, n+1)
for k := 1; k <= K; k++ {
c := dp[1][k]
if c >= INF {
continue
}
lo := c
hi := n - k*m
if lo > hi {
continue
}
for x := lo; x <= hi; x++ {
if k > ans[x] {
ans[x] = k
}
}
}
out := bufio.NewWriter(os.Stdout)
for i := 0; i <= n; i++ {
if i > 0 {
fmt.Fprint(out, " ")
}
fmt.Fprint(out, ans[i])
}
fmt.Fprintln(out)
out.Flush()
}