Решение
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()
}