← Home
For problem statement at 1000-1999/1800-1899/1860-1869/1866/problemH.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1860-1869/1866/verifierH.go ends with All 43 tests passed. can you fix the verifier? package main

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

const MOD = 998244353

func power(base, exp int64) int64 {
	res := int64(1)
	base %= MOD
	if base < 0 {
		base += MOD
	}
	for exp > 0 {
		if exp%2 == 1 {
			res = (res * base) % MOD
		}
		base = (base * base) % MOD
		exp /= 2
	}
	return res
}

func main() {
	in := bufio.NewReader(os.Stdin)
	var N, K int64
	if _, err := fmt.Fscan(in, &N, &K); err != nil {
		return
	}

	fact := make([]int64, N+1)
	invFact := make([]int64, N+1)
	fact[0] = 1
	invFact[0] = 1
	for i := int64(1); i <= N; i++ {
		fact[i] = (fact[i-1] * i) % MOD
	}
	invFact[N] = power(fact[N], MOD-2)
	for i := N - 1; i >= 1; i-- {
		invFact[i] = (invFact[i+1] * (i + 1)) % MOD
	}

	ans := int64(0)

	for z := int64(0); z <= N; z++ {
		minVal := z
		if N-1 < minVal {
			minVal = N - 1
		}
		cnt1 := minVal - (N - K) + 1
		if cnt1 < 0 {
			cnt1 = 0
		}

		L := z + 1
		if N-K > L {
			L = N - K
		}

		factPart := int64(1)
		if L <= N-1 {
			factPart = fact[N+1-L]
		}

		base := (N + 1 - z) % MOD
		if base < 0 {
			base += MOD
		}
		powerPart := power(base, cnt1)

		F := (powerPart * factPart) % MOD

		var W int64
		if z == 0 {
			W = fact[N]
		} else {
			diff := (invFact[z] - invFact[z-1]) % MOD
			if diff < 0 {
				diff += MOD
			}
			W = (fact[N] * diff) % MOD
		}

		term := (F * W) % MOD
		ans = (ans + term) % MOD
	}

	fmt.Println(ans)
}