← Home
For problem statement at 0-999/900-999/930-939/932/problemD.txt this is a correct solution, but verifier at 0-999/900-999/930-939/932/verifierD.go ends with test 1 failed: runtime error: exit status 2
panic: runtime error: index out of range [10] with length 7

goroutine 1 [running]:
main.main()
	/tmp/build-1127915950/solution.go:114 +0x430


exit status 1 can you fix the verifier? package main

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

type Reader struct {
	buf []byte
	pos int
}

func NewReader() *Reader {
	b, _ := io.ReadAll(os.Stdin)
	return &Reader{buf: b, pos: 0}
}

func (r *Reader) NextInt() int {
	for r.pos < len(r.buf) && r.buf[r.pos] <= ' ' {
		r.pos++
	}
	if r.pos >= len(r.buf) {
		return 0
	}
	res := 0
	for r.pos < len(r.buf) && r.buf[r.pos] > ' ' {
		res = res*10 + int(r.buf[r.pos]-'0')
		r.pos++
	}
	return res
}

func (r *Reader) NextInt64() int64 {
	for r.pos < len(r.buf) && r.buf[r.pos] <= ' ' {
		r.pos++
	}
	if r.pos >= len(r.buf) {
		return 0
	}
	var res int64 = 0
	for r.pos < len(r.buf) && r.buf[r.pos] > ' ' {
		res = res*10 + int64(r.buf[r.pos]-'0')
		r.pos++
	}
	return res
}

func main() {
	reader := NewReader()
	if reader.pos >= len(reader.buf) {
		return
	}

	q := reader.NextInt()
	if q == 0 {
		return
	}

	jump := make([][20]int, q+5)
	sum := make([][20]int64, q+5)
	w := make([]int64, q+5)
	depth := make([]int, q+5)

	cnt := 1
	w[1] = 0
	depth[1] = 1

	var last int64 = 0

	writer := bufio.NewWriterSize(os.Stdout, 1024*1024)
	defer writer.Flush()

	for k := 0; k < q; k++ {
		type_ := reader.NextInt()
		p := reader.NextInt64()
		q_val := reader.NextInt64()

		if type_ == 1 {
			R := int(p ^ last)
			W := q_val ^ last

			cnt++
			w[cnt] = W

			x := R
			if w[x] >= W {
				jump[cnt][0] = x
			} else {
				for i := 19; i >= 0; i-- {
					if depth[x] > (1<<i) && w[jump[x][i]] < W {
						x = jump[x][i]
					}
				}
				jump[cnt][0] = jump[x][0]
			}

			depth[cnt] = depth[jump[cnt][0]] + 1
			sum[cnt][0] = W

			for i := 1; i <= 19; i++ {
				jump[cnt][i] = jump[jump[cnt][i-1]][i-1]
				sum[cnt][i] = sum[cnt][i-1] + sum[jump[cnt][i-1]][i-1]
			}
		} else {
			R := int(p ^ last)
			X := q_val ^ last

			ans := 0
			curr := R

			for i := 19; i >= 0; i-- {
				if depth[curr] >= (1<<i) && sum[curr][i] <= X {
					X -= sum[curr][i]
					ans += 1 << i
					curr = jump[curr][i]
				}
			}

			last = int64(ans)
			writer.WriteString(strconv.Itoa(ans))
			writer.WriteByte('\n')
		}
	}
}