Ctrl K

Цепочки отношений

Средняя
Даны известные отношения между переменными: pairs[i] = [a, b] и ratios[i] означают, что a / b = ratios[i]. Имя переменной — короткая строка. Также дан список вопросов asks: asks[j] = [c, d] спрашивает, чему равно c / d. Верните список ответов в порядке вопросов. Если ответ нельзя вывести из известных отношений, на его месте должно стоять -1.0. Переменная, которой нет ни в одном отношении, считается неизвестной — для неё не определено даже отношение к самой себе. Данные непротиворечивы, и делить на ноль не придётся. Ответы сверяются с точностью до 10⁻⁶.
Пример 1
pairs=[["usd", "eur"], ["eur", "gbp"]], ratios=[1.25, 1.2], asks=[["usd", "gbp"], ["gbp", "eur"], ["usd", "yen"]] → [1.5, 0.8333333333333334, -1]

usd / gbp = (usd / eur) · (eur / gbp) = 1.25 · 1.2 = 1.5; gbp / eur = 1 / 1.2 ≈ 0.8333; про yen ничего не известно — -1.0.

Пример 2
pairs=[["a", "b"], ["c", "d"]], ratios=[4.0, 0.5], asks=[["a", "c"], ["d", "c"], ["b", "b"], ["z", "z"]] → [-1, 2.0, 1.0, -1]

a и c не связаны ни одной цепочкой — -1.0. d / c = 2.0. b / b = 1.0, ведь b встречается в данных. А z не встречается нигде, поэтому даже z / z не определено.

Ограничения
  • 1 ≤ len(pairs) ≤ 20, len(ratios) == len(pairs)
  • 0 < ratios[i] ≤ 20
  • 1 ≤ len(asks) ≤ 20
  • Имена — от 1 до 5 символов, строчные латинские буквы и цифры
  • Отношения не противоречат друг другу
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиШарик и лунка СложнаяКратчайший путь катящегося шарика СредняяСклеить карточки контактов СредняяЦепочки синонимов СредняяПерестановки по связям Средняя
загружаем Python…
Вход
pairs=[["usd", "eur"], ["eur", "gbp"]], ratios=[1.25, 1.2], asks=[["usd", "gbp"], ["gbp", "eur"], ["usd", "yen"]]
Ожидается
[1.5, 0.8333333333333334, -1]

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