← Home
For problem statement at 0-999/900-999/980-989/986/problemC.txt this is a correct solution, but verifier at 0-999/900-999/980-989/986/verifierC.go ends with All tests passed can you fix the verifier? package main

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

const (
	present  uint8 = 1
	seenA    uint8 = 2
	seenMask uint8 = 4
)

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

	n := nextInt()
	m := nextInt()
	N := 1 << n

	flags := make([]uint8, N)
	for i := 0; i < m; i++ {
		flags[nextInt()] |= present
	}

	fullMask := uint32(N - 1)
	stack := make([]uint32, 0, N)
	ans := 0

	for a := 0; a < N; a++ {
		if flags[a]&present == 0 || flags[a]&seenA != 0 {
			continue
		}
		ans++
		flags[a] |= seenA
		stack = stack[:0]

		c := fullMask ^ uint32(a)
		if flags[c]&seenMask == 0 {
			flags[c] |= seenMask
			stack = append(stack, c)
		}

		for len(stack) > 0 {
			z := stack[len(stack)-1]
			stack = stack[:len(stack)-1]

			if flags[z]&present != 0 && flags[z]&seenA == 0 {
				flags[z] |= seenA
				c2 := fullMask ^ z
				if flags[c2]&seenMask == 0 {
					flags[c2] |= seenMask
					stack = append(stack, c2)
				}
			}

			for s := z; s != 0; s &= s - 1 {
				lb := s & -s
				sub := z ^ lb
				if flags[sub]&seenMask == 0 {
					flags[sub] |= seenMask
					stack = append(stack, sub)
				}
			}
		}
	}

	os.Stdout.Write([]byte(strconv.Itoa(ans)))
}