0013. SplitterGun

Имя входного файла: splgun.in
Имя выходного файла: splgun.out
Ограничение по времени: 6 s
Ограничение по памяти: 64 megabytes

Математику Васе перед экзаменом по геометрии снится страшный сон. Вася стоит на поле брани (плоскости) в точке (x0, y0), и его окружили N кровожадных монстров, расположенных в точках (xi, yi) (i = 1, 2, ..., N). У Васи есть уникальное оружие √ "splittergun". Это оружие стреляет пулей, которая летит параллельно земле с огромной постоянной скоростью, равной 1 у.е. Когда пуля попадает в живого монстра или Васю, ее энергия взрыва преобразуется таким образом, что от точки взрыва разлетаются еще 3 пули, а монстр (или Вася) умирает. Новые пули движутся с той же скоростью, что и взорвавшаяся. Одна из этих пуль продолжает траекторию породившей ее пули, а остальные две движутся перпендикулярно этому направлению, в разные стороны. Можно считать, что взрыв происходит мгновенно. Так как пули летят очень быстро, можно считать, что все монстры и Вася стоят на месте.

Проснувшись, Вася хочет проанализировать свой сон, и узнать, кто из монстров погибнет и в какой момент времени, а также попадет ли пуля в него самого. Если пуля попадает в уже убитого монстра или Васю, то она пролетает прямо. Если две пули одновременно попадают в монстра, то они обе взрываются. Столкновением пуль в полете можно пренебречь. Можно считать, что скорость пули √ одна единица расстояния в единицу времени.

Формат входного файла

В первой строке входного файла три целых числа N, Dx, Dy. N - количество монстров (1 ≤ N ≤ 100000), (Dx, Dy) √ координаты вектора направления Васиного выстрела. В последующих N+1 строках заданы пары чисел √ координаты Васи и монстров. Координаты всех точек по модулю не превосходят 10000.

Формат выходного файла

В выходной файл выведите с точностью до четырех знаков после десятичной точки N+1 вещественных чисел: в первой строке время, когда будет убит Вася, а в следующих N строках время смерти каждого монстра в единицах времени. Выведите -1.0000, если Вася или монстр выжил.

Пример:

splgun.insplgun.out
1 1 0 0 0 1 0 -1.0000 1.0000
3 1 0 0 0 1 0 1 1 0 1 4.0000 1.0000 2.0000 3.0000


Источник: Командное школьное первенство Республики Карелия по программированию, май 2008.

Обсудить       Отправить решение



Версия для печати