← Home
For problem statement at 1000-1999/1100-1199/1110-1119/1111/problemC.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1110-1119/1111/verifierC.go ends with All 100 tests passed. can you fix the verifier? package main

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

var (
	n, k int
	A, B int64
	a    []int64
)

func solve(start, end int64, lIdx, rIdx int) int64 {
	na := int64(rIdx - lIdx)
	l := end - start + 1

	if na == 0 {
		return A
	}

	burnCost := B * na * l

	if l == 1 {
		return burnCost
	}

	mid := start + (end-start)/2
	midIdx := lIdx + sort.Search(rIdx-lIdx, func(i int) bool { return a[lIdx+i] > mid })

	splitCost := solve(start, mid, lIdx, midIdx) + solve(mid+1, end, midIdx, rIdx)

	if burnCost < splitCost {
		return burnCost
	}
	return splitCost
}

func main() {
	in := bufio.NewReader(os.Stdin)
	if _, err := fmt.Fscan(in, &n, &k, &A, &B); err != nil {
		return
	}
	a = make([]int64, k)
	for i := 0; i < k; i++ {
		fmt.Fscan(in, &a[i])
	}
	sort.Slice(a, func(i, j int) bool { return a[i] < a[j] })
	fmt.Println(solve(1, int64(1)<<n, 0, k))
}