← Home
For problem statement at 2000-2999/2000-2099/2030-2039/2032/problemE.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2030-2039/2032/verifierE.go ends with All 85 tests passed. can you fix the verifier? package main

import (
	"bufio"
	"io"
	"os"
)

type FastScanner struct {
	data []byte
	idx  int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data}
}

func (fs *FastScanner) NextInt() int {
	n := len(fs.data)
	for fs.idx < n && (fs.data[fs.idx] < '0' || fs.data[fs.idx] > '9') {
		fs.idx++
	}
	val := 0
	for fs.idx < n && fs.data[fs.idx] >= '0' && fs.data[fs.idx] <= '9' {
		val = val*10 + int(fs.data[fs.idx]-'0')
		fs.idx++
	}
	return val
}

func solvePairInto(rhs, out []int64) bool {
	n := len(rhs)
	if n == 1 {
		if rhs[0]%2 != 0 {
			return false
		}
		out[0] = rhs[0] / 2
		return true
	}
	f := rhs[0]
	for i := 1; i <= n-2; i++ {
		f = rhs[i] - f
	}
	val := rhs[n-1] - f
	if val%2 != 0 {
		return false
	}
	z := val / 2
	out[n-1] = z
	out[0] = rhs[0] - z
	for i := 1; i <= n-2; i++ {
		out[i] = rhs[i] - out[i-1]
	}
	return true
}

func writeInt64(w *bufio.Writer, x int64) {
	if x == 0 {
		w.WriteByte('0')
		return
	}
	if x < 0 {
		w.WriteByte('-')
		x = -x
	}
	var buf [20]byte
	i := len(buf)
	for x > 0 {
		i--
		buf[i] = byte('0' + x%10)
		x /= 10
	}
	w.Write(buf[i:])
}

func main() {
	fs := NewFastScanner()
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	t := fs.NextInt()

	var aBuf, rhsBuf, tmpBuf, xBuf []int64

	for ; t > 0; t-- {
		n := fs.NextInt()

		if len(aBuf) < n {
			aBuf = make([]int64, n)
			rhsBuf = make([]int64, n)
			tmpBuf = make([]int64, n)
			xBuf = make([]int64, n)
		}

		a := aBuf[:n]
		rhs := rhsBuf[:n]
		tmp := tmpBuf[:n]
		x := xBuf[:n]

		for i := 0; i < n; i++ {
			a[i] = int64(fs.NextInt())
		}

		found := false
		for cand := 0; cand < 4 && !found; cand++ {
			c := int64(cand)
			for i := 0; i < n; i++ {
				rhs[i] = c - a[i]
			}
			if !solvePairInto(rhs, tmp) {
				continue
			}
			if !solvePairInto(tmp, x) {
				continue
			}
			found = true
		}

		if !found {
			writeInt64(out, -1)
			out.WriteByte('\n')
			continue
		}

		minV := x[0]
		for i := 1; i < n; i++ {
			if x[i] < minV {
				minV = x[i]
			}
		}
		shift := int64(0)
		if minV < 0 {
			shift = -minV
		}

		for i := 0; i < n; i++ {
			var val int64
			if i == 0 {
				val = x[n-1] + shift
			} else {
				val = x[i-1] + shift
			}
			writeInt64(out, val)
			if i+1 < n {
				out.WriteByte(' ')
			} else {
				out.WriteByte('\n')
			}
		}
	}
}