For problem statement at 1000-1999/1300-1399/1380-1389/1383/problemE.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1380-1389/1383/verifierE.go ends with wrong answer on test 1
input:
wxlkyjq
expected:30
got:7
exit status 1 can you fix the verifier? ```go
package main
import (
"fmt"
"io"
"os"
"strings"
)
const MOD int64 = 1000000007
func add(a, b int64) int64 {
return (a + b) % MOD
}
func sub(a, b int64) int64 {
return ((a - b) % MOD + MOD) % MOD
}
func mul(a, b int64) int64 {
return (a * b) % MOD
}
type Block struct {
val int
sDp int64
sVdp int64
}
func main() {
bytes, err := io.ReadAll(os.Stdin)
if err != nil {
return
}
s := strings.TrimSpace(string(bytes))
if len(s) == 0 {
return
}
c := make([]int, 0)
cz := 0
for i := 0; i < len(s); i++ {
if s[i] == '0' {
cz++
} else {
c = append(c, cz)
cz = 0
}
}
c = append(c, cz)
m := len(c) - 1
if m == 0 {
fmt.Println(c[0] % int(MOD))
return
}
dp := make([]int64, m)
dp[0] = int64(c[0]+1) % MOD
stack := make([]Block, 0)
push := func(val int, sDp int64) {
valMod := (int64(val)%MOD + MOD) % MOD
sVdp := mul(valMod, sDp)
stack = append(stack, Block{val: val, sDp: sDp, sVdp: sVdp})
}
push(-1, dp[0])
for i := 1; i < m; i++ {
curr := c[i]
var SDp int64 = 0
var SVdp int64 = 0
for len(stack) > 0 && stack[len(stack)-1].val <= curr {
top := stack[len(stack)-1]
stack = stack[:len(stack)-1]
SDp = add(SDp, top.sDp)
SVdp = add(SVdp, top.sVdp)
}
term1 := mul(int64(curr), SDp)
dpi := sub(term1, SVdp)
push(curr, SDp)
push(-1, dpi)
dp[i] = dpi
}
var sumDp int64 = 0
for i := 0; i < m; i++ {
sumDp = add(sumDp, dp[i])
}
ans := mul(sumDp, int64(c[m]+1))
fmt.Println(ans)
}
```