← Home
For problem statement at 1000-1999/1100-1199/1150-1159/1153/problemE.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1150-1159/1153/verifierE.go ends with All tests passed can you fix the verifier? package main

import (
	"fmt"
)

func query(r1, c1, r2, c2 int) int {
	fmt.Printf("? %d %d %d %d\n", r1, c1, r2, c2)
	var ans int
	fmt.Scan(&ans)
	return ans
}

func main() {
	var n int
	fmt.Scan(&n)

	odd_rows := []int{}
	for i := 1; i < n; i++ {
		ans := query(i, 1, i, n)
		if ans%2 != 0 {
			odd_rows = append(odd_rows, i)
			if len(odd_rows) == 2 {
				break
			}
		}
	}

	if len(odd_rows) == 1 {
		odd_rows = append(odd_rows, n)
	}

	if len(odd_rows) == 2 {
		r1 := odd_rows[0]
		r2 := odd_rows[1]

		low1, high1 := 1, n
		for low1 < high1 {
			mid := (low1 + high1) / 2
			if query(r1, 1, r1, mid)%2 != 0 {
				high1 = mid
			} else {
				low1 = mid + 1
			}
		}
		c1 := low1

		low2, high2 := 1, n
		for low2 < high2 {
			mid := (low2 + high2) / 2
			if query(r2, 1, r2, mid)%2 != 0 {
				high2 = mid
			} else {
				low2 = mid + 1
			}
		}
		c2 := low2

		fmt.Printf("! %d %d %d %d\n", r1, c1, r2, c2)
		return
	}

	odd_cols := []int{}
	for i := 1; i < n; i++ {
		ans := query(1, i, n, i)
		if ans%2 != 0 {
			odd_cols = append(odd_cols, i)
			if len(odd_cols) == 2 {
				break
			}
		}
	}

	if len(odd_cols) == 1 {
		odd_cols = append(odd_cols, n)
	}

	c1 := odd_cols[0]
	c2 := odd_cols[1]

	low, high := 1, n
	for low < high {
		mid := (low + high) / 2
		if query(1, c1, mid, c1)%2 != 0 {
			high = mid
		} else {
			low = mid + 1
		}
	}
	r := low

	fmt.Printf("! %d %d %d %d\n", r, c1, r, c2)
}