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()
}
```