Найближча пара точок

Перегляд у форматі PDF

Надіслати розв'язок

Бали: 12,00 (partial)
Time limit: 1.0s
Memory limit: 256M
Input: stdin
Output: stdout

Problem type

На площині задана сукупність точок. Гарантовано, що різні точки сукупності дійсно різні (ніяка пара точок не збігається). Напишіть програму, яка знаходить мінімальну серед усіх відстаней між цими точками. (Інакше кажучи – відстань між парою найближчих точок). Відстані рахувати у звичайній евклідовій метриці, як ~\sqrt{(x_A-x_B)^2+(y_A-y_B)^2}~.

Вхідні дані

Перший рядок містить цілу кількість точок ~N~ (~2\leqslant N\leqslant 123456~), потім слідують ~N~ рядків, кожен з яких містить розділені пропуском ~x~- і ~y~- координати точки (цілі числа, що не перевищують за модулем ~10^8~ (сто мільйонів)).

Результати

Програма повинна вивести єдине число – знайдену мінімальну відстань. Відповідь буде зараховуватися, якщо відносна похибка не перевищить ~10^{-9}~.

Приклади

Вхід

3
1 4
-1 1
3 2

Результат

2.8284271247

Примітки

Це складна задача. Вкладені цикли for for повинні не проходити за часом, це так задумано. Рекомендований чесний спосіб вирішення цієї задачі оснований на «Поділяй і володарюй». В принципі можливо вкластися в обмеження часу й не зовсім чесним способом, придумавши одну неочевидну оптимізацію вкладених циклів for for, котра працює правильно і швидко не завжди, але майже завжди, й кінець кінцем пройти тести (можливо, не з першого разу). Я навіть згоден поставити бали (у дисципліну «Алгоритми і структури даних», не тут на сайті) і за одне, і за інше (за «Поділяй і володарюй» більші, за пропихування не зовсім чесної оптимізації, якщо це вдасться, менші).


Коментарі

Please read the guidelines before commenting.


Ще немає коментарів.