https://coderun.yandex.ru/problem/billboards Средняя

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.ArrayList
import kotlin.math.min

fun main(args: Array<String>) {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    val (n, k, w) = reader.readLine().split(" ").map { it.toInt() }
    val weekCosts = ArrayList<Int>()

    for (i in 0 until k) {
        val (ci, wi) = reader.readLine().split(" ").map { it.toInt() }
        repeat(wi) {
            weekCosts.add(ci)
        }
    }

    weekCosts.sortDescending()
    val totalSlots = n.toLong() * w.toLong()
    var maxProfit: Long = 0
    val weeksToConsider = minOf(totalSlots, weekCosts.size.toLong()).toInt()

    for (i in 0 until weeksToConsider) {
        maxProfit += weekCosts[i]
    }

    writer.write(maxProfit.toString())
    writer.newLine()
    reader.close()
    writer.close()
}