For problem statement at 0-999/700-799/700-709/706/problemD.txt this is a correct solution, but verifier at 0-999/700-799/700-709/706/verifierD.go ends with panic: invalid argument to Intn
goroutine 1 [running]:
math/rand.(*Rand).Intn(0xfe960?, 0x4000074d80?)
/usr/local/go/src/math/rand/rand.go:180 +0x64
main.generateCase(0x4000074ec8)
/home/ubuntu/codeforces/0-999/700-799/700-709/706/verifierD.go:57 +0x248
main.main()
/home/ubuntu/codeforces/0-999/700-799/700-709/706/verifierD.go:106 +0x18c
exit status 2 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
var next0 []int32
var next1 []int32
var cnt []int32
func newNode() int32 {
next0 = append(next0, -1)
next1 = append(next1, -1)
cnt = append(cnt, 0)
return int32(len(cnt) - 1)
}
func insert(x int, delta int32) {
v := int32(0)
cnt[0] += delta
for b := 30; b >= 0; b-- {
bit := (x >> b) & 1
vi := int(v)
if bit == 0 {
if next0[vi] == -1 {
child := newNode()
next0[vi] = child
}
v = next0[vi]
} else {
if next1[vi] == -1 {
child := newNode()
next1[vi] = child
}
v = next1[vi]
}
cnt[int(v)] += delta
}
}
func query(x int) int {
v := int32(0)
res := 0
for b := 30; b >= 0; b-- {
bit := (x >> b) & 1
vi := int(v)
if bit == 0 {
p := next1[vi]
if p != -1 && cnt[int(p)] > 0 {
v = p
res |= 1 << b
} else {
o := next0[vi]
if o != -1 && cnt[int(o)] > 0 {
v = o
} else if p != -1 {
v = p
res |= 1 << b
} else {
v = o
}
}
} else {
p := next0[vi]
if p != -1 && cnt[int(p)] > 0 {
v = p
res |= 1 << b
} else {
o := next1[vi]
if o != -1 && cnt[int(o)] > 0 {
v = o
} else if p != -1 {
v = p
res |= 1 << b
} else {
v = o
}
}
}
}
return res
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var q int
fmt.Fscan(in, &q)
capNodes := (q + 5) * 32
next0 = make([]int32, 1, capNodes)
next1 = make([]int32, 1, capNodes)
cnt = make([]int32, 1, capNodes)
next0[0] = -1
next1[0] = -1
insert(0, 1)
for i := 0; i < q; i++ {
var op string
var x int
fmt.Fscan(in, &op, &x)
switch op[0] {
case '+':
insert(x, 1)
case '-':
insert(x, -1)
case '?':
ans := query(x)
fmt.Fprintln(out, ans)
}
}
}