Задать вопрос
@carp123

На плоскости расположены n предметов, их нужно переместить в заданные n позиций. Как это сделать?

На плоскости расположены n предметов, их нужно переместить в заданные n позиций. Неважно, какую позицию какой предмет займёт. Для каждого предмета известна максимальная скорость, с которой его можно перемещать, при этом можно перемещать все предметы одновременно.

Найдите минимальное время, за которое все предметы можно переместить на заданные места.

Входные данные
В первой строке записано целое число n (1 ≤ n ≤ 50).

В следующих n строках записано по 3 целых числа – координаты и максимальная скорость предмета.

В следующих n строках записаны по 2 целых числа – координаты финальных позиций.

Все координаты лежат в диапазоне от 0 до 1000, скорость – от 1 до 1000.

Выходные данные
Выведите одно вещественное число – минимальное время, за которое можно переместить предметы. Погрешность не более 10 - 4.
  • Вопрос задан
  • 350 просмотров
Подписаться 1 Средний 11 комментариев
Пригласить эксперта
Ответы на вопрос 2
trapwalker
@trapwalker
Программист, энтузиаст
Ну вы бы хотя бы присказку какую-то добавили о том как рассуждали, что у вас не получилось и всё такое.
А-то вот решите мне эту задачу, а я думать совсем не хочу.

Давайте, учитесь уже рассуждать. Задачка несложная, видимо олимпиадная, но для каких-нибудь девятых-десятых классов. Хотя че-то, помнится, там посложнее были.

Вот у вас есть 50 точек. И ещё 50 точек. Между каждой парой из них (а пар 50 в квадрате) есть какое-то расстояние. Там написано, что точки на плоскости, а значит расстояния между точками вас учили считать в школе по теореме пифагора.
Если знаете расстояние между точками и знаете скорость каждой точки, значит можно посчитать время.
Осталось что?
Ну думайте.
Этот ресурс не для того, чтобы двоечникам помогать.
Возможно ваши соперники по олимпиаде сейчас сами думают, а вы, позорник, тут халтурите.
Ответ написан
Комментировать
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Как вам уже написали, очень просто получить матрицу нужного времени для перемещения каждого предмета в каждую точку по отдельности (расстояние по теореме Пифагора делить на скорость объекта). Теперь вам надо найти такое минимальное время, что для каждого предмета можно выбрать уникальную точку, до которой время перемещения не больше заданного.

Отсортируйте все N^2 времен. Запустите по ним бинарный поиск. В качестве проверки запускайте алгоритм Куна для поиска максимального паросочетания, если оно оказалось полным - текущая граница подходит или слишком большая. Если максимальное паросочетание не полное - граница слишком мала.
Это решение за O(N^3 log N)

Альтернативное решение - отсортируйте все времена и добавляйте соответсвующее паре точек ребро в граф. Ищите дополняющий путь (обход в глубину из алгоритма куна). Если нашли - расширяйте паросочетание. Как только паросочетание стало полным, последнее добавленное - ребро ваш ответ. Это решение за O(N^4). Для N<50 тоже подходит.

Нужно знать: Графы, обход в глубину, паросочетание в двудольных графах (алгоритм Куна, например), бинарный поиск.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы