← Home
For problem statement at 1000-1999/1000-1099/1030-1039/1032/problemE.txt this is a correct solution, but verifier at 1000-1999/1000-1099/1030-1039/1032/verifierE.go ends with test 2 failed
input:
4
1 2 3 4
expected: 4
got: 1

exit status 1 can you fix the verifier? package main

import (
	"fmt"
	"math/big"
)

func main() {
	var n int
	if _, err := fmt.Scan(&n); err != nil {
		return
	}

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

	if len(counts) <= 1 {
		fmt.Println(n)
		return
	}

	dp := make([][]*big.Int, n+1)
	for i := range dp {
		dp[i] = make([]*big.Int, 10001)
		for j := range dp[i] {
			dp[i][j] = new(big.Int)
		}
	}
	dp[0][0].SetInt64(1)

	currentSum := 0
	currentCnt := 0
	for _, w := range a {
		currentCnt++
		currentSum += w
		for i := currentCnt; i >= 1; i-- {
			for j := currentSum; j >= w; j-- {
				if dp[i-1][j-w].Sign() > 0 {
					dp[i][j].Add(dp[i][j], dp[i-1][j-w])
				}
			}
		}
	}

	maxRevealed := 0
	for x, c := range counts {
		for k := 1; k <= c; k++ {
			req := k * x
			ncr := big.NewInt(1)
			for i := 1; i <= k; i++ {
				ncr.Mul(ncr, big.NewInt(int64(c-i+1)))
				ncr.Div(ncr, big.NewInt(int64(i)))
			}

			if dp[k][req].Cmp(ncr) == 0 {
				revealed := k
				if k == c && len(counts) == 2 {
					revealed = n
				}
				if revealed > maxRevealed {
					maxRevealed = revealed
				}
			}
		}
	}

	fmt.Println(maxRevealed)
}