← Home
For problem statement at 0-999/800-899/850-859/850/problemF.txt this is a correct solution, but verifier at 0-999/800-899/850-859/850/verifierF.go ends with all tests passed can you fix the verifier? package main

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

func power(base, exp int64) int64 {
	var res int64 = 1
	base %= 1000000007
	for exp > 0 {
		if exp%2 == 1 {
			res = (res * base) % 1000000007
		}
		base = (base * base) % 1000000007
		exp /= 2
	}
	return res
}

func modInverse(n int64) int64 {
	return power(n, 1000000007-2)
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	if _, err := fmt.Fscan(reader, &n); err != nil {
		return
	}
	if n == 1 {
		var a int
		fmt.Fscan(reader, &a)
		fmt.Println(0)
		return
	}

	a := make([]int64, n)
	var S int64 = 0
	var maxA int64 = 0
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &a[i])
		S += a[i]
		if a[i] > maxA {
			maxA = a[i]
		}
	}

	M := int64(1000000007)
	P := make([]int64, maxA+1)
	P[1] = 0
	for k := int64(1); k < maxA; k++ {
		inv := modInverse(S - k)
		P[k+1] = (P[k] + inv) % M
	}

	var ans int64 = 0
	term1 := ((S - 1) % M * ((S - 1) % M)) % M
	term1 = (term1 * modInverse(S)) % M

	for i := 0; i < n; i++ {
		x := a[i]
		val1 := (x * term1) % M
		
		val2 := (S - x) % M
		val2 = (val2 * P[x]) % M
		
		val3 := (x - 1 - val2) % M
		if val3 < 0 {
			val3 += M
		}
		
		val3 = (val3 * ((S - 1) % M)) % M
		
		fx := (val1 - val3) % M
		if fx < 0 {
			fx += M
		}
		ans = (ans + fx) % M
	}
	fmt.Println(ans)
}