For problem statement at 1000-1999/1300-1399/1350-1359/1358/problemD.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1350-1359/1358/verifierD.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
"sort"
)
func readInt(r *bufio.Reader) int64 {
var n int64
var c byte
for {
c, _ = r.ReadByte()
if c >= '0' && c <= '9' {
break
}
}
for {
n = n*10 + int64(c-'0')
c, _ = r.ReadByte()
if c < '0' || c > '9' {
break
}
}
return n
}
func main() {
reader := bufio.NewReader(os.Stdin)
n := int(readInt(reader))
x := readInt(reader)
A := make([]int64, 2*n+1)
for i := 1; i <= n; i++ {
A[i] = readInt(reader)
A[i+n] = A[i]
}
pref_D := make([]int64, 2*n+1)
pref_H := make([]int64, 2*n+1)
for i := 1; i <= 2*n; i++ {
pref_D[i] = pref_D[i-1] + A[i]
pref_H[i] = pref_H[i-1] + A[i]*(A[i]+1)/2
}
maxHugs := int64(0)
for i := n; i <= 2*n; i++ {
target := pref_D[i] - x
idx := sort.Search(len(pref_D), func(j int) bool {
return pref_D[j] > target
})
k := idx - 1
hugs := pref_H[i] - pref_H[k+1]
rem := x - (pref_D[i] - pref_D[k+1])
D := A[k+1]
R := rem
hugs += R * (2*D - R + 1) / 2
if hugs > maxHugs {
maxHugs = hugs
}
}
fmt.Println(maxHugs)
}