← Home
For problem statement at 0-999/900-999/920-929/923/problemD.txt this is a correct solution, but verifier at 0-999/900-999/920-929/923/verifierD.go ends with All tests passed can you fix the verifier? package main

import (
	"bufio"
	"io"
	"os"
)

type FastScanner struct {
	data []byte
	i    int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data, n: len(data)}
}

func (fs *FastScanner) skip() {
	for fs.i < fs.n && fs.data[fs.i] <= ' ' {
		fs.i++
	}
}

func (fs *FastScanner) NextString() string {
	fs.skip()
	start := fs.i
	for fs.i < fs.n && fs.data[fs.i] > ' ' {
		fs.i++
	}
	return string(fs.data[start:fs.i])
}

func (fs *FastScanner) NextInt() int {
	fs.skip()
	val := 0
	for fs.i < fs.n {
		c := fs.data[fs.i]
		if c < '0' || c > '9' {
			break
		}
		val = val*10 + int(c-'0')
		fs.i++
	}
	return val
}

func build(s string) ([]int, []int) {
	n := len(s)
	pref := make([]int, n+1)
	prev := make([]int, n+1)
	for i := 1; i <= n; i++ {
		pref[i] = pref[i-1]
		prev[i] = prev[i-1]
		if s[i-1] != 'A' {
			pref[i]++
			prev[i] = i
		}
	}
	return pref, prev
}

func info(pref, prev []int, l, r int) (int, int) {
	cnt := pref[r] - pref[l-1]
	last := prev[r]
	if last < l {
		return cnt, r - l + 1
	}
	return cnt, r - last
}

func can(cs, ts, ct, tt int) bool {
	if cs > ct {
		return false
	}
	if (cs&1) != (ct&1) {
		return false
	}
	if ts < tt {
		return false
	}
	if cs == ct {
		return (ts-tt)%3 == 0
	}
	if cs == 0 {
		return ts > tt
	}
	return true
}

func main() {
	fs := NewFastScanner()
	S := fs.NextString()
	T := fs.NextString()
	ps, ls := build(S)
	pt, lt := build(T)
	q := fs.NextInt()
	ans := make([]byte, q)
	for i := 0; i < q; i++ {
		a := fs.NextInt()
		b := fs.NextInt()
		c := fs.NextInt()
		d := fs.NextInt()
		cs, ts := info(ps, ls, a, b)
		ct, tt := info(pt, lt, c, d)
		if can(cs, ts, ct, tt) {
			ans[i] = '1'
		} else {
			ans[i] = '0'
		}
	}
	w := bufio.NewWriterSize(os.Stdout, 1<<20)
	w.Write(ans)
	w.WriteByte('\n')
	w.Flush()
}