← Home
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)
}