For problem statement at 1000-1999/1800-1899/1800-1809/1809/problemF.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1800-1809/1809/verifierF.go ends with case 2 failed: expected 85 85 85 86 85 85 got 63 85 85 86 85 85
input:
1
6 12
12 5 11 11 8 4
2 1 1 2 2 2
exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
)
func main() {
in := bufio.NewReader(os.Stdin)
var t int
fmt.Fscan(in, &t)
for ; t > 0; t-- {
var n int
var k int64
fmt.Fscan(in, &n, &k)
a := make([]int64, n+2)
b := make([]int, n+2)
for i := 1; i <= n; i++ {
fmt.Fscan(in, &a[i])
}
for i := 1; i <= n; i++ {
fmt.Fscan(in, &b[i])
}
var S int64 = 0
for i := 1; i <= n; i++ {
S += a[i]
}
pref := make([]int64, n+2)
for i := 1; i <= n; i++ {
pref[i] = pref[i-1] + a[i]
}
cheap := []int{}
for i := 1; i <= n; i++ {
if b[i] == 1 {
cheap = append(cheap, i)
}
}
cc := len(cheap)
ans := make([]int64, n+2)
if cc == 0 {
for i := 1; i <= n; i++ {
ans[i] = 2 * S
}
} else {
gap_T := make([]int64, cc)
for jj := 0; jj < cc; jj++ {
st := cheap[jj]
en := 0
if jj+1 < cc {
en = cheap[jj+1]
} else {
en = cheap[0]
}
var tt int64 = 0
if st < en {
tt = pref[en-1] - pref[st-1]
} else {
tt = pref[n] - pref[st-1] + pref[en-1]
}
gap_T[jj] = tt
}
var base int64 = 0
for jj := 0; jj < cc; jj++ {
if gap_T[jj]-k > 0 {
base += gap_T[jj] - k
}
}
for i := 1; i <= n; i++ {
if b[i] == 1 {
ans[i] = S + base
} else {
idx := sort.SearchInts(cheap, i)
var jj int
if idx == cc {
jj = cc - 1
} else if cheap[idx] == i {
continue
} else if idx == 0 {
jj = cc - 1
} else {
jj = idx - 1
}
st := cheap[jj]
en := 0
if jj+1 < cc {
en = cheap[jj+1]
} else {
en = cheap[0]
}
var t_after int64 = 0
l := i
rr := en - 1
if l <= rr {
t_after = pref[rr] - pref[l-1]
} else {
t_after = pref[n] - pref[l-1] + pref[rr]
}
var t_before int64 = 0
l2 := st
rr2 := i - 1
if l2 <= rr2 {
t_before = pref[rr2] - pref[l2-1]
} else if rr2 >= 1 {
t_before = pref[n] - pref[l2-1] + pref[rr2]
}
orig_forced := int64(0)
if gap_T[jj]-k > 0 {
orig_forced = gap_T[jj] - k
}
f_before := int64(0)
if t_before > 0 {
if t_before-k > 0 {
f_before = t_before - k
}
}
f_after := t_after
this_add := base - orig_forced + f_after + f_before
ans[i] = S + this_add
}
}
}
for i := 1; i <= n; i++ {
if i > 1 {
fmt.Print(" ")
}
fmt.Print(ans[i])
}
fmt.Println()
}
}
```