For problem statement at 1000-1999/1400-1499/1420-1429/1425/problemD.txt this is a correct solution, but verifier at 1000-1999/1400-1499/1420-1429/1425/verifierD.go ends with All tests passed! can you fix the verifier? package main
import (
"bufio"
"fmt"
"io"
"os"
)
const MOD int64 = 1000000007
const S = 1002
const C = 1000
func nextInt(data []byte, idx *int) int {
n := len(data)
i := *idx
for i < n && (data[i] < '0' || data[i] > '9') {
i++
}
v := 0
for i < n && data[i] >= '0' && data[i] <= '9' {
v = v*10 + int(data[i]-'0')
i++
}
*idx = i
return v
}
func modPow(a, e int64) int64 {
r := int64(1)
for e > 0 {
if e&1 == 1 {
r = r * a % MOD
}
a = a * a % MOD
e >>= 1
}
return r
}
func main() {
data, _ := io.ReadAll(os.Stdin)
idx := 0
N := nextInt(data, &idx)
M := nextInt(data, &idx)
R := nextInt(data, &idx)
x := make([]int, N)
y := make([]int, N)
b := make([]int64, N)
pref := make([]int, S*S)
for i := 0; i < N; i++ {
xi := nextInt(data, &idx)
yi := nextInt(data, &idx)
bi := nextInt(data, &idx)
x[i] = xi
y[i] = yi
b[i] = int64(bi) % MOD
pref[xi*S+yi] = 1
}
for i := 1; i <= C; i++ {
base := i * S
prev := (i - 1) * S
for j := 1; j <= C; j++ {
pref[base+j] += pref[prev+j] + pref[base+j-1] - pref[prev+j-1]
}
}
fact := make([]int64, N+1)
invFact := make([]int64, N+1)
comb := 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; i >= 1; i-- {
invFact[i-1] = invFact[i] * int64(i) % MOD
}
invFactM := invFact[M]
for i := M; i <= N; i++ {
comb[i] = fact[i] * invFactM % MOD * invFact[i-M] % MOD
}
lx := make([]int, N)
rx := make([]int, N)
ly := make([]int, N)
ry := make([]int, N)
k := make([]int, N)
miss := make([]int64, N)
for i := 0; i < N; i++ {
lxi := x[i] - R
if lxi < 1 {
lxi = 1
}
rxi := x[i] + R
if rxi > C {
rxi = C
}
lyi := y[i] - R
if lyi < 1 {
lyi = 1
}
ryi := y[i] + R
if ryi > C {
ryi = C
}
lx[i], rx[i], ly[i], ry[i] = lxi, rxi, lyi, ryi
br := rxi * S
bl := (lxi - 1) * S
ki := pref[br+ryi] - pref[bl+ryi] - pref[br+lyi-1] + pref[bl+lyi-1]
k[i] = ki
miss[i] = comb[N-ki]
}
total := comb[N]
ans := int64(0)
for i := 0; i < N; i++ {
wi := b[i]
lxi, rxi, lyi, ryi := lx[i], rx[i], ly[i], ry[i]
ki := k[i]
missi := miss[i]
for j := 0; j < N; j++ {
x1 := lxi
if lx[j] > x1 {
x1 = lx[j]
}
x2 := rxi
if rx[j] < x2 {
x2 = rx[j]
}
inter := 0
if x1 <= x2 {
y1 := lyi
if ly[j] > y1 {
y1 = ly[j]
}
y2 := ryi
if ry[j] < y2 {
y2 = ry[j]
}
if y1 <= y2 {
br := x2 * S
bl := (x1 - 1) * S
inter = pref[br+y2] - pref[bl+y2] - pref[br+y1-1] + pref[bl+y1-1]
}
}
u := ki + k[j] - inter
cnt := total - missi - miss[j] + comb[N-u]
cnt %= MOD
if cnt < 0 {
cnt += MOD
}
term := wi * b[j] % MOD
term = term * cnt % MOD
ans += term
if ans >= MOD {
ans -= MOD
}
}
}
out := bufio.NewWriterSize(os.Stdout, 1<<20)
fmt.Fprint(out, ans)
out.Flush()
}