Автор: | А. Жуплев, А. Кленин | Ограничение времени: | 2 сек | |
Входной файл: | input.txt | Ограничение памяти: | 64 Мб | |
Выходной файл: | output.txt | |||
Максимальный балл: | 100 |
Чтобы наловить шушанчиков, Крокодил Гена отправляется в лес с чемоданом и ружьём, стреляющим усыпляющими дротиками. В лесу он становится в точку с координатами (XG; YG) и начинает внимательно смотреть по сторонам. Как только Гена видит шушанчика, он тут же стреляет в него, и скоро спящий шушанчик оказывается в чемодане Крокодила. Гена всегда стреляет мгновенно и точно. Лес состоит из N деревьев. На плане i-ое дерево можно представить в виде круга с координатами центра (Xi; Yi) и радиусом Ri. Гена видит все точки с координатами (x, y), такие, что отрезок (x; y) − (XG; YG) не пересекает ни одно дерево. Один шушанчик, гуляя по лесу, пришёл в точку с координатами (XS; YS). Услышав, что Крокодил Гена в лесу, он бросился бежать в нору с координатами (XH; YH). Требуется определить, сможет ли шушанчик добраться до норы так, чтобы Гена его не увидел. |
Входной файл состоит из K тестов. В первой строке входного файла содержится число K. Далее следуют описания тестов.
Каждый тест описывается числами XS YS XH YH XG YG N, за которыми следуют N троек чисел Xi Yi Ri.
В выходном файле должно содержаться K строк, каждая из которых должна равняться ESCAPE, если шушанчик из соответствующего теста сможет добраться до норы, или CATCH, если не сможет.
1 ≤ K ≤ 10
− 100 ≤ XS, YS, XH, YH, XG, YG, Xi, Yi ≤ 100
1 ≤ Ri ≤ 100, 0 ≤ N ≤ 100
Деревья не пересекаются и не касаются. Позиции Гены, шушанчика и норы различаются и не находятся внутри деревьев.
Все числа во входном файле целые
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
Сведём исходную задачу к задаче о существовании пути между двумя вершинами (u и v) в графе. Вершинам графа будут соответствовать деревья. Смежность вершин i и j будет означать, что шушанчик может перемещаться вне поля зрения Крокодила между деревьями i и j. Вершинам u и v соответствуют деревья за которыми находятся шушанчик и нора.
Дерево, за которым находится точка p — это дерево, находящееся как можно дальше от Крокодила, но ближе к нему, чем точка p.
Возможный алгоритм реализации: среди всех окружностей, пересекающихся с отрезком SQ (Q — точка, для которой требуется определить дерево, за которым она находится) нужно выбрать такую окружность, что длина отрезка SP максимальна (P - наиболее удалённая от S точка пересечения SQ с окружностью). Если SQ не пересекает ни одной окружности — это означает, что точка Q не находится ни за одним деревом (в этом случае ответом будет CATCH).
Рассмотрим все пары окружностей. Возможны три ситуации взаимного расположения этих пар и точки S:
Возможный алгоритм реализации: Угол, под которым окружность видна из данной точки — угол между касательными к данной окружности, выходящими из точки, поэтому для задания угла видимости достаточно знать полярный угол обоих касательных. Обозначим полярные углы касательных α1, α2 и β1, β2 к одной и второй окружностям соответственно. Для удобства будем считать, что α1 < α2, β1 < β2. Рассмотрим все три ситуации в этих обозначениях (с точностью до перестановки α и β местами):
Оказывается, что изложенные условия существования ребра между двумя вершинами, являются необходимыми, но не достаточными (последний рисунок это демонстрирует). Поэтому будем рассматривать лишь те пары окружностей, между которыми нет никаких других.
Теперь, когда матрица смежности графа построена, для нахождения пути можно запустить, например, поиск в глубину.
α2 < β1 | α1 < β1 < α2 < β2 | α1 < β1 < β2 < α2 и SR < ST | α1 < β1 < β2 < α2 и SR > ST | Существует окружность между двумя рассматриваемыми |