https://coderun.yandex.ru/problem/fan-ridesharing/description Легкая

Решение

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

// Функция для проверки возможности расселения
fun canAccommodate(teams: IntArray, rooms: MutableMap<Int, Int>): Boolean {
    // Подсчитываем частоты размеров команд
    val teamFreq = IntArray(10001) // Максимальный размер 10^4
    for (team in teams) {
        teamFreq[team]++
    }
    
    // Создаем массив остатка комнат
    val roomFreq = IntArray(10001)
    for ((capacity, count) in rooms) {
        roomFreq[capacity] += count
    }
    
    // Проверяем размещение от большего размера к меньшему
    for (size in 10000 downTo 1) {
        if (teamFreq[size] == 0) continue // Пропускаем пустые размеры
        
        var teamsLeft = teamFreq[size]
        // Проверяем комнаты от текущего размера и выше
        for (roomSize in size..10000) {
            if (teamsLeft == 0) break
            if (roomFreq[roomSize] > 0) {
                val used = minOf(teamsLeft, roomFreq[roomSize])
                teamsLeft -= used
                roomFreq[roomSize] -= used
            }
        }
        if (teamsLeft > 0) return false // Не удалось разместить все команды
    }
    return true
}

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

    // Читаем количество команд
    val n = reader.readLine().toInt()
    // Читаем размеры команд
    val teams = reader.readLine().split(" ").map { it.toInt() }.toIntArray()
    // Читаем количество типов комнат
    val k = reader.readLine().toInt()
    
    // Создаем карту для хранения вместимости комнат и их количества
    val rooms = mutableMapOf<Int, Int>()
    for (i in 1..k) {
        val (capacity, count) = reader.readLine().split(" ").map { it.toInt() }
        rooms[capacity] = rooms.getOrDefault(capacity, 0) + count
    }
    
    // Проверяем возможность расселения и выводим результат
    if (canAccommodate(teams, rooms)) {
        writer.write("Yes")
    } else {
        writer.write("No")
    }
    
    writer.flush()
    reader.close()
    writer.close()
}