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