← Home
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)
	}
}