← Home
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")
	}
}