← Home
For problem statement at 1000-1999/1800-1899/1870-1879/1878/problemD.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1870-1879/1878/verifierD.go ends with case 1 failed: runtime error: exit status 2
panic: runtime error: index out of range [-1]

goroutine 1 [running]:
main.main()
	/tmp/build-2069491270/solution.go:82 +0x948

input:
1
3 1
txh
1
1
9
3 1 3 1 3 2 2 2 1
exit status 1 can you fix the verifier? package main

import (
	"bytes"
	"io"
	"os"
)

var data []byte
var ptr int

func nextInt() int {
	for ptr < len(data) && data[ptr] <= ' ' {
		ptr++
	}
	sign := 1
	if data[ptr] == '-' {
		sign = -1
		ptr++
	}
	val := 0
	for ptr < len(data) && data[ptr] > ' ' {
		val = val*10 + int(data[ptr]-'0')
		ptr++
	}
	return val * sign
}

func nextString() string {
	for ptr < len(data) && data[ptr] <= ' ' {
		ptr++
	}
	start := ptr
	for ptr < len(data) && data[ptr] > ' ' {
		ptr++
	}
	return string(data[start:ptr])
}

func main() {
	data, _ = io.ReadAll(os.Stdin)

	t := nextInt()
	var out bytes.Buffer

	for ; t > 0; t-- {
		n := nextInt()
		k := nextInt()

		s := []byte(nextString())

		l := make([]int, k)
		r := make([]int, k)

		for i := 0; i < k; i++ {
			l[i] = nextInt()
		}
		for i := 0; i < k; i++ {
			r[i] = nextInt()
		}

		seg := make([]int, n+1)
		for i := 0; i < k; i++ {
			for p := l[i]; p <= r[i]; p++ {
				seg[p] = i
			}
		}

		diff := make([]byte, n+3)

		q := nextInt()
		for i := 0; i < q; i++ {
			x := nextInt()
			id := seg[x]
			L, R := l[id], r[id]
			y := L + R - x
			a := x
			if y < a {
				a = y
			}
			mid := (L + R) / 2
			diff[a] ^= 1
			diff[mid+1] ^= 1
		}

		for i := 0; i < k; i++ {
			L, R := l[i], r[i]
			mid := (L + R) / 2
			var cur byte
			for p := L; p <= mid; p++ {
				cur ^= diff[p]
				qp := L + R - p
				if cur == 1 && p < qp {
					s[p-1], s[qp-1] = s[qp-1], s[p-1]
				}
			}
		}

		out.Write(s)
		out.WriteByte('\n')
	}

	os.Stdout.Write(out.Bytes())
}