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

Условие

На одном из московских вокзалов билеты продают N касс. Каждая касса работает без перерыва определённый промежуток времени по фиксированному расписанию (одному и тому же каждый день). Требуется определить, на протяжении какого времени в течение суток работают все кассы одновременно.

Примеры

Ввод: 3 1 0 23 0 12 0 12 0 22 0 2 0 Вывод: 120

Ввод: 2 9 30 14 0 14 15 21 0 Вывод: 0

Ввод: 2 14 00 18 00 10 00 14 01 Вывод: 1

Решение

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

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    val n = reader.readLine().toInt() // Количество интервалов
    val minutes = IntArray(1441) // Массив для разметки минут в сутках

    repeat(n) {
        val (h1, m1, h2, m2) = reader.readLine().split(" ").map(String::toInt) // Читаем интервалы
        val start = h1 * 60 + m1 // Начало интервала в минутах
        val end = h2 * 60 + m2 // Конец интервала в минутах

        if (start < end) { // Если интервал находится в одном дне
            minutes[start]++
            minutes[end]--
        } else { // Если интервал переходит через полночь
            minutes[start]++
            minutes[1440]-- // Завершаем день
            minutes[0]++ // Начинаем новый день
            minutes[end]--
        }
    }

    var current = 0 // Текущая сумма интервалов
    var allOpenMinutes = 0 // Количество минут, когда все интервалы активны

    for (i in 0 until 1440) { // Проходим по всем минутам суток
        current += minutes[i]
        if (current == n) { // Если все n интервалов перекрывают эту минуту
            allOpenMinutes++
        }
    }

    writer.write(allOpenMinutes.toString()) // Выводим количество минут, когда все интервалы активны
    writer.newLine()
    writer.flush()
    writer.close()
}