← Home
For problem statement at 1000-1999/1100-1199/1190-1199/1197/problemD.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1190-1199/1197/verifierD.go ends with All 100 tests passed can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

func nextInt(data []byte, idx *int) int64 {
	n := len(data)
	for *idx < n {
		c := data[*idx]
		if c != ' ' && c != '\n' && c != '\r' && c != '\t' {
			break
		}
		*idx++
	}
	sign := int64(1)
	if data[*idx] == '-' {
		sign = -1
		*idx++
	}
	var val int64
	for *idx < n {
		c := data[*idx]
		if c < '0' || c > '9' {
			break
		}
		val = val*10 + int64(c-'0')
		*idx++
	}
	return sign * val
}

func main() {
	data, _ := io.ReadAll(bufio.NewReaderSize(os.Stdin, 1<<20))
	idx := 0

	n := int(nextInt(data, &idx))
	m := int(nextInt(data, &idx))
	k := nextInt(data, &idx)

	const INF int64 = 1 << 60
	mins := make([]int64, m)
	for i := 0; i < m; i++ {
		mins[i] = INF
	}
	mins[0] = 0

	var sum int64
	var ans int64

	for i := 1; i <= n; i++ {
		sum += nextInt(data, &idx)
		q := i / m
		r := i % m
		base := sum - k*int64(q)

		best := int64(-1 << 60)
		for y := 0; y < m; y++ {
			if mins[y] == INF {
				continue
			}
			val := base - mins[y]
			if r > y {
				val -= k
			}
			if val > best {
				best = val
			}
		}
		if best > ans {
			ans = best
		}

		if base < mins[r] {
			mins[r] = base
		}
	}

	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	fmt.Fprint(out, ans)
	out.Flush()
}