For problem statement at 1000-1999/1200-1299/1220-1229/1221/problemE.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1220-1229/1221/verifierE.go ends with All 54 tests passed can you fix the verifier? package main
import (
"bufio"
"io"
"os"
"strings"
)
type FastScanner struct {
data []byte
idx int
n int
}
func NewFastScanner() *FastScanner {
data, _ := io.ReadAll(os.Stdin)
return &FastScanner{data: data, n: len(data)}
}
func (fs *FastScanner) skip() {
for fs.idx < fs.n && fs.data[fs.idx] <= ' ' {
fs.idx++
}
}
func (fs *FastScanner) nextInt() int {
fs.skip()
sign := 1
if fs.data[fs.idx] == '-' {
sign = -1
fs.idx++
}
val := 0
for fs.idx < fs.n {
c := fs.data[fs.idx]
if c < '0' || c > '9' {
break
}
val = val*10 + int(c-'0')
fs.idx++
}
return val * sign
}
func (fs *FastScanner) nextString() string {
fs.skip()
start := fs.idx
for fs.idx < fs.n && fs.data[fs.idx] > ' ' {
fs.idx++
}
return string(fs.data[start:fs.idx])
}
func can(T, parity, a, b int) bool {
if parity == 0 {
if T <= 2*b-2 {
return true
}
if a <= 2*b-1 && T >= 2*a && T <= 4*b-2 {
return true
}
return false
}
return a <= 2*b-1 && T >= a && T <= 3*b-2
}
func main() {
fs := NewFastScanner()
q := fs.nextInt()
var out strings.Builder
for ; q > 0; q-- {
a := fs.nextInt()
b := fs.nextInt()
s := fs.nextString()
blocks := make([]int, 0)
good, bad := 0, 0
cnt := 0
for i := 0; i < len(s); i++ {
if s[i] == '.' {
cnt++
} else if cnt > 0 {
blocks = append(blocks, cnt)
if cnt >= a && cnt < 2*b {
good++
} else if cnt >= b {
bad++
}
cnt = 0
}
}
if cnt > 0 {
blocks = append(blocks, cnt)
if cnt >= a && cnt < 2*b {
good++
} else if cnt >= b {
bad++
}
}
ok := false
for _, L := range blocks {
if L < a {
continue
}
isGood := 0
isBad := 0
if L < 2*b {
isGood = 1
} else {
isBad = 1
}
if bad-isBad != 0 {
continue
}
parity := (good - isGood) & 1
if can(L-a, parity, a, b) {
ok = true
break
}
}
if ok {
out.WriteString("YES\n")
} else {
out.WriteString("NO\n")
}
}
w := bufio.NewWriterSize(os.Stdout, 1<<20)
w.WriteString(out.String())
w.Flush()
}