https://coderun.yandex.ru/problem/tableau/description Легкая

Условие

Вы работаете в компании, которая изготавливает электронные табло для различных видов спорта: футбола, волейбола, баскетбола. Табло отображает счёт между двумя командами во время матча в формате A : B, где A — количество очков первой команды, а B — количество очков второй команды.

Табло записывает изменение в очках, и игрока, который заработал очки команде. От вас требуется добавить в табло возможность определять, какой игрок заработал больше всех очков по итогам матча.

В начале игры у обеих команд 0 очков. В рамках задачи не требуется отслеживать принадлежность игроков к командам −− иначе говоря, если игрок забил гол и в те, и в другие ворота, итоговая статистика с табло должна посчитать ему 2 заработанных очка.

Примеры

Ввод: 2 Alice Bob 5 1:0 Alice 1:1 Bob 2:1 Alice 4:1 Alice 4:5 Bob Вывод: Bob 5

Ввод: 2 Alice Bobby 1 0:2 Bobby Вывод: Bobby 2

Решение

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 players = Array(n) { reader.readLine() }
    
    // Читаем количество событий
    val m = reader.readLine().toInt()
    
    // Карта для подсчёта очков каждого игрока
    val scores = mutableMapOf<String, Int>()
    
    // Обрабатываем события
    var prevA = 0
    var prevB = 0
    repeat(m) {
        val (score, player) = reader.readLine().split(" ", limit = 2)
        val (a, b) = score.split(":").map { it.toInt() }
        
        // Определяем, сколько очков заработал игрок
        val points = when {
            a > prevA -> a - prevA
            b > prevB -> b - prevB
            else -> 0  // На случай ошибки ввода
        }
        
        scores[player] = scores.getOrDefault(player, 0) + points
        prevA = a
        prevB = b
    }
    
    // Находим игрока с максимальным количеством очков
    var maxScore = 0
    var maxPlayer = ""
    
    for ((player, score) in scores) {
        if (score > maxScore || (score == maxScore && player > maxPlayer)) {
            maxScore = score
            maxPlayer = player
        }
    }
    
    writer.write("$maxPlayer $maxScore")
    writer.newLine()

    reader.close()
    writer.close()
}