← Home
For problem statement at 1000-1999/1300-1399/1320-1329/1328/problemF.txt this is a correct solution, but verifier at 1000-1999/1300-1399/1320-1329/1328/verifierF.go ends with test 1 failed: expected 66 got 170
input:
19 14
13 35 27 20 34 21 15 2 50 4 12 15 17 13 16 21 43 35 12
exit status 1 can you fix the verifier? package main

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

func main() {
	data, _ := io.ReadAll(bufio.NewReaderSize(os.Stdin, 1<<20))
	idx := 0
	nextInt := func() int {
		for idx < len(data) && (data[idx] < '0' || data[idx] > '9') {
			idx++
		}
		val := 0
		for idx < len(data) && data[idx] >= '0' && data[idx] <= '9' {
			val = val*10 + int(data[idx]-'0')
			idx++
		}
		return val
	}

	n := nextInt()
	k := nextInt()

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

	sort.Ints(a)

	vals := make([]int64, 0, n)
	cnts := make([]int64, 0, n)
	for _, v := range a {
		x := int64(v)
		if len(vals) == 0 || vals[len(vals)-1] != x {
			vals = append(vals, x)
			cnts = append(cnts, 1)
		} else {
			cnts[len(cnts)-1]++
		}
	}

	m := len(vals)
	prefCnt := make([]int64, m)
	prefSum := make([]int64, m)
	for i := 0; i < m; i++ {
		prefCnt[i] = cnts[i]
		prefSum[i] = cnts[i] * vals[i]
		if i > 0 {
			prefCnt[i] += prefCnt[i-1]
			prefSum[i] += prefSum[i-1]
		}
	}

	totalCnt := prefCnt[m-1]
	totalSum := prefSum[m-1]
	needAll := int64(k)
	ans := int64(1 << 62)

	for i := 0; i < m; i++ {
		c := cnts[i]
		if c >= needAll {
			ans = 0
			break
		}

		t := needAll - c
		var lcnt, lsum int64
		if i > 0 {
			lcnt = prefCnt[i-1]
			lsum = prefSum[i-1]
		}
		rcnt := totalCnt - prefCnt[i]
		rsum := totalSum - prefSum[i]
		x := vals[i]

		bl := (x-1)*lcnt - lsum
		br := rsum - (x+1)*rcnt

		if lcnt >= t {
			cur := bl + t
			if cur < ans {
				ans = cur
			}
		}
		if rcnt >= t {
			cur := br + t
			if cur < ans {
				ans = cur
			}
		}

		cur := bl + br + t
		if cur < ans {
			ans = cur
		}
	}

	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	fmt.Fprintln(out, ans)
	out.Flush()
}