For problem statement at 1000-1999/1400-1499/1410-1419/1411/problemE.txt this is a correct solution, but verifier at 1000-1999/1400-1499/1410-1419/1411/verifierE.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func canMake(h int64, cnt []int64) bool {
var carry int64
for b := 0; b < 61; b++ {
carry += cnt[b]
bit := (h >> uint(b)) & 1
if carry < bit {
return false
}
carry = (carry - bit) / 2
}
return true
}
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
var n int
var T int64
var s string
fmt.Fscan(in, &n, &T)
fmt.Fscan(in, &s)
w := func(c byte) int64 {
return int64(1) << uint(c-'a')
}
if n == 2 {
if -w(s[0])+w(s[1]) == T {
fmt.Println("Yes")
} else {
fmt.Println("No")
}
return
}
cnt := make([]int64, 61)
var sum int64
for i := 0; i < n-2; i++ {
b := s[i] - 'a'
cnt[int(b)]++
sum += int64(1) << uint(b)
}
k := T + w(s[n-2]) - w(s[n-1])
if k < -sum || k > sum {
fmt.Println("No")
return
}
diff := sum - k
if diff%2 != 0 {
fmt.Println("No")
return
}
h := diff / 2
if canMake(h, cnt) {
fmt.Println("Yes")
} else {
fmt.Println("No")
}
}