← Home
For problem statement at 1000-1999/1800-1899/1850-1859/1854/problemC.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1850-1859/1854/verifierC.go ends with All 100 tests passed can you fix the verifier? package main

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

const MOD int64 = 1000000007

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var n, m int
	fmt.Fscan(in, &n, &m)

	s := make([]int, n+1)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &s[i])
	}
	s[n] = m + 1

	dp := make([][]int64, m+2)
	for i := range dp {
		dp[i] = make([]int64, m+2)
	}

	for d := 0; d <= m; d++ {
		dp[d][0] = int64(d + 1)
	}

	inv2 := (MOD + 1) / 2

	for b := 1; b <= m-1; b++ {
		dp[0][b] = (1 + dp[1][b-1]) % MOD
		dp[0][b] = dp[0][b] * inv2 % MOD
		maxD := m - 1 - b
		for d := 1; d <= maxD; d++ {
			dp[d][b] = (1 + dp[d-1][b] + dp[d+1][b-1]) % MOD
			dp[d][b] = dp[d][b] * inv2 % MOD
		}
	}

	var ans int64
	for i := 0; i < n; i++ {
		d := s[i+1] - s[i] - 1
		b := m + 1 - s[i+1]
		ans += dp[d][b]
		if ans >= MOD {
			ans -= MOD
		}
	}

	fmt.Fprint(out, ans%MOD)
}