← Home
For problem statement at 1000-1999/1700-1799/1790-1799/1799/problemF.txt this is a correct solution, but verifier at 1000-1999/1700-1799/1790-1799/1799/verifierF.go ends with All tests passed can you fix the verifier? ```go
package main

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

func readInt(reader *bufio.Reader) int {
	var res int
	var sign int = 1
	for {
		c, err := reader.ReadByte()
		if err != nil {
			return 0
		}
		if c == '-' {
			sign = -1
			break
		}
		if c >= '0' && c <= '9' {
			res = int(c - '0')
			break
		}
	}
	for {
		c, err := reader.ReadByte()
		if err != nil {
			break
		}
		if c >= '0' && c <= '9' {
			res = res*10 + int(c-'0')
		} else {
			break
		}
	}
	return res * sign
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	t := readInt(reader)

	for tc := 0; tc < t; tc++ {
		n := readInt(reader)
		b := readInt(reader)
		k1 := readInt(reader)
		k2 := readInt(reader)

		a := make([]int, n)
		var totalSum int64 = 0
		for i := 0; i < n; i++ {
			a[i] = readInt(reader)
			totalSum += int64(a[i])
		}

		sort.Slice(a, func(i, j int) bool {
			return a[i] > a[j]
		})

		region1Save := make([]int64, n+1)
		halfSum := make([]int64, n+1)

		for j := 0; j < n; j++ {
			val := a[j]
			ceilHalf := (val + 1) / 2
			rem := ceilHalf - b
			if rem < 0 {
				rem = 0
			}
			region1Save[j+1] = region1Save[j] + int64(val-rem)
			halfSum[j+1] = halfSum[j] + int64(val/2)
		}

		minI := 0
		if k1+k2-n > minI {
			minI = k1 + k2 - n
		}
		maxI := k1
		if k2 < maxI {
			maxI = k2
		}
		if n < maxI {
			maxI = n
		}

		var maxSave int64 = 0
		deltas := make([]int, n)

		for i := minI; i <= maxI; i++ {
			curSave := region1Save[i]

			m1 := k1 - i
			m2 := k2 - i
			M := m1 + m2

			curSave += halfSum[i+M] - halfSum[i]

			for j := 0; j < M; j++ {
				val := a[i+j]
				saveOp2 := val
				if saveOp2 > b {
					saveOp2 = b
				}
				deltas[j] = saveOp2 - val/2
			}

			sub := deltas[:M]
			sort.Ints(sub)

			for j := 0; j < m2; j++ {
				curSave += int64(sub[M-1-j])
			}

			if curSave > maxSave {
				maxSave = curSave
			}
		}

		fmt.Println(totalSum - maxSave)
	}
}
```