← Home
For problem statement at 1000-1999/1800-1899/1890-1899/1895/problemD.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1890-1899/1895/verifierD.go ends with case 1 failed
input:
4
356 228 102
expected 487 131 103 1 got 484 128 100 2
exit status 1 can you fix the verifier? package main

import (
	"bytes"
	"io"
	"os"
	"strconv"
)

func countOnes(n, bit int) int {
	block := 1 << (bit + 1)
	half := 1 << bit
	full := n / block
	rem := n % block
	res := full * half
	if rem > half {
		res += rem - half
	}
	return res
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	nextInt := func() int {
		for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
			idx++
		}
		val := 0
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			val = val*10 + int(data[idx]-'0')
			idx++
		}
		return val
	}

	n := nextInt()
	x := make([]int, n)
	cur := 0
	mx := n - 1
	for i := 1; i < n; i++ {
		cur ^= nextInt()
		x[i] = cur
		if cur > mx {
			mx = cur
		}
	}

	bits := 0
	for t := mx; t > 0; t >>= 1 {
		bits++
	}

	cnt := make([]int, bits)
	for _, v := range x {
		for b := 0; b < bits; b++ {
			cnt[b] += (v >> b) & 1
		}
	}

	start := 0
	for b := 0; b < bits; b++ {
		c := countOnes(n, b)
		if c*2 == n {
			continue
		}
		if cnt[b] != c {
			start |= 1 << b
		}
	}

	var out bytes.Buffer
	for i, v := range x {
		if i > 0 {
			out.WriteByte(' ')
		}
		out.WriteString(strconv.Itoa(v ^ start))
	}
	out.WriteByte('\n')
	os.Stdout.Write(out.Bytes())
}