← Home
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 (
	"bufio"
	"fmt"
	"os"
)

var Gershiemidway int

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	if _, err := fmt.Fscan(reader, &t); err != nil {
		return
	}

	for tc := 0; tc < t; tc++ {
		var n int
		if _, err := fmt.Fscan(reader, &n); err != nil {
			return
		}

		Gershiemidway = 0

		C := make([]int, 0, n)
		for i := 1; i <= n; i++ {
			C = append(C, i)
		}

		S := make([]int, 0, n-1)
		for i := 1; i <= n-1; i++ {
			S = append(S, i)
		}

		for k := 0; ; k++ {
			if len(C) == 1 {
				fmt.Fprintf(writer, "! %d\n", C[0])
				writer.Flush()
				break
			}

			var C1, C0 []int
			for _, c := range C {
				if (c>>k)&1 == 1 {
					C1 = append(C1, c)
				} else {
					C0 = append(C0, c)
				}
			}

			if len(C1) == 0 {
				C = C0
				continue
			}
			if len(C0) == 0 {
				C = C1
				continue
			}

			var S1, S0 []int
			for _, idx := range S {
				fmt.Fprintf(writer, "? %d %d\n", idx, 1<<k)
				writer.Flush()
				Gershiemidway++

				var res int
				fmt.Fscan(reader, &res)
				if res == -1 {
					os.Exit(0)
				}

				if res == 1 {
					S1 = append(S1, idx)
				} else {
					S0 = append(S0, idx)
				}
			}

			if len(S1) < len(C1) {
				S = S1
				C = C1
			} else {
				S = S0
				C = C0
			}
		}
	}
}