← Home
For problem statement at 1000-1999/1000-1099/1070-1079/1077/problemD.txt this is a correct solution, but verifier at 1000-1999/1000-1099/1070-1079/1077/verifierD.go ends with All tests passed can you fix the verifier? package main

import (
	"bytes"
	"io"
	"os"
	"strconv"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	readInt := 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 := readInt()
	k := readInt()

	const maxA = 200000
	freq := make([]int, maxA+1)
	maxVal := 0
	for i := 0; i < n; i++ {
		x := readInt()
		freq[x]++
		if x > maxVal {
			maxVal = x
		}
	}

	can := func(m int) bool {
		total := 0
		for v := 1; v <= maxVal; v++ {
			total += freq[v] / m
			if total >= k {
				return true
			}
		}
		return false
	}

	lo, hi := 0, n/k+1
	for hi-lo > 1 {
		mid := (lo + hi) / 2
		if can(mid) {
			lo = mid
		} else {
			hi = mid
		}
	}

	ans := make([]int, 0, k)
	for v := 1; v <= maxVal && len(ans) < k; v++ {
		cnt := freq[v] / lo
		for cnt > 0 && len(ans) < k {
			ans = append(ans, v)
			cnt--
		}
	}

	var out bytes.Buffer
	for i, x := range ans {
		if i > 0 {
			out.WriteByte(' ')
		}
		out.WriteString(strconv.Itoa(x))
	}
	out.WriteByte('\n')
	os.Stdout.Write(out.Bytes())
}