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())
}