Разбор задачи G. Ограда от пингвинов
Для каждой вершины ограды `T_j` определяем возможные вершины для проведения ребер многоугольника, находя среди самую крайнюю точку среди внутренних вершин за `O(K)` следующим способом:
`Z=P_1`
для всех
`i` от 2 до
`K`
если
`(T_j,Z)\ times\ (T_j,P_i)\ >\ 0` то
`Z=P_i`
(где
`(a,b)\ times\ (a,c)` означает векторное произведение)
Достижимыми из `T_j` будут вершины `T_i` для которых `(T_j,Z)\ times\ (T_j,T_i)\ >\ 0`
Данная проверка может быть выполнена без потери точности с помощью целочисленной арифметики.
Расстояния `R_{i\ j}` между достижимыми вершинами `i` и `j` (где `i\ <\ j`) нужно поместить в матрицу `D` и применить алгоритм Флойда-Уоршелла, чтобы найти кратчайшие расстояния между всеми парами вершин `i\ <\ j`.
Затем нужно найти `min_{i<j,\ i\ ""достижима""\ ""из""\ j}\ R_(j\ i)+D_(i\ j)\ `.
Время работы алгоритма `O(N^3+N*(K+N))`