For problem statement at 1000-1999/1900-1999/1900-1909/1902/problemD.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1900-1909/1902/verifierD.go ends with All 2022 tests passed can you fix the verifier? package main
import (
"bytes"
"io"
"os"
"sort"
)
type FastScanner struct {
data []byte
idx int
n int
}
func NewFastScanner() *FastScanner {
b, _ := io.ReadAll(os.Stdin)
return &FastScanner{data: b, n: len(b)}
}
func (fs *FastScanner) nextInt() int {
for fs.idx < fs.n && fs.data[fs.idx] <= ' ' {
fs.idx++
}
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 sign * val
}
func (fs *FastScanner) nextString() string {
for fs.idx < fs.n && fs.data[fs.idx] <= ' ' {
fs.idx++
}
start := fs.idx
for fs.idx < fs.n && fs.data[fs.idx] > ' ' {
fs.idx++
}
return string(fs.data[start:fs.idx])
}
func key(x, y int) int64 {
return (int64(x) << 32) ^ int64(uint32(y))
}
func main() {
fs := NewFastScanner()
n := fs.nextInt()
q := fs.nextInt()
s := fs.nextString()
px := make([]int, n+1)
py := make([]int, n+1)
for i := 0; i < n; i++ {
px[i+1] = px[i]
py[i+1] = py[i]
switch s[i] {
case 'U':
py[i+1]++
case 'D':
py[i+1]--
case 'L':
px[i+1]--
case 'R':
px[i+1]++
}
}
pos := make(map[int64][]int, n*2+1)
for i := 0; i <= n; i++ {
k := key(px[i], py[i])
pos[k] = append(pos[k], i)
}
exists := func(k int64, l, r int) bool {
list := pos[k]
if len(list) == 0 {
return false
}
i := sort.SearchInts(list, l)
return i < len(list) && list[i] <= r
}
var out bytes.Buffer
for ; q > 0; q-- {
x := fs.nextInt()
y := fs.nextInt()
l := fs.nextInt()
r := fs.nextInt()
if exists(key(x, y), 0, l-1) || exists(key(x, y), r, n) {
out.WriteString("YES\n")
continue
}
tx := px[l-1] + px[r] - x
ty := py[l-1] + py[r] - y
if exists(key(tx, ty), l-1, r) {
out.WriteString("YES\n")
} else {
out.WriteString("NO\n")
}
}
os.Stdout.Write(out.Bytes())
}