← Home
For problem statement at 0-999/400-499/460-469/466/problemC.txt this is a correct solution, but verifier at 0-999/400-499/460-469/466/verifierC.go ends with All 100 tests passed can you fix the verifier? package main

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

func main() {
	data, _ := io.ReadAll(os.Stdin)
	if len(data) == 0 {
		return
	}
	idx := 0
	nextInt := func() int64 {
		for idx < len(data) && (data[idx] == ' ' || data[idx] == '\n' || data[idx] == '\r' || data[idx] == '\t') {
			idx++
		}
		sign := int64(1)
		if data[idx] == '-' {
			sign = -1
			idx++
		}
		var val int64
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			val = val*10 + int64(data[idx]-'0')
			idx++
		}
		return val * sign
	}

	n := int(nextInt())
	if n < 3 {
		fmt.Print(0)
		return
	}

	prefix := make([]int64, n+1)
	for i := 1; i <= n; i++ {
		prefix[i] = prefix[i-1] + nextInt()
	}

	total := prefix[n]
	if total%3 != 0 {
		fmt.Print(0)
		return
	}

	t := total / 3
	cnt := make([]int64, n+2)
	for i := n - 1; i >= 1; i-- {
		cnt[i] = cnt[i+1]
		if prefix[i] == 2*t {
			cnt[i]++
		}
	}

	var ans int64
	for i := 1; i <= n-2; i++ {
		if prefix[i] == t {
			ans += cnt[i+1]
		}
	}

	w := bufio.NewWriter(os.Stdout)
	fmt.Fprint(w, ans)
	w.Flush()
}