For problem statement at 1000-1999/1900-1999/1970-1979/1979/problemD.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1970-1979/1979/verifierD.go ends with All 100 tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func getZArrayBytes(s []byte) []int {
n := len(s)
Z := make([]int, n)
l, r := 0, 0
for i := 1; i < n; i++ {
if i <= r {
if Z[i-l] < r-i+1 {
Z[i] = Z[i-l]
} else {
Z[i] = r - i + 1
}
}
for i+Z[i] < n && s[Z[i]] == s[i+Z[i]] {
Z[i]++
}
if i+Z[i]-1 > r {
l = i
r = i + Z[i] - 1
}
}
return Z
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
if _, err := fmt.Fscan(reader, &t); err != nil {
return
}
for tc := 0; tc < t; tc++ {
var n, k int
fmt.Fscan(reader, &n, &k)
var s string
fmt.Fscan(reader, &s)
p0 := make([]byte, n)
p1 := make([]byte, n)
for i := 0; i < n; i++ {
if (i/k)%2 == 0 {
p0[i] = '0'
p1[i] = '1'
} else {
p0[i] = '1'
p1[i] = '0'
}
}
ans := -1
for _, TBytes := range [][]byte{p0, p1} {
TRBytes := make([]byte, n)
for i := 0; i < n; i++ {
TRBytes[i] = TBytes[n-1-i]
}
lA := 0
for lA < n && s[lA] == TRBytes[lA] {
lA++
}
concat := make([]byte, 0, 2*n+1)
concat = append(concat, TBytes...)
concat = append(concat, '#')
concat = append(concat, s...)
Z := getZArrayBytes(concat)
found := -1
for p := 1; p <= n; p++ {
if p <= lA {
if p == n {
found = n
break
} else {
if Z[n+1+p] >= n-p {
found = p
break
}
}
}
}
if found != -1 {
ans = found
break
}
}
fmt.Fprintln(writer, ans)
}
}