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