← Home
For problem statement at 0-999/900-999/920-929/928/problemB.txt this is a correct solution, but verifier at 0-999/900-999/920-929/928/verifierB.go ends with case 7 failed: expected 2 3 4 5 6 3 7 7 3 8 10 10 11 6 12 got 2 3 4 5 6 3 4 7 3 8 10 7 11 6 9
input:
15 1
0 1 1 3 3 0 6 3 0 4 8 7 10 6 12
exit status 1 can you fix the verifier? ```go
package main

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

type FastScanner struct {
	r *bufio.Reader
}

func NewFastScanner() *FastScanner {
	return &FastScanner{r: bufio.NewReaderSize(os.Stdin, 1<<20)}
}

func (fs *FastScanner) nextInt() int {
	sign := 1
	val := 0
	c, err := fs.r.ReadByte()
	for (c < '0' || c > '9') && c != '-' {
		c, err = fs.r.ReadByte()
		if err != nil {
			return 0
		}
	}
	if c == '-' {
		sign = -1
		c, _ = fs.r.ReadByte()
	}
	for c >= '0' && c <= '9' {
		val = val*10 + int(c-'0')
		c, err = fs.r.ReadByte()
		if err != nil {
			break
		}
	}
	return val * sign
}

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

	n := in.nextInt()
	k := in.nextInt()

	a := make([]int, n+1)
	for i := 1; i <= n; i++ {
		a[i] = in.nextInt()
	}

	dp := make([]int, n+1)
	rmax := make([]int, n+1)

	for i := 1; i <= n; i++ {
		p := a[i]
		L := i - k
		if L < 1 {
			L = 1
		}
		R := i + k
		if R > n {
			R = n
		}
		rr := rmax[p]
		inc := 0
		if rr >= R {
			inc = 0
		} else if rr >= L-1 {
			inc = R - rr
		} else {
			inc = R - L + 1
		}
		dp[i] = dp[p] + inc
		if rr > R {
			rmax[i] = rr
		} else {
			rmax[i] = R
		}
	}

	for i := 1; i <= n; i++ {
		if i > 1 {
			fmt.Fprint(out, " ")
		}
		fmt.Fprint(out, dp[i])
	}
	fmt.Fprintln(out)
}
```