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

Решение

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

// Функция преобразования времени в секунды
fun timeToSeconds(time: String): Int {
    val (h, m, s) = time.split(":").map { it.toInt() }
    return h * 3600 + m * 60 + s
}

// Функция преобразования секунд обратно во временную метку
fun secondsToTime(seconds: Int): String {
    val totalSeconds = (seconds % 86400 + 86400) % 86400 // Нормализация времени в пределах суток
    val h = totalSeconds / 3600
    val m = (totalSeconds % 3600) / 60
    val s = totalSeconds % 60
    return String.format("%02d:%02d:%02d", h, m, s)
}

// Функция вычисления точного времени
fun calculateExactTime(a: String, b: String, c: String): String {
    val aSeconds = timeToSeconds(a)
    val bSeconds = timeToSeconds(b)
    val cSeconds = timeToSeconds(c)
    
    // Учитываем переход через полночь
    val duration = if (cSeconds < aSeconds) cSeconds + 86400 - aSeconds else cSeconds - aSeconds
    // Вычисляем сетевую задержку и добавляем к серверному времени
    val exactTimeSeconds = bSeconds + duration / 2 + if (duration % 2 == 1) 1 else 0
    
    return secondsToTime(exactTimeSeconds)
}

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

    // Читаем временные метки
    val a = reader.readLine()
    val b = reader.readLine()
    val c = reader.readLine()
    
    // Вычисляем и выводим точное время
    val result = calculateExactTime(a, b, c)
    writer.write(result)
    
    writer.flush()
    reader.close()
    writer.close()
}