← Home
For problem statement at 1000-1999/1600-1699/1630-1639/1635/problemD.txt this is a correct solution, but verifier at 1000-1999/1600-1699/1630-1639/1635/verifierD.go ends with All tests passed can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"math/bits"
	"os"
	"sort"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, p int
	fmt.Fscan(reader, &n, &p)

	a := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &a[i])
	}

	sort.Ints(a)

	kept := make(map[int]bool)
	valid := make([]int, 0, n)

	for _, x := range a {
		curr := x
		isRedundant := false
		for curr > 0 {
			if kept[curr] {
				isRedundant = true
				break
			}
			if curr%2 == 1 {
				curr >>= 1
			} else if curr%4 == 0 {
				curr >>= 2
			} else {
				break
			}
		}
		if !isRedundant {
			kept[x] = true
			valid = append(valid, x)
		}
	}

	f := make([]int, p+1)
	F := make([]int, p+1)
	if p >= 0 {
		f[0] = 1
		F[0] = 1
	}
	if p >= 1 {
		f[1] = 1
		F[1] = 2
	}
	for i := 2; i <= p; i++ {
		f[i] = (f[i-1] + f[i-2]) % 1000000007
		F[i] = (F[i-1] + f[i]) % 1000000007
	}

	ans := 0
	for _, x := range valid {
		l := bits.Len(uint(x))
		if p >= l {
			ans = (ans + F[p-l]) % 1000000007
		}
	}

	fmt.Println(ans)
}