← Home
For problem statement at 2000-2999/2100-2199/2150-2159/2154/problemB.txt this is a correct solution, but verifier at 2000-2999/2100-2199/2150-2159/2154/verifierB.go ends with test 3 mismatch: expected 3 got 1
n=6 array=[6 6 6 6 6 6]
exit status 1 can you fix the verifier? ```go
package main

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

const inf int64 = 1<<62

func min64(a, b int64) int64 {
	if a < b {
		return a
	}
	return b
}
func max64(a, b int64) int64 {
	if a > b {
		return a
	}
	return b
}

func solveCase(a []int64) int64 {
	n := len(a)
	var dp0, dp1 int64 = 0, inf // dp0: odd (peak) at i, dp1: even (valley) at i (1-indexed)
	var x0, x1 int64 = 0, 0     // resulting value at i for each state
	for i := 1; i <= n; i++ {
		v := a[i-1]
		ndp0, ndp1 := inf, inf
		var nx0, nx1 int64

		// transition to peak at i (odd in pattern)
		// from peak at i-1: just set ai = v
		if dp0 < ndp0 {
			ndp0 = dp0
			nx0 = v
		}
		// from valley at i-1: need x_prev < v => if not, decrease v
		need := max64(0, x1-v+1)
		cost := dp1 + need
		val := v - need
		if cost < ndp0 {
			ndp0 = cost
			nx0 = val
		}

		// transition to valley at i (even in pattern)
		// from valley at i-1:
		if dp1 < ndp1 {
			ndp1 = dp1
			nx1 = v
		}
		// from peak at i-1: need x_prev > final; can set using op1 then decrease
		// choose base = max(v, x0), then decrease to < x0
		base := max64(v, x0)
		need2 := max64(0, base-x0+1)
		cost2 := dp0 + need2
		val2 := base - need2
		if cost2 < ndp1 {
			ndp1 = cost2
			nx1 = val2
		}

		dp0, dp1 = ndp0, ndp1
		x0, x1 = nx0, nx1
	}
	if n%2 == 1 {
		return dp0
	}
	return dp1
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var t int
	fmt.Fscan(in, &t)
	for ; t > 0; t-- {
		var n int
		fmt.Fscan(in, &n)
		a := make([]int64, n)
		for i := 0; i < n; i++ {
			fmt.Fscan(in, &a[i])
		}
		fmt.Fprintln(out, solveCase(a))
	}
}
```