For problem statement at 1000-1999/1800-1899/1800-1809/1809/problemG.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1800-1809/1809/verifierG.go ends with case 7 failed: expected 108 got 102
input:
5 1
1 4 5 8 12
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var n int
var k int64
fmt.Fscan(reader, &n, &k)
a := make([]int64, n)
for i := 0; i < n; i++ {
fmt.Fscan(reader, &a[i])
}
b := make([]int64, n+1)
for i := 1; i <= n; i++ {
b[i] = a[n-i]
}
MOD := int64(998244353)
fact := make([]int64, n+1)
fact[0] = 1
for i := 1; i <= n; i++ {
fact[i] = fact[i-1] * int64(i) % MOD
}
invFact := make([]int64, n+1)
invFact[n] = modInverse(fact[n], MOD)
for i := n - 1; i >= 0; i-- {
invFact[i] = invFact[i+1] * int64(i+1) % MOD
}
L_arr := make([]int, n+1)
L := 0
for i := 1; i <= n; i++ {
for L+1 < i && b[L+1] > b[i]+k {
L++
}
L_arr[i] = L
}
P := make([]int64, n+1)
W := make([]int64, n+1)
P[1] = 1
W[1] = 1
for i := 2; i <= n; i++ {
Li := L_arr[i]
W[i] = P[Li] * fact[i-2] % MOD
Vi := W[i] * invFact[i-1] % MOD
P[i] = (P[i-1] + Vi) % MOD
}
R_arr := make([]int, n+1)
ptr := 1
for i := 1; i <= n; i++ {
if ptr < i+1 {
ptr = i + 1
}
for ptr <= n && b[i] <= b[ptr]+k {
ptr++
}
if ptr <= n {
R_arr[i] = ptr
} else {
R_arr[i] = -1
}
}
ans := int64(0)
if n >= 2 && b[1] > b[2]+k {
ans = (ans + fact[n-1]) % MOD
}
for i := 2; i <= n; i++ {
if W[i] == 0 {
continue
}
Ri := R_arr[i]
if Ri != -1 {
term1 := W[i] * fact[n-1] % MOD
term2 := invFact[i-2] * modInverse(int64(Ri-2), MOD) % MOD
fw := term1 * term2 % MOD
ans = (ans + fw) % MOD
} else {
term1 := W[i] * fact[n-2] % MOD
fw := term1 * invFact[i-2] % MOD
ans = (ans + fw) % MOD
}
}
fmt.Println(ans)
}
func modInverse(a, m int64) int64 {
var m0, y, x int64 = m, 0, 1
if m == 1 {
return 0
}
for a > 1 {
q := a / m
t := m
m = a % m
a = t
t = y
y = x - q*y
x = t
}
if x < 0 {
x += m0
}
return x
}