For problem statement at 2000-2999/2000-2099/2020-2029/2028/problemC.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2020-2029/2028/verifierC.go ends with test 1 (manual-1) failed on case 1: expected 22 got 13
input:
7
6 2 1
1 1 10 1 1 10
6 2 2
1 1 10 1 1 10
6 2 3
1 1 10 1 1 10
6 2 10
1 1 10 1 1 10
6 2 11
1 1 10 1 1 10
6 2 12
1 1 10 1 1 10
6 2 12
1 1 1 1 10 10
reference output:
22
12
2
2
2
0
-1
candidate output:
13
12
2
2
2
2
2
exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
func max(a, b int64) int64 {
if a > b {
return a
}
return b
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var t int
fmt.Fscan(in, &t)
for ; t > 0; t-- {
var n, m int
var v int64
fmt.Fscan(in, &n, &m, &v)
a := make([]int64, n+1)
pref := make([]int64, n+1)
var total int64
for i := 1; i <= n; i++ {
fmt.Fscan(in, &a[i])
total += a[i]
pref[i] = pref[i-1] + a[i]
}
left := make([]int, n+1)
var sum int64
lcnt := 0
l := 1
for r := 1; r <= n; r++ {
sum += a[r]
for l <= r && sum >= v {
lcnt++
sum -= a[l]
l++
}
left[r] = lcnt
}
right := make([]int, n+2)
sum = 0
rcnt := 0
r := n
for l2 := n; l2 >= 1; l2-- {
sum += a[l2]
for r >= l2 && sum >= v {
rcnt++
sum -= a[r]
r--
}
right[l2] = rcnt
}
right[n+1] = 0
if left[n] < m {
fmt.Fprintln(out, -1)
continue
}
need := m
earliest := make([]int, need+1)
for i := range earliest {
earliest[i] = n + 1
}
earliest[0] = 0
for i := 1; i <= n; i++ {
c := left[i]
if c > need {
c = need
}
if i < earliest[c] {
earliest[c] = i
}
}
for k := need - 1; k >= 0; k-- {
if earliest[k] > earliest[k+1] {
earliest[k] = earliest[k+1]
}
}
latest := make([]int, need+1)
for i := range latest {
latest[i] = 0
}
for i := 1; i <= n; i++ {
c := right[i]
if c > need {
c = need
}
if i > latest[c] {
latest[c] = i
}
}
for k := need - 1; k >= 0; k-- {
if latest[k] < latest[k+1] {
latest[k] = latest[k+1]
}
}
var ans int64 = 0
for x := 0; x <= m; x++ {
i := earliest[x]
j := latest[m-x]
if i == n+1 || j == 0 {
continue
}
if i < j {
seg := pref[j-1] - pref[i]
ans = max(ans, seg)
} else {
ans = max(ans, 0)
}
}
fmt.Fprintln(out, ans)
}
}
```