← Home
For problem statement at 2000-2999/2000-2099/2030-2039/2036/problemG.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2030-2039/2036/verifierG.go ends with failed to parse candidate output: unexpected token "xor" (queries are not allowed)
output:
xor 1 6
xor 1 3
xor 1 1
ans 5 6 1
xor 1 3
xor 1 1
xor 1 2
ans 2 1 2
xor 1 10
xor 1 5
xor 1 2
ans 9 12 4
xor 1 100
xor 1 50
xor 1 25
ans 30 10 30
xor 1 10000
xor 1 5000
xor 1 2500
ans 5000 13447 9998
xor 1 1000000000000
xor 1 500000000000
xor 1 250000000000
ans 345678901 425827559 178320839
xor 1 999999999999999999
xor 1 499999999999999999
xor 1 249999999999999999
ans 333333333333333333 555421638206797531 189084219578815049
xor 1 958807328056864332
xor 1 479403664028432166
xor 1 239701832014216083
ans 140884652525312196 375181903259028273 1089421145001192698
xor 1 2684963042023055
xor 1 1342481521011527
xor 1 671240760505763
ans 16628845502288 954596661985587 1087745829949087
xor 1 415596997722019248
xor 1 207798498861009624
xor 1 103899249430504812
ans 244655257986410332 186620735901166855 137347450444830884
xor 1 434760372138369308
xor 1 217380186069184654
xor 1 108690093034592327
ans 191514449406796004 528452732857661879 499243283182575453
xor 1 113700067226617650
xor 1 56850033613308825
xor 1 28425016806654412
ans 47578427778089286 19476141703878434 133427624017816679
xor 1 53476785842677575
xor 1 26738392921338787
xor 1 13369196460669393
ans 20781766901942363 15215746121021335 20299522971025240
xor 1 967549502523310868
xor 1 483774751261655434
xor 1 241887375630827717
ans 858143178060016677 807234210903059755 687267930379381164
xor 1 91403983822505212
xor 1 45701991911252606
xor 1 22850995955626303
ans 36177612685633794 123057271695046755 16902176896527865
xor 1 206036266904849521
xor 1 103018133452424760
xor 1 51509066726212380
ans 137466261995779253 60752756108697975 58252167429756963
xor 1 895216789866802396
xor 1 447608394933401198
xor 1 223804197466700599
ans 572827344948752709 483654188072364148 555498857411587771
xor 1 701000339933600222
xor 1 350500169966800111
xor 1 175250084983400055
ans 319088333556701845 134554948174180703 925092786608695639
xor 1 365670878207392370
xor 1 182835439103696185
xor 1 91417719551848092
ans 26317907009376017 159765451110787008 461524316222276322
xor 1 136205400635693282
xor 1 68102700317846641
xor 1 34051350158923320
ans 105245182304050784 92205274985097759 79371035738379162
xor 1 598218065941746777
xor 1 299109032970873388
xor 1 149554516485436694
ans 161939960638106456 373020943203290074 356128718649563880
xor 1 87268432715772236
xor 1 43634216357886118
xor 1 21817108178943059
ans 13307888787395973 68185567990354993 45311076666540701
xor 1 73941457008436939
xor 1 36970728504218469
xor 1 18485364252109234
ans 34966579897967225 45132523113751933 57299177960456197
xor 1 652468487978488872
xor 1 326234243989244436
xor 1 163117121994622218
ans 88009345956583222 82243987080474490 287629853753606849
xor 1 829207558944744117
xor 1 414603779472372058
xor 1 207301889736186029
ans 505363034314054626 1059659762586968874 843275087208573050
xor 1 990348345667778589
xor 1 495174172833889294
xor 1 247587086416944647
ans 431877358832017919 72800136188546933 251319250042487635
xor 1 16846099598364466
xor 1 8423049799182233
xor 1 4211524899591116
ans 5655126243579357 16051722414011974 9663831621834086

exit status 1 can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
)

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

	var t int
	fmt.Fscan(reader, &t)
	for i := 0; i < t; i++ {
		solve(reader, writer)
	}
}

type Item struct {
	L, R, fL, fR int64
}

func solve(reader *bufio.Reader, writer *bufio.Writer) {
	var n int64
	fmt.Fscan(reader, &n)

	query := func(x int64) int64 {
		fmt.Fprintf(writer, "xor 1 %d\n", x)
		writer.Flush()
		var res int64
		fmt.Fscan(reader, &res)
		if res == -1 {
			os.Exit(0)
		}
		return res
	}

	S := query(n)

	pos := make(map[int64]int64)
	M := []int64{}

	addVal := func(x, val int64) {
		if val != 0 && val != S {
			if _, exists := pos[val]; !exists {
				pos[val] = x
				M = append(M, val)
			}
		}
	}

	queue := []Item{}

	if S == 0 {
		last_x := n
		last_val := int64(0)
		for k := 60; k >= 1; k-- {
			x := (int64(1) << k) - int64(1)
			if x >= n {
				continue
			}
			val := query(x)
			addVal(x, val)
			if val != 0 {
				queue = append(queue, Item{0, x, 0, val})
				queue = append(queue, Item{x, last_x, val, 0})
				break
			}
			last_x = x
			last_val = val
			_ = last_val 
		}
	} else {
		queue = append(queue, Item{0, n, 0, S})
	}

	for len(queue) > 0 && len(M) < 2 {
		item := queue[0]
		queue = queue[1:]

		if item.fL == item.fR {
			continue
		}
		if item.R-item.L <= 1 {
			continue
		}

		mid := item.L + (item.R-item.L)/2
		val := query(mid)
		addVal(mid, val)

		if len(M) >= 2 {
			break
		}

		queue = append(queue, Item{item.L, mid, item.fL, val})
		queue = append(queue, Item{mid, item.R, val, item.fR})
	}

	v1 := M[0]
	v2 := M[1]
	if pos[v1] > pos[v2] {
		v1, v2 = v2, v1
	}

	a := v1
	b := v1 ^ v2
	c := v2 ^ S

	fmt.Fprintf(writer, "ans %d %d %d\n", a, b, c)
	writer.Flush()
}