← Home
For problem statement at 0-999/900-999/940-949/949/problemD.txt this is a correct solution, but verifier at 0-999/900-999/940-949/949/verifierD.go ends with All tests passed can you fix the verifier? ```go
package main

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

func min(a, b int64) int64 {
	if a < b {
		return a
	}
	return b
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	var d, b int64
	fmt.Fscan(reader, &n, &d, &b)

	a := make([]int64, n+1)
	for i := 1; i <= n; i++ {
		fmt.Fscan(reader, &a[i])
	}

	P := make([]int64, n+1)
	for i := 1; i <= n; i++ {
		P[i] = P[i-1] + a[i]
	}

	S := make([]int64, n+2)
	for i := n; i >= 1; i-- {
		S[i] = S[i+1] + a[i]
	}

	n1 := n / 2
	if n%2 != 0 {
		n1++
	}
	n2 := n - n1

	V := make([]int64, n1+1)
	for i := 1; i <= n1; i++ {
		Ri := int64(i) + int64(i)*d
		if Ri > int64(n) {
			Ri = int64(n)
		}
		V[i] = P[Ri]/b - int64(i) + int64(n1)
	}

	M := make([]int64, n1+2)
	if n1 > 0 {
		M[n1] = V[n1]
		for i := n1 - 1; i >= 1; i-- {
			M[i] = min(M[i+1], V[i])
		}
	}

	max_k1 := 0
	for k := n1; k >= 1; k-- {
		if int64(k) <= M[n1-k+1] {
			max_k1 = k
			break
		}
	}

	U := make([]int64, n+1)
	for j := n1 + 1; j <= n; j++ {
		Lj := int64(j) - (int64(n)-int64(j)+1)*d
		if Lj < 1 {
			Lj = 1
		}
		U[j] = S[Lj]/b + int64(j) - int64(n1) - 1
	}

	W := make([]int64, n2+1)
	if n2 > 0 {
		W[1] = U[n1+1]
		for i := 2; i <= n2; i++ {
			W[i] = min(W[i-1], U[n1+i])
		}
	}

	max_k2 := 0
	for k := n2; k >= 1; k-- {
		if int64(k) <= W[k] {
			max_k2 = k
			break
		}
	}

	x1 := n1 - max_k1
	x2 := n2 - max_k2

	ans := x1
	if x2 > ans {
		ans = x2
	}

	fmt.Println(ans)
}
```