← Home
For problem statement at 0-999/600-699/610-619/613/problemB.txt this is a correct solution, but verifier at 0-999/600-699/610-619/613/verifierB.go ends with case 90 failed: expected 0
3 3 2 2 2 2 got 0
3 3 3 3 3 3
input:
6 3 0 0 22
3 3 2 1 0 0
exit status 1 can you fix the verifier? ```go
package main

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

type Skill struct {
	val int64
	idx int
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n, A, cf, cm, m int64
	fmt.Fscan(reader, &n, &A, &cf, &cm, &m)

	b := make([]Skill, n)
	for i := int64(0); i < n; i++ {
		var v int64
		fmt.Fscan(reader, &v)
		b[i] = Skill{val: v, idx: int(i)}
	}

	sort.Slice(b, func(i, j int) bool {
		return b[i].val < b[j].val
	})

	prefixSum := make([]int64, n+1)
	for i := int64(0); i < n; i++ {
		prefixSum[i+1] = prefixSum[i] + b[i].val
	}

	var maxForce int64 = -1
	var bestK int64 = -1
	var bestMinLevel int64 = -1

	for k := int64(0); k <= n; k++ {
		length := n - k
		var costToMax int64
		if k > 0 {
			costToMax = k*A - (prefixSum[n] - prefixSum[n-k])
		} else {
			costToMax = 0
		}

		if costToMax > m {
			continue
		}

		if k == n {
			force := n*cf + A*cm
			if force > maxForce {
				maxForce = force
				bestK = n
				bestMinLevel = A
			}
			continue
		}

		remM := m - costToMax

		left := int64(1)
		right := length
		bestP := int64(1)

		for left <= right {
			mid := left + (right - left) / 2
			cost := mid*b[mid-1].val - prefixSum[mid]
			if cost <= remM {
				bestP = mid
				left = mid + 1
			} else {
				right = mid - 1
			}
		}

		costP := bestP*b[bestP-1].val - prefixSum[bestP]
		rem := remM - costP
		minLevel := b[bestP-1].val + rem/bestP
		if minLevel > A {
			minLevel = A
		}

		force := k*cf + minLevel*cm
		if force > maxForce {
			maxForce = force
			bestK = k
			bestMinLevel = minLevel
		}
	}

	ans := make([]int64, n)
	for i := int64(0); i < n-bestK; i++ {
		if b[i].val < bestMinLevel {
			ans[b[i].idx] = bestMinLevel
		} else {
			ans[b[i].idx] = b[i].val
		}
	}
	for i := n - bestK; i < n; i++ {
		ans[b[i].idx] = A
	}

	fmt.Println(maxForce)
	out := bufio.NewWriter(os.Stdout)
	for i := int64(0); i < n; i++ {
		if i > 0 {
			fmt.Fprint(out, " ")
		}
		fmt.Fprint(out, ans[i])
	}
	fmt.Fprintln(out)
	out.Flush()
}
```