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

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import kotlin.math.floor

data class FractionalPartInfo(val fractionalPart: Double, val originalIndex: Int)

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    val firstLine = reader.readLine().split(" ")
    val n = firstLine[0].toInt()
    val x = firstLine[1].toLong()

    val a = reader.readLine().split(" ").map { it.toLong() }
    val sumA = a.sum()

    val c = LongArray(n)
    val fractionalParts = mutableListOf<FractionalPartInfo>()
    var currentSumC: Long = 0

    for (i in 0 until n) {
        val bi = if (sumA == 0L) 0.0 else (x.toDouble() * a[i].toDouble()) / sumA.toDouble()
        val floorBi = floor(bi).toLong()
        c[i] = floorBi
        currentSumC += floorBi
        val fraction = bi - floorBi
        if (fraction > 1e-9) {
             fractionalParts.add(FractionalPartInfo(fraction, i))
        }
    }

    val diff = x - currentSumC
    fractionalParts.sortByDescending { it.fractionalPart }

    for (k in 0 until diff.toInt()) {
        if (k < fractionalParts.size) {
            val indexToIncrement = fractionalParts[k].originalIndex
            c[indexToIncrement]++
        } else {
            break
        }
    }

    writer.write(c.joinToString(" "))
    writer.newLine()
    writer.flush()
    writer.close()
    reader.close()
}