← Home
For problem statement at 1000-1999/1300-1399/1360-1369/1361/problemB.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1360-1369/1361/verifierB.go ends with All 100 tests passed can you fix the verifier? package main

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

const MOD = 1000000007

func power(base, exp int) int {
	res := 1
	base %= MOD
	for exp > 0 {
		if exp%2 == 1 {
			res = (res * base) % MOD
		}
		base = (base * base) % MOD
		exp /= 2
	}
	return res
}

func main() {
	buf, _ := io.ReadAll(os.Stdin)
	pos := 0

	nextInt := func() int {
		for pos < len(buf) && (buf[pos] < '0' || buf[pos] > '9') {
			pos++
		}
		if pos >= len(buf) {
			return 0
		}
		res := 0
		for pos < len(buf) && buf[pos] >= '0' && buf[pos] <= '9' {
			res = res*10 + int(buf[pos]-'0')
			pos++
		}
		return res
	}

	t := nextInt()
	if t == 0 {
		return
	}

	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	for tc := 0; tc < t; tc++ {
		n := nextInt()
		p := nextInt()

		k := make([]int, n)
		for i := 0; i < n; i++ {
			k[i] = nextInt()
		}

		if p == 1 {
			out.WriteString(strconv.Itoa(n%2) + "\n")
			continue
		}

		sort.Ints(k)

		ans := 0
		C := 0
		INF := n + 1

		for i := n - 1; i >= 0; i-- {
			if i < n-1 && C > 0 && C < INF {
				diff := k[i+1] - k[i]
				for diff > 0 && C < INF {
					C *= p
					if C >= INF {
						C = INF
					}
					diff--
				}
			}

			val := power(p, k[i])
			if C == 0 {
				C = 1
				ans = (ans + val) % MOD
			} else {
				if C != INF {
					C--
				}
				ans = (ans - val + MOD) % MOD
			}
		}

		out.WriteString(strconv.Itoa(ans) + "\n")
	}
}