← Home
For problem statement at 2000-2999/2000-2099/2080-2089/2086/problemD.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2080-2089/2086/verifierD.go ends with All 8 tests passed can you fix the verifier? package main

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

const MOD int64 = 998244353
const MAXN = 500000

type FastScanner struct {
	data []byte
	idx  int
	n    int
}

func NewFastScanner() *FastScanner {
	data, _ := io.ReadAll(os.Stdin)
	return &FastScanner{data: data, n: len(data)}
}

func (fs *FastScanner) NextInt() int {
	for fs.idx < fs.n {
		b := fs.data[fs.idx]
		if b >= '0' && b <= '9' {
			break
		}
		fs.idx++
	}
	val := 0
	for fs.idx < fs.n {
		b := fs.data[fs.idx]
		if b < '0' || b > '9' {
			break
		}
		val = val*10 + int(b-'0')
		fs.idx++
	}
	return val
}

func modPow(a, e int64) int64 {
	res := int64(1)
	for e > 0 {
		if e&1 == 1 {
			res = res * a % MOD
		}
		a = a * a % MOD
		e >>= 1
	}
	return res
}

func main() {
	fact := make([]int64, MAXN+1)
	ifact := make([]int64, MAXN+1)
	fact[0] = 1
	for i := 1; i <= MAXN; i++ {
		fact[i] = fact[i-1] * int64(i) % MOD
	}
	ifact[MAXN] = modPow(fact[MAXN], MOD-2)
	for i := MAXN; i >= 1; i-- {
		ifact[i-1] = ifact[i] * int64(i) % MOD
	}

	fs := NewFastScanner()
	t := fs.NextInt()

	dp := make([]int64, MAXN/2+2)
	var out strings.Builder

	for ; t > 0; t-- {
		var c [26]int
		n := 0
		for i := 0; i < 26; i++ {
			c[i] = fs.NextInt()
			n += c[i]
		}

		odd := (n + 1) / 2
		even := n / 2

		for i := 0; i <= odd; i++ {
			dp[i] = 0
		}
		dp[0] = 1

		for i := 0; i < 26; i++ {
			x := c[i]
			if x <= 0 || x > odd {
				continue
			}
			for s := odd; s >= x; s-- {
				dp[s] += dp[s-x]
				if dp[s] >= MOD {
					dp[s] -= MOD
				}
			}
		}

		ans := dp[odd]
		if ans != 0 {
			ans = ans * fact[odd] % MOD
			ans = ans * fact[even] % MOD
			for i := 0; i < 26; i++ {
				ans = ans * ifact[c[i]] % MOD
			}
		}

		out.WriteString(strconv.FormatInt(ans, 10))
		out.WriteByte('\n')
	}

	os.Stdout.WriteString(out.String())
}