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

Решение

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

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

    // Читаем количество запросов
    val n = reader.readLine().toInt()

    // Словарь для хранения частоты слов
    val wordCount = mutableMapOf<String, Int>()

    // Обрабатываем запросы
    repeat(n) {
        val query = reader.readLine().split(" ")
        when (query[0]) {
            "+" -> {
                // Запрос +count word
                val count = query[1].toInt()
                val word = query[2]
                wordCount[word] = wordCount.getOrDefault(word, 0) + count
            }
            "?" -> {
                // Запрос ?prefix
                val prefix = query[1]
                // Ищем слова с заданным префиксом
                val candidates = wordCount.keys.filter { it.startsWith(prefix) }
                if (candidates.isEmpty()) {
                    // Если слов нет, выводим сам префикс
                    writer.write(prefix)
                } else {
                    // Ищем слово с максимальной частотой и минимальным лексикографически
                    var maxCount = -1
                    var bestWord = ""
                    for (word in candidates) {
                        val count = wordCount[word]!!
                        if (count > maxCount || (count == maxCount && word < bestWord)) {
                            maxCount = count
                            bestWord = word
                        }
                    }
                    writer.write(bestWord)
                }
                writer.newLine()
            }
        }
    }

    reader.close()
    writer.close()
}