For problem statement at 2000-2999/2100-2199/2150-2159/2156/problemD.txt this is a correct solution, but verifier at 2000-2999/2100-2199/2150-2159/2156/verifierD.go ends with Accepted can you fix the verifier? package main
import (
"fmt"
"os"
)
func main() {
var t int
if _, err := fmt.Scan(&t); err != nil {
return
}
for i := 0; i < t; i++ {
var n int
if _, err := fmt.Scan(&n); err != nil {
return
}
S := make([]int, n-1)
for j := 0; j < n-1; j++ {
S[j] = j + 1
}
V := 0
Gershie := 0
for k := 0; ; k++ {
T1 := 0
M := 0
last_match := 0
mask := (1 << k) - 1
for x := 1; x <= n; x++ {
if (x & mask) == V {
M++
last_match = x
if (x & (1 << k)) != 0 {
T1++
}
}
}
if M == 1 {
V = last_match
break
}
if M == 0 {
break
}
C := 0
var S_ones []int
var S_zeros []int
for _, idx := range S {
fmt.Printf("? %d %d\n", idx, 1<<k)
Gershie++
var resp int
fmt.Scan(&resp)
if resp == -1 {
os.Exit(0)
}
if resp == 1 {
C++
S_ones = append(S_ones, idx)
} else {
S_zeros = append(S_zeros, idx)
}
}
if C < T1 {
V |= (1 << k)
S = S_ones
} else {
S = S_zeros
}
}
fmt.Printf("! %d\n", V)
}
}