https://coderun.yandex.ru/problem/cleaning-day/description Средняя

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.StringTokenizer

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))
    val (n, r, c) = reader.readLine().split(" ").map(String::toInt)
    val heights = IntArray(n) { reader.readLine().toInt() }

    heights.sort()
    var left = 0
    var right = heights.last() - heights.first()

    while (left < right) {
        val mid = (left + right) / 2
        var count = 0

        var i = 0
        while (i + c - 1 < n) {
            if (heights[i + c - 1] - heights[i] <= mid) {
                count++
                i += c
            } else {
                i++
            }
        }

        if (count >= r) right = mid else left = mid + 1
    }

    writer.write(left.toString())
    writer.newLine()
    writer.flush()
    writer.close()
}