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