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 case 1 failed
expected:
4
got:
0
exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
)
const MOD int64 = 1000000007
func modPow(base, exp, mod int64) int64 {
res := int64(1)
b := base % mod
for exp > 0 {
if exp&1 == 1 {
res = (res * b) % mod
}
b = (b * b) % mod
exp >>= 1
}
return res
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Buffer(make([]byte, 1024*1024), 1024*1024)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
scanner.Scan()
t, _ := strconv.Atoi(scanner.Text())
for tc := 0; tc < t; tc++ {
scanner.Scan()
n, _ := strconv.Atoi(scanner.Text())
scanner.Scan()
p, _ := strconv.Atoi(scanner.Text())
k := make([]int, n)
for i := 0; i < n; i++ {
scanner.Scan()
k[i], _ = strconv.Atoi(scanner.Text())
}
if p == 1 {
fmt.Fprintln(writer, n%2)
continue
}
sort.Slice(k, func(i, j int) bool {
return k[i] > k[j]
})
var cnt int64 = 0
last := 0
broken := false
var result int64 = 0
for i := 0; i < n; i++ {
exp := k[i]
if cnt == 0 {
cnt = 1
last = exp
} else {
diff := last - exp
temp := cnt
for j := 0; j < diff && temp <= int64(n); j++ {
temp *= int64(p)
}
if temp > int64(n) {
res := (modPow(int64(p), int64(last), MOD) * (cnt % MOD)) % MOD
for j := i; j < n; j++ {
val := modPow(int64(p), int64(k[j]), MOD)
res = (res - val + MOD) % MOD
}
result = res
broken = true
break
}
cnt = temp - 1
if cnt > 0 {
last = exp
}
}
}
if !broken {
if cnt == 0 {
result = 0
} else {
result = (modPow(int64(p), int64(last), MOD) * (cnt % MOD)) % MOD
}
}
fmt.Fprintln(writer, result)
}
}
```