Ctrl K

Когда роботы догонят друг друга

Сложная
По одному рельсу в одну сторону едут роботы. robots[i] = [position, speed]: робот i стартует в точке position (в метрах от начала рельса) и едет со скоростью speed м/с. Роботы перечислены в порядке возрастания стартовой позиции, и все позиции различны. Роботов считаем точками. Когда робот догоняет того, кто едет прямо перед ним, они сцепляются и дальше едут вместе, со скоростью самого медленного из сцепившихся. Верните массив, где i-й элемент — момент в секундах, когда робот i догонит робота, едущего прямо перед ним, или -1, если этого не случится никогда. Ответ засчитывается, если отличается от точного не больше чем на 10⁻⁵.
Пример 1
robots=[[2, 3], [5, 1], [6, 2]] → [1.5, -1, -1]

Робот 0 догоняет робота 1 через (5 − 2) / (3 − 1) = 1.5 секунды. Робот 1 медленнее робота 2 и никогда его не догонит, робот 2 последний впереди — у обоих -1.

Пример 2
robots=[[1, 4], [3, 3], [4, 1]] → [1.0, 0.5, -1]

Робот 1 догоняет робота 2 через 0.5 с, и дальше они едут вместе со скоростью 1. Робот 0 догнал бы робота 1 через 2 с, но тот к тому времени уже замедлился: на деле они встречаются через 1 секунду, в точке 5.

Пример 3
robots=[[10, 7]] → [-1]
Ограничения
  • 1 ≤ len(robots) ≤ 10⁵
  • 1 ≤ position, speed ≤ 10⁶
  • Позиции строго возрастают
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВторое большее справа СложнаяДальние прыжки по полю СложнаяПервая общая крыша СложнаяВода между стенами СложнаяСамый большой прямоугольник под силуэтом Сложная
загружаем Python…
Вход
robots=[[2, 3], [5, 1], [6, 2]]
Ожидается
[1.5, -1, -1]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 93 теста на сервере, включая скрытые.