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

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.HashMap
import kotlin.math.max

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 d = firstLine[1].toLong()
    val coordinates = reader.readLine().split(" ").map { it.toInt() }
    val students = mutableListOf<Pair<Int, Int>>()
    for (i in 0 until n) {
        students.add(Pair(coordinates[i], i))
    }
    students.sortBy { it.first }
    val assignedTickets = IntArray(n)
    val lastUsedCoordinate = HashMap<Int, Int>()
    var maxTicketUsed = 0
    for (studentData in students) {
        val currentCoord = studentData.first
        val originalIndex = studentData.second
        var currentTicket = 1
        while (true) {
            val lastCoord = lastUsedCoordinate.getOrDefault(currentTicket, veryFarAwayCoordinate.toInt())
            if (currentCoord.toLong() - lastCoord.toLong() > d) {
                 break
            }
            currentTicket++
        }
        assignedTickets[originalIndex] = currentTicket
        lastUsedCoordinate[currentTicket] = currentCoord
        maxTicketUsed = max(maxTicketUsed, currentTicket)
    }
    writer.write("$maxTicketUsed\\n")
    writer.write(assignedTickets.joinToString(" "))
    writer.newLine()
    reader.close()
    writer.close()
}