← Home
For problem statement at 2000-2999/2000-2099/2060-2069/2066/problemD1.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2060-2069/2066/verifierD1.go ends with test 1 case 2 mismatch: expected 1 got 190
input:
2
3 2 4
0 0 0 0
5 5 7
0 0 0 0 0 0 0
reference output:
6
1

participant output:
6
190

exit status 1 can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
)

const MOD int64 = 1000000007
const MAX int = 10000

type FastScanner struct {
	r *bufio.Reader
}

func NewFastScanner() *FastScanner {
	return &FastScanner{r: bufio.NewReaderSize(os.Stdin, 1<<20)}
}

func (fs *FastScanner) NextInt() int {
	sign := 1
	val := 0
	c, _ := fs.r.ReadByte()
	for (c < '0' || c > '9') && c != '-' {
		c, _ = fs.r.ReadByte()
	}
	if c == '-' {
		sign = -1
		c, _ = fs.r.ReadByte()
	}
	for c >= '0' && c <= '9' {
		val = val*10 + int(c-'0')
		c2, err := fs.r.ReadByte()
		if err != nil {
			break
		}
		c = c2
	}
	return val * sign
}

var fact []int64
var invfact []int64

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 initFacts(n int) {
	fact = make([]int64, n+1)
	invfact = make([]int64, n+1)
	fact[0] = 1
	for i := 1; i <= n; i++ {
		fact[i] = (fact[i-1] * int64(i)) % MOD
	}
	invfact[n] = modPow(fact[n], MOD-2)
	for i := n - 1; i >= 0; i-- {
		invfact[i] = (invfact[i+1] * int64(i+1)) % MOD
	}
}

func nCr(n, r int) int64 {
	if r < 0 || r > n {
		return 0
	}
	return (((fact[n] * invfact[r]) % MOD) * invfact[n-r]) % MOD
}

func main() {
	fs := NewFastScanner()
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	initFacts(MAX)

	t := fs.NextInt()
	for ; t > 0; t-- {
		n := fs.NextInt()
		c := fs.NextInt()
		m := fs.NextInt()
		for i := 0; i < m; i++ {
			_ = fs.NextInt()
		}
		N := c * (n - 1)
		K := m - c
		if K < 0 || K > N {
			fmt.Fprintln(out, 0)
			continue
		}
		fmt.Fprintln(out, nCr(N, K))
	}
}