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