← Home
For problem statement at 1000-1999/1900-1999/1980-1989/1983/problemE.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1980-1989/1983/verifierE.go ends with All 100 tests passed can you fix the verifier? package main

import (
	"bufio"
	"io"
	"os"
	"strconv"
)

const MOD int64 = 1000000007
const MAXN = 400005

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	nextInt := func() int {
		for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
			idx++
		}
		val := 0
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			val = val*10 + int(data[idx]-'0')
			idx++
		}
		return val
	}

	inv := make([]int64, MAXN+1)
	inv[1] = 1
	for i := 2; i <= MAXN; i++ {
		inv[i] = MOD - (MOD/int64(i))*inv[int(MOD%int64(i))]%MOD
	}
	inv2 := inv[2]

	t := nextInt()
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	for ; t > 0; t-- {
		n := nextInt()
		k := nextInt()

		var sumTotal, sumSpecial int64
		for i := 0; i < n; i++ {
			v := int64(nextInt())
			sumTotal += v
			if i < k {
				sumSpecial += v
			}
		}

		m := n - k
		total := sumTotal % MOD
		special := sumSpecial % MOD

		alice := total * inv2 % MOD
		if m%2 == 0 {
			alice = (alice + special*inv2%MOD*inv[m+1]%MOD) % MOD
		} else {
			normal := (sumTotal - sumSpecial) % MOD
			if normal < 0 {
				normal += MOD
			}
			alice = (alice + normal*inv2%MOD*inv[m]%MOD) % MOD
		}

		bob := total - alice
		if bob < 0 {
			bob += MOD
		}

		out.WriteString(strconv.FormatInt(alice, 10))
		out.WriteByte(' ')
		out.WriteString(strconv.FormatInt(bob, 10))
		out.WriteByte('\n')
	}
}