← Home
For problem statement at 0-999/400-499/470-479/479/problemE.txt this is a correct solution, but verifier at 0-999/400-499/470-479/479/verifierE.go ends with All 100 tests passed can you fix the verifier? package main

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

const mod = 1000000007

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

	var n, a, b, k int
	fmt.Fscan(in, &n, &a, &b, &k)

	if a > b {
		a = n - a + 1
		b = n - b + 1
	}

	dp := make([]int, b)
	next := make([]int, b)
	prefix := make([]int, b)
	dp[a] = 1

	for step := 0; step < k; step++ {
		prefix[0] = 0
		for i := 1; i < b; i++ {
			v := prefix[i-1] + dp[i]
			if v >= mod {
				v -= mod
			}
			prefix[i] = v
		}
		for i := 1; i < b; i++ {
			r := (b + i - 1) / 2
			v := prefix[r] - dp[i]
			if v < 0 {
				v += mod
			}
			next[i] = v
		}
		dp, next = next, dp
	}

	ans := 0
	for i := 1; i < b; i++ {
		ans += dp[i]
		if ans >= mod {
			ans -= mod
		}
	}

	fmt.Fprintln(out, ans)
}