https://coderun.yandex.ru/problem/ivan-and-opensource/description Средняя

Решение

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

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

    // Читаем чёрный список
    val n = reader.readLine().toInt()
    val blacklist = Array(n) { reader.readLine() }

    // Читаем файлы библиотеки
    val m = reader.readLine().toInt()
    val files = Array(m) { reader.readLine() }

    // Читаем запросы
    val q = reader.readLine().toInt()
    val queries = Array(q) { reader.readLine() }

    // Определяем удалённые файлы
    val deletedFiles = mutableListOf<Pair<String, String>>() // Путь и расширение
    for (file in files) {
        for (blackDir in blacklist) {
            if (file.startsWith(blackDir)) {
                val ext = file.substring(file.lastIndexOf("."))
                deletedFiles.add(Pair(file, ext))
                break
            }
        }
    }

    // Обрабатываем запросы
    for (queryDir in queries) {
        val extCount = mutableMapOf<String, Int>()
        for ((file, ext) in deletedFiles) {
            if (file.startsWith(queryDir)) {
                extCount[ext] = extCount.getOrDefault(ext, 0) + 1
            }
        }

        // Выводим результат
        writer.write("${extCount.size}\\n")
        for ((ext, count) in extCount) {
            writer.write("$ext: $count\\n")
        }
    }

    reader.close()
    writer.close()
}