https://coderun.yandex.ru/problem/metro/description | Легкая |
---|
На некоторых кросс-платформенных станциях метро (как, например, «Третьяковская») на разные стороны платформы приходят поезда разных направлений. Таня договорилась встретиться с подругой на такой станции, но поскольку подруга приехала из другого часового пояса, то из-за джетлага сильно проспала, и Тане пришлось долго её ждать. Поезда всегда ходят точно по расписанию, и Таня знает, что поезд стоит на платформе ровно одну минуту, а интервал между поездами (время, в течение которого поезда у платформы нет) составляет a a минут для поездов на первом пути и b
минут для поездов на втором пути. То есть на первый путь приезжает поезд и стоит одну минуту, затем в течение a a минут поезда у платформы нет, затем в течение одной минуты у платформы стоит следующий поезд и т.д.
Пока Таня стояла на платформе, она насчитала n
поездов на первом пути и m
поездов на втором пути. Определите минимальное и максимальное время, которое Таня могла провести на платформе, или сообщите, что она точно сбилась со счёта.
Все поезда, которые видела Таня, она наблюдала в течение всей минуты, то есть Таня не приходит и не уходит с платформы посередине той минуты, когда поезд стоит на платформе.
Ввод:
1 3 3 2
Вывод:
5 7
Ввод:
1 5 1 2
Вывод:
-1
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
// Функция вычисляет пересечение временных промежутков, в которые поезда могут встретиться
private fun metro(interval1: Int, interval2: Int, count1: Int, count2: Int): Pair<Int, Int>? {
val minTime1 = interval1 * (count1 - 1) + count1 // Минимальное время первого поезда
val maxTime1 = minTime1 + interval1 * 2 // Максимальное время первого поезда
val minTime2 = interval2 * (count2 - 1) + count2 // Минимальное время второго поезда
val maxTime2 = minTime2 + interval2 * 2 // Максимальное время второго поезда
return if (minTime1 > maxTime2 || maxTime1 < minTime2) {
null // Если поезда не пересекаются
} else {
Pair(maxOf(minTime1, minTime2), minOf(maxTime1, maxTime2)) // Возвращаем интервал пересечения
}
}
fun main() {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
// Читаем входные данные
val interval1 = reader.readLine().toInt()
val interval2 = reader.readLine().toInt()
val count1 = reader.readLine().toInt()
val count2 = reader.readLine().toInt()
val res = metro(interval1, interval2, count1, count2) // Вычисляем временной интервал пересечения
// Выводим результат, либо -1, если пересечения нет
writer.write(res?.let { "${res.first} ${res.second}" } ?: "-1")
writer.newLine()
reader.close()
writer.close()
}