For problem statement at 1000-1999/1500-1599/1580-1589/1584/problemD.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1580-1589/1584/verifierD.go ends with Problem D is interactive and cannot be automatically verified. can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
writer := bufio.NewWriter(os.Stdout)
scanInt64 := func() int64 {
if scanner.Scan() {
val, _ := strconv.ParseInt(scanner.Text(), 10, 64)
return val
}
return 0
}
t := scanInt64()
for tc := int64(0); tc < t; tc++ {
n := scanInt64()
cache := make(map[int64]int64)
query := func(l, r int64) int64 {
if l == 1 {
if val, ok := cache[r]; ok {
return val
}
}
fmt.Fprintf(writer, "? %d %d\n", l, r)
writer.Flush()
res := scanInt64()
if l == 1 {
cache[r] = res
}
return res
}
T := query(1, n)
var low, high int64 = 1, n
var ans_i int64 = 1
for low <= high {
mid := low + (high-low)/2
if query(1, mid) == 0 {
ans_i = mid
low = mid + 1
} else {
high = mid - 1
}
}
T1 := query(ans_i+1, n)
j := T - T1 + ans_i + 1
len1 := j - ans_i
rem := T - len1*(len1-1)/2
var lowM, highM int64 = 1, 2000000000
var M int64 = 1
for lowM <= highM {
mid := lowM + (highM-lowM)/2
val := mid * (mid - 1) / 2
if val == rem {
M = mid
break
} else if val < rem {
lowM = mid + 1
} else {
highM = mid - 1
}
}
k := j + M - 1
fmt.Fprintf(writer, "! %d %d %d\n", ans_i, j, k)
writer.Flush()
}
}