Плюсануть
Поделиться
Класснуть
Запинить


Олимпиадный тренинг

Вы можете самостоятельно решать эти задачи столько раз, сколько вам это понадобится.
   

C. Древнеберляндский цирк

геометрия математика *2100

Это сейчас все цирки в Берляндии имеют круглую арену диаметром 13 метров, а в древности все было совсем иначе.

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

Недавно ученые Берляндии раскопали останки арены древнего цирка. Ими было найдено всего три столба, остальные были уничтожены временем.

Ваша задача по координатам найденных трех столбов определить, какую наименьшую площадь могла иметь арена этого цирка.

Входные данные

Входной файл состоит из трех строк, каждая из которых содержит пару чисел — координаты столба. Любая из координат не превосходит по абсолютной величине 1000, и задана с 6 знаками после десятичной точки.

Выходные данные

Выведите искомую площадь с точностью не менее 6 знаков после точки. Гарантируется, в оптимальном многоугольнике будет не более 100 вершин.

I. Вращение

*особая задача геометрия математика *1500

Эхсан обожает геометрию! Больше всего ему нравится вращать точки!

Если дана точка на плоскости, Эхсан любит вращать её на k градусов (против часовой стрелки) вокруг начала координат. Каков результат такого вращения?

Входные данные

В первой строке содержится единственное целое число k (0 ≤ k < 360). Во второй строке содержатся два целых числа x и y ( - 1390 ≤ x, y ≤ 1390).

Выходные данные

Выведите два числа — результат вращения. Относительная погрешность вашего ответа не должна превышать 10 - 1.

E. Отдых в теньке

Бинарный поиск геометрия *2400

На плоскости задан источник света. Размеры источника пренебрежимо малы, поэтому его можно считать точкой. Источник движется из точки \((a, s_y)\) в точку \((b, s_y)\) \((s_y < 0)\) по прямой со скоростью равной \(1\) единица в секунду.

Также есть забор, расположенный на оси \(OX\) представленный как \(n\) отрезков \((l_i, r_i)\) (их настоящие координаты тогда \((l_i, 0)\) и \((r_i, 0)\)). Точка \((x, y)\) является находящейся в тени, если отрезок между \((x,y)\) и текущей позицией источника света пересекается с каким-либо отрезком забора или касается его.

Вам заданы \(q\) точек. Для каждой точки посчитайте суммарное время нахождения ее в тени, пока источник света движется из \((a, s_y)\) в \((b, s_y)\).

Входные данные

Первая строка содержит три целых числа через пробел: \(s_y\), \(a\) и \(b\) (\(-10^9 \le s_y < 0\), \(1 \le a < b \le 10^9\)) — соответствующие координаты источника света.

Вторая строка содержит единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество отрезков в заборе.

Следующие \(n\) строк содержат по два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i < r_i \le 10^9\), \(r_{i - 1} < l_i\)) — отрезки в заборе заданные в возрастающем порядке. Отрезки не касаются и не пересекают друг друга.

Следующая строка содержит единственное целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество обрабатываемых точек.

Следующие \(q\) строк содержат по 2 целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le 10^9\)) — координаты точек.

Выходные данные

Выведите \(q\) строк. \(i\)-я строка должна содержать единственное действительное число — суммарное время нахождения в тени \(i\)-й точки, пока источник света движется из \((a, s_y)\) в \((b, s_y)\). Ответ будет считаться корректным, если его абсолютная или относительная погрешность не превосходит \(10^{-6}\).

Примечание
  • 1-я точка все время в тени;
  • 2-я точка в тени, пока источник движется от \((3, -3)\) до \((6, -3)\);
  • 3-я точка в тени, когда источник находится в точке \((6, -3)\).
  • 4-я точка в тени, пока источник движется от \((1, -3)\) до \((2.5, -3)\) и в точке \((6, -3)\);
  • 5-я точка в тени, пока источник движется от \((1, -3)\) до \((2.5, -3)\) и от \((5.5, -3)\) до \((6, -3)\);

E. Сверхзвуковая ракета

геометрия Строки хэши *2400

После войны сверхзвуковая ракета стала самым популярным видом общественным транспортом.

Каждая сверхзвуковая ракета состоит из двух «двигателей». Каждый двигатель представляет собой множество из «источников питания». Первый двигатель состоит из \(n\) источников питания, а второй из \(m\). Источник питания можно представить как точку \((x_i, y_i)\) на 2-D плоскости. Все точки в каждом двигателе различные.

Вы можете влиять на каждый двигатель отдельно. Есть два действия, которые вы можете делать с каждым двигателем. Вы можете делать каждое действие столько раз, сколько хотите.

  1. Каждый источник питания двигателя \((x_i, y_i)\) станет \((x_i+a, y_i+b)\), где \(a\) и \(b\) могут быть любыми действительными числами. Другими словами, все источники питания будут смещены.
  2. Каждый источник питания двигателя \((x_i, y_i)\) станет \((x_i \cos \theta - y_i \sin \theta, x_i \sin \theta + y_i \cos \theta)\), где \(\theta\) может быть любым действительным числом. Другими словами, все источники питания будут повернуты.

Двигатель работает следующим способом: после того, как оба двигателя будут заряжены, их источники питания объединяются вместе (координаты источников питания разных двигателей могут совпадать). А именно, если есть две точки питания \(A(x_a, y_a)\) и \(B(x_b, y_b)\), то для каждого действительного числа \(k\), такого что \(0 \lt k \lt 1\), будет сгенерирован новый источник питания \(C_k(kx_a+(1-k)x_b,ky_a+(1-k)y_b)\). Эта процедура будет повторена еще раз со всеми новыми и старыми источниками. После этого будет сгенерировано «силовое поле» из всех источников питания.

Сверхзвуковая ракета будет «безопасна» тогда и только тогда, когда после всех ваших действий на генераторы, уничтожение любого источника питания не изменит силовое поле (в сравнении со случаем, когда ни один источник питания не был уничтожен). Два силовые поля считаются одинаковыми тогда и только тогда, когда каждый источник питания в одном силовом поле принадлежит и второму.

У вас есть сверхзвуковая ракета, проверьте безопасна ли она.

Входные данные

Первая строка содержит два целых числа \(n\), \(m\) (\(3 \le n, m \le 10^5\)) — количество источников питания в каждом двигателе.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(0\leq x_i, y_i\leq 10^8\)) — координаты \(i\)-го источника питания в первом двигателе.

Каждая из следующих \(m\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(0\leq x_i, y_i\leq 10^8\)) — координаты \(i\)-го источника питания во втором двигателе.

Гарантируется, что нет двух или более источников питания, которые находятся в одной точке, в каждом двигателе.

Выходные данные

Выведите «YES», если сверхзвуковая ракета безопасна, иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание
Те точки, которые находятся близко друг к другу, на самом деле совпадают.

Сначала, вы можете использовать второе действие над первым двигателем, где \(\theta = \pi\) (вы поверните все точки на \(180\) градусов).

После операции источники питания в первом двигателе будут иметь координаты \((0, 0)\), \((0, -2)\) и \((-2, 0)\).

Потом, вы можете использовать первое действие над вторым двигателем, где \(a = b = -2\).

После операции источники питания во втором двигателе будут иметь координаты \((-2, 0)\), \((0, 0)\), \((0, -2)\) и \((-1, -1)\).

Можно заметить, что, уничтожая любую точку, силовое поле будет всегда выпуклым треугольником с координатами \((0, 0)\), \((-2, 0)\), \((0, -2)\).

Во втором примере не имеет значения как вы будете менять, во втором двигателе всегда будет источник питания, который изменит силовое поле, если будет уничтожен.

D. Большой треугольник

Бинарный поиск геометрия сортировки *2700

Есть странная особенность: если соединить между собой города Ростов, Таганрог, Шахты, то получится треугольник
«Невероятно, но факт»

В ЛКШ приезжают ученики из самых разных уголков России и зарубежья. Вы отметили на карте все города, откуда приехали участники ЛКШ.

Затем, вы решили подготовить интересную инфографику на основе этой карты. Первое, что вы захотели сделать — это найти три города на этой карте, так чтобы получился треугольник площади ровно \(S\).

Входные данные

В первой строке входных данных находится два целых числа \(n\) и \(S\) (\(3 \le n \le 2000\), \(1 \le S \le 2 \cdot 10^{18}\)) — количество городов на карте и требуемая площадь треугольника.

В следующую \(n\) строках находится описание городов, по одной на строке. Каждый город описывается своими целыми координатами \(x_i\), \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)).

Гарантируется, что все города находятся в различных точках. Также гарантируется, что никакие три города не лежат на одной прямой.

Выходные данные

Если решения не существует — выведите «No» (без кавычек).

Иначе выведите «Yes» (без кавычек), после чего выведите три пары координат \((x, y)\) — координаты городов, образующих треугольник площади \(S\).

F. Непересекающиеся треугольники

геометрия *2700

Точка принадлежит треугольнику, если она лежит в треугольнике или на его границе. Два треугольника не пересекаются, если на плоскости нет точки, принадлежащей обоим треугольникам.

Вам даны \(n\) точек на плоскости. Никакие две из них не совпадают, никакие три не лежат на одной прямой.

Найдите количество различных способов выбрать два непересекающихся треугольника с вершинами в данных точках. Два способа, отличающиеся только перестановкой первого и второго треугольника или перестановкой вершин в треугольниках считаются одинаковыми.

Входные данные

Первая строка содержит одно целое число \(n\) (\(6 \le n \le 2000\)) — количество точек.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(|x_i|, |y_i| \le 10^9\)) — координаты очередной точки.

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

Выходные данные

Выведите одно целое число — количество способов выбрать два непересекающихся треугольника.

Примечание

В первом примере есть шесть пар непересекающихся треугольников, они показаны на рисунке ниже.

Остальные пары треугольников пересекаются, например так:

C. Прямоугольники

геометрия реализация сортировки *1600

На плоскости даны \(n\) прямоугольников, которые заданы координатами своих левого нижнего и правого верхнего углов. Известно, что некоторые \((n-1)\) из этих \(n\) прямоугольников имеют хотя бы одну общую точку. Точка принадлежит прямоугольнику, если она находится строго внутри прямоугольника или на его границе.

Найдите любую точку с целыми координатами, которая принадлежит хотя бы \((n-1)\) прямоугольнику из заданных.

Входные данные

В первой строке задано число \(n\) (\(2 \le n \le 132\,674\)) — количество прямоугольников.

В следующих \(n\) строках заданы прямоугольники четверками целых чисел: \(x_1\), \(y_1\), \(x_2\), \(y_2\) (\(-10^9 \le x_1 < x_2 \le 10^9\), \(-10^9 \le y_1 < y_2 \le 10^9\)).

Выходные данные

Выведите два целых числа \(x\), \(y\) — координаты произвольной точки на плоскости, принадлежащей хотя бы \((n-1)\) прямоугольнику.

Примечание

Рисунок ниже показывает расположение прямоугольников в первом и втором тестах из примера. Возможные ответы выделены.

Рисунок ниже показывает расположение прямоугольников в третьем и четвертом примерах.

B. Вася и кукурузное поле

геометрия *1100

У Васи есть кукурузное поле, описываемое двумя числами — \(n\) и \(d\). Кукурузное поле можно представить в декартовой системе координат как прямоугольник с углами в точках \((0, d), (d, 0), (n, n - d)\) и \((n - d, n)\).

Пример кукурузного поля при \(n = 7\) и \(d = 2\).

Также Вася знает координаты \(m\) кузнечиков. Кузнечик номер \(i\) находится в точке \((x_i, y_i)\). Так как Вася не любит, когда кузнечики поедают его кукурузу, то про каждого кузнечика Вася хочет знать, находится ли он на поле или нет. Считается, что кузнечик находится на кукурузном поле, если он находится внутри или на границах прямоугольника, описанного выше.

Помогите Васе! Сообщите про каждого кузнечика, находится ли он на кукурузном поле.

Входные данные

Первая строка содержит два целых числа \(n\) и \(d\) (\(1 \le d < n \le 100\)).

Вторая строка содержит одно целое число \(m\) (\(1 \le m \le 100\)) — количество кузнечиков.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i, y_i \le n\)) — положение \(i\)-го кузнечика.

Выходные данные

Выведите \(m\) строк. В \(i\)-й строке выведите «YES», если \(i\)-й кузнечик находится на кукурузном поле. Иначе в \(i\)-й строке выведите «NO».

Вы можете выводить каждую из букв в любом регистре (строчную или заглавную).

Примечание

Кукурузное поле из первого примера изображено на рисунке выше. Внутри него находятся кузнечики \(1\) (с координатами \((2, 4)\)) и \(4\) (с координатами \((4, 5)\)).

Кукурузное поле из второго примера изображено на рисунке ниже. Внутри него находятся кузнечики \(1\) (с координатами \((4, 4)\)), \(3\) (с координатами \((8, 1)\)) и \(4\) (с координатами \((6, 1)\)).

D. Вася и треугольник

геометрия теория чисел *1800

У Васи есть три целых числа \(n\), \(m\) и \(k\). Он хочет найти три целочисленные точки \((x_1, y_1)\), \((x_2, y_2)\), \((x_3, y_3)\) такие что \(0 \le x_1, x_2, x_3 \le n\), \(0 \le y_1, y_2, y_3 \le m\) и площадь треугольника, образованная этими точками равна \(\frac{nm}{k}\).

Помогите Васе! Найдите такие три точки (если возможно). Если существует несколько решений, выведите любое из них.

Входные данные

В единственной строке заданы три целых числа \(n\), \(m\), \(k\) (\(1\le n, m \le 10^9\), \(2 \le k \le 10^9\)).

Выходные данные

Если не существует точек, удовлетворяющих описанным выше условиям, в первой строке выведите «NO».

В противном случае в первой строке выведите «YES». В следующий трех строках выведите по два целых числа \(x_i, y_i\). Если существует несколько решений, выведите любое из них.

Вы можете выводить буквы в любом регистре (строчные или заглавные).

Примечание

В первом примере площадь треугольника равна \(\frac{nm}{k} = 4\). Сам треугольник представлен на рисунке ниже:

Во втором примере не существует ни одного треугольника с площадью \(\frac{nm}{k} = \frac{16}{7}\).

D. Барселонское расстояние

геометрия реализация *1900

В этой задаче мы рассматриваем упрощённую модель города Барселона.

Барселона может быть представлена как плоскость, а её улицы — как прямые вида \(x = c\) и \(y = c\) для любого целого числа \(c\) (то есть, улицы представляют собой прямоугольную сетку). Однако есть кое-что, что отличает Барселону от Манхеттена, а именно, проспект, который называется Avinguda Diagonal (Диагональный проспект) и который может быть представлен на плоскости как множество точек \((x, y)\), удовлетворяющих \(ax + by + c = 0\).

Перемещаться по городу можно только по улицам, в том числе и по Диагональному проспекту. Вам даны точки \(A\) и \(B\) в Барселоне. Найдите минимальное расстояние, которое необходимо пройти, чтобы попасть в точку \(B\) из точки \(A\).

Входные данные

Первая строка содержит три целых числа \(a\), \(b\) и \(c\) (\(-10^9\leq a, b, c\leq 10^9\), at хотя бы одно из чисел \(a\) и \(b\) не равно нулю), задающих Диагональный проспект.

Следующая строчка содержит четыре целых числа \(x_1\), \(y_1\), \(x_2\) и \(y_2\) (\(-10^9\leq x_1, y_1, x_2, y_2\leq 10^9\)), задающих точки \(A = (x_1, y_1)\) и \(B = (x_2, y_2)\).

Выходные данные

Найдите минимальное расстояние, которое необходимо пройти от \(A\) до \(B\). Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Первый пример показан на рисунке ниже слева, второй — справа. Проспект показан синим, начало координат отмечено черной точкой.

E. Покрытые точки

бпф геометрия теория чисел *2400

Задано \(n\) отрезков на декартовой плоскости. Концы каждого отрезка имеют целочисленные координаты. Отрезки могут пересекаться друг с другом. Никакие два отрезка не лежат на одной прямой.

Посчитайте количество различный точек с целочисленными координатами, которые покрыты хотя бы одним отрезком.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 1000\)) — количество отрезков.

В каждой из следующих \(n\) строк записаны по четыре целых числа \(Ax_i, Ay_i, Bx_i, By_i\) (\(-10^6 \le Ax_i, Ay_i, Bx_i, By_i \le 10^6\)) — координаты концов \(A\), \(B\) (\(A \ne B\)) \(i\)-го отрезка.

Гарантируется, что никакие два отрезка не лежат на одной прямой.

Выходные данные

Выведите единственное число — количество различных точек с целочисленными координатами, которые покрыты хотя бы одним отрезком.

Примечание

Картинка для первого примера:

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

Картинка для второго примера:

C. Оптимальный периметр многоугольника

геометрия дп *2100

Есть \(n\) точек на плоскости. Многоугольник, сформированный этими \(n\) точками, строго выпуклый, то есть многоугольник выпуклый и нет трех коллинеарных точек (то есть лежащих на одной прямой). Точки пронумерованы от \(1\) до \(n\) по часовой стрелке.

Определим расстояние между двумя точками \(p_1 = (x_1, y_1)\) и \(p_2 = (x_2, y_2)\) как их манхэттенское расстояние: \(\)d(p_1, p_2) = |x_1 - x_2| + |y_1 - y_2|.\(\)

Более того, определим периметр многоугольника как сумму манхэттенских расстояний между всеми соседними парами точек на нем; если точки на многоугольнике упорядочены как \(p_1, p_2, \ldots, p_k\) \((k \geq 3)\), тогда периметр многоугольника равен \(d(p_1, p_2) + d(p_2, p_3) + \ldots + d(p_k, p_1)\).

Для некоторого параметра \(k\) рассмотрим все многоугольники, которые могут быть сформированы из любых \(k\) точек заданного многоугольникв и не самопересекаются. Для каждого такого многоугольника рассмотрим его периметр. Определим \(f(k)\) как максимальный периметр среди всех таких многоугольников.

Обратите внимание, что при проверке многоугольника на самопересечение, ребра многоугольника рисуются как прямые линии. Например, на следующих рисунках:

В многоугольнике, который изображен посередине, последовательность точек (\(p_1, p_3, p_2, p_4\)) неправильная потому, что многоугольник самопересекается. Правый многоугольник (ребра которого напоминают Манхэттенское расстояние) имеет такую же последовательность и не самопересекается, но мы рассматриваем ребра как прямые отрезки. Правильный способ нарисовать этот многоугольник — это использовать последовательность (\(p_1, p_2, p_3, p_4\)), пример которого можно увидеть на левом рисунке.

Вычислите \(f(3), f(4), \ldots, f(n)\). Другими словами, найдите максимально возможный периметр для каждого количества точек (то есть от \(3\) до \(n\)).

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \leq n \leq 3\cdot 10^5\)) — количество точек.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^8 \leq x_i, y_i \leq 10^8\)) — координаты точки \(p_i\).

Гарантируется, что множество точек выпуклое, все точки различны, они упорядочены по часовой стрелке, и нет трех коллинеарных точек.

Выходные данные

Для каждого \(i\) (\(3\leq i\leq n\)) выведите \(f(i)\).

Примечание

В первом примере для \(f(3)\) есть четыре возможных многоугольника:

  • (\(p_1, p_2, p_3\)) с периметром \(12\).
  • (\(p_1, p_2, p_4\)) с периметром \(8\).
  • (\(p_1, p_3, p_4\)) с периметром \(12\).
  • (\(p_2, p_3, p_4\)) с периметром \(12\).

А для \(f(4)\) есть всего один многоугольник, который состоит из всех точек. Его периметр \(14\).

Во втором примере есть только один многоугольник, его периметр \(8\).

E. Древняя цивилизация

геометрия Конструктив *3200

На недавно открытой планете первопроходцы нашли разрушенные поселения двух различных цивилизаций в разных местах. Мы будем считать, что все этим места можно представить как точки на плоскости. Они хотят узнать больше об этих цивилизациях, но для изучения местности им нужно построить дороги между некоторыми поселениями. Но, как всегда, есть некоторые ограничения:

  1. между любой парой поселений, относящихся к одной и той же цивилизации, должен быть ровно один путь по построенным дорогам;
  2. никакие два поселения, относящиеся к разным цивилизациям, не должны быть соединены дорогой (первопроходцы не хотят случайно спутать цивилизации, которые изучают);
  3. каждая дорога должна быть отрезком прямой;
  4. так как строить перекрестки слишком дорого, то никакие две дороги не должны пересекаться (то есть общие точки у дорог могут быть только в каком-то из поселений).

Конечно, положения всех поселений различны, но у первопроходцев есть для вас еще одна отличная новость: никакие три поселения не лежат на одной прямой!

Помогите первопроходцами и найдите решение их задачи, либо сообщите, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(n\) \((1 \leq n \leq 10^3)\) — количество обнаруженных поселений.

Каждая из следующих \(n\) строк содержит три целых числа \(x, y, c\) \((0 \leq x, y \leq 10^4, c \in \{0, 1\})\) — координаты поселения и номер цивилизации, к которой оно относится.

Выходные данные

В первой строке выведите число дорог, которые необходимо построить.

В следующих строках выведите все пары поселений (нумерация с \(0\)), которые должны быть соединены дорогами.

Если невозможно построить дороги так, чтобы выполнялись все условия, выведите «Impossible» (без кавычек).

F. Загадочная дама

геометрия математика *3400

Ани и Борна играют в короткую игру на многочлене двух переменных. Многочлен имеет специальный вид: одночлены без коэффициентов фиксированы, а на месте всех коэффициентов есть пропуски, которые нужно заполнить, например \(\) \_ xy + \_ x^4 y^7 + \_ x^8 y^3 + \ldots \(\)

Борна будет заполнять пропуски положительными числами. Он хочет, чтобы многочлен был ограничен снизу, т. е. его цель — сделать так, чтобы существовало вещественное число \(M\) такое, что значение многочлена в любой точке больше \(M\).

Ани вредная, поэтому она хочет, чтобы многочлен был неограничен. Кроме сердца Борны, она также может украсть части многочлена. Однако, Ани лишь чуть-чуть воришка, поэтому она может украсть не более одного одночлена перед тем, как Борна заполнит пропуски.

Если Ани и Борна сделают оптимально свой единственный ход, то кто выиграет?

Входные данные

Первая строка содержит целое положительное число \(N\) \((2 \leq N \leq 200\, 000)\), обозначающее количество одночленов в начальном многочлене.

Каждая из следующих \(N\) строк содержит описание многочлена: \(k\)-я строка содержит два целых числа \(a_k\) и \(b_k\) \((0 \leq a_k, b_k \leq 10^9\)), которые означают, что начальный многочлен имеет одночлен \(\_ x^{a_k} y^{b_k}\). Гарантируется, что для \(k \neq l\) либо \(a_k \neq a_l\), либо \(b_k \neq b_l\).

Выходные данные

Если Борна всегда может выбрать коэффициенты таким образом, что бы полученный многочлен всегда был ограничен снизу, независимо от того, какой многочлен украдет Ани, выведите «Borna». Иначе выведите «Ani».

Выводить кавычки не нужно.

Примечание

В первом примере начальный многочлен выглядит как \(\_xy+ \_x^2 + \_y^2\). Если Ани украдет одночлен \(\_y^2\), то Борне достанется многочлен \(\_xy+\_x^2\). Какие бы положительные целые числа он не написал в пропуски, \(y \rightarrow -\infty\) и \(x := 1\) устремляет значение выражения в минус бесконечность.

Во втором примере начальный многочлен имеет вид \(\_1 + \_x + \_x^2 + \_x^8\). Можно показать, что, какой бы одночлен Ани не украла, Борна всегда может выиграть.

I. Скажи привет

геометрия *2300

Два друга путешествуют по галактике Баббл. Они шлют друг другу сигнал «Привет!», если расстояние между ними меньше либо равно \(d_1\), а также

  • это первый раз, когда они могут послать сигнал,
  • или с момента, когда они последний раз посылали сигнал, был момент времени, когда расстояние между ними было больше, чем \(d_2\).

Вам нужно посчитать количество раз, когда друзья пошлют друг другу сигнал «Привет!». Вам даны \(N\) моментов времени и позиции друзей в эти моменты. Каждый из друзей мог оставаться неподвижным между двумя моментами времени, но если двигался, то с постоянной скоростью в постоянном направлении.

Входные данные

Первая строка содержит одно целое число \(N\) (\(2 \leq N \leq 100\,000\)) — количество моментов времени.

Вторая строка содержит два целых числа \(d_1\) и \(d_2 \ (0 < d_1 < d_2 < 1000)\).

Каждая из следующих \(N\) строк содержит четыре целых числа \(A_x,A_y,B_x,B_y\) (\(0 \leq A_x, A_y, B_x, B_y \leq 1000\)) — координаты друзей A и B в соответствующий момент.

Выходные данные

Выведите одно целое число — количество раз, когда друзья отправили друг другу «Привет!».

Примечание

Пояснение к примеру: друзья пошлют сигнал друг другу два раза: первый раз из точек \(A2\) и \(B2\) соответственно, а второй раз — когда A будет двигаться из \(A3\) в \(A4\), а B находиться в точке \(B3=B4\).

B. Покрыть точки

геометрия математика *900

Даны \(n\) точек на плоскости, \((x_1,y_1), (x_2,y_2), \ldots, (x_n,y_n)\).

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

Входные данные

В первой строке записано единственное целое число \(n\) (\(1 \leq n \leq 10^5\)).

Каждая из следующих \(n\) строк содержит два числа \(x_i\) и \(y_i\) (\(1 \leq x_i,y_i \leq 10^9\)).

Выходные данные

Найдите минимально возможную длину кратчайшей стороны треугольника. Можно доказать, что она всегда будет целым числом.

Примечание

Изображение первого примера:

Изображение второго примера:

D. Заповедник

Бинарный поиск геометрия Тернарный поиск *2200

В лесу, который мы представляем как плоскость, живут \(n\) редких животных. Животное номер \(i\) имеет логово в точке \((x_{i}, y_{i})\). В целях защиты этих животных было решено создать заповедник, имеющий форму круга, в котором должны находиться все логова редких животных.

Также через лес протекает единственная река, из которой пьют все животные, в связи с чем она должна иметь хотя бы одну общую точку с заповедником. С другой стороны, по реке постоянно ходят корабли, чему может помешать наличие более чем одной общей точки реки и заповедника. Таким образом, необходимо, чтобы заповедник и река имели ровно одну общую точку.

Для вашего удобства ученые уже сделали преобразование координат такое, что теперь река задана уравнением \(y = 0\). Определите, возможно ли построить заповедник и найдите минимальный радиус заповедника, удовлетворяющего заданным условиям.

Входные данные

В первой строке дано целое число \(n\) (\(1 \le n \le 10^5\)) — количество животных.

В каждой из следующих \(n\) строк находятся два целых числа \(x_{i}\), \(y_{i}\) (\(-10^7 \le x_{i}, y_{i} \le 10^7\)) — координаты логова \(i\)-го животного. Гарантируется, что \(y_{i} \neq 0\), а также, что никакие два расположения логова не совпадают.

Выходные данные

Если заповедник невозможно построить, выведите \(-1\). Иначе выведите одно вещественное число — минимальный радиус заповедника. Ваш ответ будет засчитан, если абсолютная или относительная погрешность вашего ответа не превышает \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

В первом примере оптимально построить заповедник радиуса \(0.5\) с центром в точке \((0,\ 0.5)\).

Во втором примере невозможно построить заповедник.

В третьем примере оптимально построить заповедник радиуса \(\frac{5}{8}\) с центром в точке \((\frac{1}{2},\ \frac{5}{8})\).

E. Космические спасатели

геометрия Тернарный поиск *2100

В галактике находится n планет, на каждой из которых обитают множество различных живых существ. И каждое из них может оказаться в беде! Космические спасатели прекрасно знают об этом и всегда готовы помочь каждому, кому эта помощь действительно понадобится. Стоит только позвать.

Сейчас космические спасатели планируют построить самую большую в истории галактики спасательную базу, однако месторасположение будущей базы пока еще не определено. Поскольку помощь иногда требуется абсолютно неотложно, спасатели стремятся найти такую точку в галактике, из которой можно было бы добраться до самой удаленной планеты за наименьшее возможное время. Другими словами, необходимо найти такую точку в пространстве, чтобы расстояние от нее до самой удаленной от нее планеты было наименьшим из всех возможных точек в пространстве. К сожалению, они не в силах решить такую задачу.

Поскольку планеты достаточно удалены друг от друга, их можно считать точками в евклидовом трехмерном пространстве. Расстояние между точками (xi, yi, zi) и (xj, yj, zj) вычисляется по формуле . Спасательная база может располагаться в любой точке пространства, в том числе, совпадать с какой либо из планет.

Галактика в опасности! Спасите космических спасателей и укажите им искомую точку.

Входные данные

В первой строке входного файла содержится целое число n — количество планет (1 ≤ N ≤ 100). Каждая из последующих n строк содержит информация о планетах. i-я из этих строк содержит три целых числа xi, yi, zi — координаты i-й планеты ( - 104 ≤ xi, yi, zi ≤ 104, 1 ≤ i ≤ n). Никакие две планеты не совпадают.

Выходные данные

В первой строке выходного файла следует вывести три вещественных числа через пробел x0, y0, z0 — координаты будущей базы. Если существует несколько решений, то разрешается вывести любое. Ответ будет засчитан, если расстояние от данной точки до самой удаленной планеты будет отличаться от результата жюри не более чем на 10 - 6 по абсолютному или относительному значению.

C. Гномы, шляпы и экстрасенсорные способности

Бинарный поиск геометрия интерактив Конструктив *1900

Это интерактивная задача.

В былые времена гномы пытались развить у себя экстрасенсорные способности:

  • В абсолютно тёмную пещеру заводили n гномов.
  • На каждого гнома надевали шляпу — белую или чёрную. Гномы в пещере не видели цветов своих шляп и шляп других гномов.
  • Гномы по очереди выходили из пещеры на поляну и садились на произвольное места. При этом, выходя из пещеры, каждый гном видел цвета шляп всех гномов, вышедших ранее. Тем не менее, он не видит цвет собственной шляпы и никто из других гномов ему этот цвет не сообщает.
  • Задача состояла в том, чтобы все гномы разошлись в две стороны — в одну те, кто носят белые шляпы и в другую — чёрные.

За многие века гномы научились безошибочно выбирать для себя место на поляне. Получится ли подобное у вас?

Вас просят по очереди назвать n различных точек на плоскости с целочисленными координатами. После указания очередной точки вам будет сообщён её цвет — чёрный или белый. Ваша задача — добиться того, чтобы названные точки можно было разбить прямой так, чтобы точки одного цвета лежали по одну сторону от прямой, точки разного цвета — по разные стороны и никакие точки не лежали на прямой. Также вы должны предъявить такую прямую.

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

Протокол взаимодействия

В первой строке стандартного потока ввода дано целое число n (1 ≤ n ≤ 30) — количество точек, которое должна назвать ваша программа.

Затем n раз ваша программа должна вывести по два целых числа x и y (0 ≤ x ≤ 109, 0 ≤ y ≤ 109) — координаты очередной точки. Все выведенные вами точки должны быть различными.

В ответ на каждую пару координат ваша программа получит на вход строку «black», если точка имеет чёрный цвет, или «white», если точка имеет белый цвет.

После того, как все n точек будут обработаны, вы должны вывести четыре целых числа x1, y1, x2 и y2 (0 ≤ x1, y1 ≤ 109, 0 ≤ x2, y2 ≤ 109) — координаты точек (x1, y1) и (x2, y2), через которые проходит прямая, разделяющая n точек на белые и чёрные. Точки (x1, y1) и (x2, y2) не должны совпадать.

Взломы

Чтобы взломать решение используйте следующий формат. Первая строка теста должна содержать слово «hack», во второй строке выведите целое число n, на третьей строке выведите последовательность из 0 и 1 — цвета точек, которые будут сообщены взламываемому решению. В отличии от тестов жюри, цвета точек во взломах заранее зафиксированы. Разумеется, взламываемое решение не будет заранее знать цвета в взломе.

Например, взлом соответствующий первому тесту из условия выглядит так:


hack
5
0 0 1 1 0
Примечание

В условии в примере взаимодействия вводимые и выводимые данные расположены для удобства восприятия в хронологическом порядке, при реальном взаимодействии никакие «лишние» переводы строк возникать не должны.

Иллюстрация к первому примеру.

A. Сделай треугольник!

геометрия математика Перебор *800

У Маши есть три палочки длиной \(a\), \(b\) и \(c\) сантиметров. За одну минуту Маша может увеличить длину любой из палочек на один сантиметр. Ломать палочки не разрешается.

За какое минимальное время Маша сможет собрать треугольник положительной площади, сторонами которого будут палочки, если концы палочек должны быть вершинами треугольника?

Входные данные

В единственной строке даны три целых числа \(a\), \(b\) и \(c\) (\(1 \leq a, b, c \leq 100\)) — длины палочек, которые есть у Маши.

Выходные данные

Выведите одно целое число — минимальное количество минут, за которое Маша сможет сделать треугольник положительной площади из своих палочек.

Примечание

В первом примере Маша может сделать треугольник из палочек, не меняя длины ни одной из палочек.

Во втором примере Маша не может построить треугольник положительной площади из палочек, которые у нее есть, но может удлинить палочку длиной \(2\) сантиметра на один сантиметр за одну минуту, после чего построить треугольник из палочек со сторонами \(3\), \(3\) и \(5\) сантиметров.

В третьем примере Маша может за \(33\) минуты удлинить одну из палочек длиной \(10\) сантиметров на \(33\) сантиметра, а затем за \(48\) минут удлинить другую палочку длиной \(10\) сантиметров на \(48\) сантиметров. Таким образом, Маша может собрать треугольник со сторонами \(43\), \(58\) и \(100\) сантиметров за \(81\) минуту. Можно показать, что Маша не сможет получить треугольник за меньшее время.

E. Дартс

геометрия Теория вероятностей *2700

Ночью после получения дипломов уже бывшие студенты German University in Cairo (GUC) играют в дартс. В отсутствие настоящей мишени ее роль успешно выполняют фотографии руководства университета.

На стене размещены n прямоугольных фотографий. Фотографии пересекаются различными способами. Некоторые из них оказались помещены на стену поверх других. Возможно даже, что несколько фотографий представлены одним и тем же прямоугольником. Фотографии не обязательно висят горизонтально и вертикально, они могут быть повернуты на произвольный угол.

Количество очков за один бросок равно количеству фотографий, которые проткнул дротик.

Фатма бросила дротик, но ее счет не был записан. Единственное, что она помнит — это то что ее дротик проткнул не менее одной фотографии.

В предположении, что плотность распределения вероятности попадания дротика одинакова по всей площади стены, какого среднее количество очков, которые должна получить Фатма?

Входные данные

На первой строке записано целое число n (1 ≤ n ≤ 500) — количество фотографий на стене. Последующие n строк задают фотографии. Каждая фотография задается 8 целыми числами (координатами 4 вершин прямоугольника): x1, y1, x2, y2, x3, y3, x4, y4.

Каждая фотография представляет собой прямоугольник ненулевой площади. Все координаты являются целыми числами, не превосходящими по модулю 104. Координаты вершин каждого прямоугольника заданы в порядке обхода этого прямоугольника по или против часовой стрелки.

Выходные данные

Выведите среднее количество очков за бросок. Ответ считается верным, если абсолютная или относительная погрешность не превосходит 10 - 6.

M. Algoland and Berland

геометрия Конструктив разделяй и властвуй *3000

Once upon a time Algoland and Berland were a single country, but those times are long gone. Now they are two different countries, but their cities are scattered on a common territory.

All cities are represented as points on the Cartesian plane. Algoland consists of \(a\) cities numbered from \(1\) to \(a\). The coordinates of the \(i\)-th Algoland city are a pair of integer numbers \((xa_i, ya_i)\). Similarly, Berland consists of \(b\) cities numbered from \(1\) to \(b\). The coordinates of the \(j\)-th Berland city are a pair of integer numbers \((xb_j, yb_j)\). No three of the \(a+b\) mentioned cities lie on a single straight line.

As the first step to unite the countries, Berland decided to build several bidirectional freeways. Each freeway is going to be a line segment that starts in a Berland city and ends in an Algoland city. Freeways can't intersect with each other at any point except freeway's start or end. Moreover, the freeways have to connect all \(a+b\) cities. Here, connectivity means that one can get from any of the specified \(a+b\) cities to any other of the \(a+b\) cities using freeways. Note that all freeways are bidirectional, which means that one can drive on each of them in both directions.

Mayor of each of the \(b\) Berland cities allocated a budget to build the freeways that start from this city. Thus, you are given the numbers \(r_1, r_2, \dots, r_b\), where \(r_j\) is the number of freeways that are going to start in the \(j\)-th Berland city. The total allocated budget is very tight and only covers building the minimal necessary set of freeways. In other words, \(r_1+r_2+\dots+r_b=a+b-1\).

Help Berland to build the freeways so that:

  • each freeway is a line segment connecting a Berland city and an Algoland city,
  • no freeways intersect with each other except for the freeway's start or end,
  • freeways connect all \(a+b\) cities (all freeways are bidirectional),
  • there are \(r_j\) freeways that start from the \(j\)-th Berland city.
Input

Input contains one or several test cases. The first input line contains a single integer number \(t\) (\(1 \le t \le 3000\)) — number of test cases. Then, \(t\) test cases follow. Solve test cases separately, test cases are completely independent and do not affect each other.

Each test case starts with a line containing space-separated integers \(a\) and \(b\) (\(1 \le a, b \le 3000\)) — numbers of Algoland cities and number of Berland cities correspondingly.

The next line contains \(b\) space-separated integers \(r_1, r_2, \dots, r_b\) (\(1 \le r_b \le a\)) where \(r_j\) is the number of freeways, that should start in the \(j\)-th Berland city. It is guaranteed that \(r_1+r_2+\dots+r_b=a+b-1\).

The next \(a\) lines contain coordinates of the Algoland cities — pairs of space-separated integers \(xa_i, ya_i\) (\(-10000 \le xa_i, ya_i \le 10000\)). The next \(b\) lines contain coordinates of the Berland cities — pairs of space-separated integers \(xb_i, yb_i\) (\(-10000 \le xb_i, yb_i \le 10000\)). All cities are located at distinct points, no three of the \(a+b\) cities lie on a single straight line.

Sum of values \(a\) across all test cases doesn't exceed \(3000\). Sum of values \(b\) across all test cases doesn't exceed \(3000\).

Output

For each of the \(t\) test cases, first print "YES" if there is an answer or "NO" otherwise.

If there is an answer, print the freeway building plan in the next \(a+b-1\) lines. Each line of the plan should contain two space-separated integers \(j\) and \(i\) which means that a freeway from the \(j\)-th Berland city to the \(i\)-th Algoland city should be built. If there are multiple solutions, print any.

E. Защита от дождя

Бинарный поиск геометрия *3500

Многие мечтают о кабриолете. Некоторые кабриолеты, впрочем, вообще не имеют крыши (у остальных крыша складная). Поэтому известный изобретатель Мелон Аск решил разработать защиту от дождя для кабриолетов.

Рабочее пространство данного механизма расположено над головой водителя. Его главная часть — две параллельные рейки, по которым двигаются выступы, на которые, в свою очередь, натянута растяжимая верёвка. Для простоты представим эту констукцию в виде пары параллельных отрезков на плоскости, на каждом отрезке есть по точке, которые являются концами отрезка; и эти точки можно двигать по рейкам-отрезкам.

Алгоритмическая составляющая этого механизма обнаруживает капли дождя, летящие в кабриолет, и определяет, где и когда они будут в рабочей плоскости механизма. Для каждой дождинки в заданный момент верёвка должна проходить через заданную точку плоскости (и, таким образом, впитать в себя каплю).

Вам дано начальное положение верёвки, а также вся информация о каплях дождя. Ваша цель — найти такую минимальную скорость \(v\), что можно собрать все капли, передвигая концы верёвки по рейкам со скоростью не больше \(v\), или определить, что, как бы быстро мы ни двигали концы, нам не удастся собрать все капли.

Входные данные

Первая строка содержит три целых числа \(n\), \(w\) и \(h\) (\(1 \le n \le 10^5\), \(1\le w, h \le 10^3\)): число капель дождя \(n\) и прямоугольник, задающий рейки. Одна рейка представлена отрезком с концами \((0, 0)\) и \((w, 0)\), а вторая — с концами \((0, h)\) и \((w, h)\).

Вторая строка содержит два целых числа \(e_1\) и \(e_2\), означающие, что изначально (в момент времени \(t = 0\)) концы верёвки находятся в точках \((e_1, 0)\) и \((e_2, h)\) (\(0\le e_1, e_2\le w\)).

\(i\)-я из следующих \(n\) строк содержит по три целых числа \(t_i\), \(x_i\) и \(y_i\) (\(1\le t_i\le 10^5\), \(0\le x_i \le w\), \(0 < y_i < h\)), означающих, что \(i\)-я капля попадёт в точку \((x_i, y_i)\) плоскости в момент времени \(t_i\). Гарантируется, что \(t_i \le t_{i+1}\) для всех \(i\).

Выходные данные

Если невозможно собрать все капли, выведите \(-1\).

В противном случае выведите наименьшую скорость, с которой можно двигать концы верёвки и собрать все капли. Ваш ответ будет считаться верным, если его абсолютная или относительная погрешность не превосходит \(10^{-4}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-4}\).

Примечание

В первом тесте из условия действовать можно так:

Во втором так:

E. Орехус и прямоугольники

геометрия дп Структуры данных *2400

Орехус застрял в плоском мире. Чтобы выбраться, необходимо решить следующую задачу.

Вам даны \(n\) прямоугольников с вершинами в точках \((0, 0)\), \((x_i, 0)\), \((x_i, y_i)\), \((0, y_i)\). Также для каждого прямоугольника вам дано число \(a_i\). Необходимо выбрать некоторые из них, чтобы площадь их объединения минус сумма их \(a_i\) была максимальна.

Гарантируется, что нет вложенных прямоугольников.

Орехус не имеет ни малейшего понятия, как решать данную ему задачу, поэтому он обратился к вам за помощью.

Входные данные

В первой строке дано одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — число прямоугольников.

Каждая из следующих \(n\) строк содержит три целых числа \(x_i\), \(y_i\) и \(a_i\) (\(1 \leq x_i, y_i \leq 10^9\), \(0 \leq a_i \leq x_i \cdot y_i\)).

Гарантируется, что нет вложенных прямоугольников.

Выходные данные

В единственной строке выведите ответ на задачу — максимальное значение, которое можно получить.

Примечание

В первом примере правильный ответ можно достигнуть, выбрав первый и второй прямоугольники.

Во втором примере правильный ответ можно тоже достигнуть, выбрав первый и второй прямоугольники.

C. Многоугольник для угла

геометрия Перебор *1600

Вам задан угол \(\text{ang}\).

Жюри просит Вас найти такой правильный \(n\)-угольник (правильный многоугольник из \(n\) вершин), что у него найдутся три вершины \(a\), \(b\) и \(c\) (не обязательно последовательные) с углом \(\angle{abc} = \text{ang}\) или сообщить, что такого \(n\)-угольника не существует.

Если существует несколько ответов, выведите наименьший из них. Гарантируется, что если ответ существует, то он не превосходит \(998244353\).

Входные данные

Первая строка содержит единственное целое число \(T\) (\(1 \le T \le 180\)) — количество запросов.

Следующие \(T\) строк содержат по одному целому числу \(\text{ang}\) (\(1 \le \text{ang} < 180\)) — заданный угол в градусах.

Выходные данные

Для каждого запроса выведите по одному целому числу \(n\) (\(3 \le n \le 998244353\)) — наименьшее возможное число вершин в подходящем правильном \(n\)-угольнике либо \(-1\), не такого \(n\) не существует.

Примечание

Ответ для первого запроса изображен на изображении выше.

Ответ для второго запроса достигается на правильном \(18\)-угольнике. Например, \(\angle{v_2 v_1 v_6} = 50^{\circ}\).

Возможный угол для третьего запроса — \(\angle{v_{11} v_{10} v_{12}} = 2^{\circ}\).

В четвертом запросе, минимальный возможный \(n\) равен \(180\) (но не \(90\)).

C. NN и обман зрения

Бинарный поиск геометрия математика *1200

NN  — заядлый интернет-пользователь, поэтому он очень много времени проводит в социальных сетях и различных форумах. Как-то раз ему попалась очень занятная картинка, на которой предлагалось сравнить размеры двух центральных кружков:

Оказалось, что кружки равны. NN очень удивил данный факт, поэтому он решил самостоятельно построить картинку.

Ему удалось посчитать количество внешних кругов \(n\), а так же радиус внутреннего круга \(r\). По мнению NN, исходя из этой информации можно в точности найти радиус всех внешних кругов \(R\) таким образом, чтобы внутренний кружок касался всех остальных внешним образом, а также каждая пара соседних внешних кружочков также касалась. Сколько NN ни старался угадать нужный радиус, у него так и не получилось сделать это.

Помогите NN найти необходимый радиус внешних кругов для построения картинки.

Входные данные

В первой и единственной строке входного файла заданы два целых числа \(n\) и \(r\) (\(3 \leq n \leq 100\), \(1 \leq r \leq 100\)) — количество внешних кругов на картинке и радиус внутреннего круга.

Выходные данные

В единственную строку выходного файла выведите вещественное число \(R\) — радиус внешних кругов, необходимый для построения требуемой картинки.

Ваш ответ будет зачтен, если его относительная или абсолютная погрешность не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(\frac{|a-b|}{max(1, |b|)} \le 10^{-6}\).

C. U2

геометрия *2400

Недавно Вася узнал, что через любые две точки на плоскости с различными \(x\) координатами можно провести одну и только одну параболу, уравнение которой будет иметь вид \(y = x^2 + bx + c\), где \(b\) и \(c\) — действительные числа. Назовём такую параболу \(U\)-образной.

После этого он нарисовал на плоскости несколько различных точек с целыми координатами и через каждые две из них, имеющие различные координаты \(x\), провёл \(U\)-образную параболу. Рисунок получился откровенно плохой, но Вася не теряет надежды найти число различных получившихся парабол, во внутренней области каждой из которых нет ни одной нарисованной точки. Помогите Васе.

Внутренней областью \(U\)-образной параболы в данной задаче называется часть плоскости, лежащая строго выше параболы, при этом ось \(y\) направлена вверх.

Входные данные

В первой строке находится единственное целое число \(n\) (\(1 \le n \le 100\,000\)) — число точек.

В следующих \(n\) строках находятся описания точек, в \(i\)-й из них находятся 2 целых числа \(x_i\) и \(y_i\) — координаты \(i\)-й точки. Гарантируется, что все точки различные, а так же что координаты по модулю не превосходят \(10^6\).

Выходные данные

В единственной строке выведите единственное число — количество \(U\)-образных парабол, проходящих хотя бы через 2 точки и не содержащих никаких других точек в своей внутренней области (не считая границы).

Примечание

На двух картинках ниже нарисованы все \(U\)-образные параболы, проходящие хотя-бы через 2 отмеченные точки в каждом из двух примеров. Красным отмечены те \(U\)-образные параболы, во внутренней области которых нет ни одной точки.

Первый пример.
Второй пример.

H. Сатанинская паника

геометрия дп *2900

Вам дан набор из \(n\) точек на 2D-плоскости. Гарантируется, что нет трех точек на одной прямой.

Пентаграмма — это набор из \(5\) точек \(A,B,C,D,E\), которые можно расположить следующим образом. Обратите внимание, что длина отрезков не имеет значения, главное то, что пересечения существуют.

Подсчитайте количество способов выбрать \(5\) точек из данного набора, которые образуют пентаграмму.

Входные данные

Первая строка содержит одно целое число \(n\) (\(5 \leq n \leq 300\)) — количество точек.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i, y_i\) (\(-10^6 \leq x_i,y_i \leq 10^6\)) — координаты \(i\)-й точки. Гарантируется, что нет трех точек на одной прямой.

Выходные данные

Выведите одно целое число — количество множеств из \(5\) точек, которые составляют пентаграмму.

Примечание

Первый пример: Второй пример: Третий пример:

A. Вписанные фигуры

геометрия *1400

Уровень математической подготовки абитуриентов математического факультета Берляндского Государственного Университета неожиданно резко упал. В этом году максимальный балл на вступительном экзамене по математике был 8. Из 100! Поэтому было принято решение упростить данный экзамен.

Теперь будущим студентам будут предлагать всего одну задачу. Задана последовательность целых чисел \(a_1, a_2, \dots, a_n\), каждое число от \(1\) до \(3\), и \(a_i \ne a_{i + 1}\) для всех корректных \(i\). \(i\)-е число означает тип \(i\)-й фигуры:

  1. круг;
  2. равнобедренный треугольник, у которого длина высоты равна длине основания;
  3. квадрат.

Фигуры данной последовательности расположены где-то на плоскости с декартовой системой координат таким образом, что:

  • \((i + 1)\)-я фигура вписана в \(i\)-ю;
  • основание каждого треугольника параллельно OX;
  • треугольник ориентирован вершиной, лежащей напротив основания, наверх;
  • стороны каждого квадрата параллельны осям координат;
  • для каждого \(i\) от \(2\) до \(n\) фигура \(i\) имеет максимально возможную длину стороны, если это квадрат или треугольник, и максимально возможный радиус, если это круг.

Обратите внимание, что существует ровно одна конструкция для некоторых выбранных позиции и размера только первой фигуры.

Задача — посчитать количество различных точек (не обязательно имеющих целые координаты), где касаются фигуры. Хитрость, однако, в том, что это число иногда равно бесконечности. Но это же не усложнит вам задачу, правда?

Можете ли вы пройти тест и поступить в Берляндский Государственный Университет?

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 100\)) — количество фигур.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 3\), \(a_i \ne a_{i + 1}\)) — типы фигур.

Выходные данные

В первой строке выведите либо «Infinite», если количество различных точек, где касаются фигуры, бесконечно, и «Finite» в противном случае.

Если количество конечно, то выведите его во второй строке. Гарантируется, что данное число помещается в 32-битный тип целых чисел.

Примечание

Взгляните на эти потрясающие картинки для примеров. Обратите внимание, что треугольник не равносторонний, а просто равнобедренный и имеет длину высоты равной длине основания. Поэтому в квадрат он помещается единственным способом.

Различный точки, где касаются фигуры, отмечены красным.

Во втором примере треугольник и квадрат касаются на протяжении целого отрезка, он содержит бесконечное число точек.

D. Извилистая ломаная

геометрия жадные алгоритмы Конструктив математика *2600

У Васи есть \(n\) различных точек \(A_1, A_2, \ldots A_n\) на плоскости. Никакие три из них не лежат на одной прямой. Он хочет расположить их в некотором порядке \(A_{p_1}, A_{p_2}, \ldots, A_{p_n}\), где \(p_1, p_2, \ldots, p_n\) — это некоторая перестановка чисел от \(1\) до \(n\).

Сделав так, он нарисует ориентированную ломаную на этих вершинах, проведя направленные отрезки из каждой точки в следующую в выбранном порядке точку. То есть для всех \(1 \leq i \leq n-1\) он проведет направленный отрезок из точки \(A_{p_i}\) в точку \(A_{p_{i+1}}\). Он хочет, чтобы получившаяся ломаная удовлетворяла \(2\)-м условиям:

  • она будет несамопересекающейся, то есть любые \(2\) отрезка, которые не являются соседними, не имеют общих точек.
  • она будет извилистой.

У Васи есть строка \(s\), состоящая из \((n-2)\)-х символов "L" или "R". Будем называть направленную ломаную извилистой, если её \(i\)-й поворот будет налево, если \(s_i = \) "L" и направо, если \(s_i = \) "R". Более формально: \(i\)-й поворот ломаной будет в точке \(A_{p_{i+1}}\), в ней направленный отрезок из точки \(A_{p_i}\) в точку \(A_{p_{i+1}}\) поменяется на направленный отрезок из точки \(A_{p_{i+1}}\) в точку \(A_{p_{i+2}}\). Обозначим вектор \(\overrightarrow{v_1} = \overrightarrow{A_{p_i} A_{p_{i+1}}}\) и вектор \(\overrightarrow{v_2} = \overrightarrow{A_{p_{i+1}} A_{p_{i+2}}}\). Тогда если для того, чтобы повернуть вектор \(\overrightarrow{v_1}\) на наименьший возможный угол, чтобы его направление совпало с направлением вектора \(\overrightarrow{v_2}\) надо сделать поворот против часовой стрелки, то будем говорить, что \(i\)-й поворот налево, а иначе направо. Для лучшего понимания посмотрите картинки, на которых изображены различные варианты поворотов:

На этой картинке изображены повороты налево
На этой картинке изображены повороты направо

Вам даны координаты точек \(A_1, A_2, \ldots A_n\) на плоскости и строка \(s\). Найдите перестановку \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), такую что ломаная, которую нарисует Вася, будет удовлетворять двум заданным условиям.

Входные данные

В первой строке написано одно целое число \(n\) — количество точек (\(3 \leq n \leq 2000\)). В следующих \(n\) строках написаны по два целых числа \(x_i\) и \(y_i\), разделённые пробелом — координаты точки \(A_i\) на плоскости (\(-10^9 \leq x_i, y_i \leq 10^9\)). В последней строке написана строка \(s\) из символов "L" и "R" длины \((n-2)\). Гарантируется, что все точки различны и и никакие три точки не лежат на одной прямой.

Выходные данные

Если подходящей перестановки не существует выведите \(-1\). Иначе выведите \(n\) чисел \(p_1, p_2, \ldots, p_n\) — найденную перестановку (\(1 \leq p_i \leq n\) и все \(p_1, p_2, \ldots, p_n\) различны). Если подходящих перестановок несколько, выведите любую.

Примечание

Вот картинка, изображающая ломаную из \(1\) теста:

Как мы видим, эта ломаная несамопересекающаяся, а также извилистая, так как поворот в точке \(2\) налево.

Вот картинка, изображающая ломаную из \(2\) теста:

C1. Передача энергии (упрощенная версия)

геометрия Перебор *1900

Эта задача такая же как и следующая, но с меньшими ограничениями.

Воскресным утром, три друга Селена, Широ и Кэти решили отправится на прогулку к ближайшей электростанции (не повторяйте этого дома). Когда они туда пришли, кошки впечатлились огромной системой передачи энергии, состоящей из множества дымоходов, электрических полюсов и проводов. Будучи кошками, они сочли эти вещи просто гигантскими.

На входе на станцию висит карта, описывающая систему проводов электростанции. Селена лучше всего из друзей разбирается в математике. Он решил нарисовать карту на декартовой плоскости. Теперь каждый полюс это точка по координатам \((x_i, y_i)\). Так как все полюса различны, то различны и точки, представляющие их. Также каждые два полюса соединены друг с другом проводом, представляющим из себя бесконечную в обе стороны прямую на плоскости. В случае если более двух полюсов лежат на одной прямой, то они все соединены одним общим проводом.

Селена думает, что когда два различных электрических провода пересекаются, то между ними может возникать опасная интерференция. Поэтому он интересуется, сколько пар проводов пересекаются?

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 50\)) — количество электрических полюсов.

Каждая из \(n\) следующих строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^4 \le x_i, y_i \le 10^4\)) — координаты полюсов.

Гарантируется что все эти \(n\) точек различны.

Выходные данные

Выведите одно целое число — количество пересекающихся пар проводов.

Примечание

В первом примере:

Во втором примере:

Обратите внимание, что три полюса \((0, 0)\), \((0, 2)\) и \((0, 4)\) соединены одним проводом.

В третьем примере:

C2. Передача энергии (усложнённая версия)

геометрия математика реализация Структуры данных *1900

Эта задача такая же как и предыдущая, но с большими ограничениями.

Воскресным утром, три друга Селена, Широ и Кэти решили отправится на прогулку к ближайшей электростанции (не повторяйте этого дома). Когда они туда пришли, кошки впечатлились огромной системой передачи энергии, состоящей из множества дымоходов, электрических полюсов и проводов. Будучи кошками, они сочли эти вещи просто гигантскими.

На входе на станцию висит карта, описывающая систему проводов электростанции. Селена лучше всего из друзей разбирается в математике. Он решил нарисовать карту на декартовой плоскости. Теперь каждый полюс это точка по координатам \((x_i, y_i)\). Так как все полюса различны, то различны и точки, представляющие их. Также каждые два полюса соединены друг с другом проводом, представляющим из себя бесконечную в обе стороны прямую на плоскости. В случае если более двух полюсов лежат на одной прямой, то они все соединены одним общим проводом.

Селена думает, что когда два различных электрических провода пересекаются, то между ними может возникать опасная интерференция. Поэтому он интересуется, сколько пар проводов пересекаются?

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 1000\)) — количество электрических полюсов.

Каждая из \(n\) следующих строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^4 \le x_i, y_i \le 10^4\)) — координаты полюсов.

Гарантируется что все эти \(n\) точек различны.

Выходные данные

Выведите одно целое число — количество пересекающихся пар проводов.

Примечание

В первом примере:

Во втором примере:

Обратите внимание, что три полюса \((0, 0)\), \((0, 2)\) и \((0, 4)\) соединены одним проводом.

В третьем примере:

G. Малобюджетное Начало

геометрия Перебор *3100

Нам стало настолько скучно, что мы неожиданно решили обсудить, как бы выглядел фильм «Начало», если бы бюджет на картину был бы невероятно мал.

Первая сцена, которая нам вспомнилась, включала в себя изображение того, как целый город сгибается, и одни здания подминают другие под собой:

Сразу ощущается, что на компьютерную графику для этого уйдет немало денег, не так ли? К счастью, мы придумали аналог этой сцены, который снять гораздо дешевле.

Во-первых, забудьте про 3D, это очень сложно и дорого! Город теперь представляется в виде числовой прямой (бесконечной для простоты, разумеется).

Во-вторых, город совсем не должен выглядеть естественно. На прямой есть \(n\) зданий. Каждое здание — это квадрат \(1 \times 1\). Здания пронумерованы от \(1\) до \(n\) в возрастающем порядке своих позиций. Нижние углы здания \(i\) расположены в точках \(a_i\) и \(a_i + 1\) числовой прямой. Также расстояние между любыми двумя соседними зданиями \(i\) и \(i + 1\) не превышает \(d\) (на самом деле, это условие здесь лишь для того, чтобы город не выглядел сильно разреженным). Расстояние между зданиями \(i\) и \(i + 1\) считается от правого нижнего угла здания \(i\) до левого нижнего угла здания \(i + 1\).

Наконец, изгиб тоже довольно тяжело просимулировать! Будем осуществлять сгиб в некоторой целой координате \(x\) по следующему алгоритму. Возьмем луч из \(x\) в \(+\infty\) и все здания, которые на нем находятся, и начнем поворачивать луч и здания против часовой стрелки относительно точки \(x\). В какой-то момент будет достигнуть угол, на котором некоторое здание коснется либо другого здания, либо части прямой. Необходимо перестать сгибать здесь (реализация разрушения здания уж точно своих денег не стоит).

Назовем угол между двумя лучами в финальном состоянии конечным углом \(\alpha_x\).

Осталось только решить, вокруг какой же целой точки \(x\) лучше всего сгибать. К счастью, мы уже отобрали \(m\) кандидатов для сгиба.

Пожалуйста, помогите нам теперь посчитать конечный угол \(\alpha_x\) для каждого сгиба \(x\) из нашего списка кандидатов.

Входные данные

В первой строке записаны два целых числа \(n\) и \(d\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le d \le 7000\)) — количество зданий и максимальное расстояние между двумя соседними зданиями, соответственно.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(a_1 = 0\), \(0 < a_{i + 1} - a_i \le d + 1\)) — координаты левых углов соответствующих зданий в возрастающем порядке.

В третьей строке записано одно целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество кандидатов.

В четвертой сроке записаны \(m\) целых чисел \(x_1, x_2, \dots, x_m\) (\(0 \le x_i \le a_n + 1\), \(x_i < x_{i + 1}\)) — координаты сгибов, для которых требуется посчитать конечный угол, в возрастающем порядке.

Выходные данные

Выведите \(m\) чисел. Для каждого сгиба \(x_i\) выведите конечный угол \(\alpha_{x_i}\) (в радианах).

Ваш ответ будет считаться правильным, если его абсолютная ошибка не превосходит \(10^{-9}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(|a - b| \le 10^{-9}\).

Примечание

Здесь изображен город из первого примера и сгиб в позиции \(2\) для него. Угол, который необходимо измерить, помечен синим. Можно заметить, что он равен \(\frac \pi 4\).

Также можно заметить, что между любой парой соседних зданий расстояние не превышает \(4\). \(d = 4\) бы тоже подошло в данном тесте.

G. Очередная задача на разбиения

геометрия дп разделяй и властвуй Структуры данных *3000

Вам задан массив \(a_1, a_2, \dots, a_n\). Вам необходимо разделить его на \(k\) подотрезков (так, что каждый элемент принадлежит ровно одному подотрезку).

Весом подотрезка \(a_l, a_{l+1}, \dots, a_r\) назовем значение \((r - l + 1) \cdot \max\limits_{l \le i \le r}(a_i)\). Весом разбиения — суммарный вес его подотрезков.

Найдите разбиение минимального веса.

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^4\), \(1 \le k \le \min(100, n)\)) — длина массива \(a\) и количество подотрезков в разбиении.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^4\)) — массив \(a\).

Выходные данные

Выведите единственное число — минимальный вес среди всех возможных разбиений.

Примечание

Оптимальное разбиение в первом примере: \(6\) \(1\) \(7\) \(\bigg|\) \(4\).

Оптимальное разбиение во втором примере: \(6\) \(\bigg|\) \(1\) \(\bigg|\) \(7\) \(4\).

Одно из оптимальных разбиений в третьем примере: \(5\) \(\bigg|\) \(1\) \(5\) \(\bigg|\) \(1\) \(\bigg|\) \(5\).

E. Другая реальность

геометрия *2400

В 3000 году путешествия между параллельными реальностями стали обычной практикой. Однако следует учитывать, что подобные путешествия сопряжены с немалой опасностью — ведь никогда не знаешь заранее, куда попадешь...

Мальчик Вася, к примеру, попал в игровую реальность, и теперь, чтобы вернуться назад, ему необходимо успешно пройти все уровни одной очень странной игры. Игровая реальность представляет собой трехмерное пространство, в котором отмечено n точек. Игра состоит из m уровней, в начале i-го уровня игрок попадает на некоторую плоскость Qi, проходящую через начало координат. На каждом уровне ему требуется при помощи специальных роботов построить и активировать n мощных энергетических сфер одинакового радиуса с центрами в заданных точках. Радиус сфер игрок выбирает самостоятельно. На построение сфер радиуса R ему придется потратить R денежных единиц (соответственно, сферы нулевого радиуса можно построить бесплатно). Также игрок один раз за уровень может выбрать любую точку пространства и выпустить оттуда лазерный луч, перпендикулярный плоскости Qi (это действие оплачивать не нужно). Луч может быть направлен либо к плоскости, либо от неё. Сферы, имеющие с этим лучом хотя бы одну общую точку, будут незамедлительно активированы. Уровень считается пройденным, если игрок сумел активировать все сферы. Следует отметить, что центры сфер — одни и те же для всех m уровней, но сами сферы не сохраняются: на каждом уровне их необходимо строить заново.

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

Входные данные

В первой строке находятся два целых числа n и m (1 ≤ n ≤ 900, 1 ≤ m ≤ 100) — количество энергетических сфер и количество уровней игры соответственно.

В каждой из следующих n строк находится три целых числа xi, yi, zi (0 ≤ xi, yi, zi ≤ 104) — координаты центра i-ой сферы. Считайте, что эти точки не меняют своего положения на протяжении всей игры.

Далее следует m строк, каждая из которых содержит по три целых числа ai, bi, ci (0 ≤ ai, bi, ci ≤ 100, ai2 + bi2 + ci2 > 0). Эти числа являются коэффициентами в уравнении плоскости Qi (aix + biy + ciz = 0), на которой игрок находится в начале i-ого уровня.

Выходные данные

Выведите m чисел по одному в строке: в i-ой строке следует вывести минимальное количество денег, достаточное для прохождения i-ого уровня. Абсолютная или относительная погрешность не должна превосходить 10 - 6.

C. Ножницы и скотч

*особая задача геометрия Конструктив

Вам дан кусочек бумаги в форме простого многоугольника \(S\). Ваша задача — превратить его в простой многоугольник \(T\), у которого такая же площадь, как у \(S\).

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

Многоугольники, заданные вам, имеют целочисленные координаты, но вы можете получать части, которые имеют и нецелочисленные координаты.

Далее следует формальное описание задачи.

Фигурой \(Q=(Q_0,\dots,Q_{n-1})\) называется последовательность из трех или более точек на плоскости такая, что:

  • Замкнутая ломаная \(Q_0Q_1Q_2\dots Q_{n-1}Q_0\) не имеет самокасаний и самопересечений, а поэтому образует простой многоугольник.
  • Эта ломаная обходит многоугольник против часовой стрелки.

Обозначим многоугольник, ограниченный фигурой \(Q\), за \(P(Q)\).

Две фигуры называются эквивалентными, если одну из них можно перенести и повернуть так, чтобы она совпала со второй.

Обратите внимание, что отражать фигуры запрещено. Кроме того, обратите внимание, что порядок точек важен: фигура \((Q_1,\dots,Q_{n-1},Q_0)\) не всегда эквивалентна фигуре \((Q_0,\dots,Q_{n-1})\).

На рисунке слева: фигуры \(U\) и \(V\) эквивалентны. Фигура \(W\) не эквивалентна им, потому что точки \(W\) следуют в другом порядке. Четвертая фигура не эквивалентна остальным независимо от порядка точек, потому что отражение не допускается.

Во входных и выходных данных фигура из \(n\) точек представляется как одна строка, содержащая \(2n+1\) число: число \(n\), а затем координаты точек: \(Q_{0,x}\), \(Q_{0,y}\), \(Q_{1,x}\), ...

У фигур есть идентификационные номера (ID). Данная вам фигура \(S\) имеет ID 0, фигуры, которые вы получаете в процессе решения — ID 1, 2, 3, ... в порядке, в которым вы их получаете.

Фигуры \(B_1,\dots,B_k\) образуют разделение фигуры \(A\), если:

  • Объединение всех \(P(B_i)\) дает точно \(P(A)\).
  • Для всех \(i\neq j\) площадь пересечения \(P(B_i)\) и \(P(B_j)\) равна нулю.

Применение ножниц уничтожает одну существующую фигуру \(A\) и создает одну или более фигуру \(B_1,\dots,B_k\), которые образуют разделение \(A\).

На рисунке фигура \(A\) (квадрат) разделена на фигуры \(B_1\), \(B_2\), \(B_3\) (три треугольника). Один из корректных способов представить одну из фигур \(B_i\) есть «3 3 1 6 1 5.1 4».

Применение скотча уничтожает одну или более существующую фигуру \(A_1,\dots,A_k\) и создает одну новую фигуру \(B\). Чтобы эта операция была выполнима, вы должны в начале указать фигуры \(C_1,\dots,C_k\), и только затем конечную фигуру \(B\). Эти фигуры должны удовлетворять следующим ограничениям:

  • Для всех \(i\) фигура \(C_i\) эквивалентна фигуре \(A_i\).
  • Фигуры \(C_1,\dots,C_k\) образуют разделение фигуры \(B\).

Неформально вы должны выбрать фигуру \(B\) и показать, как нужно подвинуть и повернуть все существующие \(A_i\), чтобы они заняли правильные места \(C_i\) внутри \(B\). Обратите внимание, что только фигура \(B\) получает новый ID, фигуры \(C_i\) его не получают.

Входные данные

Первая строка содержит исходную фигуру \(S\).

Вторая строка содержит исходную фигуру \(T\).

В обеих фигурах от 3 до 10 точек включительно. Обе фигуры даны в формате, описанном выше.

Все координаты во входных данных — целые числа в пределах от \(-10^6\) до \(10^6\) включительно.

В обеих фигурах никакие три точки не образуют угол меньший, чем 3 градуса. (Это утверждение включает в себя, в том числе, непоследовательные точки; кроме того, это означает, что никакие три точки не лежат на одной прямой.)

Многоугольники \(P(S)\) и \(P(T)\) имеют одинаковую площадь.

Выходные данные

Каждый раз, когда вы используете ножницы, выведите блок строк в следующем виде:


scissors
id(A) k
B_1
B_2
...
B_k

Здесь \(id(A)\) — ID фигуры, которую вы разрезаете, \(k\) — число новых фигур, а \(B_1,\dots,B_k\) — сами эти новые фигуры.

Каждый раз, когда вы используете скотч, выведите блок строк в следующем виде:


tape
k id(A_1) ... id(A_k)
C_1
C_2
...
C_k
B

Здесь \(k\) — количество фигур, которые вы склеиваете, \(id(A_1),\dots,id(A_k)\) — их ID, \(C_1,\dots,C_k\) — их эквивалентные позиции внутри \(B\), а \(B\) — финальная фигура.

Рекомендуется выводить хотя бы 10 знаков после десятичной запятой.

Ваш вывод должен удовлетворять следующим условиям:

  • Координаты всех точек должны быть в пределах от \(-10^7\) до \(10^7\) включительно.
  • У всех фигур должно быть не более \(100\) точек.
  • В каждой операции число фигур \(k\) должно быть в пределах от \(1\) до \(100\) включительно.
  • Общее число операций не должно превышать \(2000\).
  • Общее число точек во всех фигурах не должно превышать \(20000\).
  • В конце должна быть ровно одна фигура (которая не была уничтожена), и эта фигура должна быть эквивалентна \(T\).
  • Все операции должны быть корректны. Решения с небольшими ошибками округления будут приняты. В проверяющей программе все проверки выполняются с абсолютной или относительной допустимой ошибкой в \(10^{-3}\).
Система оценки

Фигура называется удобным прямоугольником, если она имеет вид \(((0,0),~ (x,0),~ (x,y),~ (0,y))\) для некоторых положительных чисел \(x\) и \(y\).

Фигура называется удобным квадратом, если дополнительно \(x=y\).

Фигура \(A\) называется строго выпуклой, если все внутренние углы многоугольника \(P(A)\) меньше 180 градусов.

Подзадача 1 (5 баллов): \(S\) и \(T\) — удобные прямоугольники. Все координаты точек — целые числа от 0 до 10 включительно

Подзадача 2 (13 баллов): \(S\) — удобный прямоугольник с \(x>y\), а \(T\) — удобный квадрат

Подзадача 3 (12 баллов): \(S\) и \(T\) — удобные прямоугольники

Подзадача 4 (14 баллов): \(S\) — треугольник, а \(T\) — удобный квадрат

Подзадача 5 (10 баллов): \(S\) и \(T\) — треугольники

Подзадача 6 (16 баллов): \(S\) — строго выпуклый многоугольник, а \(T\) — удобный прямоугольник

Подзадача 7 (11 баллов): \(T\) — удобный прямоугольник

Подзадача 8 (19 баллов): нет дополнительных ограничений

Примечание

Рисунок ниже показывает ответ в первом примере. Слева показана изначальная фигура после использования ножниц, справа — соответствующие \(C_i\), когда мы склеиваем все эти части обратно.

Во втором примере обратите, что достаточно, чтобы конечная фигура была идентична необходимой, они не обязательно должны быть идентичны.

Рисунок ниже показывает три стадии получения результата в третьем примере. Сначала мы разрезаем исходный прямоугольник на два меньших, потом вы разрезаем больший из этих двух на еще два. Состояние после этого показано на верхнем левом рисунке.

Далее мы склеиваем два новых прямоугольника так, чтобы получился шестиугольник, и разрезаем этот многоугольник на три прямоугольника два на один и один меньший. Это показано на рисунке снизу слева.

Затем мы берем прямоугольник, который у нас все еще лежит с первого шага, и четыре меньших прямоугольника, и собираем из них желаемый квадрат три на три.

E. Посчитайте четырехугольники

битмаски геометрия Перебор сортировки Структуры данных *2200

На плоскости нарисовано \(n\) отрезков; \(i\)-й отрезок соединяет две точки (\(x_{i, 1}\), \(y_{i, 1}\)) и (\(x_{i, 2}\), \(y_{i, 2}\)). Каждый отрезок невырожден и является либо горизонтальным, либо вертикальным — формально, для любого \(i \in [1, n]\) выполняется ровно одно из двух условий: \(x_{i, 1} = x_{i, 2}\) или \(y_{i, 1} = y_{i, 2}\) . Только отрезки разных типов могут пересекаться, т. е. горизонтальные отрезки не имеют общих точек, то же самое верно и для вертикальных.

Четыре отрезка с индексами \(h_1\), \(h_2\), \(v_1\) и \(v_2\), такие, что \(h_1 < h_2\) и \(v_1 < v_2\), образуют прямоугольник при выполнение следующих условий:

  • отрезки \(h_1\) и \(h_2\) горизонтальные;
  • отрезки \(v_1\) и \(v_2\) вертикальные;
  • отрезок \(h_1\) пересекается с отрезком \(v_1\);
  • отрезок \(h_2\) пересекается с отрезком \(v_1\);
  • отрезок \(h_1\) пересекается с отрезком \(v_2\);
  • отрезок \(h_2\) пересекается с отрезком \(v_2\).

Подсчитайте количество способов выбрать четыре отрезка так, чтобы они образовывали прямоугольник. Не забывайте, что условия \(h_1 < h_2\) и \(v_1 < v_2\) должны выполняться.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 5000\)) — количество отрезков.

Далее следуют \(n\) строк. В \(i\)-й строке содержатся четыре целых числа \(x_{i, 1}\), \(y_{i, 1}\), \(x_{i, 2}\) и \(y_{i, 2}\), обозначающие концы \(i\)-го отрезка. Все координаты концов отрезков находятся в диапазоне \([-5000, 5000]\).

Гарантируется, что заданные отрезки невырожденные и являются либо горизонтальными, либо вертикальными. Более того, если пара отрезков имеют общую точку, то один из них горизонтальный, а другой вертикальный.

Выходные данные

Выведите число — количество способов выбрать четыре отрезка так, чтобы они образовывали прямоугольник.

Примечание

На следующих картинках нарисованы тестовые примеры:

F. Клуб анонимных геометров

геометрия математика сортировки Структуры данных *2500

Сегодня Денис проводит в ЛКШ клуб анонимных геометров. Он заготовил для клуба \(n\) выпуклых многоугольников, пронумерованных от \(1\) до \(n\). Он планирует предложить участникам клуба посчитать суммы Минковского этих многоугольников. А именно, он планирует дать \(q\) заданий, в \(i\)-м из них нужно посчитать сумму Минковского многоугольников с номерами от \(l_i\) до \(r_i\) включительно.

Суммой Минковского двух множеств \(A\) и \(B\) называется множество \(C = \{a + b : a \in A, b \in B\}\). Можно доказать, что если \(A\) и \(B\) являются выпуклыми многоугольниками, то \(C\) тоже будет выпуклым многоугольником.

Сумма двух выпуклых многоугольников

Чтобы посчитать сумму Минковского \(p\) многоугольников (\(p > 2\)), нужно посчитать сумму Минковского первых \(p - 1\) многоугольников, а потом сумму Минковского результата и \(p\)-го многоугольника.

Для того, чтобы было удобнее проверять правильность выполнения заданий, Денис решил подготовиться и посчитать количество вершин в сумме Минковского для каждого задания. Помогите ему сделать это.

Входные данные

В первой строке дано одно целое число \(n\) — количество выпуклых многоугольников, которые подготовил Денис (\(1 \le n \le 100\,000\)).

Далее дано описание \(n\) выпуклых многоугольников. Описание \(i\)-го многоугольника начинается с целого числа \(k_i\) — количество вершин в \(i\)-м многоугольнике (\(3 \le k_i\)). После чего в \(k_i\) строках даны по два целых числа \(x_{ij}\), \(y_{ij}\) — координаты вершин \(i\)-го многоугольника в порядке обхода против часовой стрелки (\(|x_{ij}|, |y_{ij}| \le 10 ^ 9\)).

Гарантируется, что многоугольники не содержат трех последовательных вершин, лежащих на одной прямой. Суммарное количество вершин в многоугольниках не превышает \(300\,000\).

В следующей строке одно целое число \(q\) — количество заданий (\(1 \le q \le 100\,000\)). В следующих \(q\) строках дано описание заданий. Описание \(i\)-го задания содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)).

Выходные данные

Для каждого задания выведите одно целое число — количество вершин в сумме Минковского многоугольников с номерами от \(l_i\) до \(r_i\).

Примечание

Пояснение к примеру:

Первый, второй и третий многоугольники из тестового примера
Суммы Минковского первого и второго, второго и третьего и всех трех многоугольников соответственно

B. Водяная лилия

геометрия математика *1000

Инесса плавала по озеру в лодке и заметила прекрасный цветок водяной лилии над поверхностью воды. Она подплыла к цветку поближе и оказалось, что цветок находится на высоте \(H\) над уровнем воды. Инесса взяла цветок и отплыла на расстояние \(L\). В этот момент цветок коснулся воды.

Предположим, лилия растёт из точки \(A\) на дне озера, а стебель лилии всегда является отрезком прямой, один из концов которого закреплён в точке \(A\). Предположим также, что изначально цветок находился прямо над точкой \(A\), то есть стебель был вертикальным. Можете ли вы определить глубину дна озера в точке \(A\)?

Входные данные

В единственной строке ввода записаны два целых числа \(H\) и \(L\) (\(1 \le H < L \le 10^{6}\)).

Выходные данные

Выведите одной действительное число — глубину озера в точке \(A\). Абсолютная или относительная погрешность ответа не должна превышать \(10^{-6}\).

Более формально, пусть \(A\) — ваш ответ, \(B\) — ответ жюри. Тогда ваш ответ будет считаться правильным, если \(\frac{|A - B|}{\max{(1, |B|)}} \le 10^{-6}\)

J. Минимальная сумма

геометрия разделяй и властвуй сортировки *1900

Вам задан набор из n векторов на плоскости. Для каждого вектора разрешается домножить любые его координаты на -1. Таким образом, каждый вектор vi = (xi, yi) можно преобразовать в один из следующих четырех векторов:

  • vi1 = (xi, yi),
  • vi2 = ( - xi, yi),
  • vi3 = (xi,  - yi),
  • vi4 = ( - xi,  - yi).

Вам нужно найти два вектора из набора и определить, какие из их координат следует умножить на -1 таким образом, чтобы модуль суммы полученных векторов был минимально возможным. Более формально, требуется выбрать два вектора vi, vj (1 ≤ i, j ≤ n, i ≠ j) и два числа k1, k2 (1 ≤ k1, k2 ≤ 4), так чтобы значение выражения |vik1 + vjk2| было минимально.

Входные данные

В первой строке записано одно целое число n (2 ≤ n ≤ 105). Далее в n строках записаны вектора в виде пар целых чисел «xi yi» ( - 10000 ≤ xi, yi ≤ 10000), по одной паре в строке.

Выходные данные

Выведите в первой строке четыре числа через пробел «i k1 j k2» — ответ на задачу. Если существует несколько вариантов с минимальным модулем суммы, можете вывести любой из них.

Примечание

Суммой двух векторов v = (xv, yv) и u = (xu, yu) называется вектор s = v + u = (xv + xu, yv + yu).

Модулем вектора v = (x, y) называется число .

Во втором примере существует несколько подходящих ответов, вот некоторые из них:

(3 1 4 2), (3 1 4 4), (3 4 4 1), (3 4 4 3), (4 1 3 2), (4 1 3 4), (4 2 3 1).

C. Белый лист

геометрия математика *1700

На прямоугольном столе лежит белый лист бумаги. Он имеет прямоугольную форму, а его стороны параллельны сторонам стола. Если смотреть на стол сверху, и представить, что левая нижняя точка стола имеет координаты \((0, 0)\), а оси координат совпадают с левой и нижней сторонами стола, то левый нижний угол белого листа имеет координаты \((x_1, y_1)\), а правый верхний — \((x_2, y_2)\).

После этого на стол положили два черных листа бумаги. Стороны обоих черных листов параллельны сторонам стола. Координаты левого нижнего угла первого черного листа равны \((x_3, y_3)\), а правого верхнего — \((x_4, y_4)\). Координаты левого нижнего угла второго черного листа равны \((x_5, y_5)\), а правого верхнего — \((x_6, y_6)\).

Пример расположения трёх прямоугольников.

Определите, осталось видно хотя бы часть белого листа, если смотреть на стол сверху, после того, как на стол положили два черных листа. Часть белого листа видно в том случае, если существует хотя бы одна точка, лежащая нестрого внутри белого листа и лежащая строго вне обоих черных листов.

Входные данные

В первой строке следуют четыре целых числа \(x_1, y_1, x_2, y_2\) \((0 \le x_1 < x_2 \le 10^{6}, 0 \le y_1 < y_2 \le 10^{6})\) — координаты левого нижнего и правого верхнего углов белого листа.

Во второй строке следуют четыре целых числа \(x_3, y_3, x_4, y_4\) \((0 \le x_3 < x_4 \le 10^{6}, 0 \le y_3 < y_4 \le 10^{6})\) — координаты левого нижнего и правого верхнего углов первого черного листа.

В третьей строке следуют четыре целых числа \(x_5, y_5, x_6, y_6\) \((0 \le x_5 < x_6 \le 10^{6}, 0 \le y_5 < y_6 \le 10^{6})\) — координаты левого нижнего и правого верхнего углов второго черного листа.

Стороны каждого листа бумаги параллельны (перпендикулярны) осям координат.

Выходные данные

Если после того, как на стол положили два черных листа, осталось видно хотя бы часть белого листа, выведите «YES» (без кавычек). В противном случае, выведите «NO».

Примечание

В первом примере белый лист полностью будет покрыт черными листами.

Во втором примере часть белого листа будет видно, после того, как на стол положили два черных листа. Например, точка \((6.5, 4.5)\) лежит нестрого внутри белого листа и лежит строго вне обоих черных листов.

B. Guarding warehouses

геометрия Структуры данных *3000

Bob Bubblestrong just got a new job as security guard. Bob is now responsible for safety of a collection of warehouses, each containing the most valuable Bubble Cup assets - the high-quality bubbles. His task is to detect thieves inside the warehouses and call the police.

Looking from the sky, each warehouse has a shape of a convex polygon. Walls of no two warehouses intersect, and of course, none of the warehouses is built inside of another warehouse.

Little did the Bubble Cup bosses know how lazy Bob is and that he enjoys watching soap operas (he heard they are full of bubbles) from the coziness of his office. Instead of going from one warehouse to another to check if warehouses are secured, the plan Bob has is to monitor all the warehouses from the comfort of his office using the special X-ray goggles. The goggles have an infinite range, so a thief in any of the warehouses could easily be spotted.

However, the goggles promptly broke and the X-rays are now strong only enough to let Bob see through a single wall. Now, Bob would really appreciate if you could help him find out what is the total area inside of the warehouses monitored by the broken goggles, so that he could know how much area of the warehouses he needs to monitor in person.

Input

The first line contains one integer \(N\) (\(1\) \(\leq\) \(N\) \(\leq\) \(10^4\)) – the number of warehouses.

The next \(N\) lines describe the warehouses.

The first number of the line is integer \(c_i\) (\(3\) \(\leq\) \(c_i\) \(\leq\) \(10^4\)) – the number corners in the \(i^{th}\) warehouse, followed by \(c_i\) pairs of integers. The \(j^{th}\) pair is \((x_j, y_j)\) – the coordinates of the \(j^{th}\) corner (\(|x_j|\), \(|y_j|\) \(\leq\) \(3 * 10^4\)). The corners are listed in the clockwise order. The total number of corners in all the warehouses is at most \(5 * 10^4\).

Bob's office is positioned at the point with coordinates \((0, 0)\). The office is not contained within any of the warehouses.

Output

Print a single line containing a single decimal number accurate to at least four decimal places – the total area of the warehouses Bob can monitor using the broken X-ray goggles.

Note

Areas monitored by the X-ray goggles are colored green and areas not monitored by the goggles are colored red.

The warehouses \(ABCD\), \(IJK\) and \(LMNOPQ\) are completely monitored using the googles.

The warehouse \(EFGH\) is partially monitored using the goggles: part \(EFW\) is not monitored because to monitor each point inside it, the X-rays must go through two walls of warehouse \(ABCD\).

The warehouse \(RUTS\) is not monitored from the Bob's office, because there are two walls of the warehouse \(IJK\) between Bob's office and each point in \(RUTS\).

The total area monitored by the goggles is \(P\) = \(P_{ABCD}\) + \(P_{FGHW}\) + \(P_{IJK}\) + \(P_{LMNOPQ}\) = \(4\) + \(3.333333333333\) + \(2\) + \(4\) = \(13.333333333333\).

G. Геолокация

геометрия *3400

Вы работаете на компанию Гриззл в Пауни, штат Индиана.

Недавно возле Пауни открылся новый национальный парк и перед вами была поставлена задача разработать систему геопозиционирования, чтобы люди в нём не заблудились. Концепция, которую вы разработали, инновационна и минималистична. В парке будет установлено \(n\) антенн. Когда кто-то захочет узнать своё местонахождение, их гриззлфон свяжется с антеннами и узнает расстояния от текущей позиции пользователя до всех антенн.

Зная эти расстояния и местонахождение антенн, восстановить местонахождение пользователя должно быть просто... Ведь так? Ну, почти. Единственная проблема заключается в том, что вы не знаете, какой антенне соответствует каждое из расстояний. Ваша задача – определить местонахождение пользователя, зная только местонахождение всех антенн и мультимножество расстояний до них.

Входные данные

Первая строка ввода содержит единственное целое число \(n\) (\(2 \leq n \leq 10^5\)), количество антенн.

Следующие \(n\) строк содержат координаты антенн, \(i\)-я строка содержит два целых числа \(x_i\) и \(y_i\) (\(0 \leq x_i,y_i \leq 10^8\)). Гарантируется, что все местонахождения антенны различны.

Следующая строка содержит единственное целое число \(m\) (\(1 \leq n \cdot m \leq 10^5\)), количество запросов на определение местонахождения пользователя.

Следующие \(m\) строк содержат \(n\) целых чисел \(0 \leq d_1 \leq d_2 \leq \dots \leq d_n \leq 2 \cdot 10^{16}\) каждая. Эти числа образуют мультимножество квадратов расстояний от местонахождения пользователя \((x;y)\) до всех антенн.

Для всех тестов, кроме примеров, гарантируется, что во всех запросах местонахождения пользователя \((x;y)\) были выбраны равномерно и независимо друг от друга среди всех возможных целочисленных точек, таких что \(0 \leq x, y \leq 10^8\).

Выходные данные

Для каждого запроса выведите сначала число \(k\) – количество возможных местонахождений пользователя, а затем список из этих точек в лексикографическом порядке.

Гарантируется, что сумма \(k\) по всем запросам не превосходит \(10^6\).

Примечание

Как можно видеть во втором примере — хотя местонахождение пользователя и выбирается так, чтобы иметь неотрицательные координаты, вам необходимо вывести все возможные целочисленные координаты.

C1. Сбалансированные удаления (попроще)

геометрия жадные алгоритмы Конструктив *1700

Это упрощённая версия задачи. В этой версии \(n \le 2000\).

В трёхмерном пространстве заданы \(n\) различных точек, пронумерованных от \(1\) до \(n\). \(i\)-я точка имеет координаты \((x_i, y_i, z_i)\). Число точек \(n\) — чётное.

Вы хотели бы удалить все \(n\) точек, используя последовательность из \(\frac{n}{2}\) щелчков. За один щелчок вы можете удалить любые две ещё не удалённые точки \(a\) и \(b\), которые образуют идеально сбалансированную пару. Пара точек \(a\) и \(b\) идеально сбалансирована, если никакая другая точка \(c\) (которая ещё не удалена) не лежит в пределах минимального ограничивающего точки \(a\) и \(b\) прямоугольного параллелепипеда с рёбрами, параллельными осям координат.

Формально, точка \(c\) лежит внутри ограничивающего параллелепипеда точек \(a\) и \(b\) тогда и только тогда, когда \(\min(x_a, x_b) \le x_c \le \max(x_a, x_b)\), \(\min(y_a, y_b) \le y_c \le \max(y_a, y_b)\) и \(\min(z_a, z_b) \le z_c \le \max(z_a, z_b)\). Обратите внимание, что параллелепипед может быть вырожденным.

Найдите способ удалить все точки за \(\frac{n}{2}\) щелчков.

Входные данные

Первая строка содержит целое число \(n\) (\(2 \le n \le 2000\); \(n\) чётно) — число точек.

Каждая из следующих \(n\) строк содержит три целых числа \(x_i\), \(y_i\), \(z_i\) (\(-10^8 \le x_i, y_i, z_i \le 10^8\)) — координаты \(i\)-й точки.

Никакие две точки не совпадают.

Выходные данные

Выведите \(\frac{n}{2}\) пар целых чисел \(a_i, b_i\) (\(1 \le a_i, b_i \le n\)) — номера точек, удаляемых щелчком \(i\). Каждое целое число от \(1\) до \(n\) должно встретиться в выводе ровно один раз.

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

Примечание

В первом примере точки и их соответствующие параллелепипеды выглядят так (изображённые для простоты в двумерном пространстве, так как все точки лежат на плоскости \(z = 0\)). Обратите внимание, что порядок удаления точек важен: например, точки \(5\) и \(1\) не образуют идеально сбалансированную пару изначально, но начинают её образовывать после того, как удалена точка \(3\).

A. Целые точки

геометрия математика *1000

DLS и JLS скучают на уроке математики в школе. Чтобы как-то развлечь себя, DLS достал лист клетчатой бумаги и нарисовал на ней \(n\) различных прямых, заданных уравнениями \(y = x + p_i\), для некоторых различных \(p_1, p_2, \ldots, p_n\).

JLS не заставил себя ждать и нарисовал на том же листе \(m\) различных прямых, заданных уравнениями \(y = -x + q_i\) для некоторых различных \(q_1, q_2, \ldots, q_m\).

DLS и JLS интересно, сколько пар прямых пересекаются в точках с целочисленными координатами. К сожалению, до конца урока осталось мало времени, поэтому DLS и JLS просят вас помочь им.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Затем следуют описания наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \le n \le 10^5\)) — количество прямых, которые нарисовал DLS.

Вторая строка каждого набора содержит \(n\) различных целых чисел \(p_i\) (\(0 \le p_i \le 10^9\)), описывающие прямые, нарисованные DLS. Число \(p_i\) описывает прямую, заданную уравнением \(y = x + p_i\).

Третья строка каждого набора содержит целое число \(m\) (\(1 \le m \le 10^5\)) — количество прямых, которые нарисовал JLS.

Четвёртая строка каждого набора содержит \(m\) различных целых чисел \(q_i\) (\(0 \le q_i \le 10^9\)), описывающие прямые, нарисованные JLS. Число \(q_i\) описывает прямую, заданную уравнением \(y = -x + q_i\).

В тесте сумма всех значений \(n\) по всем наборам входных данных не превосходит \(10^5\). Аналогично, сумма всех значений \(m\) по всем наборам входных данных не превосходит \(10^5\)

Во взломах разрешается использовать только на одном наборе входных данных, то есть \(t=1\) должно быть выполнено.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество пар прямых, которые пересекаются в точке с целочисленными координатами.

Примечание

Ниже изображены прямые из первого набора входных данных примера. Чёрными кружочками выделены целочисленные точки пересечения.

C. Упорядочьте точки

геометрия интерактив Конструктив математика *2300

Это — интерактивная задача.

У Кханя есть \(n\) точек в декартовой системе координат, которые обозначаются как \(a_1, a_2, \ldots, a_n\). Все координаты точек — целые числа от \(-10^9\) до \(10^9\) включительно. Нет трех коллинеарных точек. Он говорит, что эти точки являются вершинами выпуклого многоугольника; другими словами, существует перестановка \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\), такая, что многоугольник \(a_{p_1} a_{p_2} \ldots a_{p_n}\) является выпуклым и вершины перечислены против часовой стрелки.

Кхань дает вам число \(n\), но не координаты своих точек. Ваша задача — угадать вышеуказанную перестановку, задав несколько запросов. В каждом запросе вы даете Кханю \(4\) целых чисел \(t\), \(i\), \(j\), \(k\); где либо \(t = 1\), либо \(t = 2\); и \(i\), \(j\), \(k\) — это три различных индекса от \(1\) до \(n\) включительно. В ответ Хан говорит вам:

  • Если \(t = 1\), то площадь треугольника \(a_ia_ja_k\) умноженную на \(2\).
  • Если \(t = 2\), то знак векторного произведения двух векторов \(\overrightarrow{a_ia_j}\) и \(\overrightarrow{a_ia_k}\).

Напомним, что векторное произведение вектора \(\overrightarrow{a} = (x_a, y_a)\) и вектора \(\overrightarrow{b} = (x_b, y_b)\) — это целое число \(x_a \cdot y_b - x_b \cdot y_a\). Знак числа равен \(1\), если оно положительное, и \(-1\) иначе. Можно показать, что векторное произведение в запросах никогда не будет \(0\).

Вы можете задать не более \(3 \cdot n\) запросов.

Обратите внимание, что Кхань фиксирует координаты своих точек и не меняет их, отвечая на ваши запросы. Вам не нужно угадывать координаты. В вашей перестановке \(a_{p_1}a_{p_2}\ldots a_{p_n}\), \(p_1\) должен быть равен \(1\) и все индексы вершин должны быть перечисленны против часовой стрелки.

Протокол взаимодействия

Сначала считайте целое число \(n\) (\(3 \leq n \leq 1\,000\)) — количество вершин.

Чтобы задать запрос, выведите \(4\) целых числа \(t\), \(i\), \(j\), \(k\) (\(1 \leq t \leq 2\), \(1 \leq i, j, k \leq n\)) на отдельной строке. \(i\), \(j\) и \(k\) должны быть различны.

После этого считайте ответ на запрос. Можно показать, что ответ на любой запрос всегда целое число.

Когда вы найдете перестановку, выведите \(0\). Затем выведите \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) на той же строке.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взломов используйте следующий формат:

Первая строка должна содержать целое число \(n\) (\(3 \leq n \leq 1\,000\)) — количество вершин.

\(i\)-я из следующих \(n\) строк должна содержать два целых числа \(x_i\) и \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)) — координаты точки \(a_i\).

Примечание

Рисунок ниже показывает спрятанный многоугольник в примере:

Взаимодействие в примере идет следующим образом:

  • Участник считывает \(n = 6\).
  • Участник задает запрос \(t = 1\), \(i = 1\), \(j = 4\), \(k = 6\).
  • Жюри отвечает \(15\). Площадь \(A_1A_4A_6\) равна \(7.5\). Обратите внимание, что ответ — это площадь умноженная на два.
  • Участник задает запрос \(t = 2\), \(i = 1\), \(j = 5\), \(k = 6\).
  • Жюри отвечает \(-1\). Векторное произведение \(\overrightarrow{A_1A_5} = (2, 2)\) и \(\overrightarrow{A_1A_6} = (4, 1)\) равно \(-2\). Знак \(-2\) равен \(-1\).
  • Участник задает запрос \(t = 2\), \(i = 2\), \(j = 1\), \(k = 4\).
  • Жюри отвечает \(1\). Векторное произведение \(\overrightarrow{A_2A_1} = (-5, 2)\) и \(\overrightarrow{A_2A_4} = (-2, -1)\) равно \(1\). Знак \(1\) равен \(1\).
  • Участник отвечает \((1, 3, 4, 2, 6, 5)\).

A. О трате времени

геометрия *900

Мистер Жлобс, очень деловой человек, решил посчитать время, потраченное им на всякие бессмысленные дела, дабы оценить упущенную прибыль. Он уже посчитал время, которое он потратил на сон и еду. Теперь Жлобс хочет посчитать сколько времени он потратил на подписывание бумаг.

Подпись мистера Жлобса можно представить в виде ломаной линии A1A2... An. Жлобс пишет подпись следующим образом. Сначала он ставит ручку в точку A1, затем проводит отрезок из точки A1 в точку A2, затем проводит отрезок из точки A2 в точку A3 и так далее до точки An, где и отрывает ручку от бумаги. При этом получившаяся линия может пересекаться сама с собой или частично повторять себя, но Жлобс не обращает на это никакого внимания и никогда не меняет способ написания. Жлобс пишет свою подпись не отрывая ручки от бумаги с постоянной скоростью — 50 миллиметров в секунду.

В своей жизни Жлобс подписал ровно k бумаг и на всех них подпись выглядит одинаково.

Определите общее время, которое мистер Жлобс потратил на подписывание бумаг.

Входные данные

В первой сроке находятся два целых числа n и k (2 ≤ n ≤ 100, 1 ≤ k ≤ 1000). В каждой из последующих n строк даны координаты точек ломаной. В i-ой из них находятся координаты точки Ai — целые числа xi и yi, разделенные пробелом.

Все точки Ai различны. Все координаты не превосходят по абсолютному значению 20 и заданы в миллиметрах.

Выходные данные

Выведите одно вещественное число — общее время, затраченное на подписывание бумаг, в секундах — с абсолютной или относительной погрешностью не более 10 - 6.

E. Разделите точки

геометрия Конструктив математика *2300

Вам дано множество из \(n\ge 2\) попарно различных точек с целыми координатами. Вы должны разделить эти точки на 2 непустые группы \(A\) и \(B\), чтобы следующее условие выполнялось:

Для любых двух точек \(P\) и \(Q\), напишите Евклидово расстояние между ними на доске: если они принадлежат одной и той же группе — желтым цветом, а если различным группам — синим цветом. Тогда ни одное желтое число не должно равняться ни одному синему числу.

Гарантируется, что такое разбиение существует при данных ограничениях. Если существуют различные разбиения, вы можете вывести любое из них.

Входные данные

Первая строка содержит одно целое число \(n\) \((2 \le n \le 10^3)\) — количество точек.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^6 \le x_i, y_i \le 10^6\)) — координаты \(i\)-й точки.

Гарантируется, что все \(n\) точек попарно различны.

Выходные данные

В первой строке, выведите \(a\) (\(1 \le a \le n-1\)) — количество точек в группе \(A\).

Во второй строке, выведите \(a\) чисел — номера точек, которые вы берете в группу \(A\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере, мы берем точку \((0, 0)\) в группу \(A\), а точки \((0, 1)\) и \((1, 0)\) в группу \(B\). Таким образом, на доске будет написано \(1\) желтое число \(\sqrt{2}\) и \(2\) синих числа \(1\).

Во втором примере, мы берем точки \((0, 1)\) и \((0, -1)\) в группу \(A\), а точки \((-1, 0)\) и \((1, 0)\) в группу \(B\). Таким образом, на доске будет написано \(2\) желтых числа \(2\) и \(4\) синих числа \(\sqrt{2}\).

C. Ларек с шаурмой

геометрия жадные алгоритмы Перебор реализация *1300

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

Известно, что школа в столице Берляндии расположена в точке \((s_x, s_y)\). В школе учатся \(n\) учеников, причем \(i\)-й ученик живет в доме, который расположен в точке \((x_i, y_i)\). Допустимо, что несколько учеников живут в одном и том же доме, но никакой ученик не живет в точке \((s_x, s_y)\).

После занятий каждый ученик идет из школы до своего дома по улицам, причем каждый ученик обязательно идет до своего дома по какому-то из кратчайших путей. Таким образом, расстояние, которое преодолеет \(i\)-й ученик, чтобы добраться из школы до дома, равно \(|s_x - x_i| + |s_y - y_i|\).

Министерство питания решило установить ларек с шаурмой в столице Берляндии в точке с целочисленными координатами. Считается, что \(i\)-й школьник купит шаурму в ларьке, если ларек находится на одном из кратчайших путей \(i\)-го школьника до дома. Запрещено ставить ларек с шаурмой в той же точке, в которой расположена школа, но разрешено ставить ларек в той точке, в которой расположен дом кого-то из учеников.

Определите максимальное количество школьников, которые смогут купить шаурму в ларьке, а также сообщите координаты для постройки ларька.

Входные данные

В первой строке следует три целых числа \(n\), \(s_x\), \(s_y\) (\(1 \le n \le 200\,000\), \(0 \le s_x, s_y \le 10^{9}\)) — количество школьников и координаты школы.

В \(i\)-й из следующих \(n\) строк следуют по два целых числа \(x_i\), \(y_i\) (\(0 \le x_i, y_i \le 10^{9}\)) — координаты дома \(i\)-го школьника. Координаты домов у некоторых школьников могут совпадать. Гарантируется, что дом никакого школьника не расположен в той же точке, что и школа.

Выходные данные

В первую строку выведите целое число \(c\) — максимальное количество школьников, которые смогут купить шаурму в ларьке.

Во вторую строку выведите два целых числа \(p_x\) и \(p_y\) — координаты для постройки ларька. Если подходящих ответов несколько, разрешается вывести любой из них. Обратите внимание, что каждое из чисел \(p_x\) и \(p_y\) должно быть не менее \(0\) и не более \(10^{9}\).

Примечание

В первом примере нужно построить ларек с шаурмой в точке \((4, 2)\). Тогда три школьника его посетят. Это школьники, чьи дома расположены в точках \((4, 2)\), \((4, 1)\) и \((5, 1)\).

Во втором примере можно, например, построить ларек с шаурмой в точке \((1, 1)\). В таком случае оба школьника, дом которых расположен в точке \((0, 0)\), его посетят.

E. День рождения

геометрия математика *2900

Сейчас у Ани День рождения. Она позвала много гостей и приготовила для них один большой (почти бесконечный) праздничный торт, украшенный n кружочками банана разных размеров. Через 7 минут у Маши тоже будет День рождения, а пока Аня старше, она решила немного покомандовать. Она велела Маше разрезать торт k прямолинейными разрезами на несколько частей (разрезы могут пересекаться). В результате кружочки банана разделятся на кусочки.

Гостей у Ани много, и она хочет, чтобы каждому достался хотя бы один кусочек банана с торта. Поэтому она велела Маше сделать максимально возможным суммарное количество кусочков банана, на которые разрежутся кружочки банана. Не страшно, если некоторые кусочки банана окажутся на одном куске торта — главное, чтобы общее число кусочков банана было наибольшим. Определите, какого результата удастся достичь Маше.

Входные данные

В первой строке даны два целых числа n и k — количество кружочков банана и количество разрезов, которые требуется сделать Маше (1 ≤ n ≤ 1000, 1 ≤ k ≤ 105). В следующих n строках заданы местоположение и размеры кружочков банана, которые имеют форму кругов. На торте задана декартова система координат. В каждой строке находятся три целых числа x, y и r — координаты центра соответствующего кружочка банана и его радиус ( - 1000 ≤ x, y ≤ 1000, 1 ≤ r ≤ 1000).

Гарантируется, что кружочки банана не пересекаются, не касаются и не накладываются друг на друга.

Претест 10 — большой тест с n = k = 1000.

Выходные данные

Выведите единственное целое число — наибольшее количество кусочков банана, которое может получиться у Маши после k прямолинейных разрезов.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

E. Новый год и строительство замком

геометрия Комбинаторика математика сортировки *2500

Любимая видеоигра Кивона теперь проводит новогоднее мероприятие, чтобы мотивировать пользователей! Игра о строительстве и защите замка, поэтому Кивон задумался над следующей загадкой.

В двумерной плоскости у вас есть набор \(s = \{(x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\}\), состоящий из \(n\) различных точек. В множестве \(s\) нет трех точек на одной прямой. Мы можем защитить точку \(p \in s\), построив замок. Замок — это простой четырехугольник (многоугольник с \(4\) вершинами), который строго покрывает точку \(p\) (то есть точка \(p\) строго внутри четырёхугольника).

Кивона интересует количество подмножеств \(s\) из \(4\)-х точек, которые можно использовать для построения замка, защищающего точку \(p\). Обратите внимание, что если одно подмножество может быть соединено более чем одним способом, чтобы покрыть точку, то оно считается только один раз.

Пусть \(f(p)\) будет количеством подмножеств из \(4\)-х точек, которые могут покрыть точку \(p\). Пожалуйста, посчитайте сумму \(f(p)\) по всем точкам \(p \in s\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(5 \le n \le 2\,500\)).

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)), которые обозначают координаты точки.

Гарантируется, что все точки различны и что нет трех коллинеарных точек.

Выходные данные

Выведите сумму \(f(p)\) по всем точкам \(p \in s\).

B. Арома и её поиск

геометрия жадные алгоритмы Конструктив Перебор реализация *1700

С новым телом наш идол Арома Белая (или лучше было сказать Каори Минамийа?) начинает восстанавливать своё потерянное прошлое через OS-пространство.

Это пространство можно представить как 2D плоскость, с бесконечным количеством устройств с данными, пронумерованных с \(0\). Координаты устройств можно описать следующим образом:

  • Координаты \(0\)-го устройства равны \((x_0, y_0)\)
  • Для \(i > 0\), координаты \(i\)-го устройства равны \((a_x \cdot x_{i-1} + b_x, a_y \cdot y_{i-1} + b_y)\)

Изначально Арома расположена в точке \((x_s, y_s)\). Она может находиться в OS-пространстве не более \(t\) секунд, после этого ей придётся вернуться в реальный мир. Чтобы вернутся в реальный мир не требуется возвращаться в изначальную точку \((x_s, y_s)\).

Внутри OS-пространства Арома может делать следующие действия:

  • Из точки \((x, y)\) Арома может перейти в одну из следующих точек \((x-1, y)\), \((x+1, y)\), \((x, y-1)\) или \((x, y+1)\). Это действие занимает \(1\) секунду.
  • Если Арома стоит в точке с устройством, то она может его собрать. Можно считать, что это действие занимает \(0\) секунд. Разумеется, каждое устройство можно собрать не более одного раза.

Арома хочет собрать как можно больше данных перед тем как вернётся назад. Помогите ей определить максимальное количество устройств с данными, которые она сможет собрать за \(t\) секунд.

Входные данные

Первая строка содержит целые числа \(x_0\), \(y_0\), \(a_x\), \(a_y\), \(b_x\), \(b_y\) (\(1 \leq x_0, y_0 \leq 10^{16}\), \(2 \leq a_x, a_y \leq 100\), \(0 \leq b_x, b_y \leq 10^{16}\)), которые задают координаты устройств с данными.

Вторая строка содержит целые числа \(x_s\), \(y_s\), \(t\) (\(1 \leq x_s, y_s, t \leq 10^{16}\)), изначальные координаты Аромы и доступное время.

Выходные данные

Выведите одно целое число — максимальное количество устройств с данными которые Арома сможет собрать за \(t\) секунд.

Примечание

Во всех трёх примерах, координаты первых \(5\) устройств равны \((1, 1)\), \((3, 3)\), \((7, 9)\), \((15, 27)\) и \((31, 81)\) (напомним, что устройства пронумерованы начиная с \(0\)).

В первом примере оптимальный маршрут чтобы собрать \(3\) вершины выглядит следующим образом:

  • Перейти в точку \((3, 3)\) и собрать \(1\)-е устройство. Это занимает \(|3 - 2| + |3 - 4| = 2\) секунд.
  • Перейти в точку \((1, 1)\) и собрать \(0\)-е устройство. Это занимает \(|1 - 3| + |1 - 3| = 4\) секунд.
  • Перейти в точку \((7, 9)\) и собрать \(2\)-е устройство. Это занимает \(|7 - 1| + |9 - 1| = 14\) секунд.

Во втором примере оптимальный маршрут чтобы собрать \(2\) вершины выглядит следующим образом:

  • Собрать \(3\)-е устройство. Это занимает ноль секунд.
  • Перейти в точку \((7, 9)\) и собрать \(2\)-е устройство. Это занимает \(|15 - 7| + |27 - 9| = 26\) секунд.

В третьем примере Арома не может собрать ни одного устройства. Пожалуй стоило отдохнуть, а не рваться в OS-пространство без подготовки.

B. Аэродинамический

геометрия *1800

Ги-Мануэль и Тома хотят построить космический корабль, являющийся выпуклым многоугольником.

Вам дан строго выпуклый (т. е. никакие три вершины не лежат на одной прямой) многоугольник \(P\), заданный координатами его точек на плоскости. Обозначим как \(P(x,y)\) многоугольник, полученный параллельным переносом \(P\) на вектор \(\overrightarrow {(x,y)}\). Следующий рисунок показывает пример параллельного переноса:

Обозначим как \(T\) множество точек, являющееся объединением всех \(P(x,y)\) таких, что начало координат \((0,0)\) лежит в \(P(x,y)\) (в том числе и на границе). Также можно дать эквивалентное определение: точка \((x,y)\) принадлежит \(T\), только если в \(P\) существуют две точки \(A,B\) такие, что \(\overrightarrow {AB} = \overrightarrow {(x,y)}\). Можно показать, что \(T\) тоже является многоугольником. Например, если \(P\) — правильный треугольник, то \(T\) — правильный шестиугольник; на рисунке \(P\) нарисован чёрным цветом, а некоторые \(P(x,y)\), в которых лежит начало координат, нарисованы цветным: Космический корабль будет иметь наилучшие аэродинамические показатели, если \(P\) и \(T\) подобны. Ваша задача — проверить, что многоугольники \(P\) и \(T\)подобны.

Входные данные

Первая строка содержит целое число \(n\) (\(3 \le n \le 10^5\)) — количество точек.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i, y_i\) (\(|x_i|, |y_i| \le 10^9\)), обозначающих координаты \(i\)-й вершины многоугольника.

Гарантируется, что точки даны в порядке обхода против часовой стрелки, и что они образуют строго выпуклый многоугольник.

Выходные данные

Выведите «YES» с новой строки, если \(P\) и \(T\) подобны. Иначе, выведите «NO» с новой строки. Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

На рисунке показан первый тестовый пример: \(P\) и \(T\) — квадраты. Второй пример был разобран в условии.

C. Водный баланс

геометрия жадные алгоритмы Структуры данных *2100

\(n\) цистерн с водой стоят в ряд, \(i\)-я из них содержит \(a_i\) литров воды. Цистерны пронумерованны от \(1\) до \(n\) слева направо.

Вы можете выполнить следующую операцию: выбрать некоторый подотрезок \([l, r]\) (\(1\le l \le r \le n\)), и перераспределить воду с цистерн \(l, l+1, \dots, r\) между ними равномерно. Другими словами, заменить каждое из \(a_l, a_{l+1}, \dots, a_r\) на \(\frac{a_l + a_{l+1} + \dots + a_r}{r-l+1}\). К примеру, если для обьемов \([1, 3, 6, 7]\) вы выберете \(l = 2, r = 3\), вы получите обьемы \([1, 4.5, 4.5, 7]\). Вы можете выполнять данную операцию любое количество раз.

Какую лексикографически минимальную последовательность обьемов воды вы можете получить?

Напомним:

Последовательность \(a\) лексикографически меньше последовательности \(b\) равной длины, если и только если выполняется следующее: в первой (слева) позиции, где \(a\) и \(b\) отличаются, в последовательности \(a\) стоит меньший элемент, чем в \(b\).

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 10^6\)) — количество цистерн с водой.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — обьемы воды в цистернах изначально, в литрах.

Из-за большого размера входных данных, не рекомендуется считывать их как doubles.

Выходные данные

Выведите лексикографически минимальную последовательность, которую вы можете получить. В \(i\)-й строке выведите итоговый обьем воды в \(i\)-й цистерне.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка каждого \(a_i\) не превосходит \(10^{-9}\).

Формально, пусть ваш ответ равен \(a_1, a_2, \dots, a_n\), а ответ жюри равен \(b_1, b_2, \dots, b_n\). Ваш ответ будет зачтен, если и только если \(\frac{|a_i - b_i|}{\max{(1, |b_i|)}} \le 10^{-9}\) для каждого \(i\).

Примечание

В первом примере, вы можете получить лексикографически минимальную последоательность, применив операцию к подотрезку \([1, 3]\).

Во втором примере, вы не можете получить меньшую лексикографически последовательность.

B. Буква А

геометрия реализация *2000

Маленький Петя учится писать. Учительница дала всем задание написать букву А на листе бумаги. Требуется проверить, действительно ли Петя написал букву А или же он ошибся.

Даны координаты трех отрезков на плоскости. Назовем образованную ими фигуру буквой А, если выполняются такие условия:

  • Два отрезка имеют один общий конец (назовем эти отрезки первым и вторым), а третий соединяет 2 точки на разных отрезках.
  • Угол между первыми двумя отрезками строго больший 0 градусов и не превышает 90 градусов.
  • Третий отрезок делит первый и второй в отношении не менее чем 1 / 4 считая от любого из концов (т.е. отношение длины меньшей части к длине большей не меньше чем 1/4).
Входные данные

Первая строка содержит число t (1 ≤ t ≤ 10000) — количество тестов. Каждый тест состоит из трех строк. Первая строка каждого теста содержит четыре целых числа, по модулю не превышающих 108 — координаты концов одного из отрезков. Следующие 2 строки теста содержат координаты остальных двух отрезков в таком же формате. Все отрезки имеют строго положительную длину.

Выходные данные

Для каждого теста нужно вывести «YES» (без кавычек), если отрезки образуют букву A и «NO» в противном случае.

D. Треугольники

геометрия дп *2600

Маленький Петя очень любит рисовать. Он нарисовал N красных и M синих точек на плоскости, причем так что никакие 3 из них не лежат на 1 прямой. Теперь ему интересно, сколько есть различных треугольников с вершинами в красных точках, не содержащих в себе ни одной синей точки.

Входные данные

Первая строка содержит 2 целых неотрицательных числа N и M (0 ≤ N ≤ 500, 0 ≤ M ≤ 500) - количество красных и синих точек, соответственно. Следующие N строк содержат по 2 целых числа - координаты красных точек. Следующие M строк содержат по 2 целых числа - координаты синих точек. Все координаты по модулю не превосходят 109.

Выходные данные

На выходе должно быть одно число - искомое количество треугольников с вершинами в красных точках, не содержащих в себе ни одной синей точки.

G. Сумма префиксных сумм

геометрия Деревья разделяй и властвуй Структуры данных *2700

Определим сумму префиксных сумм массива \([s_1, s_2, \dots, s_k]\) как \(s_1 + (s_1 + s_2) + (s_1 + s_2 + s_3) + \dots + (s_1 + s_2 + \dots + s_k)\).

Вам задано дерево, состоящее из \(n\) вершин. В каждой вершине \(i\) записано целое число \(a_i\). Определим значение простого пути от вершины \(u\) до вершины \(v\) следующим образом: рассмотрим все вершины на пути от \(u\) до \(v\), выпишем числа, записанные на этих вершинах, в порядке их появления на пути, и вычислим сумму префиксных сумм получившейся последовательности.

Ваша задача — найти максимальное значение по всем путям в дереве.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 150000\)) — число вершин в дереве.

Затем следует \(n - 1\) строк, описывающих ребра дерева. Каждая строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)), обозначающие ребро между вершинами \(u_i\) и \(v_i\). Гарантируется, что эти ребра образуют дерево.

Последняя строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^6\)).

Выходные данные

Выведите одно целое число — максимальное значение по всем путям в дереве.

Примечание

Ответ в первом примере достигается, если выбрать путь из вершины \(3\) в вершину \(1\). Мы получаем последовательность \([3, 3, 7, 1]\), сумма префиксных сумм которой равна \(36\).

B. Корова и друг

геометрия жадные алгоритмы математика *1300

У Бесси действительно много друзей, потому что она — всеми любимая корова! Ее новый друг Кролик пытается допрыгать до Бесси, чтобы поиграть вместе!

Точнее, он хочет попасть из \((0,0)\) в \((x,0)\), сделав несколько прыжков. Он готов прыгнуть из одной точки в другую на плоскости только если евклидово расстояние между этими точками равно одному из \(n\) его любимых чисел: \(a_1, a_2, \ldots, a_n\). За какое минимальное количество прыжков Кролик сможет добраться из \((0,0)\) в \((x,0)\)? Кролик может приземляться, в том числе, и в точки с нецелочисленными координатами. Можно доказать, что Кролик всегда может достигнуть точки назначения.

Напомним, что евклидово расстояние между точками \((x_i, y_i)\) и \((x_j, y_j)\) равно \(\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}\).

Например, если любимые числа Кролика — это \(1\) и \(3\), то он может добраться из \((0,0)\) в \((4,0)\) за два прыжка (как показано ниже). Заметим, что существуют и другие способы добраться до \((4,0)\) за \(2\) прыжка (например, \((0,0)\) \(\rightarrow\) \((2,-\sqrt{5})\) \(\rightarrow\) \((4,0)\)).

Изображение соответствует первому набору входных данных из примера. Длина обоих прыжков равна \(3\), одному из любимых чисел Кролика.

Таким образом, перед каждым прыжком Кролик выбирает одно из чисел \(a_i\) и прыгает из текущей точки на расстояние ровно \(a_i\) в произвольном направлении. Одно и то же число он может выбирать любое количество раз.

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке задано единственное число \(t\) (\(1 \le t \le 1000\))  — количество наборов входных данных. В следующих \(2t\) строках заданы сами наборы  — по две строки на набор.

В первой строке каждого набора задано два целых числа \(n\) и \(x\) (\(1 \le n \le 10^5\), \(1 \le x \le 10^9\))  — количество любимых чисел и расстояние, которое необходимо преодолеть Кролику соответственно.

Во второй строке каждого набора задано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\))  — любимые числа Кролика. Гарантируется, что все любимые числа различны.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число  — минимальное необходимое количество прыжков.

Примечание

Первый набор изображен на рисунке выше. Кролик может прыгнуть сначала в \((2,\sqrt{5})\), а потом в \((4,0)\) — суммарно два прыжка. Каждый прыжок имеет длину \(3\) — одно из его любимых чисел.

Во втором наборе, одним из способов добраться за \(3\) прыжка является: \((0,0)\) \(\rightarrow\) \((4,0)\) \(\rightarrow\) \((8,0)\) \(\rightarrow\) \((12,0)\).

В третьем наборе, Кролик может прыгнуть из \((0,0)\) в \((5,0)\).

В четвертом наборе, Кролик может прыгать так: \((0,0)\) \(\rightarrow\) \((5,10\sqrt{2})\) \(\rightarrow\) \((10,0)\).

A. Два правильных многоугольника

геометрия жадные алгоритмы математика теория чисел *800

Вам задано два целых числа \(n\) и \(m\) (\(m < n\)). Рассмотрим выпуклый правильный многоугольник на \(n\) вершинах. Напомним, что правильный многоугольник — это многоугольник, у которого все углы равны между собой и все стороны равны между собой.

Примеры выпуклых правильных многоугольников

Ваша задача — узнать, возможно ли построить другой выпуклый правильный многоугольник на \(m\) вершинах такой, что его центр совпадает с центром изначального многоугольника, а каждая его вершина является какой-то вершиной изначального многоугольника.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных.

Следующие \(t\) строк описывают наборы тестовых данных. Каждый набор тестовых данных задан двумя целыми числами \(n\) и \(m\), разделенных пробелом (\(3 \le m < n \le 100\)) — количеством вершин в изначальном многоугольнике и количеством вершин в многоугольнике, который вы хотите построить.

Выходные данные

Выведите ответ на каждый набор тестовых данных — «YES» (без кавычек), если возможно построить другой выпуклый правильный многоугольник на \(m\) вершинах такой, что его центр совпадает с центром изначального многоугольника, а каждая его вершина является какой-то вершиной изначального многоугольника, и «NO» в противном случае.

Примечание
Первый набор тестовых данных из примера

Можно показать, что ответ на второй набор тестовых данных из примера равен «NO».

G. Деревья паутины

геометрия Деревья дп *3500

Назовем граф с \(n\) вершинами, каждой из которых соответствует своя точка \(A_i = (x_i, y_i)\) с целыми координатами, планарным деревом, если:

  • Все точки \(A_1, A_2, \ldots, A_n\) различны и никакие три точки не лежат на одной прямой.
  • Граф является деревом, то есть в графе ровно \(n-1\) ребро и существует путь между любой парой вершин.
  • Для всех пар ребер \((s_1, f_1)\) и \((s_2, f_2)\), таких что \(s_1 \neq s_2, s_1 \neq f_2,\) \(f_1 \neq s_2\) и \(f_1 \neq f_2\), отрезки \(A_{s_1} A_{f_1}\) и \(A_{s_2} A_{f_2}\) не пересекаются.

Представим планарное дерево на \(n\) вершинах. Рассмотрим выпуклую оболочку множества точек \(A_1, A_2, \ldots, A_n\). Давайте назовем это дерево паутиной если для всех \(1 \leq i \leq n\) следующие условия верны:

  • Все листья (вершины со степенью \(\leq 1\)) лежат на выпуклой оболочке.
  • Все вершины на выпуклой оболочке являются листьями.

Пример паутины:

Точки \(A_3, A_6, A_7, A_4\) лежат на выпуклой оболочке и вершины \(3, 6, 7, 4\) это все листья этого дерева.

Обратитесь к примечанию для большего количества примеров.

Давайте назовем подмножество \(S \subset \{1, 2, \ldots, n\}\) вершин поддеревом, если для всех пар вершин из \(S\) существует путь между ними, содержащий только вершины из множества \(S\). Обратите внимание, что любое поддерево планарного дерева также будет являться планарным деревом.

Вам дано планарное дерево, состоящее из \(n\) вершин. Назовем разбиение множества вершин \(\{1, 2, \ldots, n\}\) на непустые подмножества \(A_1, A_2, \ldots, A_k\) (то есть \(A_i \cap A_j = \emptyset\) для всех \(1 \leq i < j \leq k\) и \(A_1 \cup A_2 \cup \ldots \cup A_k = \{1, 2, \ldots, n\}\)) хорошим, если для всех \(1 \leq i \leq k\), множество \(A_i\) является поддеревом и паутиной. Два разбиения различны, если существует некоторое множество, лежащее в одном разбиении, но не лежащее в другом.

Найдите количество хороших разбиений. Поскольку это число может быть очень большим, найдите его по модулю \(998\,244\,353\).

Входные данные

В первой строке находится единственное целое число \(n\) (\(1 \leq n \leq 100\)) — количество вершин в дереве.

В следующих \(n\) строках находится по два целых числа \(x_i, y_i\) (\(-10^9 \leq x_i, y_i \leq 10^9\))  — координаты \(i\)-й вершины, точки \(A_i\).

В следующей \(n-1\) строке находится по два целых числа \(s, f\) (\(1 \leq s, f \leq n\)) — ребра \((s, f)\) данного дерева.

Гарантируется, что все точки различны и никакие три точки не лежат на одной прямой. Также гарантируется, что данные ребра и координаты точек описывают планарное дерево.

Выходные данные

Выведите одно целое число  — количество хороших разбиений множества вершин данного планарного дерева по модулю \(998\,244\,353\).

Примечание
Картинка дерева из первого теста.

В первом тесте, все хорошие разбиения это:

  1. \(\{1\}\), \(\{2\}\), \(\{3\}\), \(\{4\}\);
  2. \(\{1, 2\}\), \(\{3\}\), \(\{4\}\);
  3. \(\{1, 3\}\), \(\{2\}\), \(\{4\}\);
  4. \(\{1, 4\}\), \(\{2\}\), \(\{3\}\);
  5. \(\{1, 2, 3, 4\}\).

Разбиение \(\{1, 2, 3\}\), \(\{4\}\) не является хорошим, потому что поддерево \(\{1, 2, 3\}\) это не паутина, потому что вершина \(1\), не являющаяся листом, лежит на выпуклой оболочке.

Разбиение \(\{2, 3, 4\}\), \(\{1\}\) не является хорошим, потому что подмножество \(\{2, 3, 4\}\) не является поддеревом.

Картинка дерева из второго теста.

Во втором тесте, данное дерево само не является паутиной, потому что вершина \(1\), которая является листом, не лежит на выпуклой оболочке. Однако, поддерево \(\{2, 3, 4, 5\}\) является паутиной.

Картинка дерева из третьего теста.
Картинка дерева из четвертого теста.

В четвертом тесте, разбиение \(\{1, 2, 3, 4\}\), \(\{5, 6, 7, 8\}\) хорошее, потому что оба подмножества являются паутинами.

E. Смайлик Жордана

*особая задача геометрия поиск в глубину и подобное реализация

Входные данные

Входные данные содержат два целых числа \(row\), \(col\) (\(0 \le row, col \le 63\)), разделенных пробелом.

Выходные данные

Выведите «IN» или «OUT».

B. Прямоугольник и квадрат

геометрия математика Перебор *1600

Маленький Петя очень любит прямоугольники, а особенно квадраты. Недавно мама подарила ему 8 попарно не совпадающих точек на плоскости. Он решил разбить их на два множества по 4 точки так, чтобы точки из первого множества лежали в вершинах некоего квадрата, а из второго — в вершинах прямоугольника. Каждая из заданных 8 точек должна принадлежать ровно одному множеству. Допускается, чтобы прямоугольник из второго множества также был квадратом. Если разбиений несколько, Петю удовлетворит любое. Помогите ему найти одно такое разбиение. Обратите внимание, что и прямоугольник, и квадрат из разбиения должны иметь ненулевую площадь. Стороны фигур не обязательно должны быть параллельны осям координат.

Входные данные

Задано 8 пар целых чисел, по одной паре в каждой строке — координаты точек, которые есть у Пети. Все координаты по модулю не превышают 104. Гарантируется, что никакие две точки не совпадают.

Выходные данные

В первой строке выведите «YES» (без кавычек), если искомое разбиение существует. Во второй строке выведите 4 числа через пробел — номера точек из исходного множества, которые лежат в вершинах квадрата. Точки нумеруются начиная с 1. Номера можно выводить в любом порядке. В третьей строке выведите номера точек, лежащих в вершинах прямоугольника в аналогичном формате. Все выведенные числа должны быть попарно различны.

Если искомого разбиения не существует, первая строка должна содержать слово «NO» (без кавычек), после которого ничего выводить не нужно.

Примечание

Обратите внимание на третий пример: стороны фигур не обязательно должны быть параллельны осям координат.

C1. Просто вписываем многоугольник

Бинарный поиск геометрия математика Тернарный поиск *1400

Условие этой задачи почти полностью совпадает с условием задачи C2. Единственное отличие в следующем: в задаче C1 \(n\) всегда четно, а в задаче C2 \(n\) всегда нечетно.

Вам задан правильный многоугольник из \(2 \cdot n\) вершин (то есть он выпуклый и имеет равные стороны и углы) и все его стороны имеют длину \(1\). Назовем этот многоугольник \(2n\)-угольником.

Ваша задача — найти квадрат минимального размера, такой что в него можно вписать \(2n\)-угольник. \(2n\)-угольник можно вписать в квадрат, если \(2n\)-угольник можно разместить таким образом, что каждая точка, лежащая внутри или на границе \(2n\)-угольника также будет лежать внутри или на границе квадрата.

Вы можете вращать \(2n\)-угольник и/или квадрат.

Входные данные

В первой строке задано целое число \(T\) (\(1 \le T \le 200\)) — количество наборов входных данных.

В следующих \(T\) строках заданы описания наборов — по одной строке на набор. В каждой строке задано единственное четное целое число \(n\) (\(2 \le n \le 200\)). Не забывайте, что вам нужно вписать \(2n\)-угольник, а не \(n\)-угольник.

Выходные данные

Выведите \(T\) действительных чисел — по одному на набор входных данных. Для каждого набора, выведите минимальную длину стороны квадрата, в который можно вписать \(2n\)-угольник. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит \(10^{-6}\).

C2. Не так просто вписываем многоугольник

Бинарный поиск геометрия математика Перебор *2000

Условие этой задачи почти полностью совпадает с условием задачи C1. Единственное отличие в следующем: в задаче C1 \(n\) всегда четно, а в задаче C2 \(n\) всегда нечетно.

Вам задан правильный многоугольник из \(2 \cdot n\) вершин (то есть он выпуклый и имеет равные стороны и углы) и все его стороны имеют длину \(1\). Назовем этот многоугольник \(2n\)-угольником.

Ваша задача — найти квадрат минимального размера, такой что в него можно вписать \(2n\)-угольник. \(2n\)-угольник можно вписать в квадрат, если \(2n\)-угольник можно разместить таким образом, что каждая точка, лежащая внутри или на границе \(2n\)-угольника также будет лежать внутри или на границе квадрата.

Вы можете вращать \(2n\)-угольник и/или квадрат.

Входные данные

В первой строке задано целое число \(T\) (\(1 \le T \le 200\)) — количество наборов входных данных.

В следующих \(T\) строках заданы описания наборов — по одной строке на набор. В каждой строке задано единственное нечетное целое число \(n\) (\(3 \le n \le 199\)). Не забывайте, что вам нужно вписать \(2n\)-угольник, а не \(n\)-угольник.

Выходные данные

Выведите \(T\) действительных чисел — по одному на набор входных данных. Для каждого набора, выведите минимальную длину стороны квадрата, в который можно вписать \(2n\)-угольник. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит \(10^{-6}\).

F. Шоу взрывов на радиоуправлении

Бинарный поиск геометрия математика Перебор Структуры данных *2900

Знаете, в наше время довольно сложно организовать шоу с большим количеством участников и зрителей в одном месте. Тем не менее, вы не отказываетесь от своей мечты провести шоу со взрывами машин! Вы решили заменить настоящие машины радиоуправляемыми, назвать мероприятия «Шоу взрывов на радиоуправлении» и транслировать все онлайн.

Для подготовки вы нашли арену — бесконечную 2D-сетку. Вы также закупили \(n\) радиоуправляемых машинок и расставили их по арене. К сожалению, эти машинки могут ехать только вперед, без возможности поворотов налево, направо или разворотов. Более того, вы направили машинки туда, куда хотите, чтобы они поехали.

Формально, для каждой машинки \(i\) (\(1 \le i \le n\)) вы зафиксировали ее начальную позицию (\(x_i, y_i\)) и вектор направление (\(dx_i, dy_i\)). Более того, у каждой машинки есть константная скорость \(s_i\) единиц в секунду. То есть после запуска машинка \(i\) двигается из (\(x_i, y_i\)) в направлении (\(dx_i, dy_i\)) с константной скоростью \(s_i\).

Цель вашего шоу — столкнуть две машинки как можно скорее! Вы обратили внимание, что если запускать все машинки в самом начале шоу, то довольно часто столкновений не происходит вообще. Поэтому вы решили запустить \(i\)-ю машинку в некоторый момент \(t_i\). Вы еще не выбрали \(t_i\), это еще надо решить. Обратите внимание, что \(t_i\) не обязательно должно быть целым, и допустимо, чтобы \(t_i\) совпадало с \(t_j\) для любых \(i, j\).

Шоу начинается в момент времени \(0\). Шоу заканчивается, когда какие-нибудь две машинки \(i\) и \(j\) (\(i \ne j\)) сталкиваются (то есть оказываются в одной точке в одно и то же время). Длительность шоу равна времени между началом и концом.

Какое самое быстрое столкновение вы можете организовать, выбрав все \(t_i\)? Если возможно организовать столкновение, тогда выведите минимальную возможную длительность шоу. Иначе сообщите, что это невозможно.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 25000\)) — количество машинок.

В каждой из следующих \(n\) строк записаны по пять целых чисел \(x_i\), \(y_i\), \(dx_i\), \(dy_i\), \(s_i\) (\(-10^3 \le x_i, y_i \le 10^3\); \(1 \le |dx_i| \le 10^3\); \(1 \le |dy_i| \le 10^3\); \(1 \le s_i \le 10^3\)) — начальная позиция \(i\)-й машинки, ее вектор направления и ее скорость, соответственно.

Гарантируется, что все машинки начинают в различных позициях (то есть \((x_i, y_i) \neq (x_j, y_j)\) для \(i \neq j\)).

Выходные данные

Выведите наименьшую возможную длительность шоу, если возможно организовать столкновение, выбрав все \(t_i\). Иначе, выведите «No show :(».

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Картинка для первого примера:

Самое раннее возможное столкновение произойдет с машинками \(2\) и \(4\). Запустим машинку \(2\) в \(0\), машинку \(4\) примерно в \(0.096762\) и машинки \(1\) и \(3\) когда угодно. Тогда машинки \(2\) и \(4\) столкнутся примерно в \(0.585902\). Тогда вот как поле будет выглядеть в момент столкновения:

Вот картинка для второго примера:

F. Прогулка по графу

Бинарный поиск геометрия графы дп *2700

Задан простой взвешенный связный неориентированный граф, состоящий из \(n\) вершин и \(m\) ребер.

Путем длины \(k\) в графе назовем последовательность из \(k+1\) вершины \(v_1, v_2, \dots, v_{k+1}\) такую, что для каждого \(i\) \((1 \le i \le k)\) ребро \((v_i, v_{i+1})\) присутствует в графе. У пути из вершины \(v\) вершина \(v_1=v\). Обратите внимание, что вершины и ребра могут входить в путь по несколько раз.

Вес пути — это сумма весов ребер в нем.

Для каждого \(i\) от \(1\) до \(q\) рассмотрим путь из вершины \(1\) длины \(i\) максимального веса. Чему равна сумма весов этих \(q\) путей?

Ответ может быть довольно большим, поэтому выведите его по модулю \(10^9+7\).

Входные данные

В первой строке записаны три целых числа \(n\), \(m\), \(q\) (\(2 \le n \le 2000\); \(n - 1 \le m \le 2000\); \(m \le q \le 10^9\)) — количество вершин в графе, количество ребер в графе и количество длин, которые надо учесть в ответе.

В каждой из следующих \(m\) строк задано описание ребра: три целых числа \(v\), \(u\), \(w\) (\(1 \le v, u \le n\); \(1 \le w \le 10^6\)) — две вершины \(v\) и \(u\) соединены неориентированным ребром веса \(w\). Граф не содержит петель и кратных ребер. Гарантируется, что данные ребра задают связный граф.

Выходные данные

Выведите одно целое число — сумма весов путей максимального веса из вершины \(1\) длин \(1, 2, \dots, q\) по модулю \(10^9+7\).

Примечание

Граф из первого примера:

Некоторые максимальные пути:

  • длина \(1\): ребра \((1, 7)\) — вес \(3\);
  • длина \(2\): ребра \((1, 2), (2, 3)\) — вес \(1+10=11\);
  • длина \(3\): ребра \((1, 5), (5, 6), (6, 4)\) — вес \(2+7+15=24\);
  • длина \(4\): ребра \((1, 5), (5, 6), (6, 4), (6, 4)\) — вес \(2+7+15+15=39\);
  • \(\dots\)

Поэтому ответ — это сумма \(25\) слагаемых: \(3+11+24+39+\dots\)

Во втором примере веса у путей максимального веса равны \(4\), \(8\), \(12\), \(16\) and \(20\).

G. Двигаем доминошки

геометрия графы Деревья Структуры данных *3200

Билл любит играть с доминошками. Он взял доску размера \(n \times m\), разделённую на одинаковые квадратные клетки, и покрыл её доминошками. Каждая доминошка покрывает две клетки, соседние по горизонтали или вертикали, и каждая клетка покрыта ровно одной половиной доминошки (то есть, непокрытых клеток нет, и никакие две доминошки не покрывают одну клетку дважды).

После этого Билл решил поиграть с покрытой доской и выложить фотографии в социальных сетях. Сперва он убирает с доски одну из доминошек, тем самым освобождая две клетки. После этого он двигает некоторые доминошки. Доминошку можно двигать только параллельно её длинной стороне. Двигать доминошку в каком-либо направлении можно лишь, если ближайшая клетка в этом направлении сейчас свободна. Билл не хочет забыть исходное расположение доминошек, поэтому он двигает доминошки только так, чтобы каждая доминошка всегда покрывала хотя бы одну клетку, общую с её исходным положением.

После удаления доминошки и нескольких сдвигов (возможно, ни одного), Билл фотографирует получившуюся доску. Однако, Билл использует очень много фильтров, поэтому границы доминошек разглядеть нельзя, и можно увидеть лишь то, какие две клетки на доске свободны. Когда Билл выкладывает фотографию, он возвращает доску в исходное положение и начинает заново.

Билл хочет выложить как можно больше фотографий, но он не будет выкладывать одну и ту же фотографию дважды. Сколько различных фотографий он сможет сделать? Напомним, что фотографии различны, если различны пары свободных клеток на них.

Входные данные

В первой строке записано два положительных целых числа \(n\) и \(m\) (\(nm \leq 2 \cdot 10^5\)) — высота и ширина доски соответственно.

Следующие \(n\) строк описывают покрытие доски доминошками, ряд за рядом сверху вниз. Каждая из этих строк содержит \(m\) символов, описывающие клетки в соответствующем ряду слева направо. Каждая символ равен U, D, L или R, если клетка покрыта верхней, нижней, левой или правой половиной доминошки соответственно.

Гарантируется, что данное покрытие корректно, то есть, у каждой половины доминошки есть вторая половина в нужной позиции. В частности, поскольку покрытие возможно, количество клеток на доске чётно.

Выходные данные

Выведите одно число — количество различных фотографий, которые сможет сделать Билл.

Примечание

В первом примере после удаления любой доминошки нельзя сделать ни одного сдвига, поэтому различных фотографий четыре.

Во втором примере после удаления самой левой доминошки можно сделать четыре фотографии, поскольку можно независимо двигать/не двигать оставшиеся две доминошки. Две другие фотографии можно сделать, если удалить одну из доминошек справа.

A. ПокупатеЛи

геометрия математика *800

Ли собирается украсить свой дом к вечеринке с помощью нескольких правильных многоугольников...

Ли считает правильный (выпуклый) \(n\)-угольник красивым тогда и только тогда, когда он может повернуть многоугольник таким образом, чтобы хотя бы одна из его сторон стала параллельна оси \(OX\) и хотя бы одна из его сторон стала параллельна оси \(OY\) одновременно.

Напомним, что правильный \(n\)-угольник — это выпуклый многоугольник из \(n\) вершин такой, что все его стороны и углы равны.

Ли пришел в магазин: в магазине продаются \(t\) правильных многоугольников. Для каждого из них выведите YES, если многоугольник красивый, или NO в противном случае.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество многоугольников в магазине.

В каждой из следующих \(t\) строк задано по одному целому числу \(n_i\) (\(3 \le n_i \le 10^9\)): то есть \(i\)-й многоугольник является правильным \(n_i\)-угольником.

Выходные данные

Для каждого многоугольника в магазине, выведите YES, если он красивый, или NO в противном случае (регистр букв не важен).

Примечание

В примере, в магазине продаются \(4\) многоугольника. Несложно определить, что равносторонний треугольник (правильный \(3\)-угольник) не является красивым, квадрат (правильный \(4\)-угольник) является красивым, и правильный \(12\)-угольник (изображен ниже) также является красивым.

I. Кубическая решетка

геометрия математика матрицы теория чисел *3500

Кубическая решетка \(L\) в \(3\)-мерном евклидовом пространстве  — это множество точек, определенных следующим образом: \(\)L=\{u \cdot \vec r_1 + v \cdot \vec r_2 + w \cdot \vec r_3\}_{u, v, w \in \mathbb Z}\(\) Где \(\vec r_1, \vec r_2, \vec r_3 \in \mathbb{Z}^3\) это некоторые целочисленные векторы такие, что

  • \(\vec r_1\), \(\vec r_2\) и \(\vec r_3\) попарно ортогональны: \(\)\vec r_1 \cdot \vec r_2 = \vec r_1 \cdot \vec r_3 = \vec r_2 \cdot \vec r_3 = 0\(\) Здесь \(\vec a \cdot \vec b\) обозначает скалярное произведение \(\vec a\) и \(\vec b\).
  • \(\vec r_1\), \(\vec r_2\) и \(\vec r_3\) имеют одинаковую длину: \(\)|\vec r_1| = |\vec r_2| = |\vec r_3| = r\(\)
Вам дан набор \(A=\{\vec a_1, \vec a_2, \dots, \vec a_n\}\) целочисленных точек, \(i\)-я точка имеет координаты \(a_i=(x_i;y_i;z_i)\). Пусть \(g_i=\gcd(x_i,y_i,z_i)\). Гарантируется, что \(\gcd(g_1,g_2,\dots,g_n)=1\).

Вы должны найти кубическую решетку \(L\) такую, чтобы \(A \subset L\) и \(r\) было максимально возможным.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^4\)) — количество точек в \(A\).

\(i\)-я из следующих \(n\) строк содержит целые числа \(x_i\), \(y_i\), \(z_i\) (\(0 < x_i^2 + y_i^2 + z_i^2 \leq 10^{16}\)) — координаты \(i\)-й точки.

Гарантируется, что \(\gcd(g_1,g_2,\dots,g_n)=1\), где \(g_i=\gcd(x_i,y_i,z_i)\).

Выходные данные

В первой строке выведите единственное целое число \(r^2\), квадрат максимально возможного \(r\).

В следующих \(3\) строках выведите координаты векторов \(\vec r_1\), \(\vec r_2\) и \(\vec r_3\) соответственно.

Если есть несколько возможных ответов, выведите любой.

E. Оригами

геометрия математика сортировки *3300

После того, как вы получили 13 вердиктов time-limit-exceeded по ужасной геометрической задаче, вы решили сделать расслабляющий перерыв и позаниматься оригами.

Есть лист бумаги в форме простого многоугольника с \(n\) вершинами. Многоугольник может быть невыпуклым, но мы все знаем, что настоящий лист бумаги для оригами имеет свойство, что любая горизонтальная прямая пересекает границу многоугольника не больше, чем в двух точках.

Если вы согнете лист бумаги вдоль вертикальной прямой \(x=f\), какой будет площать полученной фигуры? Когда вы сгибаете лист, часть бумаги слева от прямой симметрично отражается с правой стороны.

Ваша задача ответить на \(q\) независимых запросов для значений \(f_1,\ldots,f_q\).

Входные данные

В первой строке находится два целых числа \(n\), \(q\) (\(3\le n\le 10^5, 1\le q\le 10^5\))  — количество вершин многоугольника и количество запросов, соответственно.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\), \(y_i\) (\(|x_i|, |y_i|\le 10^5\))  — координаты \(i\)-й вершины многоугольника. Многоугольник состоит из отрезков, соединяющих пары соседних точек во входных данных и отрезка, соединяющего \((x_1,y_1)\) и \((x_n,y_n)\). Гарантируется, что многоугольник невырожденный, что любая горизонтальная прямая пересекает границу многоугольника в не более, чем двух точках. Также гарантируется, что ни одно ребро многоугольника не строго вертикальное. Соседние отрезки многоугольника могут быть параллельными.

Каждая из следующих \(q\) строк содержит единственное целое число \(f_i\) (\(\min\limits_{j=1}^n(x_j)< f_i< \max\limits_{j=1}^n(x_j)\))  — \(x\)-координата \(i\)-го запроса сгиба. Гарантируется, что все \(f_i\) различны.

Выходные данные

Для каждого запроса выведите площадь \(A_i\) бумаги, которая будет, если согнуть лист бумаги вдоль прямой \(x=f_i\).

Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит \(10^{-4}\).

Формально, пусть ваш ответ будет \(a\), а ответ жюри будет \(b\). Ваш ответ будет принят тогда и только тогда, когда \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-4}\).

Примечание

В первом тесте, если сделать сгиб в \(f=-5\):

Во втором тесте, если сделать сгиб в \(f=1\):

В третьем тесте, если сделать сгиб в \(f=-1\):

B. Смесь

*особая задача геометрия математика сортировки Структуры данных *2900

Серж, шеф-повар знаменитого ресторана «Соль, Перец & Чеснок» пытается получить свою первую звезду Мишлен. Его уведомили, что сегодня вечером его ресторан посетит секретный эксперт.

Несмотря на то, что имя эксперта не разглашено, Серж знает его вкусовые предпочтения, а также, какое блюдо он закажет. Кроме прочего, он знает, что эксперту нравится исключительно точная пропорция соли, перца и чеснока в его блюде.

Серж хранит у себя несколько бутылок со смесями соли, перца и чесночного порошка на особой полке на кухне. Он знает точное количество каждого ингредиента в каждой бутылке в килограммах. Серж может использовать любое количество бутылок смесей (или ровно одну из них напрямую), чтобы получить смесь нужных пропорций для своего блюда.

К счастью, количество смеси, которой нужно добавить к блюду, настолько мало, что количества смеси в каждой бутылке всегда будет достаточно. Однако, числа, описывающие пропорции, могут быть весьма большими.

Серж хочет узнать, возможно ли получить любимую смесь эксперта из доступных бутылок, и если да — чему равняется наименьшее количество бутылок, нужных для этого.

Более того, множество бутылок на полке может меняться со временем, так как Серж получает новые бутылки и одалживает свои другим поварам. Поэтому он хотел бы узнать ответ на свой вопрос после каждого такого изменения.

Например, допустим, что любимая смесь эксперта является \(1:1:1\) и на полке находятся три бутылки со смесями:

\(\) \begin{array}{cccc} \hline \text{Mixture} & \text{Соль} & \text{Перец } & \text{Чесночный порошок} \\ \hline 1 & 10 & 20 & 30 \\ 2 & 300 & 200 & 100 \\ 3 & 12 & 15 & 27 \\ \hline \end{array} \(\) Количество ингредиента в бутылке, кг

Чтобы получить нужную смесь, достаточно использовать одинаковое количество смесей из бутылок 1 и 2. Если бутылка 2 отсутствует, то больше нет возможности получить нужную смесь.

Напишите программу, которая поможет Сержу решить эту задачу!

Входные данные

Первая строка ввода содержит три неотрицательных целых числа \(S_f\), \(P_f\) и \(G_f\) (\(0 \leq S_f, P_f, G_f\); \(0 < S_f+P_f+G_f \leq 10^6\)), которые описывают количество соли, перца и чесночного порошка в любимой смеси эксперта. Для любого вещественного \(\alpha>0\), \((\alpha{S_f}, \alpha{P_f}, \alpha{G_f})\) тоже является любимой смесью эксперта.

Во второй строке дано целое положительное число \(N\) (количество изменений на полке, \(N \leq 100\,000\)). Изначально полка пуста.

Каждая из следующих \(N\) строк описывает одно изменение на полке:

  • Если добавляется новая бутылка, строка содержит заглавную букву \(A\), за которой следуют три неотрицательных целых числа \(S_i\), \(P_i\) и \(G_i\) (\(0 \leq S_i, P_i, G_i\); \(0 < S_i+P_i+G_i \leq 10^6\)) описывающих количество соли, перца и чесночного порошка в новой бутылке. Добавленные бутылки нумеруются последовательными целыми числами, начиная с \(1\), то есть, \(i\)-я бутылка соответствует \(i\)-й добавленной бутылке во вводе.
  • Если конкретная бутылка убирается с полки, строка содержит заглавную букву \(R\), за которой следует целое число, номер этой бутылки, \(r_i\). Все значения \(r_i\) среди убираний различны, и \(r_i\) никогда не превышает общее количество в данный момент добавленных бутылок.
Выходные данные

Выведите \(N\) строк. В \(j\)-й строке (\(1 \leq j \leq N\)) выведите число \(x_j\), наименьшее количество бутылок, которое нужно использовать для приготовления любимой смеси эксперта с нужной пропорцией соли, перца и чесночного порошка, при условии, что на полке доступны только бутылки после первых \(j\) изменений. Если же такую смесь нельзя приготовить, просто выведите \(0\).

Система оценки

Подзадачи:

  1. (13 баллов) \(N \leq 50\), \(0 < S_i+P_i+G_i \leq 10^2\)
  2. (17 баллов) \(N \leq 500\), \(0 < S_i+P_i+G_i \leq 10^3\)
  3. (30 баллов) \(N \leq 5000\), \(0 < S_i+P_i+G_i \leq 10^4\)
  4. (40 баллов) Без дополнительных ограничений.
Примечание

Обратите внимание, что в данном примере бутылки \(1\) и \(3\) содержат одинаковое количество соли, перца и чесночного порошка.

E. Дядя Богдан и Проекции

геометрия сортировки Структуры данных *2700

Возвращаясь на берег, дядя Богдан зачастую посещает компьютерный клуб «Скала», чтобы порешать там задачи в приятной компании. Однажды, Дядя Богдан встретился там с одним старым знакомым. Этот знакомый задал ему необычную задачу...

На плоскости с декартовой системой координат даны \(n\) непересекающихся горизонтальных отрезков с концами в целых точках. Все отрезки находятся строго над осью \(OX\). Вы можете выбрать произвольный вектор с координатами (\(a\), \(b\)), где \(b < 0\) и координаты — вещественные числа, и спроектировать все отрезки на ось \(OX\) вдоль этого вектора. При этом полученные проекции должны не пересекаться, но, возможно, могут касаться.

Вам нужно найти минимально возможную разницу между координатой \(x\) правого конца самой правой проекции и координатой \(x\) левого конца самой левой проекции.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2000\)) — количество отрезков.

В \(i\)-й из следующих \(n\) строк заданы три целых числа \(xl_i\), \(xr_i\) и \(y_i\) (\(-10^6 \le xl_i < xr_i \le 10^6\); \(1 \le y_i \le 10^6\)) — абсциссы концов отрезка и их ордината.

Гарантируется, что отрезки не пересекаются и не касаются.

Выходные данные

Выведите минимальную разницу, которую можно получить.

Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Если в первом примере спроектировать отрезки вдоль вектора \((1, -1)\), который изображен на рисунке, то мы получим ответ \(12-3=9\), и можно доказать, что меньше получить нельзя.

Во втором примере оптимально проектировать вдоль вектора \((1, -3)\). Ответ: \(8\frac{2}{3}-2\frac{1}{3}=6\frac{1}{3}\)

C. Boboniu и строка

Бинарный поиск геометрия Тернарный поиск *2600

Boboniu определяет BN-строку как строку \(s\) из символов 'B' и 'N'.

Он может совершать следующие операции над BN-строкой \(s\):

  • Удалить один символ из \(s\).
  • Удалить подстроку «BN» или «NB» из \(s\).
  • Добавить символ 'B' или 'N' в конец \(s\).
  • Добавить строку «BN» или «NB» в конец \(s\).

Строка \(a\) является подстрокой строки \(b\) если \(a\) может быть получена из \(b\) удалением нескольких (возможно, нуля или всех) символов из начала и нескольких (возможно, нуля или всех) символов из конца.

Boboniu считает, что BN-строки \(s\) и \(t\) похожи если и только если:

  • \(|s|=|t|\).
  • Существует перестановка \(p_1, p_2, \ldots, p_{|s|}\), что для всех \(i\) (\(1\le i\le |s|\)), \(s_{p_i}=t_i\).

Boboniu также определяет \(\text{dist}(s,t)\), расстояние между \(s\) и \(t\), как минимальное число операций, необходимое чтобы сделать \(s\) похожей на \(t\).

Теперь Boboniu дал вам \(n\) непустых BN-строк \(s_1,s_2,\ldots, s_n\) и просит вас найти непустую BN-строку \(t\), что максимальное расстояние до строки из \(s\) минимизировано, т.е. вам нужно минимизировать \(\max_{i=1}^n \text{dist}(s_i,t)\).

Входные данные

В первой строке записано одно целое число \(n\) (\(1\le n\le 3\cdot 10^5\)).

Каждая из следующих \(n\) строк содержит слову \(s_i\) (\(1\le |s_i| \le 5\cdot 10^5\)). Гарантируется, что \(s_i\) состоит только из 'B' и 'N'. Сумма \(|s_i|\) не превосходит \(5\cdot 10^5\).

Выходные данные

В первой строке, выведите минимальное значение \(\max_{i=1}^n \text{dist}(s_i,t)\).

Во второй строке, выведите подходящее \(t\).

Если есть несколько возможных \(t\), вы можете вывести любое.

Примечание

В первом примере \(\text{dist(B,BN)}=\text{dist(N,BN)}=1\), \(\text{dist(BN,BN)}=0\). Таким образом максимальное значение равно \(1\).

A. Плохой треугольник

геометрия математика *800

Вам задан массив \(a_1, a_2, \dots , a_n\), отсортированный в порядке неубывания (\(a_i \le a_{i + 1})\).

Найдите три индекса \(i\), \(j\), \(k\), таких что \(1 \le i < j < k \le n\) и невозможно создать невырожденный треугольник (треугольник с ненулевой площадью) со сторонами \(a_i\), \(a_j\) и \(a_k\) (например, возможно создать невырожденный треугольник со сторонами \(3\), \(4\) и \(5\), но невозможно со сторонами \(3\), \(4\) и \(7\)). Или определите, что не существует таких три индекса.

Входные данные

Первая строка содержит одно число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(3 \le n \le 5 \cdot 10^4\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le 10^9\); \(a_{i - 1} \le a_i\)) — массив \(a\).

Гарантируется, что сумма всех \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите ответ в отдельной строке.

Если существует тройка индексов \(i\), \(j\), \(k\) (\(i < j < k\)), такая что невозможно создать невырожденный треугольник (треугольник с ненулевой площадью) со сторонами \(a_i\), \(a_j\) и \(a_k\), выведите эти три индекса в порядке возрастания. Если существует несколько ответов, выведите любой из них.

Иначе выведите -1.

Примечание

В первом наборе входных данных невозможно составить невырожденный треугольник со стронами \(6\), \(11\) и \(18\). Обратите внимание, что это не единственный правильный ответ.

Во втором наборе входных данных вы всегда можете составить невырожденный треугольник.

C. Четыре отрезка

геометрия Конструктив математика Перебор реализация *1700

Несколько месяцев спустя Лёня всё-таки получил творение брата Вани по почте. И теперь Лёня решил сам похвастаться чем-нибудь перед братом. Немного подумав он понял, что у него нет готовых творений и решил написать программу распознавания прямоугольников. По его замыслу программа по четырём заданным отрезкам определяет образуют ли эти отрезки прямоугольник положительной площади со сторонами параллельными осям координат. Так как Лёня плохо учится в школе и сам не может написать такую программу, он попросил вас помочь ему в этом.

Входные данные

Входные данные состоят из четырёх строк. Каждая строка состоит из четырёх целых чисел x1, y1, x2, y2 ( - 109 ≤ x1, y1, x2, y2 ≤ 109) координаты начала и конца отрезка. Заданные отрезки могут вырождаться в точки.

Выходные данные

Выведите слово «YES» если данные четыре отрезка образуют искомый прямоугольник и «NO» в противном случае.

A. Новогодний стол

геометрия математика *1700

Геральд накрывает новогодний стол. Стол имеет форму круга радиуса R. Геральд пригласил много гостей и обеспокоен вопросом, поместятся ли на столе тарелки для всех них. Считайте, что все тарелки круглые и имеют одинаковые радиусы, равные r. Каждая тарелка должна целиком помещаться на столе и касаться края стола. Разумеется, тарелки не должны пересекаться, однако могут касаться. Помогите Геральду определить, поместятся ли на столе n тарелок для гостей.

Входные данные

В первой строке заданы три целых числа n, R и r (1 ≤ n ≤ 100, 1 ≤ R, r ≤ 1000) — количество тарелок, радиус стола и радиус тарелок.

Выходные данные

Выведите «YES» (без кавычек), если на столе можно разместить n тарелок по описанным правилам, и «NO», если нельзя.

Обратите внимание, что каждая тарелка должна касаться края стола.

Примечание

Возможное расположение тарелок для первого примера:

F. Новогодняя снежинка

геометрия сортировки *2600

В то время как Геральд ..., иначе говоря, в канун Нового года, Константин приготовил необыкновенный подарок для Прекрасной Дамы. Это волшебная новогодняя снежинка, способная исполнить любое заветное желание.

Новогодняя снежинка состоит из маленьких ледяных кристаллов, которые можно приближенно считать точками на плоскости. Вся прелесть новогодней снежинки в том, что она имеет центр симметрии. Это такая точка, что для каждого кристалла снежинки найдется другой кристалл, симметричный ему относительно этой точки. Один из кристаллов может располагаться непосредственно в центре симметрии.

Пока Константин выбирал снежинку среди миллионов других снежинок, не менее симметричных и не менее волшебных, потом преодолевал нелегкий путь через сугробы к дому своей возлюбленной и с замиранием сердца ждал несколько долгих мгновений, перед тем как Прекрасная Дама отворила дверь, некоторые кристаллы снежинки растаяли и, естественно, исчезли. Константин уверен, что таких кристаллов было не более k, потому что он обращался со снежинкой очень аккуратно. Теперь он готов продемонстрировать Прекрасной Даме всю мощь нанотехнологий и восстановить симметрию снежинки.

Вам даны координаты уцелевших кристаллов снежинки, заданные в нанометрах. Ваша задача — определить все возможные положения изначального центра симметрии.

Входные данные

В первой строке заданы два целых числа n и k (1 ≤ n ≤ 200 000, 0 ≤ k ≤ 10) — количество имеющихся кристаллов и наибольшее количество растаявших кристаллов соответственно. Следующие n строк содержат координаты имеющихся кристаллов в формате «xi yi». Координаты являются целыми числами и не превосходят 5·108 по абсолютной величине. Все заданные точки различны.

Выходные данные

В первой строке выведите целое число c — количество возможных центров симметрии. Следующие c строк должны содержать описания центров. Каждый центр симметрии описывается парой координат «x y», разделенных пробелом. Координаты выводите с абсолютной погрешностью, не превосходящей 10 - 6. Центры симметрии разрешается выводить в любом порядке. Все выводимые точки должны быть различны. В случае если существует бесконечное количество возможных центров симметрии, выведите одно число «-1».

E. Разбиваем квадрат

геометрия реализация сортировки Структуры данных *2400

У вас есть квадрат размера \(10^6 \times 10^6\) на координатной плоскости с вершинами в точках \((0, 0)\), \((0, 10^6)\), \((10^6, 0)\) и \((10^6, 10^6)\).

Вы собираетесь нарисовать несколько отрезков на плоскости. Все отрезки либо горизонтальные, либо вертикальные и пересекаются хотя бы с одной стороной квадрата.

Сейчас вас интересует: на какое количество частей разобьется данный квадрат после того, как будут нарисованы все отрезки. Напишите программу, подсчитывающую количество частей.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(0 \le n, m \le 10^5\)) — количество горизонтальных и вертикальных отрезков, соответственно.

В следующих \(n\) строках заданы описания горизонтальных отрезков. В \(i\)-й строке заданы три целых числа \(y_i\), \(lx_i\) и \(rx_i\) (\(0 < y_i < 10^6\); \(0 \le lx_i < rx_i \le 10^6\)), означающих отрезок, соединяющий \((lx_i, y_i)\) и \((rx_i, y_i)\).

В следующих \(m\) строках заданы описания вертикальных отрезков. В \(i\)-й строке заданы три целых числа \(x_i\), \(ly_i\) и \(ry_i\) (\(0 < x_i < 10^6\); \(0 \le ly_i < ry_i \le 10^6\)), означающих отрезок, соединяющий \((x_i, ly_i)\) и \((x_i, ry_i)\).

Гарантируется, что никакие два отрезка не лежат на одной прямой и каждый отрезок пересекается хотя бы с одной стороной квадрата.

Выходные данные

Выведите количество частей, на которые разбивается квадрат после того, как нарисованы все отрезки.

Примечание

Пример выглядит следующим образом:

B. Roads

*особая задача геометрия сортировки *2900

The government of Treeland wants to build a new road network. There are \(2N\) cities in Treeland. The unfinished plan of the road network already contains \(N\) road segments, each of which connects two cities with a straight line. No two road segments have a common point (including their endpoints). Your task is to determine \(N-1\) additional road segments satisfying the following conditions:

  1. Every new road segment must connect two cities with a straight line.
  2. If two segments (new or old) have a common point, then this point must be an endpoint of both segments.
  3. The road network connects all cities: for each pair of cities there is a path consisting of segments that connects the two cities.
Input

The first line of the standard input contains \(N\) (\({2 \leq N \leq 10^5}\)) – the number of existing road segments. Each of the following \(N\) lines contains four integers: \(x_1,y_1, x_2, y_2\), where \((x_1, y_1)\) and \((x_2, y_2)\) are the coordinates of the endpoints of the segment \((-10^7 \leq x_i,y_i\leq 10^7)\).

Output

The standard output must contain \(N-1\) lines, each of them containing four integers, \(x_1, y_1, x_2, y_2\), where \((x_1,y_1)\) and \((x_2, y_2)\) are the coordinates of the cities that are the endpoints of a new road segment. If there are multiple solutions, your program may output any of them.

Scoring
\( \begin{array}{|c|c|l|} \hline \text{Subtask} & \text{Points} & \text{Constraints} \\ \hline 1 & 0 & \text{samples}\\ \hline 2 & 15 & \text{all input segments are vertical.} \\ \hline 3 & 15 & \text{each pair of input segments are parallel.} \\ \hline 4 & 15 & \text{each input segment is either horizontal or vertical.} \\ \hline 5 & 15 & N \le 10\,000 \\ \hline 6 & 40 & \text{no additional constraints}\\ \hline \end{array} \)
Note

B. Классики

геометрия математика *1400

Вот уже прошла почти половина зимы, и Маша мечтает о лете. Санки и коньки ей уже надоели, сегодня всю ночь ей снились классики. Это очень популярная детская игра, в которой игровое поле — классики — выглядит так, как показано на рисунке (все клетки квадратные и нумеруются снизу вверх, клетки в одной строке нумеруются слева направо). Опишем классики цифрами, которые обозначают количество квадратов в строке, начиная с нижней: 1-1-2-1-2-1-2-(1-2)..., где далее повторяется период (1-2).

Система координат задана так, как показано на рисунке. Стороны всех квадратов равны между собой и имеют длину a.

Маша очень умная и сообразительная девочка, и ее волнуют совсем недетские вопросы: если она бросит камешек в точку с координатами (x, y), то попадет ли она в какой-либо квадрат? В случае положительного ответа также требуется определить номер этого квадрата.

Считается, что камешек попал в квадрат, если он находится строго внутри него. То есть камень, упавший на границу квадрата, не считается попавшим.

Входные данные

В единственной строке входных данных записаны три целых числа: a, x, y, где a (1 ≤ a ≤ 100) — сторона квадрата, x и y ( - 106 ≤ x ≤ 106, 0 ≤ y ≤ 106) — координаты камня.

Выходные данные

Выведите номер квадрата, внутрь которого попал камень, или «-1» без кавычек, если камешек на границе какого-то квадрата или вне классиков.

E. Помогите Гному Грише 2

геометрия *3000

В последнее время Гном Гриша занят важными раскопками на Кудыкиной горе, однако по понятным причинам (как вы, возможно, помните, он является необычным гномом, и вообще не переносит солнечного света) проводить раскопки Гриша может только ночью, а наутро, до первого луча солнца, должен возвращаться в свой склеп. Поэтому он хочет найти кратчайший маршрут от места раскопок до своего склепа. Вспомнив предыдущий успех участников Codeforces в транспортировке его гроба в склеп, Гриша в очередной раз каким-то чудом оказался в Вашей спальне и настойчиво попросил Вас помочь ему. Как обычно, Вы были не в силах отказать.

После недолгих раздумий, вы формализовали задачу следующим образом: Кудыкина гора, в силу своей правильной формы, оканчивающейся довольно острой вершиной, суть есть конус с радиусом основания r и высотой h. Кладбище, где проводит по ночам раскопки Гриша, а также его склеп — суть две точки на поверхности конуса. Все, что требуется — найти расстояние между точками по поверхности конуса.

Задача осложняется тем, что все подножие горы на уровне земли и даже пространство под горой ископали гномы (интересно, они искали там то же самое, что и Гриша?), поэтому можно считать, что кратчайший путь между точками может проходить не только по боковой поверхности, но и по основанию конуса (и, как частный случай задачи, обе точки могут лежать на основании конуса — см. первый тест из примеров).

В качестве решения его задачи Гришу вполне устроит искомое кратчайшее расстояние между точками, а путь Гриша как-нибудь найдет и сам. Два часа, которые он отвел на решение задачи, уже идут!

Входные данные

В первой строке ввода записаны через пробел целые числа r и h (1 ≤ r, h ≤ 1000) – радиус основания и высота конуса соответственно. Во второй и третьей строках записаны координаты двух точек на поверхности конуса — по три действительных числа через пробел. Координаты точек заданы в системе координат, где начало координат находится в центре основания конуса, а его ось вращения совпадает с осью OZ. В этой системе координат вершина конуса находится в точке (0, 0, h), основание конуса есть круг с центром в точке (0, 0, 0), лежащий в плоскости XOY, а все точки поверхности конуса имеют неотрицательную координату z. Гарантируется, что расстояния от точек до поверхности конуса не превосходят 10 - 12. Все действительные числа на входе имеют не более 16 знаков после десятичной точки.

Выходные данные

Выведите длину кратчайшего пути между точками, заданными на входе, с абсолютной или относительной погрешностью не более 10 - 6.

A. Ограждение

геометрия математика *800

Юре поставлена задача построить замкнутое ограждение в форме произвольного невырожденного простого четырехугольника. Ему для этого выдали три прямых участка забора с известными длинами \(a\), \(b\), \(c\). Теперь ему нужно понять, какой длины должен быть четвертый участок забора \(d\), чтобы успешно построить ограждение. Ограждение должно быть в форме четырехугольника, стороны которого равны \(a\), \(b\), \(c\), \(d\). Помогите Юре, найдите любую подходящую длину.

Простой невырожденный четырехугольник — это четырехугольник без самопересечений, построенный на четырех точках, никакие три из которых не лежат на одной прямой.

Входные данные

В первой строке задается целое число \(t\) — количество тестовых случаев (\(1 \le t \le 1000\)). В следующих \(t\) строках задаются сами тестовые случаи.

В каждой строке задаются три целых числа \(a\), \(b\) и \(c\) — длины выданных участков забора (\(1 \le a, b, c \le 10^9\)).

Выходные данные

Для каждого теста в отдельной строке выведите целое число \(d\) — длину четвертого участка забора, которая подойдет для успешного выполнения задачи. Если существует несколько решений, то выведите любое из них. Можно показать, что ответ всегда существует.

Примечание

Из отрезков с длинами \(1\), \(2\), \(3\), \(4\) можно составить четырехугольник.

Из отрезков с длинами \(12\), \(34\), \(56\), \(42\) можно составить четырехугольник.

E. 5G Antenna Towers

геометрия *2700

After making a strategic plan with carriers for expansion of mobile network throughout the whole country, the government decided to cover rural areas with the last generation of 5G network.

Since 5G antenna towers will be built in the area of mainly private properties, the government needs an easy way to find information about landowners for each property partially or fully contained in the planned building area.

The planned building area is represented as a rectangle with sides \(width\) and \(height\).

Every 5G antenna tower occupies a circle with a center in \((x,y)\) and radius \(r\).

There is a database of Geodetic Institute containing information about each property. Each property is defined with its identification number and polygon represented as an array of \((x,y)\) points in the counter-clockwise direction.

Your task is to build an IT system which can handle queries of type \((x, y, r)\) in which \((x,y)\) represents a circle center, while \(r\) represents its radius. The IT system should return the total area of properties that need to be acquired for the building of a tower so that the government can estimate the price. Furthermore, the system should return a list of identification numbers of these properties (so that the owners can be contacted for land acquisition).

A property needs to be acquired if the circle of the antenna tower is intersecting or touching it.

Input

The first line contains the size of the building area as double values \(width\), \(height\), and an integer \(n\) — the number of properties in the database.

Each of the next \(n\) lines contains the description of a single property in the form of an integer number \(v\) (\(3 \le v \le 40\)) — the number of points that define a property, as well as \(2*v\) double numbers — the coordinates \((x,y)\) of each property point. Line \(i\) (\(0 \le i \le n-1\)) contains the information for property with id \(i\).

The next line contains an integer \(q\) — the number of queries.

Each of the next \(q\) lines contains double values \(x\), \(y\), \(r\) — the coordinates of an antenna circle center \((x, y)\) and its radius \(r\).

\(1 \le n * q \le 10^6\)

Output

For each of the \(q\) queries, your program should output a line containing the total area of all the properties that need to be acquired, an integer representing the number of such properties, as well as the list of ids of these properties (separated by blank characters, arbitrary order).

Note

You can assume that the land not covered with properties (polygons) is under the government's ownership and therefore doesn't need to be acquired. Properties do not intersect with each other.

Precision being used for solution checking is \(10^{-4}\).

H. Побег из тюрьмы

Бинарный поиск геометрия игры Тернарный поиск *3500

Заключенный хочет сбежать из тюрьмы. Тюрьма является внутренней частью выпуклого многоугольника с вершинами \(P_1, P_2, P_3, \ldots, P_{n+1}, P_{n+2}, P_{n+3}\). Известно, что \(P_1=(0,0)\), \(P_{n+1}=(0, h)\), \(P_{n+2}=(-10^{18}, h)\) и \(P_{n+3}=(-10^{18}, 0)\).

Стены тюрьмы \(P_{n+1}P_{n+2}\), \(P_{n+2}P_{n+3}\) и \(P_{n+3}P_1\) очень высокие, и заключенный не может на них взобраться. Следовательно, его единственный шанс  — это достичь точки на одной из стен \(P_1P_2, P_2P_3,\dots, P_{n}P_{n+1}\) и сбежать оттуда. По периметру тюрьмы находятся два охранника. Заключенный движется со скоростью \(1\), в то время как охранники движутся, всегда оставаясь на периметре тюрьмы, со скоростью \(v\).

Если заключенный достигает точки на периметре, где есть охранник, охранник убивает заключенного. Если заключенный достигает точки, на которую он может взобраться, и там нет охранника, то он сразу же убегает. Изначально заключенный находится в точке \((-10^{17}, h/2)\), а охранники  — в точке \(P_1\).

Найдите минимальную скорость \(v\) такую, чтобы охранники могли гарантировать, что заключенный не сбежит (при условии, что и заключенный, и охранники будут двигаться оптимально).

Замечания:

  • В любой момент охрана и заключенный могут видеть друг друга.
  • Залезание на стену не занимает времени.
  • Вы можете считать, что и заключенный, и охранники могут изменить направление и скорость мгновенно и что они оба имеют идеальные рефлексы (так что они могут мгновенно реагировать на то, что делает другой).
  • Оба охранника могут заранее спланировать, как реагировать на передвижения заключенного.
Входные данные

Первая строка ввода содержит \(n\) (\(1 \le n \le 50\)).

Следующие \(n+1\) строк описывают точки \(P_1, P_2,\dots, P_{n+1}\). В \(i\)-й из этих строк находятся два целых числа \(x_i\), \(y_i\) (\(0\le x_i, y_i\le 1,000\))  — координаты \(P_i=(x_i, y_i)\).

Гарантируется, что \(P_1=(0,0)\) и \(x_{n+1}=0\). Гарантируется, что многоульник с вершинами \(P_1,P_2,\dots, P_{n+1}, P_{n+2}, P_{n+3}\) (где \(P_{n+2}, P_{n+3}\) построены так, как в условии) является выпуклым, и что никакие 3 его вершины не лежат на одной прямой.

Выходные данные

Выведите одно действительное число  — минимальную скорость \(v\), которая позволяет охранникам гарантировать, что заключенный не сбежит. Ваш ответ будет считаться правильным, если его относительная или абсолютная погрешность не превысит \(10^{-6}\).

D. Прямоугольная ломаная

геометрия дп Конструктив *2900

На координатной плоскости была нарисована замкнутая ломаная, состоящая из вертикальных и горизонтальных отрезков (параллельных осям координат). Горизонтальные и вертикальные отрезки этой ломаной чередовались (за горизонтальным отрезком шёл вертикальный, и наоборот). В этой ломаной не было пересечений отрезков по внутренним точкам, то есть если какие-то два отрезка пересекались, то точка их пересечения являлась одним из концом каждого из них (обратите внимание на примеры в пояснении к условию).

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

Входные данные

В первой строке задано целое число \(t\) (\(1 \leq t \leq 200\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(h\) (\(1 \leq h \leq 1000\)) — количество горизонтальных отрезков.

Во второй строке каждого набора заданы \(h\) целых чисел \(l_1, l_2, \dots, l_h\) (\(1 \leq l_i \leq 1000\)) — длины горизонтальных отрезков ломаной, в произвольном порядке.

В третьей строке задано одно целое число \(v\) (\(1 \leq v \leq 1000\)) — количество вертикальных отрезков.

В четвёртой строке заданы \(v\) целых чисел \(p_1, p_2, \dots, p_v\) (\(1 \leq p_i \leq 1000\)) — длины вертикальных отрезков ломаной, в произвольном порядке.

Все наборы входных данных разделяются пустой строкой.

Сумма \(h + v\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите слово Yes, если требуемая ломаная существует или No в противном случае. Если ломаная существует, в следующих \(n\) строках выведите последовательно вершины этой ломаной. В \(i\)-й строке выведите два целых числа \(x_i\), \(y_i\) — координаты \(i\)-й вершины.

Обратите внимание, что все отрезки этой ломаной должны быть параллельны осям координат, при этом после горизонтального отрезка должен идти вертикальный, и наоборот. Все координаты не должны превосходить \(10^9\) по абсолютной величине.

Примечание

В первом наборе первого примера ответ Yes — в качестве примера можно привести квадрат:

В первом наборе второго примера искомая ломаная существует. Обратите внимание, что ломаная пересекается по вершинам-концам отрезков:

Во втором наборе второго примера искомая ломаная может выглядеть, как на рисунке ниже:

Обратите внимание, что пример ниже не будет корректным для этого набора входных данных, так как содержит самопересечения:

F. Расстояние до прямой

Бинарный поиск геометрия Структуры данных *3200

Вам даны целое число \(k\) и \(n\) попарно различных точек с целочисленными координатами на евклидовой плоскости, \(i\)-я точка имеет координаты \((x_i, y_i)\).

Рассмотрим список всех \(\frac{n(n - 1)}{2}\) пар точек \(((x_i, y_i), (x_j, y_j))\) (\(1 \le i < j \le n\)). Для каждой такой пары выпишем расстояние от прямой, проходящей через эти две точки, до начала координат \((0, 0)\).

Ваша задача — вычислить \(k\)-е наименьшее число среди всех этих расстояний.

Входные данные

Первая строка содержит два целых числа \(n\), \(k\) (\(2 \le n \le 10^5\), \(1 \le k \le \frac{n(n - 1)}{2}\)).

В \(i\)-й из следующих строк \(n\) находятся два целых числа \(x_i\) и \(y_i\) (\(-10^4 \le x_i, y_i \le 10^4\)) — координаты \(i\)-й точки. Гарантируется, что все заданные точки попарно различны.

Выходные данные

Вы должны вывести одно число — \(k\)-е наименьшее расстояние до начала координат. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Есть \(6\) пар точек:

  • Прямая \(1-2\) : расстояние \(0\) от начала координат
  • Прямая \(1-3\) : расстояние \(\frac{\sqrt{2}}{2} \approx 0.707106781\) от начала координат
  • Прямая \(1-4\) : расстояние \(2\) от начала координат
  • Прямая \(2-3\) : расстояние \(1\) от начала координат
  • Прямая \(2-4\) : расстояние \(2\) от начала координат
  • Прямая \(3-4\) : расстояние \(\frac{2}{\sqrt{29}} \approx 0.371390676\) от начала координат
Третье по возрастанию расстояние среди них составляет примерно \(0.707106781\).

B. Стальные шарики

геометрия жадные алгоритмы Перебор *1000

У вас есть \(n\) различных точек \((x_1, y_1),\ldots,(x_n,y_n)\) на плоскости и неотрицательное целое число \(k\). Каждая точка представляет собой микроскопический стальной шарик, а \(k\)  — это его сила притяжения, когда он заряжен. Сила притяжения одинакова для всех шариков.

За одну операцию вы можете выбрать шарик \(i\) и зарядить его. После этого все шарики на манхеттенском расстоянии не более \(k\) от шарика \(i\) перемещаются в позицию шарика \(i\). После этой операции несколько различных шариков могут оказаться в одной точке.

Более формально, для всех шариков \(j\) таких, что \(|x_i - x_j| + |y_i - y_j| \le k\), мы присваиваем \(x_j:=x_i\) и \(y_j:=y_i\).

Пример операции. После зарядки шарика в центре два других шарика перемещаются в его позицию. На правой картинке красная точка в центре  — это общее положение этих шариков после операции.

Ваша задача  — найти минимальное количество операций, нужное для того, чтобы переместить все шарики в одну точку, или сообщить, что это сделать невозможно.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(k\) (\(2 \le n \le 100\), \(0 \le k \le 10^6\))  — количество шариков и сила притяжения каждого шарика, соответственно.

Следующие \(n\) строк описывают координаты шариков. В \(i\)-й из этих строк находится два целых числа \(x_i\), \(y_i\) (\(0 \le x_i, y_i \le 10^5\)) — координаты \(i\)-о шарика.

Гарантируется, что все точки различны.

Выходные данные

Для каждого набора входных данных выведите единственное целое число  — минимальное количество операций, нужное для того, чтобы переместить все шарики в одну точку, или \(-1\), если это сделать невозможно.

Примечание

В первом наборе входных данных три шарика находятся в \((0, 0)\), \((3, 3)\), и \((1, 1)\) и сила притяжения равна \(2\). Можно переместить два шарика в одну точку за одну операцию, но невозможно переместить все три шарика в одну точку за любое количество операций.

Во втором наборе входных данных три шарика находятся шарика в \((6, 7)\), \((8, 8)\), и \((6, 9)\) и сила притяжения равна \(3\). Если мы зарядим любой шарик, другие два переместятся в его позицию, поэтому нам достаточно одной операции.

В третьем наборе входных данных четыре шарика находятся в \((0, 0)\), \((0, 1)\), \((0, 2)\) и \((0, 3)\) и сила притяжения равна \(1\). Можно показать, что невозможно переместить все шарики в одну и ту же точку какой-то последовательностью операций.

D. Игра в круге

геометрия игры математика *1700

Utkarsh снова заставили играть в игры Ashish. Игроки ходят по очереди, Ashish ходит первым.

Рассмотрим плоскость. На нем стоит фишка, исходно в точке \((0,0)\). За один ход игрок может увеличить либо \(x\) координату, либо \(y\) координату фишки ровно на \(k\). Делая эти операции, игрок должен убедиться, что фишка остается в пределах (Евклидового) расстояния \(d\) от \((0,0)\).

Иначе говоря, если после хода координаты фишки \((p,q)\), должно быть выполнено \(p^2 + q^2 \leq d^2\).

Игра кончается, когда текущий игрок не может сделать ход. Можно доказать, что игра закончится за конечное число ходов. Определите, кто выигрывает при правильной игре обоих игроков.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(d\) (\(1 \leq d \leq 10^5\)) и \(k\) (\(1 \leq k \leq d\)).

Выходные данные

Для каждого набора входных данных, если выигрывает первый игрок, выведите «Ashish». Иначе выведите «Utkarsh» (без кавычек).

Примечание

Возможная последовательность действий для первого набора входных данных:

\((0, 0) \xrightarrow{\text{Ashish }} (0, 1) \xrightarrow{\text{Utkarsh }} (0, 2)\).

Ashish не может сделать ход, так что Utkarsh выигрывает.

E. Четыре точки

геометрия жадные алгоритмы Конструктив математика Перебор Потоки реализация Тернарный поиск *2400

Вам заданы четыре различные целые точки \(p_1\), \(p_2\), \(p_3\) и \(p_4\) на коодинатной плоскости \(\mathit{XY}\).

За один шаг вы можете выбрать одну из точек \(p_i\) и сдвинуть ее в одном из четырех направлений на единицу. Другими словами, если вы выбрали точку \(p_i = (x, y)\), вы можете передвинуть ее в \((x, y + 1)\), \((x, y - 1)\), \((x + 1, y)\) или \((x - 1, y)\).

Ваша задача — сдвинуть точки таким образом, чтобы они образовали квадрат со сторонами параллельными осям \(\mathit{OX}\) и \(\mathit{OY}\) (квадрат со стороной \(0\) разрешен).

Какое минимальное количество шагов вам нужно, чтобы получить такой квадрат?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор состоит из четырех строк. В каждой строке заданы два целых числа \(x\) и \(y\) (\(0 \le x, y \le 10^9\)) — координаты одной из точек \(p_i = (x, y)\).

Все точки в одном наборе различные.

Выходные данные

Для каждого набора входных данных, выведите единственное число — минимальное количество шагов, необходимых для получения квадрата.

Примечание

В первом наборе входных данных, один из оптимальных ответов изображен ниже:

Каждая точка будет сдвинута два раза, поэтому ответ \(2 + 2 + 2 + 2 = 8\).

Во втором наборе, один из оптимальных ответов изображен ниже:

Ответ равен \(3 + 1 + 0 + 3 = 7\).

В третьем наборе, один из оптимальных ответов изображен ниже:

Ответ равен \(1 + 1 + 2 + 1 = 5\).

A. Коровья дилемма

геометрия математика Перебор *800

Аргусу было поручено охранять Ио, которая является необычной коровой. Ио настоящий исследователь, и часто далеко уходит, что усложняет жизнь Аргуса. Поэтому, пастух решил построить огороженное пастбище для Ио.

Вдоль реки, около которой Аргус пасет Ио, растет \(n\) деревьев. Будем считать, что река это ось \(OX\) прямоугольной системы координат, а \(n\) деревьев это точки с \(y\) координатами равными \(0\). Также, есть еще одно дерево, растущее в точке \((0, 1)\).

Аргус натянет веревку вокруг трех из деревьев, получив треугольное пастбище. Ио не интересует его форма, но ей важна площадь. У Аргуса есть много способов построить забор, но для Ио важны только те, при которых получатся различные по площади пастбища. Вычислите количество различных площадей, которые может иметь получившееся пастбище. Обратите внимание, что пастбище должно иметь ненулевую площадь.

Входные данные

Во входных данных находятся несколько (не меньше одного) наборов входных данных. В первой строке дано одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее даны \(t\) наборов входных данных, описание каждого занимает две строки.

В первой строке каждого наборов входных данных дано одно целое число \(n\) (\(1 \leq n \leq 50\)), обозначающее количество деревьев, растущих вдоль реки. В следующей строке дано \(n\) различных целых чисел \(x_1 < x_2 < \ldots < x_{n - 1} < x_n\) (\(1 \leq x_i \leq 50\)) — \(x\) координаты деревьев, растущих вдоль реки.

Выходные данные

Для каждого наборов входных данных в отдельной строке выведите одно целое число — количество различных ненулевых площадей, которые могут иметь треугольники с деревьями в качестве вершин.

Примечание

В первом наборе входных данных есть \(6\) невырожденных треугольников со следующими площадями: \(0.5\), \(0.5\), \(1\), \(1.5\), \(1.5\) и \(2\). Пастбище может иметь \(4\) различных площади, поэтому \(4\) является ответом.

Во втором наборе входных данных есть \(3\) невырожденных треугольника со следующими площадями: \(1\), \(1\) и \(2\). Пастбище может иметь \(2\) различных площади, поэтому ответ \(2\).

Следующие иллюстрации показывают два возможных варианта площади во втором наборе входных данных. Синие треугольники на первой иллюстрации имеют площадь \(1\). Красный треугольник на второй иллюстрации имеет площадь \(2\).

F. Full Turn

геометрия теория чисел хэши *1700

There are \(n\) persons located on a plane. The \(i\)-th person is located at the point \((x_i, y_i)\) and initially looks at the point \((u_i, v_i)\).

At the same moment of time, all persons will start to rotate clockwise synchronously with the same angular speed. They will rotate until they do one full \(360\)-degree turn.

It is said that persons \(A\) and \(B\) made eye contact if person \(A\) looks in person \(B\)'s direction at the same moment when person \(B\) looks in person \(A\)'s direction. If there is a person \(C\) located between persons \(A\) and \(B\), that will not obstruct \(A\) and \(B\) from making eye contact. A person can make eye contact with more than one person at the same time.

Calculate the number of pairs of persons that will make eye contact at least once during the rotation (including the initial moment).

Input

The first line contains one integer \(t\) (\(1 \le t \le 10^4\)) — the number of test cases.

The first line of each test case contains a single integer \(n\) (\(1 \le n \le 10^5\)) — the number of persons. The following \(n\) lines describe persons, each line containing four space-separated integers \(x_i, y_i, u_i, v_i\) (\(|x_i|, |y_i|, |u_i|, |v_i| \le 10^9\); \(x_i \ne u_i\) or \(y_i \ne v_i\)), where (\(x_i, y_i\)) are the coordinates of the point where the \(i\)-th person is located and (\(u_i\), \(v_i\)) are the coordinates of the point that the \(i\)-th person looks at initially. Each person's location is unique in each test case.

The sum of \(n\) over all test cases does not exceed \(10^5\).

Output

For each test case, print one integer — the number of pairs of persons who will make eye contact at least once during the rotation, including the initial moment.

G. Hobbits

Бинарный поиск геометрия *2500

The hobbits Frodo and Sam are carrying the One Ring to Mordor. In order not to be spotted by orcs, they decided to go through the mountains.

The mountain relief can be represented as a polyline with \(n\) points \((x_i, y_i)\), numbered from \(1\) to \(n\) (\(x_i < x_{i + 1}\) for \(1 \le i \le n - 1\)). Hobbits start their journey at the point \((x_1, y_1)\) and should reach the point \((x_n, y_n)\) to complete their mission.

The problem is that there is a tower with the Eye of Sauron, which watches them. The tower is located at the point \((x_n, y_n)\) and has the height \(H\), so the Eye is located at the point \((x_n, y_n + H)\). In order to complete the mission successfully, the hobbits have to wear cloaks all the time when the Sauron Eye can see them, i. e. when there is a direct line from the Eye to the hobbits which is not intersected by the relief.

The hobbits are low, so their height can be considered negligibly small, but still positive, so when a direct line from the Sauron Eye to the hobbits only touches the relief, the Eye can see them.

The Sauron Eye can't see hobbits when they are in the left position, but can see them when they are in the right position.

The hobbits do not like to wear cloaks, so they wear them only when they can be spotted by the Eye. Your task is to calculate the total distance the hobbits have to walk while wearing cloaks.

Input

The first line of the input contains two integers \(n\) and \(H\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le H \le 10^4\)) — the number of vertices in polyline and the tower height.

The next \(n\) lines contain two integers \(x_i, y_i\) each (\(0 \le x_i \le 4 \cdot 10^5\); \(0 \le y_i \le 10^4\)) — the coordinates of the polyline vertices. It is guaranteed that \(x_i < x_{i + 1}\) for \(1 \le i \le n - 1\).

Output

Print one real number — the total distance the hobbits have to walk while wearing cloaks. Your answer will be considered correct if its absolute or relative error does not exceed \(10^{-6}\) — formally, if your answer is \(a\), and the jury's answer is \(b\), your answer will be accepted if \(\dfrac{|a - b|}{\max(1, b)} \le 10^{-6}\).

I. Plane Tiling

геометрия математика реализация *2500

You are given five integers \(n\), \(dx_1\), \(dy_1\), \(dx_2\) and \(dy_2\). You have to select \(n\) distinct pairs of integers \((x_i, y_i)\) in such a way that, for every possible pair of integers \((x, y)\), there exists exactly one triple of integers \((a, b, i)\) meeting the following constraints:

\( \begin{cases} x \, = \, x_i + a \cdot dx_1 + b \cdot dx_2, \\ y \, = \, y_i + a \cdot dy_1 + b \cdot dy_2. \end{cases} \)
Input

The first line contains a single integer \(n\) (\(1 \le n \le 10^5\)).

The second line contains two integers \(dx_1\) and \(dy_1\) (\(-10^6 \le dx_1, dy_1 \le 10^6\)).

The third line contains two integers \(dx_2\) and \(dy_2\) (\(-10^6 \le dx_2, dy_2 \le 10^6\)).

Output

If it is impossible to correctly select \(n\) pairs of integers, print NO.

Otherwise, print YES in the first line, and then \(n\) lines, the \(i\)-th of which contains two integers \(x_i\) and \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)).

If there are multiple solutions, print any of them.

C. Nezzar и красивая карта

геометрия жадные алгоритмы Конструктив математика сортировки *2200

Nezzar любит игру osu!.

osu! играется на карте, которая может быть представлена как массив различных точек на плоскости. Карта называется красивой, если для любых трех последовательных точек \(A,B,C\), записанных в порядке следования в массиве, угол между этими тремя точками с центром в \(B\) будет строго меньше, чем \(90\) градусов.

Точки \(A,B,C\) слева образуют угол меньший, чем \(90\) градусов, поэтому они могут быть тремя последовательными точками в красивой карте; точки \(A',B',C'\) справа образуют угол, больший либо равный \(90\) градусам, поэтому они не могут быть тремя последовательными точками в красивой карте.

Сейчас у Nezzar есть карта, состоящая из \(n\) различных точек \(A_1,A_2,\ldots,A_n\). Nezzar хочет переупорядочить эти \(n\) точек так, чтобы получившаяся карта стала красивой.

Более формально, вы должны найти перестановку \(p_1,p_2,\ldots,p_n\) целых чисел от \(1\) до \(n\) такую, что карта \(A_{p_1},A_{p_2},\ldots,A_{p_n}\) будет красивой. Если это невозможно, вы должны определить это.

Входные данные

В первой строке находится единственное целое число \(n\) (\(3 \le n \le 5000\)).

Затем следуют \(n\) строк, в \(i\)-й из них находятся два целых числа \(x_i\), \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)) — координаты точки \(A_i\).

Гарантируется, что все точки различны.

Выходные данные

Если решения нет, выведите \(-1\).

Иначе выведите \(n\) чисел, образующих допустимую перестановку \(p\).

Если существует несколько возможных решений, вы можете вывести любое.

Примечание

Это иллюстрация к первому примеру:

Обратите внимание, что угол между \(A_1\), \(A_2\) и \(A_5\) с центром в \(A_2\) равен \(0\) градусов. Однако угол между \(A_1\), \(A_5\) и \(A_2\) с центром в \(A_5\) равен \(180\) градусам.

B. Восточная выставка

Бинарный поиск геометрия кратчайшие пути сортировки *1500

Вы и ваши друзья живете в \(n\) домах. Каждый дом расположен на 2D плоскости в точке с целыми координатами. Несколько домов могут быть расположены в одной точке. Мэр города хочет узнать у вас возможные места для постройки здания Восточной выставки. Найдите количество мест (точек с целыми координатами) таких, что суммарное расстояние от всех домов до выставки будет минимальным. Здание выставки может быть построено в той же точке, что и какой-то дом. Расстояние между двумя точками \((x_1, y_1)\) и \((x_2, y_2)\) считается по формуле \(|x_1 - x_2| + |y_1 - y_2|\), где \(|x|\) — модуль величины \(x\).

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \leq t \leq 1000)\) — число наборов входных данных.

В первой строке каждого теста находится единственное целое число \(n\) \((1 \leq n \leq 1000)\). В следующих \(n\) строках находятся позиции домов \((x_i, y_i)\) \((0 \leq x_i, y_i \leq 10^9)\).

Гарантируется, что сумма \(n\) не превосходит \(1000\).

Выходные данные

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

Примечание

Снизу находятся картинки поясняющие примеры. Голубые точки обозначают дома, а зеленые - возможные позиции для выставки.

Первый пример.

Второй пример.

Третий пример.

Четвертый пример.

Пятый пример.

Шестой пример. Оба дома находятся в позиции \((0, 0)\).

A. Добытчик алмазов

геометрия жадные алгоритмы математика сортировки *1200

«Добытчик алмазов» — игра, похожая на «Добытчик золота», но в этой игре \(n\) шахтеров, а не \(1\).

Шахта может быть представлена как плоскость. Будем рассматривать \(n\) шахтеров как \(n\) точек, расположенных на оси y. В шахте расположены \(n\) алмазов, будем рассматривать их как \(n\) точек на оси x. По каким-то причинам ни шахтеры, ни алмазы не могут быть расположены в начале координат (точке \((0, 0)\)).

Каждый шахтер должен добыть ровно один алмаз. У каждого шахтера есть крюк, с помощью которого он может достать алмаз. Если шахтер, находящийся в точке \((a,b)\) использует свой крюк для добычи алмаза, расположенного в точке \((c,d)\), он потратит \(\sqrt{(a-c)^2+(b-d)^2}\) (расстояние между точками) единиц энергии. Шахтеры не могут перемещаться и помогать друг другу.

Цель игры — распределить алмазы по шахтерам так, чтобы минимизировать сумму затраченной энергии. Сможете ли вы найти этот возможный минимум?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество шахтеров и алмазов.

Каждая из следующих \(2n\) строк содержит два целых числа \(x\) (\(-10^8 \le x \le 10^8\)) и \(y\) (\(-10^8 \le y \le 10^8\)), описывающие некоторую точку \((x,y)\), в которой находится шахтер или алмаз. Гарантируется, что либо \(x = 0\), что значит, что в точке \((0, y)\) находится шахтер, либо \(y = 0\), что значит, что в точке \((x, 0)\) находится алмаз. В одной точке могут находится несколько шахтеров или алмазов.

Гарантируется, что никакая точка не находится в начале координат. Также гарантируется, что на оси x ровно \(n\) точек, и на оси y тоже ровно \(n\) точек.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно вещественное число — минимально возможную сумму затраченных энергий.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-9}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-9}\).

Примечание

В первом примере есть два шахтера в точках \((0,1)\) и \((0,-1)\), а алмазы расположены в точках \((1,0)\) и \((-2,0)\). Если распределить алмазы по шахтерам, как показано на рисунке, то потратится \(\sqrt2 + \sqrt5\) единиц энергии.

F. Сбалансируйте карты

геометрия графы Конструктив разделяй и властвуй реализация Структуры данных *3500

Сбалансированная скобочная последовательность определяется как целая последовательность целых чисел, которая может быть построена по следующим правилам:

  • Пустая последовательность сбалансирована.
  • Если \([a_1,\ldots,a_n]\) и \([b_1,\ldots, b_m]\) сбалансированы, то их конкатенация \([a_1,\ldots,a_n,b_1,\ldots,b_m]\) сбалансирована.
  • Если \(x\) — целое положительное число и \([a_1,\ldots,a_n]\) сбалансирована, то \([x,a_1,\ldots,a_n,-x]\) сбалансирована.

Положительные числа можно представить себе в виде открывающихся скобок, а отрицательные — в виде закрывающих скобок, где соответствующие скобки должны иметь одинаковый тип (абсолютное значение). Например, \([1, 2, -2, -1]\) и \([1, 3, -3, 2, -2, -1]\) сбалансированы, но \([1, 2, -1, -2]\) и \([-1, 1]\) не сбалансированы.

Есть \(2n\) карт. Каждая карта имеет число на лицевой стороне и число на оборотной. Каждое целое число \(1,-1,2,-2,\ldots,n,-n\) встречается на лицевой стороне ровно одной карты и на оборотной стороне ровной одной карты (необязательно той же карты).

Вы можете переупорядочить карты, как вам угодно. Вам не разрешено переворачивать карты, поэтому числа не могут перемещаться между лицевой и оборотной сторонами карты. Ваша задача — упорядочить карты так, чтобы последовательности, заданные числами на лицевых и оборотных сторонах, были сбалансированы, или сообщить, что это невозможно.

Входные данные

В первой строке содержится одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество типов скобок и половина количества карт.

Следующие \(2n\) строк описывают карты. В \(i\)-й из этих строк содержатся два целых числа \(a_i\), \(b_i\) (\(-n\le a_i,b_i\le n\), \(a_i\ne 0\), \(b_i\ne 0\)) — числа на лицевой и оборотной стороне \(i\)-й карты соответственно. Каждое целое число \(1,-1,2,-2,\ldots,n,-n\) встречается ровно один раз как \(a_i\) и ровно один раз как \(b_i\).

Выходные данные

В первой строке выведите «YES», если можно упорядочить карты, чтобы выполнялось условие. В противном случае выведите «NO». Вы можете выводить каждый символ в любом регистре.

Если это возможно, в следующих \(2n\) строках выведите карты в таком порядке, чтобы и лицевая и оборотная части были сбалансированы. Если есть несколько решений, то можно вывести любое.

Примечание

В первом примере лицевые числа образуют сбалансированную последовательность \([1,4,-4,-1,5,3,2,-2,-3,-5]\), а оборотные числа создают сбалансированную последовательность \([3,-3,4,-4,1,-1,2,5,-5,-2]\).

Во втором примере карты даются в таком порядке, что лицевые числа сбалансированы, а оборотные образуют несбалансированную последовательность \([1,2,-1,-2]\). Если бы мы поменяли местами вторую и третью карты, то сбалансировали бы оборотные числа и разбалансировали бы лицевые. Но нет такого порядка, который бы балансировал и то, и другое.

D. Обмены на ребрах

геометрия Конструктив сортировки *3000

В связи со специфическим инцидентом на баскетбольной тренировке, Akari придумал следующую задачу со спортивного программирования!

Вам даны \(n\) точек на плоскости, никакие три из которых не лежат на одной прямой. Изначально точка \(i\) имеет метку \(a_i\), причем метки \(a_1, a_2, \dots, a_n\) образуют перестановку чисел \(1, 2, \dots, n\).

Вы можете менять эти метки с помощью следующей операции:

  1. Выберите два разных целых числа \(i\) и \(j\) между \(1\) и \(n\).
  2. Поменяйте местами метки точек \(i\) и \(j\).
  3. Нарисуйте отрезок между точками \(i\) и \(j\).

Последовательность операций корректна, если после применения всех операций в последовательности точка \(k\) имеет метку \(k\) для всех \(k\) от \(1\) до \(n\) включительно, и нарисованные отрезки не пересекаются внутри друг друга. Формально, если два отрезка пересекаются, то они должны сделать это в общей конечной точке обоих отрезков.

В частности, все нарисованные отрезки должны быть попарно различными.

Найдите любую корректную последовательность операций или определите, что ее нет.

Входные данные

В первой строке содержится целое число \(n\) (\(3 \le n \le 2000\))  — количество точек.

В \(i\)-й из следующих \(n\) строк содержится три целых числа \(x_i\), \(y_i\), \(a_i\) (\(-10^6 \le x_i, y_i \le 10^6\), \(1 \le a_i \le n\)), что означает, что точка \(i\) имеет координаты \((x_i, y_i)\) и изначально имеет метку \(a_i\).

Гарантируется, что все точки различны, никакие три точки не лежат на одной прямой, а метки \(a_1, a_2, \dots, a_n\) образуют перестановку чисел \(1, 2, \dots, n\).

Выходные данные

Если невозможно выполнить корректную последовательность операций, выведите \(-1\).

В противном случае выведите целое число \(k\) (\(0 \le k \le \frac{n(n - 1)}{2}\))  — количество выполняемых операций, а затем \(k\) строк, каждая из которых содержит два целых числа \(i\) и \(j\) (\(1 \le i, j \le n\), \(i\neq j\))  — номера точек, выбранных для операции.

Обратите внимание, что вам не требуется минимизировать или максимизировать значение \(k\).

Если возможных ответов несколько, вы можете вывести любой из них.

Примечание

Следующая анимация демонстрирует первый пример. Черные числа обозначают номера точек, а оранжевые — их метки.

Во втором примере все метки изначально находятся в правильном положении, поэтому никаких операций не требуется.

B. Феникс и пазл

геометрия математика Перебор теория чисел *1000

Феникс играет с новым пазлом, который состоит из \(n\) одинаковых фрагментов. Каждый фрагмент — это равнобедренный прямоугольный треугольник, как показано ниже.

Фрагмент пазла

Цель пазла — собрать квадрат, используя \(n\) фрагментов. Феникс может поворачивать и двигать фрагменты как хочет, но фрагменты нельзя накладывать друг на друга и все \(n\) фрагментов должны быть использованы (конечно же, в квадрате не должно быть никаких прогалов). Может ли Феникс решить пазл?

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 10^9\)) — количество фрагментов в пазле.

Выходные данные

Для каждого набора, если Феникс может собрать квадрат из \(n\) фрагментов, выведите YES. Иначе, выведите NO.

Примечание

Для \(n=2\), Феникс может собрать следующий квадрат:

Для \(n=4\), Феникс может собрать такой квадрат:

Для \(n=6\), Феникс не сможет собрать квадрат.

H. Полет вокруг света

геометрия дп *3500

После того, как Уово услышал историю доктора Чжан, он решил спланировать свой собственный полет вокруг света.

Он уже выбрал \(n\) контрольных точек на карте мира. Из-за формы рельефа и облаков, он не может лететь слишком высоко или слишком низко. Формально, пусть \(b_i\) будет высота самолета Уово на контрольной точке \(i\). Для всех целых \(i\) между \(1\) и \(n\) должно выполняться \(x_i^-\le b_i\le x_i^+\), где \(x_i^-\) и \(x_i^+\) — данные вам целые числа.

Угол полета самолета Уово тоже ограничен. Например, он не может лететь вертикально вверх под \(90\) градусов. Формально, \(y_i^-\le b_i-b_{i-1}\le y_i^+\) должно выполняться для всех целых \(i\) между \(2\) и \(n\), где \(y_i^-\) и \(y_i^+\) — данные вам целые числа.

Последнее ограничение связано со скоростью изменения угла. Самолет должен делать это плавно из соображений безопасности. Формально, \(z_i^- \le (b_i - b_{i-1}) - (b_{i-1} - b_{i-2}) \le z_i^+\) должно выполняться для всех целых \(i\) между \(3\) и \(n\), где \(z_i^-\) и \(z_i^+\) — данные вам целые числа.

Принимая во внимание все эти ограничения, Уово обнаружил, что выбрать высоты для контрольных точек слишком сложно. Помогите Уово определить, существует ли последовательность вещественных чисел \(b_1, \ldots, b_n\), удовлетворяющая всем ограничениям выше.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 66\,666\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 100\,000\)).

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i^-\), \(x_i^+\) (\(-10^8\le x_i^-\le x_i^+\le 10^8\)), обозначающих нижнее и верхнее ограничение на \(b_i\).

\(i\)-я из следующих \(n-1\) строк содержит два целых числа \(y_{i+1}^-\), \(y_{i+1}^+\) (\(-10^8\le y_{i+1}^-\le y_{i+1}^+\le 10^8\)), обозначающих нижнее и верхнее ограничение на \(b_{i+1}-b_i\).

\(i\)-я из следующих \(n-2\) строк содержит два целых числа \(z_{i+2}^-\), \(z_{i+2}^+\) (\(-10^8\le z_{i+2}^-\le z_{i+2}^+\le 10^8\)), обозначающих нижнее и верхнее ограничение на \((b_{i+2}-b_{i+1}) - (b_{i+1}-b_i)\).

Гарантируется, что сумма \(n\) по всем наборах входных данных не превышает \(200\,000\).

Гарантируется, что ослабление каждого ограничения на \(10^{-6}\) (т.е. уменьшение \(x_i^-, y_i^-, z_i^-\) на \(10^{-6}\) и увеличение \(x_i^+, y_i^+, z_i^+\) на \(10^{-6}\)) не изменит ответ.

Выходные данные

Для каждого набора входных данных, выведите YES, если существует последовательность \(b_1,\ldots, b_n\), удовлетворяющая всем ограничениям. И NO иначе. Выводить саму последовательность \(b_1,\ldots, b_n\) не требуется.

Примечание

В первом наборе входных данных все \(b_i\) принадлежат отрезку \([0,1]\). Из-за ограничения \(1=y_2^-\le b_2-b_1\le y_2^+=1\), \(b_2-b_1\) должно равняться \(1\). Поэтому, должно выполняться \(b_2=1\) и \(b_1=0\). Потом, по \(1=y_3^-\le b_3-b_2\le y_3^+=1\), \(b_3\) равно \(2\). Это приводит к противоречию с ограничением \(b_3\le 1\). Поэтому, решения не существует.

Во втором наборе входных данных мы можем сделать все \(b_i\) равными \(0\).

В третьем наборе входных данных одно из возможных решений это \(b_1=0\), \(b_2=1/3\), \(b_3=2/3\), \(b_4=1\).

E. Сдвиг на один

геометрия графы Деревья Конструктив поиск в глубину и подобное сортировки *2700

На бесконечной плоскости лежат \(n\) точек. Координаты \(i\)-й точки \((x_i, y_i)\) такие, что \(x_i > 0\) и \(y_i > 0\). Координаты необязательно целые.

За один ход осуществляются следующие операции:

  • выбрать две точки \(a\) и \(b\) (\(a \neq b\));
  • подвинуть точку \(a\) из \((x_a, y_a)\) либо в \((x_a + 1, y_a)\), либо в \((x_a, y_a + 1)\);
  • подвинуть точку \(b\) из \((x_b, y_b)\) либо в \((x_b + 1, y_b)\), либо в \((x_b, y_b + 1)\);
  • удалить точки \(a\) и \(b\).

Ход можно совершить только в том случае, если существует прямая, проходящая через новые координаты \(a\), новые координаты \(b\) и \((0, 0)\).

Иначе ход совершить нельзя, и точки остаются на своих начальных координатах \((x_a, y_a)\) и \((x_b, y_b)\), соответственно.

Нумерация точек не меняется после удаления точек. Если точки удалены, то они не могут быть выбраны в последующих ходах. Обратите внимание, что необходимо двигать обе точки во время хода, нельзя оставлять их в изначальных координатах.

Какое наибольшее количество ходов можно совершить? Какие это ходы?

Если существует несколько ответов, то выведите любой из них.

Входные данные

В первой строке записано одно целое \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество точек.

В \(i\)-й из следующих \(n\) строк записаны четыре целых числа \(a_i, b_i, c_i, d_i\) (\(1 \le a_i, b_i, c_i, d_i \le 10^9\)). Координаты \(i\)-й точки — \(x_i = \frac{a_i}{b_i}\) и \(y_i = \frac{c_i}{d_i}\).

Выходные данные

В первой строке выведите одно целое число \(c\) — наибольшее количество ходов, которые можно совершить.

В каждой из следующих \(c\) строк должно быть записано описание хода: два целых числа \(a\) и \(b\) (\(1 \le a, b \le n\), \(a \neq b\)) — точки, удаляемые на текущем ходу. Должен существовать способ подвинуть точки \(a\) и \(b\) согласно условию так, чтобы существовала прямая, проходящая через новые координаты \(a\), новые координаты \(b\) и \((0, 0)\). Никакая удаленная точка не может быть удалена в последующих ходах.

Если существует несколько ответов, то выведите любой из них. Можно выводить ходы и точки внутри ходов в произвольном порядке.

Примечание

Точки из первого примера и перемещения для тех из них, которые выбираются в ходах:

G. Новое начало

геометрия дп сортировки Структуры данных *3300

Анни устала выигрывать все контесты и получать бесконечный рейтинг, поэтому сегодня вместо контеста она поехала сажать картошку.

Участок Анни можно представить в виде бесконечной плоскости. Анни должна посадить \(n\) кустов картошки, \(i\)-й куст должен быть посажен в точке \((x_i,y_i)\). Анни начнет в точке \((0, 0)\), и за один шаг будет перемещаться на одну единицу длины вправо или вверх (т. е. увеличивать свою координату \(x\) или \(y\) на \(1\)). Из любой точки \((X,Y)\) в процессе движения она может посадить любое количество кустов в любых точках плоскости, используя свою картофельную пушку. Для посадки одного куста в точку \((x,y)\) требуется \(\max(|X-x|,|Y-y|)\) единиц энергии. Найдите минимальное количество энергии, необходимое для посадки всех кустов картошки.

Обратите внимание, что Анни может посадить любое количество кустов из любой точки.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 800\,000\)).

Следующие \(n\) строк содержат по два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i,y_i \le 10^9\)), определяющие требуемое положение \(i\)-го куста картошки. Возможно, некоторые кусты картошки требуется посадить в одно и то же место.

Выходные данные

Выведите минимальное количество энергии, необходимое для посадки всей картошки.

Примечание

В примере \(1\) Анни может посетить все необходимые точки, поэтому энергия не требуется.

В примере \(2\) Анни сначала может пойти в \((1,0)\), посадить оттуда второй куст, используя \(1\) единицу энергии. Затем она пойдет в \((1,1)\) и посадит первый куст, используя \(0\) единиц энергии.

F. Омкар и Акмар

meet-in-the-middle бпф геометрия игры китайская теорема об остатках Комбинаторика Конструктив математика строковые суфф. структуры *2600

Омкар и Акмар играют в игру на круговой доске с \(n\) (\(2 \leq n \leq 10^6\)) клетками. Клетки пронумерованы от \(1\) до \(n\), для каждой \(i\) (\(1 \leq i \leq n-1\)) клетка \(i\) соседствует с клеткой \(i+1\), а клетка \(1\) соседствует с клеткой \(n\). Изначально каждая клетка пуста.

Омкар и Акмар по очереди выкладывают на доску букву A или B, причем Акмар ходит первым. Буква должна быть помещена на пустую клетку. Кроме того, буква не может быть помещена в такую клетку, что соседняя клетка содержит ту же букву.

Игрок проигрывает, когда наступает его очередь и больше нет допустимых ходов.

Выведите количество возможных различных игр, в которых оба игрока играют оптимально по модулю \(10^9+7\). Обратите внимание, что мы рассматриваем только те партии, в которых кто-то из игроков проиграл, и не осталось ни одного допустимого хода.

Две игры считаются разными, если количества ходов в них отличаются, или на каком-то ходу буква или номер клетки, на которую ставится буква, были разными.

Ход считается оптимальным, если он максимизирует шансы игрока на победу, предполагая, что другой игрок также играет оптимально. Более формально, если игрок, чья очередь ходить, имеет выигрышную стратегию, он должен сделать ход, после которого у него останется выигрышная стратегия. Если же у него ее нет, то он может сделать любой ход.

Входные данные

Первая строка будет содержать целое число \(n\) (\(2 \leq n \leq 10^6\)) — количество клеток на доске.

Выходные данные

Выведите одно целое число, — количество возможных различных игр, в которых оба игрока играют оптимально по модулю \(10^9+7\).

Примечание

В первом примере первый игрок имеет \(4\) возможных хода. Независимо от того, как ходит первый игрок, у второго игрока есть ровно \(1\) возможный ход, поэтому существует \(4\) возможных игры.

A. Старт олимпиады

геометрия жадные алгоритмы Комбинаторика математика *1000

В некоторой олимпиаде участвует \(n\) человек, причем они начинают олимпиаду с интервалом в \(x\) минут. Таким образом первый участник начнёт тур в момент времени \(0\), второй участник начнёт тур в момент времени \(x\), третий — в момент времени \(2 \cdot x\) и так далее.

Длительность тура для каждого участника составляет ровно \(t\) минут, то есть первый участник закончит в момент времени \(t\), второй — в момент времени \(t + x\), и так далее. Когда участник заканчивает писать тур, величина его недовольства равна числу других участников, которые в текущий момент времени еще пишут или только начинают писать тур, но еще не закончили его.

Определите, чему равно суммарное недовольство всех участников олимпиады.

Входные данные

В первой строке вводится единственное число \(k\) (\(1 \le k \le 1000\)) — количество наборов входных данных.

Каждая из следующих \(k\) строк содержит по три целых числа \(n\), \(x\), \(t\) (\(1 \le n, x, t \le 2 \cdot 10^9\)) — число участников олимпиады, интервал в минутах между временами начала тура для участников и длительность тура.

Выходные данные

Выведите \(k\) строк, в \(i\)-й из них выведите суммарное недовольство всех участников олимпиады для \(i\)-го набора входных данных.

Примечание

В первом наборе входных данных первый участник начнёт писать тур в момент времени \(0\) и закончит в момент времени \(5\). К этому времени второй и третий участники уже начнут писать тур, поэтому недовольство первого участника будет равно \(2\).

Второй участник начнёт писать в момент времени \(2\) и закончит в момент времени \(7\). К этому моменту третий и четвёртый участники уже начнут писать тур, поэтому недовольство второго будет равно \(2\).

Третий участник начнёт писать тур в момент времени \(4\) и закончит в момент времени \(9\). К этому времени четвёртый уже начнёт писать тур, поэтому недовольство третьего будет равно \(1\).

Четвёртый участник начнёт писать тур в момент времени \(6\) и закончит в момент времени \(11\). В момент времени \(11\) уже никто не будет писать тур, поэтому недовольство четвёртого будет равно \(0\).

Во втором наборе входных данных первый участник начнёт писать тур в момент времени \(0\) и закончит в момент времени \(2\). К этому моменту второй уже будет писать тур, а третий как раз начнёт в момент времени \(2\). Поэтому недовольство первого участника будет равно \(2\).

Второй начнёт в момент времени \(1\) и закончит в момент времени \(3\). К этому моменту только третий будет всё ещё писать тур.

E. Колония на Марсе

геометрия *3000

Первый корабль с земными поселенцами высадился на Марсе. Колонисты успели возвести n необходимых построек на поверхности планеты (которую можно считать плоскостью, а постройки — точками на ней), но однажды сканеры поверхности зафиксировали подозрительную активность на подступах к колонии. Было решено воспользоваться системой генерации защитного силового поля, чтобы оградить колонию от возможных неприятностей.

Система работает следующим образом: на поверхности размещается некоторое количество генераторов поля (их тоже можно считать точками). Область действия каждого из генераторов представляет собой круг радиуса r с центром в точке расположения генератора (граница круга также входит в область). После включения системы силовым полем оказывается защищена только та часть поверхности, которая находится внутри области действия всех генераторов, то есть та часть, которая является пересечением областей действия генераторов.

Количество генераторов в распоряжении колонистов не ограничено, но система генерации поля потребляет много энергии. Более точно, потребляемая энергия не зависит от количества генераторов, но прямо пропорциональна площади, которая оказывается защищена полем. При этом необходимо, чтобы все имеющиеся постройки находились внутри защищенной области.

Определите минимально возможную площадь защищенной части поверхности, содержащей все постройки.

Входные данные

В первой строке записано два целых числа n и r (1 ≤ n ≤ 105, 1 ≤ r ≤ 50000) — количество построек и радиус действия генераторов соответственно.

В следующих n строках записаны координаты построек. В i + 1-ой (1 ≤ i ≤ n) строке записано два вещественных числа не более чем с тремя знаками после точки — xi и yi (|xi|, |yi| ≤ 50000) — координаты i-ой постройки. Гарантируется, что никакие две постройки не находятся в одной точке, а также никакие две различные постройки не находятся на расстоянии ближе 1.

Гарантируется, что существует круг радиуса r, содержащий все постройки.

Выходные данные

Выведите одно вещественное число — минимальную площадь защищенной части, содержащей все постройки. Ответ принимается, если абсолютная либо относительная погрешность не превышает 10 - 4.

Примечание

В первом примере заданный радиус равен радиусу описанной окружности вокруг данных точек, поэтому соответствующий ей круг является искомой областью. Ответ — 25π.

Во втором примере область почти совпадает с квадратом с вершинами в данных точках.

Область для третьего примера изображена на рисунке ниже.

D1. Грегор и нечетные коровы (простая версия)

битмаски геометрия математика теория чисел *2300

Это простая версия задачи. Единственное отличие от сложной версии заключается в том, что в данной версии все координаты — четные числа.

Даны \(n\) столбов, расположенных в различных точках на плоскости. Гарантируется, что никакие три столба не лежат на одной прямой.

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

Грегор — член общества иллюминатов и хочет построить треугольный загон, соединив \(3\) различных существующих столба забором. Корова, находящаяся строго внутри загона, считается огражденной. Если ограждено нечётное число коров, и при этом площадь загона равна целому числу, то загон считается интересным.

Найдите количество интересных загонов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 6000\)) — количество столбов, которые Грегор может выбрать в качестве вершин загона.

Следующие \(n\) строк содержат по два целых числа \(x\) и \(y\) (\(0 \le x,y \le 10^7\), \(x\) и \(y\) — четные числа), где \((x,y)\) — координата очередного столба. Все столбы расположены в различных точках. Никакие три столба не лежат на одной прямой.

Выходные данные

Напечатайте одно целое число — количество интересных загонов. Два загона считаются различными, если они образованы различными множествами трех столбов.

Примечание

В первом примере существует только \(1\) загон. Этот загон является интересным, поскольку его площадь равна \(4\) и есть \(1\) пойманная корова, помеченная красным.

Во втором примере есть \(3\) интересных забора.

  • \((0,0)\)\((30,14)\)\((2,10)\)
  • \((2,16)\)\((30,14)\)\((2,10)\)
  • \((30,14)\)\((4,6)\)\((2,10)\)

D2. Грегор и нечетные коровы (сложная версия)

геометрия математика Перебор теория чисел *3300

Это сложная версия задачи. Единственное отличие от простой версии заключается в том, что в данной версии координаты могут быть как чётными, так и нечётными.

Даны \(n\) столбов, расположенных в различных точках на плоскости. Гарантируется, что никакие три столба не лежат на одной прямой.

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

Грегор — член общества иллюминатов и хочет построить треугольный загон, соединив \(3\) различных существующих столба забором. Корова, находящаяся строго внутри загона, считается огражденной. Если ограждено нечётное число коров, и при этом площадь загона равна целому числу, то загон считается интересным.

Найдите количество интересных загонов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 6000\)) — количество столбов, которые Грегор может выбрать в качестве вершин загона.

Следующие \(n\) строк содержат по два целых числа \(x\) и \(y\) (\(0 \le x,y \le 10^7\), где \((x,y)\) — координата очередного столба. Все столбы расположены в различных точках. Никакие три столба не лежат на одной прямой.

Выходные данные

Напечатайте одно целое число — количество интересных загонов. Два загона считаются различными, если они образованы различными множествами трех столбов.

Примечание

В первом примере существует только \(1\) загон. Этот загон является интересным, поскольку его площадь равна \(4\) и есть \(1\) пойманная корова, помеченная красным.

Во втором примере существует \(4\) возможных загона. Однако, только один из них является интересным. Этот загон имеет площадь, равную \(8\), и \(5\) пойманных коров.

C. Манхэттенские подмассивы

геометрия жадные алгоритмы Перебор реализация *1700

Предположим, есть две точки \(p = (x_p, y_p)\) и \(q = (x_q, y_q)\). Тогда обозначим манхэттенское расстояние между ними как \(d(p, q) = |x_p - x_q| + |y_p - y_q|\).

Назовем три точки \(p\), \(q\), \(r\) как плохую тройку, если \(d(p, r) = d(p, q) + d(q, r)\).

Назовем массив \(b_1, b_2, \dots, b_m\) хорошим, если нельзя выбрать три различных индекса \(i\), \(j\) и \(k\) так, что точки \((b_i, i)\), \((b_j, j)\) и \((b_k, k)\) — плохая тройка.

Вам задан массив \(a_1, a_2, \dots, a_n\). Посчитайте количество хороших подмассивов \(a\). Подмассив массива \(a\) — это массив \(a_l, a_{l + 1}, \dots, a_r\) для некоторых \(1 \le l \le r \le n\).

Заметим, что согласно определению, подмассивы длины \(1\) и \(2\) являются хорошими.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите количество хороших подмассивов массива \(a\).

Примечание

В первом наборе, можно доказать, что любой подмассив массива \(a\) является хорошим. Например, подмассив \([a_2, a_3, a_4]\) — хороший, потому что содержит только три элемента и:

  • \(d((a_2, 2), (a_4, 4)) = |4 - 3| + |2 - 4| = 3\) \(<\) \(d((a_2, 2), (a_3, 3)) + d((a_3, 3), (a_4, 4)) = 3 + 1 + 2 + 1 = 7\);
  • \(d((a_2, 2), (a_3, 3))\) \(<\) \(d((a_2, 2), (a_4, 4)) + d((a_4, 4), (a_3, 3))\);
  • \(d((a_3, 3), (a_4, 4))\) \(<\) \(d((a_3, 3), (a_2, 2)) + d((a_2, 2), (a_4, 4))\);

Во втором наборе, для примера, подмассив \([a_1, a_2, a_3, a_4]\) не является хорошим, потому что содержит плохую тройку \((a_1, 1)\), \((a_2, 2)\), \((a_4, 4)\):

  • \(d((a_1, 1), (a_4, 4)) = |6 - 9| + |1 - 4| = 6\);
  • \(d((a_1, 1), (a_2, 2)) = |6 - 9| + |1 - 2| = 4\);
  • \(d((a_2, 2), (a_4, 4)) = |9 - 9| + |2 - 4| = 2\);

То есть, \(d((a_1, 1), (a_4, 4)) = d((a_1, 1), (a_2, 2)) + d((a_2, 2), (a_4, 4))\).

C. Максимизируйте пересечения

геометрия жадные алгоритмы Комбинаторика Конструктив сортировки *1800

На окружности лежат \(2n\) различных точек, обладающих следующим свойством: как бы вы ни выбрали \(3\) хорды, соединяющие \(3\) непересекающиеся пары точек, ни одна точка строго внутри окружности не принадлежит всем \(3\) хордам. Точки нумеруются \(1, \, 2, \, \dots, \, 2n\) по часовой стрелке.

Изначально \(k\) хорд соединяют \(k\) пар точек таким образом, что все \(2k\) концов этих хорд различны.

Необходимо провести еще \(n - k\) хорд, которые соединят оставшиеся \(2(n - k)\) точек (каждая точка должна быть концом ровно одной хорды).

Пусть \(x\) — это общее количество пересечений всех \(n\) хорд. Вычислите максимальное значение, которого может достичь \(x\) при оптимальном выборе \(n - k\) хорд.

Обратите внимание, что точное расположение точек \(2n\) не имеет значения, пока выполняется свойство, указанное в первом предложении.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\), \(0 \le k \le n\)) — половину количества точек и количество хорд, построенных изначально.

Затем следуют \(k\) строк. В \(i\)-й из них содержатся два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, \, y_i \le 2n\), \(x_i \ne y_i\)) — концы \(i\)-й хорды. Гарантируется, что \(2k\) чисел \(x_1, \, y_1, \, x_2, \, y_2, \, \dots, \, x_k, \, y_k\) попарно различны.

Выходные данные

Для каждого набора входных данных выведите максимальное количество пересечений, которое можно получить, проведя \(n - k\) дополнительных хорд.

Примечание

В первом наборе входных данных, есть три способа нарисовать \(2\) дополнительных хорд, показанных ниже (черные хорды — первоначально нарисованные, а красные — новые):

Мы видим, что третий способ дает максимальное количество пересечений, а именно \(4\).

Во втором наборе входных данных, больше не нужно строить хорд. Конечно, при наличии только одной хорды пересечений нет.

В третьем наборе входных данных, мы можем сделать не более одного пересечения, проведя хорды \(1-3\) и \(2-4\), как показано ниже:

B. След

геометрия сортировки *1000

Однажды, выслеживая одного очень опасного преступника, Шерлок Холмс наткнулся на удивительный рисунок на стене. На рисунке изображено несколько концентрических окружностей, разбивающих плоскость стены на несколько областей. Некоторые области покрашены в красный цвет, а остальные — в синий. Причем любые две соседние области покрашены в разные цвета, то есть красный и синий цвета чередуются. Внешняя область стены (лежащая вне всех окружностей) покрашена в синий цвет. Помогите Шерлоку Холмсу определить, какая площадь стены покрашена в красный цвет.

Напоминаем, что две окружности называются концентрическими, если их центры совпадают. Несколько окружностей называются концентрическими, если любые две из них концентрические.

Входные данные

В первой строке дано единственное целое число n (1 ≤ n ≤ 100). Во второй строке через пробел даны n целых чисел ri (1 ≤ ri ≤ 1000) — радиусы окружностей. Гарантируется, что все окружности различны.

Выходные данные

Выведите единственное вещественное число — площадь покрашенной в красный цвет части стены. Ответ принимается, если абсолютная либо относительная погрешность не превышает 10 - 4.

Примечание

В первом тесте рисунок представляет собой просто окружность радиуса один, внутренняя область которой закрашена в красный цвет. Площадь красной области будет равна π × 12 = π.

Во втором тесте есть три окружности радиусов 1, 4 и 2. Снаружи от второй окружности покрашено в синий цвет, между второй и третьей окружностью — в красный, между первой и третьей — снова в синий и внутри первой — снова в красный. Итого, есть две красные области: кольцо между второй и третьей окружностями и круг внутри первой окружности. Общая площадь красных областей будет равна (π × 42 - π × 22) + π × 12 = π × 12 + π = 13π.

H. Лучи лазеров

*особая задача геометрия Теория вероятностей *2900

Ира разрабатывает компьютерную игру. В данной игре есть рандомизированные генерация и сложность уровней. Для достижения случайной сложности, некоторые противники на уровне случайным образом заменяются на более сильных.

Для того чтобы описать уровни в игре, введем координатную плоскость так, чтобы ось \(Ox\) была направлена слева направо, а ось \(Oy\) — снизу вверх. Уровень — это прямоугольник с противоположными углами в точках \((0, 0)\) и \((a, b)\). Позиция каждого противника на уровне — это точка в прямоугольнике.

На данный момент Ира реализовала противников только одного типа в двух версиях — базовом и усиленном. Обе версии противников стреляют лазерными лучами в нескольких направлениях:

  • базовые противники стреляют лазером в четыре направления: вправо (в направлении вектора \((1, 0)\)), влево (в направлении вектора \((-1, 0)\)), вверх (в направлении вектора \((0, 1)\)) и вниз (в направлении вектора \((0, -1)\));
  • усиленные противника стреляют лазеров в восемь направлений: четыре направления совпадают с базовой версией, а еще четыре — в направление векторов \((1, 1)\), \((1, -1)\), \((-1, 1)\), \((-1, -1)\).

Лучи лазеров проходят сквозь противников и блокируются только границами уровня (сторонами прямоугольника, описывающего уровень). На самих противников лучи не влияют.

На уровне, который в разработке у Иры, ровно \(n\) противников. Противник \(i\) находится в точке \((x_i, y_i)\), и его вероятность стать усиленным равна \(p_i\) (то есть противник усиленный с вероятностью \(p_i\) или базовый с вероятностью \(1-p_i\)). Вероятности усиления независимы друг от друга.

Ира хочет оценить ожидаемую сложность уровня. Она решила, что хорошей мерой сложности уровня будет количество частей, на которые уровень делится лазерными лучами. А потому, она хочет подсчитать математическое ожидание количества этих частей.

Помогите ей оценить ожидаемую сложность уровня!

Входные данные

В первой строке заданы три целых числа \(n\), \(a\) и \(b\) (\(1 \le n \le 100\); \(2 \le a, b \le 100\)) — количество противников на уровне и размеры данного уровня.

Далее следуют \(n\) строк. В \(i\)-й строке заданы три целых числа \(x_i\), \(y_i\) и \(p'_i\) (\(1 \le x_i \le a - 1\); \(1 \le y_i \le b - 1\); \(1 \le p'_i \le 999999\)), означающих, что \(i\)-й противник расположен в точке \((x_i, y_i)\) и его вероятность усилиться равна \(\frac{p'_i}{10^6}\).

Никакие два противника не стоят в одной точке.

Выходные данные

Выведите одно целое число — математическое ожидание количества частей, на которые лазеры делят уровень, по модулю \(998244353\) (т. е. пусть матожидание количества частей равно \(\frac{x}{y}\) как несократимой дробь; вам нужно вывести \(x \cdot y^{-1} \bmod 998244353\), где \(y^{-1}\) — это такое число, что \(y \cdot y^{-1} \bmod 998244353 = 1\)).

Примечание

Описание первого примера:

С вероятностью \(\frac{1}{2}\), единственный противник останется не усиленным. Тогда уровень будет выглядеть следующим образом (\(4\) части):

С вероятностью \(\frac{1}{2}\), единственный противник усилится. В таком случае уровень будет выглядеть следующим образом (\(8\) частей):

Таким образом, матожидание количества частей равно \(4 \cdot \frac{1}{2} + 8 \cdot \frac{1}{2} = 6\).

E. Многоугольник

Бинарный поиск геометрия дп *3000

У вас есть строго выпуклый многоугольник с \(n\) вершинами.

Вы сделаете \(k\) разрезов, удовлетворяющих следующим условиям:

  • каждый разрез — отрезок, соединяющий две различные не соседние вершины;
  • два разреза могут пересекаться только в вершинах многоугольника.

Ваша задача — максимизировать площадь минимальной по площади области, образованной многоугольником и этими \(k\) разрезами.

Входные данные

Первая строка содержит два целых числа \(n\), \(k\) (\(3 \le n \le 200\), \(0 \le k \le n-3\)).

Следующие \(n\) строк описывают вершины многоугольника в порядке против часовой стрелки. \(i\)-из этих строк содержит два целых числа \(x_i\), \(y_i\) (\(|x_i|, |y_i| \le 10^8\)) — координаты \(i\)-й вершины.

Гарантируется, что многоугольник выпуклый и никакие две смежные стороны не параллельны.

Выходные данные

Выведите одно целое число: максимально возможную площадь самой маленькой области после \(k\) разрезов, умноженную на \(2\).

Примечание

В примере оптимально провести разрезы между следующими парами вершин:

  • \((-2, -4)\) и \((4, 2)\),
  • \((-2, -4)\) и \((1, 5)\),
  • \((-5, -1)\) и \((1, 5)\),
  • \((-5, 0)\) и \((0, 5)\).
Область с наименьшей площадью — четырехугольник с вершинами в \((-5, -1)\), \((1, 5)\), \((0, 5)\), \((-5, 0)\), удвоенная площадь которого равна \(11\).

Во втором примере оптимально провести разрезы между следующими парами вершин:

  • \((2, -1)\) и \((0, 2)\),
  • \((2, -1)\) и \((1, 0)\),
  • \((-1, 0)\) и \((0, 2)\).
Область с наименьшей площадью — треугольник с вершинами в \((2, -2)\), \((2, -1)\), \((-1, 0)\), удвоенная площадь которого равна \(3\).

B. Building an Amusement Park

Бинарный поиск геометрия *2300

Mr. Chanek lives in a city represented as a plane. He wants to build an amusement park in the shape of a circle of radius \(r\). The circle must touch the origin (point \((0, 0)\)).

There are \(n\) bird habitats that can be a photo spot for the tourists in the park. The \(i\)-th bird habitat is at point \(p_i = (x_i, y_i)\).

Find the minimum radius \(r\) of a park with at least \(k\) bird habitats inside.

A point is considered to be inside the park if and only if the distance between \(p_i\) and the center of the park is less than or equal to the radius of the park. Note that the center and the radius of the park do not need to be integers.

In this problem, it is guaranteed that the given input always has a solution with \(r \leq 2 \cdot 10^5\).

Input

The first line contains two integers \(n\) and \(k\) (\(1 \leq n \leq 10^5\), \(1 \leq k \leq n\)) — the number of bird habitats in the city and the number of bird habitats required to be inside the park.

The \(i\)-th of the next \(n\) lines contains two integers \(x_i\) and \(y_i\) (\(0 \leq |x_i|, |y_i| \leq 10^5\)) — the position of the \(i\)-th bird habitat.

Output

Output a single real number \(r\) denoting the minimum radius of a park with at least \(k\) bird habitats inside. It is guaranteed that the given input always has a solution with \(r \leq 2 \cdot 10^5\).

Your answer is considered correct if its absolute or relative error does not exceed \(10^{-4}\).

Formally, let your answer be \(a\), and the jury's answer be \(b\). Your answer is accepted if and only if \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-4}\).

Note

In the first example, Mr. Chanek can put the center of the park at \((-3, -1)\) with radius \(\sqrt{10} \approx 3.162\). It can be proven this is the minimum \(r\).

The following illustrates the first example. The blue points represent bird habitats and the red circle represents the amusement park.

M. Managing Telephone Poles

геометрия Структуры данных *2400

Mr. Chanek's city can be represented as a plane. He wants to build a housing complex in the city.

There are some telephone poles on the plane, which is represented by a grid \(a\) of size \((n + 1) \times (m + 1)\). There is a telephone pole at \((x, y)\) if \(a_{x, y} = 1\).

For each point \((x, y)\), define \(S(x, y)\) as the square of the Euclidean distance between the nearest pole and \((x, y)\). Formally, the square of the Euclidean distance between two points \((x_1, y_1)\) and \((x_2, y_2)\) is \((x_2 - x_1)^2 + (y_2 - y_1)^2\).

To optimize the building plan, the project supervisor asks you the sum of all \(S(x, y)\) for each \(0 \leq x \leq n\) and \(0 \leq y \leq m\). Help him by finding the value of \(\sum_{x=0}^{n} {\sum_{y=0}^{m} {S(x, y)}}\).

Input

The first line contains two integers \(n\) and \(m\) (\(0 \leq n, m < 2000\)) — the size of the grid.

Then \((n + 1)\) lines follow, each containing \((m + 1)\) integers \(a_{i, j}\) (\(0 \leq a_{i, j} \leq 1\)) — the grid denoting the positions of telephone poles in the plane. There is at least one telephone pole in the given grid.

Output

Output an integer denoting the value of \(\sum_{x=0}^{n} {\sum_{y=0}^{m} {S(x, y)}}\).

Note

In the first example, the nearest telephone pole for the points \((0,0)\), \((1,0)\), \((2,0)\), \((0,1)\), \((1,1)\), and \((2,1)\) is at \((0, 0)\). While the nearest telephone pole for the points \((0, 2)\), \((1,2)\), and \((2,2)\) is at \((0, 2)\). Thus, \(\sum_{x=0}^{n} {\sum_{y=0}^{m} {S(x, y)}} = (0 + 1 + 4) + (1 + 2 + 5) + (0 + 1 + 4) = 18\).

F. Framing Pictures

геометрия *2900

Life has been discovered on Venus! What is more, the life forms appear to be convex polygons. An international consortium is designing a probe to send to Venus to take pictures, but they need to estimate the bandwidth needed to send back pictures.

When the probe takes a picture of a life form and wishes to send it back to Earth, the bandwidth required is proportional to the area of the bounding box (in other words, the smallest axis-aligned rectangle that contains the life-form). The shape and size of the life forms are known, but the orientation relative to the camera is random. You must thus determine the expected (average) area of the bounding box across all orientations.

Input

The input describes the shape of a life form as a convex polygon in two dimensions.

The first line of input contains an integer \(n\) (\(3 \le n \le 200\,000\)) — the number of vertices. The remaining \(n\) lines each contain two integers \(x\) and \(y\) (\(-10^9 \le x, y \le 10^9\)) — the coordinates of a vertex. The vertices are given in counterclockwise order, and no three vertices lie on a straight line.

Output

Output a single line containing the expected area of the bounding box of the polygon. Your answer should have an absolute or relative error of at most \(10^{-6}\).

Note

The pictures show example life forms and various camera orientations.

   

I. Interactive Rays

геометрия интерактив *3300

This is an interactive problem.

Your goal is to find a circle on a plane by shooting rays and getting the distance to the circle as a result.

Interactor has three hidden integer parameters that are determined in advance for each test, but which you don't know — \(x_c\), \(y_c\), and \(r_c\). \((x_c, y_c)\) are coordinates of the circle's center and \(r_c\) is its radius. The absolute values of \(x_c\), \(y_c\), and \(r_c\) do not exceed \(10^5\), and \(1 \leq r_c \leq \sqrt{x_c^2 + y_c^2} - 1\).

You can shoot rays that extend from the origin \((0,0)\) and go via a point \((x_q,y_q)\) with the integer coordinates you specify. For each ray, you get a distance from the ray to the circle or \(0\) if the ray intersects the circle.

Interaction

The interaction starts with your program printing a query to the standard output and finishes when your program finds and prints the answer to the problem.

Each query has a form of "? \(x_q\) \(y_q\)", where \(x_q\) and \(y_q\) are integers (\(|x_q|, |y_q| \le 10^6\); \(x_q \ne 0\) or \(y_q \ne 0\)).

The interactor outputs a line with a single floating-point number — the distance between a query ray and a circle that is precise to \(10^{-10}\) by an absolute value.

Your program can make the next query, read the output, and so on. You are allowed to do at most \(60\) queries. At the end of the interaction, print the answer line "! \(x_c\) \(y_c\) \(r_c\)", flush the output and exit.

Note, that the output of the interactor is actually rounded to the 10-th digit after a decimal point, so if you are stress-testing your solution locally, make sure that you also perform the corresponding rounding.

Note
Illustration of the queries from the example interaction.

G. Допустимые отрезки

геометрия *3200

Вам даны \(n\) различных точек \(p_1, p_2, \ldots, p_n\) на плоскости, а также положительное целое число \(R\).

Найдите количество пар индексов \((i, j)\) таких, что \(1 \le i < j \le n\), и для всех возможных \(k\) (\(1 \le k \le n\)) расстояние от точки \(p_k\) до отрезка, образованного точками \(p_i\) и \(p_j\), не больше \(R\).

Входные данные

Первая строка содержит два целых числа \(n\), \(R\) (\(1 \le n \le 3000\), \(1 \le R \le 10^5\)) — количество точек на плоскости и максимальное возможное расстояние от точки до отрезка.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\), \(y_i\) (\(-10^5 \le x_i, y_i \le 10^5\)), которые задают \(i\)-ю точку \(p_i=(x_i, y_i)\). Все точки различны.

Гарантируется, что ответ на задачу не изменится при изменении значения параметра \(R\) на величину не более \(10^{-2}\).

Выходные данные

Выведите единственное целое число — количество подходящих пар \((i, j)\).

Примечание

В первом примере подходит единственная пара точек \((-3, 0)\), \((3, 0)\). Расстояние до отрезка между этими точками от точек \((0, 1)\) и \((0, -1)\) равно \(1\), что меньше \(R=2\).

Во втором примере подходят все возможные пары точек.

D. Тренировка

геометрия Комбинаторика математика реализация Структуры данных *1700

Монокарп тренер команд Берляндского ГУ по программированию. Он решил собрать тренировку для своих команд перед квалификационным этапом.

У Монокарпа есть \(n\) задач, которые еще не решал ни один из его студентов. У \(i\)-й задачи есть тема \(a_i\) (целое число от \(1\) до \(n\)) и сложность \(b_i\) (целое число от \(1\) до \(n\)), причем все задачи попарно различны, то есть нет двух задач, у которых одинаковы и тема, и сложность.

Монокарп решил выбрать из \(n\) задач ровно \(3\) задачи для тренировки, при этом должно выполняться хотя бы одно из двух условий (возможно, оба):

  • темы всех трех выбранных задач различны;
  • сложности всех трех выбранных задач различны.

Перед вами стоит задача определить количество способов, которыми Монокарп может выбрать три задачи для тренировки.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 50000\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество задач, которые есть у Монокарпа.

В \(i\)-й из следующих \(n\) строк следуют по два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)) — тема и сложность \(i\)-й задачи.

Гарантируется, что нет двух задач, у которых одинаковы и тема, и сложность.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите количество способов выбрать три задачи для тренировки, которые удовлетворяют описанным в условии требованиям.

Примечание

В первом примере можно взять следующие наборы по три задачи:

  • задачи с номерами \(1\), \(2\), \(4\);
  • задачи с номерами \(1\), \(3\), \(4\);
  • задачи с номерами \(2\), \(3\), \(4\).

Таким образом, количество способов равно трем.

G. Shortest path

геометрия кратчайшие пути математика Перебор *2700

You are given \(N\) points on an infinite plane with the Cartesian coordinate system on it. \(N-1\) points lay on one line, and one point isn't on that line. You are on point \(K\) at the start, and the goal is to visit every point. You can move between any two points in a straight line, and you can revisit points. What is the minimum length of the path?

Input

The first line contains two integers: \(N\) (\(3 \leq N \leq 2*10^5\)) - the number of points, and \(K\) (\(1 \leq K \leq N\)) - the index of the starting point.

Each of the next \(N\) lines contain two integers, \(A_i\), \(B_i\) (\(-10^6 \leq A_i, B_i \leq 10^6\)) - coordinates of the \(i-th\) point.

Output

The output contains one number - the shortest path to visit all given points starting from point \(K\). The absolute difference between your solution and the main solution shouldn't exceed \(10^-6\);

Note

The shortest path consists of these moves:

2 -> 5

5 -> 4

4 -> 1

1 -> 3

There isn't any shorter path possible.

C. Репрезентативные края

геометрия математика Перебор реализация *1500

Массив \(a_1, a_2, \ldots, a_n\) называется хорошим, если и только если для любого подотрезка \(1 \leq l \leq r \leq n\), выполняется следующее: \(a_l + a_{l + 1} + \ldots + a_r = \frac{1}{2}(a_l + a_r) \cdot (r - l + 1)\).

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\). За одну операцию вы можете заменить один любой элемент массива на любое вещественное число. Определите минимальное число операций, необходимое, чтобы сделать массив хорошим.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)): количество наборов входных данных.

Далее следуют описания \(t\) наборов входных данных, по две строки на набор.

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 70\)): количество чисел в массиве.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-100 \leq a_i \leq 100\)): изначальный массив.

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное число элементов, которое нужно заменить, чтобы массив стал хорошим.

Примечание

В первом примере массив хороший изначально.

Во втором примере один из возможных хороших массивов — \([1, 1, \underline{1}, \underline{1}]\) (замененные элементы подчеркнуты).

В третьем примере массив хороший изначальное.

Во четвертом примере один из возможных хороших массивов — \([\underline{-2.5}, -2, \underline{-1.5}, -1, \underline{-0.5}, 0]\).

B. Треугольники на прямоугольнике

геометрия жадные алгоритмы математика *1000

На плоскости нарисован прямоугольник с противоположными углами в \((0, 0)\) и \((w, h)\) и сторонами, параллельными осям координат.

Задан список из точек на плоскости таких, что каждая точка лежит на стороне прямоугольника, но не в его углу. Также на каждой стороне прямоугольника лежит не менее двух точек.

Ваша задача — выбрать три точки таким образом, что:

  • ровно две из них лежат на одной и той же стороне прямоугольника;
  • площадь треугольника, построенного на них, максимально возможна.

Выведите удвоенную площадь этого треугольника. Можно показать, что удвоенная площадь треугольника, построенного на точках с целочисленными координатами, всегда целая.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(w\) и \(h\) (\(3 \le w, h \le 10^6\)) — координаты угла прямоугольника.

В следующих двух строках содержится описание точек на горизонтальных сторонах. Сначала целое число \(k\) (\(2 \le k \le 2 \cdot 10^5\)) — количество точек. Затем \(k\) целых чисел \(x_1 < x_2 < \dots < x_k\) (\(0 < x_i < w\)) — \(x\) координаты точек в возрастающем порядке. \(y\) координата в первой строке равна \(0\), а во второй строке — \(h\).

В следующих двух строках содержится описание точек на вертикальных сторонах. Сначала целое число \(k\) (\(2 \le k \le 2 \cdot 10^5\)) — количество точек. Затем \(k\) целых чисел \(y_1 < y_2 < \dots < y_k\) (\(0 < y_i < h\)) — \(y\) координаты точек в возрастающем порядке. \(x\) координата в первой строке равна \(0\), а во второй строке — \(w\).

Суммарное количество точек на всех сторонах во всех наборах входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

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

Примечание

Точки в первом наборе входных данных в примере:

  • \((1, 0)\), \((2, 0)\);
  • \((2, 8)\), \((3, 8)\), \((4, 8)\);
  • \((0, 1)\), \((0, 4)\), \((0, 6)\);
  • \((5, 4)\), \((5, 5)\).

Наибольший треугольник образон точками \((0, 1)\), \((0, 6)\) и \((5, 4)\) — его площадь равна \(\frac{25}{2}\). Поэтому удвоенная площадь равна \(25\). Две точки на одной стороне: \((0, 1)\) и \((0, 6)\).

A. Постройте прямоугольник

геометрия математика *800

Даны три палки с целочисленными длинами \(l_1, l_2\) и \(l_3\).

Требуется сломать ровно одну из них на две части так, чтобы выполнялись следующие условия:

  • у обеих частей положительная (строго больше \(0\)) целочисленная длина;
  • суммарная длина частей равна оригинальной длине палки;
  • возможно собрать прямоугольник из полученных четырех палок такой, что каждая палка используется как ровно одна из его сторон.

Квадрат тоже считается прямоугольником.

Определите, можно ли это сделать.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны три целых числа \(l_1, l_2, l_3\) (\(1 \le l_i \le 10^8\)) — длины палок.

Выходные данные

На каждый набор входных данных выведите «YES», если можно сломать одну из палок на две части с положительными целочисленными длинами так, чтобы можно было собрать прямоугольник из полученных четырех палок. В противном случае выведите «NO».

Вы можете выводить ответ в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных первую палку можно сломать на части длины \(1\) и \(5\). Из них можно собрать прямоугольник с противоположными сторонами \(1\) и \(5\).

Во втором наборе входных данных палку длины \(2\) можно разбить так, что получатся палки длин \(1, 1, 2, 5\), что нельзя сделать прямоугольником. Если сломать палку длины \(5\), то можно получить результаты \(2, 3\) или \(1, 4\), но ни один из них не образует прямоугольник.

В третьем наборе входных данных вторую палку можно разбить на части длины \(2\) и \(2\). Полученный прямоугольник имеет противоположные стороны \(2\) и \(2\) (что является квадратом).

В четвертом наборе входных данных третью палку можно разбить на части длины \(2\) и \(2\). Полученный прямоугольник имеет противоположные стороны \(2\) и \(5\).

F. Не разрезать

геометрия графы жадные алгоритмы кратчайшие пути реализация *2700

У вас есть квадрат \(k \times k\), причем \(k\) четно. Клетка в строке \(r\) и столбце \(c\) обозначается \((r,c)\). Две клетки \((r_1, c_1)\) и \((r_2, c_2)\) называются соседними, если \(\lvert r_1 - r_2 \rvert + \lvert c_1 - c_2 \rvert = 1\).

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

Рисунок выше демонстрирует первый пример. Стрелки показывают пары клеток, а жирная линия показывает разрез на две части.

Вам дан массив \(a\) из \(n\) пар соседних клеток. Найдите размер наибольшей прочной подпоследовательности \(a\). Массив \(p\) является подпоследовательностью \(q\), если \(p\) может быть получен из \(q\) удалением нескольких (возможно, ни одного или всех) элементов.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^5\); \(2 \leq k \leq 500\), \(k\) четно) — размер \(a\) и размер квадрата, соответственно.

Далее следуют \(n\) строк. \(i\)-я из этих строк содержит четыре целых числа \(r_{i,1}\), \(c_{i,1}\), \(r_{i,2}\) и \(c_{i,2}\) (\(1 \leq r_{i,1}, c_{i,1}, r_{i,2}, c_{i,2} \leq k\)) — \(i\)-й элемент \(a\), где \((r_{i,1}, c_{i,1})\) — строка и столбец первой клетки, а \((r_{i,2}, c_{i,2})\) — строка и столбец второй. Эти квадраты соседние.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\), и что сумма значений \(k\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — размер наибольшей прочной подподпоследовательности \(a\).

Примечание

В первом примере \(a\) не является прочным, но подпоследовательность \([a_1, a_2, a_3, a_4, a_5, a_6, a_8]\) является, т. к. квадрат может быть разрезан способом, показанным в условии.

Во втором примере подпоследовательность из четырех последних элементов \(a\) является прочным, т. к. квадрат можно разрезать с помощью горизонтальной прямой через центр.

F. Управление кризисом космических кораблей

Бинарный поиск геометрия сортировки Структуры данных *3500

NASA (Норвежская ассоциация астронавтов) разрабатывает новую систему управления космических кораблей. Но в нынешнем состоянии было бы небезопасно, если бы космический корабль оказался в кучке космического мусора. Чтобы система рулевого управления была безопасной, им необходимо ответить на следующее:

Для целевой позиции \(t = (0, 0)\), набора из \(n\) кусков космического мусора \(l\), описанного отрезками \(l_i = ((a_{ix}, a_{iy}), (b_{ix}, b_{iy}))\) и начальной позиции \(s = (s_x, s_y)\), определите существует ли такое направление, что плавание в этом направлении из начальной позиции приведет к целевой позиции.

Когда космический корабль сталкивается с куском космического мусора, то, что происходит дальше, зависит от абсолютной разницы углов между направлением плавания и отрезком космического мусора, \(\theta\):

  • Если \(\theta < 45^{\circ}\), то космический корабль скользит по куску космического мусора в направлении, минимизирующем изменение угла, а когда космический корабль оказывается на краю космического мусора, он продолжает двигаться в том же направлении как и до столкновения.
  • Если \(\theta \ge 45^{\circ}\), то космический корабль останавливается, потому что трение слишком велико, чтобы скользить по космическому мусору.

Вам дается набор кусочков космического мусора только один раз, целевая позиция всегда \((0, 0)\), но есть \(q\) запросов, каждый с начальной позицией \(s_j = (s_{jx}, s_{jy})\).

Ответьте на приведенный выше вопрос для каждого запроса.

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 1500\)).

Далее следует \(n\) строк, в \(i\)-й из которых содержатся \(4\) целых числа \(a_{ix}\), \(a_{iy}\), \(b_{ix}\) и \(b_{iy}\) (\(|a_{ix}|, |a_{iy}|, |b_{ix}|, |b_{iy}| \le 1000\)).

Затем следует строка, содержащая целое число \(q\) (\(1 \le q \le 1000\)).

Далее следует \(q\) строк, \(j\)-я из которых содержит \(2\) целых числа \(s_{jx}\) и \(s_{jy}\) (\(|s_{jx}|, |s_{jy}| \le 1000\)).

Гарантируется, что ни одна пара отрезков в наборе \(l\) не пересекается и не соприкасается, \(t\) не находится ни на одном отрезке из \(l\), \(s_j\) не находится ни на одном отрезке из \(l\) и \(s \neq t\).

Выходные данные

На каждый запрос \(s_j\) выведите ответ. Если существует такое направление, что плавание от \(s_j\) в этом направлении, возможно, скользя по некоторым частям космического мусора, приводит к \(t\), выведите «YES». В противном случае выведите «NO» (без учета регистра).

Примечание

Синий крест представляет собой целевое местоположение, а другие отрезки синей линии представляют космический мусор.

Зеленые точки обозначают начальные местоположения, где ответ положительный, а красные точки обозначают начальные местоположения, где ответ отрицательный.

Желтые линии — это возможные пути к целевому местоположению для запросов \(3\) и \(14\).

Черная линия — это возможный путь от начального местоположения в запросе \(6\), но он немного не попадает в целевое местоположение.

F. Накрывающая окружность

геометрия *3500

Стас начал играть с круглыми ведерками в песочнице, раскидывая камешки, и его мама решила купить ему новое ведерко, а для этого ей надо решить следующую задачу:

Вам дано \(n\) различных точек с целочисленными координатами \(A_1, A_2, \ldots, A_n\). Все точки были сгенерированы из квадрата \([-10^8, 10^8] \times [-10^8, 10^8]\) равновероятно и независимо друг от друга.

Вам даны положительные целые числа \(k\), \(l\) такие, что \(k \leq l \leq n\). Вы хотите выбрать подотрезок \(A_i, A_{i+1}, \ldots, A_{i+l-1}\) массива точек (для некоторого \(1 \leq i \leq n + 1 - l\)), а затем окружность на плоскости, внутри или на границе которой лежит \(\geq k\) точек выбранного подотрезка.

Какой минимальный радиус может быть у такой окружности?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке описания каждого набора входных данных находится три целых числа \(n\), \(l\), \(k\) (\(2 \leq k \leq l \leq n \leq 50\,000\), \(k \leq 20\)).

В каждой из следующих \(n\) строк написано два целых числа \(x_i\), \(y_i\) (\(-10^8 \leq x_i, y_i \leq 10^8\)) — координаты точки \(A_i\). Гарантируется, что все точки различны и были сгенерированы из квадрата \([-10^8, 10^8] \times [-10^8, 10^8]\) равновероятно и независимо друг от друга.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(50\,000\).

В первом тесте точки не были сгенерированы из равномерного распределения в квадрате \([-10^8, 10^8] \times [-10^8, 10^8]\) для простоты. Это единственный такой тест и ваша программа должна его проходить.

Взломы в задаче запрещены.

Выходные данные

Для каждого набора входных данных выведите единственное вещественное число — ответ на задачу.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-9}\). Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-9}\).

Примечание

В первом наборе входных данных мы можем выбрать подотрезок \(A_1, A_2\) и окружность с центром \((0, 2)\) и радиусом \(2\).

Во втором наборе входных данных мы можем выбрать подотрезок \(A_1, A_2, A_3, A_4\) и окружность с центром \((1, 2)\) и радиусом \(1\).

A. Сложный путь

геометрия *800

Стас живет в селе Аусомбург, административный центр которого представляет из себя треугольник. Для этого треугольника выполняется следующее:

  • его вершины находятся в целочисленных координатах,
  • координаты его вершин неотрицательные,
  • его вершины не лежат на одной прямой.

Стас называет точку на границе административного центра (то есть на границе треугольника) безопасной, если он может добраться до нее по прямой от хотя бы одной точки прямой \(y = 0\), не пересекая внутренность административного центра.

На рисунке серым цветом изображен административный центр. Первый путь не является корректным, потому что он идет не по прямой. Второй путь не является корректным, потому что он пересекает внутренность административного центра. Третий и четвертый пути являются корректными.

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

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Описание каждого набора входных данных состоит из трех строк, в каждой из них находится два целых числа \(x_i\), \(y_i\) (\(0 \le x_i, y_i \le 10^9\)) — координаты вершин административного центра.

Выходные данные

Для каждого набора входных данных выведите единственное вещественное число — ответ на задачу.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-9}\). Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-9}\).

Примечание

На рисунке изображены треугольники административных центров для первых трех наборов входных данных. Треугольники пронумерованы в соответствии с тем, к какому набору входных данных они относятся.

В первых двух наборах входных данных все точки на границах административных центрах являются безопасными, поэтому ответ \(0\).

На рисунке ниже черным цветом отмечены небезопасные точки границы административного центра в третьем наборе входных данных:

В четвертом наборе входных данных также все точки границы административного центра являются безопасными.

A. Странная сумма

геометрия Комбинаторика математика матрицы сортировки Структуры данных *1400

У Егора есть табличка \(n \times m\), где строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы с \(1\) до \(m\) слева направо. Каждая клетка таблички покрашена в некоторый цвет, где цвета пронумерованы целыми числами от \(1\) до \(10^5\).

Будем обозначать клетку, которая находится на пересечении \(r\)-й строки и \(c\)-го столбца, как \((r, c)\). Определим манхэттенское расстояние между клетками \((r_1, c_1)\) и \((r_2, c_2)\) как длину кратчайшего пути между этими клетками, в котором любые две соседние клетки имеют общую сторону. Например, в таблице \(3 \times 4\) манхэттенское расстояние между клетками \((1, 2)\) и \((3, 3)\) равно \(3\), и один из кратчайших путей имеет вид \((1, 2) \to (2, 2) \to (2, 3) \to (3, 3)\). Обратите внимание, что путь может проходить по клеткам любого цвета.

У Егора возникло желание посчитать сумму манхэттенских расстояний по всем парам клеток одного цвета. Помогите Егору — вычислите эту сумму.

Входные данные

Первая строка входного файла содержит два целых числа \(n\) и \(m\) (\(1 \leq n \le m\), \(n \cdot m \leq 100\,000\)) — число строк и столбцов таблички.

Следующие \(n\) строк описывают соответствующие строки таблицы. \(i\)-я строка содержит \(m\) чисел \(c_{i1}, c_{i2}, \ldots, c_{im}\) (\(1 \le c_{ij} \le 100\,000\)) — цвета клеток в \(i\)-м ряду таблицы.

Выходные данные

Выведите одно число — искомую сумму.

Примечание

В первом примере есть три пары клеток с одинаковым цветом: в координатах \((1, 1)\) и \((2, 3)\), в координатах \((1, 2)\) и \((2, 2)\), в координатах \((1, 3)\) и \((2, 1)\). Соответствующие манхеттенские расстояния равны \(3\), \(1\) и \(3\), их сумма равна \(7\).

B. Многоугольники

геометрия сортировки *2100

Перед Вами очередная геометрическая задача. Вам заданы два невырожденных многоугольника A и B координатами своих вершин. Многоугольник A является строго выпуклым. Многоугольник B является произвольным многоугольником без самопересечений и самокасаний. Вершины обоих многоугольников заданы в порядке обхода по часовой стрелке. Для каждого многоугольника никакие три подряд идущие вершины не находятся на одной прямой.

В задаче от Вас требуется проверить, находится ли многоугольник B строго внутри многоугольника A. Это означает, что любая точка многоугольника B должна находиться строго внутри многоугольника A. «Строго» означает, что точка многоугольника B не может находиться на стороне многоугольника A.

Входные данные

В первой строке записано единственное целое число n (3 ≤ n ≤ 105) — количество вершин многоугольника A. Далее в n строках записаны пары целых чисел xi, yi (|xi|, |yi| ≤ 109) — координаты i-ой вершины многоугольника A. Вершины заданы в порядке обхода по часовой стрелке.

В следующей строке записано единственное целое число m (3 ≤ m ≤ 2·104) — количество вершин многоугольника B. Далее в m строках записаны пары целых чисел xj, yj (|xj|, |yj| ≤ 109) — координаты j-ой вершины многоугольника B. Вершины заданы в порядке обхода по часовой стрелке.

Координаты вершин многоугольников в строках разделены единственным пробелом. Гарантируется, что многоугольники A и B являются невырожденными, что многоугольник A является строго выпуклым, что многоугольник B не имеет самопересечений и самокасаний, а также, что никакие три последовательные точки каждого многоугольника не лежат на одной прямой.

Выходные данные

В единственной строке выведете ответ на задачу — если многоугольник B строго внутри многоугольника A, выведите «YES», в противном случае выведите «NO» (без кавычек).

K. Pandemic Restrictions

геометрия Тернарный поиск

After a long time living abroad, you have decided to move back to Italy and have to find a place to live, but things are not so easy due to the ongoing global pandemic.

Your three friends Fabio, Flavio and Francesco live at the points with coordinates \((x_1, y_1), (x_2, y_2)\) and \((x_3, y_3)\), respectively. Due to the mobility restrictions in response to the pandemic, meetings are limited to \(3\) persons, so you will only be able to meet \(2\) of your friends at a time. Moreover, in order to contain the spread of the infection, the authorities have imposed the following additional measure: for each meeting, the sum of the lengths travelled by each of the attendees from their residence place to the place of the meeting must not exceed \(r\).

What is the minimum value of \(r\) (which can be any nonnegative real number) for which there exists a place of residence that allows you to hold the three possible meetings involving you and two of your friends? Note that the chosen place of residence need not have integer coordinates.

Input

The first line contains the two integers \(x_1, y_1\) (\(-10^4 \le x_1, y_1 \le 10^4\)) — the coordinates of the house of your friend Fabio.

The second line contains the two integers \(x_2, y_2\) (\(-10^4 \le x_2, y_2 \le 10^4\)) — the coordinates of the house of your friend Flavio.

The third line contains the two integers \(x_3, y_3\) (\(-10^4 \le x_3, y_3 \le 10^4\)) — the coordinates of the house of your friend Francesco.

It is guaranteed that your three friends live in different places (i.e., the three points \((x_1, y_1)\), \((x_2, y_2)\), \((x_3, y_3)\) are guaranteed to be distinct).

Output

Print the minimum value of \(r\) which allows you to find a residence place satisfying the above conditions. Your answer is considered correct if its absolute or relative error does not exceed \(10^{-4}\).

Formally, let your answer be \(a\), and the jury's answer be \(b\). Your answer is accepted if and only if \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-4}\).

Note

In the first sample, Fabio, Flavio and Francesco live at the points with coordinates \((0,0)\), \((5,0)\) and \((3,3)\) respectively. The optimal place of residence, represented by a green house in the picture below, is at the point with coordinates \((2.3842..., 0.4151...)\).

For instance, it is possible for you to meet Flavio and Francesco at the point depicted below, so that the sum of the lengths travelled by the three attendees is at most (and in fact equal to) \(r=5.0686...\).

In the second sample, any point on the segment \(\{(x,0):\ -1 \leq x \leq 1 \}\) is an optimal place of residence.

D. Очень подозрительно

Бинарный поиск геометрия жадные алгоритмы математика Перебор реализация *1700

Хоссам и его друзья владеют плоскостью, разбитой бесконечной сеткой на правильные шестиугольники, как показано на рисунке ниже. Им нравятся равносторонние треугольники, поэтому они хотят создать на плоскости \(n\) равносторонних треугольников, добавив несколько прямых. Считаться будут только треугольники, внутри которых ничего нет (то есть внутри которых не проходит ни одна прямая и ни одна сторона шестиугольника).

Вы можете добавлять прямые, параллельные сторонам шестиугольников. Вам дано число \(n\), какое минимальное число прямых нужно добавить, чтобы создать хотя бы \(n\) равносторонних треугольников?

Добавление двух красных прямых создает два желтых треугольника.
Входные данные

Первая строка содержит одно цело число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одного целого числа \(n\) (\(1 \le n \le 10^{9}\)) — требуемого количества треугольников.

Выходные данные

Для каждого набора выведите минимальное количество прямых, необходимое для создания \(n\) или больше равносторонних треугольников.

Примечание

В первом и втором примере нужны две прямые. После добавления первой не будет ни одного трекгольника независимо от места создания. После добавления второй можно одновременно создать два треугольника.

В третьем наборе входных данных нужно минимум три прямых, как показано ниже.

D. Лена и матрица

геометрия дп кратчайшие пути Структуры данных *1900

Лена — красивая девушка, которая любит логические головоломки.

В подарок на день рождения Лена получила матрицу-головоломку!

Матрица состоит из \(n\) строк и \(m\) столбцов, и каждая ячейка либо черная, либо белая. Координаты \((i,j)\) обозначает ячейку, которая находится в \(i\)-й строке и \(j\)-м столбце для любых \(1\leq i \leq n\) и \(1\leq j \leq m\). Чтобы решить головоломку, Лена должна выбрать какую-то ячейку так, чтобы минимизировать манхэттенское расстояние от этой ячейки до самой дальней от нее черной клетки.

Более формально, пусть в матрице \(k \ge 1\) черных ячеек с координатами \((x_i,y_i)\) для каждого \(1\leq i \leq k\). Лене нужно так выбрать ячейку \((a,b)\), чтобы минимизировать \(\)\max_{i=1}^{k}(|a-x_i|+|b-y_i|).\(\)

Поскольку у Лены нет нужных навыков, она попросила вас о помощи. Скажите ей оптимальную клетку, которую нужно выбрать.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано два целых числа \(n\) и \(m\) (\(2\leq n,m \leq 1000\))  — размеры матрицы.

Следующие \(n\) строк содержат по \(m\) символов, каждый символ это «W» или «B». \(j\)-й символ в \(i\)-й строке равен «W», если ячейка \((i,j)\) белая, и «B», если ячейка \((i,j)\) черная.

Гарантируется, что в матрице есть как минимум одна черная клетка.

Также гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите оптимальную ячейку \((a,b)\). Если существует несколько оптимальных ответов, выведите любой.

Примечание

В первом наборе входных данных две черные клетки имеют координаты \((1,1)\) и \((3,2)\). Четыре оптимальные ячейки: \((1,2)\), \((2,1)\), \((2,2)\) и \((3,1)\). Можно показать, что никакая другая ячейка не минимизирует максимальное манхэттенское расстояние до самой дальней черной клетки.

Во втором наборе входных данных оптимально выбрать черную клетку \((2,2)\) с максимальным манхэттенским расстоянием \(2\).

G. Fishingprince снова играет с массивом

геометрия математика Перебор Структуры данных *3300

Пусть дана последовательность неотрицательных целых чисел \(a\) длины \(n\) в 1-индексации. Также даны два целых числа \(x\), \(y\). В течение отрезка времени в \(t\) секунд (\(t\) может быть любым положительным вещественным числом) можно выполнить одну из следующих операций:

  • Выбрать \(1\le i<n\), уменьшить \(a_i\) на \(x\cdot t\) и уменьшить \(a_{i+1}\) на \(y\cdot t\).
  • Выбрать \(1\le i<n\), уменьшить \(a_i\) на \(y\cdot t\) и уменьшить \(a_{i+1}\) by \(x\cdot t\).

Определим \(f(a)\) как минимальное количество времени (может быть вещественным числом), необходимое для того, чтобы сделать все элементы последовательности неположительными (меньше или равными \(0\)).

Например, если \(x=1\), \(y=2\), то массив \([3,1,1,3]\) можно обработать за \(3\) секунды. Для этого нужно:

  • В течение первых \(1.5\) секунд выполнять вторую операцию с параметром \(i=1\).
  • В течение оставшихся \(1.5\) секунд выполнять первую операцию с параметром \(i=3\).

Можно доказать, что в этом случае невозможно сделать все элементы меньше или равными \(0\) меньше чем за \(3\) секунды, поэтому \(f([3,1,1,3])=3\).

Вам дана последовательность положительных целых чисел \(b\) длины \(n\) в 1-индексации. Также даны положительные целые числа \(x\), \(y\). Обработайте \(q\) запросов следующих двух типов:

  • 1 k v: изменить значение \(b_k\) на \(v\).
  • 2 l r: вывести \(f([b_l,b_{l+1},\dots,b_r])\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2\le n\le 2\cdot 10^5\), \(1\le q\le 2\cdot 10^5\)).

Вторая строка содержит два целых числа \(x\) и \(y\) (\(1\le x,y\le 10^6\)).

Третья строка содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(1\le b_i\le 10^6\)).

Далее следует \(q\) строк. Каждая из этих \(q\) строк содержит по три целых числа. Первое число \(op\) равно \(1\) или \(2\).

  • Если оно равно \(1\), далее следуют два целых числа \(k\) и \(v\) (\(1\le k\le n\), \(1\le v\le 10^6\)). Такой запрос означает, что нужно изменить значение \(b_k\) на \(v\).
  • Если оно равно \(2\), далее следуют два целых числа \(l\) и \(r\) (\(1\le l<r\le n\)). Такой запрос означает, что нужно вывести значение \(f([b_l,b_{l+1},\dots,b_r])\).
Выходные данные

Для каждого запроса типа \(2\) выведите одно вещественное число — ответ на этот запрос. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-9}\).

Примечание

Разберём тестовый пример.

В первом запросе требуется вычислить \(f([3,1,1,4])\). Ответ равен \(3.5\). Одной из оптимальных последовательностей операций является следующая:

  • В течение первых \(1.5\) секунд выполнять вторую операцию с параметром \(i=1\).
  • В течение оставшихся \(2\) секунд выполнять первую операцию с параметром \(i=3\).

В третьем запросе требуется вычислить \(f([1,1,1])\). Ответ равен \(1\). Одной из оптимальных последовательностей операций является следующая:

  • В течение первых \(0.5\) секунд выполнять вторую операцию с параметром \(i=1\).
  • В течение оставшихся \(0.5\) секунд выполнять первую операцию с параметром \(i=2\).

E. Раскраска

геометрия графы дп жадные алгоритмы Комбинаторика Конструктив математика Перебор реализация *2400

Заданы \(n\) точек на плоскости, координаты \(i\)-й из них — \((x_i, y_i)\). Ни у каких двух точек не совпадают координаты.

Расстояние между точками \(i\) и \(j\) определено как \(d(i,j) = |x_i - x_j| + |y_i - y_j|\).

Для каждой точки необходимо выбрать цвет — целое число от \(1\) до \(n\). Для каждой упорядоченной тройки различных точек \((a,b,c)\) должны выполняться следующие условия:

  • если \(a\), \(b\) и \(c\) покрашены в одинаковый цвет, то \(d(a,b) = d(a,c) = d(b,c)\);
  • если \(a\) и \(b\) покрашены в одинаковый цвет, а цвет \(c\) отличен от цвета \(a\), то \(d(a,b) < d(a,c)\) и \(d(a,b) < d(b,c)\).

Посчитайте количество различных способов выбрать цвета, чтобы удовлетворить данные условия.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 100\)) — количество точек.

Затем следуют \(n\) строк. В \(i\)-й из них записаны два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i, y_i \le 10^8\)).

Ни у каких двух точек не совпадают координаты (т. ею если \(i \ne j\), то либо \(x_i \ne x_j\), либо \(y_i \ne y_j\)).

Выходные данные

Выведите одно целое число — количество различных способов выбрать цвета точек. Так как оно может быть довольно велико, выведите его остаток от деления на \(998244353\).

Примечание

В первом тесте подходят следующие способы выбрать цвета:

  • \([1, 1, 1]\);
  • \([2, 2, 2]\);
  • \([3, 3, 3]\);
  • \([1, 2, 3]\);
  • \([1, 3, 2]\);
  • \([2, 1, 3]\);
  • \([2, 3, 1]\);
  • \([3, 1, 2]\);
  • \([3, 2, 1]\).

B. Дождь

Бинарный поиск геометрия жадные алгоритмы математика Перебор реализация Структуры данных *2100

Вы владеете полем, который можно представить как бесконечную числовую прямую, все позиции на которой отмечены целыми числами.

В следующие \(n\) дней будет идти дождь. В \(i\)-й день центр дождя будет располагаться в точке \(x_i\), а интенсивность дождя будет равна \(p_i\). Из-за дождей будет собираться дождевая вода; пусть \(a_j\) будет обозначать объем воды, накопившийся в точке \(j\). Изначально \(a_j\) равно \(0\), после дождя в \(i\)-й день это значение увеличится на \(\max(0,p_i-|x_i-j|)\).

Поле затопит, если в некоторый момент будет существовать точка \(j\), в которой накопится \(a_j>m\) воды.

Вы можете использовать заклинание и отменить дождь в ровно один из дней, т. е. установить \(p_i=0\). Для каждого \(i\) от \(1\) до \(n\) определите, если вы отмените дождь в \(i\)-й день, верно ли, что затопления не случится?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq m \leq 10^9\)) — количество дней и максимальный объем воды, который может находиться в одной точке, не вызывая затопления.

Далее следуют \(n\) строк. \(i\)-я из этих строк содержит два целых числа \(x_i\) и \(p_i\) (\(1 \leq x_i,p_i \leq 10^9\)) — положение центра и интенсивность дождя в \(i\)-й день.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку \(s\) длины \(n\). \(i\)-й символ строки \(s\) должен быть равен 1, если в случае отмены дождя в \(i\)-й день затопления не случится, и 0, если в случае отмены дождя в \(i\)-й день затопление произойдет.

Примечание

В первом наборе входных данных, если не использовать заклинание, собравшаяся вода будет выглядеть следующим образом:

Если отменить дождь в третий день, затопление будет предотвращено, и собравшаяся вода будет выглядеть следующим образом:

Во втором примере изначально нет затопления, поэтому можно отменить дождь в любой день.

В третьем примере нет способа избежать затопления.

A. Задача коммивояжера

геометрия жадные алгоритмы реализация *800

Вы живете на бесконечной плоскости с введенными декартовыми координатами. За один шаг вы можете пойти в одну из четырех соседних точек (налево, направо, наверх или вниз).

Более формально, если вы стоите в точке \((x, y)\), вы можете:

  • пойти налево и переместиться в точку \((x - 1, y)\), или
  • пойти направо и переместиться в точку \((x + 1, y)\), или
  • пойти наверх и переместиться в точку \((x, y + 1)\), или
  • пойти вниз и переместиться в точку \((x, y - 1)\).

На плоскости расположены \(n\) коробок. \(i\)-я из этих коробок находится в точке с координатами \((x_i,y_i)\). Гарантируется, что коробки находятся либо на оси \(x\), либо на оси \(y\), то есть \(x_i=0\), или \(y_i=0\).

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

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Вторая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество коробок.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-100 \le x_i, y_i \le 100\)) — координаты \(i\)-й коробки. Гарантируется, что или \(x_i=0\), или \(y_i=0\).

Обратите внимание, что сумма значений \(n\) по всем наборам входных данных не ограничена.

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное необходимое число шагов.

Примечание

В первом примере одна из оптимальных последовательностей шагов показана ниже.

\(\)(0,0) \to (1,0) \to (1,1) \to (1, 2) \to (0,2) \to (-1,2) \to (-1,1) \to (-1,0) \to (-1,-1) \to (-1,-2) \to (0,-2) \to (0,-1) \to (0,0)\(\)

Во втором примере одна из оптимальных последовательностей шагов показана на рисунке ниже.

\(\)(0,0) \to (0,1) \to (0,2) \to (-1, 2) \to (-2,2) \to (-3,2) \to (-3,1) \to (-3,0) \to (-3,-1) \to (-2,-1) \to (-1,-1) \to (0,-1) \to (0,0)\(\)

В третьем примере можно собрать все коробки не делая шагов.

E. Долгий путь домой

геометрия графы дп жадные алгоритмы кратчайшие пути разделяй и властвуй Структуры данных *2400

Олеся решила отправиться в путешествие по стране, состоящей из \(n\) городов (она живет в городе \(1\)). Между некоторыми городами страны есть двусторонние дороги. Для каждой дороги известно время, необходимое для того, чтобы по ней проехать. Также между каждой парой городов есть авиарейс, перелет из города \(u\) в город \(v\) занимает \((u - v)^2\) времени.

Олеся недавно посмотрела «Чудо на Гудзоне» и несколько боится летать, поэтому она может воспользоваться не более чем \(k\) перелетами. Олеся хочет узнать минимальное время путешествия в каждый из \(n\) городов страны из города \(1\).

Входные данные

В первой строке находятся числа \(n\), \(m\) и \(k\) (\(2 \leq n \leq 10^{5}\), \(1 \leq m \leq 10^{5}\), \(1 \leq k \leq 20\)) — количество городов, дорог и максимальное количество перелётов, которое может совершить Олеся.

Следующие \(m\) строк описывают дороги. В каждой находятся числа \(u\), \(v\), \(w\) (\(1 \leq u, v \leq n\), \(u \neq v\), \(1 \leq w \leq 10^{9}\)) — города, которые соединяет дорога, и время, необходимое, чтобы по ней проехать. Некоторые пары городов могут быть соединены более чем одной парой дорог.

Выходные данные

Выведите \(n\) чисел, \(i\)-е из которых равно минимальному времени путешествия в город \(i\).

Примечание

В первом примере время путешествия до города 1 равно 0; чтобы добраться в город 2, можно воспользоваться авиаперелетом из 1 в 2 за 1 единицу времени; в город 3 можно добраться из города 1 по дороге за 1 единицу времени.

Во втором примере время путешествия до города 1 равно 0. Чтобы добраться в город 2, можно воспользоваться авиаперелетом из 1 в 2, занимающим 1 единицу времени. Чтобы добраться в город 3 за 4 единицы времени, можно проехать из города 1 в город 2 по дороге за 3 единицы времени, а потом воспользоваться авиаперелетом из 2 в 3. Чтобы добраться в город 4, можно воспользоваться авиаперелетом из города 1 в город 2, а потом проехать из города 2 в город 4 по дороге за 5 единиц времени.

F. Квадраты на полях

геометрия интерактив Конструктив математика *2700

Это интерактивная задача.

Фермер Сережа выращивает кукурузу на прямоугольном поле \( n \times m \) метров c углами в точках с координатами \((0, 0)\), \((0, m)\), \((n, 0)\), \((n, m)\). В этом году урожай был обилен и кукуруза покрыла все поле.

Но в ночь перед сбором урожая прилетели инопланетяне и отравили кукурузу на поле в одном квадрате \(1 \times 1\) метр со сторонами, параллельными границам поля. Кукурузу, попавшую внутрь квадрата, ни в коем случае нельзя есть, но отличить ее от обычной невооруженным взглядом невозможно. Можно только собрать пробу кукурузы с любого многоугольника и отдать в лабораторию, где ее проанализируют и скажут, сколько кукурузы было отравлено. Так как урожай скоро испортится, можно провести такое исследование не более \(5\) раз.

Более формально, разрешено сделать не более \(5\) запросов, каждым из которых можно узнать площадь пересечения любого выбранного многоугольника с инопланетянами квадратом. Необходимо узнать координаты левого нижнего угла квадрата отравленной кукурузы (вершину квадрата с наименьшими \(x\) и \(y\) координатами).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100\)) — размеры поля.

Протокол взаимодействия

Для того, чтобы узнать площадь пересечения многоугольника с \(k\) (\(3 \le k \le 1000\)) вершинами в точках с координатами \((x_1, y_1),\; \dots ,\;(x_k, y_k)\) с квадратом отравленной кукурузы выведите \(k+1\) строку. В первой из этих строк выведите «? k». В \(i\)-й из следующих \(k\) строк выведите два вещественных числа \(x_i\) и \(y_i\) (\(|x_i|, |y_i| \le 10^4\)) с не более \(15\) знаками после запятой.

Многоугольник должен иметь строго положительную площадь и не иметь самопересечений.

В ответ на данный запрос вы получите действительное число \(s\) (\(0 \le s \le 1\)) с \(15\) знаками после запятой — площадь пересечения квадрата с заданным многоугольником. Если многоугольник некорректен, корректный ответ не гарантируется.

Когда вы определили отравленный квадрат, выведите в отдельной строке «! x y», где \(x\) и \(y\) — вещественные числа с не более \(15\) знаками после запятой, описывающие координаты его левого нижнего угла (\(0 \le x \le n - 1\), \(0 \le y \le m - 1\)) , и после этого ваша программа должна немедленно завершиться.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка по обеим координатам не превосходит \(10^{-6}\). Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(\frac{|a-b|}{max(1,|b|)} \le 10^{-6}\).

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт «Решение зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в С++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взлома задачи используйте следующий формат теста.

В первой строке входных данных должны содержаться два целых числа \(n\) и \(m\) (\(1 \le n,m \le 100\)) — размеры поля.

Во второй строке должны содержаться два вещественных числа \(x\) и \(y\) (\(0 \le x \le n - 1\), \(0 \le y \le m - 1\)) — координаты левого нижнего угла отравленного квадрата.

Примечание

В первом тесте из условия инопланетяне отравили квадрат с вершинами в точках с координатами \((1.5, 0.5)\), \((1.5, 1.5)\), \((2.5, 1.5)\), \((2.5, 0.5)\). На картинке он отмечен красным цветом, многоугольник, выбранный в запросе — синим, а их пересечение — зелёным.

Картинка к первому запросу:

Картинка ко второму запросу:

C. Circular Mirror

Бинарный поиск геометрия Комбинаторика математика *2000

Pak Chanek has a mirror in the shape of a circle. There are \(N\) lamps on the circumference numbered from \(1\) to \(N\) in clockwise order. The length of the arc from lamp \(i\) to lamp \(i+1\) is \(D_i\) for \(1 \leq i \leq N-1\). Meanwhile, the length of the arc between lamp \(N\) and lamp \(1\) is \(D_N\).

Pak Chanek wants to colour the lamps with \(M\) different colours. Each lamp can be coloured with one of the \(M\) colours. However, there cannot be three different lamps such that the colours of the three lamps are the same and the triangle made by considering the three lamps as vertices is a right triangle (triangle with one of its angles being exactly \(90\) degrees).

The following are examples of lamp colouring configurations on the circular mirror.

Figure 1. an example of an incorrect colouring because lamps \(1\), \(2\), and \(3\) form a right triangleFigure 2. an example of a correct colouringFigure 3. an example of a correct colouring

Before colouring the lamps, Pak Chanek wants to know the number of distinct colouring configurations he can make. Count the number of distinct possible lamp colouring configurations, modulo \(998\,244\,353\).

Input

The first line contains two integers \(N\) and \(M\) (\(1 \le N \le 3 \cdot 10^5\), \(2 \le M \le 3 \cdot 10^5\)) — the number of lamps in the mirror and the number of different colours used.

The second line contains \(N\) integers \(D_1, D_2, \ldots, D_N\) (\(1 \le D_i \le 10^9\)) — the lengths of the arcs between the lamps in the mirror.

Output

An integer representing the number of possible lamp colouring configurations, modulo \(998\,244\,353\).

Note

In the first example, all correct lamp colouring configurations are \([1, 1, 2, 1]\), \([1, 1, 2, 2]\), \([1, 2, 1, 2]\), \([1, 2, 2, 1]\), \([1, 2, 2, 2]\), \([2, 1, 1, 1]\), \([2, 1, 1, 2]\), \([2, 1, 2, 1]\), \([2, 2, 1, 1]\), and \([2, 2, 1, 2]\).

G. Garage

Бинарный поиск геометрия математика *1500

Pak Chanek plans to build a garage. He wants the garage to consist of a square and a right triangle that are arranged like the following illustration.

Define \(a\) and \(b\) as the lengths of two of the sides in the right triangle as shown in the illustration. An integer \(x\) is suitable if and only if we can construct a garage with assigning positive integer values for the lengths \(a\) and \(b\) (\(a<b\)) so that the area of the square at the bottom is exactly \(x\). As a good friend of Pak Chanek, you are asked to help him find the \(N\)-th smallest suitable number.

Input

The only line contains a single integer \(N\) (\(1 \leq N \leq 10^9\)).

Output

An integer that represents the \(N\)-th smallest suitable number.

Note

The \(3\)-rd smallest suitable number is \(7\). A square area of \(7\) can be obtained by assigning \(a=3\) and \(b=4\).

H. Mainak и кровоточащий многоугольник

Бинарный поиск геометрия математика реализация *3500

У Mainak есть выпуклый многоугольник \(\mathcal P\) с \(n\) вершинами, пронумерованными как \(A_1, A_2, \ldots, A_n\) против часовой стрелки. Координаты \(i\)-й точки \(A_i\) даны как \((x_i, y_i)\), где \(x_i\) и \(y_i\) являются целыми числами.

Кроме того, известно, что внутренний угол при \(A_i\) является либо прямым углом, либо правильным тупым углом. Формально, известно, что:

  • \(90 ^ \circ \le \angle A_{i - 1}A_{i}A_{i + 1} < 180 ^ \circ\), \(\forall i \in \{1, 2, \ldots, n\}\), где мы условно считаем \(A_0 = A_n\) и \(A_{n + 1} = A_1\).

Друг Mainak настаивал на том, чтобы все точки \(Q\) такие, что существует хорда многоугольника \(\mathcal P\), проходящая через \(Q\), длины не больше \(1\), должны быть покрашены в \(\color{red}{\text{красный}}\).

Mainak хочет, чтобы вы нашли площадь цветной области, образованной \(\color{red}{\text{красными}}\) точками.

Формально, определите площадь области \(\mathcal S = \{Q \in \mathcal{P}\) | \(Q \text{ покрашено в } \color{red}{\text{красный}}\}\).

Напомним, что хордой многоугольника называется отрезок между двумя точками, лежащими на границе (т.е. вершинами или точками на сторонах) многоугольника.

Входные данные

Первая строка содержит целое число \(n\) (\(4 \le n \le 5000\)) — количество вершин многоугольника \(\mathcal P\).

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)) — координаты точки \(A_i\).

Гарантируется, что вершины образуют выпуклый многоугольник и перечислены в порядке против часовой стрелки. Также гарантируется, что все внутренние углы лежат в полуинтервале \([90 ^ \circ; 180 ^ \circ)\).

Выходные данные

Выведите площадь многоугольника, покрашенную в \(\color{red}{\text{красный}}\).

Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит \(10^{-4}\).

Формально, пусть ваш ответ равен \(a\), и ответ жюри равен \(b\). Ваш ответ будет принят тогда и только тогда, когда \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-4}\).

Примечание

В первом примере многоугольник \(\mathcal P\) можно представить на декартовой плоскости как:

B. Собрание на прямой

Бинарный поиск геометрия жадные алгоритмы математика реализация Тернарный поиск *1600

\(n\) людей живут на координатной прямой, \(i\)-й человек живет в точке \(x_i\) (\(1 \le i \le n\)). Они хотят выбрать точку \(x_0\) для встречи. \(i\)-й человек потратит \(|x_i - x_0|\) минут, чтобы добраться до места встречи. Также \(i\)-му человеку требуется \(t_i\) минут чтобы одеться, поэтому суммарно ему нужно \(t_i + |x_i - x_0|\) минут чтобы добраться до места встречи.

Здесь \(|y|\) обозначает модуль числа \(y\).

Эти люди просят вас выбрать позицию \(x_0\), которая минимизирует время, через которое все \(n\) людей доберутся до места встречи.

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Затем следуют сами наборы входных данных.

Каждый набор входных данных состоит из трех строк.

В первой строке задано единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество людей.

Во второй строке заданы \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(0 \le x_i \le 10^{8}\)) — позиции людей.

В третьей строке заданы \(n\) целых чисел \(t_1, t_2, \dots, t_n\) (\(0 \le t_i \le 10^{8}\)), где \(t_i\) это время, которое нужно \(i\)-му человеку, чтобы одеться.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное вещественное число — оптимальная позиция \(x_0\). Можно показать, что существует единственная оптимальная позиция \(x_0\).

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{−6}\). Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(\frac{|a−b|}{max(1,|b|)} \le 10^{−6}\).

Примечание
  • В \(1\)-м наборе входных данных есть только один человек, поэтому целесообразно выбрать место встречи в его позиции. Тогда он доберется до него за \(3\) минуты, которые нужны ему, чтобы одеться.
  • Во \(2\)-м наборе входных данных есть \(2\) человека, которым не нужно время, чтобы одеться. Чтобы добраться до позиции \(2\), каждому из них потребуется по одной минуте.
  • В \(5\)-м наборе входных данных \(1\)-му человеку нужно \(4\) минуты, чтобы добраться до позиции \(1\) (\(4\) минуты, чтобы одеться, и \(0\) минут на сам путь); \(2\)-му человеку нужно \(2\) минуты, чтобы добраться до позиции \(1\) (\(1\) минута, чтобы одеться, и \(1\) минута на сам путь); \(3\)-му человеку нужно \(4\) минуты, чтобы добраться до позиции \(1\) (\(2\) минуты, чтобы одеться, и \(2\) минуты на сам путь).

F. Камушки и бусинки

геометрия Структуры данных *2900

Есть две валюты: камушки и бусинки. Изначально у вас есть \(a\) камушков, \(b\) бусинок.

Есть \(n\) дней, в каждый день можно обменивать одну валюту на другую по некоторому курсу.

В день \(i\) можно обменять \(-p_i \leq x \leq p_i\) камушков на \(-q_i \leq y \leq q_i\) бусинок, или наоборот. Разрешается не совершать обмен вовсе. При этом, если вы совершаете обмен, должно выполняться соотношение \(x \cdot q_i = -y \cdot p_i\). Разрешены дробные обмены.

За день можно совершить не более одного такого обмена. Количество камушков и бусинок должно всегда оставаться неотрицательным.

Решите независимо \(n\) задач: для каждого дня \(i\) выведите, какое максимальное количество камушков может быть у вас на конец \(i\)-го дня, если совершать обмены оптимально.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных следует ниже.

Первая строка набора входных данных содержит три целых числа \(n\), \(a\) и \(b\) (\(1 \le n \le 300\,000\), \(0 \le a, b \le 10^9\)) — количество дней и изначальное количество камушков и бусинок соответственно.

Вторая строка набора входных данных содержит \(n\) целых чисел: \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le 10^9\)).

Третья строка набора входных данных содержит \(n\) целых чисел: \(q_1, q_2, \ldots, q_n\) (\(1 \le q_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(300\,000\).

Выходные данные

Выведите \(n\) чисел — максимальное количество камушков в конце каждого дня.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{\left|a - b\right|}{\max(1, \left|b\right|)} \le 10^{-6}\).

Примечание

На изображении ниже можно видеть решения для первых двух наборов входных данных. В каждой строке указана оптимальная последовательность операций для каждого из дней.

В первом примере оптимальной стратегией для первого дня является не делать обмена вовсе, поскольку мы можем только уменьшить количество камушков. Для второго дня оптимальной стратегией является сначала обменять \(1\) камушек на \(2\) бусинки, что является корректным обменом, поскольку \(1 \cdot 4 = 2 \cdot 2\), после чего обменять \(2\) бусинки на \(3\) камушка.

D. Одинаковые бинарные подпоследовательности

геометрия жадные алгоритмы Конструктив реализация Строки *2200

У Эврула есть бинарная строка \(s\) длины \(2n\). Бинарная строка — это строка, состоящая только из символов \(0\) и \(1\). Он хочет разбить \(s\) на две непересекающиеся одинаковые подпоследовательности. Для этого ему нужна ваша помощь.

Вы можете выполнить следующую операцию один раз.

  • Выберите любую подпоследовательность (возможно пустую) символов \(s\) и циклически сдвиньте ее направо на одну позицию.

Другими словами, выберите последовательность индексов \(b_1, b_2, \ldots, b_m\), где \(1 \le b_1 < b_2 < \ldots < b_m \le 2n\). После этого одновременно присвойте \(\)s_{b_1} := s_{b_m},\(\) \(\)s_{b_2} := s_{b_1},\(\) \(\)\ldots,\(\) \(\)s_{b_m} := s_{b_{m-1}}.\(\)

Можете ли вы разбить \(s\) на две непересекающиеся одинаковые подпоследовательности после того, как выполните указанную операцию ровно один раз?

Разбиением \(s\) на две непересекающиеся одинаковые подпоследовательности \(s^p\) и \(s^q\) называются два возрастающих массива индексов \(p_1, p_2, \ldots, p_n\) и \(q_1, q_2, \ldots, q_n\) такие, что каждое целое число от \(1\) до \(2n\) встречается \(p\) и \(q\) ровно один раз, при этом \(s^p = s_{p_1} s_{p_2} \ldots s_{p_n}\), \(s^q = s_{q_1} s_{q_2} \ldots s_{q_n}\), и \(s^p = s^q\).

Если невозможно выполнить операцию и разбиение, выведите \(-1\). Если можно выполнить операцию и разбить \(s\) на две непересекающиеся подпоследовательности \(s^p\) и \(s^q\) так, чтобы \(s^p = s^q\), выведите индексы подпоследовательности \(b\) и индексы \(s^p\), т. е. значения \(p_1, p_2, \ldots, p_n\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)), где \(2n\) — длина строки.

Вторая строка содержит бинарную строку \(s\) длины \(2n\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных следуйте следующему формату.

Если решения не существует, выведите \(-1\).

Иначе:

  • В первой строке выведите целое число \(m\) (\(0 \leq m \leq 2n\)) и затем \(m\) различных индексов в возрастающем порядке \(b_1\), \(b_2\), ..., \(b_m\).
  • Во второй строке выведите \(n\) различных индексов в возрастающем порядке \(p_1\), \(p_2\), ..., \(p_n\).

Если существуют несколько решений, выведите любое из них.

Примечание

В первом примере \(b\) пустая, поэтому строка \(s\) не меняется. Выберем \(s^p = s_1 s_2 = \mathtt{10}\), тогда \(s^q = s_3s_4 = \mathtt{10}\).

Во втором примере \(b=[3,5]\). Изначально \(s_3=\mathtt{0}\), и \(s_5=\mathtt{1}\). После выполнения операции мы одновременно присваиваем \(s_3=\mathtt{1}\) и \(s_5=\mathtt{0}\).

Поэтому \(s\) становится 101000 после выполнения операции.

Возьмем символы на позициях \([1,2,5]\) в \(s^p\), получим \(s_1=\mathtt{100}\). Символы на позициях \([3,4,6]\) будут в \(s^q\), получим \(s^q=100\). Это решение, потому что \(s^p=s^q\).

В четвертом примере можно показать, что невозможно выполнить разбиение строки после любой операции.

B. Много лишнего сыра 2

геометрия жадные алгоритмы сортировки *800

У Пака Чанека есть \(n\) двухмерных ломтиков сыра. \(i\)-й ломтик сыра можно представить в виде прямоугольника размерами \(a_i \times b_i\). Мы хотим расположить их на двумерной плоскости так, чтобы:

  • Каждая грань каждого ломтика сыра параллельна либо оси x, либо оси y.
  • Нижняя грань каждого ломтика — это отрезок на оси x.
  • Никакие два ломтика не пересекаются, но они могут соприкасаться гранями.
  • Они образуют одну связанную фигуру.

Обратите внимание, что мы можем расположить их в любом порядке (крайний левый ломтик сыра не обязательно является первым ломтиком сыра). Также обратите внимание, что мы можем вращать каждый ломтик сыра любым способом при условии выполнения остальных ограничений.

Найдите минимально возможный периметр построенной фигуры.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Следующие строки содержат описания наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество ломтиков сыра у Пака Чанека.

В \(i\)-й из следующих \(n\) строк каждого набора содержатся два целых числа \(a_i\) и \(b_i\) (\(1 \leq a_i,b_i \leq 10^9\)) — размеры \(i\)-го ломтика сыра.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую целое число — минимально возможный периметр построенной фигуры.

Примечание

В первом наборе входных данных один из способов получения минимально возможного периметра выглядит следующим образом.

Мы можем вычислить периметр построенной фигуры: \(2+5+1+1+1+1+3+1+5+1+2+3=26\). Можно показать, что нельзя получить меньший периметр.

Ниже показано некорректное расположение.

Периметр данной фигуры \(24\), но не все ограничения в задаче выполнены. Нижняя грань ломтика \(1 \times 1\) не находится на оси x.

Во втором наборе входных данных один из способов получения минимально возможного периметра выглядит следующим образом.

Мы можем вычислить периметр построенной фигуры: \(2+2+2+3+2+3+2+2+2+4=24\). Можно показать, что нельзя получить меньший периметр.

I. Хрустальные шары

геометрия графы дп разделяй и властвуй разделяй и властвуй Структуры данных теория чисел *3500

В мире Compfestnesia Пак Чанек нашел секретное подземелье. Внутри него находится сундук с сокровищами, окруженный \(n\) статуями, расположенными по кругу. Статуи пронумерованы от \(0\) до \(n-1\), причем статуя \(i\) находится слева от статуи \(i+1\), а статуя \(n-1\) — слева от статуи \(0\).

Пак Чанек заметил, что каждая статуя держит хрустальный шар с целым числом от \(0\) до \(m-1\) включительно. В хрустальном шаре статуи \(i\) содержится число \(a_i\).

В подземелье есть инструкция, согласно которой, чтобы открыть сундук с сокровищами, все целые числа в хрустальных шарах должны быть равны \(0\). Для этого Паку Чанеку дается целое число \(k\), и он может выполнить ноль или более операций. За одну операцию Пак Чанек делает следующее:

  1. Он выберет ровно \(k\) последовательных статуй. Другими словами, выберет статуи \(p, (p+1) \bmod n, (p+2) \bmod n, (p+3) \bmod n, \ldots, (p+k-1) \bmod n\) для некоторого выбранного индекса \(p\).
  2. Выполнит одно из следующих действий:
    • Для каждой выбранной статуи заменит её значение \(a_i\) на \((a_i+1) \bmod m\).
    • Для каждой выбранной статуи заменит её значение \(a_i\) на \((a_i-1) \bmod m\).

Помогите Паку Чанеку найти минимально возможное количество операций, чтобы открыть сундук с сокровищами.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \leq n,m \leq 10^6\), \(nm \leq 2 \cdot 10^6\), \(1 \leq k < n\)) — количество статуй, верхнее ограничение на значения чисел в хрустальных шарах и количество статуй, которые можно изменять за одну операцию.

Вторая строка содержит \(n\) целых чисел \(a_0,a_1,\ldots,a_{n-1}\) (\(0 \leq a_i < m\)) — целые числа в хрустальных шарах.

Выходные данные

Если возможно выполнить ноль или более операций так, чтобы стало \(a_0=a_1=\ldots=a_{n-1}=0\), выведите минимальное требуемое количество операций. В противном случае выведите \(-1\).

Примечание

В первом примере Пак Чанек может выполнять следующие операции:

  1. Выполнить операцию \(a_i := (a_i-1) \bmod m\) \(3\) раза для статуй \(1\), \(2\) и \(3\). Теперь \(a=[8,7,1,2,0]\).
  2. Выполнить операцию \(a_i := (a_i-1) \bmod m\) \(1\) раз для статуй \(3\), \(4\) и \(0\). Теперь \(a=[7,7,1,1,8]\).
  3. Выполнить операцию \(a_i := (a_i+1) \bmod m\) \(2\) раза для статуй \(4\), \(0\) и \(1\). Теперь \(a=[0,0,1,1,1]\).
  4. Выполнить операцию \(a_i := (a_i-1) \bmod m\) \(1\) раз для статуй \(2\), \(3\) и \(4\). Теперь \(a=[0,0,0,0,0]\).

G. Подготовка к олимпиаде

Бинарный поиск геометрия дп Потоки реализация сортировки Структуры данных *3500

Антон решил подготовиться к очередной олимпиаде. Чтобы Антону было интереснее, Илья подготовил для него \(n\) задач. Сдать \(i\)-ю задачу можно только в первые \(d_{i}\) дней, причем сдавать несколько задач в один и тот же день нельзя. Илья оценил полезность \(i\)-й задачи как \(r_{i}\), и разделил задачи на три темы, тема \(i\)-й задачи равна \(type_{i}\).

Антон хочет решить ровно \(a\) задач на первую тему, ровно \(b\) на вторую тему и ровно \(c\) задач на третью тему (и каждая из этих задач должна быть решена не позже своего дедлайна). Скажите Антону, сможет ли он это сделать, и если сможет, то выведите максимальную суммарную полезность задач, которые он решит.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся четыре целых числа \(n, a, b, c\) (\(1 \le n \le 10^5\), \(0 \le a, b, c \le n\)).

В каждой из следующих \(n\) строк содержатся три целых числа \(r_i, type_i, d_i\) (\(0 \le r_i \le 10^{9}\), \(1 \le type_i \le 3\), \(1 \le d_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число: \(-1\), если решить нужный набор задач невозможно, и максимальную полезность решенных задач в противном случае.

Примечание

В первом наборе входных данных выгодно решить \(2\)-ю и \(4\)-ю задачи.

Во втором наборе входных данных ответа не существует.

В третьем наборе входных данных оптимально решить \(2\)-ю, \(3\)-ю и \(4\)-ю задачи.

В последнем наборе входных данных оптимально решить \(1\)-ю, \(2\)-ю и \(4\)-ю задачи.

E. Power Defence

геометрия дп жадные алгоритмы Перебор *2600

Вася играет в Power Defence.

Ему осталось пройти последний уровень игры. Для этого ему необходимо уничтожить Главного Злодея, который движется по прямой со скоростью 1 метр в секунду из точки ( - ∞, 0) в точку ( + ∞, 0) игрового мира. В точках вида (x, 1) и (x,  - 1), где x — целое число, можно строить башни одного из трех типов: огненную, электрическую или замедляющую. При этом нельзя строить две башни в одной точке. Башня каждого типа имеет определенный радиус действия и величину урона в секунду (кроме замедляющей). Если в некоторой точке на Главного Злодея действует k замедляющих башен, то его скорость падает в k + 1 раз.

Известно, сколько башен каждого типа можно построить. Требуется определить, какой максимальный урон можно нанести Главному Злодею.

Все расстояния в задаче указаны в метрах. Размер Главного Злодея и башен очень мал, поэтому можно считать их точками на плоскости. Главный Злодей находится в радиусе действия башни если расстояние между ним и башней не превышает радиуса действия башни.

Входные данные

Первая строка содержит три целых числа nf, ne и ns (0 ≤ nf, ne, ns ≤ 20, 1 ≤ nf + ne + ns ≤ 20) — максимальное количество огненных, электрических и замедляющих башен, которые можно построить, соответственно. Числа разделены единичными пробелами.

Вторая строка содержит три целых числа rf, re и rs (1 ≤ rf, re, rs ≤ 1000) — радиус действия огненной, электрической и замедляющей башни, соответственно. Числа разделены единичными пробелами.

Третья строка содержит два целых числа df и de (1 ≤ df, de ≤ 1000) — количество урона наносимого огненной и электрической башней Главному Злодею за 1 секунду (при условии, что Главный Злодей находится в радиусе действия башни). Числа разделены единичным пробелом.

Выходные данные

Выведите единственное вещественное число — наибольший возможный урон, который может быть нанесен Главному Злодею, с абсолютной или относительной погрешностью не более 10 - 6.

Примечание

В первом примере имеется одна огненная башня, которая нанесет один и тот же урон независимо от расположения.

Во втором примере есть еще одна замедляющая башня такого же радиуса действия. Если построить две башни напротив друг друга, то скорость Главного Злодея будет в 2 раза ниже на всем интервале действия огненной башни, то есть будет нанесен вдвое больший урон.

F. Chemistry Lab

геометрия дп Теория вероятностей *2200

Monocarp is planning on opening a chemistry lab. During the first month, he's going to distribute solutions of a certain acid.

First, he will sign some contracts with a local chemistry factory. Each contract provides Monocarp with an unlimited supply of some solution of the same acid. The factory provides \(n\) contract options, numbered from \(1\) to \(n\). The \(i\)-th solution has a concentration of \(x_i\%\), the contract costs \(w_i\) burles, and Monocarp will be able to sell it for \(c_i\) burles per liter.

Monocarp is expecting \(k\) customers during the first month. Each customer will buy a liter of a \(y\%\)-solution, where \(y\) is a real number chosen uniformly at random from \(0\) to \(100\) independently for each customer. More formally, the probability of number \(y\) being less than or equal to some \(t\) is \(P(y \le t) = \frac{t}{100}\).

Monocarp can mix the solution that he signed the contracts with the factory for, at any ratio. More formally, if he has contracts for \(m\) solutions with concentrations \(x_1, x_2, \dots, x_m\), then, for these solutions, he picks their volumes \(a_1, a_2, \dots, a_m\) so that \(\sum \limits_{i=1}^{m} a_i = 1\) (exactly \(1\) since each customer wants exactly one liter of a certain solution).

The concentration of the resulting solution is \(\sum \limits_{i=1}^{m} x_i \cdot a_i\). The price of the resulting solution is \(\sum \limits_{i=1}^{m} c_i \cdot a_i\).

If Monocarp can obtain a solution of concentration \(y\%\), then he will do it while maximizing its price (the cost for the customer). Otherwise, the customer leaves without buying anything, and the price is considered equal to \(0\).

Monocarp wants to sign some contracts with a factory (possibly, none or all of them) so that the expected profit is maximized — the expected total price of the sold solutions for all \(k\) customers minus the total cost of signing the contracts from the factory.

Print the maximum expected profit Monocarp can achieve.

Input

The first line contains two integers \(n\) and \(k\) (\(1 \le n \le 5000\); \(1 \le k \le 10^5\)) — the number of contracts the factory provides and the number of customers.

The \(i\)-th of the next \(n\) lines contains three integers \(x_i, w_i\) and \(c_i\) (\(0 \le x_i \le 100\); \(1 \le w_i \le 10^9\); \(1 \le c_i \le 10^5\)) — the concentration of the solution, the cost of the contract and the cost per liter for the customer, for the \(i\)-th contract.

Output

Print a single real number — the maximum expected profit Monocarp can achieve.

Your answer is considered correct if its absolute or relative error does not exceed \(10^{-6}\).

Formally, let your answer be \(a\), and the jury's answer be \(b\). Your answer is accepted if and only if \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

B. Vittorio Plays with LEGO Bricks

геометрия дп *2200

Vittorio is playing with his new LEGO Duplo bricks. All the bricks have the shape of a square cuboid with a \(2 \times 2\) square base and a height of \(1\). They can be arranged in the 3D space to build structures, provided that the following rules are met:

  1. No two bricks can intersect, but they can touch on their faces.
  2. The corners of every brick must have integer coordinates (so bricks are axis-aligned) and the \(z\) coordinates of all corners must be non-negative.
  3. The square bases of every brick must be parallel to the ground (i.e. the plane \(z=0\)).
  4. The lower base of any brick that is not touching the ground must touch the upper base of some other brick in a region of positive area (when this happens, the two bricks stay attached to each other thanks to small studs).

For example, this is a valid structure:

Vittorio wants to build a structure that includes purple bricks in the following \(n\) positions: \((x_1, 0, h)\), \((x_2, 0, h)\), \(\dots\), \((x_n, 0, h)\) — these are the coordinates of the centers of their lower bases; note that all of these bricks have \(y\) coordinate equal to \(0\) and \(z\) coordinate equal to \(h\). Vittorio will use additional bricks of other colors to support the purple bricks. He is willing to place bricks only in positions where the center of the lower base has \(y\) coordinate equal to \(0\). What is the minimum number of additional bricks needed?

It can be shown that a valid construction always exists.

Input

The first line contains two integers \(n\) and \(h\) (\(1 \le n \le 300\), \(0 \le h \le 10^9\)) — the number of purple bricks and their common \(z\) coordinate.

The second line contains \(n\) integers \(x_1, \, x_2, \, \dots, \, x_n\) (\(1 \le x_i \le 10^9\), \(x_i + 1 < x_{i+1}\)) — the \(x\) coordinates of the purple bricks (centers of the bases), given in increasing order.

Output

Print the minimum number of additional bricks needed.

Note

In the first sample, all the purple bricks lie on the ground, so no additional bricks are needed.

In the second sample, Vittorio will have to place supporting bricks under the purple bricks, and he can use a single brick to support both the third and the fourth purple bricks. For example, he can place additional bricks at positions \((3, 0, 0)\), \((7, 0, 0)\) and \((12, 0, 0)\). It can be shown that it is impossible to build a valid construction using less than \(3\) additional bricks.

In the fourth sample, a possible structure that minimizes the number of additional bricks is shown in the problem description.

I. Spinach Pizza

геометрия жадные алгоритмы игры интерактив *2500

The two siblings Alberto and Beatrice have to eat a spinach pizza together. However, none of them likes spinach, so they both want to eat as little as possible.

The pizza has the shape of a strictly convex polygon with \(n\) vertices located at integer coordinates \((x_1, y_1), \, (x_2, y_2), \, \dots, \, (x_n, y_n)\) of the plane.

The siblings have decided to eat the pizza in the following way: taking turns, starting with Alberto, each sibling chooses a vertex of the remaining part of the pizza and eats out the triangle determined by its two neighboring edges. In this way, after each of the first \(n - 3\) turns the pizza will have one less vertex. The game ends after the \((n - 2)\)-th turn, when all the pizza has been eaten.

Assuming that Alberto and Beatrice choose the slices to eat optimally, which of the siblings manages to eat at most half of the pizza? You should identify a sibling that has a strategy to do so and help them choose the slices appropriately. Note that it is possible that both Alberto and Beatrice end up eating exactly half of the area if they choose their slices optimally.

Input

The first line contains a single integer \(n\) (\(4 \le n \le 100\)) — the number of vertices.

The next \(n\) lines contain two integers \(x_i\) and \(y_i\) each (\(-10^6 \le x_i, y_i \le 10^6\)) — the coordinates of the \(i\)-th vertex of the polygon representing the initial shape of the pizza.

It is guaranteed that the polygon is strictly convex and that its vertices are given in counterclockwise order.

Interaction

First, you should print a line containing either the string \(\texttt{Alberto}\) or the string \(\texttt{Beatrice}\) — the sibling that you will help to win.

Then, for the next \(n - 2\) turns, you will alternate with the judge in choosing a slice of the pizza and removing it, starting with you if you chose to help Alberto, or starting with the judge if you chose to help Beatrice.

  • When it is your turn, print a single line containing an integer \(p\) (\(1 \leq p \leq n\)) that has not been chosen before, indicating that you want to eat the slice determined by the vertex located at \((x_p, y_p)\).
  • When it is the judge's turn, read an integer \(q\) (\(1 \leq q \leq n\)), indicating that the other player eats the slice determined by the vertex located at \((x_q, y_q)\). It is guaranteed that \(q\) has not been chosen before.

If one of your interactions is malformed, the interactor terminates immediately and your program receives the verdict \(\texttt{WRONG-ANSWER}\). Otherwise, you will receive \(\texttt{CORRECT}\) if at the end your player has eaten at most half of the pizza, and \(\texttt{WRONG-ANSWER}\) otherwise.

After printing a line do not forget to end the line and flush the output. Otherwise, you will get the verdict \(\texttt{TIMELIMIT}\). To flush the output, use:

  • \(\texttt{fflush(stdout)}\) in C;
  • \(\texttt{fflush(stdout)}\), \(\texttt{cout <}\texttt{< flush}\) or \(\texttt{cout.flush()}\) in C++;
  • \(\texttt{System.out.flush()}\) in Java and Kotlin;
  • \(\texttt{sys.stdout.flush()}\) in Python.
Note

In the first sample, the pizza has area \(15\). Alberto can eat less than half of the pizza by eating the slice around vertex \(2\) (which has area \(6.5\)) or around vertex \(3\) (which has area \(3.5\)).

In the second sample, it can be proved that both players will eat exactly half of the pizza if they eat optimally. Therefore it is possible to choose to help either Alberto or Beatrice.

In the third sample, it is possible to show that only Beatrice has a strategy to eat at most half of the pizza. The following is an example of a valid interaction (after reading the input):

\(\) \begin{array}{|c|c|c|} \hline \textbf{Contestant} & \textbf{Judge} & \textbf{Explanation} \\ \hline \texttt{Beatrice} & & \text{The contestant will help Beatrice} \\ \hline & \texttt{7} & \text{Alberto eats the triangle with vertices $6$, $7$, $1$ and area $1$} \\ \hline \texttt{2} & & \text{Beatrice eats the triangle with vertices $1$, $2$, $3$ and area $2$} \\ \hline & \texttt{5} & \text{Alberto eats the triangle with vertices $4$, $5$, $6$ and area $1.5$} \\ \hline \texttt{4} & & \text{Beatrice eats the triangle with vertices $3$, $4$, $6$ and area $8$} \\ \hline & \texttt{6} & \text{Alberto eats the triangle with vertices $3$, $6$, $1$ and area $11$} \\ \hline \end{array} \(\) The total area eaten by Alberto is \(13.5\) and the total area eaten by Beatrice is \(10\), which is less than half the area of the whole pizza. The actions performed by the contestant and the judge in this example of interaction may be non-optimal. The process is illustrated below:

A. Ноутбук и проектор

геометрия математика *800

В доме Вики есть комната в форме прямоугольного параллелепипеда. Пол комнаты — прямоугольник размером \(w \times d\), а потолок находится над полом на постоянной высоте \(h\). Введем на полу систему координат таким образом, чтобы углы комнаты имели координаты \((0, 0)\), \((w, 0)\), \((w, d)\) и \((0, d)\).

Ноутбук стоит на полу в точке \((a, b)\). Проектор висит на потолке прямо над точкой \((f, g)\). Вика хочет соединить ноутбук и проектор кабелем таким образом, чтобы кабель все время шел вдоль стен, потолка или пола (то есть не висел внутри комнаты). Кроме того, кабель должен всегда идти параллельно одной из сторон параллелепипеда (то есть он не может идти по диагонали).

Какова минимальная длина кабеля необходима, чтобы соединить ноутбук и проектор?

Рисунок для первого набора входных данных. Один из оптимальных способов проложить кабель изображён зеленым цветом.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(w\), \(d\) и \(h\) (\(2 \le w, d, h \le 1000\)) — размеры комнаты.

Вторая строка содержит четыре целых числа \(a\), \(b\), \(f\), \(g\) (\(0 < a, f < w\); \(0 < b, g < d\)): ноутбук расположен на полу в точке \((a, b)\), а проектор — на потолке прямо над точкой \((f, g)\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную длину кабеля, необходимую для того, чтобы соединить ноутбук и проектор, причём так, чтобы кабель все время шел вдоль стен, пола и потолка комнаты, а также всё время шёл параллельно одной из сторон параллелепипеда.

Примечание

На рисунке в условии задачи изображен первый набор входных данных.

H. Разбалловка Codeforces

Бинарный поиск геометрия дп Структуры данных *3300

Вы участвуете в раунде Codeforces с \(n\) задачами.

На решение каждой задачи вы тратите ровно одну минуту, время на отправку решения можно не учитывать. В каждый момент времени вы можете решать не более одной задачи. Раунд начинается в момент времени \(0\), поэтому свою первую посылку вы можете сделать в момент времени \(t \ge 1\) минут. Когда вы отправляете решение, вы всегда правильно решаете задачу.

Получаемые баллы за \(i\)-ю задачу могут быть описаны тремя целыми числами \(k_i\), \(b_i\) и \(a_i\). Если вы решите эту задачу по прошествии \(t\) минут, вы получите \(\max(b_i - k_i \cdot t,a_i)\) баллов.

Ваша задача — выбрать порядок решения всех этих \(n\) задач, чтобы получить максимальное количество очков. Можете считать, что раунд достаточно длинный, и вы успеете решить все задачи.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество задач.

Далее следуют \(n\) строк, \(i\)-я из которых содержит три целых числа \(k_i\), \(b_i\), \(a_i\) (\(1\le k_i,b_i,a_i\le 10^9\); \(a_i < b_i\)), которые означают, что вы получите \(\max(b_i - k_i \cdot t,a_i)\) баллов, если решите эту \(i\)-ю задачу на \(t\)-й минуте.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую одно целое число — максимальный балл, который вы можете получить.

Примечание

Во втором наборе входных данных баллы всех задач на каждой минуте перечислены ниже.

Время\(1\)\(2\)\(3\)\(4\)\(5\)\(6\)
Задача \(1\)\(7\)\(6\)\(5\)\(\color{red}{4}\)\(3\)\(2\)
Задача \(2\)\(\color{red}{20}\)\(11\)\(4\)\(4\)\(4\)\(4\)
Задача \(3\)\(12\)\(10\)\(\color{red}{8}\)\(6\)\(4\)\(3\)
Задача \(4\)\(9\)\(5\)\(1\)\(1\)\(\color{red}{1}\)\(1\)
Задача \(5\)\(17\)\(\color{red}{15}\)\(13\)\(11\)\(9\)\(7\)
Задача \(6\)\(5\)\(5\)\(5\)\(5\)\(5\)\(\color{red}{5}\)

Красным цветом показан один из оптимальных порядков решения задач, который дает \(53\) балла.

B. Следование направлениям

геометрия реализация *800

Альперен стоит в точке \((0,0)\). Ему дана строка \(s\) длины \(n\) и он производит \(n\) перемещений: \(i\)-е перемещение происходит так:

  • если \(s_i = \texttt{L}\), он перемещается на одну клетку влево;
  • если \(s_i = \texttt{R}\), он перемещается на одну клетку вправо;
  • если \(s_i = \texttt{U}\), он перемещается на одну клетку вверх;
  • если \(s_i = \texttt{D}\), он перемещается на одну клетку вниз.
Если Альперен начинает в точке в центре, он может сделать четыре различных перемещения, как показано на рисунке.
В точке \((1,1)\) находится конфета (то есть на одну клетку вверх и на одну клетку вправо от начальной точки, в которой находится Альперен). Определите, доберется ли Альперен когда-нибудь до конфеты.
Alperen's path in the first test case.
Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 50\)) — длину строки.

Вторая строка каждого набора содержит строку \(s\) длины \(n\) состоящую из символов \(\texttt{L}\), \(\texttt{R}\), \(\texttt{D}\), и \(\texttt{U}\), обозначающую перемещения Альперена.

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если Альперен доберется до конфеты, в противном случае, выведите «NO» (без кавычек).

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ).

Примечание

В первом наборе входных данных Альперен следует по пути \(\)(0,0) \overset{\texttt{U}}{\to} (0,1) \overset{\texttt{U}}{\to} (0,2) \overset{\texttt{U}}{\to} (0,3) \overset{\texttt{R}}{\to} (1,3) \overset{\texttt{D}}{\to} (1,2) \overset{\texttt{D}}{\to} \color{green}{\mathbf{(1,1)}} \overset{\texttt{L}}{\to} (0,1).\(\) Обратите внимание, что Альперену не обязательно находится в точке \((1,1)\) в конце своего пути, ему достаточно оказаться там хотя бы раз за весь путь.

Во втором наборе Альперен следует по пути \(\)(0,0) \overset{\texttt{U}}{\to} (0,1) \overset{\texttt{R}}{\to} \color{green}{\mathbf{(1,1)}}.\(\)

В третьем наборе Альперен следует по пути \(\)(0,0) \overset{\texttt{R}}{\to} (1,0) \overset{\texttt{R}}{\to} (2,0) \overset{\texttt{R}}{\to} (3,0) \overset{\texttt{U}}{\to} (3,1) \overset{\texttt{U}}{\to} (3,2) \overset{\texttt{D}}{\to} (3,1) \overset{\texttt{D}}{\to} (3,0) \overset{\texttt{D}}{\to} (3,-1).\(\)

В четвертом наборе Альперен следует по пути \(\)(0,0) \overset{\texttt{L}}{\to} (-1,0) \overset{\texttt{L}}{\to} (-2,0) \overset{\texttt{L}}{\to} (-3,0).\(\)

B. Идеальная точка

геометрия жадные алгоритмы Перебор *900

Вам дано \(n\) одномерных отрезков (каждый отрезок представляется двумя числами — координатами его концов).

Давайте определим функцию \(f(x)\) как количество отрезков, покрывающих точку \(x\) (отрезок покрывает точку \(x\), если \(l \le x \le r\), где \(l\) – левый конец отрезка, а \(r\) — правый).

Целочисленная точка \(x\) называется идеальной, если она принадлежит большему количеству отрезков, чем любая другая целочисленная точка, т.е. \(f(y) < f(x)\) верно для любой другой целочисленной точки \(y\).

Вам дано целое число \(k\). Ваша задача состоит в том, чтобы определить, возможно ли удалить несколько (возможно, ни одного) отрезков, чтобы данная точка \(k\) стала идеальной.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 50\)).

Далее следует \(n\) строк, \(i\)-я и них содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i, r_i \le 50\); \(l_i \le r_i\)) — концы \(i\)-го отрезка.

Выходные данные

Для каждого набора входных данных, выведите YES, если возможно удалить несколько (возможно, ни одного) отрезков, чтобы данная точка \(k\) стала идеальной, в противном случае выведите NO.

Каждую букву можно выводить в любом регистре (например, YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

Примечание

В первом примере точка \(3\) уже идеальна (она покрыта тремя отрезками), поэтому не нужно ничего удалять.

В четвертом примере можно удалить все, кроме отрезка \([5, 5]\).

E. Объединение городов

геометрия жадные алгоритмы Конструктив математика поиск в глубину и подобное реализация снм *2300

Вам дана таблица \(n \times m\). Некоторые клетки заполнены, некоторые пустые.

Город — это максимальное (по включению) множество заполненных клеток, такое что можно дойти из любой клетки города до любой другой клетки города, перемещаясь в соседние по стороне клетки, только по клеткам города. Другими словами, город — это компонента связности заполненных клеток, где ребро проводится между соседними по стороне заполненными клетками.

Изначально в таблице находятся два города. Вы хотите поменять некоторые пустые клетки на заполненные, так что выполняются два условия:

  • В таблице находится один город.
  • Кратчайший путь между любыми двумя заполненными клетками, если можно перемещаться только по заполненным клеткам, равно манхеттенскому расстоянию между клетками.

Манхеттенское расстояние между двумя клетками \((a, b)\) и \((c, d)\) равняется \(|a - c| + |b - d|\).

Найдите способ заполнить некоторые клетки, чтобы все условия выполнялись и общее количество заполненных клеток было минимально.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Описания наборов входных данных следуют.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(m\) (\(1 \le n, m \le 50\), \(nm \geq 3\)).

Следующие \(n\) строк описывают таблицу. В \(i\)-й строке находится строка \(s_i\) длины \(m\). Символ \(s_{i,j}\) равен '#', если клетка \((i, j)\) заполнена, и '.', если клетка пустая.

Гарантируется, что изначально в таблице ровно два города.

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превосходит \(25\,000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк, каждая содержит строку длины \(m\) — описание таблицы, которую вы сделали в том же формате, что во входных данных.

Если существует несколько возможных способов заполнить некоторые пустые клетки, чтобы общее количество заполненных клеток было минимально, выведите любой.

Примечание

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

Во втором наборе входных данных мы также соединяем города одной заполненной клеткой, также выполняя второе условие.

В третьем наборе входных данных, обратите внимание, что если мы заполним 3 клетки слева сверху, города будут соединены, однако второе условие не будет выполняться для пары клеток \((4, 2)\) и \((2, 4)\).

A. Треугольник

геометрия Перебор *1500

На уроке геометрии Вася узнал, что треугольник называется прямоугольным, если он невырожденный, а один из его углов прямой. Вася тут же захотел нарисовать такой треугольник: он отметил на листке бумаги 3 точки с целочисленными координатами, соединил их отрезками прямых и показал Пете. Но тот сказал, что васин треугольник не прямоугольный, а почти прямоугольный: сам треугольник не является прямоугольным, но можно подвинуть одну из точек на расстояние ровно 1 так, чтобы координаты остались целыми, и треугольник стал прямоугольным. Вася просит вас помочь ему выяснить, не обманывает ли его Петя. По координатам вершин треугольника определите, является ли он прямоугольным, почти прямоугольным, или же не является ни тем, ни другим.

Входные данные

В первой строке входного файла через пробел записано 6 целых чисел x1, y1, x2, y2, x3, y3 — координаты вершин треугольника. Все координаты целые и не превосходят по модулю 100. Гарантируется, что треугольник невырожденный, т. е. его площадь не равна нулю.

Выходные данные

Если заданный треугольник является прямоугольным, выведите RIGHT, если он является почти прямоугольным, выведите ALMOST, и если он не является ни тем, ни другим, выведите NEITHER.

C. Места для селфи

Бинарный поиск геометрия математика Структуры данных *1400

Вселенная представляет собой координатную плоскость. На ней проложено \(n\) космических трасс, каждая из которых представляет собой прямую \(y=kx\), проходящую через начало координат \((0, 0)\). Также там есть \(m\) астероидных поясов, которые представляют собой параболы ветвями вверх, их можно представить как графики функций \(y=ax^2+bx+c\), где \(a > 0\).

Вы хотите сфотографировать каждую параболу. Для этого для каждой параболы вам нужно выбрать прямую, которая не пересекается с этой параболой и не касается её. Вы можете выбирать одну и ту же прямую для нескольких парабол. Найдите для каждой параболы такую прямую или определите, что её нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке содержится одно число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора даны \(2\) целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^5\)) — количество прямых и парабол соответственно.

Далее в \(n\) строках содержится по одному целому числу \(k\) (\(|k| \le 10^8\)) — коэффициенты уравнений прямых \(y=kx\), описывающих прямые. Прямые могут совпадать, \(k\) может быть равно \(0\).

Далее в \(m\) строках содержится по \(3\) целых числа \(a\), \(b\) и \(c\) (\(a, |b|, |c| \le 10^8\), \(a > 0\)) — коэффициенты уравнений парабол \(ax^2+bx+c\). Параболы могут совпадать.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\) и сумма \(m\) по всем наборам также не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ для каждой параболы в данном порядке. Если в данном наборе есть прямая, не пересекающаяся с данной параболой и не касающаяся ее, выведите сначала в отдельной строке слово «YES», а далее в отдельной строке число \(k\) — коэффициент этой прямой. Если таких прямых несколько, выведите любую из них. Если же искомой прямой нет, выведите одно слово «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Пустые строки в выводе в примере даны только для наглядности, вам их выводить необязательно (но можно).

Примечание

В первом наборе входных данных обе параболы не пересекаются с единственной данной прямой \(y=1\cdot x\), поэтому ответом будет два числа \(1\).

Во втором наборе прямая \(y=x\) и парабола \(2x^2+5x+1\) пересекаются, а также прямая \(y=4x\) и парабола \(x^2+2x+1\) касаются, поэтому эти пары не удовлетворяют условию. Значит, для первой параболы ответом будет \(1\) (\(y=1x\)), а для второй параболы — \(4\).

В третьем тестовом наборе прямая и парабола пересекаются, поэтому ответ — «NO».

A. Мастер перемещений

геометрия жадные алгоритмы математика *800

YunQian стоит на бесконечной плоскости, на которой задана система координат. За один ход она может переместиться на одну клетку по диагонали вправо вверх или на одну клетку налево.

Иными словами, если она стоит в точке \((x,y)\), она может переместиться либо в точку \((x+1,y+1)\), либо в точку \((x-1,y)\).

YunQian изначально стоит в точке \((a,b)\) и хочет переместиться в точку \((c,d)\). Найдите минимальное количество ходов, которое она должна сделать, или скажите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит четыре числа \(a\), \(b\), \(c\), \(d\) (\(-10^8\le a,b,c,d\le 10^8\)).

Выходные данные

Для каждого набора входных данных, если возможно переместиться из точки \((a,b)\) в точку \((c,d)\), выведите минимальное количество ходов. В противном случае выведите \(-1\).

Примечание

В первом наборе входных данных один из возможных путей с использованием \(4\) ходов: \((-1,0)\to (0,1)\to (-1,1)\to (0,2)\to (-1,2)\). Можно доказать, что невозможно перейти из точки \((-1,0)\) в точку \((-1,2)\) менее чем за \(4\) хода.

A. Серия преступлений

геометрия Перебор реализация *800

В столице Берляндии переполох, уже три шокирующих преступления совершила известная банда грабителей «Пихстеры».

Карта столицы Берляндии представляет собой прямоугольную таблицу n × m. На карте каждая клетка таблицы обозначает некоторый квартал столицы.

Главный детектив столицы, Поликарп, обозначил на карте звездочками кварталы, в которых произошли первые три ограбления. Дедукция подсказывает Поликарпу, что четвертое ограбление будет совершено в таком квартале, что все четыре ограбленных квартала будут вершинами некоторого прямоугольника, параллельного сторонам карты.

С дедукцией у Поликарпа хорошо, а вот с математикой — плохо. Поэтому он попросил вас найти квартал, в котором произойдет четвертое ограбление.

Входные данные

В первой строке записано два целых числа через пробел n и m (2 ≤ n, m ≤ 100) — количество строк и столбцов карты соответственно.

Далее в n строках записано по m символов — описание карты столицы. Каждый символ может быть либо «.» (точка), либо «*» (звездочка). Символ равен «*» если соответствующий квартал ограбили, или «.» в противном случае.

Гарантируется, что на карте ровно три символа «*» и всегда можно найти четвертый квартал, соответствующий условиям задачи.

Выходные данные

Выведите два целых числа — номер строки и номер столбца на карте квартала, который ограбят четвертым. Строки нумеруются с единицы сверху вниз, столбцы нумеруются с единицы слева направо.

E. Не задача по геометрии

*особая задача *особая задача геометрия Конструктив математика

Входные данные

В единственной строке заданы три целых числа \(x\), \(y\), \(z\) (\(-1000 \le x, y, z \le 1000\)).

Выходные данные

Выведите одно вещественное число — ответ.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^6\). Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a-b|}{\max(1,|b|)} \le 10^6\).

A. Ян навещает Мэри

геометрия Конструктив теория чисел *800

Лягушки Ян и Мэри живут в точках целочисленной решётки декартовой координатной плоскости, Ян живёт в \((0,0)\), Мэри живёт в \((a,b)\).

Ян хочет навестить Мэри, прыгая по декартовой координатной плоскости. Каждую секунду он прыгает из его текущей позиции \((x_p, y_p)\) в другую целочисленную точку \((x_q, y_q)\), такую, что никакая другая целочисленная точка, кроме \((x_p, y_p)\) и \((x_q, y_q)\), не лежит на отрезке между точками \((x_p, y_p)\) и \((x_q, y_q)\).

Так как Ян хочет встретить Мэри как можно быстрее, он хочет допрыгать до точки \((a,b)\), используя не более \(2\) прыжков. К сожалению, Ян плох в математике. Можете ему помочь?

Точка целочисленной решётки определяется как точка, у которой \(x\)-координата и \(y\)-координата являются целыми числами.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1\le a,b\le 10^9\)) — координаты целочисленной точки, где живёт Мэри.

Выходные данные

Для каждого набора входных данных выведите целое число \(n\) (\(1 \le n \le 2\)) в первой строке — количество прыжков, которые сделает Ян для встречи с Мэри. Обратите внимание, что вам не нужно минимизировать количество прыжков.

В \(i\)-й из следующих \(n\) строк, выведите два целых числа \(0 \le x_i,y_i \le 10^9\), разделённых пробелом, обозначающих координаты \((x_i,y_i)\) Яна после \(i\)-го прыжка. Должно выполняться условие \(x_n = a\), \(y_n = b\).

Начальное местоположение Яна и его местоположение после каждого из \(n\) прыжков не обязательно должны быть разными.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных:

\((0,0) \to (3,4)\)

Во втором наборе входных данных:

\((0,0) \to (3,2) \to (4,4)\)

В третьем наборе входных данных:

\((0,0) \to (5,3) \to (3,6)\)

B. Мясник

геометрия жадные алгоритмы реализация сортировки *1900

Антон играет в свою любимую игру «Защита древних 2» за своего любимого героя — Мясника. Сейчас он хочет приготовить себе ужин. Для этого он возьмет прямоугольник высоты \(h\) и ширины \(w\), затем проведет вертикальный или горизонтальный разрез так, чтобы обе получившиеся части имели целые стороны. После этого одну из частей он положит в ящик, а другую снова разрежет, и так далее.

Более формально, прямоугольник размера \(h \times w\) можно разрезать на две части размеров \(x \times w\) и \((h - x) \times w\), где \(x\) является целым числом от \(1\) до \((h - 1)\), или же на две части размеров \(h \times y\) и \(h \times (w - y)\), где \(y\) является целым числом от \(1\) до \((w - 1)\).

Эту операцию он повторит \(n - 1\) раз, после чего оставшийся прямоугольник тоже положит в ящик. Таким образом, в ящике будет \(n\) прямоугольников, из которых \(n - 1\) прямоугольник был отложен в результате разрезов, а \(n\)-й прямоугольник — тот, что остался в руках Мясника после всех \(n - 1\) разрезов.

К сожалению, Мясник забыл числа \(h\) и \(w\), однако у него сохранились \(n\) прямоугольников, перемешанных в произвольном порядке. Обратите внимание, что Мясник не поворачивал прямоугольники, но, возможно, переупорядочил их. Теперь он хочет узнать все возможные пары \((h, w)\), из которых можно получить данный набор прямоугольников. А вы должны ему в этом помочь!

Гарантируется, что существует хотя бы одна пара \((h, w)\), из которой можно получить данный набор прямоугольников.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество полученных прямоугольников.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^6\)) — высота и ширина \(i\)-го прямоугольника.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одно целое число \(m\) — количество пар \((h, w)\), обозначающих размеры прямоугольников, из которых можно получить данные прямоугольники. Два прямоугольника считаются различными, если у них отличается длина или ширина.

В каждой из следующих \(m\) строк выведите два целых числа \(h_i\) и \(w_i\)  — высоту и ширину прямоугольника, из которого можно получить данные прямоугольники. Вы можете выводить прямоугольники в любом порядке.

Примечание

В первом наборе входных данных у Мясника мог быть только прямоугольник размером \(4 \times 5\). Тогда разрезы могли бы выглядеть следующим образом (сначала был сделан зеленый разрез, затем красный):

Во втором наборе входных данных у Мясника мог быть либо прямоугольник размером \(1 \times 3\), либо \(3 \times 1\). Разрезы выглядели бы так (сначала был сделан зеленый разрез, затем красный):

В третьем наборе входных данных Мясник не делал ни одного разреза, поэтому прямоугольник имеет размер \(10 \times 10\).

A. Поле битвы

геометрия графы кратчайшие пути реализация *2200

Вася плохо учился в университете и попал на поле битвы. Шутка. Он всего лишь играет в какую-то компьютерную игру. Поле представляет собой плоскую площадку, на которой выкопано n траншей. Траншеи — это отрезки на плоскости, параллельные осям координат. Никакие две траншеи не пересекаются.

Далеко от Васи находится огромный вражеский лазер. Лазер заряжается в течении a секунд, а после этого стреляет непрерывно в течении b секунд. Потом снова a секунд заряжается. Потом опять непрерывно в течении b секунд стреляет и так далее. Числа a и b известны Васе. Так же Васе известно, что во время выстрела лазера ему необходимо находиться в траншее, а в пока лазер заряжается, он может без опасений передвигаться по полю. Главное успеть до выстрела спрятаться в траншее. Если Вася добегает до траншеи ровно в момент начала выстрела лазера, считается, что Вася успел спрятаться. Так совпало, что длина любой траншеи в метрах численно не превосходит b.

Изначально Вася находится в точке A. Ему необходимо попасть в точку B. Вася передвигается со скоростью 1 метр в секунду в любом направлении. В траншею можно входить и из нее можно выходить в любой её точке. Вход и выход из траншеи осуществляется мгновенно. Так же по траншее можно передвигаться, не выходя из нее.

Какое минимальное время потребуется Васе, чтобы добраться из точки A в точку B, если в начальный момент времени лазер только что начал заряжаться? Если же Вася не может попасть из точки A в точку B, выведите -1. Если Вася достигнет точки B в момент начала выстрела лазера, то считается, что он успел дойти в точку B.

Входные данные

В первой строке заданы два целых числа через пробел: a и b (1 ≤ a, b ≤ 1000), — продолжительность процесса зарядки лазера и продолжительность выстрела лазера в секундах.

Во второй строке заданы четыре целых числа через пробел: Ax, Ay, Bx, By ( - 104 ≤ Ax, Ay, Bx, By ≤ 104) — координаты точек А и B. Гарантируется, что точки A и B не принадлежат никакой траншее.

В третьей строке задано единственное целое число: n (1 ≤ n ≤ 1000), — количество траншей.

В каждой из следующих n строк задано по четыре целых числа через пробел: x1, y1, x2, y2 ( - 104 ≤ xi, yi ≤ 104) — координаты концов соответствующей траншеи.

Все координаты заданы в метрах. Гарантируется, что для каждой траншеи либо x1 = x2, либо y1 = y2. Никакие две траншеи не пересекаются. Длина любой траншеи в метрах численно не превосходит b.

Выходные данные

Если Вася может попасть из точки A в точку B, то выведите минимальное время, которое ему для этого потребуется. Иначе выведите число -1.

Ответ будет считаться правильным, если абсолютная или относительная погрешность не превышает 10 - 4

F. Fading into Fog

геометрия интерактив математика Теория вероятностей *2800

Это интерактивная задача.

Есть \(n\) различных загаданных точек с вещественными координатами на двухмерной евклидовой плоскости. За один запрос вы можете спросить прямую \(ax + by + c = 0\) и получить в ответ проекции всех \(n\) точек на эту прямую в некотором порядке. Выводимые проекции могут быть неточными, прочтите секцию протокола взаимодействия для лучшего понимания.

Используя минимальное число запросов, найдите все \(n\) точек и выведите их в некотором порядке. Под минимальностью понимается минимальное число запросов, необходимое для решения любого набора входных данных из \(n\) точек.

Загаданные точки определяются заранее и не меняются во время взаимодействия. Другими словами, интерактор не адаптивен.

Проекцией точки \(A\) на прямую \(ax + by + c = 0\) является точка на прямой, ближайшая к \(A\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 50\)) — число наборов входных данных.

Далее следуют наборы входных данных.

В первой строке набора входных данных находится единственное целое число \(n\) (\(2 \leq n \leq 25\)) — число загаданных точек.

Для каждого набора входных данных гарантируется, что для любых двух загаданных точек их \(x\) координаты отличаются хотя бы на \(1\). Аналогично, \(y\) координаты любых двух точек отличаются хотя бы на \(1\).

Координаты \(x\) и \(y\) всех скрытых точек не превышают \(100\) по абсолютному значению.

Протокол взаимодействия

Чтобы запросить прямую \(ax + by + c = 0\), выведите «? a b c», где все a, b и c — вещественные числа до \(100\) по абсолютному значению. Для меньшей потери точности числа \(a\) и \(b\) должны удовлетворять условию \(|a| + |b| \geq 0.1\), где \(|a|\) — модуль числа \(a\).

В качестве ответа на запрос вы получите \(n\) точек в формате «x_1 y_1 ... x_n y_n», где точки \((x_i, y_i)\) являются проекциями загаданных точек на прямую \(ax + by + c = 0\) в некотором порядке. Гарантируется, что каждая выведенная точка находится на расстоянии не более \(10^{-4}\) от точной точки проекции. Каждая координата выводится с не более чем 9 знаками после запятой.

Смотрите пример взаимодействия для лучшего понимания.

Если вы сделаете слишком много запросов, то получите вердикт Wrong answer.

Чтобы вывести ответ, вы должны вывести «! x_1 y_1 ... x_n y_n», где \((x_i, y_i)\) — координаты загаданных точек. Загаданные точки можно выводить в любом порядке. Ответ будет считаться корректным, если каждая из выведенных точек будет на расстоянии не более \(10^{-3}\) от соответствующей загаданной. Вывод ответа не считается за запрос.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для того чтобы сделать взлом, используйте следующий формат теста.

В первой строке выведите одно целое число \(t\) (\(1 \leq t \leq 50\)) — число наборов входных данных.

Далее идет описание наборов входных данных.

В первой строке для набора входных данных выведите одно целое число \(n\) (\(2 \leq n \leq 25\)). В следующих \(n\) строках выведите по 2 числа. Числа в \(i\)-й строке должны соответствовать числам \(x_i\) и \(y_i\) соответственно. Выведенные точки должны удовлетворять условиям описанным в секции ввода.

Примечание

В примере загаданные точки \((1, 3)\) и \((2.5, 0.5)\)

Рисунок, объясняющий первый запрос:

Рисунок, объясняющий второй запрос:

B. Зоопарк

геометрия Перебор *1700

Зоопарк в Сеточном Королевстве представляет собой бесконечную сетку. В зоопарке есть n биноклей для наблюдения, расположенных на оси OX. Для каждого i от 1 до n включительно, существует ровно один бинокль, расположенный в точке с координатами (i, 0). В зоопарке есть m фламинго, расположенных в точках с положительными координатами. Сейчас фламинго спят и можно предположить, что они не двигаются.

Чтобы получше рассмотреть фламинго, любой бинокль может быть повернут на любой угол (не обязательно целый). После поворота с помощью бинокля можно увидеть всех фламинго, расположенных на прямой, проходящей через этот бинокль и направленной в сторону, в которую повернут бинокль. Другими словами, вы можете повернуть бинокль по направлению некоторой прямой, проходящей через этот бинокль, тогда с помощью бинокля можно будет увидеть всех фламинго, находящихся на этой прямой.

Сегодня несколько ребят из престижного садика Codeforces отправились в полевые исследования в зоопарк. Их учитель хотел бы повернуть каждый бинокль по направлению, при котором количество фламинго, которых можно увидеть в этот бинокль, максимально. Учителю интересна сумма этих значений по всем биноклям. Пожалуйста, помогите ему найти эту сумму.

Входные данные

Первая строка содержит два целых числа, записанных через пробел: n и m (1 ≤ n ≤ 106, 1 ≤ m ≤ 250) — количество биноклей и количество фламинго, соответственно.

Затем следуют m строк, на i-ой строке записаны через пробел два целых числа xi и yi (1 ≤ xi, yi ≤ 109), что означает, что i-ый фламинго находится в точке (xi, yi).

Все фламинго находятся в разных точках.

Выходные данные

Выведите единственное целое число — наибольшее общее количество фламинго, которых можно увидеть во все бинокли.

Примечание

Ответ на тест из примера проиллюстрирован ниже.

F. Монокарп и стратегия

геометрия сортировки *2700

Монокарп играет в стратегическую компьютерную игру, в которой он развивает город. Город населяют существа четырёх разных рас — люди, эльфы, орки и гномы.

У каждого жителя города есть настроение, которое выражается целым числом. Оно зависит от того, какие расы и в каком количестве населяют город. А именно: настроение каждого жителя по умолчанию равно \(0\); оно повышается на \(1\) за каждого другого жителя той же расы и понижается на \(1\) за каждого жителя враждебной расы. Люди враждуют с орками, а эльфы — с гномами.

В начале игры город Монокарпа никто не населяет. За игру к нему будет \(n\) раз приходить группа существ, желающих поселиться в его городе. В \(i\)-й группе \(a_i\) людей, \(b_i\) орков, \(c_i\) эльфов и \(d_i\) гномов. Каждый раз Монокарп может либо принять в город всю группу существ, либо отклонить (также всю группу).

Игра рассчитывает количество очков, которое набирает Монокарп, по формуле \(m + k\), где \(m\) — это количество жителей города, а \(k\) — суммарное настроение всех жителей.

Помогите Монокарпу набрать максимальное количество очков в конце игры!

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 3 \cdot 10^{5}\)) — число групп существ, которые приходят к Монокарпу.

Далее следуют \(n\) строк. В \(i\)-й из них заданы четыре целых числа \(a_i\), \(b_i\), \(c_i\) и \(d_i\) (\(0 \leq a_i, b_i, c_i, d_i \leq 10^{9}\)) — число людей, орков, эльфов и гномов в \(i\)-й группе соответственно.

Выходные данные

Выведите одно число — максимальное количество очков, которое может набрать Монокарп. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит \(10^{-9}\). То есть если ваш ответ — \(a\), а ответ жюри — \(b\), то решение будет засчитано, если \(\frac{|a-b|}{\max(1,|b|)} \le 10^{-9}\).

Обратите внимание, что правильный ответ всегда целый, но он может не помещаться в \(64\)-битные целочисленные типы данных, поэтому вы можете вывести ответ как нецелое число.

Примечание

В первом примере лучшим вариантом действий будет принять все группы.

Во втором примере лучшим вариантом действий будет принять группы \(2\) и \(3\), а отклонить группы \(1\) и \(4\).

E. Тенцинг и треугольник

геометрия дп жадные алгоритмы математика Структуры данных *2300

На двумерной плоскости имеется \(n\) попарно различных точек и прямая \(x+y=k\). Точка \(i\) находится в точке \((x_i,y_i)\). Все точки имеют неотрицательные координаты и находятся строго под прямой. Другими словами, \(0 \leq x_i,y_i, x_i+y_i < k\).

Тенцинг хочет стереть все точки. Он может выполнить следующие две операции:

  1. Нарисовать треугольник: Тенцинг выберет два неотрицательных целых числа \(a\), \(b\), которые удовлетворяют условию \(a+b<k\), тогда все точки внутри треугольника, образованного прямыми \(x=a\), \(y=b\) и \(x+y=k\) будут стерты. Можно показать, что этот треугольник является равнобедренным прямоугольным треугольником. Пусть длины сторон треугольника равны \(l\), \(l\) и \(\sqrt 2 l\) соответственно. Тогда стоимость этой операции равна \(l \cdot A\).

    Синяя область следующего рисунка описывает треугольник с \(a=1,b=1\) со стоимостью \(=1\cdot A\).

  2. Стереть определенную точку: Тенцинг выбирает целое число \(i\), которое удовлетворяет условию \(1 \leq i \leq n\) и стирает точку \(i\). Стоимость этой операции равна \(c_i\).

Помогите Тенцингу найти минимальную стоимость стирания всех точек.

Входные данные

Первая строка содержит три целых числа \(n\), \(k\) и \(A\) (\(1\leq n,k\leq 2\cdot 10^5\), \(1\leq A\leq 10^4\)) — количество точек, коэффициент, описывающий гипотенузу треугольника и коэффициент, описывающий стоимость построения треугольника.

В следующих \(n\) строках входных данных \(i\)-я строка содержит три целых числа \(x_i,y_i,c_i\) (\(0\leq x_i,y_i,x_i+y_i< k\), \(1\leq c_i\leq 10^4\)) — координаты \(i\)-й точки и стоимость ее стирания с помощью второй операции. Гарантируется, что координаты попарно различны.

Выходные данные

Выведите одно целое число –минимальную стоимость стирания всех точек.

Примечание

Рисунок первого примера:

Тенцинг выполняет следующие операции:

  1. построить треугольник с \(a=3,b=2\), стоимость \(=1\cdot A=1\).
  2. стереть первую точку, стоимость \(=1\).
  3. стереть вторую точку, стоимость \(=1\).
  4. стереть третью точку, стоимость \(=1\).

Рисунок для второго примера:

B. Идем вместе

геометрия математика реализация *900

Боб и Кэрол провели целый день вместе с Алисой, но пришла пора идти домой. Алиса, Боб и Кэрол живут на бесконечной двумерной плоскости в клетках \(A\), \(B\) и \(C\) соответственно. Сейчас все трое находятся в клетке \(A\).

Если Боб (или Кэрол) находится в некоторой клетке, то он (она) может переместиться в одну из ее соседних клеток. Две клетки называются соседними, если они имеют общую сторону. Например, у клетки \((3, 5)\) есть четыре соседние клетки: \((2, 5)\), \((4, 5)\), \((3, 6)\) и \((3, 4)\).

Боб хочет вернуться в клетку \(B\), Кэрол — в клетку \(C\). Каждый из них хочет вернуться домой по кратчайшему пути, т. е. по пути, который состоит из наименьшего возможного количества клеток. Но также они хотели бы идти вместе.

Какое наибольшее возможное количество клеток Боб и Кэрол смогут пройти вместе, если каждых из них идет домой по одному из кратчайших путей?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных заданы два целых числа \(x_A\) и \(y_A\) (\(1 \le x_A, y_A \le 10^8\)) — позиция клетки \(A\), где сейчас находятся Боб и Кэрол.

Во второй строке каждого набора заданы два целых числа \(x_B\) и \(y_B\) (\(1 \le x_B, y_B \le 10^8\)) — позиция клетки \(B\) (дом Боба).

В третьей строке каждого набора заданы два целых числа \(x_C\) и \(y_C\) (\(1 \le x_C, y_C \le 10^8\)) — позиция клетки \(C\) (дом Кэрол).

Дополнительное ограничение на входные данные: в пределах одного набора клетки \(A\), \(B\) \(C\) — попарно различные.

Выходные данные

Для каждого набора входных данных, выведите одно целое число — максимально возможное количество клеток, которые Боб и Кэрол могут пройти вместе, если каждый из них идет домой по одному из кратчайших путей.

Примечание

Во всех картинках, красным обозначены клетки, лежащие только на пути Боба; светло-синим — клетки на пути только Кэрол, а темно-синим — общие для Боба и Кэрол клетки.

Один из оптимальных ответов для первого набора входных данных изображен ниже:

Путь Боба состоит из \(5\) клеток, путь Кэрол — из \(7\) клеток, и они пройдут \(3\) клетки вместе.

Оптимальный ответ для второго набора изоборажен ниже:

Путь Боба состоит из \(4\) клеток, путь Кэрол — из \(3\) клеток, и они пройдут вместе только \(1\) клетку.

Один из оптимальных ответов для третьего набора изображен ниже:

Путь Боба состоит из \(6\) клеток, путь Кэрол — из \(9\) клеток, и они пройдут \(6\) клеток вместе.

D. Рудольф и елочка

геометрия Конструктив математика *1200

Рудольф нарисиовал красивую елочку и решил распечатать рисунок. Но краска в картридже часто заканчивается в самый неподходящий момент. Поэтому Рудольф хочет заранее посчитать, сколько зеленой краски ему понадобится.

Елочка представляет собой вертикальный ствол, на котором на разной высоте располагаются одинаковые треугольные ветки. Толщина ствола пренебрежимо мала.

Каждая ветка представляет собой равнобедренный треугольник с основанием \(d\) и высотой \(h\), основание которого перпендикулярно стволу. Треугольники располагаются углом вверх, и ствол проходит ровно посередине. Основание \(i\)-го треугольника находится на высоте \(y_i\).

На рисунке изображен пример елочки с \(d = 4, h = 2\) и тремя ветками с основаниями в координатах \([1, 4, 5]\).

Помогите Рудольфу вычислить суммарную площадь веток елочки.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов.

Первая строка набора содержит три целых числа \(n, d, h\) (\(1 \le n, d, h \le 2 \cdot 10^5\)) — количество веток елочки, длина основания и высота веток, соответственно.

Вторая строка набора содержит \(n\) целых чисел \(y_i\) \((1 \le y_i \le 10^9, y_1 < y_2 < ... < y_n)\) — координаты оснований веток.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно вещественное число — суммарная площадь веток елочки. Ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

E. Картон для картин

Бинарный поиск геометрия математика реализация *1100

У Мирчи есть \(n\) картин. \(i\)-я картина является квадратом со стороной \(s_i\) сантиметров.

Он прикрепил каждую картину к квадратному куску картона так, чтобы у каждой картинки был картон шириной \(w\) сантиметров со всех сторон. Всего он использовал \(c\) квадратных сантиметров картона. Зная размеры картин и значение \(c\), сможете ли вы найти значение \(w\)?

Картинка первого тестового примера. Здесь \(c = 50 = 5^2 + 4^2 + 3^2\), поэтому ответ \(w=1\).

Обратите внимание, что кусок картона находится за каждой картинкой, а не только по краям.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два положительных целых числа \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) и \(c\) (\(1 \leq c \leq 10^{18}\)) — количество картин и количество использованных квадратных сантиметров картона.

Вторая строка каждого набора содержит \(n\) целых чисел, разделенных пробелами, \(s_i\) (\(1 \leq s_i \leq 10^4\)) — размеры картин.

Сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Дополнительное ограничение на ввод: Для каждого набора входных данных существует такое целое число \(w\).

Пожалуйста, обратите внимание, что некоторые наборы входных данных могут не поместиться в 32-разрядный целочисленный тип, поэтому вам следует использовать по крайней мере 64-разрядный целочисленный тип в вашем языке программирования (например, long long для C++).

Выходные данные

Для каждого набора входных данных выведите одно целое число — значение \(w\) (\(w \geq 1\)), при котором понадобится ровно \(c\) квадратных сантиметров картона.

Примечание

Первый пример объяснен в условии.

Для второго примера выбрано значение \(w\) равное \(2\), таким образом, площадь, покрытая картоном, составляет \(c = (2 \cdot 2 + 6)^2 = 10^2 = 100\) квадратных сантиметров.

Для третьего примера выбрано значение \(w\) равное \(4\), что дает площадь покрытия \(c = (2 \cdot 4 + 2)^2 \times 5 = 10^2 \times 5 = 100 \times 5 = 500\) квадратных сантиметров.

G. The Morning Star

геометрия Комбинаторика математика реализация сортировки Структуры данных *1500

Компас указывает прямо на утреннюю звезду. Он может указывать только в одном из восьми направлений: четыре основных направления (N, S, E, W) или их комбинации (NW, NE, SW, SE). В противном случае, он сломается.

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

На плоскости находится \(n\) различных точек с целочисленными координатами. Сколько существует способов разместить компас в одной точке и утреннюю звезду в другой, чтобы компас не сломался?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Затем следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество точек.

Затем следуют \(n\) строк, каждая строка содержит два целых числа \(x_i\), \(y_i\) (\(-10^9 \leq x_i, y_i \leq 10^9\)) — координаты каждой точки.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество пар точек, которые не сломают компас.

Примечание

В первом примере, любая пара точек не сломает компас:

  • Компас находится в \((0,0)\), утренняя звезда находится в \((-1,-1)\): компас будет указывать \(\text{SW}\).
  • Компас находится в \((0,0)\), утренняя звезда находится в \((1,1)\): компас будет указывать \(\text{NE}\).
  • Компас находится в \((-1,-1)\), утренняя звезда находится в \((0,0)\): компас будет указывать \(\text{NE}\).
  • Компас находится в \((-1,-1)\), утренняя звезда находится в \((1,1)\): компас будет указывать \(\text{NE}\).
  • Компас находится в \((1,1)\), утренняя звезда находится в \((0,0)\): компас будет указывать \(\text{SW}\).
  • Компас находится в \((1,1)\), утренняя звезда находится в \((-1,-1)\): компас будет указывать \(\text{SW}\).

Во втором примере, только две пары точек не сломают компас:

  • Компас находится в \((6,9)\), утренняя звезда находится в \((10,13)\): компас будет указывать \(\text{NE}\).
  • Компас находится в \((10,13)\), утренняя звезда находится в \((6,9)\): компас будет указывать \(\text{SW}\).

F. Вычисляем ПСП

геометрия математика реализация сортировки Структуры данных *2900

Заданы \(2n\) наборов \((a, b, c)\), где \(a\) и \(b\) — некоторые положительные целые числа, а \(c\) — скобка '(' или ')'. В ровно \(n\) наборах \(c = \)'(', в остальных \(n\) — \(c =\) ')'.

Требуется выбрать два положительных числа \(x\) и \(y\) (\(x > 0\) и \(y > 0\); не обязательно целые) и отсортировать наборы в порядке возрастания \(a \cdot x + b \cdot y\). Если у нескольких наборов одно и то же значение, то их можно расположить в произвольном порядке друг между другом.

Можно ли выбрать такие значения \(x\) и \(y\), что, взяв скобки \(c\) из наборов в полученном порядке, мы получим правильную скобочную последовательность?

Правильной скобочной последовательностью называется скобочная последовательность, которую можно преобразовать в корректное арифметическое выражение путем вставок между ее символами символов «1» и «+».

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1500\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 1500\)).

В \(i\)-й из следующих \(2n\) строк записаны два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^6\)) и символ \(c_i\) (\(c_i = \)'(' или \(c_i = \)')'). В ровно \(n\) наборах \(c_i = \)'(', в остальных \(n\) — \(c_i =\) ')'.

Сумма \(n\) по всем наборам входных данных не превосходит \(1500\).

Выходные данные

На каждый набор входных данных выведите «YES», если возможно выбрать такие значения \(x\) и \(y\), что, взяв скобки \(c\) из наборов в полученном порядке, мы получим правильную скобочную последовательность. Иначе выведите «NO».

Примечание

В первом наборе входных данных можно выбрать \(x = 10, y = 0.1\). Значения для наборов тогда будут \(10 \cdot 1 + 0.1 \cdot 4 = 10.4\) и \(10 \cdot 2 + 0.1 \cdot 3 = 20.3\). Тогда сначала будет первый набор, за ним второй, из чего получается скобочная последовательность «()», которая является правильной.

Во втором наборе невозможно выбрать такие положительные \(x\) и \(y\), что открывающей скобке будет присвоено значение, меньше или равное значению закрывающей скобки.

В четвертом наборе можно выбрать \(x = 0.6, y = 0.55\). Скобочная последовательность будет «(()(()))».

K. Keen Tree Calculation

Бинарный поиск геометрия графы Деревья дп реализация Структуры данных *2500

There is a tree of \(N\) vertices and \(N-1\) edges. The \(i\)-th edge connects vertices \(U_i\) and \(V_i\) and has a length of \(W_i\).

Chaneka, the owner of the tree, asks you \(Q\) times. For the \(j\)-th question, the following is the question format:

  • \(X_j\) \(K_j\) – If each edge that contains vertex \(X_j\) has its length multiplied by \(K_j\), what is the diameter of the tree?

Notes:

  • Each of Chaneka's question is independent, which means the changes in edge length do not influence the next questions.
  • The diameter of a tree is the maximum possible distance between two different vertices in the tree.
Input

The first line contains a single integer \(N\) (\(2\leq N\leq10^5\)) — the number of vertices in the tree.

The \(i\)-th of the next \(N-1\) lines contains three integers \(U_i\), \(V_i\), and \(W_i\) (\(1 \leq U_i,V_i \leq N\); \(1\leq W_i\leq10^9\)) — an edge that connects vertices \(U_i\) and \(V_i\) with a length of \(W_i\). The edges form a tree.

The \((N+1)\)-th line contains a single integer \(Q\) (\(1\leq Q\leq10^5\)) — the number of questions.

The \(j\)-th of the next \(Q\) lines contains two integers \(X_j\) and \(K_j\) as described (\(1 \leq X_j \leq N\); \(1 \leq K_j \leq 10^9\)).

Output

Output \(Q\) lines with an integer in each line. The integer in the \(j\)-th line represents the diameter of the tree on the \(j\)-th question.

Note

In the first example, the following is the tree without any changes.

The following is the tree on the \(1\)-st question.

The maximum distance is between vertices \(6\) and \(7\), which is \(6+6+6=18\), so the diameter is \(18\).

The following is the tree on the \(2\)-nd question.

The maximum distance is between vertices \(2\) and \(6\), which is \(3+2+6=11\), so the diameter is \(11\).

B. 2D Путешествие

геометрия кратчайшие пути математика сортировки *1100

Piggy живет на бесконечной плоскости с декартовой системой координат.

На плоскости есть \(n\) городов, пронумерованных от \(1\) до \(n\), и первые \(k\) городов являются крупными. Координаты \(i\)-го города равны \((x_i,y_i)\).

Piggy, как опытный путешественник, хочет совершить расслабляющую поездку после экзамена. В данный момент он находится в городе \(a\), и хочет добраться до города \(b\) на самолете. Между любыми двумя городами можно совершить перелёт, а также можно посещать несколько городов во время путешествия, но конечным пунктом должен быть город \(b\).

Из-за активной торговли между крупными городами можно путешествовать на самолете между ними бесплатно. Формально, цена авиабилета \(f(i,j)\) между двумя городами \(i\) и \(j\) определяется следующим образом:

\(\) f(i,j)= \begin{cases} 0, & \text{если оба города }i \text{ и }j \text{ являются крупными городами} \\ |x_i-x_j|+|y_i-y_j|, & \text{в противном случае} \end{cases} \(\)

Piggy не хочет экономить время, но хочет сэкономить деньги. Поэтому вам нужно сказать ему минимальное значение суммарной стоимости всех авиабилетов, если он может совершить произвольное количество перелётов.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа \(n\), \(k\), \(a\) и \(b\) (\(2\le n\le 2\cdot 10^5\), \(0\le k\le n\), \(1\le a,b\le n\), \(a\ne b\)) — количество городов, количество крупных городов и номера начального и конечного городов.

Затем следуют \(n\) строк, \(i\)-я строка содержит два целых числа \(x_i\) и \(y_i\) (\(-10^9\le x_i,y_i\le 10^9\)) — координаты \(i\)-го города. Первые \(k\) строк описывают крупные города. Гарантируется, что все координаты попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное значение суммарной стоимости всех авиабилетов.

Примечание

В первом наборе входных данных:

Крупные города отмечены красным.

Оптимальный способ выбора перелётов: \(3\rightarrow 1 \rightarrow 2 \rightarrow 5\), что будет стоить \(3+0+1=4\). Обратите внимание, что перелёт \(1\rightarrow 2\) стоит \(0\), потому что города \(1\) и \(2\) являются крупными городами.

Во втором наборе входных данных, так как всего \(2\) города, единственный способ — совершить перелёт из города \(1\) в город \(2\).

В третьем наборе входных данных, так как города \(2\) и \(4\) являются крупными городами, Piggy может взять прямой рейс из города \(2\) в город \(4\), что будет стоить \(0\).

В четвертом наборе входных данных, Piggy может совершить перелёты \(3\rightarrow 2\rightarrow 1\), и стоимость будет \(11+11=22\).

B. Fear of the Dark

Бинарный поиск геометрия математика *1200

Монокарп пытается добраться домой с работы. В данный момент он находится в точке \(O = (0, 0)\) двумерной координатной плоскости; его дом находится в точке \(P = (P_x, P_y)\).

К сожалению, уже поздний вечер, и поэтому очень темно. Монокарп боится темноты. Он хотел бы идти домой по освещенному пути.

К счастью, есть два фонаря, расположенные в точках \(A = (A_x, A_y)\) и \(B = (B_x, B_y)\). Вы можете выбрать любое неотрицательное число \(w\) и установить мощность обоих фонарей равной \(w\). Если мощность фонаря установлена на \(w\), то он освещает круг радиусом \(w\) с центром в месте расположения фонаря (включая границы круга).

Вам нужно выбрать минимальное неотрицательное значение \(w\) для мощности фонарей таким образом, чтобы существовал полностью освещенный путь от точки \(O\) до точки \(P\). Считайте, что фонари не мешают движению Монокарпа.

Картинка, показывающая первые два набора входных данных
Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • первая строка содержит два целых числа \(P_x\) и \(P_y\) (\(-10^3 \le P_x, P_y \le 10^3\)) — местоположение дома Монокарпа;
  • вторая строка содержит два целых числа \(A_x\) и \(A_y\) (\(-10^3 \le A_x, A_y \le 10^3\)) — местоположение первого фонаря;
  • третья строка содержит два целых числа \(B_x\) и \(B_y\) (\(-10^3 \le B_x, B_y \le 10^3\)) — местоположение второго фонаря.

Дополнительное ограничение на входные данные:

  • в каждом наборе входных данных точки \(O\), \(P\), \(A\) и \(B\) не совпадают друг с другом.
Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке — одно вещественное число, равное минимальному значению \(w\), при котором существует полностью освещенный путь от точки \(O\) до точки \(P\).

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превышает \(10^{-6}\) — формально, если ваш ответ равен \(a\), а ответ жюри равен \(b\), ваш ответ будет принят, если \(\dfrac{|a - b|}{\max(1, b)} \le 10^{-6}\).

B. Окружение

геометрия *1800

Вот началась, точнее возобновилась, война Берляндии с вечным врагом Флатландией, и бухгалтер Вася был призван отдать долг Родине.

Пока что дела у берляндцев идут ужасно — оба их города окружены! Строи флатландцев стоят на границах окружностей с центрами в окружаемых городах. В любой момент все точки одного из колец могут начать стремительно двигаться в сторону города — так привыкли флатландцы захватывать города.

Берляндцы уверены, что смогут отразить атаку врага, если будут знать точное время наступления. Для этого должен быть изготовлен радар, регистрирующий любое движение на расстоянии не больше r от себя. Таким образом, если радар будет установлен в такой точке, что хотя бы одна точка вражеского кольца будет в зоне его видимости (то есть, на расстоянии не больше чем r), то радар сможет сообщить о начале нападения мгновенно.

Благодаря новейшим технологиям, радар может быть без проблем помещен в любой требуемой точке. Проблема же заключается в том, что берляндцы успеют изготовить лишь один радар, кроме того, чем больше радиус действия устройства (r), тем оно дороже.

Поэтому задание Васи (а, значит, и Ваше) — найти минимальный возможный радиус действия радара. Другими словами, требуется найти минимальный радиус r (r ≥ 0) такой, что радар с радиусом r можно установить в какой-нибудь точке, в которой он сможет зарегистрировать начало движения обоих колец флатландцев.

В рамках данной задачи города можно считать материальными точками, кольца атакующих войск — окружностями с центрами в городах, а зону видимости радара — кругом (включая границу) с центром в точке, в которой радар стоит.

Входные данные

Входные данные состоят из двух строк. Каждая строка представляет собой описание города и кольца флатландцев вокруг него в виде трех целых чисел, записанных через пробел, xi, yi, ri (|xi|, |yi| ≤ 104; 1 ≤ ri ≤ 104) — координаты города и расстояние от города до флатландцев, соответственно.

Гарантируется, что города расположены в разных точках.

Выходные данные

Выведите единственное вещественное число — минимальный радиус действия описываемого устройства. Ответ считается правильным, если абсолютная или относительная погрешность не превосходит 10 - 6.

Примечание

На рисунке ниже показан ответ для первого примера. В этом примере выгоднее всего установить радар в точку с координатами (2, 0).

На рисунке ниже показан ответ для второго примера. В этом примере выгоднее всего установить радар в точку с координатами (0, 0).

F. Благоустройство

Бинарный поиск геометрия *2900

Вас назначили на очень важное дело: подготовиться к выравниванию одной особой дороги.

Дорогу можно представить как ломаную линию, начинающуюся в \((0, 0)\) и заканчивающуюся в \((n - 1, 0)\), которая состоит из \(n\) вершин (включая стартовую и финишную). Координаты \(i\)-й вершины ломаной равны \((i, a_i)\).

«Выравнивание» дороги эквивалентно выбору некоторого отрезка из \((0, y_0)\) в \((n - 1, y_1)\) такого, что все точки ломаной находятся ниже выбранного отрезка (или на той же высоте). Значения \(y_0\) и \(y_1\) могут быть действительными числами.

Вы можете представить, что первоначально на дороге есть всякие ямы и ухабы, и вы начинаете насыпать на нее покрытие, пока не сделаете ее ровной. Для простоты, в точках \(0\) и \(n - 1\) находятся бесконечно высокие стены, а потому покрытие не вываливается наружу отрезка \([0, n - 1]\).

Цена выровненной дороги равна площади между выбранным отрезком и ломаной. Вы хотите минимизировать эту цену, а потому выровненная дорога будет необязательно горизонтальной.

Но есть одна проблема: ваша информация могла устареть. А потому вы отправили специального человека померить новые высоты. Этот человек идет из \(0\) в \(n - 1\) и посылает вам новые высоты \(b_i\) для каждой вершины \(i\) ломаной.

Так как подсчет новых высот может занять много времени, а вы не знаете, когда вас попросят отчитаться, посчитайте наименьшую цену (и соответствующие \(y_0\) и \(y_1\)) для выравнивания дороги после получения каждого нового значения \(b_i\).

Входные данные

В первой строке задано одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество вершин ломаной.

Во второй строке заданы \(n\) целых чисел \(a_0, a_1, \dots, a_{n - 1}\) (\(0 \le a_i \le 10^9\); \(a_0 = a_{n - 1} = 0\)) — высоты соответствующих вершин.

В третьей строке заданы \(n\) целых чисел \(b_0, b_1, \dots, b_{n - 1}\) (\(0 \le b_i \le 10^9\); \(b_0 = b_{n - 1} = 0\)) — новые высоты соответствующих вершин.

Выходные данные

Выведите \(n\) чисел: \(i\)-м числом (\(0\)-индексация) выведите \(y_0 + y_1\) «лучшего отрезка» (т. е. сумму координат отрезка, который имеет минимальную цену), если вы уже знаете новые значения высот \(b_0, \dots, b_i\).

Если существует несколько «лучших отрезков», выведите наименьшее возможное значение \(y_0 + y_1\).

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-9}\).

Формально, пусть ваш ответ равен \(x\), а ответ жюри равен \(y\). Ваш ответ будет зачтен, если и только если \(\frac{|x - y|}{\max{(1, |y|)}} \le 10^{-9}\).

Примечание

Первый ответ на первый пример изображен выше.

Вы можете получить второй ответ, выбрав следующий «лучший отрезок»:

Вы можете достигнуть третий ответ, используя следующий «лучший отрезок»:

Вы можете получить четвертый ответ следующим образом:

D. Spaceship Exploration

Бинарный поиск геометрия *2800

In The ICPC Galaxy, there exists a zone filled with asteroids that is unsafe to enter. The map of the galaxy is represented in a 2D Cartesian coordinate system. The zone is in the shape of an \(N\)-sided convex polygon. Each corner is numbered from \(1\) to \(N\); corner \(i\) is located at \((X_i, Y_i)\). At any moment, you should not be inside this polygon; however, it is safe to touch the side of the polygon.

There are \(Q\) scenarios (numbered from \(1\) to \(Q\)). In scenario \(j\), you want to go from a starting point at \((A_j, B_j)\) to an ending point at \((C_j, D_j)\). You will be riding on a special spaceship that can only travel in a straight line. First, you set the direction of the spaceship, then the spaceship will start traveling in that direction. During the travel, you are only allowed to change direction at most once. Changing direction means you stop the spaceship, set a new direction, and then start traveling again in the new direction.

For each scenario, determine the minimum distance required to travel without being inside of the zone at any moment, or report if it is impossible to reach the ending point.

Input

The first line consists of an integer \(N\) (\(3 \leq N \leq 100\,000\)).

Each of the next \(N\) lines consists of two integers \(X_i\) \(Y_i\) (\(-10^9 \leq X_i, Y_i \leq 10^9\)). The points form a convex polygon in counterclockwise order. There are no three points which are collinear.

The following line consists of an integer \(Q\) (\(1 \leq Q \leq 100\,000\)).

Each of the next \(Q\) lines consists of four integers \(A_j\) \(B_j\) \(C_j\) \(D_j\) (\(-10^9 \leq A_j, B_j, C_j, D_j \leq 10^9\)). There are no starting points and ending points inside the zone. However, it is possible for the starting point and the ending point to be at the side of the zone.

All the coordinates in the input are integers.

Output

For each scenario, output the answer in a single line.

If it is possible to reach the ending point without being inside the zone at any moment, then output the minimum distance required to travel. Otherwise, output -1.

Your answer is considered correct if its absolute error or relative error does not exceed \(10^{-6}\). Namely, if your answer is \(a\) and the jury's answer is \(b\), then your answer is accepted if \(\frac{|a - b|}{\max(1, |b|)} \leq 10^{-6}\).

Note

Explanation for the sample input/output #1

This sample is depicted in the following illustration.

During scenario \(1\) and \(4\), you can directly go to the ending point without changing the direction.

During scenario \(2\), you can go to \((0, 2)\), then change direction to the ending point.

During scenario \(3\), you can go to \((6, 2)\), then change direction to the ending point.

During scenario \(5\), it can be shown that it is impossible to reach the ending point.

D. Математическое задание

геометрия Конструктив математика Перебор *1700

Математикам 31 лицея было предложено следующее задание:

Вам дано нечетное число \(n\) и вам нужно подобрать \(n\) различных чисел, которые являются квадратами целых чисел. Но не всё так просто. Каждое число должно быть длины \(n\) (и при этом не иметь ведущих нулей) и мультимножество цифр всех чисел должно совпадать. Например, у \(\mathtt{234}\) и \(\mathtt{432}\), \(\mathtt{11223}\) и \(\mathtt{32211}\) мультимножества цифр совпадают, а у \(\mathtt{123}\) и \(\mathtt{112233}\) нет.

Математики не справились с этой задачей, а сможете ли вы?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Следующие \(t\) строк содержат одно целое нечетное число \(n\) (\(1 \leq n \leq 99\)) — количество чисел, которые нужно подобрать и их длина.

Гарантируется, что при заданных ограничениях решение существует.

Гарантируется, что сумма по \(n^2\) не превосходит \(10^5\).

Числа можно выводить в любом порядке.

Выходные данные

Для каждого набора нужно вывести \(n\) чисел длины \(n\) — ответ на задачу.

Если существует несколько вариантов ответа, выведите любой.

Примечание

Ниже показано квадратами каких чисел являются ответы для второго набора входных данных:

\(\mathtt{169}\) = \(\mathtt{13}^2\)

\(\mathtt{196}\) = \(\mathtt{14}^2\)

\(\mathtt{961}\) = \(\mathtt{31}^2\)

Ниже показано квадратами каких чисел являются ответы для третьего набора входных данных:

\(\mathtt{16384}\) = \(\mathtt{128}^2\)

\(\mathtt{31684}\) = \(\mathtt{178}^2\)

\(\mathtt{36481}\) = \(\mathtt{191}^2\)

\(\mathtt{38416}\) = \(\mathtt{196}^2\)

\(\mathtt{43681}\) = \(\mathtt{209}^2\)

F2. Спокойное плавание (сложная версия)

Бинарный поиск геометрия графы Деревья снм Структуры данных *3000

Единственное отличие двух версий этой задачи состоит в ограничении на \(q\). Вы можете делать взломы, только если обе версии задачи решены.

Томас плавает вокруг острова, окружённого океаном. Океан и остров можно представить в виде таблицы с \(n\) строками и \(m\) столбцами. Строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы от \(1\) до \(m\) слева направо. Позицию клетки в строке \(r\) и в столбце \(c\) обозначим как \((r, c)\). Ниже приведен пример допустимой таблицы.

Пример допустимой таблицы

Существует три типа клеток: остров, океан и подводный вулкан. Клетки, представляющие остров, отмечены символом '#', клетки, представляющие океан, отмечены символом '.', а клетки, представляющие подводный вулкан, отмечены символом 'v'. Гарантируется, что есть хотя бы одна клетка острова и хотя бы одна клетка подводного вулкана. Также гарантируется, что множество всех клеток острова образует единую связную компоненту\(^{\dagger}\), и множество всех клеток океана и подводных вулканов также образует единую связную компоненту. Кроме того, гарантируется, что на краю таблицы (то есть, в строке \(1\), в строке \(n\), в столбце \(1\) и в столбце \(m\)) нет клеток острова.

Определим круговой маршрут, проходимый Томасом, начинающийся в клетке \((x, y)\), как путь, который удовлетворяет следующим условиям:

  • Путь начинается и заканчивается в клетке \((x, y)\).
  • Если Томас находится в клетке \((i, j)\), то он может перейти в клетки \((i+1, j)\), \((i-1, j)\), \((i, j-1)\) и \((i, j+1)\), при условии, что клетка, в которую он переходит, является клеткой океана или подводного вулкана и находится внутри таблицы. Обратите внимание, что Томасу разрешается посещать одну и ту же клетку несколько раз за один круговой маршрут.
  • Путь должен обойти остров и полностью его окружить. Некоторый путь \(p\) полностью окружает остров, если невозможно добраться от клетки острова до клетки на границе таблицы, перемещаясь только в соседние по стороне или диагонали клетки, не посещая при этом клетку на пути \(p\). На изображении ниже путь, начинающийся в \((2, 2)\), приходящий в \((1, 3)\) и возвращающийся в \((2, 2)\) в обратную сторону, не полностью окружает остров и не считается круговым маршрутом.
Пример пути, который не полностью окружает остров

Безопасность кругового маршрута — это минимальное манхэттенское расстояние\(^{\ddagger}\) от клетки на круговом маршруте до подводного вулкана (обратите внимание, что наличие клеток острова не влияет на это расстояние).

У вас есть \(q\) запросов. Запрос можно представить как \((x, y)\), и для каждого запроса вы хотите найти максимальную безопасность кругового маршрута, начинающегося в \((x, y)\). Гарантируется, что \((x, y)\) является клеткой океана или подводного вулкана.

\(^{\dagger}\)Множество клеток образует единую связную компоненту, если из любой клетки этого множества можно добраться до любой другой клетки этого множества, перемещаясь только по клеткам этого множества, каждый раз переходя в клетку с общей стороной.

\(^{\ddagger}\)Манхэттенское расстояние между клетками \((r_1, c_1)\) и \((r_2, c_2)\) равно \(|r_1 - r_2| + |c_1 - c_2|\).

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(q\) (\(3 \leq n, m \leq 10^5\), \(9 \leq n \cdot m \leq 3 \cdot 10^5\), \(1 \leq q \leq 3 \cdot 10^5\)) — количество строк и столбцов таблицы и количество запросов.

Каждая из следующих \(n\) строк содержит \(m\) символов, описывающих клетки таблицы. Символ '#' обозначает клетку острова, '.' обозначает клетку океана, и 'v' обозначает клетку подводного вулкана.

Гарантируется, что есть хотя бы одна клетка острова и хотя бы одна клетка подводного вулкана. Гарантируется, что множество всех клеток острова образует единую связную компоненту, и множество всех клеток океана и подводных вулканов также образует единую связную компоненту. Также гарантируется, что нет клеток острова на краю таблицы (то есть, в строке \(1\), в строке \(n\), в столбце \(1\) и в столбце \(m\)).

Следующие \(q\) строк описывают запросы. Каждая из этих строк содержит два целых числа \(x\) и \(y\) (\(1 \leq x \leq n\), \(1 \leq y \leq m\)), обозначающие круговой маршрут, начинающийся в \((x, y)\).

Гарантируется, что \((x, y)\) является клеткой океана или подводного вулкана.

Выходные данные

Для каждого запроса выведите одно целое число — максимальную безопасность кругового маршрута, начинающегося в указанной клетке.

Примечание

Для первого примера на изображении ниже показан оптимальный круговой маршрут, начинающийся в \((1, 1)\). Безопасность кругового маршрута равна \(3\), так как минимальное манхэттенское расстояние от клетки на круговом маршруте до подводного вулкана равно \(3\).

Пример оптимального кругового маршрута

В четвёртом примере помните, что Томасу разрешается посещать одну и ту же клетку несколько раз за один круговой маршрут. Например, это необходимо для кругового маршрута, начинающегося в \((7, 6)\).

C. Фрактальное оригами

геометрия математика матрицы *2400

У вас есть квадратный лист бумаги со стороной длиной \(1\) единица. За одну операцию вы складываете каждый угол квадрата к центру, образуя таким образом еще один квадрат со стороной длины \(\dfrac{1}{\sqrt{2}}\) единицы. Взяв этот квадрат в качестве нового квадрата, вы выполняете операцию снова и повторяете этот процесс в общей сложности \(N\) раз.

Выполнение операций для \(N = 2\).

После выполнения всех операций вы раскрываете бумагу той же стороной, с которой начали, и видите на ней некоторые линии сгиба. Каждая линия сгиба является одной из двух типов, горой или долиной, гора — это когда бумага складывается наружу, а долина — когда бумага складывается внутрь.

Вычислите сумму длин всех линий горных изгибов на бумаге и назовите ее \(M\). Аналогично вычислите сумму длин для линий долин и назовите ее \(V\). Необходимо найти значение \(\dfrac{M}{V}\).

Можно доказать, что это значение можно представить в виде \(A + B\sqrt{2}\), где \(A\) и \(B\) — рациональные числа. Пусть \(B\) будет представлено в виде несократимой дроби \(\dfrac{p}{q}\), ваша задача — напечатать \(p*inv(q)\) по модулю \(999\,999\,893\) (обратите внимание на необычный модуль), где \(inv(q)\)модуль, обратный к \(q\).

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \leq t \leq 10^4\)). Далее следует описание тестов.

Единственная строка каждого тестового случая содержит целое число \(N\) (\(1 \leq N \leq 10^9\)), количество операций, которые вы выполняете на квадратной бумаге.

Выходные данные

Для каждого тестового случая напечатайте на новой строке требуемый ответ.

Примечание

Синие линии на предоставленных рисунках представляют горные линии изгиба, а зеленые линии представляют долинные линии изгиба.

Линии изгиба после \(1\) операции \((\dfrac{M}{V} = 0)\).Линии изгиба после \(2\) операций \((\dfrac{M}{V} = \sqrt{2} - 1)\).

B. Влад и фигуры

геометрия реализация *800

У Владислава есть квадратное клетчатое поле размером \(n \times n\). Символами \(\texttt{1}\) на поле нарисован либо треугольник, либо квадрат. Так как он слишком занят, он просит вас сказать ему, какая фигура нарисована на поле.

  • Треугольник — это фигура, состоящая из \(k\) (\(k>1\)) последовательных строк, где \(i\)-я строка содержит \(2 \cdot i-1\) подряд идущих символов \(\texttt{1}\), и центральные единицы расположены в одном столбце. Перевернутый треугольник также является корректным треугольником (но не повёрнутый на 90 градусов).
Две левые картинки изображают примеры треугольников: \(k=4\), \(k=3\). Две правые картинки не содержат треугольников.
  • Квадрат — это фигура, состоящая из \(k\) (\(k>1\)) последовательных строк, где \(i\)-я строка содержит \(k\) подряд идущих символов \(\texttt{1}\), которые расположены на одинаковом расстоянии от левого края поля.
Примеры двух квадратов: \(k=2\), \(k=4\).

Для заданного поля определите вид фигуры, которая на нём нарисована.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 10\)) — размер поля.

Следующие \(n\) строк содержат по \(n\) символов \(\texttt{0}\) или \(\texttt{1}\).

Поле содержит ровно один треугольник или ровно один квадрат, который содержит все \(\texttt{1}\) поля. Гарантируется, что размер треугольника или квадрата больше \(1\) (то есть фигура не может состоять из ровно одной единицы).

Выходные данные

Для каждого набора входных данных выведите строку «SQUARE», если все \(\texttt{1}\) в сетке образуют квадрат, и «TRIANGLE» в противном случае (без кавычек).

A. Разрез прямоугольника

геометрия математика *800

У Боба есть прямоугольник размера \(a \times b\). Он пробует разрезать этот прямоугольник на два прямоугольника с целыми сторонами, сделав разрез, параллельный какой-то из сторон исходного прямоугольника. Затем Боб пытается из двух получившихся прямоугольников сложить какой-то другой прямоугольник, при этом он может как угодно поворачивать и двигать эти два прямоугольника.

Обратите внимание, что если два прямоугольника отличаются поворотом на \(90^{\circ}\), то они считаются одинаковыми. Например, прямоугольники \(6 \times 4\) и \(4 \times 6\) считаются одинаковыми.

Таким образом, из прямоугольника \(2 \times 6\) можно получить другой прямоугольник, потому что его можно разрезать на два прямоугольника \(2 \times 3\), после чего из этих двух прямоугольников сложить прямоугольник \(4 \times 3\), который отличается от прямоугольника \(2 \times 6\).

При этом из прямоугольника \(2 \times 1\) нельзя получить другой прямоугольник, потому что его можно разрезать только на два прямоугольника \(1 \times 1\), а из них можно сложить только прямоугольники \(1 \times 2\) и \(2 \times 1\), которые считаются одинаковыми.

Помогите Бобу определить, сможет ли он получить какой-то другой прямоугольник, или он только зря тратит время.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 10^9\)) — размеры прямоугольника Боба.

Выходные данные

Для каждого набора входных данных выведите «Yes», если Боб может получить другой прямоугольник из прямоугольника \(a \times b\). Иначе выведите «No».

Вы можете вывести ответ в любом регистре (верхнем или нижнем). Например, строки «yEs»,«yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

В первом наборе входных данных прямоугольник \(1 \times 1\) нельзя разрезать на два прямоугольника, поэтому из него нельзя получить другой прямоугольник.

Во четвёртом наборе входных данных прямоугольник \(3 \times 2\) можно разрезать на два прямоугольника \(3 \times 1\), а из них можно сложить прямоугольник \(1 \times 6\).

В пятом наборе входных данных прямоугольник \(2 \times 2\) можно разрезать на два прямоугольника \(1 \times 2\), а из них можно сложить прямоугольник \(1 \times 4\).

C. Найдите мину

Бинарный поиск геометрия жадные алгоритмы интерактив Конструктив математика *1700

Это интерактивная задача.

Вам дано клетчатое поле из \(n\) строк и \(m\) столбцов. Координаты \((x, y)\) обозначают клетку на поле, где \(x\) (\(1 \leq x \leq n\)) — номер строки, начиная сверху, и \(y\) (\(1 \leq y \leq m\)) — номер столбца, начиная слева. Гарантируется, что на поле ровно \(2\) мины в различных клетках, обозначенных \((x_1, y_1)\) и \((x_2, y_2)\). Вы можете сделать не более \(4\) запросов к интерактору, и после этих запросов вы должны предоставить расположение одной из мин.

В каждом запросе вы выбираете позицию на поле \((x, y)\), и в качестве ответа вы получите манхэтонское расстояние от выбранной позиции до ближайшей из двух мин, то есть значение \(\min(|x-x_1|+|y-y_1|, |x-x_2|+|y-y_2|)\).

Ваша задача — определить расположение одной из мин, сделав свои запросы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^{3}\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^{8}\), \(2 \leq m \leq 10^{8}\)) — количество строк и столбцов.

Протокол взаимодействия

Для каждого набора входных данных интеракция начинается с чтения \(n\) и \(m\).

Затем вы можете сделать не более \(4\) запросов следующим образом:

«? x y» (\(1 \leq x \leq n\) и \(1 \leq y \leq m\))

После каждого из них вы должны прочитать число \(d\), которое равняется \(\min(|x-x_1|+|y-y_1|, |x-x_2|+|y-y_2|)\).

Когда вы нашли расположение любой из мин, выведите в единственной строке «! x y» (без кавычек), обозначающие строку и столбец для этой мины. Вывод ответа не считается за запрос.

После вывода ответа ваша программа должна продолжить решать оставшиеся тестовые случаи или завершиться, если все тестовые случаи были решены.

Интерактор в этой задаче не является адаптивным: расположение мин зафиксировано заранее и не зависит от запросов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы:

Чтобы сделать взлом, используйте следующий формат:

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^{3}\)) — количество наборов входных данных.

Описание каждого тестового случая должно состоять из трех строк.

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^{8}\), \(2 \leq m \leq 10^{8}\)) — количество строк и столбцов.

Вторая строка содержит координаты первой мины \(x_1\) и \(y_1\)(\(1 \leq x_1 \leq n\), \(1 \leq y_1 \leq m\)).

Третья строка содержит координаты второй мины \(x_2\) и \(y_2\)(\(1 \leq x_2 \leq n\), \(1 \leq y_2 \leq m\)).

Мины должны располагаться в различных позициях.

Примечание

В первом наборе входных данных мы сначала спрашиваем про верхний левый угол \((1, 1)\) и получаем результат \(3\), что означает, что есть мина на побочной диагонали, и нет мин над ней.

На картинке ниже каждая клетка содержит число, обозначающее расстояние до синей клетки. Зеленые клетки — кандидаты, в которых содержится ближайшая мина.

Затем мы спрашиваем три клетки на диагонали и в последнем запросе мы получаем результат \(0\), что означает, что одна из мин найдена на позиции \((2, 3)\).

Вторая мина располагалась на позиции \((3, 2)\).

Во втором наборе входных данных мы сначала спрашиваем нижний правый угол \((5, 5)\) и получаем результат \(1\), который означает, что одна из двух соседних клеток содержит мину, назовем ее миной \(1\).

Затем мы спрашиваем клетку \((2, 2)\). Можем заметить, что зеленые клетки не пересекаются с зелеными клетками из первого запроса, поэтому они содержат оставшуюся мину, назовем ее миной \(2\).

Запрос \(3\) — это клетка \((3, 3)\). Эти клетки содержат мину \(1\), но мы все еще не знаем, где именно. Тем не менее, мы можем определить, что единственной возможной клеткой для мины \(2\) является клетка \((1, 1)\), потому что все остальные кандидаты находятся на дистанции менее \(3\) для этого запроса.

F. Великий финал: круги

Бинарный поиск геометрия *3300

На плоскости даны \(n\) кругов: \(i\)-й из этих кругов задан тройкой целых чисел \((x_i, y_i, r_i)\), где \((x_i, y_i)\) — координаты его центра, а \(r_i\) — радиус круга.

Найдите круг \(C\), который удовлетворяет следующим условиям:

  • \(C\) содержится внутри всех \(n\) данных кругов.
  • Среди всех кругов \(C\), удовлетворяющих первому условию, радиус круга максимален.

Пусть наибольший подходящий круг имеет радиус \(a\).

Ваш круг \(C\), задаваемый тройкой \((x,y,r)\), будет считаться верным, если он удовлетворяет следующим условиям:

  • Для каждого \(i\), \(\sqrt{(x_i-x)^2+(y_i-y)^2}+ r \le r_i+\max(a,1)\cdot 10^{-7}\).
  • Абсолютная или относительная ошибка \(r\) не превышает \(10^{-7}\). Формально, ваш ответ будет зачтён, если и только если \(\frac{\left|r - a\right|}{\max(1, a)} \le 10^{-7}\).
Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество кругов.

В \(i\)-й из следующих \(n\) строк содержится три целых числа \(x_i\), \(y_i\), \(r_i\) (\(-10^6 \le x_i,y_i \le 10^6\), \(1 \le r_i \le 2 \cdot 10^6\)).

Гарантируется, что существует круг радиуса хотя бы \(10^{-6}\), лежащий внутри всех \(n\) кругов.

Выходные данные

Выведите три числа \(x\), \(y\) и \(r\) — координаты центра и радиус круга.

Примечание

Ниже представлена координатная плоскость, описывающая первый набор входных данных. Найденный круг \(C\) заштрихован синими линиями.

Ниже представлена координатная плоскость, описывающая второй набор входных данных. Найденный круг \(C\) заштрихован синими линиями.

C1. Торт на день рождения Бесси (простая версия)

геометрия жадные алгоритмы математика *1300

Это простая версия задачи. Единственное отличие между двумя версиями — ограничение на \(y\). В этой версии \(y = 0\). Вы можете делать взломы, только если обе версии задачи решены.

Бесси получила от своей лучшей подруги Элси праздничный торт в виде правильного многоугольника с \(n\) сторонами. Вершины торта пронумерованы от \(1\) до \(n\) по часовой стрелке. Вы с Бесси собираетесь выбрать некоторые вершины и сделать непересекающиеся разрезы по диагоналям торта так, чтобы концы разрезов входили в множество выбранных вершин.

Бесси хотела бы раздавать только те куски торта, которые являются треугольниками, чтобы всё было честно. Размеры кусков не имеют значения, и весь торт не обязательно должен быть разделен только на треугольники (в торте могут быть куски и других форм, но они не будут учитываться).

Бесси уже выбрала \(x\) вершин, которые могут быть использованы как концы разрезов. Она хочет, чтобы вы выбрали не более \(y\) других вершин так, чтобы количество треугольных кусков торта, которые она может раздать после разрезания, было максимальным.

Какое максимальное количество треугольных кусков торта может раздать Бесси?

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных состоит из трех целых чисел \(n\), \(x\) и \(y\) (\(4 \leq n \leq 10^9\), \(2 \leq x \leq \min(n, 2 \cdot 10^5)\), \(y = 0\)) — количество сторон многоугольника, количество вершин, которые выбрала Бесси, и максимальное количество других вершин, которые вы можете выбрать.

Вторая строка состоит из \(x\) различных целых чисел от \(1\) до \(n\), представляющих собой вершины, которые выбрала Бесси.

Гарантируется, что сумма \(x\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальное количество непересекающихся треугольных кусков торта, которые она может раздать.

Примечание

В наборах входных данных \(1\), \(2\) и \(3\) можно получить соответственно \(2\), \(6\) и \(2\) непересекающихся треугольных куска торта. Возможные конструкции показаны на следующих рисунках:

Зеленые точки обозначают вершины, которые можно использовать, синие линии — диагонали, которые проводятся, а красные цифры — треугольники, которые подсчитываются.

C2. Торт на день рождения Бесси (сложная версия)

геометрия жадные алгоритмы математика *1700

Это сложная версия задачи. Единственное отличие между двумя версиями — ограничение на \(y\). В этой версии \(0 \leq y \leq n - x\). Вы можете делать взломы, только если обе версии задачи решены.

Бесси получила от своей лучшей подруги Элси праздничный торт в виде правильного многоугольника с \(n\) сторонами. Вершины торта пронумерованы от \(1\) до \(n\) по часовой стрелке. Вы с Бесси собираетесь выбрать некоторые вершины и сделать непересекающиеся разрезы по диагоналям торта так, чтобы концы разрезов входили в множество выбранных вершин.

Бесси хотела бы раздавать только те куски торта, которые являются треугольниками, чтобы всё было честно. Размеры кусков не имеют значения, и весь торт не обязательно должен быть разделен только на треугольники (в торте могут быть куски и других форм, но они не будут учитываться).

Бесси уже выбрала \(x\) вершин, которые могут быть использованы как концы разрезов. Она хочет, чтобы вы выбрали не более \(y\) других вершин так, чтобы количество треугольных кусков торта, которые она может раздать после разрезания, было максимальным.

Какое максимальное количество треугольных кусков торта может раздать Бесси?

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных состоит из трех целых чисел \(n\), \(x\) и \(y\) (\(4 \leq n \leq 10^9\), \(2 \leq x \leq \min(n, 2 \cdot 10^5)\), \(0 \leq y \leq n - x\)) — количество сторон многоугольника, количество вершин, которые выбрала Бесси, и максимальное количество других вершин, которые вы можете выбрать.

Вторая строка состоит из \(x\) различных целых чисел от \(1\) до \(n\), представляющих собой вершины, которые выбрала Бесси.

Гарантируется, что сумма \(x\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальное количество непересекающихся треугольных кусков торта, которые она может раздать.

Примечание

В наборах входных данных \(1\), \(2\) и \(3\) можно получить \(6\), \(5\) и \(2\) непересекающихся треугольных куска торта соответственно. Возможные конструкции показаны на следующих рисунках:

Зеленые точки обозначают вершины, которые выбрала Бесси, желтые точки — вершины, которые выбрали вы, синие линии — диагонали, которые проводятся, а красные цифры — треугольники, которые подсчитываются.

A. Grove

геометрия дп Перебор поиск в глубину и подобное Теория вероятностей *3300

You want to plant trees in a square lawn of size \(n \times n\) whose corners have Cartesian coordinates \((0, 0)\), \((n, 0)\), \((0, n)\), and \((n, n)\). Trees can only be planted at locations with integer coordinates. Every tree will grow roots within a disk of radius \(r\) centered at the location where the tree was planted; such disks must be fully contained in the lawn (possibly touching the boundary of the lawn) and can only intersect each other on their boundaries.

Find a configuration that maximizes the number of trees.

Input

The first and only line contains an integer \(n\) (\(1 \leq n \leq 20\)) and a real number \(r\) (\(0 < r \leq n/2\)) — the length of the sides of the lawn, and the radius of the disks where each tree will grow roots. The real number \(r\) is given in decimal notation with at least \(1\) and at most \(3\) digits after the decimal point.

Output

In the first line, print the maximum number \(m\) of trees that can be planted.

In the next \(m\) lines, print a configuration that maximizes the number of trees. Specifically, in the \((i+1)\)-th line, print two integers \(x\) and \(y\) — the coordinates of the location where the \(i\)-th tree should be planted. You can print the trees in any order.

If there are multiple solutions, print any of them.

Note

For the first sample, the sample output is shown in the following figure. Note that this is not the only configuration that maximizes the number of trees.

For the second sample, the sample output is shown in the following figure. Note that this is not the only configuration that maximizes the number of trees.

I. Disks

геометрия графы Паросочетания поиск в глубину и подобное *1800

You are given \(n\) disks in the plane. The center of each disk has integer coordinates, and the radius of each disk is a positive integer. No two disks overlap in a region of positive area, but it is possible for disks to be tangent to each other.

Your task is to determine whether it is possible to change the radii of the disks in such a way that:

  • Disks that were tangent to each other remain tangent to each other.
  • No two disks overlap in a region of positive area.
  • The sum of all radii strictly decreases.
The new radii are allowed to be arbitrary positive real numbers. The centers of the disks cannot be changed.
Input

The first line contains an integer \(n\) (\(1\le n \le 1000\)) — the number of disks.

The next \(n\) lines contain three integers each. The \(i\)-th of such lines contains \(x_i\), \(y_i\) (\(-10^9 \leq x_i, y_i \leq 10^9\)), and \(r_i\) (\(1 \leq r_i \leq 10^9\)) — the coordinates of the center, and the radius, of the \(i\)-th disk.

Output

Print \(\texttt{YES}\) if it is possible to change the radii in the desired manner. Otherwise, print \(\texttt{NO}\).

Note

In the first sample, one can decrease the radii of the first and third disk by \(0.5\), and increase the radius of the second disk by \(0.5\). This way, the sum of all radii decreases by \(0.5\). The situation before and after changing the radii is depicted below.

First sample (left) and a valid way to change the radii of the disks (right).

In the second sample, depicted below, there is no way to change the radii of the disks in the desired manner.

Second sample.

D. Исследование ломаной

геометрия математика сортировки *1900

При просмотре одного из последних матчей чемпионата Европы Валерик и Валерко разбили в спорт-баре кружку. Конечно, они за нее расплатились, но бармен сказал, что разрешит им теперь смотреть футбол у него в баре, только если они помогут его сыну выполнить задание по программированию. Задание состоит в следующем.

Рассмотрим множество функций вида:

Суммой n функций y1(x), ..., yn(x) указанного вида назовем функцию s(x) = y1(x) + ... + yn(x) для любых x. Нетрудно показать, что в этом случае график s(x) является ломаной. Вам задано n функций указанного вида, необходимо найти количество углов, не равных 180 градусам, в графике функции s(x), являющейся суммой заданных функций.

Валерик и Валерко очень хотят посмотреть следующий матч чемпионата Европы, поэтому обратились к вам за помощью.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество функций. Далее в n строках через пробел записано по два целых числа ki, bi ( - 109 ≤ ki, bi ≤ 109), определяющих i-ую функцию.

Выходные данные

Выведите одно число — количество углов, не равных 180 градусам, в графике ломаной, равной сумме заданных функций.

I. Темная материя

*особая задача битмаски геометрия

C. Нарисуйте дерево

геометрия Деревья Конструктив разделяй и властвуй сортировки *2200

Даны дерево с n вершинами и n точек на плоскости, никакие три из которых не лежат на одной прямой.

Вам надо нарисовать заданное дерево на плоскости, используя заданные точки в качестве вершин.

То есть каждой вершине дерева нужно сопоставить ровно одну точку, и каждая точка должна быть сопоставлена какой-либо вершине. Если две вершины дерева соединены ребром, между соответствующими точками должен быть нарисован отрезок. Отрезки, соответствующие несмежным ребрам, не должны иметь общих точек. Отрезки, соответствующие смежным ребрам, должны иметь ровно одну общую точку.

Входные данные

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

В следующих n - 1 строках через пробел записано по два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) — номера соединенных i-ым ребром вершин дерева.

В следующих n строках через пробел записано по два целых числа xi и yi ( - 109 ≤ xi, yi ≤ 109) — координаты i-ой точки на плоскости. Никакие три точки не лежат на одной прямой.

Гарантируется, что при заданных ограничениях задача имеет решение.

Выходные данные

Выведите n различных целых чисел от 1 до n через пробел: i-ое число должно равняться номеру вершины, которую надо поместить в i-ую точку (точки нумеруются в порядке их перечисления во входных данных).

Если существует несколько решений, выведите любое.

Примечание

Возможные ответы для примеров приведены ниже.

F. Периметр круга

Бинарный поиск геометрия математика Перебор поиск в глубину и подобное реализация *1600

Дано целое число \(r\), найдите количество решетчатых точек, Евклидово расстояние от которых до \((0, 0)\) больше или равно \(r\), но строго меньше \(r+1\).

Решетчатая точка — это точка с целыми координатами. Евклидово расстояние от \((0, 0)\) до точки \((x,y)\) равно \(\sqrt{x^2 + y^2}\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(r\) (\(1 \leq r \leq 10^5\)).

Сумма \(r\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество решетчатых точек, расстояние от которых до \((0, 0)\) равно \(d\), где \(r \leq d < r+1\).

Примечание

Точки для первых трех наборов входных данных показаны ниже.

E. Манхэттенский треугольник

Бинарный поиск геометрия Конструктив реализация Структуры данных *2400

Манхэттенским расстоянием между двумя точками \((x_1, y_1)\) и \((x_2, y_2)\) называется величина, равная: \(\)|x_1 - x_2| + |y_1 - y_2|.\(\)

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

Вам дан набор попарно различных точек и четное целое число \(d\). Ваша задача — найти любой манхэттенский треугольник, составленный из трёх различных точек данного набора, у которого манхэттенское расстояние между любой парой вершин равно \(d\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(d\) (\(3 \le n \le 2 \cdot 10^5\), \(2 \le d \le 4 \cdot 10^5\), \(d\) — чётное) — количество точек и требуемое манхэттенское расстояние между вершинами треугольника.

\((i + 1)\)-я строка каждого набора входных данных содержит два целых числа \(x_i\) и \(y_i\) (\(-10^5 \le x_i, y_i \le 10^5\)) — координаты \(i\)-й точки. Гарантируется, что все точки попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите три целых попарно различных целых числа \(i\), \(j\) и \(k\) (\(1 \le i,j,k \le n\)) — индексы точек, образующих манхэттенский треугольник. Если ответа не существует, выведите «\(0\ 0\ 0\)» (без кавычек).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных:

Точки \(A\), \(B\) и \(F\) образуют манхэттенский треугольник, манхэттенское расстояние между каждой парой вершин равно \(4\). Точки \(D\), \(E\) и \(F\) также могут быть ответом.

В третьем наборе входных данных:

Точки \(A\), \(C\) и \(E\) образуют манхэттенский треугольник, манхэттенское расстояние между каждой парой вершин равно \(6\).

В четвертом наборе входных данных не существует двух точек, манхэттенское расстояние между которыми равно \(4\), а следовательно подходящего манхэттенского треугольника не существует.

C. Доставка канцерогена

Бинарный поиск геометрия *2400

Рейнджер Йцукен прибыл в систему Диатар с очень важным поручением. Он должен доставить на планету Персефона особый канцероген для научных исследований. Дело очень срочное, поэтому Йцукен должен долететь до планеты как можно раньше. Сутки задержки и работа не будет оплачена — просроченный канцероген никому не нужен.

Можно считать, что корабль Йцукена, планета Персефона и звезда Диатар являются точками на плоскости. Диатар находится в центре координат — в точке (0, 0). Персефона вращается вокруг Диатар по круговой орбите радиусом R против часовой стрелки с постоянной линейной скоростью vp (так, например, полный оборот вокруг звезды занимает время ). В начальный момент времени Персефона находится в точке (xp, yp).

В начальный момент времени корабль Йцукена находится в точке (x, y). Йцукен может двигаться в любом направлении со скоростью, не превышающей v (v > vp). Звезда Диатар горячая (как и все звезды), поэтому Йцукен не может приближаться к ней слишком близко. Обшивка корабля плавится уже на расстоянии r (r < R) от звезды.

Определите наименьшее время, за которое Йцукен сможет доставить канцероген на планету Персефона.

Входные данные

В первой строке записаны через пробел целые числа xp, yp и vp ( - 104 ≤ xp, yp ≤ 104, 1 ≤ vp < 104) — начальное положение Персефоны и скорость ее вращения вокруг Диатар.

Во второй строке записаны через пробел целые числа x, y, v и r ( - 104 ≤ x, y ≤ 104, 1 < v ≤ 104, 1 ≤ r ≤ 104) — начальное положение корабля Йцукена, максимальная скорость его движения и минимальное безопасное расстояние до звезды Диатар.

Гарантируется, что r2 < x2 + y2, r2 < xp2 + yp2 и vp < v.

Выходные данные

Выведите одно вещественное число — наименьшее возможное время доставки. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не будет превышать 10 - 6.

H. Захват башни

геометрия дп Комбинаторика *3300

В \(n\) различных точках \((x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\) существует \(n\) башен, причем никакие три из них не являются коллинеарными, а четыре — конциклическими. Изначально вы владеете башнями \((x_1, y_1)\) и \((x_2, y_2)\), и хотите захватить их все. Для этого вы можете проделать следующую операцию любое количество раз:

  • Выбрать две башни \(P\) и \(Q\), которыми вы владеете, и одну башню \(R\), которой вы не владеете, так, чтобы окружность, проходящая через точки \(P\), \(Q\) и \(R\) содержала все \(n\) башен внутри себя.
  • После этого захватить все башни в или на треугольнике \(\triangle PQR\), включая сам \(R\).

План атаки — это последовательность выборов \(R\) (\(R_1, R_2, \ldots, R_k\)) в рамках вышеописанных операций, после которых вы захватываете все башни. Обратите внимание, что два плана атаки считаются различными, только если они отличаются выбором \(R\) в некоторой операции; в частности, два плана атаки с одинаковым выбором \(R\), но разными выборами \(P\) и \(Q\) считаются одинаковыми.

Подсчитайте количество планов атаки минимальной длины. Обратите внимание, что захватить все башни может быть невозможно, и в этом случае ответ будет равен \(0\).

Поскольку ответ может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 250\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(4 \leq n \leq 100\)) — количество башен.

В \(i\)-й из следующих \(n\) строк содержатся два целых числа \(x_i\) и \(y_i\) (\(-10^4 \leq x_i, y_i \leq 10^4\)) — местоположение \(i\)-й башни. Изначально вы владеете башнями \((x_1, y_1)\) и \((x_2, y_2)\).

Все башни находятся в разных местах, никакие три башни не коллинеарны и никакие четыре башни не лежат на одной окружности.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество планов атаки минимальной длины, после которых вы захватите все башни, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных существует только один возможный план атаки наименьшей длины, показанный ниже.

  • Использовать операцию с башней \(P =\) \(1\), башней \(Q =\) \(2\) и башней \(R =\) \(5\). Окружность, проходящая через эти три башни, содержит все башни внутри себя, в результате чего башни \(3\) и \(5\) оказываются захваченными.
  • Использовать операцию с башней \(P =\) \(5\), башней \(Q =\) \(1\) и башней \(R =\) \(4\). Окружность, проходящая через эти три башни, содержит все башни внутри себя, в результате чего башня \(4\) оказывается захваченной.

Во втором наборе входных данных, например, вы никогда не сможете захватить башню в точке \((3, 10\,000)\).

A. Ось X

геометрия математика Перебор сортировки *800

Вам дано три точки с целочисленными координатами \(x_1\), \(x_2\) и \(x_3\) на оси \(X\) (\(1 \leq x_i \leq 10\)). Вы можете выбрать произвольную точку с целочисленной координатой \(a\) на оси \(X\). Обратите внимание, что точка \(a\) может совпадать с \(x_1\), \(x_2\) или \(x_3\). Пусть \(f(a)\) — это суммарное расстояние от данных точек до точки \(a\). Найдите наименьшее значение \(f(a)\).

Расстояние между точками \(a\) и \(b\) равно \(|a - b|\). Например, расстояние между точками \(a = 5\) и \(b = 2\) равно \(3\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следуют их описания.

Единственная строка каждого набора входных данных содержит три целых числа \(x_1\), \(x_2\) и \(x_3\) (\(1 \leq x_i \leq 10\)) — координаты точек.

Выходные данные

Для каждого набора входных данных выведите наименьшее значение \(f(a)\).

Примечание

В первом наборе входных данных при \(a = 1\) достигается наименьшее значение \(f(a)\): \(f(1) = |1 - 1| + |1 - 1| + |1 - 1| = 0\).

Во втором наборе входных данных при \(a = 5\) достигается наименьшее значение \(f(a)\): \(f(5) = |1 - 5| + |5 - 5| + |9 - 5| = 8\).

В третьем наборе входных данных при \(a = 8\) достигается наименьшее значение \(f(a)\): \(f(8) = |8 - 8| + |2 - 8| + |8 - 8| = 6\).

В четвертом наборе входных данных при \(a = 9\) достигается наименьшее значение \(f(a)\): \(f(10) = |10 - 9| + |9 - 9| + |3 - 9| = 7\).

B. Специальная Олимпиада

геометрия *1900

Известный художник-абстракционист Саша, влекомый вдохновением из ниоткуда, решил написать картину под названием «Специальная Олимпиада». Он справедливо рассудил, что, поскольку на обычной Олимпиаде изображено пять колец, то для Специальной достаточно ровно двух.

Напомним, что кольцо — это область, расположенная между двумя концентрическими окружностями радиусов r и R (r < R). Радиусы эти называются внутренним и внешним соответственно. Концентрические окружности — это окружности, центры которых находятся в одной точке.

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

Когда утомлённый Саша провалился в глубокий сон, в комнату зашла девочка Илона и захотела вырезать себе кружочек на память. Чтобы кружочек получился красивым, она решила резать по контуру.

Контуром назовём непрерывную замкнутую линию, через которую происходит переход от одного цвета к другому (для лучшего понимания смотрите пояснения к тестовым примерам). Если контур принимает форму окружности, значит результатом вырезания по этому контуру окажется кружочек, что и хочет получить Илона.

Но пытливый математический ум не даёт девочке покоя: сколькими способами можно вырезать кружочек из холста?

Входные данные

Входные данные содержат две строки.

В каждой из строк содержится четыре разделённых пробелом целых числа xi, yi, ri, Ri, которые описывают i-ое кольцо; xi и yi — координаты центра кольца, ri и Ri — внутренний и внешний радиусы кольца соответственно ( - 100 ≤ xi, yi ≤ 100; 1 ≤ ri < Ri ≤ 100).

Гарантируется, что центры колец не совпадают.

Выходные данные

Единственное целое число — количество способов вырезать кружочек из холста.

Примечание

Ниже изображены рисунки тестовых примеров. Красным пунктиром изображены возможные разрезы.

C. Задача комментатора

геометрия *2600

Олимпиада в Беркувере в самом разгаре. Здесь у каждого свои задачи — спортсмены борются за медали, а комментаторы за наиболее удобные места ведения репортажей. Сегодня основные спортивные мероприятия пройдут на трех круглых стадионах и задача комментатора выбрать оптимальную точку наблюдения, то есть такую из которой видны все три стадиона. Так как все состязания одинаково важны — то и стадионы должны быть видны из этой точки под одинаковым углом. Если таких точек несколько, то более предпочтительной является та, из которой угол обзора каждого стадиона максимален.

Помогите известному в Берляндии комментатору Г. Берниеву найти оптимальную точку наблюдения. Учтите, что стадионы не загораживают друг друга — комментатор может видеть легко наблюдать один стадион сквозь другой.

Входные данные

Входные данные состоят из трех строк, каждая из которых описывает положение одного стадиона. Строки имеют формат x, y, r, где (x,y) — это координаты центра стадиона ( - 103 ≤ x, y ≤ 103), а r (1 ≤ r ≤ 103) — это его радиус. Все числа во входных данных целые. Стадионы не пересекаются, а их центры не лежат на одной прямой.

Выходные данные

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

C. Чёрные круги

геометрия жадные алгоритмы математика Перебор *1200

На двумерной плоскости есть \(n\) кругов. Центр круга с индексом \(i\) имеет координаты \((x_i,y_i)\). Изначально радиусы всех кругов равны \(0\).

Радиусы кругов увеличиваются со скоростью \(1\) единица в секунду.

Вы находитесь в точке \((x_s,y_s)\); ваша цель — попасть в точку \((x_t,y_t)\), ни разу не коснувшись окружности какого-либо круга (включая момент, когда достигаете \((x_t,y_t)\)). Вы можете двигаться в любом направлении. Однако ваша скорость ограничена — \(1\) единица в секунду. Определите, возможно ли это.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных дано целое число \(n\) (\(1\le n\le10^5\)) — количество кругов.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\), \(y_i\) (\(1\le x_i,y_i\le10^9\)) — координаты центра каждого круга.

Последняя строка содержит четыре целых числа \(x_s\), \(y_s\), \(x_t\), \(y_t\) (\(1\le x_s,y_s,x_t,y_t\le10^9\)) — координаты начальной точки и цели, соответственно.

Гарантируется, что все \(n+2\) точки различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(\texttt{YES}\), если возможно достигнуть цели без прикосновения к окружности любого круга, иначе выведите \(\texttt{NO}\).

Вы можете выводить \(\texttt{Yes}\) и \(\texttt{No}\) в любом регистре (к примеру, строки \(\texttt{yEs}\), \(\texttt{yes}\), \(\texttt{Yes}\) и \(\texttt{YES}\) будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных возможный способ передвижения выглядит следующим образом.

D. Сатьям и подсчет

геометрия математика *1400

Сатьяму даны \(n\) различных точек на двумерной координатной плоскости. Гарантируется, что \(0 \leq y_i \leq 1\) для всех заданных точек \((x_i, y_i)\). Сколько различных невырожденных прямоугольных треугольников\(^{\text{∗}}\) можно сформировать, выбрав три различные точки в качестве его вершин?

Два треугольника \(a\) и \(b\) различны, если существует точка \(v\), такая что \(v\) является вершиной \(a\), но не является вершиной \(b\).

\(^{\text{∗}}\)Невырожденный прямоугольный треугольник имеет положительную площадь и внутренний угол \(90^{\circ}\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3 \leq n \leq 2 \cdot 10^5\)) — количество точек.

Следующие \(n\) строк содержат по два целых числа \(x_i\) и \(y_i\) (\(0 \leq x_i \leq n\), \(0 \leq y_i \leq 1\)) — \(i\)-я точка, которую Сатьям может выбрать. Гарантируется, что все \((x_i, y_i)\) попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите целое число для каждого набора входных данных — количество различных невырожденных прямоугольных треугольников, которые можно сформировать, выбрав три точки.

Примечание

Четыре треугольника, о которых идет речь в первом наборе входных данных:

A. Перпендикулярные отрезки

геометрия жадные алгоритмы Конструктив математика *900

Вам задана координатная плоскость и три целых числа \(X\), \(Y\) и \(K\). Найдите два отрезка \(AB\) и \(CD\) такие, что

  1. координаты точек \(A\), \(B\), \(C\) и \(D\) являются целыми числами;
  2. \(0 \le A_x, B_x, C_x, D_x \le X\) и \(0 \le A_y, B_y, C_y, D_y \le Y\);
  3. длина отрезка \(AB\) не менее \(K\);
  4. длина отрезка \(CD\) не менее \(K\);
  5. отрезки \(AB\) и \(CD\) являются перпендикулярными: если провести прямые, содержащие \(AB\) и \(CD\), они пересекутся под прямым углом.

Обратите внимание, что отрезкам не обязательно пересекаться. Отрезки перпендикулярны, пока прямые, которые они задают, перпендикулярны.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следуют \(t\) наборов.

В первой и единственной строке каждого набора заданы три целых числа \(X\), \(Y\) и \(K\) (\(1 \le X, Y \le 1000\); \(1 \le K \le 1414\)).

Дополнительное ограничение на входные данные: значения \(X\), \(Y\) и \(K\) выбраны таким образом, что ответ существует.

Выходные данные

Для каждого набора входных данных выведите две строки. Первая строка должна содержать \(4\) целых числа \(A_x\), \(A_y\), \(B_x\) и \(B_y\) — координаты первого отрезка.

Вторая строка также должна содержать \(4\) целых числа \(C_x\), \(C_y\), \(D_x\) и \(D_y\) — координаты второго отрезка.

Если существует несколько ответов, выведите любой из них.

Примечание

Ответ для первого набора входных данных показан ниже:

Ответ для второго набора входных данных:
Ответ для третьего набора входных данных:
Ответ для четвертого набора входных данных:

A. Расстановка прямоугольников

геометрия математика реализация *800

Вы раскрашиваете бесконечную клетчатую плоскость, на которой все клетки изначально белые. Для этого вам дается \(n\) штампов. Каждый штамп является прямоугольником ширины \(w_i\) и высоты \(h_i\).

Вы примените каждый штамп ровно один раз, чтобы окрасить в чёрный цвет прямоугольник того же размера, что и штамп. Вы не можете поворачивать штамп; каждая клетка должна быть либо полностью покрыта штампом, либо не покрыта. Вы можете использовать штамп на любом прямоугольнике из клеток плоскости, даже если некоторые или все клетки, покрытые областью штампа, уже черные.

Какую минимальную сумму периметров связных областей черных квадратов можно получить после использования всех штампов?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)).

В \(i\)-й из следующих \(n\) строк содержится по два целых числа \(w_i\) и \(h_i\) (\(1 \le w_i, h_i \le 100\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную сумму периметров связных областей черных квадратов, которую можно получить после использования всех штампов.

Примечание

В первом наборе входных данных можно использовать штампы, как показано слева. Каждый штамп выделен своим цветом для наглядности.

После использования всех штампов осталась одна черная область (как показано справа), периметр которой равен \(20\). Можно показать, что не существует способа использования штампов, который дал бы меньший общий периметр.

Во втором наборе входных данных второй и третий штампы могут быть использованы полностью внутри первого, поэтому ответ — \(8\).

D. Удар по мячу

геометрия математика реализация *1700

В то время, когда Валера играл на стадионе в футбол, внезапно пошел дождь. Чтобы не промокнуть, Валера скрылся в коридоре подтрибунного помещения. Однако желание играть было настолько велико, что он решил потренировать удар по мячу прямо в этом коридоре. Валера отошел на достаточно большое расстояние, поставил мяч и совершил удар, после чего мяч, отскакивая от стен, потолка и пола коридора, ударился о выходную дверь. Так как мяч был влажный, он оставил на двери след. Теперь Валера хочет узнать координаты этого следа.

Опишем данное событие более формально. Мяч будем считать точкой в пространстве. Дверь коридора будем считать прямоугольником, расположенным в плоскости xOz таким образом, что левый нижний угол двери расположен в точке (0, 0, 0), а правый верхний — в точке (a, 0, b). Коридор будем считать прямоугольным параллелепипедом, бесконечным в сторону увеличения координаты y. При этом пол коридора будем считать плоскостью xOy, а потолок — плоскостью, параллельной xOy и проходящей через точку (a, 0, b). Будем также считать, что одна из стен — это плоскость yOz, а другая стена — это плоскость, параллельная yOz и проходящая через точку (a, 0, b).

Скажем, что мяч ударился о дверь тогда, когда его координата y стала равна 0. Таким образом координаты следа — это точка (x0, 0, z0), где 0 ≤ x0 ≤ a, 0 ≤ z0 ≤ b. Чтобы исполнить удар, Валера отходит от двери на расстояние m и ставит мяч по центру коридора в точку . После удара мяч летит со скоростью (vx, vy, vz). Это значит, что если мяч имел координаты (x, y, z), то через одну секунду он будет иметь координаты (x + vx, y + vy, z + vz).

Чтобы лучше понять введенную систему координат посмотрите рисунок в примечаниях.

При столкновении с потолком, полом или одной из стен коридора, мяч отскакивает в соответствии с законами отражения (угол падения равен углу отражения). В задаче рассматривается идеальная физическая модель, поэтому можно считать, что отсутствуют сопротивление воздуха, силы трения, какие-либо потери энергии.

Входные данные

В первой строке заданы три целых числа a, b, m (1 ≤ a, b, m ≤ 100), разделенные пробелами. Первые два числа задают точку (a, 0, b), через которую проходят потолок и одна из стен коридора, третье число — расстояние, на которое Валера отошел от двери.

Во второй строке через пробелы заданы три целых числа vx, vy, vz (|vx|, |vy|, |vz| ≤ 100, vy < 0, vz ≥ 0) — скорость мяча после удара.

Гарантируется, что мяч ударится о дверь.

Выходные данные

Выведите два вещественных числа x0, z0 — координаты x и z точки (x0, 0, z0), в которой мяч ударится о выходную дверь. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не будет превышать 10  - 6.

Примечание

C. DIY

геометрия жадные алгоритмы сортировки Структуры данных *1400

You are given a list of \(n\) integers \(a_1, a_2, \dots, a_n\). You need to pick \(8\) elements from the list and use them as coordinates of four points. These four points should be corners of a rectangle which has its sides parallel to the coordinate axes. Your task is to pick coordinates in such a way that the resulting rectangle has the maximum possible area. The rectangle can be degenerate, i. e. its area can be \(0\). Each integer can be used as many times as it occurs in the list (or less).

Input

The first line contains one integer \(t\) (\(1 \le t \le 25\,000\)) — the number of test cases.

The first line of each test case contains one integer \(n\) (\(8 \le n \le 2 \cdot 10^5\)).

The second line of each test case contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Additional constraint on the input: the sum of \(n\) over all test cases does not exceed \(2 \cdot 10^5\).

Output

For each test case, print the answer as follows:

  • if it is impossible to construct a rectangle which meets the constraints from the statement, print a single line containing the word NO (case-insensitive);
  • otherwise, in the first line, print YES (case-insensitive). In the second line, print \(8\) integers \(x_1, y_1, x_2, y_2, x_3, y_3, x_4, y_4\) — the coordinates of the corners of the rectangle. You can print the corners in any order.

A. Добрый плотник

геометрия дп жадные алгоритмы математика *800

I would use a firework to announce, a wave to bid farewell, and a bow to say thanks: bygones are bygones; not only on the following path will I be walking leisurely and joyfully, but also the footsteps won't halt as time never leaves out flowing; for in the next year, we will meet again.
— Cocoly1990, Goodbye 2022

В своем сне Коколи отправился в длительный беззаботный отпуск. Он захотел попробовать себя в новых сферах, например... стать плотником. Чтобы научиться этому искусству, Коколи решил стать учеником Мастера, но перед ним встала трудная задача, которую ему предстоит решить.

Коколи даётся массив \(a_1, a_2,\ldots, a_n\). Мастер называет набор целых чисел \(S\) стабильным тогда и только тогда, когда для любых \(u\), \(v\) и \(w\) из множества \(S\) (обратите внимание, что \(u\), \(v\) и \(w\) не обязательно должны быть попарно различными), палочки длины \(u\), \(v\) и \(w\) могут образовать невырожденный треугольник\(^{\text{∗}}\).

Коколи предлагается разбить массив \(a\) на несколько (возможно, \(1\) или \(n\)) непустых непрерывных подотрезков\(^{\text{†}}\), таким образом, чтобы для каждого из подотрезков набор, содержащий все элементы в нём, был стабильным.

Мастер хочет, чтобы Коколи разбил \(a\) на подотрезки по крайней мере двумя различными\(^{\text{‡}}\) способами. Вы должны помочь ему определить, возможно ли это.

\(^{\text{∗}}\)Треугольник с длинами сторон \(x\), \(y\) и \(z\) называется невырожденным тогда и только тогда, когда:

  • \(x + y > z\),
  • \(y + z > x\), и
  • \(z + x > y\).

\(^{\text{†}}\)Последовательность \(b\) является подотрезком последовательности \(c\), если \(b\) может быть получена из \(c\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

\(^{\text{‡}}\)Два разбиения считаются различными тогда и только тогда, когда выполняется хотя бы одно из следующих условий:

  • количество непрерывных подотрезков в двух разбиениях различно;
  • существует целое число \(k\), такое, что длины \(k\)-го подотрезка в двух разбиениях различны.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 200\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq 10^5\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите \(\texttt{YES}\), если существует по крайней мере два способа разбиения \(a\), и \(\texttt{NO}\) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки \(\texttt{yEs}\), \(\texttt{yes}\), \(\texttt{Yes}\) и \(\texttt{YES}\) будут приняты как положительный ответ.

Примечание

В первом наборе входных данных можно привести в пример такие два разбиения:

  • \([2, 3], [5, 7]\), поскольку
    • \([2, 3]\) стабильный: палочки с длинами \((2, 2, 2), (2, 2, 3), (2, 3, 3), (3, 3, 3)\) образовывают невырожденные треугольники.
    • \([5, 7]\) стабильный: палочки с длинами \((5, 5, 5), (5, 5, 7), (5, 7, 7), (7, 7, 7)\) образовывают невырожденные треугольники.
  • и \([2], [3, 5], [7]\), поскольку
    • \([2]\) стабильный: палочки с длинами \((2, 2, 2)\) образовывают невырожденный треугольник.
    • \([3, 5]\) стабильный: палочки с длинами \((3, 3, 3), (3, 3, 5), (3, 5, 5), (5, 5, 5)\) образовывают невырожденные треугольники.
    • \([7]\) стабильный: палочки с длинами \((7, 7, 7)\) образовывают невырожденный треугольник.

Обратите внимание, что некоторые другие разбиения также удовлетворяют ограничениям. Например, \([2], [3], [5], [7]\) и \([2], [3], [5, 7]\).

Во втором наборе входных данных Коколи может только разбить элементы на отдельные подотрезки, что приводит к разбиению \([115], [9], [2], [28]\). Поскольку у нас есть только одно возможное разбиение, то ответ — \(\texttt{NO}\).

В третьем наборе входных данных обратите внимание, что разбиение \([8, 4], [1], [6], [2]\) не удовлетворяет ограничениям, поскольку \(\{8, 4\}\) не является стабильным множеством: палочки \(4\), \(4\) и \(8\) не образовывают невырожденный треугольник.

F. Космическое разбиение

геометрия математика Перебор Строки хэши *3200

Когда артефакт находится у тебя в руках, ткань реальности уступает место своему истинному хозяину — мужчине из Флориды.

Полимино является связной\(^{\text{∗}}\) фигурой, построенной путем присоединения одного или нескольких равных квадратов \(1 \times 1\) сторона к стороне. Полимино является выпуклым, если для любых двух квадратов в полимино, которые находятся в одной строке или одном столбце, все квадраты между ними также являются частью полимино. Ниже приведены четыре полимино, только первое и второе из которых выпуклые.

Вам дано выпуклое полимино с \(n\) строками и четной площадью. Для каждой строки \(i\) от \(1\) до \(n\) единичные квадраты от столбца \(l_i\) до столбца \(r_i\) являются частью полимино. Другими словами, в \(i\)-й строке находится \(r_i - l_i + 1\) единичных квадратов, которые являются частью полимино: \((i, l_i), (i, l_i + 1), \ldots, (i, r_i-1), (i, r_i)\).

Два полимино являются конгруэнтными тогда и только тогда, когда вы можете точно совместить их друг с другом в результате перемещений. Обратите внимание, что вам не разрешается поворачивать или отражать полимино. Определите, возможно ли разбить данное выпуклое полимино на два непересекающихся связных полимино, конгруэнтных друг другу. Следующие примеры иллюстрируют допустимое разбиение каждого из двух выпуклых полимино, показанных выше:

Полученные части полимино не обязательно должны быть выпуклыми. Каждый единичный квадрат должен принадлежать ровно одной из двух частей разбиения.

\(^{\text{∗}}\)Полимино является связным тогда и только тогда, когда для любых двух единичных квадратов \(u \neq v\), которые являются частью полимино, существует последовательность различных квадратов \(s_1, s_2, \ldots, s_k\), такая, что \(s_1 = u\), \(s_k = v\), все \(s_i\) являются частью полимино, и \(s_i, s_{i+1}\) имеют общую сторону для каждого \(1 \le i \le k - 1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество строк полимино.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1\le l_i\le r_i\le 10^9\)) — диапазон столбцов, которые являются частью полимино в \(i\)-й строке.

Гарантируется что площадь полимино является чётной. Другими словами, \(\sum_{i=1}^n r_i - l_i + 1\equiv 0\pmod{2}\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую либо «YES» или «NO» — может ли полимино быть разбито на части, как описано в задаче.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes», и «YES» будут приняты как положительный ответ.

Примечание

Первый и второй наборы входных данных являются полимино, показанными в условиях задачи, и могут быть разбиты, как показано на рисунке из условия.

Можно показать, что полимино в третьем наборе входных данных, показанное ниже, невозможно разбить. Ни одно из следующих разбиений не является корректным:

В разбиении слева полимино нельзя совместить только перемещениями, а в разбиении справа полимино не являются связными.

Можно показать, что полимино в четвертом наборе входных данных, показанное ниже, не поддается разбиению.

Обратите внимание, что хотя вы можете разбить его на два прямоугольника размера \(1 \times 2\), эти прямоугольники нельзя совместить перемещениями.

B. Кевин и Геометрия

Бинарный поиск геометрия *1100

У Кевина есть \(n\) палочек с длинами \(a_1,a_2,\ldots,a_n\).

Кевин хочет выбрать из них \(4\) палочки, чтобы сформировать равнобедренную трапецию\(^{\text{∗}}\) с положительной площадью. Обратите внимание, что прямоугольники и квадраты также считаются равнобедренными трапециями. Помогите Кевину найти решение. Если решения не существует, выведите \(-1\).

\(^{\text{∗}}\)Равнобедренная трапеция — это выпуклый четырехугольник с осью симметрии, делящей пополам одну пару противоположных сторон. В любой равнобедренной трапеции две противоположные стороны (основания) параллельны, а две другие стороны (боковые) равны по длине.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(4 \le n \le 2\cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^8\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(4\) целых числа — длины палочек. Если решения не существует, выведите \(-1\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных можно сформировать равнобедренную трапецию с основаниями длиной \(5\) и \(10\) и двумя боковыми сторонами длиной \(5\).

Во втором наборе входных данных можно сформировать равнобедренную трапецию с двумя основаниями длиной \(5\) и двумя боковыми сторонами длиной \(10\). Прямоугольник также считается равнобедренной трапецией.

В третьем наборе входных данных нет палочек одинаковой длины. Следовательно, невозможно сформировать равнобедренную трапецию.

В четвертом наборе входных данных невозможно сформировать равнобедренную трапецию с положительной площадью.

F. Задача котовояжёра

геометрия графы дп жадные алгоритмы Конструктив математика сортировки *2900

Вы — кот, продающий интересные алгоритмические задачи. Сегодня вы хотите прорекламировать свои интересные алгоритмические задачи в \(k\) городах.

Всего есть \(n\) городов, каждый из которых имеет два параметра \(a_i\) и \(b_i\). Между любыми двумя городами \(i,j\) (\(i\ne j\)) есть двусторонняя дорога длиной \(\max(a_i + b_j , b_i + a_j)\). Стоимость пути определяется как сумма длин дорог между каждыми двумя соседними городами вдоль пути.

Для \(k=2,3,\ldots,n\) найдите минимальную стоимость среди всех простых путей, содержащих ровно \(k\) различных городов.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 1500\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 3\cdot 10^3\)) — количество городов.

Затем следуют \(n\) строк, \(i\)-я строка содержит два целых числа \(a_i,b_i\) (\(0 \leq a_i,b_i \leq 10^9\)) — параметры города \(i\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превышает \(9\cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите \(n-1\) целых числа в одной строке. \(i\)-е целое число представляет собой минимальную стоимость при \(k=i+1\).

Примечание

В первом наборе входных данных:

  • Для \(k=2\) оптимальный путь: \(1\to 2\) со стоимостью \(\max(0+1,2+2)=4\).
  • Для \(k=3\) оптимальный путь: \(2\to 1\to 3\) со стоимостью \(\max(0+1,2+2)+\max(0+3,3+2)=4+5=9\).

Во втором наборе входных данных:

  • Для \(k=2\) оптимальный путь: \(1\to 4\).
  • Для \(k=3\) оптимальный путь: \(2\to 3\to 5\).
  • Для \(k=4\) оптимальный путь: \(4\to 1\to 3\to 5\).
  • Для \(k=5\) оптимальный путь: \(5\to 2\to 3\to 1\to 4\).

G. Фабрика перестановок

геометрия графы Паросочетания Потоки *3500

Даны две перестановки \(p_1,p_2,\ldots,p_n\) и \(q_1,q_2,\ldots,q_n\) длины \(n\). За одну операцию вы можете выбрать два целых числа \(1\leq i,j\leq n,i\neq j\) и поменять местами \(p_i\) и \(p_j\). Стоимость операции равна \(\min (|i-j|,|p_i-p_j|)\).

Найдите минимальную стоимость последовательности операций, в результате которых для всех \(1\leq i\leq n\) выполняется равенство \(p_i = q_i\), и выведите последовательность с минимальной стоимостью.

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 100\)) — длина перестановок \(p\) и \(q\).

Вторая строка содержит \(n\) целых чисел \(p_1,p_2,\ldots,p_n\) (\(1\leq p_i\leq n\)) — перестановка \(p\). Гарантируется, что \(p_1,p_2,\ldots,p_n\) является перестановкой чисел \(1,2,\ldots,n\).

Третья строка содержит \(n\) целых чисел \(q_1,q_2,\ldots,q_n\) (\(1\leq q_i\leq n\)) — перестановка \(q\). Гарантируется, что \(q_1,q_2,\ldots,q_n\) является перестановкой чисел \(1,2,\ldots,n\).

Гарантируется, что сумма \(n^3\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите общее количество операций \(k\) (\(0\le k\le n^2\)) в первой строке. Затем выведите \(k\) строк, каждая из которых содержит два целых числа \(i,j\) (\(1\le i,j\le n\), \(i\neq j\)) — операцию обмена \(p_i\) и \(p_j\). Операции выводите в порядке выполнения.

Можно показать, что ни одна оптимальная последовательность операций не имеет длину больше \(n^2\).

Примечание

Во втором наборе входных данных вы можете поменять местами \(p_1,p_3\), что будет стоить \(\min(|1-3|,|1-3|)=2\). Тогда \(p\) станет равно \(q\), а общая стоимость равна \(2\).

В третьем наборе входных данных вы можете выполнить следующие операции:

Изначально, \(p=[2,1,4,3]\).

  1. Поменять местами \(p_1,p_4\), что будет стоить \(\min(|1-4|,|2-3|)=1\), в результате чего \(p=[3,1,4,2]\).
  2. Поменять местами \(p_2,p_4\), что будет стоить \(\min(|2-4|,|1-2|)=1\), в результате чего \(p=[3,2,4,1]\).
  3. Поменять местами \(p_1,p_3\), что будет стоить \(\min(|1-3|,|3-4|)=1\). Тогда \(p\) станет равно \(q\). Общая стоимость равна \(3\).

D. Игра с треугольниками

Бинарный поиск геометрия жадные алгоритмы математика Перебор реализация Структуры данных Тернарный поиск *2000

Даже маленькому Джону нужны деньги, чтобы купить дом. Но он недавно потерял работу; как же он теперь заработает деньги? Конечно, играя в игру, которая дает ему деньги в качестве награды! Ну, может быть, не в те игры, о которых вы думаете.

На плоскости есть \(n+m\) различных точек \((a_1,0), (a_2,0), \ldots, (a_{n},0), (b_1,2), (b_2,2), \ldots, (b_{m},2)\). Изначально ваш счет равен \(0\). Чтобы увеличить свой счет, вы можете выполнить следующую операцию:

  • Выберите три различные точки, которые не лежат на одной прямой.
  • Увеличьте свой счет на площадь треугольника, образованного этими тремя точками.
  • Затем удалите три точки с плоскости.
Пример игры, где операция выполняется дважды.

Пусть \(k_{\max}\) — максимальное количество операций, которое можно выполнить. Например, если нельзя выполнить эту операцию ни разу, то \(k_\max\) равно \(0\). Кроме того, определим \(f(k)\) как максимальный возможный счет, который можно получить, выполнив операцию ровно \(k\) раз. Здесь \(f(k)\) определено для всех целых чисел \(k\), таких что \(0 \le k \le k_{\max}\).

Найдите значение \(k_{\max}\) и найдите значения \(f(x)\) для всех целых чисел \(x=1,2,\ldots,k_{\max}\) независимо.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le {3 \cdot 10^4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) попарно различных целых чисел \(a_1,a_2,\ldots,a_{n}\) — точки на \(y=0\) (\(-10^9 \le a_i \le 10^9\)).

Третья строка каждого набора входных данных содержит \(m\) попарно различных целых чисел \(b_1,b_2,\ldots,b_{m}\) — точки на \(y=2\) (\(-10^9 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, учитывая, что максимальное количество операций равно \(k_{\max}\), вы должны вывести не более двух строк:

  • Первая строка содержит значение \(k_{\max}\);
  • Вторая строка содержит \(k_{\max}\) целых числа, обозначающих \(f(1),f(2),\ldots,f(k_{\max})\). Вы можете опустить эту строку, если \(k_{\max}\) равно \(0\).

Обратите внимание, что в условиях этой задачи можно показать, что все значения \(f(x)\) являются целыми числами, не превышающими \(10^{16}\).

Примечание

В первом наборе входных данных есть \(1+3=4\) точки \((0,0),(0,2),(1,2),(-1,2)\).

Можно показать, что вы не можете выполнить две или более операций. Значение \(k_{\max}\) равно \(1\), и вас просят только о значении \(f(1)\).

Вы можете выбрать \((0,0)\), \((-1,2)\) и \((1,2)\) в качестве трех вершин треугольника. После этого ваш счет увеличивается на площадь треугольника, которая равна \(2\). Затем три точки удаляются с плоскости. Можно показать, что максимальное значение вашего счета после выполнения одной операции равно \(2\). Следовательно, значение \(f(1)\) равно \(2\).

В пятом наборе входных данных есть \(8+2=10\) точек.

Можно показать, что вы не можете выполнить три или более операций. Значение \(k_{\max}\) равно \(2\), и вас просят о значениях \(f(1)\) и \(f(2)\).

Чтобы максимизировать счет с помощью только одной операции, вы можете выбрать три точки \((198\,872\,582,0)\), \((-1\,000\,000\,000,2)\) и \((1\,000\,000\,000,2)\). Затем три точки удаляются с плоскости. Можно показать, что максимальное значение вашего счета после выполнения одной операции равно \(2\,000\,000\,000\). Следовательно, значение \(f(1)\) равно \(2\,000\,000\,000\).

Чтобы максимизировать счет с помощью ровно двух операций, вы можете выбрать следующую последовательность операций.

  • Выберите три точки \((-509\,489\,796,0)\), \((553\,177\,666,0)\) и \((-1\,000\,000\,000,2)\). Три точки удаляются.
  • Выберите три точки \((-400\,714\,529,0)\), \((564\,040\,265,0)\) и \((1\,000\,000\,000,2)\). Три точки удаляются.

Тогда счет после двух операций становится \(2\,027\,422\,256\). Можно показать, что максимальное значение вашего счета после выполнения ровно двух операций равно \(2\,027\,422\,256\). Следовательно, значение \(f(2)\) равно \(2\,027\,422\,256\).

D. Звезды

геометрия Конструктив *2300

Фурик любит рисовать звезды. Звездой назовем фигуру, которая образовывается после проведения всех диагоналей в правильном пятиугольнике.

Недавно он решил научить Рубика рисовать звезды. После долгих лет тренировок Рубик стал с легкостью рисовать звезды. Но теперь Фурик решил проверить Рубика и усложнил задание. Рубик должен нарисовать n звезд следуя таким правилам:

  • все звезды должны быть нарисованы одним движением (то есть нельзя отрывать руку во время рисования);
  • нельзя проходить по одному отрезку ненулевой длины более одного раза;
  • звезды могут пересекаться только по вершинам;
  • длина стороны правильного пятиугольника, в котором построена каждая звезда, должна быть равна 10.

Помогите Рубику с этой нелегкой задачей.

Входные данные

В единственной строке дано целое число (1 ≤ n ≤ 100) — количество звезд, которые надо нарисовать.

Выходные данные

В первой строке выведите целое число m (1 ≤ m ≤ 5·n). В следующих m строках выведите координаты m различных точек с точностью не менее 9 и не более 100 знаков после десятичной точки. Все координаты не должны превышать 5000 по модулю. В следующих n строках выведите по 5 целых чисел — номера точек, которые образовывают данную звезду в порядке обхода по или против часовой стрелки. В следующей строке выведите n + 1 целых чисел — номера точек в порядке, в котором рисует звезды Рубик. То есть если число номер iai, а i + 1ai + 1, то между точками с номерами ai и ai + 1 будет нарисован отрезок.

Считайте, что выведенные m точек пронумерованы от 1 до m в том порядке, в котором они выведены. Числа в строках разделяйте пробельными символами.

Обратите внимание, что правильность ответа проверяется не абсолютно точно. Постарайтесь получить как можно более точное решение. Все вычисления в проверяющей программе выполняются в предположении, что абсолютная погрешность ответа участника не более 10 - 8.

Примечание

Изначальное положение точек в примере:

Порядок, в котором можно рисовать отрезки:

D. Маленький Слоник и треугольник

геометрия математика *2500

Маленький Слоник играет с декартовой системой координат. Больше всего ему нравится играть с целочисленными точками. Под целочисленной точкой Маленький Слоник подразумевает пару целых чисел (xy) таких, что 0 ≤ x ≤ w и 0 ≤ y ≤ h. Таким образом Маленький Слоник знает только (w + 1)·(h + 1) различных целочисленных точек.

Маленький Слоник хочет нарисовать треугольник с вершинами в целочисленных точках, площадь которого является целым положительным числом. Для этого ему нужно найти количество троек точек, которые образуют такой треугольник. При этом порядок точек в тройке имеет значение, то есть тройка точек (0;0), (0;2), (2;2) не равна тройке (0;2), (0;0), (2;2).

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

Входные данные

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

Выходные данные

В единственную строку выходных данных выведите целое число — остаток от деления ответа на задачу на 1000000007 (109 + 7).

D. Паук

геометрия графы *3000

На плоскости задан не обязательно выпуклый многоугольник без самопересечений, состоящий из n вершин, пронумерованных от 1 до n. На границе многоугольника сидит паук, который может совершать следующие перемещения:

  1. Переход. Паук из точки p1 с координатами (x1, y1), лежащей на границе многоугольника, перемещается в точку p2 с координатами (x2, y2), также лежащую на границе. При этом он не может покидать границу многоугольника, то есть путь паука от точки p1 к точке p2 проходит вдоль границы многоугольника. Направление обхода границы многоугольника при перемещении (по часовой стрелке или против) паук выбирает сам.
  2. Спуск. Паук из точки p1 с координатами (x1, y1) перемещается в точку p2 с координатами (x2, y2), при этом точки p1 и p2 должны лежать на одной вертикальной прямой (x1 = x2), точка p1 должна быть не ниже точки p2 (y1 ≥ y2) и отрезок p1p2 не должен иметь точек, находящихся строго вне многоугольника (в частности, отрезок может иметь общие точки с границей).

Изначально паук находится в вершине многоугольника с номером s. Найдите длину кратчайшего пути до вершины с номером t, состоящего из переходов и спусков. Расстояние определяется обычной Евклидовой метрикой .

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 105) — количество вершин заданного многоугольника. В следующих n строках через пробел записаны по два целых числа — координаты вершин многоугольника. Вершины перечислены в порядке обхода против часовой стрелки. Координаты вершин многоугольника по абсолютной величине не превосходят 104.

В последней строке записаны два целых числа через пробел s и t (1 ≤ s, t ≤ n) — стартовая и конечная вершина искомого кратчайшего пути.

Считайте, что вершины многоугольника пронумерованы в том же порядке, в котором они заданы во входных данных, то есть координаты первой вершины находятся во второй строке входных данных, а n-ой — в (n + 1)-ой строке. Гарантируется, что заданный многоугольник простой, то есть не имеет самопересечений и самокасаний.

Выходные данные

В выходной файл выведите единственное вещественное число — длину кратчайшего пути из вершины s в вершину t. Ответ считается правильным, если его абсолютная или относительная погрешность не превосходит 10 - 6.

Примечание

В первом примере паук делает переход по стороне, соединяющей вершины с номерами 1 и 4.

Во втором примере пауку никуда не нужно идти, поэтому расстояние равно нулю.

В третьем примере пауку выгоднее всего перейти из вершины 3 в точку (2,3), совершить спуск в точку (2,1), а затем сделать переход в вершину 1.

E. Планарный граф

геометрия графы Потоки *3000

Граф называется планарным, если он может быть изображен на плоскости так, что его ребра пересекаются только в вершинах.

Точкой сочленения называется такая вершина неориентированного графа, при удалении которой число компонент связности графа увеличивается.

Мостом называется такое ребро неориентированного графа, при удалении которого число компонент связности графа увеличивается.

Задан связный неориентированный планарный граф, состоящий из n вершин, пронумерованных от 1 до n, уложенный на плоскость. Граф не имеет мостов, точек сочленения, петель и кратных ребер. Также заданы q запросов. Каждый запрос представляет из себя цикл в графе. Ответ на запрос — количество вершин графа, которые (если нарисовать граф и цикл на плоскости) находятся внутри цикла, либо на нем самом. Напишите программу, которая по заданному графу и запросам отвечает на каждый из запросов.

Входные данные

В первой строке записаны два целых числа через пробел n и m (3 ≤ n, m ≤ 105) — количество вершин и ребер графа. В следующих m строках заданы ребра графа: в i-ой строке записаны два целых числа через пробел ui и vi (1 ≤ ui, vi ≤ n) — номера вершин, соединяющих i-ое ребро. В следующих n строках заданы положения вершин планарного графа на плоскости: в i-ой строке записана пара целых чисел через пробел xi и yi (|xi|, |yi| ≤ 109) — координаты i-ой вершины графа на плоскости.

В следующей строке записано целое число q (1 ≤ q ≤ 105) — количество запросов. Затем следуют q строк с описаниями запросов: в i-ой строке записана последовательность целых чисел через пробел ki, a1, a2, ..., aki (1 ≤ aj ≤ nki > 2), где ki — длина цикла в i-ом запросе, aj  — номера вершин, входящих в цикл. Номера вершин в цикле заданы в порядке обхода по или против часовой стрелки. Заданные циклы простые, то есть проходят не более одного раза по каждой вершине графа. Суммарная длина циклов во всех запросах не превышает 105.

Гарантируется, что заданный граф не содержит мостов, точек сочленения, петель и кратных ребер. Гарантируется, что отрезки-ребра могут иметь общие точки только в вершинах графа.

Выходные данные

Для каждого запроса выведите единственное целое число — количество вершин внутри цикла, либо на нем самом. Ответы на запросы выводите в том порядке, в котором запросы заданы во входных данных. Числа разделяйте пробельными символами.

A. Параллелепипед

геометрия математика Перебор *1100

Задан прямоугольный параллелепипед с целочисленными длинами ребер. Известны площади трех его граней, имеющих общую вершину. Требуется найти сумму длин всех 12 ребер этого параллелепипеда.

Входные данные

В первой и единственной строке через пробел записаны три целых числа — площади граней параллелепипеда. Величины площадей положительны ( > 0) и не превосходят 104. Гарантируется, что существует хотя бы один параллелепипед, удовлетворяющий условию задачи.

Выходные данные

Выведите единственное число — сумму длин всех ребер параллелепипеда.

Примечание

В первом примере параллелепипед имеет размеры 1 × 1 × 1, во втором — 2 × 2 × 3.

A. Куда свернуть?

геометрия *1300

Беда пришла из земель заморских: Змей Горыныч прилетел. Поселился Змей в точке C и стал ужас наводить на жителей сел и деревень окрестных.

Храбрый богатырь вознамерился покончить со Змеем. На бой с Горынычем отправился он из точки A. Скакал богатырь из точки A по прямой дороге и встретил на пути своем точку B. Знает богатырь, что в краю этом для любой пары дорог верно, что они либо параллельны друг другу, либо лежат на одной прямой, либо взаимно перпендикулярны. Также известно ему и то, что точки B и C связаны дорогой. А потому богатырю надо либо повернуть на 90 градусов налево, либо продолжать двигаться прямо, либо повернуть на 90 градусов направо. Но забыл он, где точка C расположена.

На счастье, мимо пролетал ясный сокол. Видно соколу с высоты все три точки. Обратился к нему богатырь с вопросом, в каком направлении ехать, чтобы к змееву логову попасть.

Если Вы еще не поняли, сокол — это Вы. Подскажите богатырю, как доехать ему до точки C: налево свернуть, прямо поехать или направо повернуть.

Считается, что в данный момент богатырь стоит в точке B, повернувшись к точке A спиной.

Входные данные

В первой строке входных данных записаны два целых числа через пробел xa, ya (|xa|, |ya| ≤ 109) — координаты точки A. Во второй строке в аналогичном формате записаны координаты точки B, в третьей строке — точки C.

Гарантируется, что все три точки попарно различны. Также гарантируется, что либо точка B лежит на отрезке AC, либо угол ABC прямой.

Выходные данные

Выведите одну строку. Если богатырю следует свернуть налево, выведите «LEFT» (без кавычек); если ему следует идти вперед, выведите «TOWARDS» (без кавычек); если следует свернуть направо — «RIGHT» (без кавычек).

Примечание

Иллюстрация к первому примеру:

Красным выделены точки A, B и C. Синяя стрелка указывает направление, в котором смотрит богатырь. Траектория движения богатыря выделена зелёным.

Иллюстрация ко второму примеру:

D. Четырёхугольник

геометрия математика *2600

Даны середины трёх равных сторон строго выпуклого четырёхугольника. Требуется восстановить исходный четырёхугольник.

Входные данные

В первой строке входного файла содержится одно число T — количество тестов (1 ≤ T ≤ 5·104). В каждой из следующих T строк записаны числа x1, y1, x2, y2, x3, y3 — координаты различных точек, являющихся серединами трёх равных сторон (целые неотрицательные числа, не превосходящие 10).

Выходные данные

Для каждого теста выведите две строки. Если искомый четырёхугольник существует, выведите в первой строке YES, а во второй — четыре пары чисел — координаты вершин многоугольника в порядке обхода. Не забудьте, что четырёхугольник должен быть строго выпуклым, т. е. никакие 3 его точки не должны лежать на одной прямой. Числа выводите с 9 знаками после точки.

Если искомый четырёхугольник не существует, в первой строке выведите NO, а вторую строку оставьте пустой.

D. Волшебный ящик

геометрия Перебор *1600

Однажды Вася шел домой и увидел лежащий на дороге ящик, представляющий собой прямоугольный параллелепипед. Вася сразу понял, что это необычный ящик, так как все его ребра параллельны осям координат, один из его углов расположен в точке (0, 0, 0), а противоположный ему — в точке (x1, y1, z1). На шести гранях этого ящика были написаны некоторые числа a1, a2, ..., a6 ровно по одному точно в центре каждой из граней.

Числа на ящике располагаются следующим образом:

  • число a1 написано на грани, которая принадлежит плоскости ZOX;
  • a2 — на грани, параллельной плоскости из предыдущего пункта;
  • a3 — на грани, которая принадлежит плоскости XOY;
  • a4 — на грани, параллельной плоскости из предыдущего пункта;
  • a5 — на грани, которая принадлежит плоскости YOZ;
  • a6 — на грани, параллельной плоскости из предыдущего пункта.

Вася на данный момент смотрит на ящик из точки (x, y, z). Найдите сумму чисел, которые видит Вася. Обратите внимание, что все грани ящика непрозрачны, и Вася не может увидеть числа сквозь ящик. На рисунке грани изображены прозрачными исключительно для удобства восприятия. Считайте, что если Вася смотрит из точки, которая лежит в плоскости некоторой грани, то он не видит число, записанное на этой грани. Для того, чтобы Вася видел число достаточно, чтобы он видел центр соответствующей грани. Также обратите внимание, что Вася всегда правильно читает числа ai, которые видит, независимо от поворота, угла и других факторов (то есть, например, если Вася видит некоторое ai = 6, то он никак не сможет принять это число за 9 и тому подобное).

Входные данные

В первой строке входных данных через пробел записаны три целых числа x, y и z (|x|, |y|, |z| ≤ 106) — координаты положения Васи в пространстве. Во второй строке через пробел записаны три целых числа x1, y1, z1 (1 ≤ x1, y1, z1 ≤ 106) — координаты угла ящика, противоположного углу в точке (0, 0, 0). В третьей строке через пробел записаны шесть целых чисел a1, a2, ..., a6 (1 ≤ ai ≤ 106) — числа, записанные на гранях ящика.

Гарантируется, что точка (x, y, z) расположена строго вне ящика.

Выходные данные

Выведите единственное целое число — сумму всех чисел на гранях ящика, которые видит Вася.

Примечание

Первый пример соответствует изображенной на рисунке точке зрения. Вася видит числа a2 (на верхней грани самого темного цвета), a6 (на правой грани самого светлого цвета) и a4 (на левой из видимых граней).

Во втором примере Вася видит только число a4.

C. Последовательность точек

геометрия математика реализация *1800

Даны точки на плоскости с целыми координатами: M0, A0, A1, ..., An - 1, где n — нечетное число. Определим бесконечную последовательность точек Mi следующим образом: Mi симметрична Mi - 1 относительно (для любого натурального числа i). Точка B симметрична A относительно M, если M — центр отрезка AB. Для заданного j найдите точку Mj.

Входные данные

В первой строке записано нечетное целое число n (1 ≤ n ≤ 105), и целое число j (1 ≤ j ≤ 1018) — индекс требуемой точки последовательности. В следующей строке через пробел записаны два целых числа — координаты точки M0. Далее следуют n строк, в i-ой строке через пробел записаны координаты точки Ai - 1. Все координаты не превосходят по модулю 1000.

Выходные данные

Выведите через пробел координаты точки Mj.

C. Mirror Box

геометрия реализация *2000

Mirror Box is a name of a popular game in the Iranian National Amusement Park (INAP). There is a wooden box, 105 cm long and 100 cm high in this game. Some parts of the box's ceiling and floor are covered by mirrors. There are two negligibly small holes in the opposite sides of the box at heights hl and hr centimeters above the floor. The picture below shows what the box looks like.

In the game, you will be given a laser gun to shoot once. The laser beam must enter from one hole and exit from the other one. Each mirror has a preset number vi, which shows the number of points players gain if their laser beam hits that mirror. Also — to make things even funnier — the beam must not hit any mirror more than once.

Given the information about the box, your task is to find the maximum score a player may gain. Please note that the reflection obeys the law "the angle of incidence equals the angle of reflection".

Input

The first line of the input contains three space-separated integers hl, hr, n (0 < hl, hr < 100, 0 ≤ n ≤ 100) — the heights of the holes and the number of the mirrors.

Next n lines contain the descriptions of the mirrors. The i-th line contains space-separated vi, ci, ai, bi; the integer vi (1 ≤ vi ≤ 1000) is the score for the i-th mirror; the character ci denotes i-th mirror's position — the mirror is on the ceiling if ci equals "T" and on the floor if ci equals "F"; integers ai and bi (0 ≤ ai < bi ≤ 105) represent the x-coordinates of the beginning and the end of the mirror.

No two mirrors will share a common point. Consider that the x coordinate increases in the direction from left to right, so the border with the hole at height hl has the x coordinate equal to 0 and the border with the hole at height hr has the x coordinate equal to 105.

Output

The only line of output should contain a single integer — the maximum possible score a player could gain.

Note

The second sample is depicted above. The red beam gets 10 + 50 + 5 + 35 + 8 + 2 = 110 points and the blue one gets 120.

The red beam on the picture given in the statement shows how the laser beam can go approximately, this is just illustration how the laser beam can gain score. So for the second sample there is no such beam that gain score 110.

D. Кубики

геометрия дп Структуры данных *2700

Однажды Петя получил на день рождения набор деревянных кубиков в подарок от своей мамы. Недолго думая, Петя построил из этих кубиков целый город.

Город в основании представляет собой квадрат размера n × n, разделенный на единичные квадратики. Стороны квадрата параллельны осям координат, противоположные углы квадрата имеют координаты (0, 0) и (n, n). На каждом из единичных квадратиков Петя построил башню из деревянных кубиков. Сторона деревянного кубика также имеет единичную длину.

После этого Петя отошел от своего творения на бесконечно большое расстояние и посмотрел на него в направлении вектора v = (vx, vy, 0). Петю интересует сколько различных кубиков видно из этого положения. Помогите ему, найдите это количество.

Каждый кубик включает в себя свою границу. Считается, что кубик видно, если существует луч, выходящий из некоторой точки p, принадлежащей кубику, в направлении вектора  - v, который не содержит точек, принадлежащих другим кубикам.

Входные данные

В первой строке записаны три целых числа n, vx и vy (1 ≤ n ≤ 103, |vx|, |vy| ≤ |104|, |vx| + |vy| > 0).

В следующих n строках записано по n целых чисел: j-ое число в i-ой строке aij (0 ≤ aij ≤ 109, 1 ≤ i, j ≤ n), обозначает высоту башни в кубиках, стоящую на единичном квадратике с противоположными углами в точках (i - 1, j - 1) и (i, j).

Выходные данные

Выведите единственное целое число — количество видимых кубиков.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

C. Электроник-футболист

Бинарный поиск геометрия *2000

В юном месяце апреле в старом парке тает снег, и ребята, в числе которых присутствует Сергей Сыроежкин, играют в футбол. Но друзья Сыроежкина не знают, что на самом деле вместо него будет играть Электроник. Электроник — робот, поэтому обладает некоторыми преимуществами перед ребятами. Например, он умеет попадать мячом прямо в заданную точку. А еще, ему не ведомо понятие «поддавки». Сочетание этих свойств делает из Электроника идеального футболиста — как только к нему попадает мяч, он может точно прицелиться и попасть в ворота. Такой тактики он и придерживался первую половину матча, однако гол забить получалось редко. У команды соперников был очень хороший вратарь, который ловил почти все мячи, летящие прямо в ворота. Но Электроник очень быстро соображает, он понял, что можно обмануть вратаря. Ведь ребята играют в футбольной коробке с твердыми стенами. Электроник может пнуть мяч в другую сторону, тогда вратарь не будет пытаться поймать этот мяч. Тогда, если мяч отскочит от стенки и полетит в ворота, будет забит заветный гол.

Ваша задача — помочь Электронику определить точку на стенке футбольной коробки, в которую Электронику нужно пнуть мяч, чтобы, отскочив ровно один раз от этой стенки, он попал прямо в ворота. В первой половине матча Электронику сильно досталось мячом по голове, в результате чего некоторые схемы были повреждены. Из-за полученной травмы Электроник может целиться только в правую от него стенку (Электроник стоит лицом к воротам соперника).

Футбольная коробка имеет форму прямоугольника. Введем двумерную систему координат таким образом, чтобы точка (0, 0) лежала в левом нижнем углу поля, если смотреть на коробку сверху. Электроник играет за команду, чьи ворота справа. Футбольное поле дворовое, поэтому ворота соперников Электроника могут находиться не посередине левой стенки.

В заданной системе координат вам даны:

  • y1, y2y-координаты боковых стоек ворот соперников Электроника;
  • ywy-координата стенки, в которую целится Электроник;
  • xb, yb — координаты положения мяча, в момент удара;
  • r — радиус мяча.

Гол считается забитым, если центр мяча пересекает ось OY в заданной системе координат между точками (0, y1) и (0, y2). Мяч движется прямолинейно. Удар мяча о стену считается абсолютно упругим (мяч не сжимается от удара), угол падения равен углу отражения. Если мяч отскакивает от стены не в створ ворот, то есть задевает другую стену или штангу, то команда противников перехватывает мяч и Электроник начинает искать ошибку в расчетах, что делает его не дееспособным. Такого исхода, по возможности, следует избежать. Будем считать, что мяч задевает объект, если расстояние от центра мяча до объекта не более радиуса мяча r.

Входные данные

В первой и единственной строке вам даны целые числа y1, y2, yw, xb, yb, r (1 ≤ y1, y2, yw, xb, yb ≤ 106; y1 < y2 < yw; yb + r < yw; r < y2 - y1).

Гарантируется, что мяч расположен в поле корректно, не пересекает ни одну из стен, не соприкасается со стеной, в которую целится Электроник. Штанги не могут располагаться в углах поля.

Выходные данные

Если Электроник не сможет забить гол описанным способом, выведите «-1» (без кавычек). Иначе выведите единственное число xw — абсциссу точки прицеливания Электроника.

Если возможных точек прицеливания несколько — выведите абсциссу любой. При проверке правильности ответа все сравнения производятся с допустимой абсолютной погрешностью равной 10 - 8.

Рекомендуется выводить как можно больше знаков после десятичной точки.

Примечание

Обратите внимание на то, что в первом и третьем примерах возможны и другие корректные значения абсциссы xw.

D. Ежик и звезды

геометрия дп математика сортировки Структуры данных *2700

По вечерам Ежик ходил к Медвежонку в гости считать звезды. Они усаживались на бревнышке и, прихлебывая чай, смотрели на звездное небо. Оно висело над крышей, прямо за печной трубой. Справа от трубы были звезды Медвежонка, а слева — Ежика. Обычно, Ежик просто считал все звезды, поэтому он знает, что всего их n. В этот раз он решил немного усложнить себе задачу. Он мысленно ввел систему координат: начало координат положил в точке пересечения крыши и трубы, ось OX направил вдоль крыши влево, ось OY — вдоль трубы вверх (см. рисунок). Ежик проводит два луча из начала координат под углами α1 и α2 к оси OX.

Теперь он выбирает любую из звезд, лежащих строго между этими лучами. После этого он опять проводит лучи, выходящие из этой звезды, под теми же углами α1 и α2 к оси OX и выбирает очередную звезду, лежащую строго между новыми лучами. Так он повторяет до тех пор, пока между лучами, выходящими из очередной звезды, есть еще звезды, которые он может выбрать.

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

Ваша задача — найти наибольшее количество звезд m, которое может содержать цепочка, полученная Ежиком.

Обратите внимание, что цепочка обязательно должна начинаться в точке начала координат, которая не учитывается при подсчете количества звезд m в цепочке.

Входные данные

В первой строке дано целое число n (1 ≤ n ≤ 105) — количество звезд. Во второй строке в виде обыкновенных дробей вам даны отношения «a/b c/d», такие что и (0 ≤ a, b, c, d ≤ 105; ; ; ). Заданные числа a, b, c, d — целые.

В следующих n строках даны пары целых чисел xi, yi (1 ≤ xi, yi ≤ 105)— координаты звезд.

Гарантируется, что все звезды имеют различные координаты.

Выходные данные

В единственной строке выведите число m — ответ на задачу.

Примечание

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

C. Угол обзора

геометрия математика Перебор *1800

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

Из-за того, что Вы проводите много времени «за монитором», у Вас не очень хорошее зрение. Поэтому Вам необходимо написать программу, которая будет проходить этот тест.

Входные данные

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

В следующих n строках находятся по два целых числа, разделенных пробелом: xi, yi (|xi|, |yi| ≤ 1000) — координаты i-того манекена. Гарантируется, что в начале координат нет манекена. Гарантируется, что никакие два манекена не находятся в одной точке плоскости.

Выходные данные

Выведите единственное вещественное число — величину искомого угла в градусах. Ответ будет считаться правильным, если относительная или абсолютная погрешность не будет превышать 10 - 6.

Примечание

Решение для первого примера показано ниже:

Решение для второго примера показано ниже:

Решение для третьего примера показано ниже:

Решение для четвертого примера показано ниже:

E. Теория струн

геометрия математика Строки *3100

Эмускальд — музыкант-новатор, он всегда пытается выйти за рамки творения музыки. Теперь он придумал революционный музыкальный инструмент — прямоугольную арфу.

Прямоугольная арфа является прямоугольником n × m единиц, она состоит из n рядов и m столбцов. Ряды пронумерованы от 1 до n сверху вниз. Аналогично, столбцы пронумерованы от 1 до m слева направо. Крепления для струн расположены равномерно по каждой стороне, по одному креплению на единице длины. Таким образом, существует по n креплений на левой и правой сторонах арфы и по m креплений на верхней и нижней сторонах. Арфа имеет ровно n + m различных струн, каждая струна соединяет два разных крепления, расположенных на разных сторонах арфы.

Эмускальд приказал своему ученику изготовить первую в мире прямоугольную арфу. Однако, он не упомянул, что никакие две струны не могут пересекаться (если струны пересекаются, то играть на арфе невозможно). Две струны пересекаются, если отрезки, соединяющие их крепления, пересекаются. Чтобы исправить арфу, Эмускальд может выполнять операции двух типов:

  1. выбрать два различных столбца и поменять их крепления на каждой стороне арфы, не меняя сцепления каждой струны;
  2. выбрать два различных ряда и поменять их крепления на каждой стороне арфы, не меняя сцепления каждой струны.

В следующем примере он может починить арфу, поменяв местами два столбца:

Помогите Эмускальду завершить свое детище и найдите перестановки, показывающие, как надо расположить ряды и колонки арфы. В противном случае сообщите, что сделать это невозможно. Юноша может снимать и натягивать струны на крепления, так что физическое расположение струн не имеет значения.

Входные данные

Первая строка входных данных содержит два целых числа n и m (1 ≤ n, m ≤ 105), разделенных пробелами, высота и ширина арфы в единицах. Каждая из следующих n + m строк содержит четыре токена через пробел, описывающих одну струну: два символа ai, bi, и два целых числа pi, qi. Пара ai и pi описывает первое крепление, а пара bi и qi описывает второе крепление струны.

Пара s, x описывает положение одного крепления следующим образом:

  1. s равняется одному из символов «L», «T», «R» или «B» (без кавычек), и означает, что крепление находится на левой, верхней, правой или нижней границе арфы соответственно;
  2. x равняется номеру ряда, если крепление находится на левой или правой границе арфы, и номеру столбца, если крепление находится на верхней или нижней границе арфы.

Гарантируется, что никакие две струны не присоединены к одному и тому же креплению.

Выходные данные

Если можно переставить ряды и столбцы так, чтобы исправить арфу, в первой строке выведите n целых чисел — старые номера рядов, теперь размещенные сверху вниз в исправленной арфе. Во второй строке выведите m целых чисел, разделенных пробелом — старые номера столбцов, теперь расположенные слева направо в исправленной арфе.

Если же невозможно переставить ряды и столбцы так, чтобы исправить арфу, выведите «No solution» (без кавычек).

A. Завидный забор

геометрия математика реализация *1100

Эмускальду надо построить забор вокруг фермы, но вот самому это делать ему лень. Так что юноша приобрел робота-заборостройщика.

Эмускальду хочется, чтобы забор представлял собой правильный многоугольник. К сожалению, его робот строит забор, двигаясь по единственному пути. При этом робот может соединять стороны забора только под заданным углом a.

Сможет ли робот построить забор, который хочет Эмускальд? Иными словами, существует ли правильный многоугольник с углами, равными a?

Входные данные

Первая строка входных данных содержит целое число t (0 < t < 180) — количество тестов. Каждая из последующих t строк содержит единственное целое число a (0 < a < 180) — угол, под которым робот может соединять стороны, в градусах.

Выходные данные

Для каждого теста выведите в единственной строке «YES» (без кавычек), если робот может построить тот забор, который хочет Эмускальд. Если это невозможно, выведите «NO» (без кавычек).

Примечание

В первом тесте невозможно построить забор, так как не существует правильного многоугольника с углами .

Во втором тесте забор представляет собой правильный треугольник, а в последнем тесте — квадрат.

C. Последняя Дыра!

геометрия Перебор *2600

У Луи есть n кругов на плоскости. Центр круга номер i находится в точке (xi, yi). В момент времени ноль круги начинают одновременно расти. Иными словами, радиус каждого круга в момент времени t (t > 0) равняется t. Круги изображаются в виде черных дисков на бесконечной белой плоскости. Итак, в каждый момент плоскость состоит из нескольких черных и белых регионов. Заметьте, что круги, разрастаясь, могут накладываться друг на друга.

Будем называть дырой замкнутую, связную белую область. Например, на рисунке изображены две дыры, обозначенные красной границей. Пока круги растут, они могут создать новые дыры и легко видеть, что каждая созданная дыра в конце концов исчезнет. Луи просит Вас найти момент времени, когда исчезает последняя дыра. Другими словами, первый момент времени, после которого никогда не будет ни одной дыры на плоскости.

Входные данные

Первая строка входных данных содержит целое число n (1 ≤ n ≤ 100). Каждая из следующих n строк содержит по два целых числа xi и yi ( - 104 ≤ xi, yi ≤ 104), обозначающих расположение i-того круга.

Гарантируется, что никакие два круга не имеют центра в одной и той же точке.

Выходные данные

Выведите момент времени, когда исчезает последняя дыра. Если ни в один момент времени не существует ни одной дыры, выведите -1.

Ответ будет считаться правильным, если абсолютная или относительная погрешность не превышают 10 - 4.

B. Множество точек

геометрия Конструктив *2300

Выпуклость множества точек на плоскости — это размер максимального по размеру подмножества точек, которые образуют выпуклый многоугольник. Ваша задача — построить множество из n точек с выпуклостью ровно m. Никакие три точки не должны лежать на одной прямой.

Входные данные

В единственной строке записано два целых числа n и m (3 ≤ m ≤ 100, m ≤ n ≤ 2m).

Выходные данные

Если решения не существует, выведите «-1». Иначе выведите n пар целых чисел — координаты точек любого множества, выпуклость которого равна m. Координаты не должны по модулю превосходить 108.

A. Точка на спирали

геометрия Перебор реализация *1400

Конь Валера живет на плоскости. На его плоскости задана декартова система координат. Также на его плоскости нарисована бесконечная спираль. Спираль состоит из отрезков: [(0, 0), (1, 0)], [(1, 0), (1, 1)], [(1, 1), ( - 1, 1)], [( - 1, 1), ( - 1,  - 1)], [( - 1,  - 1), (2,  - 1)], [(2,  - 1), (2, 2)] и так далее. Таким образом, эта бесконечная спираль проходит через каждую точку плоскости с целыми координатами.

Конь Валера живет на плоскости в точке с координатами (0, 0). Он хочет прогуляться вдоль спирали до точки с координатами (x, y). У Коня Валеры четыре ноги, поэтому ему очень сложно поворачивать. Посчитайте, сколько раз ему придется повернуть, если он будет идти по спирали от точки (0, 0) до точки (x, y).

Входные данные

В первой строке заданы два целых числа x и y (|x|, |y| ≤ 100).

Выходные данные

Выведите единственное целое число — сколько раз придется повернуть Валере.

E. ДравДэ спасает мир

геометрия математика *2800

О ужас! Империя галактических куриц пытается захватить прекрасный город «З», они построили огромный куриный инкубатор, производящий миллионы куриц-воинов в день, и огородили его забором. Огромный инкубатор имеет вид многоугольника с внутренностью на плоскости Oxy с n вершинами. Естественно, ДравДэ не сидит на месте, он хочет разрушить империю куриц. И конечно же начнет он с инкубатора.

ДравДэ находится строго вне территории инкубатора в точке A(xa, ya) и хочет попасть внутрь и поубивать всех куриц, работающих там. Но не всё так просто! Дело в том что ДравДэ недавно катался на роликах и сломал обе ноги, и попасть на территорию инкубатора ему поможет его реактивный самолет ЛЕВАП-41.

ЛЕВАП-41 летает со скоростью V(xv, yv, zv). ДравДэ может сесть на него в точке A, пролететь некоторое время, а потом десантироваться. ДравДэ очень тяжелый и поэтому летит вертикально вниз со скоростью Fdown, но в любой точке своего свободного полёта ДравДэ может открыть парашют и с этого момента ДравДэ будет лететь со скоростью ветра U(xu, yu, zu) до тех пор пока не приземлится. К сожалению, ДравДэ не силен в математике. Помогите бедному спасателю мира так выбрать план десантирования, чтобы приземлиться на территорию инкубатора. В первую очередь ДравДэ хочет минимизировать время своего полета на самолете, а во вторую — время своего свободного полета до открытия парашюта.

Входные данные

В первой строке задано число n (3 ≤ n ≤ 104) — количество вершин в заборе инкубатора. Далее n строк содержащих координаты вершин забора (два целых числа xi, yi) в порядке обхода по или против часовой стрелки. Гарантируется, что забор не содержит самокасаний и самопересечений.

В следующих четырех строках заданы координаты точки A(xa, ya), скорости V(xv, yv, zv), Fdown и скорость U(xu, yu, zu). Все числа во входных данных целые и по модулю не превосходят 104. Гарантируется, что zv > 0 и Fdown, zu < 0, а точка A находится строго снаружи инкубатора.

Выходные данные

В первую строку выведите два числа t1, t2 такие, что если ДравДэ десантируется во время t1, считая от начала полёта, и потом откроет парашют через время t2 после десантирования, он попадет на территорию инкубатора (попадание на границу территории считается попаданием на территорию). Если ДравДэ не должен открывать парашют, то второе число должно быть равно длительности полёта. Если ДравДэ никак не может попасть на территорию инкубатора, выведите -1 -1. Если решений несколько, выведите минимальное по t1, а при равенстве t1 — минимальное по t2. Ваш ответ должен иметь относительную или абсолютную погрешность меньше чем 10 - 6.

A. Головоломка в виде прямоугольника

геометрия *2000

Вам заданы два прямоугольника на плоскости. Центры обоих прямоугольников находятся в начале координат (имеется ввиду центр симметрии прямоугольника). Стороны первого прямоугольника параллельны осям координат: длина стороны, параллельной оси Ox, равна w, длина стороны, параллельной оси Oy, равна h. Второй прямоугольник получается поворотом первого прямоугольника относительно начала координат на угол α.

Ваша задача — определить площадь области, которая принадлежит обоим заданным прямоугольникам. На рисунке эта область закрашена.

Входные данные

В первой строке заданы три целых числа w, h, α (1 ≤ w, h ≤ 106; 0 ≤ α ≤ 180). Угол α задан в градусах.

Выходные данные

В единственной строке выведите вещественное число — площадь области, которая принадлежит обоим заданным прямоугольникам.

Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 6.

Примечание

Второй тестовый пример изображен на рисунке выше.

D. Ксения и квадрат

геометрия математика Теория вероятностей *2700

Ксения — яростный математик, ее интересуют совершенно невероятные математические головоломки.

Сегодня Ксения раздобыла выпуклый многоугольник ненулевой площади, и теперь ей интересно: если среди всех целочисленных точек (точек с целыми координатами) внутри или на границе многоугольника равновероятно выбрать пару различных точек, а затем построить квадрат, две противоположные вершины которого лежат в выбранных точках, чему равно математическое ожидание площади такого квадрата?

Пара различных точек выбирается равновероятно среди всех пар различных точек, которые находятся внутри или на границе многоугольника. Пары точек p, q (p ≠ q) и q, p считаются одинаковыми.

Помогите Ксении! Вычислите искомое математическое ожидание.

Входные данные

В первой строке задано целое число n (3 ≤ n ≤ 105) — количество вершин выпуклого многоугольника Ксении. В следующих n строках заданы координаты вершин многоугольника в порядке некоторого обхода. В i-ой строке записаны целые числа xi, yi (|xi|, |yi| ≤ 106) — координаты i-ой в порядке обхода вершины.

Выходные данные

Выведите единственное вещественное число — искомое математическое ожидание.

Ответ будет считаться правильным, если его абсолютная или относительная погрешность не превышает 10 - 6.

D. Задача Царя?

геометрия жадные алгоритмы *2600

Каждый настоящий Царь в своей жизни должен поработить мир, провести финал чемпионата мира Codeforces, выиграть розовую панду в тире и объехать свое царство.

Первые три вещи Царь Цопа уже сделал в своей жизни. Осталось всего лишь объехать свое Царство. Оно, по неизвестным науке причинам, представляет собой бесконечную декартову систему координат, на которой отмечены города. Каждый город будем считать точкой на этой плоскости. Буквально перед самым отъездом, к Царю пришел гонец и сообщил пренеприятнейшее известие о том, что на самом деле города в Царстве расположены в точках с координатами (x1, 0), (x2, 0), ..., (xn, 0), а еще один город в точке (xn + 1, yn + 1) (то есть всего их в Царстве ровно n + 1).

Но выбора у Царя нет, и он пустился в дальнее путешествие. Начало его пути — это город номер k. Ваша задача — найти такой путь Царя через все города в произвольном порядке (можно даже посещать один город дважды), который имеет наименьшую длину. Закончить путешествие разрешается в любом городе. Можно считать, что между любыми двумя различными городами существует дорога длиной, равной расстоянию между соответствующими точками на плоскости.

Никакие два города не могут находиться в одной точке.

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ n + 1) — число городов и номер стартового города соответственно. Во второй строке через пробел записано n + 1 целых чисел xi. В третьей строке записано yn + 1. Все координаты — целые числа, не превосходящие по модулю 106. Никакие два города не могут находиться в одной точке.

Выходные данные

Выведите одно число — наименьшую длину путешествия. Ваш ответ должен иметь относительную или абсолютную погрешность меньше, чем 10 - 6.

D. Многоугольник

геометрия Конструктив *2300

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

Входные данные

Входные данные содержат одно целое число n (3 ≤ n ≤ 100) — количество вершин многоугольника.

Выходные данные

Выведите n строк, содержащие координаты вершин n-угольника «xi yi» в порядке обхода против часовой стрелки. Координаты вершин не должны превышать 106 по абсолютной величине. Длины сторон должны быть в диапазоне [1, 1000] (не обязательно целые). Сравнение углов и сторон вашего многоугольника между собой при проверкe будет производиться с точностью 10 - 3.

Если решения не существует, выведите «No solution» (без кавычек).

D. Сережа и прямые

Бинарный поиск геометрия сортировки Структуры данных *2500

Сережа разместил n точек на плоскости. Сейчас Сережа хочет разместить на плоскости две прямые, пересекающиеся под прямым углом, так, чтобы одна из прямых пересекала ось Ox под углом 45 градусов, а максимальное из расстояний от точек до прямых было бы минимально.

В данной задаче мы считаем, что расстояние между точками (x1, y1) и (x2, y2) равно |x1 - x2| + |y1 - y2|. Расстояние от точки до прямых — это минимальное из расстояний от точки до некоторой точки, принадлежащей одной из прямых.

Помогите Сереже, найдите максимальное расстояние от точек до оптимально расположенных прямых.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 105). В следующих n строках заданы координаты точек. В i-той строке записаны два целых числа xi, yi (|xi|, |yi| ≤ 109).

Выходные данные

В единственную строку выведите единственное вещественное число — ответ на задачу. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 6.

C. Калила и Димна на лесозаготовках

геометрия дп *2100

Калила и Димна — два шакала. Они живут в огромных джунглях. Однажды шакалы решили устроиться на завод лесозаготовки и подработать.

Управляющий завода хочет, чтобы они отправились в джунгли и срубили n деревьев высотой a1, a2, ..., an. Для этого Калила и Димна купили цепную пилу в магазине. Каждый раз, когда они используют пилу на дереве номер i, они уменьшают высоту этого дерева на единицу. Каждый раз Калила и Димна должны заправить пилу для использования. Цена заправки зависит от того, какие деревья полностью спилены (дерево считается полностью спиленным, если его высота равна 0). Если максимальный идентификатор полностью срубленного дерева равняется i (первоначально это дерево имело высоту ai), то цена заправки пилы равняется bi. Если ни одно дерево не срублено полностью, то заправлять пилу запрещается. Изначально пила заправлена. Известно, что для каждого i < j, ai < aj и bi > bj, а также bn = 0 и a1 = 1.

Калила и Димна хотят полностью срубить все деревья с минимальными затратами. Они ждут Вашей помощи! Поможете?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). Во второй строке записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109). В третьей строке записано n целых чисел b1, b2, ..., bn (0 ≤ bi ≤ 109).

Гарантируется, что a1 = 1, bn = 0, a1 < a2 < ... < an и b1 > b2 > ... > bn.

Выходные данные

В единственной строке должна быть записана минимальная стоимость вырубания всех деревьев.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

E. Прятки

геометрия реализация *2400

Вася и Петя играют в прятки. Петя спрятался, а Вася должен его найти. В помещении, где они играют, есть всего одна непрозрачная стена и одно двустороннее зеркало. Вася и Петя представляют собой точки с координатами (xv, yv) и (xp, yp) соответственно. Стена — это отрезок, соединяющий точки с координатами (xw, 1, yw, 1) и (xw, 2, yw, 2), а зеркало — отрезок, соединяющий точки (xm, 1, ym, 1) и (xm, 2, ym, 2).

Если препятствие имеет общую точку с линией обзора, считается, что ребята не видят друг друга через эту линию обзора. Если зеркало имеет общую точку с линией обзора, считается, что ребята могут увидеть друг друга в зеркале, то есть происходит отражение. Отражение от зеркала происходит по обычным физическим законам: угол падения равен углу отражения. Падающий луч находится в той же полуплоскости относительно зеркала, что и отраженный. То есть чтобы увидеть друг друга в зеркало, Вася и Петя должны находиться по одну и ту же сторону от прямой, содержащей зеркало (см. пример 1). Если линия обзора проходит параллельно зеркалу, отражения не происходит, при этом зеркало не рассматривается как препятствие (см. пример 4).

Васе стало интересно, может ли он увидеть Петю, не сходя с места. Помогите ему справиться с этой задачей.

Входные данные

В первой строке записано два числа xv и yv — координаты Васи.

Во второй строке записано два числа xp и yp — координаты Пети.

В третьей строке записано 4 числа xw, 1, yw, 1, xw, 2, yw, 2 — координаты стены.

В четвертой строке записано 4 числа xm, 1, ym, 1, xm, 2, ym, 2 — координаты зеркала.

Все координаты — целые числа, не превосходящие по модулю 104. Гарантируется, что отрезки не имеют общих точек, Вася и Петя не находятся ни на каком из отрезков, координаты Васи и Пети не совпадают, отрезки не вырождаются в точки.

Выходные данные

Выведите YES если Вася может увидеть Петю, не сдвигаясь с места, иначе выведите NO.

D. Рыцари

геометрия графы кратчайшие пути сортировки *2000

Над Берляндией снова сгустились тучи. Армия злого лорда Ван де Марта собирается захватить королевство. На военный совет созванный королём Берляндии Валерием Суровым прибыло n рыцарей. После долгих дискуссий стало ясно, что в королевстве есть ровно n опорных точек (сдача каждого из них врагу равносильна поражению в войне) и каждый рыцарь займёт одну из этих точек.

Берляндия разделена на m + 1 область m заборами, и единственный способ перейти из одной области в другую это перелезть через забор. Каждый забор представляет собой окружность на плоскости, причём никакие два забора не имеют общих точек и ни одна опорная точка не находится на заборе. Вам задано k пар чисел ai, bi. Для каждой пары вам нужно узнать: сколько заборов придётся пересечь рыцарю, находящемуся в опорной точке номер ai, чтобы достигнуть опорной точки bi (в случае если Ван де Март нанесёт первый удар в опорную точку номер bi). Поскольку каждый рыцарь путешествует на коне (а коня непросто перекидывать через забор), то вам нужно для каждой пары найти минимальное число пересечений.

Входные данные

В первой строке входных данных записано три целых числа n, m, k (1 ≤ n, m ≤ 1000, 0 ≤ k ≤ 100000). В следующих n строках записано по два целых числа Kxi, Kyi ( - 109 ≤ Kxi, Kyi ≤ 109) — координаты опорной точки номер i. Опорные точки могут совпадать.

Каждая из следующих m строк описывает забор номер i тремя целыми числами ri, Cxi, Cyi (1 ≤ ri ≤ 109,  - 109 ≤ Cxi, Cyi ≤ 109) — радиусом и центром окружности, на которой находится соответствующий забор.

Далее заданы k пар целых чисел ai, bi (1 ≤ ai, bi ≤ n), каждая в отдельной строке — запросы на которые вам придётся отвечать. ai и bi могут совпадать.

Выходные данные

Выведите ровно k строк, в каждой из которых записано одно число — ответ на соответствующий запрос.

E. Летний заработок

Бинарный поиск битмаски геометрия Перебор сортировки *2500

Многие школьники ищут себе работу на лето, и вот, однажды, когда Геральд был еще школьником, он тоже решил поработать летом. Но так как Геральд был совсем необычным школьником, то и работу он нашел себе неожиданную. Некая Компания согласилась заплатить ему определенную сумму денег, если он нарисует им три одинаковых круга на плоскости, которые не будут пересекаться друг с другом (но могут касаться). Центры кругов он может выбирать только из n вариантов, предоставленных Компанией. Радиус кругов он волен выбирать сам (радиус всех трех кругов должен быть одинаковым); при этом, чем больше окажется этот радиус, тем больше ему заплатят.

Помогите Геральду заработать как можно больше.

Входные данные

В первой строке записано единственное целое число n — количество центров (3 ≤ n ≤ 3000). В следующих n строках записаны по два целых числа xi, yi ( - 104 ≤ xi, yi ≤ 104) — координаты потенциальных центров кругов, предоставленные Компанией.

Все заданные точки различны.

Выходные данные

Выведите единственное вещественное число — максимальный возможный радиус кругов. Ответ будет засчитан, если его относительная или абсолютная погрешность не превышает 10 - 6.

B. Четырехугольник с максимальной площадью

геометрия Перебор *2100

Яхуб нарисовал множество из n точек на декартовой плоскости. Он назвал их «особыми точками». Четырехугольник — это многоугольник без самопересечений, имеющий четыре стороны (или ребра) и четыре вершины (или угла). Пожалуйста, обратите внимание, что четырехугольник может не быть выпуклым. Особый четырехугольник — это такой четырехугольник, в котором все четыре вершины принадлежат множеству особых точек. Вам дано множество особых точек. Пожалуйста, вычислите максимальную площадь особого четырехугольника.

Входные данные

В первой строке записано целое число n (4 ≤ n ≤ 300). В каждой из следующих n строк записано по два целых числа: xi, yi ( - 1000 ≤ xi, yi ≤ 1000) — декартовы координаты i-той особой точки. Гарантируется, что никакие три точки не лежат на одной прямой. Гарантируется, что никакие две точки не совпадают.

Выходные данные

Выведите единственное вещественное число — максимальную площадь особого четырехугольника. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 9.

Примечание

В тестовом примере можно выбрать первые четыре точки и построить на них четырехугольник — квадрат со стороной 4. Таким образом, площадь равняется 4·4 = 16.

C. Шкаф и шарики

геометрия *1900

У девочки Ксюши есть шкаф, который спереди выглядит как арка, составленная из полуокружности радиуса r (верх шкафа) и двух стенок высоты h (боковые стороны шкафа). Шкаф имеет глубину r, то есть сбоку он выглядит как прямоугольник с основанием r и высотой h + r. На рисунке ниже изображено, как выглядит этот шкаф (слева — вид спереди, справа — вид сбоку).

На день рождения Ксюше подарили очень много шариков. Ксюша не любит беспорядок, поэтому она хочет сложить шарики в шкаф. По счастливой случайности каждый шарик — это сфера, радиус который в точности равен . Помогите Ксюше определить, какое максимальное количество шариков она может положить в свой шкаф.

Считается, что шарик положен в шкаф, если никакую часть шарика нельзя увидеть, посмотрев на шкаф сбоку (справа или слева). В шкафу шарики могут касаться друг друга. Сжимать шарики или как-то по другому их деформировать запрещается. Можете считать, что толщина стенок шкафа пренебрежимо мала.

Входные данные

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

Выходные данные

Выведите единственное целое число — максимальное количество шариков, которое поместится в шкаф.

D. Поиск сов

Бинарный поиск геометрия сортировки Структуры данных хэши *2400

Император Палпатин очень любит сов. У Императора есть чертеж новой Звезды Смерти, на котором нарисовано n различных отрезков и m различных окружностей. Будем полагать, что отрезки пронумерованы от 1 до n некоторым образом, и окружности пронумерованы от 1 до m некоторым образом.

Совой, по мнению Палпатина, является совокупность пары различных окружностей (i, j) (i < j) и одного отрезка k такая, что:

  1. окружности i и j симметричны относительно прямой, содержащей отрезок k;
  2. окружности i и j не имеют общих точек;
  3. окружности i и j имеют одинаковый радиус;
  4. отрезок k пересекается с отрезком, соединяющем центры окружностей i и j.

Помогите Палпатину, посчитайте количество различных сов на рисунке.

Входные данные

В первой строке записаны два целых числа — n и m (1 ≤ n ≤ 3·105, 2 ≤ m ≤ 1500).

Далее в n строках записаны по четыре целых числа x1, y1, x2, y2 — координаты двух концов текущего отрезка. Гарантируется, что каждый отрезок имеет положительную длину.

Затем в m строках записаны по три целых числа xi, yi, ri — координаты центра и радиус i-ой окружности. Все координаты — целые числа, не превосходящие 104 по абсолютной величине. Радиус — целое положительное число, не превосходящее 104.

Гарантируется, что все отрезки и все окружности являются различными.

Выходные данные

Выведите единственное число — ответ на задачу.

Пожалуйста, не используйте спецификатор %lld для вывода 64-битных чисел на С++. Рекомендуется использовать поток cout или спецификатор %I64d.

Примечание

Это сова из первого примера. Она сидит и ждет, когда вы ее посчитаете.

C. Тарелки

геометрия реализация *2200

Однажды у Пети было такое хорошее настроение, что он решил помочь маме вымыть посуду. В раковине скопилось n грязных тарелок. Геометрически каждая тарелка представляет собой усеченный конус. Толщиной стенок и дна тарелки можно пренебречь. Вымытые тарелки Петя складывает одну на другую естественным образом, то есть так, что их вертикальные оси совпадают (см. рисунок). Вам будет задан порядок, в котором Петя моет тарелки. Определите высоту полученной конструкции, т.е. расстояние от дна самой нижней тарелки в стопке до верха самой верхней тарелки.

Входные данные

В первой строке входного файла задано целое число n (1 ≤ n ≤ 3000). Каждая из последующих n строк содержит по 3 целых числа h, r и R (1 ≤ h ≤ 10000, 1 ≤ r < R ≤ 10000), обозначающих высоту тарелки, радиус ее дна и радиус ее верха. Тарелки заданы во входном файле в том порядке, в котором Петя складывает их на стол.

Выходные данные

Выведите высоту полученной конструкции с точностью не менее 10 - 6.

E. Весело рисовать круги

геометрия Комбинаторика *3000

Дано множество из S точек на плоскости. Это множество не включает начала координат O(0, 0), а для каждых двух различных точек A и B из множества треугольник OAB имеет строго положительную площадь.

Рассмотрим множество пар точек (P1, P2), (P3, P4), ..., (P2k - 1, P2k). Назовем такое множество хорошим тогда и только тогда, когда:

  • k ≥ 2.
  • Все Pi различные и каждая точка Pi является элементом S.
  • Для любых двух пар (P2i - 1, P2i) и (P2j - 1, P2j) описанные окружности треугольников OP2i - 1P2j - 1 и OP2iP2j имеют единственную общую точку, и описанные окружности треугольников OP2i - 1P2j и OP2iP2j - 1 имеют единственную общую точку.

Вычислите количество хороших множеств пар точек по модулю 1000000007 (109 + 7).

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 1000) — количество точек в S. Каждая из следующих n строк содержит четыре целых числа ai, bi, ci, di (0 ≤ |ai|, |ci| ≤ 50; 1 ≤ bi, di ≤ 50; (ai, ci) ≠ (0, 0)). Эти целые числа обозначают точку .

Никакие две точки не совпадают.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю 1000000007 (109 + 7).

E. Инна и пупсики

Бинарный поиск геометрия реализация снм Структуры данных *2600

Инна, Дима и Сережа собрались в комнате. На улице холодно, поэтому Сережа предложил ребятам поиграть в настольную игру «Пупсики».

Поле для игры в «Пупсики» представляет собой безграничную плоскость, на которой находятся n синих пупсиков и m красных. Каждый пупсик — это отрезок, который растет во времени. В момент времени t синий пупсик (x, y) представляет собой синий отрезок с концами в точках (x - t, y + t), (x + t, y - t). Аналогично, в момент времени t красный пупсик (x, y) представляет собой красный отрезок с концами в точках (x + t, y + t), (x - t, y - t) плоскости. Первоначально, в момент времени t = 0, все пупсики — это точки на плоскости.

Цель игры — найти первый целочисленный момент времени, в который на плоскости будет существовать прямоугольник ненулевой площади, стороны которого целиком покрываются некоторыми пупсикам (сторона может быть покрыта несколькими пупсиками). Более формально, для любой точки границы прямоугольника должен существовать пупсик, которому эта точка принадлежит. При этом нужно считать, что пупсики являются замкнутыми отрезками, то есть содержат свои конечные точки.

Вам заданы позиции все пупсиков — помогите ребятам найти требуемый момент времени.

Входные данные

Первая строка входных данных содержит два целых числа n и m (1 ≤ n, m ≤ 2000).

В следующих n строках заданы координаты синих пупсиков. В i-той строке записаны целые числа xi, yi — координаты очередного пупсика. В следующих m строках заданы координаты m красных пупсиков в аналогичном формате.

Все координаты во входных данных не превосходят 106 по модулю. Обратите внимание, что все пупсики стоят в различных точках.

Выходные данные

В единственной строке выведите целое число — ответ на задачу. Если прямоугольник никогда не появится на плоскости, выведите «Poor Sereja!» без кавычек.

E. Cookie Clicker

геометрия дп *2800

Костя играет в компьютерную игру Cookie Clicker, основная цель которой — накопление запасов печенья. Получать печенья можно с помощью различных строений: можно просто кликать по специальному полю на экране, получая печенья за клики, можно купить фабрику печеньев, алхимическую лабораторию, машину времени, и все это будет приносить много-много печеньев.

В начале игры (момент времени 0) у Кости есть 0 печеньев и ни одного строения. На его выбор доступно n строений: i-ое строение стоит ci печеньев и в конце каждой секунды приносит vi печеньев. Кроме того, чтобы играть было еще интереснее, Костя решил поставить себе ограничение: в каждый момент времени он будет использовать только одно строение. Разумеется, он может по своему усмотрению менять активное строение каждую секунду.

Важно, что в версии игры, в которую играет Костя, покупать новые строения и менять активное строение можно только в моменты времени, кратные одной секунде. В один момент времени Костя может купить новое строение и тут же начать его использовать. Если Костя начал использовать строение в момент времени t, то первую прибыль оно сможет принести лишь в момент времени t + 1.

Костя хочет заработать не менее s печеньев как можно быстрее. Определите, за сколько секунд он сможет это сделать.

Входные данные

В первой строке находятся два целых числа n и s (1 ≤ n ≤ 2·105, 1 ≤ s ≤ 1016) — количество строений в игре и количество печеньев, которое Костя хочет заработать.

В каждой из следующих n строк записано два целых числа vi и ci (1 ≤ vi ≤ 108, 0 ≤ ci ≤ 108) — количество печеньев, которое приносит i-ое строение за одну секунду, и стоимость этого строения.

Выходные данные

Выведите единственное целое число — минимальное количество секунд, за которое Костя сможет заработать не менее s печеньев. Гарантируется, что он может это сделать.

E. Новогодние елочные украшения

геометрия расписания сортировки *2500

В России традиционно на новый год люди покупают и ставят себе в дом елку. Наряжают елку перед праздником обыкновенно всей семьей. Codeforces — (мы надеемся) это одна большая и дружная семья, поэтому в данной задаче мы будем наряжать елочку.

Итак, наше елочное украшение состоит из n кусочков, каждый из которых является листом цветной бумаги, контур которого — замкнутая ломаная особой формы. Кусочки располагаются один за другим (как показано на рисунке). Кусочек номер i представляет собой ломаную, которая проходит через точки: (0, 0), (0, y0), (1, y1), (2, y2), ..., (k, yk), (k, 0). Ширина каждого кусочка равна k.

Слева изображено как выглядит украшение, справа — кусочки бумаги, из которых оно состоит.

Кусочек с номером 1 (красный на рисунке) является самым внешним (его мы видим полностью), кусочек с номером 2 (желтый на рисунке) следует за ним (его мы видим уже не полностью, поскольку часть его закрыта первым кусочком) и так далее. Программисты — ребята любознательные, поэтому как только мы повесили украшение на елку, нам сразу же стало интересно: какая площадь от каждого кусочка видна зрителю?

Входные данные

В первой строке записано два целых числа n и k (1 ≤ n, k ≤ 300). В каждой из следующих n строк записано по k + 1 целому числу — описание ломаной. Если в i-ой строке записаны целые числа yi, 0, yi, 1, ..., yi, k, это означает, что ломаная i-ого кусочка проходит через точки (0, 0), (0, yi, 0), (1, yi, 1), (2, yi, 2), ..., (k, yi, k), (k, 0) (1 ≤ yi, j ≤ 1000).

Выходные данные

Выведите n вещественных чисел — для каждой ломаной площадь ее видимой части.

Ответ будет считаться правильным, если его относительная или абсолютная погрешность не будет превышать 10 - 4.

D. Медведь и прожекторы

битмаски геометрия дп *2200

Жил-был один медведь на плоскости Oxy. Он очень боялся темноты, поэтому ночью не мог передвигаться по точкам плоскости, которые не освещены. Однажды медведь захотел ночью прогуляться от своего дома, который находится в точке (l, 0), до дома своего друга, который находится в точке (r, 0), по отрезку длины (r - l). Конечно, для осуществления прогулки нужно, чтобы каждая точка отрезка была освещена. Именно поэтому медведь позвонил своему другу (да-да посреди ночи) с очень деликатной просьбой.

На плоскости Oxy расположены n прожекторов. Прожектор i находится в точке (xi, yi) и может освещать любой угол плоскости величиной ai градусов с вершиной в точке (xi, yi). Медведь попросил своего друга повернуть прожекторы так, чтобы он (медведь) смог в процессе своей прогулки по отрезку удалиться от дома, как можно дальше. Добрый друг согласился выполнить просьбу. А пока он выполняет ее, медведю очень интересно, на какое максимальное расстояние он сможет удалиться от дома? Помогите ему, найдите это расстояние.

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

Входные данные

В первой строке записаны три целых числа n, l, r (1 ≤ n ≤ 20;  - 105 ≤ l ≤ r ≤ 105), разделенных пробелом. В i-ой из следующих n строк записаны три целых числа xi, yi, ai ( - 1000 ≤ xi ≤ 1000; 1 ≤ yi ≤ 1000; 1 ≤ ai ≤ 90), разделенных пробелом — описание прожекторов.

Обратите внимание, два прожектора могут находиться в одной точке.

Выходные данные

Выведите единственное вещественное число — ответ на задачу. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не будет превышать 10 - 6.

Примечание

В первом примере одно из возможных решений такое:

Во втором примере единственное решение такое:

В третьем примере единственное решение такое:

E. Лиса и метеоритный дождь

геометрия *3100

Идет метеоритный дождь, на небе виднеются n метеоров. Небо можно рассматривать как двухмерную Евклидову плоскость, а метеоры — как точки на этой плоскости.

Лиса Сиель смотрит в небо. Она заметила, что орбита каждого метеора — прямая, а скорость каждого метеора постоянна. Теперь Сиель хочет узнать, чему равно максимальное количество метеоритов таких, что любая пара из них когда-либо встречалась (находились в одно и то же время в одном и том же месте)? Обратите внимание, что время не ограниченно и может быть отрицательным. Считается, что метеоры никогда не сталкиваются, когда оказываются в одно и то же время в одном и том же месте.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 1000). В каждой из следующих n строк записаны целые числа t1, x1, y1, t2, x2, y2 — описание орбиты метеора: во время t1, текущий метеор расположен в точке (x1, y1), а во время t2 метеор расположен в точке (x2, y2) ( - 106 ≤ t1, x1, y1, t2, x2, y2 ≤ 106t1 ≠ t2).

Никакие два метеора не будут постоянно находиться в одних и тех же точках плоскости. Другими словами, траектории метеоров не совпадают во времени.

Выходные данные

Выведите единственное целое число — максимальное количество метеоритов таких, что любая пара из них когда-либо встречалась.

Примечание

В первом примере, метеоры 1 и 2 встречаются во время t=-1 в точке (0, 0).

Во втором примере, метеоры 1 и 2 встречаются во время t=1 в точке (1, 0), метеоры 1 и 3 встречаются во время t=0 в точке (0, 0), а метеоры 2 и 3 встречаются во время t=2 в точке (0, 1).

В третьем примере никакие два метеора не встречаются

В четвертом примере есть только один метеор, его скорость равна нулю.

Если ваш браузер не поддерживает анимацию png, вы можете посмотреть gif анимацию по ссылкам:

388_E_img_1.gif

388_E_img_2.gif

388_E_img_4.gif

388_E_img_3.gif

E. Лампочка для министра

геометрия

К нам едет министр образования! Разумеется, никто не хочет ударить в грязь лицом перед таким высокопоставленным гостем. Но буквально за два часа до визита выяснилось, что в одном из классов не работает лампочка — ей, видите ли, энергии недостаточно. Решение проблемы нашлось быстро: нужно всего лишь выбрать местоположение лампочки так, чтобы она получала максимальное количество энергии.

Все знают, что мощность лампочки равна , где C — некоторая константа, а ri — евклидово расстояние от лампочки до i-го генератора. Следовательно, нам нужно минимизировать . Конечно, местоположение всех генераторов мы знаем.

Лампочка должна находиться на потолке класса. Потолок класса имеет форму строго-выпуклого m-угольника (сам класс имеет вид прямой призмы со строго-выпуклым m-угольником в основании). Помогите найти оптимальное местоположение лампочки. Считайте, что все генераторы находятся в плоскости потолка класса. Считайте, что в плоскости потолка класса введена некоторая декартова система координат.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 105) — количество генераторов. В каждой из следующих n строк записана пара целых чисел xi, yi, обозначающая координаты i-го генератора в плоскости потолка класса. Гарантируется, что никакие два генератора не находятся в одной точке плоскости потолка класса.

В следующей строке записано целое число m (3 ≤ m ≤ 105) — количество вершин в выпуклом многоугольнике, который описывает потолок класса. В каждой из следующих m строк записана пара целых чисел pi, qi, обозначающая координаты i-ой точки многоугольника в порядке обхода по часовой стрелке. Гарантируется, что заданный многоугольник строго-выпуклый.

Координаты всех точек по модулю не превосходят 106.

Выходные данные

Выведите единственное вещественное число — минимальное значение суммы квадратов расстояний до генераторов от точки оптимального расположения лампочки. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не будет превышать 10 - 4.

Примечание

Многоугольник называется строго-выпуклым, если он выпуклый, и никакие три его вершины не лежат на одной прямой.

A. Определите цвет

геометрия Конструктив математика реализация *1300

Недавно в результате боевых действий была повреждена главная достопримечательность Берляндии — волшебные часы. Пушечные ядра пробили несколько дырок в часах, поэтому жители обеспокоены ремонтом. Волшебные часы можно представить в виде бесконечной плоскости с декартовой системой координат, где начало координат соответствует центру часов. Часы были покрашены в два цвета, как показано на рисунке:

На рисунке показана лишь центральная часть часов. Эта раскраска продолжается до бесконечности естественным образом.

Ядра можно считать точками на плоскости. Требуется определить цвет области, которая была повреждена заданным ядром.

Нужно считать, что все точки, которые находятся на границе одной из областей, покрашены в черный цвет.

Входные данные

В первой и единственной строке записано два целых числа x и y — координаты дырки, пробитой ядром в часах. Каждое из чисел x и y не превосходит 1000 по модулю.

Выходные данные

Вывести искомый цвет.

Нужно считать, что все точки, расстояние от которых до начала координат целочисленное, покрашены в черный цвет.

D. Скалолазание

геометрия Деревья поиск в глубину и подобное *2200

Эта задача никак не связана с маленьким Крисом. Здесь надо лазать по скалам (это в круг интересов Криса уж точно не входит).

В ряд расположены n гор, каждая из которых имеет форму вертикального отрезка, один конец которого находится на земле. Горы пронумерованы слева направо целыми числами от 1 до n. Гора под номером i находится в точке xi, а ее вершина — на высоте yi. Для каждых двух гор a и b, если вершину горы a можно видеть с вершины горы b, их вершины связаны веревкой. Формально, вершины двух гор соединены, если отрезки, соединяющие вершины, не пересекаются или не соприкасаются с любыми другими отрезками гор. С помощью этих веревок скалолазы могут взбираться на горы.

Есть m команд, в каждой ровно по два скалолаза. Первый и второй скалолаз из i-й команды стоят на вершинах ai-й и bi-й скалы, соответственно. Они хотят встретиться на вершине некоторой горы. Теперь каждый из двух скалолазов двигается согласно следующему алгоритму:

  1. если один скалолаз находится на вершине горы, где его партнер уже находится сам, либо рано или поздно придет туда, то первый скалолаз остается ждать на этой горе;
  2. в противном случае, скалолаз выбирает самую правую скалу справа от его текущей скалы, до которой он может добраться по веревке; взбирается на эту скалу и продолжает процесс (скалолаз может взобраться и на гору, которая ниже его текущей).

Для каждой команды определите номер скалы, где участники этой команды встретятся!

Входные данные

В первой строке содержится единственное целое число n (1 ≤ n ≤ 105) — количество скал. Следующие n строк описывают скалы: i-я из них содержит два целых числа через пробел xi, yi (1 ≤ xi ≤ 107; 1 ≤ yi ≤ 1011) — позиция и высота i-й скалы. Скалы даны в порядке увеличения xi, то есть, xi < xj для i < j.

В следующей строке записано единственное целое число m (1 ≤ m ≤ 105) — количество команд. Следующие m строк описывают команды: i-я строка содержит два целых числа через пробел ai, bi (1 ≤ ai, bi ≤ n) — номера скал, где расположены участники i-й команды. Числа ai и bi могут быть равны.

Выходные данные

В единственной строке выведите m целых чисел через пробел, где i-е число — номер скалы, на которой встретятся скалолазы из i-й команды.

A. Треугольник

геометрия математика Перебор реализация *1600

Есть прямоугольный треугольник с катетами длины a и b. Требуется расположить его на плоскости так, что ни одна из его сторон не параллельна осям координат, а вершины находятся в точках с целочисленными координатами, либо определить, что это невозможно.

Входные данные

В первой и единственной строке находятся два целых числа a, b (1 ≤ a, b ≤ 1000), разделенные одним пробелом.

Выходные данные

В первой строке выведите «YES» или «NO» (без кавычек) в зависимости от того, существует ли искомое расположение. Если оно существует, то в трех следующих строках выведите три пары целых чисел — координаты вершин треугольника, по одной паре в строке. Координаты должны быть целыми числами, не превышающими 109 по модулю.

G. На плоскости

*особая задача геометрия *2200

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 1000) — количество точек на плоскости.

Каждая из следующих n строк содержит две вещественные координаты i-й точки xi и yi, указанные ровно с 2 знаками после десятичной точки. Все координаты находятся в промежутке от  - 1000 до 1000 включительно.

Выходные данные

Выведите единственное вещественное число θ — ответ на условие задачи. Абсолютная или относительная погрешность вашего ответа не должна превышать 10 - 2.

D. Хитрая функция

геометрия разделяй и властвуй Структуры данных *2200

Яхуб и Сорин — лучшие спортивные программисты в своем городе. Но ведь нельзя послать их обоих на важный контест. Поедет тот, кто решит одну-единственную задачу. Блатнаталаг, друг Яхуба, умудрился заполучить задачу до начала контеста. Он хочет, чтобы Яхуб прошел, и поэтому рассказал ему условие этой задачи.

Вам дан массив a (1-индексированный), состоящий из n чисел. Определим функцию f(i, j) (1 ≤ i, j ≤ n) как (i - j)2 + g(i, j)2. Функция g считается следующим псевдо-кодом:


int g(int i, int j) {
int sum = 0;
for (int k = min(i, j) + 1; k <= max(i, j); k = k + 1)
sum = sum + a[k];
return sum;
}

Требуется посчитать значение mini ≠ j  f(i, j).

Яхуб уже нашел решение задачи. А вы сможете?

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 100000). В следующей строке записано n целых чисел a[1], a[2], ..., a[n] ( - 104 ≤ a[i] ≤ 104).

Выходные данные

В единственной строке выведите ответ на задачу.

E. Ребенок и многоугольник

геометрия дп *2500

На этот раз наш ребенок раздобыл простой многоугольник. Ему надо найти количество способов разбить многоугольник на невырожденные треугольники таким образом, что:

  • каждая вершина каждого треугольника — это одна из вершин многоугольника;
  • каждая сторона многоугольника должна быть стороной ровно одного треугольника;
  • площадь пересечения любых двух треугольников равна нулю, а сумма всех площадей треугольников равна площади многоугольника;
  • каждый треугольник полностью расположен внутри многоугольника;
  • каждая сторона каждого треугольника должна содержать ровно две вершины многоугольника.

Ниже приведен рисунок, показывающий пример корректного разбиения.

Пожалуйста, помогите ребенку. Посчитайте описанное количество способов по модулю 1000000007 (109  +  7) для него.

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 200) — количество вершин многоугольника. Затем следует n строк, каждая строка содержит два целых числа: i-я строка содержит xi, yi (|xi|, |yi| ≤ 107)i-ю вершину многоугольника в порядке обхода по или против часовой стрелки.

Гарантируется, что многоугольник простой.

Выходные данные

Выведите количество способов по модулю 1000000007 (109  +  7).

Примечание

В первом примере существует два возможных разделения:

Во втором примере есть только одно возможное разделение:

F. BerPaint

геометрия графы *2700

Обезьянка Анфиса разочаровалась в текстовых редакторах, потому что они недостаточно хороши, чтобы передать всю полноту переживаемых ею эмоций, поэтому она решила переключиться на графические редакторы. Открыв редактор BerPaint, она увидела белый прямоугольник размера W × H, на котором можно рисовать. Первым делом Анфиса освоила чертежный инструмент, позволяющий рисовать отрезки, и быстро набросала на этом прямоугольнике некоторое число отрезков черного цвета. Получившаяся картина показалась Анфисе недостаточно яркой, поэтому она обратила внимание на инструмент «Заливка», который позволяет указать точку в прямоугольнике для рисования и выбрать цвет, после чего вся область, имеющая тот же цвет, что и выбранная точка, и содержащая ее, полностью окрашивается в выбранный цвет. Применив заливку много раз в разных точках, Анфиса полностью выразила всю свою экспрессию и бросила рисование. От вас же требуется по информации о нарисованных отрезках и проведенных заливках определить для каждого цвета, какова суммарная площадь областей, окрашенных в этот цвет после всех заливок.

Входные данные

В первой строке заданы два целых числа W и H (3 ≤ W, H ≤ 104) — размеры изначально белой прямоугольной области для рисования. Во второй строке записано целое число n — количество черных отрезков (0 ≤ n ≤ 100). В следующих n строках описаны сами отрезки, каждый из которых задается координатами своих концов x1, y1, x2, y2 (0 < x1, x2 < W, 0 < y1, y2 < H). Все отрезки имеют ненулевую длину. В следующей строке задано число заливок m (0 ≤ m ≤ 100). Каждая из следующих m строк задает операцию заливки в виде «x y color», где (x, y) это координаты выбранной точки (0 < x < W, 0 < y < H), а color — строка из маленьких латинских букв длиной от 1 до 15 символов, задающая цвет. Изначально прямоугольник имеет цвет «white», а отрезки наносятся цветом «black». Координаты концов всех отрезков и координаты точек заливки целые.

Выходные данные

Для каждого цвета, который присутствует на итоговой картинке, на отдельной строке выведите название этого цвета и суммарную площадь областей, окрашенных в этот цвет, с точностью 10 - 6. Цвета выдавайте в любом порядке.

Примечание

Изначально черные отрезки, которые нарисовала Анфиса, также могут быть окрашены, если какая-то из выбранных точек попадет на отрезок. Отрезки имеют нулевую площадь. Поэтому, если в итоговой картинке в какой-то цвет будут окрашены только лишь части отрезков, то площадь, окрашенная в этот цвет, равна 0.

E. Гена и второе расстояние

геометрия *3100

Гена не любит геометрию, поэтому он просит вас решить эту задачу вместо него.

В прямоугольнике, стороны которого параллельны осям координат, расположено n точек. Рассмотрим некоторую точку плоскости. Посчитаем расстояния от этой точки до заданных n точек. Отсортируем эти числа в неубывающем порядке. Будем называть красотой точки второй элемент этого массива. Если в массиве существует два минимальных элемента, то красота будет равна этому минимуму.

Найдите максимальную красоту, которая бывает у точки внутри заданного прямоугольника.

Входные данные

В первой строке задано три целых числа w, h, n (1 ≤ w, h ≤ 106, 2 ≤ n ≤ 1000) — длины сторон прямоугольника, а также количество точек. В следующих n строках записано по два целых числа xi, yi (0 ≤ xi ≤ w, 0 ≤ yi ≤ h) — координаты очередной точки. Допустимо, что входные данные содержат совпадающие точки.

Выходные данные

Выведите единственное число — максимальную красоту точки с абсолютной или относительной погрешностью не более 10 - 9.

Примечание

Точка, красоту которой необходимо найти, должна иметь координаты (x, y), где 0 ≤ x ≤ w, 0 ≤ y ≤ h. Некоторые из n точек могут совпадать.

B. Ломаная на четырех точках

геометрия Деревья Конструктив Перебор *1800

Вам дана прямоугольная сетка с целочисленными точками с координатами от (0, 0) до (n, m) включительно. Вам надо выбрать ровно 4 разных точки и построить из них ломаную, возможно, с самопересечениями и самокасаниями. Ваша задача — найти самую длинную такую ломаную.

Ломаная линия, построенная из точек p1, p2, p3, p4, состоит из трех отрезков p1p2, p2p3, p3p4, и ее длина определена как сумма длин этих отрезков.

Входные данные

Единственная строка входных данных содержит два целых числа n и m (0 ≤ n, m ≤ 1000). Гарантируется, что сетка содержит хотя бы четыре различных точки.

Выходные данные

Выведите 4 строки, по два целых числа на каждой — координаты точек p1, p2, p3, p4, образующих самую длинную ломаную соответственно.

Проверяющая программа сравнивает длину ответа участника и длину ответа жюри с точностью 10 - 6.

G. Задача Императора

геометрия *2500

Это произошло во времена Великой Берляндской Империи. Однажды Император увидел сон, в котором к нему явился Посланник богов и приказал построить храм с выпуклым n-угольником в основании. На следующее утро Император отдал распоряжение возвести храм, в основании которого лежит правильный n-угольник. Храм был построен, но вскоре Империю постигли бедствия и неурожаи. После того, как случилось землетрясение, разрушившее храм, Император понял, что чем-то навлек на свой народ немилость богов. Он приказал позвать к себе Мудреца. Когда явился Мудрец, Император поведал ему о своем сне и задал вопрос: «Дай же мне ответ, о Мудрейший из Мудрых, чем мог я прогневить богов?». «О, Владыко!» — отвечал мудрец. — «Насколько дано мне судить, боги гневаются оттого, что ты поторопился выполнять их поручение и не дослушал Посланника до конца».

Действительно, на следующую же ночь Посланник явился вновь. Он укорял Императора за то, что тот выбрал несовершенную форму для храма. «Так какая же форма может быть совершеннее, чем правильный n-угольник?!!» — воскликнул император во сне. На что Посланник дал подробный и обстоятельный ответ.

  • Все вершины многоугольника должны располагаться в точках с целочисленными координатами.
  • Все длины его сторон должны быть различны.
  • Из всех таких многоугольников должен быть выбран такой, длина максимальной стороны которого минимальна.

Вы — подневольный архитектор, которому предстоит спроектировать храм. Учтите, что n-угольник должен быть простым (имеющим границу без самопересечений и наложений) и выпуклым, но при этом допускается, чтобы три последовательные вершины лежали на одной прямой.

Входные данные

В первой строке задано единственное число n (3 ≤ n ≤ 10000).

Выходные данные

В первой строке выведите «YES» (без кавычек), если n-угольник, обладающий требуемыми свойствами, построить возможно. В следующих n строках выведите целочисленные координаты вершин многоугольника в порядке обхода против часовой стрелки. Координаты не должны превосходить 109 по абсолютной величине. Никакие две вершины не должны совпадать. Разрешается выводить любое из возможных решений. Если многоугольник построить невозможно, выведите «NO».

E. Роланд и роза

геометрия математика Перебор сортировки *2700

Роланд любит выращивать цветы. Недавно он вырастил красивую розу в точке (0, 0) декартовой системы координат. Роза настолько красива, что Роланд опасается, как бы силы зла не попытались украсть ее.

Чтобы защитить розу, Роланд хочет построить n защитных башен (будем считать, что башня это точка на плоскости) на расстоянии не более r от розы. Кроме того, Роланд считает, что башни должны быть построены в точках с целочисленными координатами, а сумма квадратов расстояний между всем парами башен должна быть как можно больше. Обратите внимание, что Роланд может построить несколько башен в одной и той же точке плоскости, также разрешается строить башни в точке (0, 0).

Помогите Роланду построить башни в целочисленных точках так, чтобы сумма квадратов расстояний между всеми башнями была максимально возможной. Обратите внимание, что под расстоянием в этой задаче понимается евклидово расстояние между точками.

Входные данные

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

Выходные данные

В первой строке выведите целое число — максимально возможную сумму квадратов расстояний. В i-й из следующих n строк выведите два целых числа xi, yi — координаты i-й башни. Каждая башня должна находиться внутри или на границе окружности радиуса r. Обратите внимание, что несколько башен могут находиться в одной и той же точке плоскости, также башни могут находиться в точке (0, 0).

Если существует несколько подходящих оптимальных расстановок, выведите любую.

B. Восстановите куб

геометрия Перебор *2000

Петя расположил в трехмерном пространстве куб с ненулевой длиной стороны таким образом, что все его вершины оказались в точках с целочисленными координатами (возможно, при этом стороны куба оказались не параллельны осям координат). Затем он записал на бумажке восемь строк, в каждой по три числа — координаты вершин куба в некотором порядке (в одной строке записаны координаты одной вершины, каждая вершина записана ровно один раз), оставил бумажку на столе и ушел. Пока Пети не было, его младший брат Коля решил поиграть с написанными числами. За одну операцию Коля мог поменять местами некоторые числа внутри одной строки (числа из разных строк Коля местами не менял). Коля мог совершить любое количество таких операций.

Когда Петя вернулся и узнал про шалости Коли, он стал вспоминать, каковы были исходные координаты. Помогите Пете восстановить исходное положение точек, или установите, что это невозможно, и исходные числа были записаны неверно.

Входные данные

В каждой из восьми строк записано по три целых числа, разделенных пробелами — числа, написанные на бумажке после возможных изменений. Все числа не превосходят по модулю 106.

Выходные данные

Если существует способ восстановить положение, в первой строке выведите «YES». В каждой из следующих восьми строк выведите по три целых числа — восстановленные координаты точек из исходного набора. Числа в i-й строке вывода должны являться перестановкой чисел в i-й строке ввода. Точки должны являться вершинами куба с ненулевой длиной стороны. Если существует несколько возможных способов восстановить координаты, выведите любой.

Если способа не существует, в первой строке выведите «NO» (без кавычек). Больше ничего выводить не нужно.

E. Пушка

геометрия сортировки Структуры данных *2200

Бертаун в осаде! Осаждающие заблокировали все выходы и стреляют по городу из пушки. К счастью, берляндской разведке удалось перехватить план стрельбы врагов. Введем декартовую систему координат, начало которой совпадает с позицией пушки, ось Ox направлена вправо в сторону города, ось Oy направлена вверх (в небо). Пушка сделает n выстрелов. Начальные скорости ядер при всех выстрелах совпадают и равны V, так что каждый выстрел характеризуется только одним числом alphai — углом, под которым пушка выстреливает ядро. В силу технических особенностей пушки этот угол не превосходит 45 градусов (π / 4). Мы пренебрегаем размерами пушки и считаем, что вся стрельба ведется из точки (0, 0).

Снаряды летят по известным физическим законам тела, брошенного под углом к горизонту:

vx(t) = V·cos(alpha)
vy(t) = V·sin(alpha)  –  g·t
x(t) = V·cos(alphat
y(t) = V·sin(alphat  –  g·t2 / 2

Ускорение свободного падения g считайте равным 9.8.

Бертаун защищает m стен. i-ая стена представляет собой вертикальный отрезок (xi, 0) - (xi, yi). Когда ядро попадает в стену, оно застревает в ней и не летит дальше. Если ядро не встретила на своем пути ни одной стены, оно падает на землю (y = 0) и останавливается. Если ядро попадает точно в точку (xi, yi), считается что оно застревает.

Ваша задача — для каждого ядра найти координаты точки, в которой оно окажется в итоге.

Входные данные

В первой строке записаны целые числа n и V (1 ≤ n ≤ 104, 1 ≤ V ≤ 1000) — число выстрелов и начальная скорость каждого снаряда. Во второй строке через пробел записано n вещественных чисел alphai (0 < alphai < π / 4) — углы, под которыми будет стрелять пушка, в радианах. В третьей строке записано целое число m (1 ≤ m ≤ 105) — количество стен. Далее следует m строк по два вещественных числа xi и yi (1 ≤ xi ≤ 1000, 0 ≤ yi ≤ 1000) — координаты стен. Все вещественные числа имеют не более 4 знаков после точки. Cтены могут частично пересекаться и даже совпадать.

Выходные данные

Выведите n строк по два вещественных числа — для каждого снаряда выведите координаты точки, куда он попадет. Ваш ответ должен иметь относительную или абсолютную погрешность меньше чем 10 - 4.

C. Капитан Сурок

геометрия Перебор *2000

Капитан Сурок хочет подготовить огромную и важную битву против своего врага капитана Змеи. В этой битве у Сурка есть n полков, каждый полк состоит из 4 кротов.

Изначально каждый крот i (1 ≤ i ≤ 4n) стоит на некоторой позиции (xi, yi) на декартовой плоскости. Капитан Сурок хочет передвинуть некоторых кротов и сделать полки компактными, если это возможно.

У каждого крота i есть дом на месте (ai, bi). Чтобы один раз передвинуть крота, надо повернуть точку его местоположения (xi, yi) на 90 градусов против часовой стрелки относительно точки дома (ai, bi).

Полк компактный, только если точки местоположений 4 кротов лежат в вершинах квадрата ненулевой площади.

Помогите капитану Сурку найти для каждого полка минимальное количество ходов, необходимое, чтобы полк сделался компактным, если это возможно.

Входные данные

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

В следующих 4n строках записано по 4 целых числа xi, yi, ai, bi ( - 104 ≤ xi, yi, ai, bi ≤ 104).

Выходные данные

Выведите n строк. Если полк i можно сделать компактным, то в i-ой строке должно быть записано единственное целое число — минимальное количество требуемых ходов. В противном случае в i-ой строке выведите «-1» (без кавычек).

Примечание

В первом полку можно один раз передвинуть второго или третьего крота.

Второй полк сделать компактным не получается.

В третьем полку среди 3 последних кротов достаточно передвинуть один раз любого из них и два раза любого другого.

В четвертом полку можно два раза передвинуть первого крота и один раз — третьего крота.

D. Шестерни

геометрия математика Перебор *2900

На плоскости расположены два многоугольника A и B. Многоугольник A вращается вокруг точки P, а многоугольник B — вокруг точки Q. Каждый многоугольник вращается с постоянной угловой скоростью по часовой стрелке вокруг своей точки, угловые скорости вращения многоугольников совпадают.

Требуется определить, произойдет ли когда-нибудь столкновение между многоугольниками. Под столкновением подразумевается ситуация, в которой многоугольники имеют хотя бы одну общую точку.

Гарантируется, что в момент времени 0 многоугольники A и B не пересекаются, и ни один из многоугольников не содержится целиком внутри другого.

Обратите внимание, что:

  • многоугольники могут не являться выпуклыми;
  • точки P и Q могут находиться на границе или вне своих многоугольников.
Входные данные

В первой строке через пробел записаны координаты точки P.

Во второй строке записано одно целое число n (3 ≤ n ≤ 1000) — количество вершин многоугольника A.

В каждой их следующих n строк записано по два числа, разделенных пробелом — координаты очередной вершины многоугольника A.

Следующая строка оставлена пустой.

Далее следуют через пробел координаты точки Q.

В следующей строке находится одно целое число m (3 ≤ m ≤ 1000) — количество вершин многоугольника B. Далее в m строках в аналогичном формате описаны координаты координаты вершин многоугольника B.

Вершины обоих многоугольников перечислены в порядке обхода против часовой стрелки. Все координаты точек — целые числа, по модулю не превосходящие 104.

Выходные данные

Выведите «YES», если столкновение произойдет, и «NO» в противном случае.

Примечание

Многоугольником называется замкнутая ломаная без самопересечений и самокасаний.

Картинка к первому примеру:

A. Сумасшедший город

геометрия *1700

Сумасшедший город представляет собой плоскость, на которой имеется n бесконечных прямых дорог. Каждая дорога задаётся уравнением aix + biy + ci = 0, где ai и bi не равны нулю одновременно. Дороги разбивают плоскость на связные области, возможно бесконечной площади. Каждую такую область назовем кварталом. Перекрестком будем называть точку пересечения хотя бы двух различных дорог.

Ваш дом расположен в одном из кварталов. Сегодня вам надо добраться до университета, также расположенного в некотором квартале. За один шаг вы можете переместиться из одного квартала в другой, если протяжённость их общей границы ненулевая (в частности это значит, что если кварталы смежны одному перекрёстку, но не имеют общего ненулевого отрезка границы, то перейти из одного в другой за один шаг нельзя).

Определите, какое минимальное количество шагов вам придётся сделать, чтобы оказаться в квартале, содержащем университет. Гарантируется, что ни ваш дом, ни университет не расположены на дороге.

Входные данные

В первой строке записано два целых чисел через пробел x1, y1 ( - 106 ≤ x1, y1 ≤ 106) — координаты вашего дома.

Во второй строке записано два целых числа через пробел x2, y2 ( - 106 ≤ x2, y2 ≤ 106) — координаты университета, где вы учитесь.

В третьей строке записано целое число n (1 ≤ n ≤ 300) — количество дорог в городе. В следующих n строках записаны через пробел по 3 целых числа ( - 106 ≤ ai, bi, ci ≤ 106; |ai| + |bi| > 0) — коэффициенты прямой aix + biy + ci = 0, задающей i-ю дорогу. Гарантируется, что никакие две дороги не совпадают. Кроме этого, ни ваш дом, ни университет не лежат на дороге (т. е. не принадлежат ни одной из прямых).

Выходные данные

В единственной строке выведите одно целое число — ответ на задачу.

Примечание

Рисунки к примерам представлены ниже (A — точка, соответствующая дому; B — точка, соответсвующая университету; разными цветами обозначены области, соответствующие разным кварталам):

C. Веселая Ферма 5

геометрия *2000

В игре Веселая Ферма 5 решили разработать механику выпаса коров. Игроку предлагается управлять пастухом. Коровы в игре очень ленивые, перемещаются очень медленно, можно даже считать, что они и вовсе стоят на месте. Однако от них нужно постоянно отгонять хищников.

Для этого юный игрок Вася решил заставить пастуха бегать вокруг коров по одному и тому же замкнутому маршруту. Очень важно, чтобы все коровы находились строго внутри территории, ограниченной этим маршрутом, потому как иначе некоторые коровы рано или поздно будут съедены. Для пущей надёжности Вася хочет, чтобы время прохождения маршрута было минимальным.

Новая игра выпускается для различных платформ, в том числе и для мобильных. В связи с этим разработчики решили отказаться от арифметики с плавающей запятой и пользоваться только целочисленной арифметикой. Коровы и пастух в игре представлены в виде точек на плоскости с целыми координатами. Время в игре моделируется по ходам. Каждый ход пастух может остаться на месте либо шагнуть в одном из восьми направлений: по вертикали, по горизонтали или по диагонали. Поскольку координаты всегда должны оставаться целыми, то длина шага по вертикали и по горизонтали равна 1, а по диагонали . Коровы не перемещаются. Требуется минимизировать количество ходов, за которое пастух может оббежать вокруг стада.

Входные данные

В первой строке дано целое число N — количество коров в стаде (1 ≤ N ≤ 105). Каждая из последующих N строк содержит два целых числа Xi и Yi — координаты одной из коров (|Xi|, |Yi| ≤ 106). Несколько коров могут находиться в одной точке.

Выходные данные

Выведите одно целое число — минимальное количество шагов в искомом маршруте.

Примечание

Картинка к тесту из условия. Координатная сетка показана серым, оси координат чёрным, коровы красным, а искомый маршрут зелёным.

B. Amr и булавки

геометрия математика *1400

Amr любит геометрию, однажды он придумал очень интересную задачу.

У Amr есть круг с радиусом r, его центр расположен в точке (x, y). Он хочет переместить круг так, чтобы его центр оказался в (x', y').

За один ход Amr может приколоть булавку к границе круга в определенной точке, затем повернуть круг вокруг булавки на любой угол и убрать булавку.

Помогите Amr достигнуть результата за минимальное количество шагов.

Входные данные

На ввод подаются 5 целых чисел, разделённых пробелами, r, x, y, x' y' (1 ≤ r ≤ 105,  - 105 ≤ x, y, x', y' ≤ 105), радиус круга, координаты исходного местоположения центра и координаты требуемого местоположения центра соответственно.

Выходные данные

Выведите единственное целое число, обозначающее минимальное количество шагов, необходимых для того, чтобы передвинуть центр круга в требуемую позицию.

Примечание

В первом примере оптимальный способ — поместить булавку в точку (0, 2) и повернуть круг на 180 градусов против часовой стрелки (или по часовой стрелке, это непринципиально).

B. Хан Соло и лазерная пушка

геометрия математика Перебор реализация Структуры данных *1400

На поле боя размещены n имперских штурмовиков. Поле боя представляет собой плоскость с прямоугольной системой координат. Каждый штурмовик задан своими координатами (x, y) на этой плоскости.

У Хана Соло есть новейшая двусторонняя лазерная пушка для сражения с этими штурмовиками. Она расположена в точке с координатами (x0, y0). За один выстрел она способна поразить всех штурмовиков, находящихся на некоторой прямой, проходящей через точку (x0, y0).

Требуется определить, за какое минимальное количество выстрелов Хан Соло сможет уничтожить всех штрумовиков.

Так как пушка — новейшее изобретение, она стреляет очень быстро и штурмовики даже после очень большого количества выстрелов не успевают понять, что происходит, и сменить свое местоположение.

Входные данные

В первой строке записано три целых числа n, x0 и y0 (1 ≤ n ≤ 1000,  - 104 ≤ x0, y0 ≤ 104) — количество штурмовиков на поле боя и координаты вашей пушки.

В следующих n строках записано по два целых числа xi, yi ( - 104 ≤ xi, yi ≤ 104) — координаты штурмовиков на поле боя. Известно, что ни один из штурмовик не стоит в той же точке, где находится пушка. Несколько штурмовиков могут находится в одной и той же точке.

Выходные данные

Выведите одно целое число — минимальное количество выстрелов, за которое Хан Соло сможет уничтожить всех штурмовиков.

Примечание

Пояснения к первому и второму тесту из условия соответственно:

H. Точки в треугольнике

*особая задача геометрия *2100

Вам дан набор точек с целыми положительными координатами. Найдите такой треугольник минимальной площади с вершинами в точках (0, 0), (A, 0) и (0, B) (A и B — неизвестные целые положительные числа), который содержал бы все заданные точки (точки могут лежать на границах треугольника).

Входные данные

В первой строке входных данных записано N (1 ≤ N ≤ 100) — количество точек. В следующих N строках записаны пары чисел X и Y (1 ≤ X, Y ≤ 100) — координаты точек. Все точки различны.

Выходные данные

Выведите одно число — минимальную площадь треугольника. Ответ считается правильным, если его абсолютная или относительная погрешность не превосходит 10 - 4.

E. Тавас и Пашмакс

геометрия математика *2600

Тавас в команде поддержки в новом спортивном состязании под названием "Пашмакс".

Cостязание "Пашмакс" состоит из двух частей: плавание, а затем бег. Проплыв ровно S метров, участники немедленно начинают бежать R метров. Победителем считается любой такой участник, раньше которого к финишу не пришло ни одного другого участника (таким образом, может быть более одного победителя).

Тавас знает, что до начала матча зарегистрировано n соревнующихся. Также он знает, что скорость заплыва i-го человека — si метров в секунду, а скорость бега — ri метров в секунду. К сожалению, он не знает значения R и S, но он знает, что это строго положительные действительные числа.

Как член группы поддержки, Тавас хочет знать, кого поддержать. Он хочет знать всех участников, которые могут победить. Мы считаем, что участник может победить тогда и только тогда, когда есть некоторые значения R и S, при которых этот участник побеждает.

Тавас не может справиться с этой задачей, так что он попросил вас помочь ему.

Входные данные

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

В следующих n строках записаны сведения о соревнующихся. В i-й строке записаны два целых числа, si и ri (1 ≤ si, ri ≤ 104).

Выходные данные

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

E. Пылесос

геометрия *2700

Однажды зимним вечером, отдыхая у себя дома, Ёжик сидел в своём уютном кресле и листал каналы телевизора. Попав на очередной выпуск «Магазина на диване», Ёжик уже хотел было переключить канал на следующий, как вдруг его остановила реклама нового чудо-изобретения.

А именно, рекламировался там пылесос Marvellous Vacuum, который даже не требует участия человека при уборке! Этот пылесос сам умеет передвигаться по квартире: если он движется в какую-то сторону и натыкается там на препятствие, то автоматически выбирает новое направление. Рано или поздно такой пылесос объедет и очистит всю комнату. Вспомнив, сколько времени Ёжик тратит каждый раз на уборку (не меньше, чем полдня, уж точно), он загорелся идеей купить это чудо.

Впрочем, Ёжик быстро сообразил, что как минимум один недостаток у такого пылесоса точно есть: он не будет хорошо пылесосить в углах комнаты, поскольку из-за своей формы он скорее всего физически не сможет достать до самого угла. Чтобы оценить, насколько серьёзно этот недостаток проявляется на практике, Ёжик попросил Вас написать ему соответствующую программу.

Вам будет задана форма пылесоса, если смотреть на него сверху. Мы ограничимся только случаем, когда пылесос представляет собой выпуклый многоугольник. Комната — это некоторый бесконечно большой прямоугольник. Мы рассматриваем один угол этой комнаты, и хотим найти такой поворот пылесоса, что он, будучи сдвинутым в этот угол, оставит непокрытой в углу минимально возможную площадь.

Входные данные

В первой строке записано целое число N — число вершин многоугольника-пылесоса (3 ≤ N ≤ 4·104). Далее идут N строк, в каждой из которых записано по два числа — координаты очередной вершины многоугольника. Все координаты целые и не превосходят по модулю 106.

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

Выходные данные

Выведите искомую минимальную площадь. Ответ будет засчитан, если он отличается от правильного не более чем на 10 - 6 относительной или абсолютной погрешности.

E. Саша Круг

геометрия математика *2700

Берляндцы очень любят лакомиться шишками после тяжелого рабочего дня. Миша Квадрат и Саша Круг — местные берляндские авторитеты. Каждый из них держит свои точки торговли шишками. У Миши n точек, у Саши — m. Так как между их подчиненными постоянно возникают стычки, они решили построить забор в виде окружности так, чтобы точки торговли одного предпринимателя были строго внутри окружности, а другого — строго снаружи. То, чьи именно точки торговли окажутся внутри, не имеет значения.

Определите, могут ли они построить такой забор.

Входные данные

В первой строке записаны два целых числа n и m (1 ≤ n, m ≤ 10 000) — количества точек торговли Миши и Саши соответственно.

В следующих n строках через пробелы записаны пары целых чисел Mx, My ( - 104 ≤ Mx, My ≤ 104) — координаты точек торговли Миши.

В следующих m строках через пробелы записаны пары целых чисел Sx, Sy ( - 104 ≤ Sx, Sy ≤ 104) — координаты точек торговли Саши.

Гарантируется, что все n + m точек различны.

Выходные данные

Выведите "YES" без кавычек, если можно построить такой забор в форме окружности, что точки одного авторитета будут строго внутри, а другого — строго снаружи, либо выведите "NO" без кавычек в противном случае.

Примечание

В первом примере не существует способа разделить точки окружностью, так как любой круг, который содержит обе точки ( - 1, 0), (1, 0), так же содержит хотя бы одну точку из множества (0,  - 1), (0, 1), и наоборот: любой круг, который содержит обе точки (0,  - 1), (0, 1), так же содержит хотя бы одну точку из множества ( - 1, 0), (1, 0)

Во втором примере один из возможных способов разделения показан ниже. Точки Миши обозначены красным цветом, а точки Саши - синим.

E. Очень простая задача

геометрия *2500

Дан выпуклый многоугольник на плоскости. Посчитайте, пожалуйста, количество треугольников, образованных его вершинами, которые содержат данную точку на плоскости. Гарантируется, что точка не лежит на сторонах и диагоналях многоугольника.

Входные данные

В первой строке содержится число n — количество вершин многоугольника (3 ≤ n ≤ 100000). Далее идет описание многоугольника: n строк с координатами очередной вершины в порядке обхода по часовой стрелке (целые числа x, y, по модулю не превосходящие 109). Гарантируется, что данный многоугольник невырожденный и выпуклый (никакие три точки не лежат на одной прямой).

Следующая строка содержит число t (1 ≤ t ≤ 20) — количество точек, для которых нужно посчитать ответ. Далее идут описания точек: t строк с координатами очередной точки (целые числа x, y, по модулю не превосходящие 109).

Выходные данные

Выходной файл должен содержать t чисел, каждое на отдельной строке, i-е число — ответ для i-й точки.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cin (также вы можете использовать спецификатор %I64d).

D. Ваня и треугольники

геометрия Комбинаторика математика Перебор сортировки Структуры данных *1900

Ване было скучно и он нарисовал n различных точек на плоскости. После этого он соединил попарно все точки и увидел, что в итоге образовалось большое количество треугольников с вершинами в отмеченных точках. Он просит вас посчитать количество образовавшихся треугольников с ненулевой площадью.

Входные данные

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

В следующих n строках находятся по два целых числа xi, yi ( - 100 ≤ xi, yi ≤ 100) – координаты i-й точки. Гарантируется, что среди точек нет совпадающих.

Выходные данные

В первой строке выведите целое число — количество треугольников с ненулевой площадью среди отмеченных.

Примечание

Пояснение к первому тесту из условия. Образовано 3 треугольника: (0, 0) - (1, 1) - (2, 0); (0, 0) - (2, 2) - (2, 0); (1, 1) - (2, 2) - (2, 0).

Пояснение ко второму тесту из усовия. Образован 1 треугольник: (0, 0) - (1, 1) - (2, 0).

Пояснение к третьему тесту из условия. Одна точка не образует ни одного треугольника.

A. Шестиугольник Геральда

геометрия математика Перебор *1600

Геральду на день рождения подарили очень любопытный шестиугольник. Именинник выяснил, что все углы шестиугольника равны . Затем он измерил длины его сторон и обнаружил, что каждая из них равна целому числу сантиметров. На этом свойства самого шестиугольника закончились и Геральд решил на нём порисовать.

Он нарисовал несколько отрезков, параллельных сторонам этого шестиугольника, которые разбили шестиугольник на правильные треугольники со стороной в 1 сантиметр. Теперь Геральду интересно, сколько у него получилось треугольников. Но их так много, что Геральд всё время сбивается со счёта. Помогите имениннику посчитать треугольники.

Входные данные

В первой и единственной строке входных данных через пробел перечислены 6 целых чисел a1, a2, a3, a4, a5 и a6 (1 ≤ ai ≤ 1000) — длины сторон шестиугольника в сантиметрах в порядке обхода по часовой стрелке. Гарантируется, что шестиугольник с указанными свойствами и именно такими сторонами существует.

Выходные данные

Выведите единственное целое число — количество треугольников со стороной 1 сантиметр, на которые оказался разбит шестиугольник.

Примечание

Вот так выглядит шестиугольник Геральда в первом примере:

А вот так — во втором:

D. Рандомизатор

геометрия Комбинаторика Теория вероятностей *2800

Геральду надоело играть в настольные игры с обычным шестигранным кубиком и он купил себе игрушку, которая называется Рандомизатор. Он устроена следующим образом.

У Рандомизатора есть своя собственная координатная плоскость, на которой нарисован строго выпуклый многоугольник, называющийся основным многоугольником. Если Рандомизатор потрясти, он рисует некоторый невырожденный (т. е. имеющий ненулевую площадь) выпуклый многоугольник с вершинами в каких-то вершинах основного многоугольника. Результатом броска (точнее говоря, результатом потряхивания) считается количество точек с целыми координатами, которые оказались строго внутри (точки на границе не считаются) выбранного многоугольника. Теперь Геральду интересно — каково математические ожидание результата потряхивания Рандомизатора?

Во время потряхивания Рандомизатор рассматривает все возможные невырожденные выпуклые многоугольники с вершинами в вершинах основного многоугольника. Пусть оказалось k вариантов многоугольников. Тогда Рандомизатор выбирает каждый из них с вероятностью .

Входные данные

В первой строке входных данных задано единственное число n (3 ≤ n ≤ 100 000) — количество вершин основного многоугольника.

В следующих n строках заданы координаты вершины основного многоугольника. В i-й из этих строк заданы два целых числа xi и yi ( - 109 ≤ xi, yi ≤ 109) — координаты i-й вершины многоугольника. Вершины даны в порядке обхода против часовой стрелки.

Выходные данные

Выведите искомое математическое ожидание с абсолютной или относительной погрешностью не более 10 - 9.

Примечание

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

Пусть случайная величина принимает значения x1, ..., xn с вероятностями p1, ..., pn соответственно. Тогда математическое ожидание этой случайной величины равняется .

D. Указательные столбы

геометрия математика Перебор *2800

В одном ханстве было очень много дорог и очень мало дерева. Ездить по дорогам было неудобно, ведь на дорогах не было столбиков с указанием направления на важные города.

Хан решил, что это пора исправить, и приказал поставить столбики на каждую дорогу. Министр транспорта был бы и рад, только вот столбиков у него всего k. Помогите министру решить его проблему, иначе бедолага может потерять не только должность, но и голову.

Более формально: каждая дорога в ханстве представляет собой прямую на плоскости Oxy, заданную уравнением вида Ax + By + C = 0 (A и B не равны нулю одновременно). Требуется определить, можно ли поставить столбики в не более, чем k точек так, чтобы на каждой дороге оказался установлен хотя бы один столбик.

Входные данные

На ввод подаются два целых положительных числа n, k (1 ≤ n ≤ 105, 1 ≤ k ≤ 5)

Следующие n строк содержат по три целых числа Ai, Bi, Ci в каждой, коэффициенты уравнения, задающего дорогу (|Ai|, |Bi|, |Ci| ≤ 105, Ai2 + Bi2 ≠ 0).

Гарантируется, что никакие две дороги не совпадают.

Выходные данные

Если решения не существует, выведите "NO" в единственной строке (без кавычек).

Иначе в первой строке выведите "YES" (без кавычек).

Во второй строке выведите единственное число m (m ≤ k) — количество использованных столбов. Затем в m строках выведите описания положений столбиков.

Описание положения одного столбика  — это два целых числа v, u. Если u и v — два различных целых числа от 1 до n, то считается, что столбик стоит в точке пересечения дорог с номерами v и u. Если u =  - 1, а v — целое число от 1 до n, то столбик стоит на дороге номер v, причем не в точке пересечения с какой-либо другой дорогой. В любом ином случае описание столбика будет считаться некорректным, а ваш ответ — неправильным. В том числе, если v = u, либо если v и u — номера двух непересекающихся дорог, ваш ответ также будет признан неправильным.

Дороги нумеруются с 1 в том порядке, в котором они даны во входных данных.

Примечание

Обратите внимание, вам не требуется минимизировать m, но оно должно быть не больше k.

В первом тесте все три дороги пересекаются в точке (0,0).

Во втором тесте три дороги образуют треугольник, и никак нельзя поставить один столб, чтобы он стоял на всех трёх дорогах сразу.

E. Буйные болельщики

геометрия *2800

На футбольном стадионе Рамакана беспорядки! Разъяренные болельщики выбежали на поле и полиция оказалась в затруднительном положении. Поле можно представить как квадрат с двумя противоположным вершинами в точках (0,0) и (105, 105). Считается, что внутренние точки квадрата и его стороны расположены внутри поля, а всё остальное находится за его пределами.

Вначале на поле N болельщиков. Для каждого болельщика дана его скорость, целое число vi, а также его целочисленные координаты (xi, yi). Через одну секунду болельщик может быть в любой точке (xi + p, yi + q), где 0 ≤ |p| + |q| ≤ vi. И p, и q должны быть целыми числами.

Точки, которые выходят за пределы квадрата, обозначающего поле, исключаются, а все остальные с равной вероятностью могут стать расположением этого конкретного болельщика через секунду.

Андрей, молодой и перспективный полицейский, послал беспилотник, чтобы заснять беспорядки с воздуха. Фотоаппарат беспилотника работает следующим образом:

  1. Он выбирает три точки с целочисленными координатами, такие, что есть вероятность, что через секунду там появится болельщик. Они не должны лежать на одной прямой, иначе фотоаппарат не сработает. Гарантируется, что не все начальные позиции болельщиков будут на одной прямой.
  2. Фотоаппарат фокусируется на трех точках и создает круг, проходящий через эти три точки. Через секунду делается снимок (через секунду после исходного состояния).
  3. Всё, что лежит на границе круга или внутри него на момент фотографирования (через секунду после фокусирования точек) будет на снимке.

Ваша задача — выбрать эти три точки так, чтобы математическое ожидание количества болельщиков, видимых на фото, было максимизировано. Если таких вариантов много, то выберите те три точки, которые дают круг с наибольшим радиусом. Если всё ещё есть много подходящих вариантов, любой из них будет принят. Если при выполнении вышеперечисленных условий, радиус окружности будет отличатся от оптимального менее чем на 0.01, ответ будет засчитан как верный.

Гарантируется что радиус оптимальной окружности в тестах не превзойдет 1010.

Входные данные

В первой строке записано количество болельщиков на поле, N. В следующих N строках записано по три целых числа: xi, yi, vi. Это координата x, координата y и скорость болельщика i в начале того второго интервала, который рассматривается в этом задании.

  • 3 ≤ N ≤ 105
  • 0 ≤ xi, yi ≤ 105
  • 0 ≤ vi ≤ 1000
  • Все числа являются целыми
Выходные данные

Вам надо вывести три точки, которые следует выбрать фотоаппарату. Выведите их в три строки, в каждой строке должна быть записана координата x, затем координата y, разделенные пробелом. Количество баллов не имеет значения.

Примечание

Круг из примера вывода захватит всех болельщиков, независимо от того, как они переместятся за секунду.

C. Точки на плоскости

геометрия жадные алгоритмы Конструктив разделяй и властвуй сортировки *2100

На плоскости расположены n точек (xi, yi) с целочисленными координатами от 0 до 106. Расстоянием между двумя точках с номерами a и b назовем следующую величину: (расстояние, вычисляемое по такой формуле, называется манхеттенским расстоянием).

Назовем гамильтоновым путем некоторую перестановку pi от 1 до n. Назовем длиной этого пути величину .

Найдите какой-нибудь гамильтонов путь с длиной не более, чем 25 × 108. Обратите внимание, минимизировать длину гамильтонова пути не требуется.

Входные данные

В первой строке дано число n (1 ≤ n ≤ 106).

В i + 1-й строке даны координаты точки с номером i: xi и yi (0 ≤ xi, yi ≤ 106).

Гарантируется, что никакие две точки не совпадают.

Выходные данные

Выведите перестановку чисел pi от 1 до n — искомый гамильтонов путь. Перестановка должна удовлетворять неравенству .

Если возможных ответов несколько, разрешается вывести любой.

Гарантируется, что существует подходящая перестановка.

Примечание

В тесте из условия, суммарное расстояние равно:

(|5 - 3| + |0 - 4|) + (|3 - 0| + |4 - 7|) + (|0 - 8| + |7 - 10|) + (|8 - 9| + |10 - 12|) = 2 + 4 + 3 + 3 + 8 + 3 + 1 + 2 = 26

A. Задача про ломаную

геометрия математика *1700

Дана ломаная, проходящая через точки (0, 0) – (x, x) – (2x, 0) – (3x, x) – (4x, 0) – ... - (2kx, 0) – (2kx + x, x) – ....

Мы знаем, что ломаная проходит через точку (a, b). Найдите наименьшее возможное положительное значение x, при котором это верно, либо определите, что такого значения x не существует.

Входные данные

В единственной строке записано два положительных целых числа a и b (1 ≤ a, b ≤ 109).

Выходные данные

Выведите единственную строку, содержащую ответ. Если подходящего x не существует, выведите  - 1.

Ответ будет засчитан, если его относительная или абсолютная погрешность нее превышает 10 - 9.

Примечание

Изображения к первому и третьему тесту из условия:

D. Три логотипа

битмаски геометрия Конструктив математика Перебор реализация *1700

Три компании решили заказать рекламный щит с изображениями своих логотипов. Рекламный щит представляет собой большую квадратную доску. Логотип каждой из компаний представляет собой прямоугольник ненулевой площади.

Рекламодатели разместят рекламу только в том случае, если возможно расположить все три логотипа на щите без наложений так, что на нём не останется свободного места. При размещении логотипы можно поворачивать так, чтобы стороны были параллельны сторонам рекламного щита.

Перед вами стоит задача определить, возможно ли разместить логотипы трех компаний на щите квадратной формы, не нарушив никакое из описанных правил.

Входные данные

В единственной строке входных данных находятся шесть целых положительных чисел x1, y1, x2, y2, x3, y3 (1 ≤ x1, y1, x2, y2, x3, y3 ≤ 100), где xi и yi обозначают длину и ширину логотипа i-й компании соответственно.

Выходные данные

Если разместить все три логотипа на квадратном щите невозможно, выведите одно число "-1" (без кавычек).

Если же это возможно, выведите в первую строку длину стороны квадрата n, в котором можно разместить все три логотипа. В следующих n строках должно содержаться по n заглавных латинских букв "A", "B" или "C". Наборы одинаковых букв должны образовывать сплошные прямоугольники, причем:

  • размеры прямоугольника, составленного из букв "A", должны быть равны размерам логотипа первой компании,
  • размеры прямоугольника, составленного из букв "B", должны быть равны размерам логотипа второй компании,
  • размеры прямоугольника, составленного из букв "C", должны быть равны размерам логотипа третьей компании.

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

Изучите тестовые примеры для лучшего понимания условия.

B. Чип и Дейл спешат на помощь

Бинарный поиск геометрия математика *2100

Команда пушистых спасателей сидела без дела в своём дупле, когда неожиданно поступил сигнал бедствия. В считанные мгновения все были на своих местах, и дирижабль бурундучков-спасателей отправился в путь.

Будем считать, что действие происходит на декартовой плоскости. База спасателей расположена в точке (x1, y1), а сигнал бедствия поступил из точки (x2, y2).

Благодаря инженерному искусству Гаечки, летательный аппарат спасателей может произвольное количество раз в любые моменты времени мгновенно изменить свою текущую скорость и направление движения. Единственное ограничение — величина скорости дирижабля относительно воздуха не может превосходить метров в секунду.

Разумеется, как настоящий спасатель, Гаечка хочет лететь так, чтобы оказаться на месте происшествия как можно быстрее. Дело осложняется тем, что в небе дует ветер, который влияет на перемещение дирижабля. Согласно прогнозу погоды, в ближайшие t секунд скорость ветра будет характеризоваться вектором (vx, vy), а по прошествии t секунд скорость ветра станет равна (wx, wy). Данные вектора определяют как направление ветра, так и его скорость. Формально, если дирижабль находится в точке (x, y), его собственная скорость относительно воздуха равна нулю и при этом дует ветер (ux, uy), то для любого неотрицательного вещественного числа , через секунд дирижабль окажется в точке с координатами .

Гаечка занята управлением дирижаблем, поэтому она попросила Чипа вычислить, как скоро они смогут быть на месте, с чем он легко справился. Однако Дейл убеждён, что Чип не справился вычислить ответ и назвал случайное значение, лишь бы не ударить в грязь лицом перед Гаечкой. Чтобы пристыдить Чипа, Дейл попросил вас посчитать правильный ответ.

Гарантируется, что скорость ветра в любой момент времени строго меньше максимально возможной скорости дирижабля относительно воздуха.

Входные данные

В первой строке ввода записаны четыре целых числа x1, y1, x2, y2 (|x1|,  |y1|,  |x2|,  |y2| ≤ 10 000) — координаты дупла спасателей и точки, из которой поступил сигнал бедствия.

Во второй строке записаны два целых числа и t (0 < v, t ≤ 1000), задающих соответственно максимальную скорость дирижабля бурундуков и момент времени, в который произойдёт перемена ветра, согласно прогнозу погоды.

Далее, по одной в строке записаны две пары целых чисел (vx, vy) и (wx, wy), описывающие ветер в первые t секунд и ветер, который будет дуть всё остальное время, соответственно. Гарантируется, что и .

Выходные данные

Выведите единственное число — минимальное время, через которое спасатели смогут оказаться в точке (x2, y2). Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

E. BCPC

Бинарный поиск геометрия *2700

BCPC — аббревиатура для Byteforces Collegiate Programming Contest (соревнование по программированию для студентов Байтфорсес) и это самое известное и популярное соревнование в Байтфорсес.

BCPC — командное соревнование. Каждая команда состоит из тренера и трёх участников. Бленда является тренером студентов Битового Государственного Университета (БГУ), и она очень тщательно подходит к вопросу формирования главной команды.

От БГУ в соревнованиях участвует n студентов, пронумерованных числами от 1 до n. Поскольку все студенты БГУ бесконечно умны, то для Бленды важны только их скорость чтения и скорость написания кода. После проведения серии измерений, Бленда выяснила, что у i-го студента скорость чтения равна ri (слов в минуту), а скорость написания кода равна wi (символов в минуту). Как следствие того, что все студенты БГУ очень умны, измеренные скорости зачастую очень большие и Бленда решила вычесть некоторую величину c из всех значений скорости чтения и некоторую величину d из всех значений скорости письма. Таким образом, она рассматривает ri' = ri - c и wi' = wi - d.

Будем говорить, что студент i превосходит студента j тогда и только тогда, когда riwj' > rjwi'. Бленде не нравится, когда в команде есть конфликты, так что она думает, что команда, состоящая из трех различных студентов i, j и k является хорошей, если студент i превосходит студента j, студент j превосходит студента k, а студент k превосходит студента i. Да, отношение превосходства не является транзитивным, как это часто бывает в реальной жизни.

Так как Бленда занята подготовкой тренировочных сборов в Кодфорсес, вам дано задание посчитать количество различных хороших команд в БГУ. Две команды считаются различными, если есть хотя бы один студент, присутствующий в одной команде, но не присутствующий в другой. Другими словами, две команды различны, если различны множества студентов, формирующих эти команды.

Входные данные

В первой строке входных данных записаны три целых числа n, c и d (3 ≤ n ≤ 345678, 1 ≤ c, d ≤ 109). Они обозначают количество студентов, из которых Бленда может собирать команду, значение, вычитаемое из всех скоростей чтения, и значение, вычитаемое из всех скоростей письма, соответственно.

В каждой из следующих n строк записано два целых числа ri и wi (0 < ri, wi ≤ 109, |ri - c| + |wi - d| > 0). Гарантируется, что любые два студента отличаются хотя бы одним параметром, то есть, для любых i ≠ j выполняется условие |ri - rj| + |wi - wj| > 0.

Выходные данные

Выведите количество различных команд БГУ, являющихся хорошими по определению Бленды.

Примечание

В первом примере хорошие следующие команды: (i = 1, j = 2, k = 3), (i = 2, j = 5, k = 1), (i = 1, j = 4, k = 3), (i = 5, j = 1, k = 4).

Обратите внимание, что, например, команда (i = 3, j = 1, k = 2) также хорошая, но она считается совпадающей с командой (i = 1, j = 2, k = 3).

B. Антон и прямые

геометрия сортировки *1600

Учительница дала Антону большое домашнее задание по геометрии, но он как обычно его не сделал, поскольку участвовал в регулярном раунде Codeforces. В задание был дан набору из n прямых, определяемых уравнениями y = ki·x + bi. Требовалось определить, существует ли хотя бы одна точка пересечения двух прямых, лежащая строго внутри полосы ограниченной x1 < x2. Другими словами, правда ли что найдутся такие 1 ≤ i < j ≤ n и такие x', y', что:

  • y' = ki * x' + bi, то есть точка (x', y') принадлежит прямой с номером i;
  • y' = kj * x' + bj, то есть точка (x', y') принадлежит прямой с номером j;
  • x1 < x' < x2, то есть точка (x', y') лежит внутри полосы ограниченной x1 < x2.

Вы же не оставите Антона в беде и поможете ему решить задание?

Входные данные

В первой строке входных данных находится целое число n (2 ≤ n ≤ 100 000) — количество прямых в задании. Во второй строке содержатся целые числа x1, x2 ( - 1 000 000 ≤ x1 < x2 ≤ 1 000 000) определяющие полосу, внутри которой требуется найти точку пересечения прямых.

В следующих n строках содержатся целые числа ki, bi ( - 1 000 000 ≤ ki, bi ≤ 1 000 000) — описание прямых. Гарантируется, что все прямые различны, то есть для любых двух i ≠ j верно, что либо ki ≠ kj, либо bi ≠ bj.

Выходные данные

Выведите «Yes» (без кавычек), если существует хотя бы одно пересечение двух прямых, расположенное строго внутри полосы, иначе выведите «No» (без кавычек).

Примечание

В первом примере прямые пересекаются только на границе полосы, но ни одного пересечения внутри нет.

B. Максим и велосипед

Бинарный поиск геометрия *2500

Уже несколько месяцев Максим приезжает на работу исключительно на своём любимом велосипеде. И вот недавно он решил, что готов принимать участие в соревнованиях велосипедистов.

Он знает, что в этом году пройдут n соревнований. В ходе i-го соревнования участник должен будет максимально быстро проехать прямой участок от точки si до точки fi (si < fi).

Измерение времени на соревнованиях — сложный процесс, связанный с правильным использованием датчика времени. Представим переднее колесо велосипеда участника как окружность радиуса r. Пренебрежём толщиной шины, размерами датчика, проскальзыванием колеса и другими физическими эффектами. Датчик времени помещается на обод колеса, то есть на какую-то фиксированную точку на окружности радиуса r. После этого датчик движется так же, как и выбранная точка на окружности.

Для старта каждый участник может выбрать любую точку bi, такую что его велосипед полностью находится за стартовой чертой, то есть bi < si - r. После этого он начинает движение, мгновенно разгоняется до своей максимальной скорости, и в момент tsi, когда координата датчика совпадает с координатой старта, датчик начинает отсчёт времени. Велосипедист проезжает всю дистанцию со своей максимальной скоростью, и как только координата датчика совпадёт с координатой финиша (момент времени tfi), датчик сработает ещё раз и зафиксирует итоговое время. Таким образом, датчик зарегистрирует, что участник проехал дистанцию за время tfi - tsi.

Максим силён в математике и догадывается, что итоговый результат зависит не только от его максимальной скорости v, но и от выбора начальной точки bi. Теперь Максим просит вас для каждого из n соревнований определить минимальное время, за которое он сможет проехать дистанцию от si до fi. Радиус колеса велосипеда равен r.

Входные данные

В первой строке задано три целых числа n, r и v (1 ≤ n ≤ 100 000, 1 ≤ r, v ≤ 109) — количество соревнований, радиус переднего колеса велосипеда Максима и максимальная скорость, которую он может развить, соответственно.

В следующих n строках содержатся описания соревнований. В i-й строке содержится два целых числа si и fi (1 ≤ si < fi ≤ 109) — координата старта и координата финиша i-го соревнования соответственно.

Выходные данные

Выведите n вещественных чисел, i-е число должно равняться минимальному времени, за которое Максим сможет проехать дистанцию i-го соревнования. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

A. Вилбур и бассейн

геометрия реализация *1100

Чтобы потренироваться красиво прыгать в воду, Вилбур решил построить бассейн прямоугольной формы у себя на заднем дворе. Он ввёл координатные оси и так выбрал прямоугольник, чтобы его стороны были параллельны этим осям. Конечно, площадь этого прямоугольника была положительна. Все четыре вершины запланированного бассейна были записаны у Вилбура на бумажке, пока не пришёл его вредный друг и не стёр некоторые вершины.

Теперь Вилбуру интересно, можно ли по сохранившимся точкам однозначно восстановить площадь исходного прямоугольника.

Входные данные

В первой строке входных данных записано число n (1 ≤ n ≤ 4) — количество вершин, которые вредный друг Вилбура не стал стирать.

В каждой из следующих n строк записаны два целых числа xi и yi ( - 1000 ≤ xi, yi ≤ 1000), задающие координаты i-й из оставшихся вершин. Вершины даны в произвольном порядке.

Гарантируется, что точки яляются вершинами какого-то прямоугольника положительной площади, со сторонами параллельными осям координат.

Выходные данные

Выведите площадь изначального прямоугольника, если её можно однозначно определить по имеющимся данным. В противном случае выведите  - 1.

Примечание

В первом примере сохранились два противоположных угла изначального прямоугольника, и этого достаточно, чтобы определить, что в данном случае прямоугольник являлся единичным квадратом.

Во втором примере осталась только одна вершина, и этого, очевидно, недостаточно, чтобы восстановить площадь изначального прямоугольника.

C. Ближайшие вектора

геометрия сортировки *2300

Вам дано множество векторов на плоскости, начинающихся в точке (0, 0). Требуется найти любую пару векторов, таких что образованный ими неориентированный угол минимален.

Неориентированный угол — это неотрицательная величина, минимальный из двух углов от одного вектора до другого по или против часовой стрелки. Это значение всегда от 0 до π. Например, два противонаправленных вектора имеют угол между собой равный π.

Входные данные

В первой строке находится целое положительное число n (2 ≤ n ≤ 100 000) — количество векторов.

В i-й из следующих n строк записаны два целых числа xi и yi (|xi|, |yi| ≤ 10 000, x2 + y2 > 0) — координаты i-го вектора. Гарантируется, что среди векторов нет сонаправленных (но могут быть противонаправленные).

Выходные данные

Выведите два целых числа a и b (a ≠ b) — пару индексов векторов, образующих минимальный неориентированный угол среди заданного множества векторов. Номера можно выводить в любом порядке. Если правильных ответо несколько, разрешается вывести любой.

F. Длина разреза

геометрия *2900

Задан простой (без самопересечений) n-угольник. Заданный многоугольник не обязательно выпуклый. Также на плоскости задано m прямых. Для каждой прямой выведите длину общей части многоугольника и прямой.

Граница многоугольника является его частью. Многоугольник, возможно, содержит развернутые углы при своих вершинах.

Входные данные

В первой строке заданы числа n и m (3 ≤ n ≤ 1000;1 ≤ m ≤ 100). Далее в n строках записаны координаты вершин многоугольника в порядке некоторого обхода. Никакие две вершины не совпадают.

Потом следует m строк, каждая из которых содержит координаты двух различных точек, задающих прямую.

Все координаты во входных данных — вещественные числа, заданные не более чем с двумя знаками после десятичной точки. По модулю числа не превосходят 105.

Выходные данные

Выведите m строк. Каждая строка должна содержать длину общей части многоугольника и соответствующей прямой. Допускается абсолютная или относительная погрешность не более 10 - 6.

A. Треугольник

геометрия Перебор *900

У Валеры есть младшая сестра Настя, которая отличается умом и сообразительностью. Возвратившись домой из детского садика, девочка рассказала о задаче, предложенной воспитательницей. Оказывается, необходимо было всего лишь составить треугольник из четырех разноцветных палочек. Естественно, одна палочка при этом остается лишней. Ломать или использовать неполную длину палочек нельзя. Настя прекрасно справилась с этим заданием и теперь предлагает сделать тоже самое Валере.

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

Входные данные

В первой строке входных данных заданы четыре целых положительных числа, разделенных пробелами — длины палочек. Числа не превосходят 100.

Выходные данные

Выведите TRIANGLE, если из заданных палочек возможно составить треугольник положительной площади, SEGMENT — если невозможен первый вариант, но можно сложить треугольник, который вырождается в отрезок. Выведите IMPOSSIBLE если никакой треугольник составить невозможно. Помните, что обязательно использовать три палочки. Ломать или использовать неполную длину палочек запрещено.

D. Площадь пересечения двух кругов

геометрия *2000

Заданы два круга. Найдите площадь их пересечения.

Входные данные

В первой строке находятся три целых числа x1, y1, r1 ( - 109 ≤ x1, y1 ≤ 109, 1 ≤ r1 ≤ 109) — положение центра и радиус первого круга.

Во второй строке находятся три целых числа x2, y2, r2 ( - 109 ≤ x2, y2 ≤ 109, 1 ≤ r2 ≤ 109) — положение центра и радиус второго круга.

Выходные данные

Выведите площадь пересечения кругов. Ответ будет считаться корректным, если абсолютная или относительная погрешность не превысит величины 10 - 6.

D. Размышления о жвачных

геометрия математика *2900

Кевин Сан размышляет о происхождении коров, стоя в точке (0, 0) декартовой плоскости. Также на плоскости расположены n прямых , каждая из которых описывается уравнением вида ax + by = c. Кевин Сан заметил, что никакие две прямые не параллельны и что никакие три прямые не проходят через одну точку.

Для каждой тройки (i, j, k), такой что 1 ≤ i < j < k ≤ n, Кевин рассматривает треугольник, образованный тремя линиями . Он называет треугольник оригинальным, если описанная окружность этого треугольника содержит начало координат (точку (0, 0)). Так как Кевин считает, что перипетии бычьей жизни непосредственно связаны с такими треугольниками, он хочет знать количество оригинальных треугольников, образованных неупорядоченными тройками прямых из данного множества.

Входные данные

Первая строка входных данных содержит единственное число n (3 ≤ n ≤ 2000) — количество прямых.

Следующие n строк описывают прямые . В i-й из этих строк содержатся три целых числа ai, bi и ci (|ai|, |bi|, |ci| ≤ 10 000, ai2 + bi2 > 0), определяющие уравнение aix + biy = ci прямой .

Выходные данные

Выведите единственное целое число — количество троек (i, j, k) с i < j < k, таких что прямые образуют оригинальный треугольник.

Примечание

Обратите внимание, что в первом примере некоторые прямые проходят через начало координат.

Во втором примере существует ровно одна тройка прямых: y = 1, x + y = 2, x - y =  - 2. Треугольник, образованный ими, имеет вершины (0, 2), (1, 1), ( - 1, 1). Описанная окружность этого треугольника задаётся уравненим x2 + (y - 1)2 = 1. Действительно, точка (0, 0) принадлежит данной окружности.

C. Мечты фрилансера

геометрия *2400

Фрилансер Михаил мечтает о двух вещах: стать крутым программистом и купить квартиру в Москве. Чтобы стать крутым программистом, ему необходимо не менее p единиц опыта, а квартира в Москве стоит q долларов. Михаил твёрдо решил идти за своей мечтой и зарегистрировался на сайте фрилансеров.

Михаилу предлагают работать над n различными проектами. Михаил уже оценил, что участие в i-м проекте будет увеличивать его опыт на ai в день и приносить bi долларов в день. Так как фриланс предполагает свободный график работы, Михаил волен в любой момент времени прекратить заниматься одним проектом и начать заниматься другим, получая при этом соответствующую долю опыта и денег. Поскольку Михаил ещё не достаточно крутой программист, то в каждый конкретный момент времени он может заниматься не более чем одним проектом.

Найдите вещественное число, соответствующее минимальному количество дней, спустя которое Михаил сможет осуществить свою мечту.

Например, пусть Михаилу предлагают работать над тремя проектами, и a1 = 6, b1 = 2, a2 = 1, b2 = 3, a3 = 2, b3 = 6. При этом p = 20 и q = 20. Тогда Михаилу достаточно поработать по 2.5 дня в первом и третьем проектах. Действительно, a1·2.5 + a2·0 + a3·2.5 = 6·2.5 + 1·0 + 2·2.5 = 20 и b1·2.5 + b2·0 + b3·2.5 = 2·2.5 + 3·0 + 6·2.5 = 20.

Входные данные

В первой строке записаны три целых числа n, p и q (1 ≤ n ≤ 100 000, 1 ≤ p, q ≤ 1 000 000) — количество проектов, а также требуемое количество опыта и денег.

В каждой из следующих n строк записаны два целых числа ai и bi (1 ≤ ai, bi ≤ 1 000 000) — ежедневный прирост опыта и ежедневный доход при работе над i-м проектом.

Выходные данные

Выведите вещественное число — минимальное количество дней, спустя которое Михаил сможет обладать необходимым количеством опыта и денег. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

Первый пример соответствует разобранному в условии.

E. Сумма пересечений

Бинарный поиск геометрия *3300

У Геноса есть n различных прямых на Декартовой плоскости. Обозначим как список всех точек пересечения данных прямых. Каждая точка появляется в списке столько раз, сколько пар прямых в ней пересекаются. Порядок точек в списке значения не имеет.

Для некоторой точки (p, q) обозначим как список расстояний от соответствующих точек в до точки (p, q). Под расстоянием здесь имеется в виду Евклидово расстояние. На всякий случай напомним, что Евклидово расстояние между двумя точками (x1, y1) и (x2, y2) равно .

Теперь Геносу дана точка (p, q) и положительное целое число m. Его просят найти сумму m минимальных элементов в . Не следует рассматривать только уникальные элементы, то есть каждое число может войти в ответ столько раз, сколько оно встречается в . Генос боится задач Div1 E, поэтому попросил вас помочь ему.

Входные данные

В первой строке входных данных записано единственное число n (2 ≤ n ≤ 50 000) — количество прямых.

Вторая строка содержит три целых числа x, y и m (|x|, |y| ≤ 1 000 000, ) — закодированные координаты точки запроса, и целое число m, описанное в условии выше. Точка запроса (p, q) равна . Иными словами, разделите x и y на 1000, чтобы получить вещественную точку запроса. означает длину списка , при этом гарантируется, что .

В каждой из следующих n строк записано по два целых числа ai и bi (|ai|, |bi| ≤ 1 000 000) — параметры прямой . Гарантируется, что никакие две прямые не совпадают, то есть (ai, bi) ≠ (aj, bj) if i ≠ j.

Выходные данные

Выведите единственное вещественное число — сумму m минимальных элементов . Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере три самые близкие к (1, 1) точки пересечения прямых имеют расстояния и .

Во втором примере две прямые y = 1000x - 1000 и пересекаются в точке (2000000, 1999999000). Расстояние от этой точки до ( - 1000,  - 1000) равно .

D. Вика и отрезки

геометрия Конструктив Структуры данных *2300

У Вики есть бесконечный лист клетчатой бумаги. Изначально каждая клетка белого цвета. Она ввела на этом листе двумерную систему координат и нарисовала n чёрных горизонтальных и вертикальных отрезков, параллельных осям координат и шириной в одну клетку. Таким образом, каждый отрезок является множеством соседних клеток, расположенных в одной строке или в одном столбце.

Перед вами стоит задача посчитать число закрашенных клеток. Если клетка была покрашена более одного раза, в ответе она должна быть посчитана ровно один раз.

Входные данные

В первой строке входных данных следует целое положительное число n (1 ≤ n ≤ 100 000) — количество отрезков, нарисованных Викой.

В следующих n строках заданы по четыре целых числа x1, y1, x2, y2 ( - 109 ≤ x1, y1, x2, y2 ≤ 109) — координаты концов отрезков, нарисованных Викой. Гарантируется, что все отрезки параллельны осям координат. Отрезки могут пересекаться, накладываться друг на друга и даже полностью совпадать.

Выходные данные

Выведите количество закрашенных Викой клеток. Если клетка была покрашена более одного раза, то в ответе она должна быть посчитана ровно один раз.

Примечание

В первом тестовом примере Вика закрасит клетки (0, 1), (1, 1), (2, 1), (1, 2), (1, 3), (1, 4), (0, 3) и (2, 3).

G. Новый год и торт

геометрия *2900

Как вы уже поняли, Лимак — полярный медвежонок. Следуя древней традиции, его медвежья семья приготовила новогодний торт. А Лимак очень любит тортики.

Новогодний торт имеет форму строго выпуклого многоугольника из n вершин.

Родители не разрешают Лимаку есть больше половины торта, потому что иначе у него начнётся аллергия. Немного подумав, они решили выбрать ровно одну из n·(n - 3) / 2 диагоналей и разрезать торт вдоль неё. После этого Лимаку достанется меньшая по площади часть (любая, если они равны).

Лимак понимает правила, но всё равно будет очень несчастен, если не доставшаяся ему часть будет сильно больше. Его неудовольствие будет равно разнице между площадью большей и меньшей частей, умноженной на 2. Несложно заметить, что в данной задаче неудовольствие Лимака всегда выражается целым числом.

Существует n·(n - 3) / 2 возможных сценариев разрезания торта на две части. Вычислите суммарное неудовольствие Лимака по всем сценариям по модулю 109 + 7.

Входные данные

В первой строке записано единственное целое число n (4 ≤ n ≤ 500 000) — количество вершин в строго выпуклом многоугольнике, описывающем торт.

В каждой из следующих n строк записано два целых числа xi и yi (|xi|, |yi| ≤ 109) — координаты i-й точки.

Гарантируется, что все точки различны, многоугольник является строго выпуклым и точки даны в порядке обхода по часовой стрелке.

Выходные данные

Выведите сумму неудовольствия Лимака по всем возможным вариантам разрезания торта на две части по модулю 109 + 7.

Примечание

В первом примере возможные значения неудовольствия Лимака равны 0, 18, 18, 24, 30.

A. Петя и снегоуборочная машина

Бинарный поиск геометрия Тернарный поиск *1900

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

Более формально, будем считать Петину машину многоугольником на плоскости. Тогда после включения она проедет круг вокруг некоторой точки, к которой Петя её привязал (эта точка находится строго снаружи многоугольника). Таким образом каждая точка внутри или на границе многоугольника пройдёт по окружности с центром в точке, к которой Петя привязал свою машину.

Петя решил привязать свою машину к точке P, и теперь ему интересно, какова площадь области, с которой машина уберёт снег. Помогите ему.

Входные данные

В первой строке входного файла даны три целых числа — количество вершин в многоугольнике n (3 ≤ n ≤ 100 000) и координаты точки P.

В следующих n строках даны по два целых числа — координаты вершин многоугольника в порядке обхода по или против часовой стрелки. Гарантируется, что никакие три подряд идущие точки многоугольника не лежат на одной прямой.

Все числа во входном файле целые, не превосходят по модулю 1 000 000.

Выходные данные

Выведите одно вещественное число — площадь области, которая будет очищена от снега. ответ на задачу с абсолютной или относительной погрешностью не более 10 - 6. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере из условия снег будет убран с этой территории:

C. Созвездие

геометрия реализация *1600

Кот Ноку заполучил карту ночного неба. На этой карте он нашёл созвездие, которое состоит из n звёзд, пронумерованных от 1 до n. Известно, что i-я звезда расположена в точке с координатами (xi, yi). Координаты всех звёзд различны.

Вечером Ноку собирается пойти смотреть на ночное небо. Он хотел бы найти три различные звезды, которые образуют треугольник положительной площади. Кроме того, все остальные звезды должны лежать строго вне этого треугольника. У кота возникли проблемы с поиском таких трёх звёзд, и он не отказался бы от вашей помощи. Ваша задача — найти индексы трёх звезд, которые образуют треугольник, удовлетворяющий всем условиям.

Гарантируется, что все звёзды не лежат на одной прямой. Можно доказать, что если предыдущее условие выполняется, то существует хотя бы одно решение задачи.

Входные данные

В первой строке входных данных записано единственное целое число n (3 ≤ n ≤ 100 000) — количество звёзд.

Каждая из следующих n строк содержит два целых числа xi и yi ( - 109 ≤ xi, yi ≤ 109).

Гарантируется, что никакие две звезды не лежат в одной точке и что не существует прямой, на которой лежат все звёзды.

Выходные данные

Выведите три целых числа — индексы трёх точек, которые образуют треугольник, удовлетворяющий всем требованиям Ноку.

Если правильных ответов несколько, то разрешается вывести любой.

Примечание

В первом примере можно вывести три индекса в любом порядке.

Второму примеру соответствует следующая картинка:

Обратите внимание, что треугольник из точек 1, 4 и 3 не удовлетворяет условию задачи, так как точка 5 не лежит строго вне треугольника (находится на границе).

E. Рука робота

геометрия Структуры данных *2500

Роджер — робот. У него есть рука, представляющая собой последовательность из n соединённых друг с другом отрезков. Концы i-го отрезка изначально расположены в точках с координатами (i - 1, 0) и (i, 0). У i-го отрезка конец в (i - 1, 0) окрашен в красный цвет, а конец в (i, 0) — в синий. Таким образом, синий конец i-го отрезка касается красного конца (i + 1)-го отрезка для всех соответствующих i.

Роджер может двигать рукой двумя различными способами:

  1. Он может выбрать отрезок и увеличить его длину. Пусть был выбран отрезок i и длина l, тогда изменение происходит описанным дальше образом. Красный конец отрезка номер i и отрезки от 1 до i - 1 фиксируются. Посмотрим на луч от красного конца до синего конца i-го отрезка. Синий конец и отрезки от i + 1 до n переносятся на l в направлении этого луча.

    На этой иллюстрации красный конец помечен А, а отрезки до А остаются на своём месте, в то время как синий конец помечен В и отрезки после B переносятся вдоль луча.

  2. Он может выбрать отрезок и повернуть его. Пусть был выбран отрезок номер i и угол a. Красный конец i-го отрезка и все отрезки от 1 до i - 1 останутся на месте. Синий конец этого отрезка и отрезков от i + 1 до n будут вращаться по часовой стрелке на угол a градусов вокруг красной точки.

    На этой иллюстрации красный конец помечен А, а отрезки до А остаются на местах, в то время как синий конец помечен как B и отрезки после В повернутся вокруг точки А.

    Роджер будет двигать рукой m раз. Эти преобразования немного сложные, поэтому Роджер быстро путается и перестаёт понимать, где находится синий конец последнего отрезка. Помогите ему вычислить координаты синего конца последнего отрезка после применения каждой операции. Обратите внимание, что во время выполнения всех действий рука Роджера может произвольно пересекаться сама с собой.

Входные данные

В первой строке входных данных записано два целых числа n и m (1 ≤ n, m ≤ 300 000) — количество отрезков, составляющих руку, и количество движений, сделанных Роджером, соответственно.

В каждой из следующих m строк записано по три целых числа xi, yi и zi, описывающих соответствующий ход. Если xi = 1, это описывает ход 1-го типа, где yi обозначает номер отрезка, а zi обозначает увеличение длины. Если xi = 2, то это описание хода второго типа, где yi обозначает номер отрезка, а zi обозначает угол в градусах (1 ≤ xi ≤ 2, 1 ≤ yi ≤ n, 1 ≤ zi ≤ 359).

Выходные данные

Выведите m строк. В i-ой строке должны быть записаны два вещественных числа, обозначающие координаты синего конца последнего отрезка после завершения операций 1, ..., i. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 4.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

Следующие картинки иллюстрируют пример и показывают состояние руки после каждой операции. Координаты точки F выведены после применения каждой операции. Для простоты мы показываем только синие концы отрезка (за исключением красного конца первого). Например, точка, помеченная В, является синим концом отрезка 1, а также красным концом отрезка 2.

Начальное состояние:

Увеличить длину отрезка 1 на 3.
Повернуть отрезок 3 на 90 градусов по часовой стрелке.
Повернуть отрезок 5 на 48 градусов по часовой стрелке.
Увеличить длину отрезка 4 на 1.

C. Инквизиция

геометрия реализация сортировки *2300

В средние века хорошей традицией было сжигать ведьм на костре вместе с их подопечными — чёрными кошками. К концу 15-го века популяция чёрных кошек оказалась исчерпана. В связи со сложившейся тяжёлой ситуацией была созвана ЧИК — Чрезвычайная Инквизиционная Комиссия.

В постановлении №666 указано, что белая кошка является чёрной тогда и только тогда, когда периметр её чёрных пятен превышает допустимую норму. Чему же равна допустимая норма? Каждый инквизитор выберет её сам в зависимости от ситуации. Ваша же задача — найти периметр чёрных пятен на шкуре кошки.

В том же постановлении указано, что шкура кошки представляет собой белый квадрат длины 105. В процессе измерения пятен принято левый нижний угол шкуры помещать в начало координат (0;0), а правый верхний — в точку с координатами (105;105). Пятна кошек являются невырожденными треугольниками. Пятна кошек могут пересекаться и накладываться друг на друга, но гарантируется, что каждая пара сторон треугольных пятен имеет не более одной общей точки.

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

Входные данные

В первой строке входного файла записано единственное целое число n (0 ≤ n ≤ 100) — количество пятен на шкуре кошки. В i-ой из последующих n строк дано 6 целых чисел: x1i, y1i, x2i, y2i, x3i, y3i — координаты i-го треугольного пятна (0 < xji, yji < 105).

Выходные данные

Выведите одно число — ответ на задачу, периметр объединения треугольников. Ваш ответ должен отличаться от правильного не более чем на 10 - 6.

M. Поворот

геометрия математика *1800

Вася устроился в одну из компаний ИТ-града, которая занимается машинным зрением. Команда, в которую попал Вася, занимается созданием программно-аппаратного комплекса для идентификации людей по лицу.

Одним из ноу-хау проекта является камера, вращающаяся вокруг оптической оси при съёмке. Люди видят диковинку — вращающуюся камеру — подходят к ней, чтобы лучше рассмотреть, смотрят прямо в неё. А камера их в это время снимает. Что может быть лучше для качественной идентификации?

Но не всё оказалось так просто. Вместе с камерой оказались повёрнуты и снимки, которые камера делает (при повороте камеры по часовой стрелке содержимое кадра оказывается повёрнуто против часовой стрелки). А алгоритм идентификации умеет работать только с лицами, незначительно отклонёнными от вертикали.

Васе поручили исправить недочёт — поворачивать снятую картинку так, чтобы изображение было отклонено как можно меньше от вертикали. При этом требования оказались довольно жёсткими. Во-первых, поворачивать картинку можно только на угол, кратный 90 градусам, чтобы ни в коем случае не утратить ни одного бита информации об изображении. Во-вторых, кадры с камеры оказались настолько большими, а кадров в секунду так много, что справиться с поворотом могло только аппаратное решение на основе FPGA, а это решение умеет поворачивать изображение только на 90 градусов по часовой стрелке. Конечно, поворот на 90 градусов по часовой стрелке можно применить несколько раз, но из соображений производительности лучше всё-таки минимизировать количество поворотов.

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

На следующем рисунке изображены кадры, полученные с не повёрнутой камеры, затем с повёрнутой на 90 градусов по часовой стрелке, затем с повёрнутой на 90 градусов в обратную сторону. Стрелками показано направление на «истинный верх».

На следующем рисунке изображён процесс поворота изображения на 90 градусов по часовой стрелке аппаратным решением на основе FPGA.

Входные данные

Единственная строка входных данных содержит одно целое число x ( - 1018 ≤ x ≤ 1018) — угол поворота камеры в градусах. Положительное значение означает поворот камеры по часовой стрелке, отрицательное — против часовой.

Выходные данные

Выведите одно целое число — минимальное необходимое количество поворотов на 90 градусов по часовой стрелке.

Примечание

Когда камера повёрнута на 60 градусов против часовой стрелки (второй пример), изображение с неё повёрнуто на 60 градусов по часовой стрелке. Один поворот изображения на 90 градусов по часовой стрелке даёт общий поворот в 150 градусов по часовой стрелке, и отклонение от «истинного верха» для одного поворота составляет 150 градусов. Два поворота изображения на 90 градусов по часовой стрелке дают общий поворот в 240 градусов по часовой стрелке, и отклонение от «истинного верха» для двух поворотов составляет 120 градусов, потому что 240 градусов по часовой стрелке — это то же самое, что 120 градусов против часовой стрелки. Три поворота изображения на 90 градусов дают общий поворот 330 градусов по часовой стрелке, и отклонение от «истинного верха» для трёх поворотов составляет 30 градусов, потому что 330 градусов по часовой стрелке — это то же самое, что 30 градусов против часовой стрелки.

Из отклонений 60, 150, 120 и 30 градусов минимальным является 30, оно достигается при трёх поворотах изображения на 90 градусов по часовой стрелке.

O. Стрелка

геометрия *2000

Петя недавно устроился программистом в компанию в ИТ-граде, которая делает компьютерные игры.

Известно, что помимо реализации игровой механики, для создания игры необходимо создавать программы-инструменты, которыми могут пользоваться гейм-дизайнеры для создания уровней игры. Первым заданием Пети стало создание инструмента, который позволяет рисовать различные стрелки на экране.

Пользователь этого инструмента будет выбирать точку на экране, задавать вектор (направление стрелки) и варьировать несколько её параметров для достижения необходимого графического эффекта. В первой версии программы Петя решил ограничиться следующими параметрами стрелки: точка с координатами (px, py), ненулевой вектор с координатами (vx, vy), положительные скаляры a, b, c, d, a > c.

Полученная стрелка должна обладать следующими свойствами. Стрелка состоит из треугольника и прямоугольника. Треугольник равнобедренный с основанием длиной a и высотой, опущенной на это основание, длиной b. Длины сторон прямоугольника c и d. Точка (px, py) находится на середине основания треугольника и на середине стороны прямоугольника длины c. Площадь пересечения треугольника и прямоугольника нулевая. Направление из точки (px, py) в вершину треугольника, противолежащую стороне, на которой лежит эта точка, совпадает с направлением вектора (vx, vy).

Перечислите координаты стрелки в порядке обхода против часовой стрелки, начиная с острия.

Входные данные

Единственная строка входных данных содержит восемь целых чисел px, py, vx, vy ( - 1000 ≤ px, py, vx, vy ≤ 1000, vx2 + vy2 > 0), a, b, c, d (1 ≤ a, b, c, d ≤ 1000, a > c).

Выходные данные

Выведите координаты стрелки в порядке обхода против часовой стрелки. Каждая строка должна содержать по две координаты, сначала x, затем y. Относительная или абсолютная погрешность ответа не должна превышать 10 - 9.

P. Площадь звезды

геометрия *2100

В ИТ-граде решили отмечать ежегодные успехи местных ИТ-компаний, выдавая им знаки отличия в форме звёзд, покрытые золотом с одной стороны. Для формирования заказа на изготовление знаков необходимо оценить стоимость заказа, которая связана с площадью позолоты. Напишите программу, позволяющую вычислить площадь звезды.

Фигура «звезда» с количеством лучей n ≥ 5, где n — простое число, строится следующим образом. На окружности радиуса r отмечают n точек так, чтобы расстояния между соседними на окружности точками были одинаковы. Далее каждая точка соединяется отрезком с двумя максимально удалёнными от неё точками. Все области, ограниченные частями отрезков, соединяющих эти точки, являются частью фигуры.

Входные данные

Единственная строка входных данных содержит два целых числа n (5 ≤ n < 109, n — простое) и r (1 ≤ r ≤ 109) — количество лучей звезды и радиус описанной окружности соответственно.

Выходные данные

Выведите одно число — площадь звезды. Относительная погрешность Вашего ответа не должна превышать 10 - 7.

Q. Пирамиды

геометрия математика *1700

Администрации ИТ-града не даёт покоя слава египетских пирамид. Существует проект возведения комплекса пирамид недалеко от города в местности под названием Изумрудная долина. Особенностью комплекса будет то, что пирамиды будут не только четырёхугольные, как в Египте, но также треугольные и пятиугольные. Разумеется, количество бюджетных средств под постройку зависит от объёма пирамид. Ваша задача — рассчитать объём пилотного проекта из трёх пирамид — одной треугольной, одной четырёхугольной и одной пятиугольной.

У первой пирамиды в основании находится равносторонний треугольник, и все 6 рёбер пирамиды имеют одинаковую длину. У второй пирамиды в основании находится квадрат, и все 8 рёбер пирамиды имеют одинаковую длину. У третьей пирамиды в основании находится правильный пятиугольник, и все 10 рёбер пирамиды имеют одинаковую длину.

Входные данные

Единственная строка входных данных содержит три целых числа l3, l4, l5 (1 ≤ l3, l4, l5 ≤ 1000) — длины рёбер треугольной, четырёхугольной и пятиугольной пирамид соответственно.

Выходные данные

Выведите одно число — суммарный объём пирамид. Абсолютная или относительная погрешность не должна превосходить 10 - 9.

E. Мультипликативная сумма

геометрия дп Структуры данных *2600

Хотя Блейк и является начальником Криса, это никак не мешает их дружбе. Обычно по вечерам они собираются вместе в баре и обсуждают там увлекательные задачи, в которых требуется максимизировать какую-нибудь величину. В этот раз им попалась особенная задача...

Пусть дан массив a длины n. Назовём характеристикой массива число — сумму произведений i-го числа в массиве a на число i. Разрешается ровно один раз сделать следующую операцию: выбрать некоторый элемент массива и переставить его в любое место в массиве. В частности, разрешается переставить элемент в начало, в конец или поставить его обратно на ту же позицию. Необходимо получить массив с максимально возможным значением характеристики.

Входные данные

В первой строке входных данных записано одно число n (2 ≤ n ≤ 200 000) — размер массива a.

Во второй строке содержится n целых чисел ai (|ai| ≤ 1 000 000) — элементы массива a.

Выходные данные

Выведите единственное целое число — максимально возможное значение характеристики массива a, если можно переставить ровно один элемент.

Примечание

В первом примере можно удалить первый элемент из массива и вставить его перед третьим (перед числом 5), таким образом получив максимальный ответ: 3·1 + 2·2 + 4·3 + 5·4 = 39.

Во втором примере максимальный ответ можно получить, удалив пятый элемент из массива и вставив его перед третьим: 1·1 + 1·2 + 1·3 + 2·4 + 7·5 = 49.

G. В поисках стабильности

Бинарный поиск геометрия *3200

После того как гонка ядерных мууууружений завершилась, Фермер Джон и Бешеные Братья Беспорядка решили подписать мирное соглашение. Они договорились разделить территорию Бовинии прямой, проходящей хотя бы через два из n блокпостов, разбросанных по стране. Эти блокпосты, призраки прошлого конфликта, расположены в точках (x1, y1), (x2, y2), ..., (xn, yn).

Для того чтобы найти оптимальную линию раздела, Фермер Джон и Элси нарисовали карту Бовинии на координатной плоскости. Фермер Джон расположен в точке P = (a, 0), а Бешеные Братья Беспорядка окопались в точке Q = ( - a, 0). Поскольку они хотят, чтобы мир продолжался как можно дольше, решено было провести прямую, минимизирующую максимальную разницу между расстоянием от точек P и Q до какой-то точки на прямой.

Формально: определим разницу прямой по отношению к точкам P и Q как минимальное вещественное d,такое что для всех точек X прямой |PX - QX| ≤ d. Гарантируется, что такое d существует и единственно. Фермер Джон и Бесси хотят найти прямую, проходящую через какие-то два различных блокпоста (xi, yi) и (xj, yj), такую что разница этой прямой относительно точек P и Q минимальна.

Входные данные

В первой строке входных данных записаны два целых числа n и a (2 ≤ n ≤ 100 000, 1 ≤ a ≤ 10 000) — количество блокпостов и координаты фермы и базы соответственно.

В следующих n строках записаны целые координаты расположения блокпостов (xi, yi) (|xi|, |yi| ≤ 10 000). Гарантируется, что все блокпосты находятся в различных точках, не совпадающих с P и Q.

Выходные данные

Выведите единственное число — минимально возможную разницу прямой относительно точек P и Q. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере возможна только прямая , задаваемая уравнением y = x - 1. Несложно заметить, что максимальное значение |PX - QX| достигается в точке X = (13, 12), , где .

Во втором примере, если провести прямую через точки (0, 1) и (0,  - 3), получаем x = 0. PX = QX для всех её точек, поэтому ответ равен 0.

C. Гарри Поттер и Золотой снитч

Бинарный поиск геометрия *2100

Братья Фред и Джордж Уизли однажды забрались на склад спортинвентаря и вскрыли коробку с мячами для квиддича. После долгих и мучительных экспериментов они выяснили, что Золотой снитч вовсе не заколдованное, а просто-напросто запрограммированное устройство. Он всегда движется по одной и той же траектории, представляющей собой ломаную с вершинами в точках (x0, y0, z0), (x1, y1, z1), ..., (xn, yn, zn). В начале игры снитч находится в точке (x0, y0, z0), а затем движется по ломаной с постоянной скоростью vs. Как ведет себя снитч в дальнейшем, близнецы пока не определили. Тем не менее, они надеются, что раздобытая информация поможет Гарри Поттеру и его команде в предстоящем матче со Слизерином. Гарри Поттер выяснил, что в начале игры он будет находиться в точке (Px, Py, Pz) и его суперскоростная метла Нимбус 2011 позволяет ему двигаться с постоянной скоростью vp, не меньшей скорости снитча vs, в любом направлении или находиться на месте. Гарри Поттер, конечно же, хочет поймать снитч как можно раньше или поторопить братьев Уизли с их исследованиями, если поймать снитч при его движении по ломаной не удастся. Гарри Поттер ловит снитч в тот момент, когда они находятся в одной точке. Помогите Гарри.

Входные данные

В первой строке содержится одно целое число n (1 ≤ n ≤ 10000). В следующих n + 1 строках содержатся координаты xi, yi, zi, разделенные одиночными пробелами. Координаты никаких двух подряд идущих точек не совпадают. В следующей строке даны скорости vp и vs, в последней строке — Px, Py, Pz, разделенные одиночными пробелами. Все числа во входных данных целые, не превосходящие 104 по абсолютной величине. Скорости строго положительны. Гарантируется, что vs ≤ vp.

Выходные данные

Если Гарри Поттер может поймать снитч во время движения по ломаной (включая конец (xn, yn, zn)), выведите в первой строке «YES» (без кавычек), во второй строке — t, самый ранний момент времени, когда Гарри сможет поймать снитч, в третьей строке три числа X, Y, Z — координаты точки, в которой это произойдет. Абсолютная или относительная погрешность ответа не должна превышать 10 - 6. Если Гарри не удастся поймать снитч во время его движения по описанной ломаной, выведите «NO».

A. Хранители

геометрия математика Структуры данных *1400

Хранители в опасности, и Доктор Манхэттен со своим другом Дэниелом Драйбергом должны срочно их предупредить. Всего в команде хранителей n человек, i-й из которых находится в точке плоскости с координатами (xi, yi).

Как всем известно, доктор Манхэттен вычисляет расстояние между двумя хранителями i и j по формуле |xi - xj| + |yi - yj|. Дэниел, как обычный человек, считает, что расстояние равно .

Сейчас успех операции зависит от того, сколько существует пар (i, j) (1 ≤ i < j ≤ n), таких что расстояние между хранителем i и хранителем j, вычисленное Доктором Манхэттеном, равняется расстоянию между ними, вычисленному Дэниелом. Вычислить эту величину попросили именно вас.

Входные данные

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

В каждой из следующих n строк записаны два целых числа xi и yi (|xi|, |yi| ≤ 109).

Некоторые позиции могут совпадать.

Выходные данные

Выведите количество пар хранителей, таких что расстояние между ними, вычисленное доктором Манхэттеном, равно расстоянию, вычисленному Дэниелом.

Примечание

В первом примере расстояние между хранителем 1 и хранителем 2 равняется |1 - 7| + |1 - 5| = 10 в понимании Доктора Манхэттена и в понимании Дэниела. Для пар (1, 1), (1, 5) и (7, 5), (1, 5) расстояния, вычисленные Доктором Манхэттеном и Дэниелом, совпадают.

D. Велосипедная гонка

геометрия математика реализация *1500

Мария участвует в велосипедной гонке.

Гоночная трасса проходит по берегу озера Люцерн, точно повторяя его контур. Как известно, берег озера состоит только из прямых участков, направленных на север, юг, восток или запад.

Введём систему координат, направив ось Ox с запада на восток, а ось Oy — с юга на север. В качестве позиции старта гонки выбирается самая южная (а если таких несколько, то самая западная из них) точка трассы. Участники начинают гонку, двигаясь на север. На всех прямых участках трассы участники едут в одном из четырёх направлений (север, юг, восток или запад) и меняют направление движения только на поворотах между прямыми участками. Участники, конечно, никогда не поворачивают назад, то есть не меняют направление движения с северного на южное или с восточного на западное (или наоборот).

Мария ещё юна, поэтому она чувствует себя уверенно не на всех поворотах. А именно, Мария чувствует себя неуверенно, если при неудачном или несвоевременном повороте она попадёт в воду. Иными словами, Мария считает поворот опасным, если при его игнорировании она сразу попадает в воду.

Помогите Маше подготовиться к соревнованию — определите количество опасных поворотов на трассе.

Входные данные

В первой строке входных данных находится целое число n (4 ≤ n ≤ 1000) — количество прямых участков трассы.

В следующих (n + 1)-й строке находятся пары целых чисел (xi, yi) ( - 10 000 ≤ xi, yi ≤ 10 000). Первая из этих точек является позицией старта. i-й прямой участок трассы начинается в точке (xi, yi) и заканчивается в точке (xi + 1, yi + 1).

Гарантируется, что:

  • первый прямой участок направлен на север;
  • самая южная (а если таких несколько, то самая западная из них) точка трассы — первая точка;
  • последняя точка совпадает с первой (то есть с позицией старта);
  • любая пара прямых участков трассы не имеет общих точек (за исключением соседних, имеющих ровно одну общую точку);
  • никакая пара точек (кроме первой и последней) не совпадает;
  • никакие два соседних прямых участка не направлены в одну и ту же сторону или в противоположные стороны.
Выходные данные

Выведите единственное целое число — количество опасных поворотов на трассе.

Примечание

Первый пример соответствует картинке:

На картинке видно, что оказаться в воде при неудачном стечении обстоятельств можно только на повороте в точке (1, 1). Таким образом, ответ равен 1.

D. Количество параллелограммов

геометрия *1900

Вам задано n точек на плоскости. Никакая пара точек не совпадает, никакие три точки не лежат на одной прямой. Найдите количество параллелограммов с вершинами в заданных точках.

Входные данные

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

В следующих n строках находятся пары целых чисел (xi, yi) (0 ≤ xi, yi ≤ 109) — координаты i-й точки.

Выходные данные

Выведите одно целое число c — количество параллелограммов с вершинами в заданных точках.

F. Медведь и боулинг 4

Бинарный поиск геометрия разделяй и властвуй Структуры данных Тернарный поиск *2500

Лимак — старый бурый медведь. Он часто играет в боулинг со своими друзьями. Сегодня он в отличном настроении и хочет побить свой собственный рекорд!

За каждый бросок даётся некоторое целое (возможно отрицательное) количество очков. Очки за i-й бросок умножаются на число i и прибавляются к общей сумме. Таким образом, за k бросков с очками s1, s2, ..., sk в сумме даётся очков. Если бросков не было, общее количество очков равно 0.

Лимак сделал n бросков и получил ai очков за i-й бросок. Он хочет максимизировать общее количество очков, поэтому ему в голову пришла интересная идея. Он может сказать, что некоторое количество первых бросков он разогревался и был рассредоточен во время некоторого количества последних бросков. Формально он может выкинуть некоторый префикс и некоторый суффикс последовательности очков a1, a2, ..., an. Разрешается выкидывать из рассмотрения все броски или же не выкидывать из вовсе.

Общее количество очков вычисляется как будто выкинутых бросков не было. Таким образом, за первый невыкинутый бросок количество очков умножается на 1, за второй — на 2 и так далее до последнего невыкинутого броска.

Какое максимальное количество очков может получить Лимак?

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 2·105) — общее количество бросков, сделанных Лимаком.

Во второй строке находятся n целых чисел a1, a2, ..., an (|ai| ≤ 107) — очки полученные Лимаком.

Выходные данные

Выведите максимальное суммарное количество очков, которое можно получить выкидыванием некоторых бросков.

Примечание

В первом примере Лимак должен выкинуть из рассмотрения первые два и последний броски. После этого останутся броски 1,  - 3, 7, которые принесут ему 1·1 + 2·( - 3) + 3·7 = 1 - 6 + 21 = 16 очков.

D. Цепная реакция

геометрия Перебор *3000

Группа берляндских учёных, с которыми вы имеете тесные деловые отношения, ведут исследования в области мирного атома. В частности, ими было обнаружено, что группа из четырёх наноботов, помещённая на поверхность флеботиновой пластинки, способна запустить мощную цепную реакцию при определённых условиях.

Если быть точным, учёные ввели прямоугольную декартову систему координат на плоской пластинке и определили четыре различные точки с целыми координатами, в которые изначально будут помещены боты. Далее для каждого бота будет выбрано одно из четырёх направлений (вверх, вниз, влево, вправо), параллельных осям координат. После этого каждый бот сдвигается на некоторое целочисленное расстояние (возможно, не одинаковое для разных ботов) вдоль своего направления. Цепная реакция запустится, если в итоге боты окажутся в вершинах квадрата положительной площади со сторонами, параллельными осям координат. В каждой вершине квадрата должен оказаться один нанобот. При этом реакция будет тем сильнее, чем меньшее время боты затратили на перемещение. Можно считать, что боты перемещаются со скоростью единица расстояния в единицу времени. Иначе говоря, реакция тем сильнее, чем меньше максимальный из путей, пройденных ботами.

Учёные заготовили множество пластинок и для каждой из них задали своё начальное положение для ботов. Теперь они просят вас помочь определить для каждой пластинки, куда следует двигаться ботам после «высадки».

Входные данные

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

Далее следуют описания пластинок. Описание каждой пластинки состоит из четырёх строк. В каждой строке находится пара целых числа xi, yi ( - 108 ≤ xi, yi ≤ 108) — координаты очередного бота. Все боты находятся в различных точках.

Обратите внимание, несмотря на то, что в задаче может быть несколько пластинок в одном тесте, взламывать чужие решения вы можете только тестами с одной пластинкой, то есть параметр t во взломе должен быть равен 1.

Выходные данные

Для каждой пластинки в первой строке выведите одно целое число. Если учёные совершили досадную ошибку и наноботы не смогут переместиться так, чтобы в итоге образовать искомый квадрат, выведите -1. Иначе выведите минимальную возможную длину самого длинного из путей ботов.

Если решение существует, в последующих четырёх строках выведите по два целых числа — позиции каждого бота после перемещения. Позиции ботов выводите в порядке, в котором они заданы во входных данных.

Если существует несколько решений, можете вывести любое из них.

A. Проливной дождь

геометрия математика *1100

Многие люди в Берляндии терпеть не могут дожди, но не вы. Дождь умиротворяет, приводит ваши мысли в порядок. За эти годы у вас сложилась славная традиция — каждый раз, когда идёт дождь, вы выходите на улицу и некоторое время молча стоите под ним, созерцая окружающий мир, наслаждаясь прохладой и влагой, размышляя о великих делах, которые вам предстоит сделать.

В этот раз, впрочем, всё немного изменилось. Вы вышли на улицу c кружкой, наполненной вашим любимым напитком — водой. В какой-то момент, попивая воду, вы заметили, что этот процесс несколько затянулся — кружка никак не опустошалась из-за того, что всё время наполнялась дождём. Заинтересовавшись этим, вы решили составить формальную модель происходящего и, таким образом, узнать, а можно ли вообще выпить всю воду из кружки в такой ситуации.

Итак, ваша кружка представляет собой цилиндр диаметром d сантиметров. Начальный уровень воды в ней составляет h сантиметров от дна.

Вы пьёте из неё воду со скоростью v миллилитров в секунду. При этом дождь идёт с такой скоростью, что если бы вы не пили воду из кружки, то за секунду уровень воды в ней увеличивался бы на e сантиметров. Как потребление воды из кружки вами, так и ее пополнение дождем происходят равномерно и непрерывно.

Ваша задача — найти время, по истечении которого кружка опустеет, или указать, что этого никогда не произойдёт. Гарантируется, что если возможно выпить всю воду, то это произойдёт не позднее, чем через 104 секунд.

Напомним, что один миллилитр равен одному кубическому сантиметру.

Входные данные

В единственной строке находятся четыре целых числа d, h, v, e (1 ≤ d, h, v, e ≤ 104), где:

  • d — диаметр цилиндрической кружки,
  • h — начальный уровень воды в ней,
  • v — скорость того, как вы пьете воду из кружки в миллилитрах в секунду,
  • e — увеличение уровня воды в секунду за счет дождя, если бы вы не пили из кружки.
Выходные данные

Если кружку опустошить невозможно, выведите «NO» (без кавычек).

Иначе выведите в первой строке «YES» (без кавычек), а во второй вещественное число — время в секундах, по истечении которого кружка опустеет. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 4. Гарантируется, что если ответ существует, то не превосходит 104.

Примечание

В первом примере вода наполняет стакан быстрее, чем вы пьёте из него.

Во втором примере площадь дна равна , откуда можно сделать вывод, что вы опускаете уровень воды на в секунду. Вода же поднимается на 1 в секунду. Таким образом, вы опустошите чашку за секунд.

B. Герб антикубизму

геометрия Конструктив *1100

Как некоторые знают, кубизм — направление в живописи, в котором на первый план выходит задача конструирования объёмной формы на плоскости с помощью комбинации трёхмерных геометрических фигур.

Знаменитый скульптор Кикассо, чей автопортрет вы можете лицезреть, ненавидит кубизм. Ему гораздо больше импонирует идея передачи двумерных объектов через трехмерные с помощью своих великолепных скульптур. И его новый проект связан именно с этим. Кикассо собирается сделать герб обществу ненавистников кубизма. Для этого он хочет создать скульптуру, изображающую всем известный геометрический примитив — выпуклый многоугольник.

Кикассо подготовил для этого несколько заготовок, представляющих собой стержни с целочисленными длинами, и теперь он хочет собрать их воедино, причём i-й стержень представляет собой отрезок прямой длины li.

Скульптор планирует составить выпуклый многоугольник ненулевой площади, используя все имеющиеся стержни в качестве его сторон. Каждый стержень необходимо использовать в качестве стороны на его полную длину. Резать, ломать или сгибать стержни нельзя. Однако, две стороны могут образовывать развернутый угол в .

Увы, как и многие другие гениальные личности своего времени, он рано бросил учёбу. Поэтому Кикассо не знал, что сложить выпуклый многоугольник ненулевой площади из стержней тех длин, которые он выбрал никак не получится. Не желая оставлять стержни неиспользованными, скульптор решил, что сделает ещё одну заготовку-стержень с целочисленной длиной так, чтобы его проблема решилась. При этом он, конечно, хочет сделать её как можно более короткой, ведь материалы дорогие, и тратить деньги общества зря — неподобающее дело.

Помогите скульптору!

Входные данные

В первой строке находится целое число n (3 ≤ n ≤ 105) — количество заготовок-стержней.

Во второй строке находятся n целых чисел li (1 ≤ li ≤ 109) — длины стержней, которые уже есть у Кикассо. Гарантируется, что нельзя составить выпуклый n-угольник ненулевой площади с помощью имеющихся у Кикассо стержней, используя их в качестве сторон.

Выходные данные

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

Примечание

В первом примере можно составить из набора длин {1, 1, 1, 2} треугольник со сторонами {1 + 1 = 2, 2, 1}.

Во втором примере можно составить треугольник с длинами {20, 11, 4 + 3 + 2 + 1 = 10}.

E. Спасите Город!

геометрия *2500

В городе Аалам-Аара (по-русски Свет Земли), ранее не было ни преступлений, ни преступников, но течением времени грехи поселились в сердцах некогда праведных людей. В поисках решения этой проблемы некоторые из старейшин обнаружили, что до тех пор, пока испорченную часть населения держат подальше от неиспорченной, преступления можно остановить. Итак, они решили переселить всех испорченных людей на отдельную территорию. Для того, чтобы преступники наверняка не смогли сбежать из отделенной части, небходимо соорудить сторожевую башню, чтобы можно было наблюдать за преступниками.

Коль скоро народ Аалам-Аара не очень богат, то они встретились с купцом из некоторого богатого города, который согласился продать им земельный участок, огражденный высоким забором по периметру. Забор представляет собой многоугольник (не обязательно выпуклый). На одной из частей забора, отрезке AB есть сооружения, где можно построить смотровую башню. Ваша задача — помочь им узнать количество точек вдоль этого забора, где можно построить башню, чтобы оттуда можно было наблюдать за всеми преступниками. Можно построить только одну сторожевую башню. За преступником можно наблюдать из сторожевой башни, если отрезок видимости от сторожевой башни до преступника нигде не пересекает забор, т.е. целиком расположен внутри или на границы области. Как показано на рисунке 1 ниже, точки Y, C и A видны из точки B, а точки E и D не видны.

Рис. 1
Рис. 2

Предположим, что земельный участок является многоугольника и оси координат установлены так, что отрезок AB параллелен оси X, а точки, где можно построить сторожевую башню, — это целочисленные точки на отрезке AB. Например, на данном рисунке 2, сторожевую башню можно установить в любой из пяти целочисленных точек на AB, то есть в точках (4, 8), (5, 8), (6, 8), (7, 8), или (8, 8). Можно считать, что никакие три последовательные точки не лежат на одной прямой и все угловые точки, отличные от A и B, лежат по одну сторону забора AB. Многоугольник не содержит самопересечений.

Входные данные

Первая строка теста содержит количество вершин n (3 ≤ n ≤ 1000).

Следующие n строк содержат координаты вершин многоугольника в порядке следования по часовой стрелке. На i-ой строке записаны через пробел целые числа xi и yi (0 ≤ xi, yi ≤ 106).

Конечные точки забора AB — это первые две точки, (x1, y1) и (x2, y2).

Выходные данные

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

Примечание

Рисунок 2 показывает первый тест. Все точки на рисунке обозреваемы с любой точки на заборе AB. Так как AB имеет 5 целочисленных координат, значит, ответ равен 5.

Во втором тесте заборы CD и DE не видны полностью, таким образом, ответ равен 0.

A. Мусор на переработку

геометрия дп жадные алгоритмы реализация *1800

Сегодня в Кекляндии отмечают день переработки мусора. Чтобы отпраздновать это событие, Адил и Бера решили пойти в центральный парк подбирать валяющиеся на земле бутылки и доносить их до урны.

Центральный парк можно представить как координатную плоскость. На земле лежат n бутылок, i-я из которых находится в точке с координатами (xi, yi). И Адил, и Бера в каждый момент времени могут держать в руках не более одной бутылки каждый.

Процесс уборки для каждого из них выглядит следующим образом:

  1. Определиться, продолжать ли собирать мусор или остановиться.
  2. Если решено продолжить, то выбрать какую-нибудь ещё лежащую на земле бутылку и дойти до неё.
  3. Подобрать эту бутылку и дойти с ней до урны.
  4. Вернуться к шагу 1.

Адил и Бера могут передвигаться независимо. Они могут носить бутылки одновременно, каждую бутылку может подобрать любой их них, и один из них спокойно может стоять и смотреть, как другой собирает бутылки.

Они хотят так организовать процесс сборки бутылок, чтобы суммарное пройденное расстояние (то есть расстояние, пройденное Адилом, сложенное с расстоянием, пройденным Берой) было минимальным. Разумеется, при этом все бутылки должны оказаться в урне.

Входные данные

В первой строке входных данных записаны шесть целых чисел ax, ay, bx, by, tx и ty (0 ≤ ax, ay, bx, by, tx, ty ≤ 109) — изначальные координаты Адила, Беры и урны соответственно.

Во второй строке записано единственное целое число n (1 ≤ n ≤ 100 000) — количество бутылок, валяющихся на земле.

Далее следуют n строк, каждая из которых содержит два целых числа xi и yi (0 ≤ xi, yi ≤ 109) — координаты i-й бутылки.

Гарантируется, что изначально Адил, Бера, урна и все бутылки находятся в разных точках парка.

Выходные данные

Выведите одно вещественное число — минимальное суммарное расстояние, которое придётся пройти Адилу и Бере, чтобы положить все бутылки в урну. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

Рассмотрим первый пример.

Путь Адила: .

Путь Беры: .

Длина пути Адила равняется . Длина пути Беры равняется .

F. Лена и запросы

геометрия разделяй и властвуй Структуры данных *2500

Лена — программист. На работе она получила задачу.

Рассмотрим некоторое, изначально пустое множество пар целых чисел. Лене нужно обработать n запросов одного из трёх типов:

  1. Добавить пару чисел (a, b) в множество.
  2. Удалить пару чисел, добавленную в i-м запросе. Все запросы пронумерованы целыми числами от 1 до n.
  3. Для заданного целого числа q найти максимальное значение величины x·q + y среди всех пар (x, y) из множества.

Помогите Лене обработать запросы.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 3·105) — количество запросов.

Каждая из следующих n строк начинается с целого числа t (1 ≤ t ≤ 3) — типа очередного запроса.

Далее в запросах первого типа следует пара целых чисел a и b ( - 109 ≤ a, b ≤ 109).

В запросах второго типа следует целое число i (1 ≤ i ≤ n). Гарантируется, что число i меньше номера текущего запроса, i-й запрос первого типа и пара из i-го запроса ещё не удалена.

В запросах третьего типа следует целое число q ( - 109 ≤ q ≤ 109).

Выходные данные

Для запросов третьего типа выведите в отдельной строке искомое максимальное значение x·q + y.

Если в множестве нет пар выведите "EMPTY SET".

E. Контакт

геометрия *2900

Маленький Петя готовится к первому контакту с инопланетянами. Он знает, что корабли инопланетян имеют формы невырожденных треугольников и что их будет ровно 4. Посадочная площадка для корабля — это 3 специальных колонны, размещенных в определенных точках плоскости, таких, что эти 3 точки образуют такой же треугольник, как и корабль, с точностью до поворота, параллельного переноса и отражения (симметрий относительно сторон). После посадки корабли могут пересекаться.

Каждая колонна может быть использована чтобы посадить более чем один корабль, например, если есть два одинаковых корабля, то не обязательно строить 6 колонн чтобы посадить оба корабля, достаточно 3. Петя хочет узнать, какого минимального числа колонн будет достаточно, чтобы посадить все корабли.

Входные данные

В каждой из 4 строк находятся 6 целых чисел x1 y1 x2 y2 x3 y3 (0 ≤ x1, y1, x2, y2, x3, y3 ≤ 20), задающие 3 точки, описывающие форму каждого из 4 кораблей. Гарантируется, что тройка точек в каждой строке задает невырожденный треугольник.

Выходные данные

Выведите минимальное число колонн, достаточное для посадки всех кораблей.

Примечание

В первом тесте можно поставить колонны в таких точках: (0, 0), (1, 0), (3, 0), (1, 2). Заметьте, что второй корабль может приземлиться, используя последние 3 колонны.

Во втором тесте можно выбрать точки (0, 0), (0, 1), (1, 0), (0, 2), (2, 0), (0, 5), (5, 0), (0, 17), (17, 0). Меньше чем 9 колонн использовать нельзя.

E. Побег в тень

геометрия сортировки *2500

Дима живёт в общежитии, а вместе с ним в комнате живут тараканы.

В момент времени 0 Дима увидел ползущего по столу таракана и сразу захотел его убить. Диме нужно ровно T секунд, чтобы прицелиться, после чего точным ударом он убьёт ползущее насекомое.

Чтобы выжить, таракану нужно за T секунд успеть забежать в тень, которую отбрасывают стоящие на столе тарелки. Тень, отбрасываемая каждой из тарелок, имеет форму круга, при этом круги тени, отбрасываемые разными тарелками, могут пересекаться и вкладываться друг в друга произвольным образом.

Таракан поступает так: он равновероятно выбирает направление движения, после чего бежит по прямой в выбранном направлении с постоянной скоростью v. Если в некоторый момент времени t ≤ T таракан оказывается в тени, то он останавливается и выживает, в противном случае Дима успевает прицелиться и уничтожить его точным ударом. Считайте, что точный удар Димы происходит мгновенно.

Определите вероятность того, что таракан выживет.

Входные данные

В первой строке входных данных записаны четыре целых числа x0, y0, v, T (|x0|, |y0| ≤ 109, 0 ≤ v, T ≤ 109) — координаты таракана в декартовой системе координат в момент времени 0, его скорость и время прицеливания Димы соответственно.

В следующей строке дано целое число n (1 ≤ n ≤ 100 000) — количество кругов тени, отбрасываемых тарелками на стол.

В следующих n строках даны описания кругов тени. В i-й из этих строк даны три целых числа xi, yi, ri (|xi|, |yi| ≤ 109, 0 ≤ r ≤ 109) — координаты центра i-го круга тени в декартовой системе координат и его радиус соответственно.

Считайте, что стол достаточно большой для того, чтобы таракан не успел добежать до его края и избежать точного удара Димы.

Выходные данные

Выведите единственное вещественное число p — вероятность того, что таракан выживет.

Ответ будет засчитан, если его относительная или абсолютная погрешность не превысит 10 - 4.

Примечание

Первый пример можно изобразить так:

Красным цветом окрашены зоны, выбрав точку в которых в качестве направления движения, таракан будет убит, зеленым же окрашены зоны, выбор точек в которых в качестве направления позволяют таракану выжить. Заметьте, что зона, содержащая круг с центром в точке ( - 2, 2), окрашена в красный, так как таракан не успевает добежать до этого круга за одну секунду.

E. Алёна и треугольники

геометрия *2600

Вам даны n точек на плоскости с целыми координатами. Известно, что площадь любого треугольника, образованного любыми тремя из данных n точек, не превосходит S.

Алёна пробовала построить треугольник с целыми координатами вершин, который содержит в себе все точки данного набора и площадь которого не превосходит 4S, но у нее ничего не получилось. Помогите Алёне построить такой треугольник. Заметьте, что точки, являющиеся вершинами искомого треугольника, могут не присутствовать в наборе.

Входные данные

В первой строке входных данных записаны два целых числа n и S (3 ≤ n ≤ 5000, 1 ≤ S ≤ 1018) — количество точек в наборе и ограничение сверху на площадь любого треугольника, составленного из любых трех точек набора, соответственно.

В следующих n строках заданы точки набора: в i-й из них содержатся два целых числа xi и yi ( - 108 ≤ xi, yi ≤ 108), разделенные пробелом, — координаты i-й точки набора.

Гарантируется, что среди n точек найдутся три, не лежащие на одной прямой.

Выходные данные

Выведите координаты трех точек, являющихся вершинами треугольника, который содержит в себе все точки данного набора и площадь которого не превосходит 4S.

Координаты каждой вершины треугольника выводите в отдельной строке, разделяя каждую пару координат пробелом. Координаты должны быть целыми числами, не превосходящими 109 по модулю.

Гарантируется, что искомый треугольник существует. Если ответов несколько, выведите любой.

Примечание

Картинка к примеру из условия:

A. Проверка точки

*особая задача геометрия *1200

На координатной плоскости нарисован квадрат со сторонами параллельными осям координат. Длина стороны этого квадрата равна a. Левый нижний угол квадрата совпадает с началом координат. Правый верхний угол квадрата имеет положительные координаты.

Вам задана точка с координатами (x, y). Перед вами стоит задача определить, лежит ли эта точка внутри квадрата, на его стороне или снаружи.

Входные данные

В первой строке входных данных следует три целых числа a, x и y (1 ≤ a ≤ 1000,  - 1000 ≤ x, y ≤ 1000) — длина стороны квадрата и координаты точки, которую нужно проверить.

Выходные данные

Выведите одно целое число:

  • 0, если точка лежит строго внутри квадрата;
  • 1, если точка лежит на стороне квадрата;
  • 2, если точка лежит вне квадрата.

E. Майк и геометрическая задача

геометрия дп Комбинаторика реализация Структуры данных *2000

Майк готовится к IMO, но плохо знаком с геометрией, поэтому его учитель дал ему занимательную геометрическую задачу. Пусть f([l, r]) = r - l + 1 — число целых точек в отрезке [l, r] (l ≤ r) (считаем, что ). Даны два числа n и k и n отрезков [li, ri] на оси Ox, и требуется посчитать

Другими словами, требуется посчитать сумму количеств целых точек в каждом из возможных пересечений любых k отрезков.

Так как искомое значение может быть очень большим, выведите его остаток от деления на 1000000007 (109 + 7).

Майк затрудняется решить эту задачу и нуждается в вашей помощи. Вы же не откажете ему в этом, не так ли?

Входные данные

В первой строке содержатся два целых числа n и k (1 ≤ k ≤ n ≤ 200 000) — количество отрезков и количество отрезков в рассматриваемых группах пересечений.

Затем следуют n строк, i-я из которых содержит два целых числа li, ri ( - 109 ≤ li ≤ ri ≤ 109), описывающих i-й отрезок.

Выходные данные

В единственной строке выведите одно целое число — ответ на задачу Майка по модулю 1000000007 (109 + 7).

B2. Восстановление многоугольника (средняя)

геометрия *2600

Теперь, когда Хайди убедилась, что её тестер уровня загрязнения зомби работает, пора наносить удар! В этот раз, убежище зомби представляет собой строго выпуклый многоугольник на решётке. Каждая вершина многоугольника находится в каком-то узле решётки. Для каждой клетки решётки Хайди знает уровень загрязнения зомби — количество углов клетки, которые находятся внутри или на границе решётки.

По данной информации Хайди хочет определить точную форму убежища, чтобы обрушить на зомби справедливое возмездие, помогите ей в этом!

Входные данные

Входные данные содержат несколько тестов.

В первой строке каждого теста записано целое число n — размер решётчатого поля (5 ≤ n ≤ 500). В каждой из последующих n строк записаны n символов, описывающих уровень загрязнения зомби в каждой из клеток поля. Каждый символ каждой строки является цифрой от 0 до 4.

Клетки даны в том же порядке, что и на картинке выше: строки нумеруются в порядке уменьшения y координаты, и в каждом ряду клетки даны в порядке увеличения x координаты. Это означает, что первый ряд соответствует клеткам с координатами (1, n), ..., (n, n), а последний ряд соответствует клеткам с координатами (1, 1), ..., (n, 1).

В последней строке файла записан ноль. Эта строка служит сигналом конца ввода и не должна обрабатываться как отдельный тест. Сумма значений n по всем тестам в файле не превзойдёт 5000.

Выходные данные

Для каждого теста выведите ответ в следующем виде:

в первой строке выведите целое число v — количество вершин в многоугольнике, являющемся секретным убежищем. В следующих v строках выведите по два целых числа, определяющих вершины многоугольника в порядке обхода по часовой стрелке, начиная с лексикографически минимальной вершины.

Примечание

Гарантируется, что решение всегда существует и единственно. Гарантируется, что в корректном решении вершины многоугольника имеют координаты между 2 и n - 2. Вершины (x1, y1) лексикографически меньше вершины (x2, y2) если x1 < x2 или .

F. ...Дарно!

Бинарный поиск геометрия *3300

Барни наконец-то нашел ту единственную, красивую юную леди по имени Лианна. Проблема заключается в том, что сейчас они заперты в замке Лорда Лосса. Замок имеет форму выпуклого многоугольника из n точек. Как и большинство замков в мирах Demonata, у этого замка нет потолка.

У Барни и Лианны есть план побега, но он требует некоторых знаний геометрии, поэтому они просят вас о помощи.

Барни знает, что демоны организованы и двигаются по прямым. Он и Лианна хотят выждать подходящее для побега время, а для этого им нужно следить за демонами. Каждый из них хочет находиться в точке внутри замка (возможно на ребрах или в вершинах), также оба они могут стоять в одной точке. Также они хотят выбрать вещественное число r и наблюдать за всеми точками внутри двух окружностей радиуса r (эти окружности могут пересекаться) с центрами в их позициях.

Мы считаем, что Барни и Лианна следят внимательно тогда и только тогда, когда для каждого ребра многоугольника хотя бы один из них видит хотя бы одну точку на прямой, образованной этим ребром, таким образом эта точка может не лежать на ребре, но должна лежать на прямой, продолжающей это ребро. Формально, каждая из прямых, образованных ребрами, должна иметь хотя бы одну общую точку с хотя бы одной из окружностей.

Чем больше значение r, тем больше энергии и концентрации им нужно, поэтому они просят вас сообщить минимально возможное значение r, при котором они могут следить внимательно.

Входные данные

Первая строка входных данных содержит единственное целое число n (3 ≤ n ≤ 300) — количество точек многоугольника замка.

Следующие n строк содержат описание вершин многоугольника в порядке обхода против часовой стрелки. i-ая из них содержит два целых числа xi и yi (|xi|, |yi| ≤ 104) — координаты i-й вершины многоугольника. Гарантируется, что данные точки образуют выпуклый многоугольник, в частности, никакие три из них не лежат на одной прямой.

Выходные данные

В первой строке выведите единственное вещественное число r — минимальный радиус окружностей.

Во второй строке выведите пару координат точки, в которой должен стоять Барни.

Во третьей строке выведите пару координат точки, в которой должна стоять Лианна.

Точки должны лежать внутри многоугольника.

Координаты точек не обязаны быть целыми. Если существует несколько ответов, выведите любой из них.

Ваш ответ будет засчитан, если его относительная или абсолютная погрешность не превосходит 10 - 6.

Примечание

В первом примере ребята могут стоять в противоположных углах замка.

D. Лабораторная работа

геометрия Структуры данных *2700

Однажды морж-профессор Платон задал студентам-программистам следующую лабораторную работу.

В лабораторной работе требовалось реализовать такую структуру данных, которая поддерживала бы выпуклую оболочку на некотором множестве точек S. На вход программе подавалось q запросов двух типов:

1. Добавить точку с координатами (x, y) во множество S. Заметьте, что при этом выпуклая оболочка множества S могла измениться, а могла остаться прежней.

2. Сказать, принадлежит ли точка с координатами (x, y) области, ограниченной выпуклой оболочкой, включая границу.

Все студенты справились с заданием. А справитесь ли с ним Вы?

Входные данные

В первой строке содержится целое число q (4 ≤ q ≤ 105).

Далее идут q строк вида "t x y", где t — тип запроса (1 или 2), а (x, y) — координаты точки ( - 106 ≤ x, y ≤ 106, x и y — целые числа).

Гарантируется, что первыми идут 3 запроса первого типа, и точки, данные в этих запросах, образуют невырожденный треугольник. Все точки, добавляемые в S, различны.

Существует хотя бы один запрос второго типа.

Выходные данные

На каждый запрос второго типа выведите по одной строке, содержащей "YES", если точка лежит внутри выпуклой оболочки или на ее границе, и "NO" в противном случае.

C. Крис и дорога

геометрия реализация *2100

А пока Мишка увлечена своим путешествием...

Крис — маленький бурый медвежонок. Никому не известно, где и когда он познакомился с Мишкой, однако вот уже долгое время они неразлучны (этот случай не в счёт). Впрочем, девочки девочками, а без лучших друзей никуда. Таким другом и является Джон. Однажды, гуляя вместе с другом, Джон подкинул Крису идею следующей задачи:

По бесконечной горизонтальной дороге ширины w, ограниченной прямыми y = 0 и y = w, движется автобус, представляющий собой выпуклый многоугольник из n вершин. Автобус непрерывно движется с постоянной скоростью v по прямой Ox в сторону уменьшения координат, то есть со временем меняются только x-координаты его точек. Формально, за время t каждая из x-координат его точек уменьшится на vt.

В точке (0, 0) находится пешеход, который может перемещаться только по вертикальному пешеходному переходу, представляющему отрезок, соединяющий точки (0, 0) и (0, w) со скоростью, не превосходящей u. Таким образом, пешеход может перемещаться только по прямой Oy в любом направлении с произвольной скоростью, не превосходящей u, не выходя за пределы дороги. Пешеход умеет мгновенно менять свою скорость, так, например, он может мгновенно остановиться.

Считается, что пешеход попал под автобус, если в некоторый момент времени точка, в которой находится пешеход, находится строго внутри многоугольника автобуса (в случае нахождения точки в вершине или на границе многоугольника считается, что пешеход не попал под автобус).

По данному в момент времени 0 положению автобуса, помогите Крису определить минимальное время, за которое пешеход сможет перейти дорогу, оказавшись в точке (0, w), не попав при этом под автобус.

Входные данные

В первой строке входных данных содержатся четыре целых числа n, w, v, u (3 ≤ n ≤ 10 000, 1 ≤ w ≤ 109, 1 ≤ v,  u ≤ 1000) — количество вершин многоугольника, ширина дороги, скорости автобуса и пешехода соответственно.

Следующие n строк описывают вершины многоугольника в порядке его обхода против часовой стрелки. В i-й из них содержится пара целых чисел xi и yi ( - 109 ≤ xi ≤ 109, 0 ≤ yi ≤ w) — координаты i-й вершины многоугольника. Гарантируется, что многоугольник — невырожденный.

Выходные данные

Выведите вещественное число t — время, необходимое пешеходу, чтобы перейти дорогу, не попав под автобус. Относительная или абсолютная погрешность ответа не должна превышать 10 - 6.

Примечание

Рисунок ниже описывает начальное положение автобуса и пешехода в первом примере из условия.

E. Железный человек

геометрия Деревья Структуры данных *3300

Тони Старк играет со своими костюмами, которые теперь оснащены автопилотом. Он живёт в Малибу. Малибу представляет из себя n перекрёстков, пронумерованных целыми числами от 1 до n, соединённых с помощью n - 1 двусторонних дорог таким образом, что от любого перекрёстка можно добраться до любого другого, используя данные дороги (да, граф Малибу является деревом).

У Тони есть m костюмов, для каждого из которых разработан специальный план. Костюм номер i появится в момент времени ti на перекрёстке vi и будет двигаться в направлении перекрёстка ui по кратчайшему пути со скоростью ci дорог в секунду (пересечение перекрёстка происходит мгновенно), а затем исчезнет, как только достигнет перекрёстка ui. Если костюм достигает перекрёстка ui непосредственно в момент времени q, то он доступен там в этот момент времени, но не позже. Костюмы передвигаются непрерывно, например, если vi ≠ ui, то в момент времени костюм находится на середине дороги. Обратите внимание, что vi = ui означает, что костюм будет доступен на перекрёстке vi только в момент времени ti и затем исчезнет.

Если в какой-либо момент времени два костюма оказываются в одной точке (это может быть как на перекрёстке, так и на какой-нибудь дороге непосредственно после появления или перед исчезновением), то там происходит взрыв.

Тони просит вас определить момент самого первого взрыва (если это вообще произойдёт).

Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 100 000) — количество перекрёстков и количество костюмов соответственно.

В последующих n - 1 строках содержится описание дорог. В i-й из этих строк содержится два целых числа ai и bi — концы дороги с номером i (1 ≤ ai, bi ≤ n, ai ≠ bi).

В следующих m строках содержатся описания костюмов. В i-й из них записаны четыре целых числа ti, ci, vi и ui (0 ≤ ti ≤ 10 000, 1 ≤ ci ≤ 10 000, 1 ≤ vi, ui ≤ n), означающих, что i-й костюм появится на перекрёстке vi в момент времени ti и будет двигаться в сторону перекрёстка ui со скоростью ci дорог в секунду.

Выходные данные

Если никаких взрывов так и не произойдёт, то выведите -1 в первой и единственной строке входных данных.

В противном случае выведите момент времени первого взрыва. Ваш ответ будет считаться правильным, если его относительная или абсолютная погрешность не превзойдёт 10 - 6.

A. Beru-такси

геометрия Перебор реализация *900

Рабочий Василий живёт в точке (a, b) координатной плоскости. Он очень торопится на работу, поэтому ему нужно как можно быстрее уехать из дома. В новом приложении он нашёл n свободных Beru-такси, про каждое из которых известны координаты на плоскости (xi, yi), а также скорость vi.

Считая, что каждый из n водителей сразу поедет к Василию по прямой и с максимальной скоростью, определите, через какое минимальное время Василий сможет сесть в Beru-такси.

Входные данные

В первой строке входных данных содержится два целых числа a и b ( - 100 ≤ a, b ≤ 100) — координаты дома Василия.

Во второй строке входных данных содержится число n (1 ≤ n ≤ 1000) — количество свободных Beru-такси.

В i-й из последующих n строк записаны три целых числа xi, yi и vi ( - 100 ≤ xi, yi ≤ 100, 1 ≤ vi ≤ 100) — координаты i-й машины и её скорость соответственно.

Несколько машин могут находиться в одной точке. Координаты машин могут совпадать с координатами дома Василия.

Выходные данные

Выведите единственное число — минимальное время, через которое какая-нибудь из машин такси окажется в точке (a, b). Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере первое такси доедет за время 2, а второе за время 1, значит ответом будет число 1.

Во втором примере такси 2 и 3 приедут одновременно.

I. Ковбой Беблоп и его компьютер

геометрия *2800

Ковбой Беблоп — смешной маленький мальчик, который любит сидеть за компьютером. Откуда то у него взялись два эластичных обруча в форме двумерных многоугольников, не обязательно выпуклых. Поскольку на его космическом корабле нет гравитации, то обручи спокойно висят в воздухе (в трёхмерном пространстве). Поскольку обручи очень эластичные, Беблоп может растягивать их, поворачивать, переносить или укорачивать их рёбра столько сколько захочет.

Для обоих обручей вам дано количество вершин и координаты каждой вершины, определяемые тремя числами x, y и z. Вершины даны в порядке обхода: вершина 1 соединена с вершиной 2, вершина 2 соединена с вершиной 3 и так далее, последняя вершина снова соединена с первой. Два обруча считаются зацепленными, если невозможно развести их на бесконечно большое расстояние только изменяя длины рёбер и перемещая их, но не пересекая ни по отрезкам, ни по вершинам — также как две цепочки. Изначально рёбра многоугольников не пересекаются и не касаются.

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

Ковбой Беблоп обожает свои обручи и хотел бы знать, являются ли они сильно-зацепленными или нет. Поскольку он занят игрой со своей собакой, он просит вас определить ответ.

Входные данные

В первой строке входных данных записано целое число n (3 ≤ n ≤ 100 000) — количество сторон в первом многоугольнике. В каждой из последующих n строк содержатся три целых числа x, y и z ( - 1 000 000 ≤ x, y, z ≤ 1 000 000) — координаты вершин в порядке обхода. В следующей строке записано число m (3 ≤ m ≤ 100 000) — количество вершин во втором прямоугольнике, после чего следуют m строк, описывающих вершины в аналогичном первому прямоугольнику формате.

Гарантируется, что оба прямоугольника не содержат самопересечений и что соответствующие ломаные не пересекаются и не касаются. Дополнительно гарантируется, что никакие три последовательные вершины одного многоугольника не лежат на одной прямой.

Выходные данные

Выведите «YES» или «NO», в зависимости от того являются ли два многоугольника сильно-зацепленными или нет.

Примечание

На картинке ниже, два многоугольника являются сильно-сцепленными, поскольку рёбра вертикального многоугольника пересекаются поверхность горизонтального один раз в одно направлении и ноль раз в другом. Обратите внимание, что в общем случае многоугольники не обязательно параллельны какой-либо из плоскостей xy-, xz- или yz-.

F. Plane of Tanks

геометрия Перебор *2900

Вася играет в Plane of Tanks. Танки в этой игре так и норовят друг друга переубивать. Но Ваш танк «Педальный» не такой... Ему всего лишь надо проехать по прямой из точки А в точку B на плоскости. К сожалению, на этой же плоскости находятся n вражеских танков. Будем считать, что все танки являются точками. В начальный момент времени Педальный находится в точке A. Вражеские танки рады бы его сразу уничтожить, но изначально их башни повернуты не в ту сторону. А именно, у каждого танка известны начальный поворот башни ai (угол в радианах относительно оси OX при повороте против часовой стрелки) и максимальная скорость поворота башни wi (рад/с). Если в какой-то момент времени башня танка будет повернута ровно на танк Педальный, то враг производит выстрел, и при этом всегда попадает. Педальный выдерживает не более k выстрелов. Перезарядка орудий занимает очень много времени, поэтому можно считать, что каждый враг произведет не более одного выстрела. Ваша задача определить, какой минимальной скоростью v должен обладать педальный, чтобы доехать до точки B. Считается, что педальный способен мгновенно развить скорость v, а первые k выстрелов по нему не снижают скорости и не меняют координаты танка.

Входные данные

В первой строке заданы 4 числа — координаты точек A и B (в метрах), точки не совпадают. Во второй строке задано число n (1 ≤ n ≤ 104) — количество вражеских танков. В каждой из следующих n строк заданы координаты соответствующего танка xi, yi и его параметры ai и wi (0 ≤ ai ≤ 2π, 0 ≤ wi ≤ 100). Числа ai и wi содержат не более 5 знаков после десятичной точки. Все координаты — целые числа, по модулю не превосходящие 105. Вражеские танки могут поворачивать башню как по часовой стрелке, так и против нее с угловой скоростью не более wi. Гарантируется, что каждому из вражеских танков необходимо минимум 0.1 секунды для наведения на какую-либо точку отрезка AB и что каждый из вражеских танков находится на расстоянии как минимум 0.1 метра от прямой AB. В последней строчке дано число k (0 ≤ k ≤ n).

Выходные данные

Вывести единственное число — минимальную необходимую скорость Педального в метрах в секунду с абсолютной или относительной погрешностью не более чем 10 - 4.

D. Коровоконг рисует круги

геометрия *3200

Коровоконгу очень нравится красный цвет и совершенно не нравится синий.

Коровоконг находится на бесконечной координатной плоскости, где есть n красных точек и m синих точек.

Он хочет нарисовать на плоскости круг, который содержит хотя бы одну красную точку и не содержит ни одной синей. Точки, расположенные непосредственно на границе, можно считать как находящимися внутри, так и снаружи (как удобнее Коровоконгу).

Вычислите максимально возможный радиус окружности, которая удовлетворяет всем условиям выше. Если такая окружность может быть сколь угодно большого радиуса, выведите  - 1.

Входные данные

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

Следующие n строк содержат по два целых числа xi и yi (1 ≤ xi, yi ≤ 104) — координаты красных точек.

Следующие m строк содержат по два целых числа xi и yi (1 ≤ xi, yi ≤ 104) — координаты синих точек.

Гарантируется, что никакие две точки не совпадают.

Выходные данные

Выведите  - 1, если интересующая Коровоконга окружность может быть сколь угодно большой. В противном случае выведите одно вещественное число — максимально возможный радиус подходящей окружности. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 4.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

Картинка для первого примера:

Картинка для второго примера:

B. Параллелограмм возвращается

геометрия Конструктив Перебор *1200

Давным-давно Лёша придумал задачу про параллелограмм. Входными данными в этой задаче являлись четыре целочисленные точки на плоскости, определяющие множество вершин некоторого параллелограмма ненулевой площади, не обязательно в порядке обхода.

У Лёши был очень хороший тест на эту задачу, но так получилось, что в файле с этим тестом была стёрта последняя строчка, так что вместо четырех точек осталось всего три. Но тест был настолько хороший, и он так сильно нужен Лёше, что он просит вас восстановить его.

Входные данные

Входные данные содержат три строки, в каждой из которых записаны два целых числа — координаты xi и yi ( - 1000 ≤ xi, yi ≤ 1000). Эти три точки не лежат на одной прямой, и никакие две из них не совпадают.

Выходные данные

В первой строке выведите число k — количество вариантов добавить к данным трём точкам четвёртую точку с целочисленными координатами так, чтобы получившееся множество точек определяло вершины некоторого параллелограмма ненулевой площади (точки не обязательно должны следовать в порядке обхода).

Далее выведите k строк, в каждой по два целых числа — координаты четвёртой точки.

Примечание

Если вам требуется пояснение о том, что такое параллелограмм, посмотрите соответствующую статью в Википедии:

https://ru.wikipedia.org/wiki/Параллелограмм

E. Кратчайший путь корабля

геометрия кратчайшие пути *2400

У вас новая, очень интересная работа. Вы — капитан корабля. Ваша задача — провести корабль из одной точки в другую, минимизируя при этом расходы.

Всем известно, что кратчайшее расстояние между любыми двумя точками — отрезок прямой, соединяющий эти точки. Но к сожалению, в море есть остров, поэтому иногда невозможно провести корабль по отрезку прямой между этими точками.

Вы можете двигаться только по безопасным точкам. Точка называется безопасной, если она либо принадлежит прямой, соединяющей начальную и конечную точку, либо находится на границе острова.

Вам повезло — у вас есть умные и сильные рабочие, которые могут помочь в вашем путешествии. Они могут перемещать корабль по морю: это стоит 1 египетский фунт за каждую единицу расстояния по морю. Они так же могут даже нести корабль по суше (они очень сильные!): это стоит 2 египетских фунта за каждую единицу расстояния по территории острова. Ваши деньги рабочие делят между собой поровну, поэтому количество рабочих значения не имеет.

Вы можете перемещать корабль по границе острова, это считается за перемещение по морю.

Вам задана карта моря, вам необходимо определить наименьшую возможную стоимость путешествия.

Вы начинаете в точке (xStart, yStart), и должны приплыть в точку (xEnd, yEnd). Гарантируется, что эти точки различны.

Остров представляет собой выпуклый многоугольник. Никакие 3 точки многоугольника не лежат на одной прямой. Также начальная и конечная точка не лежат внутри или на границе острова. Точки многоугольника заданы в порядке обхода против часовой стрелки.

Входные данные

В первой строке записано 4 целых числа, xStart, yStart, xEnd и yEnd ( - 100 ≤ xStart, yStart, xEnd, yEnd ≤ 100). Во второй строке записано целое число n, количество точек в многоугольнике (3 ≤ n ≤ 30), на следующей строке записано n пар целых чисел x и y — координаты точек многоугольника ( - 100 ≤ x, y ≤ 100), все точки многоугольника различны.

Выходные данные

Выведите минимальную возможную стоимость. Абсолютная или относительная погрешность ответа не должна превосходить 10 - 6.

B. Новый год и северный полюс

геометрия реализация *1300

В данной задаче мы будем полагать, что планета Земля является идеальным шаром, а её поверхность — идеальной сферой. Длину экватора и любого меридиана будем считать равной в точности 40 000 километров. Таким образом, путешествие от Северного полюса к Южному полюсу или наоборот занимает 20 000 километров.

Полярный медвежонок Лимак живёт на Северном полюсе. Незадолго до нового года он помогает кое-кому развозить подарки по всему миру. К сожалению, вместо точных координат мест, которые Лимак должен посетить, ему выдали лишь описание маршрута движения, в предположении, что он начинает на Северном полюсе. Описание маршрута состоит из n частей. На i-м участке Лимак должен двигаться ti километров в направлении, определяемом строкой diri, которая является одной из строк «North», «South», «West», «East». Данные направления означают движение на север, юг, запад и восток соответственно.

Лимак не уверен, что описание маршрута корректно. Помогите ему проверить выполнение следующих условий:

  • Если в некоторый момент времени (перед выполнением какой-либо инструкции или во время выполнения одной из них) Лимак находится на Северном полюсе, то он может двигаться только на юг.
  • Если в некоторый момент времени (перед выполнением какой-либо инструкции или во время выполнения одной из них) Лимак находится на Южном полюсе, то он может двигаться только на север.
  • Путешествие обязательно должно завершаться на Северном полюсе.

Проверьте, что все три условия выше выполняются и выведите «YES» или «NO».

Входные данные

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

В i-й из последующих n строк записано целое число ti и строка diri (1 ≤ ti ≤ 106, ) — длина i-го участка маршрута и направление, в котором должен двигаться Лимак.

Выходные данные

Выведите «YES», если данный маршрут удовлетворяет всем трём условиям. В противном случае выведите «NO».

Примечание

Рисунок ниже демонстрирует как будет выглядеть путешествие Лимака в первых двух примерах. Во втором примере ответ «NO», поскольку путешествие не заканчивается на Северном полюсе.

B. Тимофей и прямоугольники

геометрия Конструктив *2100

Одним из подарков Тимофею на день рождения была раскраска. Она была устроена следующим образом: плоскость, на которой отмечены n прямоугольников со сторонами, параллельными осям координат. Все прямоугольники имеют стороны нечетной длины. Никакие два прямоугольника не пересекаются, но могут касаться.

Помогите Тимофею раскрасить все прямоугольники в 4 цвета так, чтобы никакие два касающихся сторонами не были одного цвета, или скажите, что это невозможно.

Два прямоугольника пересекаются, если их пересечение имеет ненулевую площадь. Два прямоугольника касаются сторонами, если пересечение некоторой пары их сторон имеет ненулевую длину.

Рисунок соответствует первому тесту из условия
Входные данные

Первая строка содержит одно натуральное число n (1 ≤ n ≤ 5·105) — количество прямоугольников.

Далее следуют n строк. В i-й из этих строк содержатся четыре целых числа x1, y1, x2 и y2 ( - 109 ≤ x1 < x2 ≤ 109,  - 109 ≤ y1 < y2 ≤ 109), означающие, что противоположные угла i-го прямоугольника находятся в точках с координатами (x1, y1) и (x2, y2).

Гарантируется, что все длины всех сторон прямоугольников нечетны, и никакие два прямоугольника не пересекаются.

Выходные данные

В первой строке выведите «NO», если невозможно покрасить прямоугольники в 4 цвета так, чтобы никакие два касающихся не были одного цвета.

В противном случае выведите в первой строке «YES». Далее выведите n строк, в i-й из них выведите одно натуральное число ci (1 ≤ ci ≤ 4) — цвет i-ого прямоугольника.

B. Махмуд и треугольник

геометрия жадные алгоритмы Конструктив математика сортировки теория чисел *1000

У Махмуда есть n отрезков, i-й из них имеет длину ai. Ехаб поспорил с ним, сможет ли он использовать ровно 3 отрезка для того, чтобы составить из них невырожеднный треугольник. Махмуд никогда не спорит, если не уверен, что может выиграть, поэтому он спросил вас, должен ли он принять этот вызов или нет. Вам даны длины отрезков, проверьте, можно ли выбрать ровно 3 из них, чтобы составить невырожденный треугольник.

Махмуд должен использовать ровно 3 отрезка, он не может составить отрезок из двух или изменять какие-либо длины. Невырожденным считается треугольник с положительной площадью.

Входные данные

Первая строка содержит целое число n (3 ≤ n ≤ 105) — число отрезков.

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — длины отрезков.

Выходные данные

В единственной строке выведите «YES», если можно выбрать ровно три отрезка и составить из них невырожденный треугольник, и «NO» иначе.

Примечание

В первом примере Махмуд может выбрать отрезки с длинами 2, 4 и 5 и составить из них невырожденный треугольник.

E. Марсианская кухня

геометрия *2800

Вы когда-нибудь пробовали марсианскую пищу? А зря.

Их фирменное блюдо подаётся на абсолютно чёрной тарелке радиуса R, плоской как блин.

Сперва на тарелку накладывается идеально круглой формы порция Золотого Гондураса. Она имеет радиус r и располагается максимально близко к краю тарелки, не выходя за её пределы. То есть Золотой Гондурас касается края тарелки изнутри. Считается, что близость порции Золотого Гондураса к краю тарелки демонстрирует аккуратность и точность марсиан.

Далее, на тарелку накладывается идеально круглой формы порция Розовой Гваделупы. Гваделупа не должна накладываться на Гондурас, не должна вылезать за пределы тарелки, но должна быть максимально большого радиуса. То есть Розовая Гваделупа должна касаться края тарелки изнутри, и касаться Золотого Гондураса снаружи. Ибо именно размер Розовой Гваделупы показывает щедрость и радушие марсиан.

Далее, на тарелку накладывается первая порция (всё такой же идеально круглой формы) Зелёного Бультерьера. Она должна соприкасаться с Гондурасом и Гваделупой, не вылезать за пределы тарелки и быть максимально большого радиуса.

Каждая следующая порция Зелёного Бультерьера должна обязательно соприкасаться с Золотым Гондурасом, предыдущей порцией Зелёного Бультерьера и касаться края тарелки, но не вылезать за её пределы.

Чтобы определить, достоин ли чужеземец дотронуться до пищи, марсиане просят его найти радиус k-ой порции Зелёного Бультерьера по известным радиусам тарелки и порции Золотого Гондураса. А достойны ли Вы?

Входные данные

В первой строке дано целое число t (1 ≤ t ≤ 104) — количество тестов.

В последующих t строках содержатся по три положительных целых числа: радиусы окружностей R и r (1 ≤ r < R ≤ 104) и число k (1 ≤ k ≤ 104).

В претестах 1 ≤ k ≤ 2.

Выходные данные

Выведите t строк — радиус k-ой порции Зелёного Бультерьера для каждого теста. Абсолютная или относительная погрешность ответа не должна превосходить 10 - 6.

Примечание

Блюдо из первого примера:

Блюдо из второго примера:

F. Мишка и изоморфные точки

геометрия *3300

Мишляндия имеет форму большого квадрата на плоскости. Страна состоит из всех точек с координатами, по модулю не превосходящими 106.

Всего в Мишляндии n домов. Дом номер i расположен в точке (xi, yi). Все эти n точек различны, однако, некоторые подмножества этих точек могут лежать на одной прямой.

Мишка Лимак живет в первом доме. Он хочет снести свой дом и построить новый в какой-нибудь точке Мишляндии.

Медведи не любят больших перемен. Поэтому после того, как Лимак перенесет свой дом, для каждой тройки домов, расположенных в точках pi, pj и pk, знак псевдовекторного произведения (pj - pi) × (pk - pi) должен остаться таким же, каким он был до переселения Лимака. Иными словами, если знак был отрицательным/положительным/нулем, то он должен остаться отрицательным/положительным/нулем соответственно. Это условие должно быть выполнено для всех троек индексов (i, j, k), в том числе равных друг другу, а также отличных от 1. Кроме того, Лимак не может построить дом в точке, где находится дом другого медведя (однако, можно построить дом там же, где был старый дом).

Разность и псевдовекторное произведение точек (ax, ay) и (bx, by) мы определяем следующим образом:

(ax, ay) - (bx, by) = (ax - bx, ay - by), 
(ax, ay) × (bx, by) = ax·by - ay·bx.

Рассмотрим множество точек, в которых Лимак может построить новый дом. Ваша задача — найти площадь этого множества.

Формально, пусть Лимак выбирает расположение нового дома случайным образом внутри страны (т. е. каждая из координат выбирается независимо равновероятно из отрезка [ - 106, 106]). Пусть p — вероятность того, что выбранное расположение нового дома допустимо. Пусть S — площадь Мишляндии (S = 4·1012). Вам необходимо найти p·S.

Входные данные

В первой строке находится одно целое число T (1 ≤ T ≤ 500) — количество тестовых случаев. Далее следуют описания тестовых случаев.

Первая строка описания тестового случая содержит одно целое число n (3 ≤ n ≤ 200 000) — количество домов.

Строка i из следующих n строк содержит два целых числа xi и yi ( - 106 ≤ xi, yi ≤ 106) — координаты i-го дома. Никакие два дома в одном тестовом случае не находятся в одной точке. Лимак живет в первом доме.

Сумма величин n не превосходит 200 000.

Выходные данные

Выведите одно вещественное число — площадь множества точек, в которых Лимак может построить новый дом.

Ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит 10 - 6. Формально, если ответ жюри b, а ваш ответ a, он будет считаться правильным, если .

Примечание

В примере 4 тестовых случая.

В первом тестовом случае всего в Мишляндии четыре дома. Дом Лимака расположен в точке (5, 3). Множество корректных точек для нового расположения точек — треугольник с вершинами в точках (0, 1), (10, 1) и (3, 51). Стороны и вершины треугольника не входят во множество. Площадь этого прямоугольника равна 250.

Во втором тестовом случае множество точек, в которых Лимак может построить дома, образует прямоугольник ширины 50 000 и высоты 2 000 000. Не забудьте, что новое расположение дома должно принадлежать Мишляндии.

В третьем тестовом случае все три точки лежат на одной прямой. Все псевдовекторные произведения равны 0, и должны остаться равными 0 после смены расположения дома. Поэтому Лимак должен построить свой дом на прямой, проходящей через данные три точки. Кроме того, новая позиция дома должна принадлежать квадрату Мишляндии, поэтому множество корректных расположений представляет собой отрезок (кроме двух точек, где уже находятся другие дома). Площадь любого отрезка равна 0.

B. Выпуклый Корабль

геометрия *1800

У вас есть выпуклый многоугольник P, вершины которого расположены в n различных точках p1, p2, ..., pn. Точка pi имеет координаты (xi, yi) на плоскости. Точки перечислены в порядке обхода по часовой стрелке.

Вы можете выбрать вещественное число D и передвинуть каждую из вершин многоугольника из начального положения в любую точку на расстоянии не больше D.

Найдите максимальное значение D такое, что независимо от того, как вы передвинете вершины, многоугольник не пересечет сам себя и останется выпуклым.

Входные данные

Первая строка содержит одно целое число n (4 ≤ n ≤ 1 000) — количество вершин в многоугольнике.

Следующие n строк содержат координаты вершин многоугольника. Строка i содержит два целых числа xi и yi ( - 109 ≤ xi, yi ≤ 109) — изначальные координаты вершины i. Гарантируется, что точки даны в порядке обхода по часовой стрелке, и они образуют строго выпуклый многоугольник (в частности, никакие три последовательные точки не лежат на одной прямой).

Выходные данные

Выведите одно вещественное число — максимальное из таких D, что независимо от того, как вы передвинете вершины, многоугольник не пересечет сам себя и останется выпуклым.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит 10 - 6.

А именно, пусть ваш ответ равен a, а ответ жюри равен b. Ваш ответ будет засчитан, если .

Примечание

Иллюстрация к первому примеру:

Вот пример того, как можно сделать многоугольник невыпуклым:

Это — не оптимальный ответ, так как максимальное расстояние, на которое мы сдвинули вершину, около  ≈ 0.4242640687, в то время как можно сделать многоугольник невыпуклым, сдвинув каждую точку на расстояние не более  ≈ 0.3535533906.

F. Пари Шерлока и Мориарти

геометрия графы Деревья Конструктив разделяй и властвуй реализация Структуры данных *2800

Шерлок и Мориарти встретились для финальной битвы умов. Шерлок дал Мориарти правильный выпуклый n-угольник. Кроме того, он дал ему некоторые диагонали в этом многоугольнике, которые разделяют его на регионы. Гарантируется, что диагонали не пересекаются во внутренних точках.

Шерлок посчитал для каждого региона его важность. Важность региона, образованного вершинами многоугольника с номерами a1, a2, ... , ax, равна 2a1 + 2a2 + ... + 2ax. Затем Шерлок упорядочил регионы в порядке увеличения важности. После этого он присвоил каждому региону уникальный номер от 1 до k, где k — количество регионов, а номер региона это его позиция в упорядоченном по важности списке.

Шерлок хочет, чтобы Мориарти раскрасил регионы, используя не более чем 20 цветов так, чтобы все простые пути между двумя одноцветными регионами проходили через хотя бы один регион, покрашенный в цвет с номером меньше, чем номер цвета данных регионов. Простой путь между двумя регионами f и h это последовательность регионов r1, r2, ... rt такая, что r1 = f, rt = h, для каждого 1 ≤ i < t регионы ri и ri + 1 имеют общую сторону, а также ri = rj если и только если i = j.

Мориарти не смог ответить и спросил решение у Шерлока. Помогите Шерлоку предоставить ответ Мориарти.

Входные данные

В первой строке содержатся два целых числа n и m (3 ≤ n ≤ 100000, 0 ≤ m ≤ n - 3) — количество вершин в многоугольнике и количество проведенных диагоналей.

Следующие m строк содержат по два целых числа a и b (1 ≤ a, b ≤ n), которые описывают диагональ между вершинами a и b. Гарантируется, что заданы корректные диагонали, то есть a и b не совпадают и не являются соседними вершинами. Гарантируется, что диагонали не пересекаются.

Выходные данные

Пусть число регионов равно k.

Выведите k целых чисел, каждое от 1 до 20 — цвета регионов в порядке увеличения важности.

Если существует несколько решение, выведите любое из них. Можно показать, что существует хотя бы одно решение.

Примечание

Во втором примере регионы будут в таком порядке: (1, 2, 3), (1, 3, 4), (1, 4, 5), (1, 5, 6), т. е. регион (1, 2, 3) будет первым, затем регион (1, 3, 4) и так далее.

Мы можем покрасить регионы 1 и 3 в один цвет, так как регион 2 будет на пути из 1 в 3, и его цвет равен 1, что меньше, чем цвет регионов 1 и 3, который равен 2.

D. Выстрел лучника

Бинарный поиск геометрия математика *2300

Стратегическая компьютерная игра нового поколения «Civilization XIII» поражает своей масштабностью и проработанностью деталей. Рассмотрим, например, одну из них.

Игровое поле в игре разбито на правильные шестиугольники со стороной в 1 условную единицу. Пропорции юнитов в отношении карты близки к реальным, поэтому игровое поле можно считать бесконечной плоскостью. Каждый юнит занимает ровно одну шестиугольную ячейку игрового поля.

Рассмотрим боевого юнита «Лучник». Каждый лучник имеет параметр «дальность выстрела». Это некоторое натуральное число условных единиц, которое задает радиус круга, в пределах которого лучник может поразить цель. Центр этого круга совпадает с центром ячейки, в которой сейчас находится лучник. Считается, что некоторая ячейка находится под обстрелом лучника, если и только если все ее точки (включая граничные), находится внутри или на границе круга.

На картинке ниже показаны границы обстрела лучника для «дальностей выстрела» 3, 4 и 5. Сам лучник обозначен буквой A.

Определите, какое количество клеток находится под обстрелом для лучника.

Входные данные

Входные данные представляют из себя одно натуральное число k — дальность выстрела лучника (1 ≤ k ≤ 106).

Выходные данные

Выведите единственное число — количество ячеек, которые находятся под обстрелом.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

H. Автобусы и интранет

Бинарный поиск геометрия реализация *3100

В городе запустили автобусный маршрут, представляющий собой замкнутую ломаную на плоскости, все звенья которой параллельны осям координат. На маршруте будет работать m автобусов, двигающихся по циклу вдоль ломаной в одном направлении с одинаковой постоянной скоростью (временем остановок автобусов в рамках данной задачи можно пренебречь).

Автобусы начинают движение по маршруту в первой вершине ломаной с равными промежутками. Пусть T — это время, за которое один автобус проезжает по кругу весь маршрут. Тогда автобус 1 начинает движение в момент времени 0, автобус 2 — в момент времени T / m, третий — в момент времени 2T / m, и т.д.; наконец, автобус m стартует в момент (m - 1)T / m. Таким образом, интервалы между всеми парами соседних автобусов (в том числе, между последним и первым) одинаковы.

Автобусы могут обмениваться информацией при помощи беспроводных передатчиков одинаковой мощности. Если мощность передатчиков на автобусах равна D, то обмен информацией возможен между автобусами на расстоянии D или меньше.

Кроме этого, автобусы оснащены распределенной системой слежения за маршрутом. Для того, чтобы все автобусы двигались строго по графику, система должна периодически синхронизировать данные на всех автобусах. В момент синхронизации автобус 1 обменивается информацией с автобусом 2, автобус 2 с автобусом 3, и т.д., кроме этого, автобус m обменивается информацией с автобусом 1.

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

Входные данные

В первой строке записано два целых числа n и m (2 ≤ n, m ≤ 105) — количество вершин ломаной и количество автобусов соответственно.

Следующие n строк описывают вершины ломаной в порядке ее обхода. Каждая из этих строк содержит два целых числа xi, yi ( - 1000 ≤ xi, yi ≤ 1000) — координаты очередной вершины.

Гарантируется, что каждое звено ломаной (в том числе, между последней и первой вершиной) параллельно одной из осей координат. Кроме этого, никакие две последовательные вершины ломаной не совпадают. Ломаная может иметь самопересечения и проходить по одному отрезку несколько раз.

Выходные данные

Выведите одно вещественное число — ответ на задачу. Ответ будет принят, если абсолютная или относительная погрешность не превосходит 10 - 6.

Примечание

Пусть все автобусы проезжают 1 единицу расстояния в секунду. В первом примере, через 0.5 секунды автобусы окажутся на расстоянии 1, поэтому можно выбрать D = 1.

Во втором примере, через 0.5 секунды оба автобуса окажутся в точке (0.5, 0), поэтому можно выбрать D = 0.

F. Маги и монстры

геометрия Структуры данных *3100

Вова играет в компьютерную игру Mages and Monsters. Персонаж Вовы — маг, но так как Вова только начал играть, персонаж ещё не знает ни одного заклинания.

В течение игры персонаж Вовы может учить новые заклинания. Каждое заклинание характеризуется двумя числами xi и yi — урон, наносимый заклинанием в секунду, и расходы маны в секунду соответственно, когда Вова использует это заклинание. Вова не обязательно должен использовать заклинание целое количество секунд, тогда урон и затраты маны изменятся пропорционально — более формально, если персонаж использует заклинание с уроном x и затратами маны y в течение z секунд, то он нанесёт x·z урона и потратит y·z маны (без округлений). Если запас маны исчерпан (его значение в начале каждого боя одинаково и известно с самого начала), персонаж не может использовать заклинания вообще; нельзя одновременно применять более одного заклинания.

Также Вова может сражаться с монстрами; каждый монстр характеризуется величинами tj и hj — монстр убивает персонажа Вовы за tj секунд и имеет hj здоровья. После каждого боя с монстром персонаж Вовы восстанавливает ману (или возрождается с полным запасом), так что результаты предыдущих боёв никак не влияют на последующие.

Считается, что Вова может уничтожить монстра, если он способен при помощи своих заклинаний (можно использовать несколько разных заклинаний в одном и том же бою) нанести ему hj урона не более чем за tj секунд, учитывая расходы маны. Если здоровье монстра становится равным нулю ровно через tj секунд после начала боя (то есть монстр и персонаж убивают друг друга одновременно), считается, что Вова может победить.

Необходимо написать программу, обрабатывающую два вида запросов:

  • 1 x y — Вова учит заклинание, наносящее x урона в секунду и тратящее y маны в секунду.
  • 2 t h — Вова сражается с монстром, который способен убить персонажа за t секунд и которому нужно нанести h урона для победы.

Обратите внимание, что запросы подаются в изменённом виде. Помните, что персонаж Вовы не знает ни одного заклинания в начале игры.

Для каждого запроса второго типа нужно определить, может ли Вова победить соответствующего монстра.

Входные данные

В первой строке записаны два целых числа q и m (2 ≤ q ≤ 105, 1 ≤ m ≤ 1012) — количество запросов и запас маны персонажа в начале каждого боя.

Далее идут q строк. В i-й из них записаны три числа ki, ai и bi (1 ≤ ki ≤ 2, 1 ≤ ai, bi ≤ 106).

Запрос по ним восстанавливается следующим образом: пусть j — номер последнего запроса второго типа, на который был дан положительный ответ (если таких ещё не было, j = 0).

  • Если ki = 1, то персонаж учит заклинание, параметры которого вычисляются по формулам x = (ai + j) mod 106 + 1, y = (bi + j) mod 106 + 1.
  • Если ki = 2, то необходимо определить, может ли Вова победить монстра с характеристиками, вычисляемыми таким же образом (t = (ai + j) mod 106 + 1, h = (bi + j) mod 106 + 1).
Выходные данные

На каждый запрос второго типа выведите по одной строке — YES, если Вова может победить соответствующего монстра, и NO в противном случае.

Примечание

В первом тесте персонаж сначала учит заклинание, наносящее 5 урона за 10 маны в секунду. Следующим запросом он сражается с монстром, побеждающим его за 20 секунд и имеющим 50 здоровья, и убивает его за 10 секунд (тратя 100 маны). Следующий монстр уже имеет 52 здоровья, и Вова не может нанести такой урон, имея только 100 маны.

C. Мышиная проблема

геометрия математика реализация сортировки *2300

Аналитик Игорь задремал на работе, и ему приснился сон. Во сне у Игоря на рабочем столе завелось много компьютерных мышей, поэтому он купил себе мышеловку.

Рабочий стол можно представить как бесконечную плоскость, тогда мышеловка представляет из себя прямоугольник, стороны которого параллельными осям координат, противоположные углы которого находятся в точках с координатами (x1, y1) и (x2, y2).

Игорь хочет поймать всех мышей. Анализируя их поведение, Игорь выяснил, что каждая мышь ползет прямолинейно с постоянной скоростью, скорость мыши номер i равна (vix, viy), что означает, что координата x позиции мыши увеличивается за секунду на vix, а координата y — на viy. Изначально мышеловка поднята, и мыши могут свободно передвигаться по столу. Игорь может в любой момент времени опустить мышеловку, при этом он поймает всех мышей, оказавшихся строго внутри мышеловки.

Игорь очень трудолюбивый и даже во сне трудится на своей работе, поэтому он просит вас написать программу, которая по заданным координатам мышеловки, позициям мышей в начальный момент времени и их скоростям вычислит ближайший момент времени, в который ему удастся поймать всех мышей. Обратите внимание, что Игорь может опустить мышеловку только один раз.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 100 000) — количество компьютерных мышей у Игоря в офисе.

Вторая строка содержит четыре целых числа x1, y1, x2 и y2 (0 ≤ x1 ≤ x2 ≤ 100 000), (0 ≤ y1 ≤ y2 ≤ 100 000) — координаты противоположных углов мышеловки.

Следующие n строк содержат информацию о мышах.

В i-й из этих строк содержится четыре целых числа rix, riy, vix и viy, (0 ≤ rix, riy ≤ 100 000,  - 100 000 ≤ vix, viy ≤ 100 000), где (rix, riy) — позиция мыши в начальный момент времени, а (vix, viy) — ее скорость.

Выходные данные

В единственной строке выведите минимальное неотрицательное t такое, что если Игорь опустит мышеловку в момент времени t секунд, то все компьютерные мыши окажутся строго внутри мышеловки. Если такого t не существует, выведите -1.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри b. Ваш ответ будет засчитан, если .

Примечание

Ниже приведена иллюстрация первого примера.

Точки A, B, C, D - начальные положение мышей, отрезками показан их путь.

Тогда в первый момент времени, в котором все точки будут находиться в прямоугольнике, прямоугольник будет выглядеть следующим образом:

Иллюстрация второго примера выглядит так:

Как видно на изображении, мыши A, D и B никогда не попадут в прямоугольник.

B. Разрезание моркови

геометрия математика *1200

Аналитик Игорь усыновил n маленьких кроликов. Мы все знаем, что кролики обожают морковку. Поэтому Игорь купил морковку, которую он хочет разделить между своими кроликами. Игорь хочет относиться к каждому кролику одинаково, поэтому он хочет разделить морковку на n частей одинаковой площади.

Формально, морковка выглядит как равнобедренный треугольник с длиной основания, равной 1, и высотой, равной h. Игорь хочет сделать n - 1 разрез параллельно основанию, чтобы разрезать морковку на n частей. Он хочет, чтобы все n частей имели одинаковую площадь. Помогите Игорю определить, где ему нужно проводить разрезы, чтобы каждый кусок имел одинаковую площадь.

Иллюстрация к первому примеру.
Входные данные

В единственной строке находятся два целых числа n и h (2 ≤ n ≤ 1000, 1 ≤ h ≤ 105) — число частей, на которое нужно разрезать морковку, и высота морковки.

Выходные данные

Выведите n - 1 вещественное число x1, x2, ..., xn - 1. Число xi обозначает, что i-й разрез должен быть сделан на расстоянии xi единиц от вершины треугольника. Кроме того, должно выполняться 0 < x1 < x2 < ... < xn - 1 < h.

Ваш ответ будет считаться правильным, если абсолютная или относительная ошибка каждого числа в вашем ответе не превосходит 10 - 6.

Формально, пусть ваш ответ равен a, а ответ жюри равен b. Ваш ответ будет засчитан, если .

Примечание

Определение равнобедренного треугольника: https://ru.wikipedia.org/wiki/Равнобедренный_треугольник.

G. Разрезать торт

Бинарный поиск геометрия Структуры данных *3500

Аркадий прошел n-й уровень в игре Township, и поэтому Маша решила испечь ему торт! Конечно, торт представляет из себя выпуклый n-угольник, то есть многоугольник с n сторонами.

Будучи истинным джентльменом, Аркадий решил поделить торт на две равные по площади части одним прямым разрезом: одну часть он съест сам, другую съест Маша. Но вот незадача: Аркадий уже воткнул нож в одну из точек внутри торта, и теперь ему нужно разрезать торт по прямой линии, проходящей через эту точку.

Помогите Аркадию: найдите такую прямую, что она проходит через точку, в которую Аркадий воткнул нож, и делит торт на две равные по площади части, или определите, что такой прямой нет. Ваша программа должна быстро отвечать на много запросов с одним и тем же тортом, но разными точками, в которые Аркадий втыкает нож.

Входные данные

В первой строке находятся два целых числа n и q (3 ≤ n ≤ 104, 1 ≤ q ≤ 105) — число вершин в торте-многоугольнике и число запросов.

Далее следуют n строк, в которых находятся координаты вершин многоугольников в порядке обхода по часовой стрелке. В i-й из этих строк находятся два целых числа xi и yi ( - 106 ≤ xi, yi ≤ 106) — координаты i-й вершины. Гарантируется, что многоугольник строго выпуклый, в частности, никакие три вершины не лежат на одной прямой.

Далее следует пустая строка.

Далее следуют q строк, в которых находятся координаты точек, в которые Аркадий втыкает нож. В i-й из этих строк находятся два целых числа xi и yi ( - 106 ≤ xi, yi ≤ 106) — координаты точки, в которую Аркадий втыкает нож, в i-м запросе. Гарантируется, что в каждом запросе точка лежит строго внутри многоугольника, в частности, не лежит на его границе.

Выходные данные

Для каждого запроса выведите одно число — полярный угол прямой, являющейся ответом на соответствующий запрос. Угол должен принадлежать отрезку [0;π], углы отсчитываются от направления оси абцисс (OX) против часовой стрелки. Например, полярный угол направления оси ординат (OY) равен . Если в запросе не существует подходящей прямой, выведите -1.

Если подходящий прямых несколько, выведите любую из них. Ваш ответ будет считаться правильным, если отношение модуля разности площадей получившихся частей к общей площади многоугольника, не превосходит 10 - 4. Иными словами, если a и b — площади получившихся частей многоугольника, то ваш ответ будет считаться правильным, если .

D. Два товарища

Бинарный поиск геометрия *2600

Два соседа Петя и Вася, живут в городе, в котором всего три здания: кинотеатр, магазин и дом, в котором они живут. Остальное пространство — большая заасфальтированная площадь.

Как-то раз они пошли в кино, и фильм их впечатлил так, что когда они вышли из кинотеатра, им хотелось обсуждать и обсуждать его.

Вася хочет попасть домой, а Петя сначала должен зайти в магазин, а потом прийти домой. Так что они решили, что пройдут какой-то путь вместе обсуждая кино (может быть, этот путь пройдет через магазин, а, возможно, это будет пара кругов вокруг кинотеатра) и дальше пойдут по своим делам. Как только они разойдутся, то задумаются о своих повседневных делах и даже если встретятся снова где-то, то не смогут продолжить обсуждение. Таким образом путь Васи это будет какая-то непрерывная кривая, имеющая своими концами кинотеатр и дом. Путь Пети — проходящая через магазин непрерывная кривая, имеющая своими концами кинотеатр и дом.

Фильм закончился поздно, так что весь пройденный Петей путь не должен отличаться от кратчайшего больше, чем на t1, а путь Васи не должен отличаться от кратчайшего больше чем на t2.

Найдите максимальное расстояние, которое Петя и Вася пройдут вместе, обсуждая кино.

Входные данные

В первой строке содержатся два целых числа: t1, t2 (0 ≤ t1, t2 ≤ 100). Во второй строке содержатся координаты кинотеатра, в третьей — их дома и в последней — магазина. Все координаты даны в метрах, целые и не превосходят 100 по абсолютному значению. Никакие два заданных объекта не совпадают.

Выходные данные

В единственной строке выведите одно число — максимальное расстояние, которое Петя и Вася пройдут вместе, обсуждая кино. Ответ выводите с точностью не менее 4 знаков после десятичной точки.

B. Depression

геометрия математика *1200

Do you remember a kind cartoon "Beauty and the Beast"? No, no, there was no firing from machine guns or radiation mutants time-travels!

There was a beauty named Belle. Once she had violated the Beast's order and visited the West Wing. After that she was banished from the castle...

Everybody was upset. The beautiful Belle was upset, so was the Beast, so was Lumiere the candlestick. But the worst thing was that Cogsworth was upset. Cogsworth is not a human, but is the mantel clock, which was often used as an alarm clock.

Due to Cogsworth's frustration all the inhabitants of the castle were in trouble: now they could not determine when it was time to drink morning tea, and when it was time for an evening stroll.

Fortunately, deep in the basement are lying digital clock showing the time in the format HH:MM. Now the residents of the castle face a difficult task. They should turn Cogsworth's hour and minute mustache hands in such a way, that Cogsworth began to show the correct time. Moreover they need to find turn angles in degrees for each mustache hands. The initial time showed by Cogsworth is 12:00.

You can only rotate the hands forward, that is, as is shown in the picture:

As since there are many ways too select such angles because of full rotations, choose the smallest angles in the right (non-negative) direction.

Note that Cogsworth's hour and minute mustache hands move evenly and continuously. Hands are moving independently, so when turning one hand the other hand remains standing still.

Input

The only line of input contains current time according to the digital clock, formatted as HH:MM (00 ≤ HH ≤ 23, 00 ≤ MM ≤ 59). The mantel clock initially shows 12:00.

Pretests contain times of the beginning of some morning TV programs of the Channel One Russia.

Output

Print two numbers x and y — the angles of turning the hour and minute hands, respectively (0 ≤ x, y < 360). The absolute or relative error in the answer should not exceed 10 - 9.

Note

A note to the second example: the hour hand will be positioned exactly in the middle, between 4 and 5.

D. Ночные танцы на дискотеке

геометрия Деревья дп жадные алгоритмы поиск в глубину и подобное *2000

Теснота на дискотеке никогда не помешает веселиться нашим друзьям, но побольше места не помешает, не правда ли?

Дискотека может быть представлена как бесконечная плоскость xy, на которой находятся n танцоров. Как только кто-то начинает двигаться, он будет перемещаться только в своей зоне движения, которая представляет из себя круг Ci с центром в (xi, yi) и радиусом ri. Никакие две границы зон не имеют более, чем одну общую точку, то есть для каждой пары (i, j) (1 ≤ i < j ≤ n) либо зоны Ci и Cj не пересекаются, либо одна лежит полностью в другой. Заметьте, что возможно такое, что две границы зон имеют ровно одну общую точку, однако, никакие два танцора не имеют совпадающие зоны.

Цукихи, один из танцоров, определяет просторность как площадь, покрытая нечетным числом зон движений танцоров. Пример показан на рисунке ниже, затемненные регионы определяют просторность, если все танцуют одновременно.

К счастью, никто не танцует всю ночь, поэтому ночь разделена на две части: до полуночи и после полуночи. Каждый танцор одну половину времени танцует, а другую — сидит с друзьями, не занимая площади. Просторность каждой половины времени вычисляется отдельно, и танцоры хотят, чтобы их сумма была максимально возможна. Следующий рисунок показывает оптимальное разделение примера выше.

Возможны различные варианты разделить танцоров на две части: кто танцует в первой половине, а кто — во второй, которые ведут к различным суммам просторности в двух половинах. Вам предстоит определить максимально возможное значение этой суммы.

Входные данные

Первая строка содержит целое чило n (1 ≤ n ≤ 1 000) — количество танцоров.

Следующие n строк описывают танцоров: в i-й строке находятся три целых числа xi, yi и ri ( - 106 ≤ xi, yi ≤ 106, 1 ≤ ri ≤ 106), описывающих зону движения в виде круга с центром в (xi, yi), радиусом ri.

Выходные данные

Выведите одно число — максимально возможную сумму просторностей двух половин ночи.

Ответ будет считаться верным, если его относительная или абсолютная ошибка не превосходит 10 - 9. Иными словами, пусть ваш ответ равен a, а ответ жюри равен b. Тогда ваш ответ будет зачтен, если .

Примечание

Первый пример соответствует рисунку из условия.

D. Карен и карты

Бинарный поиск геометрия Комбинаторика Структуры данных *2800

Карен пришла из супермаркета и собирается спать.

После принятия душа и переодевания в пижаму она заметила альбом на своей полке. Заинтересовавшись, она открыла его и увидела коллекцию карт.

Она вспомнила, что играла в них, когда была ребенком, но, несмотря на то, что она уже выросла, ее по-прежнему интересует один вопрос.

Каждая карта имеет три характеристики: сила, защита и скорость. Значения всех характеристик всех карт являются положительными целыми числами. Максимальное значение силы любой карты равно p, максимальное значение защиты равно q, максимальное значение скорости равно r.

В коллекции Карен n карт. i-я из этих карт имеет силу ai, защиту bi и скорость ci, соответственно.

Карта бьет другую карту, если хотя бы две ее характеристики строго больше соответствующих характеристик другой карты.

Карен интересует, сколько существует различных карт таких, что каждая из них бьет все карты из ее коллекции. Две карты различны, если хотя бы одна характеристика этих карт различна.

Входные данные

Первая строка содержит четыре целых числа n, p, q и r (1 ≤ n, p, q, r ≤ 500000) — число карт в коллекции, максимально возможная сила, максимально возможная защита, максимально возможная скорость, соответственно.

Каждая из следующих n строк содержит три целых числа. А именно, i-я строка содержит ai, bi и ci (1 ≤ ai ≤ p, 1 ≤ bi ≤ q, 1 ≤ ci ≤ r) — силу, защиту и скорость i-й карты из коллекции, соответственно.

Выходные данные

Выведите одно число — число различных карт, которые бьют все карты из коллекции Карен.

Примечание

В первом примере максимально возможная сила равна 4, максимально возможная защита равна 4, а максимально возможная скорость равна 5.У Карен есть три карты:

  • У первой карты сила 2, защита 2, скорость 5.
  • У второй карты сила 1, защита 3, скорость 4.
  • У третьей карты сила 4, защита 1, скорость 1.

Всего существуют 10 карт, которые бьют все карты из коллекции:

  1. Карта с силой 3, защитой 3 и скоростью 5.
  2. Карта с силой 3, защитой 4 и скоростью 2.
  3. Карта с силой 3, защитой 4 и скоростью 3.
  4. Карта с силой 3, защитой 4 и скоростью 4.
  5. Карта с силой 3, защитой 4 и скоростью 5.
  6. Карта с силой 4, защитой 3 и скоростью 5.
  7. Карта с силой 4, защитой 4 и скоростью 2.
  8. Карта с силой 4, защитой 4 и скоростью 3.
  9. Карта с силой 4, защитой 4 и скоростью 4.
  10. Карта с силой 4, защитой 4 и скоростью 5.

Во втором примере максимально возможная сила равна 10, максимально возможная защита равна 10, максимально возможная скорость равна 10. У Карен пять карт, у всех из них сила 1, защита 1 и скорость 1.

Каждая из 972 карт, у которых хотя бы две характеристики больше 1, бьет все карты из коллекции.

E. Коридор

геометрия *2600

Рассмотрим план дома.

Пусть дом представляет собой бесконечную горизонтальную полосу, задаваемую неравенством  - h ≤ y ≤ h. Строго снаружи дома находится два источника света в точках (0, f) и (0,  - f). В стенах расположены окна, представляющие собой отрезки на прямых y = h и y =  - h, причем окна расположены симметрично относительно прямой y = 0.

Ваша задача — найти площадь пола дома, которая будет освещена источниками света.

Входные данные

В первой строке входного файла заданы три целых числа n, h и f (1 ≤ n ≤ 500, 1 ≤ h ≤ 10, h < f ≤ 1000). Далее в n строках записаны по два целых числа li, ri ( - 5000 ≤ li < ri ≤ 5000), каждая запись означает два отрезка. Концы первого отрезка: (li, h)-(ri, h), концы второго отрезка: (li,  - h)-(ri,  - h). Эти отрезки описывают положение окон в доме. Числа в строках разделяются пробелами. Гарантируется, что никакие два различных отрезка не имеют общих точек.

Выходные данные

Выведите единственное вещественное число — площадь освещенной части пола с абсолютной или относительной погрешностью не более чем 10  - 4.

Примечание

На рисунке представлен второй тест из условия. Зеленая область — это искомая часть коридора. Сиреневые отрезки обозначают окна.

B. Мистер Б и угол в многоугольнике

геометрия Конструктив математика *1300

Однажды, разбираясь в своих каждодневных заботах, Мистеру Б понадобилось получить угол a и начертить его на своем поле. Так случилось, что инопланетяне оставили уже множество различных фигур на его поле, среди которых был правильный n-угольник (правильный многоугольник с n сторонами).

Именно этой фигурой Мистер Б и решил воспользоваться. Теперь Мистеру Б необходимо найти три попарно различные вершины многоугольника v1, v2, v3 такие, что угол (т.е. угол, в котором v2 — вершина, а v1 и v3 лежат на сторонах) будет как можно ближе к a. Иными словами, необходимо, чтобы величина — была минимально возможной.

При этом Мистера Б устроит любое из возможных решений.

Входные данные

В первой и единственной строке через пробел заданы два целых числа: n и a (3 ≤ n ≤ 105, 1 ≤ a ≤ 180) — количество вершин в многоугольнике и необходимый угол в градусах.

Выходные данные

Выведите через пробел три различные вершины многоугольника v1, v2, v3, образующие угол . Если существует несколько решений, выведите любое. Вершины многоугольника нумеруются от 1 до n в порядке обхода по часовой стрелке.

Примечание

В первом примере вершины равностороннего треугольника могут давать только угол в 60 градусов, поэтому ответом является любой возможный угол.

В квадрате же можно получить только углы в 45 и 90 градусов. Поэтому во втором примере выбирается угол в 45 градусов, так как |45 - 67| < |90 - 67|. Корректными также являются ответы: "3 1 2", "3 2 4", "4 2 3", "4 3 1", "1 3 4", "1 4 2", "2 4 1", "4 1 3", "3 1 4", "3 4 2", "2 4 3", "2 3 1", "1 3 2", "1 2 4", "4 2 1".

В третьем примере, напротив, выбирается угол в 90 градусов, так как |90 - 68| < |45 - 68|. Корректными также являются ответы: "2 1 4", "3 2 1", "1 2 3", "4 3 2", "2 3 4", "1 4 3", "3 4 1".

B. Глеб и пицца

геометрия *1100

Глеб заказал пиццу себе домой. Когда привезли пиццу, он очень сильно огорчился, ведь несколько кусков колбасы попало на корку, а он так не любит корку.

Пицца представляет собой круг радиуса r, с центром в начале координат. Пицца состоит из основной части — круга радиуса r - d с центром в начале координат, и корки вокруг основной части ширины d. Кусочки колбасы тоже представляют собой круги. Радиус i-го кусочка колбасы равен ri, а центр задается в виде пары(xi, yi).

Глеб просит вас помочь определить количество кусочков колбасы, попавших на корку. Кусочек колбасы попал на корку, если он полностью лежит на корке.

Входные данные

Первая строка содержит два целых числа r и d (0 ≤ d < r ≤ 500), обозначающие радиус пиццы и толщину корки соответственно.

Следующая строка содержит одно целое число n (1 ≤ n ≤ 105), обозначающее количество кусочков колбасы.

Следующие n строк содержат по три целых числа xi, yi и ri ( - 500 ≤ xi, yi ≤ 500, 0 ≤ ri ≤ 500), где xi и yi — координаты центра i-го кусочка колбасы, ri — радиус i-го кусочка колбасы.

Выходные данные

Выведите количество кусочков колбасы, попавших на корочку.

Примечание

Ниже изображена картинка, поясняющая первый пример. Зеленым цветом отмечены кусочки колбасы, попавшие на корку.

B. Rooter's Song

геометрия Конструктив реализация сортировки Структуры данных *1900

Куда бы мы не шли, кого бы не нашли, на нашем месте, исполним эту песню вместе!

На плоскости расположена прямоугольная сцена размера w × h с вершинами в точках (0, 0), (w, 0), (w, h) и (0, h).

По краям сцены находятся n танцоров. i-й из них относится к одной из следующих групп:

  • Вертикальные: стоит в (xi, 0), двигается в положительном направлении y (вверх);
  • Горизонтальные: стоит в (0, yi), двигается в положительном направлении x (вправо).

В соответствии с планом танца, i-й танцор должен стоять на месте первые ti миллисекунд, а затем начать двигаться в заданном направлении со скоростью 1 единица в миллисекунду, пока не достигнет другого края сцены. Никакие два танцора не имеют одновременно совпадающую группу, позицию и время ожидания.

Когда два танцора сталкиваются (т.е. находятся в одной точке, и оба из них двигаются), они мгновенно обмениваются направлениями движения и продолжают двигаться.

Танцоры останавливаются, как только они достигнут границы. Найдите точку остановки для каждого танцора.

Входные данные

Первая строка содержит три целых числа n, w и h (1 ≤ n ≤ 100 000, 2 ≤ w, h ≤ 100 000) — число танцоров, ширина и высота сцены, соответственно.

Каждая из следующих n строк описывает танцора: i-я из них содержит три целых числа gi, pi и ti (1 ≤ gi ≤ 2, 1 ≤ pi ≤ 99 999, 0 ≤ ti ≤ 100 000), описывающие группу танцора gi (gi = 1 — вертикальные, gi = 2 — горизонтальные), позицию, и время ожидания. Если gi = 1, то pi = xi; иначе pi = yi. Гарантируется, что 1 ≤ xi ≤ w - 1 и 1 ≤ yi ≤ h - 1. Гарантируется, что никакие два танцора не имеют одинаковую группу, позицию и время одновременно.

Выходные данные

Выведите n строк, i-я из которых содержит два целых числа (xi, yi) — позицию остановки i-го танцора.

Примечание

Первый пример соответствует начальной расстановке, показанной в условии, траектории танцоров показаны различными цветами на следующем рисунке.

Во втором примере никакие танцоры не сталкиваются.

B. Tell Your World

геометрия Перебор *1600

Соедини бесчисленное количество точек линиями и достигни далёкого мира.

На плоскости находится n точек, i-я из которых находится в точке с координатами (i, yi).

Определите, возможно ли провести две параллельные и не совпадающие прямые такие, что каждая точка лежит на ровно одной из прямых, а каждая из прямых проходит через хотя бы одну точку.

Входные данные

Первая строка содержит целое число n (3 ≤ n ≤ 1 000) — количество точек.

Вторая строка содержит n целых чисел y1, y2, ..., yn ( - 109 ≤ yi ≤ 109) — вертикальные координаты точек.

Выходные данные

Выведите «Yes» (без кавычек), если можно удовлетворить всем ограничениям, и «No» иначе.

Вы можете выводить каждую из букв в любом регистре (заглавную или строчную).

Примечание

В первом примере есть пять точек: (1, 7), (2, 5), (3, 8), (4, 6) и (5, 9). Возможно провести прямую, проходящую через точки 1, 3, 5, и параллельную ей вторую, проходящую через точки 2, 4.

Во втором примере, несмотря на то, что можно провести две прямых, покрывающие все точки, их нельзя сделать параллельными.

В третьем примере невозможно выполнить оба условия одновременно.

E. Сторожевые башни

Бинарный поиск геометрия графы снм сортировки *2600

В одном далеком-предалеком королевстве живет жадный-прежадный король. Для защиты своих владений он построил n сторожевых башен. Помимо башен, в королевстве есть две армии, во главе каждой из которых стоит властный и самодовольный генерал. Генералы терпеть не могут друг друга, в частности, они никогда не допустят, чтобы в одной из башен находились солдаты обеих армий.

Во время оборонительных действий для управления сторожевой башней генералу необходимо направить часть своей армии в эту башню. Каждый генерал требует у короля гонорар за управление башнями. Поскольку они живут в действительно очень далеком королевстве, каждый генерал оценивает свой гонорар следующим странным образом: он находит две самые удаленные башни, в которых находятся солдаты его армии и требует гонорар, равный этому расстоянию. Каждую башню можно считать точкой на плоскости с координатами (x, y), а расстояние между двумя точками с координатами (x1, y1) и (x2, y2) определяется в этом королевстве как |x1 - x2| + |y1 - y2|.

Жадного короля не совсем устроило такое требование генералов, поэтому он лишь согласился выплатить один гонорар на двоих генералов, равный максимальному из запрашиваемых двух гонораров. Однако, жадность все еще не дает покоя королю, поэтому из всех таких распределений башен между армиями, он хочет отыскать наиболее дешевое. Каждая башня должна быть занята солдатами ровно одной армии.

Для этих целей он нанял Вас. Вам необходимо найти минимальное количество денег, которое хватит для оплаты гонорара. А так как король еще крайне щепетилен, вы должны посчитать количество распределений, которые стоят такой же суммы денег. Поскольку их число может быть крайне велико, королю достаточно знать его значение в виде остатка от деления на 109 + 7.

Два распределения называются различными, если различаются множества башен, занятых солдатами первого генерала.

Входные данные

В первой строке задано целое число n (2 ≤ n ≤ 5000), n — количество сторожевых башен. Далее следует n строк, в каждой из которой содержится два целых числа x, y — координаты i-й башни (0 ≤ x, y ≤ 5000). Никакие две башни не находятся в одной точке.

Претест 6 является одним из максимальных тестов в этой задаче.

Выходные данные

В первую строку выведите минимальное количество денег, которого хватит для выплаты гонорара генералам.

Во вторую строку выведите количество распределений, которые можно реализовать, используя минимальный гонорар. Это число необходимо вычислить по модулю 1000000007 (109 + 7).

Примечание

В первом примере всего две башни, растояние между которыми равно 2. Если мы отдадим одному генералу все две башни, то генералам необходимо будет заплатить 2 условные единицы. В случае когда каждый генерал получит в командование по башне, величина гонорара будет равно 0. Это и есть минимальный гонорар, как не трудно заметить, его мы можем получить двумя способами.

A. Точки в пятимерном пространстве

геометрия математика Перебор *1700

Дано множество, состоящее из n точек в пятимерном пространстве. Точки пронумерованы от 1 до n. Никакие две точки не совпадают.

Назовем точку a плохой, если существуют две разные точки b и c из данного множества, не совпадающие с a, такие что угол между векторами и острый (строго меньше ). Иначе, назовем точку хорошей.

Угол между векторами и в пятимерном пространстве определен как , где  — скалярное произведение и  — длина вектора .

Выведите индексы всех хороших точек в порядке возрастания.

Входные данные

Первая строка входных данных содержит одно целое число n (1 ≤ n ≤ 103) — количество точек.

Следующие n строк содержат по пять целых чисел ai, bi, ci, di, ei (|ai|, |bi|, |ci|, |di|, |ei| ≤ 103) — координаты i-й точки. Все точки различны.

Выходные данные

Выведите число k — количество хороших точек.

В следующих k строках выведите индексы хороших точек в возрастающем порядке.

Примечание

В первом примере, первая точка образует угол ровно со всеми другими парами точек, поэтому она является хорошей.

Во втором примере точки лежат в плоскости cd и выглядят так:

Видно, что все углы острые, поэтому ни одна точка не является хорошей.

B. Арпа и экзамен по геометрии

геометрия математика *1400

Арпа на экзамене по геометрии. Вот последняя задача экзамена.

Вам даны три точки a, b, c.

Найдите на плоскости точку и угол такие, что если мы повернем плоскость вокруг точки на заданный угол, то новая позиция точки a совпадет со старой позицией точки b, а новая позиция точки b совпадет со старой позицией точки c.

Арпа сомневается, имеет ли задача решение или нет (т.е. есть ли подходящие точка и угол). Помогите Арпе определить, существует ли решение, или нет.

Входные данные

Единственная строка содержит шесть целых чисел ax, ay, bx, by, cx, cy (|ax|, |ay|, |bx|, |by|, |cx|, |cy| ≤ 109). Гарантируется, что все точки попарно различны.

Выходные данные

Выведите «Yes», если решение существует, и «No» иначе.

Вы можете вывести каждую из букв в любом регистре (строчную или заглавную).

Примечание

В первом примере можно повернуть плоскость относительно точки (0.5, 0.5) на .

Во втором примере решения не существует.

H. Боб и сцены

геометрия дп *3000

Жители BubbleLand празднуют свое 10-летие, поэтому они решили организовать большой музыкальный фестиваль. Перед Бобом стояла задача пригласить N известных исполнителей на фестиваль. Однако, он был слишком занят расстановкой сцен, поэтому он забыл разослать письма с приглашениями вовремя, и сейчас он нашел только K свободных исполнителей. Теперь сцен больше, чем исполнителей, поэтому некоторые из сцен останутся пустыми. Боб не хочет, чтобы жители BubbleLand заметили пустые сцены и поняли, что он был безответственным.

Боб решил выбрать ровно K сцен, формирующих выпуклое множество, закрыть ребра этого выпуклого множества большими рекламными щитами и провести фестиваль внутри. Щиты скроют пустые сцены, находящиеся снаружи, от жителей, но кроме этого, Бобу еще надо сделать так, чтобы внутри не осталось ни одной пустой сцены.

Так как придет много людей, он хочет сделать площадь фестиваля максимально возможной. Помогите ему вычислить максимальную площадь, которую он может получить, выполнив все ограничения. Если это вообще невозможно, то ответ равен 0.00.

Входные данные

Первая строка содержит два целых числа N (3 ≤ N ≤ 200) и K (3 ≤ K ≤ min(N, 50)), разделенные пробелами, описывающих число сцен и число исполнителей, соответственно.

Каждая из следующих N строк содержит два целых числа Xi и Yi (0 ≤ Xi, Yi ≤ 106), описывающие координаты очередной сцены. Не существует трех сцен, лежащих на одной прямой.

Выходные данные

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

Примечание

Пояснение к примеру: из всех возможных выпуклых многоугольников с 4 вершинами и без других точек внутри наибольший имеет координаты вершин (0, 0), (2, 1), (4, 4) и (1, 5).

E. Лада Малина

геометрия Структуры данных *3400

После длительного исследования и ряда экспериментов ведущая автомобилестроительная компания Мегаполии «АвтоВоз» выпустила уникальный по своим характеристикам автомобиль «Лада Малина». Одно из самых интересных нововведений «Лады Малины» — экологичные высокоэффективные двигатели.

Будем считать автомобиль точкой на плоскости Oxy. Автомобиль оснащен k двигателями, пронумерованными от 1 до k. Каждый двигатель имеет свой вектор скорости, который имеет координаты (vxi, vyi), измеряемые в единицах расстояния в день. Любой двигатель можно включить на любую мощность wi, которая является вещественным числом от  - 1 до  + 1 (включительно), что даёт вклад в (wi·vxi, wi·vyi) к итоговому вектору скорости автомобиля. А именно, итоговый вектор скорости автомобиля оказывается равен

(w1·vx1 + w2·vx2 + ... + wk·vxk,   w1·vy1 + w2·vy2 + ... + wk·vyk)

Это означает, что если автомобиль перемещается с постоянными wi в течение дня, то x-координата автомобиля изменится на первую компоненту выражения выше, а y-координата автомобиля изменится на вторую компоненту выражения выше. Таким образом, если, например, все wi будут равны нулю, то автомобиль будет стоять на месте, а если все wi будут равны нулю, кроме w1 = 1, то автомобиль поедет со скоростью, задаваемой вектором скорости первого двигателя.

В Мегаполии имеются n фабрик, i-я расположена в точке (fxi, fyi). На i-й фабрике изготовлено ai автомобилей «Лада Малина», полностью готовых к поездкам.

Для продвижения новой модели «АвтоВоз» хочет устроить международную выставку-показ автомобилей. Имеется q вариантов местоположения и времени проведения выставки, в i-м из них выставка пройдёт в точке с координатами (pxi, pyi) через ti дней.

Конечно, на место проведения выставки «АвтоВоз» хотел бы привезти как можно больше автомобилей с фабрик. Перемещение автомобиля происходит путём включения его двигателей с произвольными значениями мощности, в результате чего ровно к моменту начала выставки автомобиль должен оказаться в точке местоположения выставки.

Однако, при разных вариантах проведения выставки может оказаться невозможным успеть перегнать автомобили с той или иной фабрики к началу выставки. Поэтому вам предлагается определить для каждого из вариантов местоположения и времени выставки, сколько автомобилей со всех фабрик смогут успеть к её началу.

Входные данные

В первой строке находятся три целых числа k, n, q (2 ≤ k ≤ 10, 1 ≤ n ≤ 105, 1 ≤ q ≤ 105) — количество двигателей у автомобиля «Лада Малина», количество фабрик по производству «Лады Малины» и количество вариантов местоположения и времени проведения международной выставки-показа автомобилей соответственно.

В следующих k строках находятся описания двигателей «Лады Малины», в i-й из них находятся два целых числа vxi, vyi ( - 1000 ≤ vxi, vyi ≤ 1000), задающих вектор скорости i-го двигателя. Вектор скорости не может быть нулевым, то есть, vxi и vyi не равны одновременно нулю. Гарантируется, что никакие два из векторов скоростей не коллинеарны (параллельны).

Следующие n строк содержат описания фабрик. В i-й из них находятся три целых числа fxi, fyi, ai ( - 109 ≤ fxi, fyi ≤ 109, 1 ≤ ai ≤ 109), координаты i-й фабрики и количество автомобилей на ней соответственно.

Следующие q строках содержат описания местоположений выставок. В i-й из них находятся три целых числа pxi, pyi, ti ( - 109 ≤ pxi, pyi ≤ 109, 1 ≤ ti ≤ 105), координаты i-го местоположения выставки и количество дней до её проведения соответственно.

Выходные данные

Для каждого возможного варианта местоположения выведите число автомобилей, которые смогут к времени проведения выставки добраться до неё.

Примечание

Изображения, относящиеся к тестам из условия, даны ниже. Варианты местоположения выставки отмечены крестиками, а фабрики точками. Рядом с каждой фабрикой указано количество автомобилей, находящихся на ней.

Пояснение к первому примеру:

  • Автомобиль с первой фабрики не успеет добраться до места проведения.
  • Автомобиль со второй фабрики можно перегнать, если установить значения w1 = 0, w2 = 1.
  • Автомобиль с третьей фабрики можно перегнать, если установить значения , .
  • Автомобиль с четвёртой фабрики можно перегнать, если установить значения w1 = 1, w2 = 0.

B. Ленивый охранник

геометрия математика Перебор *1000

Ваш друг недавно устроился работать в охранную компанию. Каждый охранник в компании отвечает за область города из ровно N кварталов, причем область он может выбирать сам. Это значит, что вашему другу предстоит патрулировать вдоль периметра какой-нибудь области площадью ровно N кварталов. Он хочет облегчить себе жизнь, и просит вас помочь ему найти кратчайший маршрут для патрулирования. Город можно считать бесконечной квадратной сеткой.

Входные данные

Входной файл содержит единственное число N (1 ≤ N ≤ 106) — число кварталов, которое должен окружать маршрут.

Выходные данные

Минимальный периметр, которого можно достичь.

Примечание

Вот некоторые из возможных маршрутов для примеров:

E. Идол Могоху-Ри

геометрия *2600

Давным давно где-то в глубине Америки существовало могущественное племя с великим вождем Пиннивухом. Однажды это племя захватило три города Майя. Пиннивух задумался: необходимо как-то контролировать покоренные территории. Для этого он обратился к жрецам верховного бога Могоху-Ри за помощью.

Жрецы донесли до него волю бога: для контроля этих трех городов необходимо поставить идол Могоху-Ри, создающий религиозное поле над городами. Однако этот идол настолько могущественный, что будучи неуравновешенным тремя жертвенными алтарями, расположенными по одному в каждом городе, он может запросто свести всех людей в округе с ума. Для уравновешивания идола алтари нужно поставить таким образом, чтобы центр масс системы из этих трех точек совпадал с идолом. При подсчете центра масс считается что все алтари имеют одинаковую массу.

Теперь Пиннивух размышляет: куда же поставить идол. У него есть список возвышенностей, пригодных для установки идола. Помогите ему определить, на какие из них можно поставить идол без риска выжечь мозги населению городов религиозным полем.

Каждый город имеет форму выпуклого многоугольника, никакие три вершины которого не лежат на одной прямой. Города могут пересекаться. Каждый алтарь должен прикрепляться к своему городу особым обрядом, причем он обязан находиться на его территории (возможно на границе). Таким образом, на территории города может быть несколько алтарей, но к нему будет относиться ровно один из них. Алтари, идол и возвышенности являются точками на плоскости, некоторые из которых могут совпадать.

Возвышенности рассматриваются независимо друг от друга, расположение алтарей для разных возвышенностей может быть разным.

Входные данные

Сначала идут разделенные пустыми строками описания трех городов в следующем формате:

В первой строке идет целое число n (3 ≤ n ≤ 5·104) — количество вершин многоугольника. Следующие n строк содержат по два целых числа xi, yi — координаты i-ой вершины многоугольника в порядке обхода против часовой стрелки.

После описания городов идет целое число m (1 ≤ m ≤ 105) — количество возвышенностей. Следующие m строк содержат по два целых числа xj, yj — координаты j-ого холма.

Все координаты во входных данных не превосходят 5·108 по модулю.

Выходные данные

Выведите для каждой возвышенности на отдельной строке «YES» (без кавычек) или «NO» (без кавычек), в зависимости от того, можно ли поставить три жертвенных алтаря для уравновешивания идола или нет.

Примечание

Для возвышенности (2, 1) подойдет расположение алтарей в точках (1, 0), (7, 5), ( - 2,  - 2), для возвышенности (1, 1) — точки (0, 0), (6, 4), ( - 3,  - 1). Подойдет и много других троек точек. Для других возвышенностей подходящих троек нет.

F. Симметричные проекции

геометрия *2900

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

Мультимножество — это множество, в котором разрешается несколько одинаковых элементов.

Мультимножество точек называется симметричным, если существует такая точка P на плоскости, что данное мультимножество обладает центральной симметрией относительно точки P.

Входные данные

В первой строке дано целое число n (1 ≤ n ≤ 2000)  — количество точек в данном множестве.

Каждая из следующих n строк содержит два целых числа xi и yi ( - 106  ≤  xi,  yi  ≤  106), описывающие координаты точек множества. Гарантируется, что все точки различны.

Выходные данные

Если хороших прямых бесконечно много, выведите -1.

Иначе выведите одно целое число — количество хороших прямых.

Примечание

Иллюстрация к первому тесту из условия:

Во втором примере хорошей является любая прямая, проходящая через начало координат.

E. Маленький брат

Бинарный поиск геометрия сортировки *2800

Маленький брат Маши-умняши отметил на клетчатой бумаге две различные точки. После этого он нарисовал несколько окружностей и отдал листок сестре.

Маша только что вернулась из школы с урока по геометрии, поэтому она сразу заметила несколько особенностей на рисунке брата.

Во-первых, прямая, проходящая через точки, нарисованные братом, не пересекает ни одну из окружностей и не касается ни одной из окружностей.

Во-вторых, окружности также попарно не пересекаются, не касаются и не вкладываются.

Но Машу не просто так называют умняшей. Для каждой окружности она нарисовала квадрат со сторонами параллельными осям координат минимальной площади, что окружность полностью лежит внутри этого квадрата. Из такого рисунка Маша сразу увидела, что получившиеся квадраты также не пересекаются, не касаются и не вкладываются.

Теперь Маше-умняше стало интересно, какого минимального радиуса можно провести окружность через две точки, нарисованные братом, чтобы эта окружность не пересекала ни одной из уже нарисованных окружностей. Но уже нарисованные окружности могут быть внутри или касаться окружности, которую хочет нарисовать Маша.

Гарантируется, что ответ не превосходит 1012. Обратите внимание, что для взломов это условие также должно выполняться.

Входные данные

В первой строке даны четыре целых числа x1, y1, x2, y2 ( - 105 ≤ x1, y1, x2, y2 ≤ 105) — координаты точек, нарисованных братом. Первая точка имеет координаты (x1, y1), а вторая (x2, y2). Гарантируется, что точки не совпадают.

Во второй строке дано целое число n (1 ≤ n ≤ 105) — количество окружностей, нарисованных братом.

В следующих n строках записаны три целых числа xi, yi, ri ( - 105 ≤ xi, yi ≤ 105, 1 ≤ ri ≤ 105) описывающие i-ю окружность с центром в точке (xi, yi) и радиусом ri.

Выходные данные

Выведите такое минимальное вещественное число, что возможно провести окружность через заданные точки, не пересекающие заданные окружности.

Ответ будет считаться верным, если его относительная или абсолютная ошибка не превосходит 10 - 4.

Примечание

D. Космические мины

геометрия *2500

Давным-давно в одной далекой-предалекой галактике...

Дарт Вейдер обнаружил месторасположение базы повстанцев. Теперь он собирается уничтожить эту базу (а заодно и всю планету, на которой база находится), при помощи Звезды Смерти.

Узнав о приближении Звезды Смерти, повстанцы решили использовать новое секретное оружие — космические мины. Опишем конструкцию космических мин.

Каждая космическая мина имеет форму шара (его мы будем называть телом мины) некоторого радиуса r с центром в точке O, из которого торчат несколько шипов. Каждый шип можно считать отрезком, соединяющим центр мины с некоторой точкой P, такой, что (большая длина шипа затрудняет транспортировку мин), где |OP| — длина отрезка соединяющего O и P. Точку P удобно задавать вектором p, таким, что P = O + p.

Звезда Смерти имеет форму шара радиуса R (R больше радиуса любой мины). Она движется в постоянной скоростью вдоль вектора v со скоростью |v|. На момент обнаружения повстанцами Звезды Смерти, она располагалась в точке A.

Повстанцы расположили n космических мин на пути Звезды Смерти. Можно считать, что мины неподвижны. Звезда Смерти не знает о существовании мин и не может их обнаружить, поэтому не меняет направление своего движения. Как только Звезда Смерти соприкасается с миной (с ее телом или с одним из ее шипов), мина взрывается и уничтожает Звезду Смерти. Соприкосновением считается ситуация, когда в пространстве существует точка, принадлежащая как мине, так и Звезде Смерти. Считается, что Звезда Смести не уничтожена, если она может лететь бесконечно долго без столкновений с минами.

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

Входные данные

В первой строке входных данных находятся 7 целых чисел Ax, Ay, Az, vx, vy, vz, R — начальное положение Звезды Смерти, направление ее движения, а так же ее радиус ( - 10 ≤ vx, vy, vz ≤ 10, |v| > 0, 0 < R ≤ 100).

Во второй строке находится целое число n — количество мин (1 ≤ n ≤ 100). Далее идут n блоков данных, i-ый из них описывает i-ую мину.

Первая строка каждого блока содержит 5 целых чисел Oix, Oiy, Oiz, ri, mi — координаты центра мины, радиус ее тела и количество шипов (0 < ri < 100, 0 ≤ mi ≤ 10). Далее следуют mi строк, описывающих шипы i-ой мины, где j-ая из них описывает j-ый шип и содержит 3 целых числа pijx, pijy, pijz — координаты вектора, куда данный шип направлен ().

Координаты центров мин и центра Звезды Смерти — целые числа, по абсолютному значению не превосходящие 10000. Гарантируется, что R > ri для любого 1 ≤ i ≤ n. Для любых мин i ≠ j выполняется неравенство . В начальный момент времени Звезда Смерти и мины не имеют общих точек.

Выходные данные

Если повстанцам удастся остановить Звезду Смерти при помощи космических мин — выведите время от начала первого обнаружения Звезды Смерти до взрыва.

Если столкновения Звезды Смерти с минами не произойдет — выведите «-1» (без кавычек).

Для ответа допустима абсолютная или относительная погрешность 10 - 6.

B. Бегущий Студент

геометрия Перебор реализация *1200

И снова несчастье свалилось на голову Бедного Студента. Он опаздывает на экзамен.

Добежав до остановки, которая находится в точке (0, 0), он сел в маршрутку и поехал по прямой, параллельной оси OX, в сторону увеличения координаты x.

Бедный Студент знает следующее:

  • за весь рейс маршрутка делает ровно n остановок, i-ая остановка происходит в точке (xi, 0)
  • координаты всех остановок различны
  • маршрутка едет с постоянной скоростью, равной vb
  • можно предполагать, что посадка и высадка пассажиров на остановках происходит мгновенно
  • Студент может выйти из маршрутки только на остановках
  • Студенту придется выйти из маршрутки на конечной остановке, если он не выйдет раньше
  • университет, в котором будет проводиться экзамен, находится в точке (xu, yu)
  • Студент может бежать от остановки до университета по прямой с постоянной скоростью vs сколь угодно долго
  • расстояние между двумя точками можно считать по формуле:
  • Студент уже едет в маршрутке, поэтому выйти на первой остановке он не может

Бедный Студент хочет добраться до университета как можно быстрее. Помогите ему выбрать остановку, на которой нужно выходить. Если таких остановок несколько, то выберите ту, от которой расстояние до университета наименьшее.

Входные данные

В первой строке даны три целых числа: 2 ≤ n ≤ 100, 1 ≤ vb, vs ≤ 1000. Во второй строке даны n неотрицательных целых чисел в порядке возрастания: координаты xi остановки номер i. Гарантируется, что x1 равно нулю, а xn ≤ 105. В третьей строке даны координаты университета, целые числа xu и yu, по модулю не превышающие 105.

Выходные данные

В единственной строке выведите ответ на задачу — номер оптимальной остановки.

Примечание

Как известно, студенты — люди особые, а маршрутки, обычно, никуда не спешат. Поэтому не нужно удивляться, если скорость студента будет больше или равна скорости маршрутки.

A. Найдите лишнего

геометрия реализация *800

Вам дано n различных точек на плоскости, ни одна из них не лежит на оси OY. Проверьте, что существует точка, после удаления которой все оставшиеся точки будут лежать по одну сторону от оси OY.

Входные данные

В первой строке следует целое положительное число n (2 ≤ n ≤ 105).

Далее следуют n строк, в i-й из которых записаны два целых числа xi и yi (|xi|, |yi| ≤ 109, xi ≠ 0) — координаты очередной точки. Никакие две точки не совпадают.

Выходные данные

Выведите «Yes», если существует искомая точка, «No» — иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом примере можно удалить вторую точку.

Во втором примере не существует точки, подходящей под условие.

В третьем примере можно удалить любую точку.

C. Новый год и керлинг

геометрия математика Перебор реализация *1500

Кэрол играет в керлинг.

У нее есть n дисков радиуса r на плоскости.

Изначально все диски находятся выше линии y = 10100.

Кэрол пускает диски по направлению к прямой y = 0 по одному в порядке от 1 до n.

Когда она пускает i-й диск, она ставит его центр в точку (xi, 10100), а затем толкает его так, что его y координата начинает уменьшаться, а координата x остается постоянной. Диск останавливается, когда он касается прямой y = 0 или любого предыдущего диска. Обратите внимание, как только диск остановился, он больше не двигается, даже от удара следующих дисков.

Вычислите координату y центров всех дисков после того, как они остановятся.

Входные данные

Первая строка содержит два целых числа n и r (1 ≤ n, r ≤ 1 000) — количество дисков и радиус каждого диска, соответственно.

Следующая строка содержит n целых чисел x1, x2, ..., xn (1 ≤ xi ≤ 1 000) — x-координаты дисков.

Выходные данные

Выведите единственную строку с n числами. i-е из этих чисел должно быть равно итоговой y-координате центра i-го диска. Ваш ответ будет зачтен, если его абсолютная или относительная ошибка не превосходит 10 - 6.

А именно, пусть ваш ответ для определенного диска равен a, а ответ жюри — b. Ваш ответ будет зачтен, если для всех дисков.

Примечание

В первом примере конечные позиции дисков показаны на рисунке:

В частности, обратите внимание на положение последнего диска.

E. Иглу-небоскреб

геометрия Структуры данных *2500

Сегодня на северном полюсе олимпиада по спортивному... строительству игрушечных иглу-небоскребов!

В соревновании принимают участие n моржей. Каждому моржу выдан уникальный номер от 1 до n. После старта каждый морж начинает строить свой собственный иглу-небоскреб. Изначально, в момент времени 0, высота небоскреба i-ого моржа равна ai. Каждую минуту i-ый морж достраивает bi этажей.

Журналисты, ведущие репортаж с места проведения олимпиады, делают q запросов организаторам. Каждый запрос характеризуется тройкой чисел li, ri, ti. На каждый запрос организаторы отвечают одним числом x, таким, что:

1. Число x лежит в диапазоне от li до ri включительно (li ≤ x ≤ ri).

2. Небоскреб моржа с номером x имеет наибольшую высоту среди небоскребов всех моржей из этого диапазона [li, ri] в момент времени ti.

На каждый запрос журналистов выведите номер моржа x, удовлетворяющего критериям выше. Если возможных ответов несколько, то выведите любой.

Входные данные

В первой строке содержатся числа n и q (1 ≤ n, q ≤ 105). В следующих n строках идут пары чисел ai, bi (1 ≤ ai, bi ≤ 109). Далее идут q запросов вида li, ri, ti по одному в каждой строке (1 ≤ li ≤ ri ≤ n, 0 ≤ ti ≤ 106). Все числа на входе целые.

Выходные данные

На каждый запрос журналистов выведите номер моржа x, удовлетворяющего критериям из условия, по одному в строке.

F. Сбежать через лист

геометрия дп Структуры данных *2700

Дано дерево на n вершинах (пронумерованных от 1 до n) с корнем в вершине 1. В вершине i записаны два числа: ai и bi.

Вы можете прыгнуть из вершины в любую вершину в её поддереве. Стоимость такого прыжка из вершины x в вершину y равна произведению ax и by. Суммарная стоимость пути между вершинами, состоящего из нескольких прыжков равна сумме стоимостей прыжков в нём. Для каждой вершины посчитайте минимальную стоимость пути от неё до какого-либо листа. Обратите внимание, что корень дерева не является листом, даже если имеет степень 1.

Учтите, что нельзя совершать прыжок из вершины в ту же вершину.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 105) — количество вершин в дереве.

Во второй строке через пробел заданы n целых чисел a1,  a2,  ...,  an( - 105  ≤  ai  ≤  105).

Во третьей строке через пробел заданы n целых чисел b1,  b2,  ...,  bn( - 105  ≤  bi  ≤  105).

В следующих n  -  1 строках содержатся пары целых чисел ui и vi (1 ≤ ui,  vi ≤  n), разделённых пробелом, обозначающие ребро между вершинами ui и vi в дереве.

Выходные данные

Выведите n целых чисел через пробел, i-е из которых обозначает минимальную стоимость, чтобы добраться от вершины с номером i до какого-либо листа.

Примечание

В первом тестовом примере вершина 3 сама является листом, поэтому ответ равен 0. Для вершины 2 прыжок в вершину 3 стоит a2 × b3 = 50. Для вершины 1 прыжок в вершину 3 стоит a1 × b3 = 10.

Во втором тестовом примере вершины 3 и 4 являются листьями, поэтому ответ для них равен 0. Для вершины 2 прыжок в вершину 4 стоит a2 × b4 = 100. Для вершины 1 необходимо сначала прыгнуть в вершину 2 прыжком стоимостью a1 × b2 =  - 400, а затем прыгнуть из 2 в 4 за a2 × b4 = 100.

C. Цветное зрелище

геометрия графы *2700

Хлопушки отпугивают монстра Ниана, но они уж о-очень шумные! Возможно, фейерверк — приятное дополнение к хлопушкам.

Маленький Томми наблюдает за фейерверком. На небе появляется множество кругов, и ночью на Китайский Новый год на небе можно наблюдать захватывающее зрелище.

Внезапно Томми задумался. На сколько регионов эти круги разделили небо? Мы будем считать, что небо можно представить как плоскость. Регион — это часть плоскости с положительной площадью, граница которой составлена из границ кругов и является кривой или несколькими кривыми без самопересечений, не содержащая границ кругов строго внутри себя. Обратите внимание, ровно один регион обладает бесконечной площадью.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 3) — число кругов.

Каждая из n следующих строк содержит три целых числа x, y и r ( - 10 ≤ x, y ≤ 10, 1 ≤ r ≤ 10), описывающие круг, центр которого находится в точке (x, y), а его радиус равен r. Никакие два круга не имеют совпадающие x, y и r одновременно.

Выходные данные

Выведите одно целое число — количество частей на плоскости.

Примечание

Первый пример:

Второй пример:

Третий пример:

C. Фифа и Фафа

геометрия *1600

Фифа и Фафа живут в одной квартире. Фифа любит компьютерные игры и хочет скачать одну новую игру про футбол. К сожалению, Фафа уже израсходовал всю их месячную квоту интернета, однако, Фифа может подключиться к интернету через свою Wi-Fi точку доступа. К точке доступа можно подключиться в некотором радиусе r метров от места ее установки, Фифа может выбирать этот радиус. Фифа должен поставить точку доступа внутри квартиры, которая имеет круглую форму радиуса R. Фифа хочет минимизировать площади квартиры, из которой нельзя подключиться к точке доступа, при этом он не хочет, чтобы Фафа или кто-либо снаружи квартиры смог подключиться к точке доступа.

Мир можно представить как бесконечную плоскость. Центр квартиры расположен в точке (x1, y1), квартира имеет радиус R, ноутбук Фафы расположен в точке (x2, y2), не обязательно внутри квартиры. Можно представлять ноутбук Фафы как точку. Найдите точку установки и радиус, которые должен выбрать Фифа для своей точки доступа, чтобы минимизировать непокрытую площадь квартиры.

Входные данные

Единственная строка содержит пять целых чисел R, x1, y1, x2, y2 (1 ≤ R ≤ 105, |x1|, |y1|, |x2|, |y2| ≤ 105).

Выходные данные

Выведите три числа xap, yap, r где (xap, yap) — точка, в которую Фифа должен поставить точку доступа, а r — ее радиус действия.

Ваш ответ будет считаться правильным, если радиус отличается от оптимального не более, чем на 10 - 6 абсолютно или относительно, и радиус может быть изменен не более, чем на 10 - 6 (абсолютно или относительно) так, что все точки снаружи квартиры, а также позиция ноутбука Фафы окажутся снаружи области действия точки доступа.

E1. Guard Duty (easy)

геометрия жадные алгоритмы математика Перебор *1600

The Rebel fleet is afraid that the Empire might want to strike back again. Princess Heidi needs to know if it is possible to assign R Rebel spaceships to guard B bases so that every base has exactly one guardian and each spaceship has exactly one assigned base (in other words, the assignment is a perfect matching). Since she knows how reckless her pilots are, she wants to be sure that any two (straight) paths – from a base to its assigned spaceship – do not intersect in the galaxy plane (that is, in 2D), and so there is no risk of collision.

Input

The first line contains two space-separated integers R, B(1 ≤ R, B ≤ 10). For 1 ≤ i ≤ R, the i + 1-th line contains two space-separated integers xi and yi (|xi|, |yi| ≤ 10000) denoting the coordinates of the i-th Rebel spaceship. The following B lines have the same format, denoting the position of bases. It is guaranteed that no two points coincide and that no three points are on the same line.

Output

If it is possible to connect Rebel spaceships and bases so as satisfy the constraint, output Yes, otherwise output No (without quote).

Note

For the first example, one possible way is to connect the Rebels and bases in order.

For the second example, there is no perfect matching between Rebels and bases.

E3. Guard Duty (hard)

геометрия *2700

Now that Heidi knows that she can assign Rebel spaceships to bases (recall the easy subtask), she is asking you: how exactly to do this? Now, given positions of N spaceships and N bases on a plane, your task is to connect spaceships and bases with line segments so that:

  • The segments do not intersect.
  • Such a connection forms a perfect matching.
Input

The first line contains an integer N (1 ≤ n ≤ 10000). For 1 ≤ i ≤ N, the i + 1-th line contains two integers xi and yi (|xi|, |yi| ≤ 10000) denoting the coordinates of the i-th spaceship. The following N lines have the same format, denoting the position of bases. It is guaranteed that no two points coincide and no three points are on the same line.

Output

The output should have N lines. The i-th line should contain an integer pi, the index of the base to which the i-th spaceship is connected. The sequence p1, ..., pN should form a permutation of 1, ..., N.

It is guaranteed that a solution exists. If there are multiple solutions, you can output any one of them.

D. Пара прямых

геометрия *2000

Задано n точек на плоскости, все точки имеют целочисленные координаты. Все точки различны.

Необходимо узнать, существуют ли две такие прямые, что каждая из заданных точек принадлежит хотя бы одной из них. Прямые могут совпадать.

Входные данные

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

Далее в n строках заданы по два целых числа xi и yi (|xi|, |yi| ≤ 109)— координаты i-й точки. Все n точек различны.

Выходные данные

Если возможно провести две прямые так, что каждая точка лежит хотя бы на одной из них, то выведите YES, иначе NO.

Примечание

В первом примере можно провести две прямые так, что первая проходит через точки под номерами 1, 3 и 5, а вторая — через две оставшиеся точки.

G. Видимые черные области

геометрия Деревья снм Структуры данных *2800

У Пети есть многоугольник, состоящий из \(n\) вершин.

Все стороны многоугольника Пети параллельны осям координат, а каждые две смежные стороны многоугольника Пети — перпендикулярны. Гарантируется, что многоугольник простой, то есть не имеет самопересечений и самокасаний. Вся внутренняя часть (границы не учитываются) многоугольника была покрашена Петей в черный цвет.

Также у Пети есть прямоугольное окно, заданное своими координатами, через которое он смотрит на свой многоугольник. Прямоугольное окно задается своими координатами и не может быть перемещено. Стороны прямоугольного окна параллельны осям координат.

Синим цветом изображена граница многоугольника, красным — окно. Ответ в этом случае равен 2.

Определите количество черных связных областей многоугольника Пети, которые можно увидеть через прямоугольное окно.

Входные данные

В первой строке следуют четыре целых числа \(x_1, y_1, x_2, y_2\) (\(x_1 < x_2\), \(y_2 < y_1\)) — координаты левого верхнего и правого нижнего углов прямоугольного окна.

Во второй строке следует целое число \(n\) (\(4 \le n \le 15\,000\)) — количество вершин в многоугольнике Пети.

В каждой из следующих \(n\) строк следуют по два целых числа — координаты вершин многоугольника Пети в порядке обхода против часовой стрелки. Гарантируется, что заданный многоугольник удовлетворяет условию.

Значения всех координат прямоугольного окна и всех координат многоугольника неотрицательны и не превосходят \(15\,000\).

Выходные данные

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

Примечание

Пример из условия соответствует картинке выше.

D. Призраки

геометрия математика *2000

Призраки «живут» в мире и гармонии, путешествуя сквозь пространство с одной лишь целью — пугать тех, кто находится у них на пути.

Во вселенной \(n\) призраков. Они двигаются в плоскости \(OXY\) с постоянной скоростью каждый: \(\overrightarrow{V} = V_{x}\overrightarrow{i} + V_{y}\overrightarrow{j}\), где \(V_{x}\) — скорость призрака в проекции на ось \(x\), а \(V_{y}\) — в проекции на ось \(y\).

Призрак \(i\) обладает опытом \(EX_i\), равным числу раз, которое он был испуган другими призраками в прошлом. Два призрака пугают друг друга, если они находятся в одной точке на плоскости в один момент времени.

Из-за того, что скорости призраков постоянны, после какого-то момента времени призраки больше не будут пугать друг друга (какое облегчение!). Тогда суммарный опыт призраков \(GX = \sum_{i=1}^{n} EX_i\) перестанет увеличиваться.

Красный гигант Тамим сфотографировал декартову плоскость в момент времени \(T\), и волшебным образом все призраки на фотографии находились на прямой \(y = a \cdot x + b\). Вам необходимо выяснить, чему будет равен суммарный опыт призраков \(GX\) после того, как он перестанет увеличиваться.

Обратите внимание, в момент времени, когда Тамим сделал фотографию, опыт \(GX\) может уже быть больше \(0\), так как призраки могли пугать друг друга в моменты времени в интервале \([-\infty, T]\).

Входные данные

В первой строке содержится три целых числа \(n\), \(a\) и \(b\) (\(1 \leq n \leq 200000\), \(1 \leq |a| \leq 10^9\), \(0 \le |b| \le 10^9\)) — число призраков во вселенной и параметры прямой.

В каждой из следующих \(n\) строк содержится по три целых числа \(x_i\), \(V_{xi}\), \(V_{yi}\) ( \(-10^9 \leq x_i \leq 10^9\), \(-10^9 \leq V_{x i}, V_{y i} \leq 10^9\)), где \(x_i\) — текущая \(x\)-координата \(i\)-го призрака (при этом \(y_i = a \cdot x_i + b\)).

Гарантируется, что никакие два призрака не находятся в одной точке (другими словами, гарантируется, что для всех \((i,j)\) \(x_i \neq x_j\) при \(i \ne j\).

Выходные данные

Выведите одно число полный опыт всех призраков \(GX\) в бесконечном будущем.

Примечание

В первом примере есть четыре встречи \((1,2,T-0.5)\), \((1,3,T-1)\), \((2,4,T+1)\), \((3,4,T+0.5)\), где \((u,v,t)\) означает встречу между призраками \(u\) и \(v\) в момент времени \(t\). В момент каждой встречи оба встречающихся призрака получают по единице опыта, поэтому \(GX = 4 \cdot 2 = 8\).

В втором примере, все призраки встретятся в момент времени \(t = T + 1\).

Красная стрелка обозначает скорость первого призрака, оранжевая — второго, а синяя — третьего.

E. Хашба Хэга

геометрия *2600

Хэг — очень талантливый человек. В нём всегда была жилка художника, но его отец заставил его заниматься машиностроением. Вчера Хэг потратил весь свой день, вырезая гуся из гигантского куска дерева. К сожалению, его отец узнал, что Хэг занимается искусством вместо штудирования механики и прочих скучных предметов. Он обвинил Хэга в том, что он не заботится о своём будущем и пригрозил, что если он продолжит занимать искусством, он перестанет давать ему 25 лир в месяц.

Хэг пытается доказать своему отцу, что этот кусок дерева на самом деле был проектом для курса механики. Он также сообщил ему, что этот кусок является строго выпуклым многоугольником с \(n\) вершинами.

Хэг принёс две кнопки и прикрепил деревянный многоугольник к стене за \(1\)-ю и \(2\)-ю вершины. У отца есть \(q\) запросов для Хэга двух типов.

  1. \(1\) \(f\) \(t\). Этот запрос означает, что Хэг вынимает кнопку из вершины \(f\), ждёт когда многоугольник повернётся (если он повернётся) и остановится, после чего он прикрепляет вершину \(t\) к стене кнопкой.
  2. \(2\) \(v\). Этот запрос означает, что Хэг должен ответить, каковы координаты вершины \(v\).

Помогите Хэгу ответить на запросы его отца.

Вы можете считать, что дерево, из которого сделан многоугольник, обладает одинаковой положительной плотностью во всех точках. Также известно, что после каждого запроса первого типа отец Хэга немного шевелит многоугольник и смотрит на повторное установление его равновесия.

Входные данные

В первой строке содержится два целых числа \(n\) и \(q\) (\(3\leq n \leq 10\,000\), \(1 \leq q \leq 200000\)) — число вершин в многоугольнике и число запросов.

Следующие \(n\) строк содержат описание деревянного многоугольника, \(i\)-я из которых содержит два целых числа \(x_i\) и \(y_i\) (\(|x_i|, |y_i|\leq 10^8\)) — координаты \(i\)-й вершины многоугольника. Гарантируется, что многоугольник строго выпуклый, вершины заданы в порядке против часовой стрелки и различны.

В следующих \(q\) строках содержатся запросы, по одному на строку. Каждый запрос начинается с его типа — \(1\) или \(2\). Каждый запрос первого типа продолжается двумя целыми числами \(f\) и \(t\) (\(1 \le f, t \le n\)) — вершина, из которой убирается кнопка, и вершина, в которую вставляется кнопка после того, как вращение заканчивается. Гарантируется, что в вершине \(f\) есть кнопка. Каждый запрос второго типа продолжается одним целым числом \(v\) (\(1 \le v \le n\)) — номером вершины, координаты которой Хэг должен сообщить своему отцу.

Гарантируется, что существует хотя бы один запрос второго типа.

Выходные данные

На каждый запрос второго типа выведите ответ — два числа в отдельной строке. Ваш ответ будет засчитан, если его относительная или абсолютная ошибка не превышает \(10^{-4}\).

Формально, пусть ваш ответ — \(a\), а ответ жюри — \(b\). Ваш ответ считается верным, если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-4}\).

Примечание

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

Красный треугольник обозначает начальное состояние, а зелёный — треугольник после поворота вокруг \((2,0)\).

Во втором примере заметьте, что многоугольник поворачивается на \(180\) градусов против или по часовой стрелки (не важно, куда), поскольку отец Хэга удостоверяется, что многоугольник устойчив и его сын не обманывает его.

C. Помогите Гному Грише

геометрия Тернарный поиск *2500

В Тридевятом царстве — Тридесятом государстве живет один очень необычный обитатель — Дварф (а на Руси — просто Гном) Гракула. Однако необычное имя — не главная его странность (тем более, что местные жители с незапамятных времен кличут его Гномом Гришей). Главные странности состоят в том, что живет Гном Гриша уже более 200 лет, причем живет он в склепе на заброшенном кладбище, и днем его еще никто ни разу не видел. Так же точно, как никто не видел, что Гном Гриша покупает себе еду. Поэтому никто особо не удивился, когда после трагической гибели Змея Горыныча с лугов не перестал пропадать скот — местные жители давно были убеждены, что причина пропаж — совсем не безобидный Горыныч, который давно признавался, что склонен к вегетарианству. Но самое плохое во всей этой истории даже не это.

Самое плохое то, что буквально несколько минут назад Гном Гриша каким-то непостижимым образом оказался у вас дома, и попросил помощи в разрешении одного вопроса. Дело в том, что совсем недавно Гриша решил заказать себе новый гроб (зная его странности, эта новость вас ничуть не удивила). Но вот незадача — в Гришин склеп ведет очень длинный в обоих направлениях Г-образный коридор, через который удастся пронести не любой гроб. Поэтому он и обратился за помощью к вам.

Вы формализовали задачу на плоскости следующим образом: пусть ширина коридора до и после поворота равна соответственно a и b (см. рисунок), коридор поворачивает строго под прямым углом, гроб суть прямоугольник с длиной и шириной соответственно l и w (l ≥ w). Гном Гриша уже определил длину гроба (l), исходя из своего роста, ваша задача — определить максимально возможную ширину гроба (w), при которой его можно будет внести в склеп. При этом в силу большой массы (чистый мрамор!) гроб оснащен вращающимися колесиками, поэтому его невозможно оторвать от земли, однако он может совершать произвольные перемещения и вращения в рассматриваемой плоскости. Гроб разрешено развернуть произвольным образом и до внесения в склеп и перемещения по коридору.

Гриша пообещал, что если вы поможете ему — он наградит вас бессмертием (интересно, как?), а если нет — то лучше вам не знать, что произойдет...

Входные данные

В первой строке через пробел записаны три целых числа a, b и l из условия задачи (1 ≤ a, b, l ≤ 104).

Выходные данные

Выведите максимально возможную ширину гроба с абсолютной или относительной погрешностью не более 10 - 7, либо сообщение «My poor head =(» (без кавычек), если никакого гроба с заданной длиной и положительной шириной, удовлетворяющего условию задачи, не существует.

Гарантируется, что в случае наличия положительного ответа он окажется не меньше 10 - 7. Все взломы также будут проверяться на соответствие этому условию.

Примечание

В первом примере ответ к задаче ограничен длиной гроба (вспомните — ширина гроба должна быть не больше его длины).

Во втором примере гроб возможно пронести через коридор благодаря вращающимся колесикам: сначала двигаем его одной стороной вперед до тех пор, пока гроб не упрется в стену, затем двигаем перпендикулярно первоначальному направлению движения соседней стороной вперед (вспомните — возможны произвольные перемещения и вращения гроба в плоскости).

E. Бильярд

геометрия теория чисел *2600

Представьте себе бильярдный стол размера \(n \times m\) с четырьмя лузами в углах. Введем систему координат относительно левого нижнего угла стола (см. картинку).

На столе один шар, который стоит в точке с координатами \((x, y)\). В один момент к столу подошел Макс, ярый любитель бильярда, и ударил по шару. Оказалось, что шар начал двигаться по прямой, которая либо параллельна осям координат, либо образует с ними угол в \(45^{\circ}\). Будем считать, что:

  1. углы, которые траектория шара образует со стенкой до и после соударения, равны,
  2. шар двигается бесконечно долго, пока не попадет ни в какую лузу,
  3. шар можно представить точкой, он попадает в лузу, только если его координаты точно совпадают с координатами какой-то лузы,
  4. в начальный момент времени шар не находится в лузе.

Обратите внимание, шар может катиться вдоль какой-то стенки, в таком случае считается, что соударений со стенкой не происходит, и шар в итоге попадет в лузу в конце стенки.

Ваша задача — определить попадет ли шар когда-либо в лузу, и если да, то в какую.

Входные данные

В единственной строке входных данных даны \(6\) целых чисел: \(n\), \(m\), \(x\), \(y\), \(v_x\), \(v_y\) (\(1 \leq n, m \leq 10^9\), \(0 \leq x \leq n\); \(0 \leq y \leq m\); \(-1 \leq v_x, v_y \leq 1\); \((v_x, v_y) \neq (0, 0)\)) — ширина стола, длина стола, \(x\)-координата начального положения шара, \(y\)-координата начального положения шара, \(x\)-компонента начальной скорости шара и \(y\)-компонента начальной скорости шара, соответственно. Гарантируется, что изначально шар не находится в лузе.

Выходные данные

Выведите координаты лузы, в которую попадет шар, или \(-1\), если такого не произойдет.

Примечание

Первый тест:

Второй тест:

В третьем тестовом примере \(y\) координата не меняется, соответственно шар не попадет в лузу.

D. Лунная тень

Бинарный поиск геометрия математика сортировки *2500

Сумерки охватывают леса и весь мир. Реку и лодку освещает луна.

— Сложно возможно затмить свет луны. Тени лишь раскрывают ее красоту и мягкость, — пропел Мино.

— Видишь? Облака, — сказал Канно, вглядываясь вдаль.

— Не может быть ничего лучше, — обернулся Мино к Канно.

Представим небо как координатную ось. Луна находится в начале координат, то есть в точке с координатой \(0\).

В небе есть \(n\) облаков. Все облака имеют одинаковую длину \(l\). \(i\)-е облако изначально покрывает отрезок \((x_i, x_i + l)\) (не включая границы). Изначально облако двигается со скоростью \(v_i\), которая равна либо \(1\), либо \(-1\).

Изначально никакие два облака не пересекаются, то есть для всех \(1 \leq i \lt j \leq n\) выполняется \(\lvert x_i - x_j \rvert \geq l\).

Если скорость ветра равна \(w\), то скорость \(i\)-го облака станет равна \(v_i + w\), то есть его координаты будут увеличиваться на \(v_i + w\) за единицу времени. Обратите внимание, ветер может быть достаточно сильным и направления движения облаков могут изменяться.

Помогите Мино, подсчитайте число пар \((i, j)\) (\(i < j\)) таких, что существует такая скорость ветра \(w\), не превышающая \(w_\mathrm{max}\) по модулю (возможно, отрицательная и/или вещественная) такая, что \(i\)-е и \(j\)-е облака в какой-то момент будут оба закрывать луну. Скорость ветра \(w\) может быть различной для различных пар.

Входные данные

Первая строка содержит три целых числа \(n\), \(l\) и \(w_\mathrm{max}\) (\(1 \leq n \leq 10^5\), \(1 \leq l, w_\mathrm{max} \leq 10^8\)) — количество облаков, длина каждого облака и максимально возможная скорость ветра, соответственно.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(v_i\) (\(-10^8 \leq x_i \leq 10^8\), \(v_i \in \{-1, 1\}\)) — начальная позиция и скорость \(i\)-го облака, соответственно.

Гарантируется, что для всех \(1 \leq i \lt j \leq n\) выполняется \(\lvert x_i - x_j \rvert \geq l\).

Выходные данные

Выведите одно целое число — количество неупорядоченных пар облаков таких, что они могут закрыть луну в один и тот же момент при некотором выборе скорости ветра \(w\).

Примечание

В первом примере начальные позиции и скорости облаков проиллюстрированы на рисунке ниже.

Пары облаков, которые могут одновременно закрыть луну:

  • \((1, 3)\) закроют луну в момент времени \(2.5\) при \(w = -0.4\);
  • \((1, 4)\) закроют луну в момент времени \(3.5\) при \(w = -0.6\);
  • \((1, 5)\) закроют луну в момент времени \(4.5\) при \(w = -0.7\);
  • \((2, 5)\) закроют луну в момент времени \(2.5\) при \(w = -2\).

На рисунке ниже приведены положения облаков в момент времени \(2.5\) при скорости ветра \(w = -0.4\). В этот момент \(1\)-е и \(3\)-е облака оба закрывают луну.

Во втором примере только пара \((1, 4)\) закроют луну в момент времени \(15\) при скорости ветра \(w = 0\).

Обратите внимание, что все времена и скорости ветра в примечании даны для примера, на самом деле существует бесконечное число способов выбрать их.

E. Ночной транс

геометрия дп матрицы Теория вероятностей *2700

Под легким прохладным бризом на воде появляется рябь.

— Вода приходит и уходит, но не исчезает насовсем. Луна убывает и прибывает, но остается того же размера.

— Все приходящее. Все также вечно.

Канно не видит большого смысла в словах Мино, но, наверное, сейчас стоит просто насладиться легким бризом и ночным небом — неиссякаемыми дарами природы.

Глядя в звездное небо, Канно погружается в спокойный сон.

На плоскости отмечено множество \(S\) из \(n\) точек.

Канно начинает из некоторой точки плоскости \(P\), которою может выбрать самостоятельно. \(P\) не добавляется в \(S\), если, конечно, изначально не принадлежит \(S\). Затем следующая последовательность операций (вместе называющихся шагом) повторяется несколько раз:

  1. Выбирается прямая \(l\) такая, что она проходит через как минимум две точки из \(S\) и через текущую позицию Канно. Если таких прямых несколько, из них с равной вероятностью выбирается одна.
  2. Канно переходит в одну из точек из множества \(S\) на прямой \(l\). Точка назначения выбирается равновероятно из всех возможных, включая текущую позицию Канно, если она, конечно, принадлежит \(S\).

Вам даны \(q\) запросов, каждый из них состоит из двух целых чисел \((t_i, m_i)\). Для каждого запроса выведите максимально возможную вероятность для Канно оказаться в \(t_i\)-й точке множества \(S\) после \(m_i\) шагов при выборе оптимальной стартовой точки \(P\). Обратите внимание, в соответствии с правилом 1 \(P\) должна принадлежать как минимум одной прямой, которая проходит через две точки из \(S\).

Входные данные

Первая строка содержит одно целое положительное число \(n\) (\(2 \leq n \leq 200\)) — количество точек в \(S\).

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^4 \leq x_i, y_i \leq 10^4\)) — координаты \(i\)-й точки множества \(S\). Гарантируется, что для всех \(1 \leq i \lt j \leq n\) выполняется \((x_i, y_i) \neq (x_j, y_j)\).

Следующая строка содержит одно целое число \(q\) (\(1 \leq q \leq 200\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(t\) и \(m\) (\(1 \leq t_i \leq n\), \(1 \leq m_i \leq 10^4\)) — номер точки финиша и количество шагов, соответственно.

Выходные данные

Выведите \(q\) строк, каждая из которых содержит одно вещественное число. \(i\)-е из этих чисел должно быть равно максимально возможной вероятности оказаться в точке \(t_i\) после \(m_i\) шагов при оптимальном выборе начальной точки \(P\).

Ваш ответ будет считаться правильным, если каждое из чисел, выведенных вами, отличается от ответа жюри не более чем на \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(|a - b| \le 10^{-6}\).

Примечание

Точки множества \(S\) и все возможные прямые \(l\) показаны на рисунке ниже.

В первом примере если выбрать точку \(P = (-1, -3)\), то в качестве \(l\) будет обязательно выбрана точка \(3x = y\), поэтому Канно переместится в \((0, 0)\) с вероятностью \(\frac 1 2\).

В третьем запросе если выбрать точку \(P = (2, 2)\), то \(l\) будет выбрана с равной вероятностью между \(x + y = 4\) и \(x = y\). Тогда Канно переместится в остальные четыре точки с вероятностью \(\frac 1 2 \cdot \frac 1 3 = \frac 1 6\) для каждой точки, и останется в \((2, 2)\) с вероятностью \(\frac 1 3\).

A. Два квадрата

геометрия реализация *1600

Вам даны два квадрата: один со сторонами параллельными осям координат, и один со сторонами под углом 45 градусов к осям координат. Определите, пересекаются ли квадраты.

Внутренность квадрата считается его частью, иными словами, если один квадрат находится целиком внутри другого квадрата, они пересекаются. Если у квадратов одна общая точка, они также пересекаются.

Входные данные

Входные данные состоят из двух строк, по одной на квадрат, в каждой по четыре пары целых чисел. Каждая пара чисел задает координаты одной вершины квадрата. Координаты для каждого квадрата даны в порядке обхода по или против часовой стрелки.

Первая строка содержит координаты вершин квадрата, у которого стороны параллельны осям координат, вторая строка — у которого стороны образуют с осями координат угол 45 градусов.

Все числа во входных данных целые и лежат в интервале между \(-100\) и \(100\).

Выходные данные

Выведите «Yes», если квадраты пересекаются, иначе выведите «No».

Вы можете выводить каждую из букв в любом регистре (строчную или заглавную).

Примечание

В первом примере второй квадрат лежит целиком внутри первого, что по условию является пересечением.

Во втором примере два квадрата не имеют общих точек.

Картинки, иллюстрирующие примеры:

C. Аккуратное маневрирование

битмаски геометрия Перебор *2100

Два небольших космических корабля окружены двумя группами вражеских больших космических кораблей. Все происходит на плоскости, и одна группа вражеских кораблей расположена так, что все \(y\)-координаты их кораблей целочисленные, а \(x\)-координаты равны \(-100\), в то время как у второй группы вражеских кораблей тоже \(y\)-координаты целочисленны, но их \(x\)-координаты равны \(100\).

Каждый корабль в обеих группах одновременно сделает два выстрела из лазера (такой выстрел – это бесконечный луч, который уничтожает любой корабль на своем пути): по одному точно в направлении каждого маленького космического корабля. Все выстрелы будут сделаны одновременно. Маленькие космические корабли смогут легко увернуться от этих выстрелов, и сейчас хотят расположить себя в каких-то позициях с \(x=0\) (и не обязательно целыми \(y\)), чтобы эти лучи уничтожили как можно больше вражеских кораблей. Найдите максимальное количество вражеских кораблей, которые можно так уничтожить, считая, что вражеские корабли не смогут увернуться.

Входные данные

В первой строке находятся два целых числа \(n\) и \(m\) (\(1 \le n, m \le 60\)) — количество вражеских кораблей группе с \(x = -100\) и количество вражеских кораблей в группе c \(x = 100\), соответственно.

Вторая строка содержит \(n\) целых чисел \(y_{1,1}, y_{1,2}, \ldots, y_{1,n}\) (\(|y_{1,i}| \le 10\,000\)) — \(y\)-координаты кораблей в первой группе.

Третья строка содержит \(m\) целых чисел \(y_{2,1}, y_{2,2}, \ldots, y_{2,m}\) (\(|y_{2,i}| \le 10\,000\)) — \(y\)-координаты кораблей во второй группе.

\(y\)-координаты не обязательно уникальны, даже в пределах одной группы.

Выходные данные

Выведите одно число — максимальное количество вражеских кораблей, которое можно уничтожить.

Примечание

В первом примере один корабль может расположиться в \((0, 2)\), а второй – в \((0, 7)\). Так все корабли в первой группе и \(6\) из \(9\) кораблей во второй группе будут уничтожены.

Во втором примере один корабль может расположиться в \((0, 3)\), а второй – в любом месте, этого будет достаточно, чтобы уничтожить все вражеские корабли.

C. Из бара домой

геометрия жадные алгоритмы математика Перебор сортировки Структуры данных *2300

Для вектора \(\vec{v} = (x, y)\), определим длину \(|v| = \sqrt{x^2 + y^2}\).

Аллен немного перебрал в баре, который находится в начале координат. Существуют \(n\) векторов \(\vec{v_1}, \vec{v_2}, \cdots, \vec{v_n}\). Аллен сделает \(n\) шагов. Так как Аллен дезориентирован, на \(i\)-м шаге он либо сделает шаг на вектор \(\vec{v_i}\), либо на вектор \(-\vec{v_i}\). Другими словами, если его позиция сейчас равна \(p = (x, y)\), то он окажется либо в \(p + \vec{v_i}\), либо в \(p - \vec{v_i}\).

Аллен не хочет уйти далеко от дома (он также находится в баре). Помогите ему найти последовательность шагов (последовательность знаков векторов) такую, чтобы его финальная позиция \(p\) удовлетворяла ограничению \(|p| \le 1.5 \cdot 10^6\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество шагов.

В каждой из следующих строк содержится два целых числа \(x_i\) и \(y_i\), описывающих вектор \(\vec{v_i} = (x_i, y_i)\). Гарантируется, что \(|v_i| \le 10^6\) выполняется для всех \(i\).

Выходные данные

Выведите единственною строку, содержащую \(n\) целых чисел \(c_1, c_2, \cdots, c_n\), каждое из которых равно либо \(1\), либо \(-1\). Ваше решение будет зачтено, если финальная позиция \(p = \sum_{i = 1}^n c_i \vec{v_i}\) удовлетворяет \(|p| \le 1.5 \cdot 10^6\).

Можно показать, что решение всегда существует при данных ограничениях.

21653

геометрия

Какой вид графики основан на математических началах?

1. фрактальная
2. векторная
3. оба вида графики
4. никакой из перечисленных

Fencing the Herd

геометрия

Фермер Джон нуждается в Вашей помощи. Он решил построить изгородь в форме прямой, чтобы ограничить движение своих коров. Он рассматривает несколько вариантов размещения изгороди и с Вашей помощью хочет определить наиболее подходящий. Подходящим считается вариант, когда все коровы находятся по одну сторону изгороди. Изгородь не считается подходящей, если хоть одна корова расположена на изгороди. ФД будет задавать Вам вопросы про варианты изгороди, на которые Вы должны отвечать YES, если изгородь подходит и NO, в противном случае.

Кроме того, ФД может добавить новых коров в стадо. С того момента, как корова добавлена, она должна быть по одну сторону от изгороди со всеми другими коровами.

Формат входных данных

Первая строка ввода содержит N (1 <= N <= 100,000) and Q (1 <= Q <= 100,000) разделённые одним пробелом. Это, соответственно, начальное количество коров в стаде и количество запросов.

Следующие N строк описывают начальное положение стада. Каждая строка содержит два целых числа x и y (разделённые пробелом), представляющие позицию очередной коровы.

Оставшиеся Q строк содержат запросы, либо добавляющие новую корову в стадо, либо проверяющие изгородь на применимость. Строка вида 1 x y означает, что новая корова добавляется в стадо на позицию x y. Строка вида 2 A B C означает, что ФД хочет проверить изгородь, описываемую прямой Ax+By=C

Все позиции коров уникальны и (-10^9 <= x, y <= 10^9). Кроме того, -10^9 <= A, B <= 10^9 and -10^18 <= C <= 10^18. Никогда не будет изгороди с A = B = 0.

Формат выходных данных

Для каждой изгороди выведите YES, если она подходит и NO, в противном случае.

Lights Out

геометрия Разбор случаев Задача на реализацию

Фермер Джон установил новую доильную машину. Она берёт так много энергии, что в амбаре часто выключается свет. Это случается так часто, что Беси запомнила карту амбара. Это позволяет ей быстрее находить путь к выходу в темноте. Теперь ей интересно узнать насколько дольше её путь в темноте.

Амбар описывается простым (несамопересекающимся) многоугольником с целочисленными вершинами \((x_1, y_1) \ldots (x_n, y_n)\) перечисленными в порядке обхода по часовой стрелке. Его рёбра составляются чередующимися горизонтальными (параллельными оси Х) и вертикальными (параллельными оси Y) отрезками. Первое ребро может быть как горизонтальным, так и вертикальным. Выход расположен в точке \((x_1, y_1)\). Беси начинает в некоторой вершине \((x_i, y_i)\) для \(i > 1\). Она идёт только по периметру амбара, по часовой стрелке или против часовой стрелки, потенциально изменяя направления движения, в любой вершине. Её цель - пройти минимальное расстояние и добраться до выхода. Это довольно просто, когда свет включён - просто выбрать между движением по часовой стрелке и движением против часовой стрелки.

Когда свет выключается, Беси в панике забывает вершину, в которой она находится. К счастью, она помнит точную карту амбара и поэтому она может вычислить свою позицию, двигаясь и опираясь на свои ощущения. Когда она находится в вершине, она может сказать это левый поворот или правый поворот, и является ли вершина выходом. Когда она идёт по ребру амбара, она может определить точную длину ребра после того, как пройдёт всё ребро. В общем сначала Беси двигается, чтобы определить, где она находится, а затем чтобы добраться к выходу за минимальное из оставшихся расстояний.

Помогите Беси определить минимальное количество, на которое возрастёт её путь в худшем случае при движении в темноте, по сравнению с движением при свете, полагая, что она движется оптимально в каждом случае. Оптимальная стратегия - такая, которая минимизирует увеличение расстояния в худшем случае.

ФОРМАТ ВВОДА (файл lightsout.in):

Первая строка ввода содержит \(N\) (\(4 \leq N \leq 200\)). Каждая из последующих \(N\) строк содержит по два целых числа, описывающих точки \((x_i, y_i)\) в почасовом порядке обхода. Все целые числа \(-100,000 \ldots 100,000\).

ФОРМАТ ВЫВОДА (файл lightsout.out):

Минимально возможное для худшего случая увеличение длины оптимального пути при походе в темноте по сравнению с походом при свете.

Cow Rectangles

геометрия

Заданы координаты N коров ФД (1 <= N <= 500) на 2D-плоскости.
Коровы принадлежат двум разным породам: Holsteins и Guernseys.
ФД хочет построить прямоугольную изгородь со сторонами,
параллельными осям координат, содержащими только коров
Holsteins, без Guernseys (корова считается находящейся в этой области,
Даже если она находится на её границе). Среди всех таких изгородей
ФД хочет выбрать ту, которая будет содержать максимальное количество
коров породы Holsteins. А среди всех таких изгородей ФД хочет выбрать
изгородь с минимальной площадью. Пожалуйста, определите эту площадь.
Допускается изгородь с нулевой высотой или нулевой шириной.

Формат входных данных

Первая строка ввода содержит целое число N. Каждая из следующих N
строк описывает корову двумя целыми числами и одним символом.
Целый числа указываю координаты коровы (x,y) (0 <= x, y <= 1000),
А символ H или G - определяет породу этой коровы. Никакие две коровы
не могут находится в одной точке. И есть хотя бы одна корова типа Holstein.

Формат выходных данных

Выведите два целых числа. Первая строка должна содержать максимальное
число коров породы Holsteins, которые можно огородить так, чтобы
там не было ни одной коровы типа Guernseys. Вторая строка должна содержать
минимальную площадь, огороженную этой изгородью.

Photo Op

геометрия

Ферма Фермера Джона полна пышной растительности и каждая корова хочет получить фото этой естественной красоты. К сожалению, Беси еще есть куда пойти, но она не хочет мешать фотосессиям.

Беси расположена в точке \((X,0)\) на координатной XY-плоскости и хочет попасть в точку \((0,Y)\) (\(1\le X,Y\le 10^6\)). К несчастью, \(N\) (\(1 \leq N \leq 3 \cdot 10^5\)) других коров решили позировать на оси \(X\). Точнее, корова \(i\) находится в точке \((x_i,0)\) а фотограф находится в точке \((0,y_i)\) где \((1 \leq x_i,y_i \leq 10^6)\) и он приготовился делать снимок. Они начинают съёмки перед моментом времени \(s_i\) (\(1 \leq s_i < T\)) и фоткаются очень долго, \(1\le T\le N+1\).

Беси знает расписание фотографирования всех коров, и хочет пройти по кратчайшему Евклидовому расстоянию от своей начальной точки к своей конечной точке без пересечения линии обзора между коровой и её фотографом (путь Беси может состоять из одного или более отрезков прямой).

Если Беси выходит в момент времени \(t\), она избежит линии обзора для всех пар корова/фотограф, которые начинают позировать в момент времени \(s_i \le t\), и пусть расстояние к её конечной точке равно \(d_t\). Определите величины \(\lfloor d_t\rfloor\) для каждого целого \(t\) от \(0\) до \(T-1\) включительно.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(N\) и \(T\), представляющие количество коров на оси \(x\) и временной интервал в течение которого Беси может начать свой поход.

Вторая строка содержит \(X\) и \(Y\), представляющих стартовую \(X\)-позицию Беси и финишную \(Y\)-позицию, соответственно.

Последующие \(N\) строк содержат \(s_i\) \(x_i\) \(y_i\). Гарантируется, что все \(x_i\) различны и все \(y_i\) различны. Все \(s_i\) будут заданы в порядке возрастания, где \(s_i \leq s_{i+1}\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите \(T\) строк, где \(t\)-ая строка (0-индексированная) содержит \(\lfloor d_t\rfloor\).

Multiple Choice Test

геометрия

Коровы проходят тест с множественными правильными ответами. Однако вместо стандартного теста, где сделанные выборы оцениваются для каждого теста Индивидуально, а затем результаты суммируются, в этом тесте Ваши выборы суммируются до оценивания.

А именно, Вам даются \(N\) (\(2\le N\le 10^5\)) групп целых векторов на 2D-плоскости, где каждый вектор обозначается упорядоченной парой \((x,y)\). Выберите один вектор из каждой группы так, чтобы сумма векторов была как можно дальше от начала координат.

Гарантируется, что общее количество векторов не более \(2\cdot 10^5\). Каждая группа имеет размер не менее \(2\) и внутри группы все векторы различны. Также гарантируется, что каждая из координат \(x\) и $y имеет абсолютную величину не более \(\frac{10^9}{N}\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\), количество групп.

Каждая группа начинается с \(G\), количества векторов в группе, за которой следуют \(G\) строк, содержащих вектора этой группы. Последовательные группы разделены пустой строкой.

ФОРМАТ ВЫВОДА (на экран / stdout):

Квадрат максимально возможного Евклидова расстояния от начала координат.

Equilateral Triangles

геометрия

Пастбище Фермера Джона может быть представлено \(N\times N\) квадратной решёткой \((1\le N\le 300)\), состоящей из позиций \((i,j)\) для всех \(1\le i,j\le N\). Для каждого квадрата решётки, соответствующий символ на вводе равен '*', если в этой позиции находится корова (ровно одна) и '.' если нет коров в этой позиции.

ФД считает, что красота пастбища прямо пропорциональна количеству таких троек коров, что их позиции находятся на равных расстояниях друг от друга, другими словами они образуют равносторонний треугольник. ФД считает расстояния не Евклидовые, а Манхэттенские, т.е. расстояние между двумя позициями \((x_0,y_0)\) и \((x_1,y_1)\) равно \(|x_0-x_1|+|y_0-y_1|\).

По заданной решётке, определяющей позиции коров, вычислите количество равносторонних троек.

ОЦЕНИВАНИЕ:

будет 14 тестов с такими значениями \(N\in \{50,75,100,125,150,175,200,225,250,275,300,300,300,300\}.\)

ФОРМАТ ВВОДА (файл triangles.in):

Первая строка содержит одно целое число \(N.\)

Для каждой из \(1\le i\le N,\) строка \(i+1\) ввода содержит строку длины \(N\), состоящую только из символов '*' и '.'. \(j\)-ый символ описывает, существует корова в позиции \((i,j)\) или нет

ФОРМАТ ВЫВОДА (файл triangles.out):

Выведите одно целое число, содержащее ответ. Можно доказать, что оно поместится в 32-битное целое.

Rectangular Pasture

геометрия

Самое большое пастбище Фермера Джона может быть рассмотрено как большая 2D-решётка из квадратных ячеек (как большая шахматная доска). В настоящий момент \(N\) коров занимают некоторые из этих ячеек (\(1 \leq N \leq 2500\)).

ФД хочет построить изгородь, которая окружит прямоугольный регион ячеек Стороны этого прямоугольника должны быть параллельны осям координат, и он может быть мал, вплоть до одной ячейки. Помогите ФД посчитать количество различных подмножеств коров, которые он может окружить таким регионом. Заметим, что пустое подмножество должно быть рассмотрено как одно из таких подмножеств.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит одно целое число \(N\). Каждая из последующих \(N\) строк содержит два разделённых пробелом целых числа - указывающих \((x,y)\)-координаты ячейки, в которой находится соответствующая корова. Все \(x\) координаты различны. Все \(y\) координаты различны. Все \(x\) и \(y\) лежат в интервале \(0 \ldots 10^9\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Количество подмножеств коров, которые ФД может огородить. Можно доказать, что это количество поместиться в 64-битное знаковое (например, long long в С/C++).

Square Pasture

геометрия

Самое большое пастбище Фермера Джона может быть представлено как 2D-решётка квадратных ячеек (как большая шахматная доска). В настоящий момент \(N\) коров занимают некоторые из этих ячеек (\(1 \leq N \leq 200\)).

ФД хочет построить забор, который огородит квадратный регион ячеек. Стороны этого квадрата должны быть параллельны осям координат. И он может быть маленьким, вплоть до одной ячейки. Помогите ФД посчитать количество различных подмножеств коров, которые он может огородить таким регионом. Заметим, что пустое подмножество также нужно считать.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит одно целое число \(N\). Каждая из последующих \(N\) строк содержит два разделённых пробелом целых числа, указывающих \((x,y)\) координаты ячейки соответствующей коровы. Все \(x\) координаты различны. Все \(y\) координаты различны. Все \(x\) и \(y\) координаты в интервале \(0 \ldots 10^9\).

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

ФОРМАТ ВЫВОДА (на экран / stdout):

Количество подмножеств коров, которые ФД сможет огородить. Можно доказать, что это количество поместится в 32-битное целое.

Splitting the Field

геометрия

\(N\) коров (\(3 \leq N \leq 50,000\)) Фермера Джона расположены в различных позициях его двумерного поля. ФД хочет огородить всех коров забором прямоугольной формы со сторонами параллельными осям координат x и y. Он хочет, чтобы забор огораживал всех коров (допускаются коровы на границе забора), и площадь области, ограниченной забором, была минимальной.

В связи с ограниченностью бюджета первоначальный план быт изменён. Теперь ФД хочет огородить всех коров двумя заборами вместо одного. Помогите ФД вычислить минимальную площадь, которую он может ограничить двумя заборами, которые включат вместе всех коров и стороны которых параллельны осям координат. Заборы не могут перекрываться - даже по границам. Заметим, что возможна площадь 0 - если забор имеет нулевую ширину или высоту.

ФОРМАТ ВВОДА (файл split.in):

Первая строка ввода содержит \(N\). Каждая из последующих \(N\) строк содержит два целых числа, указывающих координаты коровы - положительные целые числа в интервале \(1 \ldots 1,000,000,000\).

ФОРМАТ ВЫВОДА (файл split.out):

Выведите целое число - общую площадь, которую ФД может огородить двумя прямоугольниками.

Hill Walk

геометрия реализация графы


Имется N (1 <= N <= 100,000) холмов. Каждый холм имеет форму отрезка из точки (x1, y1) в точку (x2, y2) где x1 < x2 и y1 < y2. Никакие из этих отрезков не пересекаются и не касаются даже в конечных точках. Кроме того, для первого холма справедливо (x1,y1) = (0,0).
Беси начинает свой путь в точке (0,0) на первом холме. Когда Беси попадает на холм, она карабкается вверх пока не достигнет конца холма. Затем она прыгает вниз. Если она приземлится на другой холм, она продолжит карабкание уже на этом холме, иначе она падает в бездну (где y=-бесконечности). Каждый холм (x1, y1) -> (x2, y2) необходимо рассматривать как содержащий точку (x1, y1), но не содержащий точку (x2, y2), поэтому Бэси приземляется на холм, если она падает на него сверху с позиции x = x1, но не приземлится на него, если она падает сверху с позиции x = x2.
Посчитайте общее количество холмов, которых Беси коснется в некоторой точке во время своего путешествия.
PROBLEM NAME: hillwalk
Формат входных данных
* Строка 1: Количество холмов, N.
* Строки 2..1+N: Строка i+1 содержит четыре целых числа (x1,y1,x2,y2) описывающих холм i. Каждое целое число находится в диапазоне 0..1,000,000,000.
Формат выходных данных
* Строка 1: Количество холмов, которых коснется Беси за время своего путешествия.
Примечание
Беси пройдется по холмам #1, #4, #3.

Symmetry

геометрия


После лекции о современном искусстве, Фермер Джон начал искать геометрические фигуры во всем на своей ферме. Он выписал координаты всех своих N коров (2 <= N <= 1000), каждая из которых занимает уникальную точку на плоскости, и теперь хочет узнать, сколько имеется осей симметрии у данного множества точек. Под осью симметрии, как обычно, понимается прямая, относительно которой множества множества точек по разные стороны этой прямой являются зеркально симметричными. Помогите ФД ответить на этот вопрос.
PROBLEM NAME: symmetry
Формат входных данных
* Строка 1: Одно целое число N.
* Строки 2..1+N: Строка i+1 содержи два разделенных пробелом целых числа x и y, представляющие координаты i-ой коровы (-10,000 <= x,y <= 10,000).
Формат выходных данных
* Строка 1: количество осей симметрии данного множества точек.
Примечание
Имеется 4 оси симметрии – одна вертикальная, одна горизонтальная, и две диагональных.

Горнолыжные соревнования

Динамическое программирование геометрия Задача на реализацию


Горнолыжник, готовясь к соревнованиям, нарисовал на бумаге схему горнолыжной трассы для выбора оптимального маршрута спуска. На схеме расположенные на трассе ворота представлены горизонтальными отрезками. Никакая пара ворот не имеет общих точек. 

Маршрут должен представлять собой ломаную, начинающуюся в точке старта на вершине горы и заканчивающуюся в точке финиша у ее подножия. Маршрут выбирается таким образом, что y-координата каждой следующей вершины ломаной оказывается строго меньше y-координаты предыдущей вершины. Один из возможных маршрутов представлен на рисунке.

За каждые ворота, через которые не проходит маршрут, лыжнику начисляются штрафные очки. Общий штраф за спуск по маршруту вычисляется как сумма длины маршрута и штрафных очков за непройденные ворота.

Требуется написать программу, которая определяет, какой минимальный общий штраф горнолыжник может получить при прохождении трассы.

Входные данные
В первой строке входного файла задано число N - количество ворот на трассе (0 ≤ N ≤ 500), в следующих двух строках заданы Sx, Sy, Fx, Fy - координаты точек старта и финиша соответственно. В каждой из следующих N строк записаны четыре числа ai, bi, yi, ci - x-координаты левого и правого концов ворот, y-координата ворот и штраф за непрохождение данных ворот (ai < bi, Fy < yi < Sy, ci - целое число, 0 ≤ ci ≤ 10000). Все координаты - целые числа, не превосходящие по модулю 10000.

Выходные данные
В выходной файл выведите наименьший возможный общий штраф за прохождение трассы с точностью не менее 4 знаков после десятичной точки.

Точки в многоугольнике

Элементарная геометрия геометрия

Многоугольник на плоскости задан целочисленными координатами своих N вершин в декартовой системе координат. Требуется найти число точек с целочисленными координатами, лежащих внутри многоугольника (не на границе). Стороны многоугольника друг с другом не соприкасаются (за исключением соседних - в вершинах) и не пересекаются.

Ограничения: 3 <= N <= 10 000, координаты вершин целые и по модулю не превосходят 1 000 000.

Входные данные
В первой строке находится число N, в следующих N строках - пары чисел - координаты точек. Если соединить точки в данном порядке, а также соединить первую и последнюю точки, получится заданный многоугольник.

Выходные данные
Вывести одно число - искомое количество точек.

Бассейн реки

Многоугольники. Выпуклые оболочки геометрия

Дана карта рек некоторого континента. Каждая река показана как ломаная линия, которая начинается у истока реки и заканчивается или в точке, где река впадает в другую, или устьем реки. Вершины ломаной - или точки поворота реки, или точки впадения притоков.

Будем рассматривать бассейн реки как выпуклый многоугольник минимальной площади, который содержит реку и все её притоки.

Примечание. Согласно этому определению бассейна реки, одна и та же территория может принадлежать бассейнам различных рек.

Пример. Показан континент с тремя реками. Координаты рек и площади бассейнов даны в таблице.


 

Название реки    x      y   Площадь бассейна реки без притоков
река 1 6 9 12,5
5 11
3 12
2 10
1 7
 
река 2 7 9 1,5
5 7
5 5,5
 
река 3 3 10 9,5
5 8
4 6
5 5,5
6 5
3 5


Требуется найти максимальную площадь бассейна реки, расположенной на данном континенте.

Входные данные
Первая строка содержит число рек N. В следующих строках файла содержится N блоков, описывающих реки.

Каждый блок номер i состоит:

из одной строки с ki - числом вершин ломаной, представляющей реку;
ki строк, содержащих пары вещественных чисел xj и yj (1 <= j <= ki), разделённых пробелом, - координаты точек, описывающих реку.
Ограничения: 1 <= N <= 10, сумма ki <= 1000, -1000 <= xj, yj <= 1000.

Выходные данные
Вывести одно число - площадь наибольшего бассейна реки с двумя знаками после запятой.

Мехико

геометрия графы Перебор

Город Мехико расположен в прекрасной долине, известной как Долина Мехико, на месте которой много лет назад было озеро. Около 1300 года ацтекские религиозные лидеры выпустили указ о том, что центр озера должен быть засыпан, чтобы построить столицу их империи. В настоящее время озеро полностью осушено.

Вокруг озера до появления ацтеков были расположены c прибрежных городов. Некоторые из этих городов заключили между собой коммерческие соглашения. Между городами, установившими коммерческие соглашения, по озеру на лодках перевозились различные товары. Любую пару городов можно было соединить отрезком прямой, полностью проходящим через озеро.

В какой-то момент короли городов решили упорядочить товароперевозки. Они разработали маршрут товароперевозок, который соединяет все города вокруг озера. Маршрут удовлетворяет следующим условиям:

*Он начинается в каком-либо городе, проходит через каждый прибрежный город и заканчивается в городе, отличном от того, в котором он начался.
*Маршрут проходит через каждый город ровно один раз.
*Любые два последовательно посещаемых города маршрута обязаны иметь между собой коммерческое соглашение.
*Маршрут состоит из отрезков прямых, каждый из которых соединяет два последовательно посещаемых города маршрута.
*Чтобы избежать столкновения лодок, маршрут не должен иметь самопересечений.



На рисунке показано озеро и города вокруг него. Тонкие и жирные линии отрезков обозначают коммерческие соглашения между городами. Жирные линии показывают маршрут грузоперевозок, начинающийся в городе 2 и заканчивающийся в городе 5.

Этот маршрут нигде не имеет самопересечений. Но если построить маршрут, идущий из города 2 в город 6, затем в город 5, а затем в город 1, то он будет неправильным, поскольку имеет самопересечения.

Города нумеруются целыми числами от 1 до c по направлению часовой стрелки.
Задание
Напишите программу, которая по заданному числу городов c и списку коммерческих соглашений между городами, найдет маршрут товароперевозок, удовлетворяющий указанным выше условиям.

Ограничения
3 ≤ c ≤ 1000, c – число городов вокруг озера

Входные данные
На вход Вашей программы поступают данные в следующем формате:

СТРОКА 1: Содержит целое число c.
СТРОКА 2: Содержит целое число n – количество коммерческих соглашений.
СЛЕДУЮЩИЕ n СТРОК: Каждая строка описывает одно коммерческое соглашение (одно соглашение описывается один раз). В строке задаются два целых числа, разделенных пробелами, которые соответствуют номерам городов, заключивших между собой коммерческое соглашение.

Выходные данные
Если возможно построить маршрут товароперевозок, выведите c строк, в каждой из которых записано целое число. Эти числа представляют собой порядок посещения городов по маршруту товароперевозок. Если невозможно построить маршрут товароперевозок, удовлетворяющий всем указанным требованиям, выведите одну строку, содержащую отрицательное целое число -1.

Замечание
Если существует несколько маршрутов товароперевозок, удовлетворяющих всем указанным требованиям, выведите любой из них.

Коллайдер 2.0

геометрия графы

Коллайдер — это установка для изучения столкновений элементарных частиц. При его работе частицы разгоняются до большой скорости. Специальный детектор позволяет фиксировать траектории частиц в виде прямых на горизонтальной плоскости.

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

Для анализа потенциальных столкновений частиц важно, чтобы на каждом фотоснимке были отображены все точки пересечений их траекторий. Камера использует очень дорогие расходные материалы, поэтому площадь каждого фотоснимка необходимо минимизировать.

Требуется написать программу, которая по хронологической последовательности событий двух типов:

  • появление новой траектории частицы,

  • получение фотоснимка камерой, ориентированной по заданной направляющей прямой,

определит для каждого фотоснимка минимальную площадь прямоугольной области, включающей все точки пересечения траекторий частиц, появившихся до этого снимка.

Формат входных данных
В первой строке задано одно целое число \(n\) (\(1 \leqslant n \leqslant 200\,000\)) — общее количество событий. В следующих \(n\) строках заданы описания событий.

Описание каждого события состоит из пяти элементов. Первый элемент является символом <<+>>, если это событие является появлением новой траектории, или символом <<?>>, если это событие является получением фотоснимка. Последующие четыре элемента — целые числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) (\(-10\,000 \leqslant x_1, y_1, x_2, y_2 \leqslant 10\,000\)) — координаты двух несовпадающих точек. Для событий первого типа указанные точки лежат на траектории частицы. Все траектории различны. Для событий второго типа указанные точки лежат на направляющей прямой камеры.

Формат выходных данных
Пусть \(q\) — количество полученных фотоснимков. Выходной файл должен содержать \(q\) вещественных чисел — минимальные возможные площади фотоснимков, перечисленные в порядке их получения камерой. Тест будет успешно пройден, если для каждой из \(q\) выведенных площадей выполняется условие \(\frac{|a - b|}{\max(1, b)} \leqslant 10^{-4}\), где \(a\) — площадь, выведенная участником, \(b\) — площадь, полученная решением жюри.

Примеры
Входные данные Выходные данные Иллюстрация
1 6
+ 0 0 0 1
+ 0 0 1 0
+ 1 0 0 2
? 0 0 0 1
+ 2 4 3 6
? 0 0 1 1
2.0
3.000
2 7
? 11 4 -7 8
+ -2 -2 1 1
? 0 0 0 1
+ 0 1 1 0
+ 0 2 2 0
? 0 0 0 1
? 0 0 1 1
 
0.0
0.0
0.25
0.0000000
 

Треугольная головоломка

геометрия Перебор реализация

Головоломка состоит из \(n\) треугольников. Чтобы решить головоломку, необходимо выбрать из них четыре треугольника и собрать из них большой треугольник по следующей схеме:

Треугольники не должны пересекаться, в объединении они должны давать треугольник. Ровно по одному из выбранных треугольников должны находиться в углах, а один треугольник должен располагаться в центре.

Треугольники лежат на столе, их можно свободно вращать и двигать, но нельзя зеркально отражать.

Требуется найти все различные наборы из четырех треугольников, из которых можно собрать большой треугольник по указанной схеме. Два набора считаются разными, если существует треугольник, входящий в один, но не входящий в другой.

Формат входных данных
В первой строке дано одно целое число \(t\) — номер теста.

В второй строке дано одно целое число \(n\) — количество треугольников в головоломке (\(4 \le n \le 30\)).

В следующих \(n\) строках дано описание треугольников. Один треугольник описывается координатами трех своих углов, данных в порядке обхода треугольника против часовой стрелки. Все координаты целые и по модулю не превышают \(10^5\). Гарантируется, что треугольники не являются вырожденными. В исходном расположении треугольники могут пересекаться.

Формат выходных данных
В первой строке выведите одно целое число — количество наборов из четырех треугольников, из которых можно собрать большой треугольник по указанной схеме.

В следующих строках выведите наборы. Каждый набор задается номерами треугольников, которые в него входят. Треугольники внутри набора можно выводить в любом порядке. Наборы можно выводить в любом порядке.

Замечание
В первом примере из данных четырех треугольников можно собрать один. При этом треугольники не требуется вращать.

Во втором примере все треугольники имеют одинаковую форму прямоугольного треугольника с длинами катетов равными \(1\). Из любых четырех треугольников можно собрать один.

Расстояние между точками

"Два указателя" геометрия сортировки

На окружности заданы N точек, надо найти пару точек, расстояние между которыми (по хорде окружности) максимально. 

Входные данные
В первой строке задано N (1 <= N <= 100 000).
В следующей строке даны N пар вещественных чисел. Сначала описывается координата x, потом – y.

Выходные данные
Вывести два числа – номера точек, расстояние между которыми максимально. Сначала идет наименьшее число, потом наибольшее.
 
Ввод Вывод
3
1.4142 1.4142
0 2
-1.4142 -1.4142
1 3

 

Принадлежит ли точка углу

Элементарная геометрия геометрия

Дан угол AOB (O - вершина угла, A и B - точки на сторонах) и точка P. Определите, принадлежит ли точка P углу AOB (включая его стороны: лучи OA и OB).
 
Входные данные
Программа получает на вход координаты точек A, O, B, P.  Все координаты - целые, не превосходят 100 по модулю. Точки A, O, B не лежат на одной прямой.
 
Выходные данные
Программа должна вывести слово YES или NO.

Ввод Вывод
0 1
0 0
1 0
1 1
YES

Очень Важный Объект

геометрия Задачи на моделирование реализация

Антон  сторож на очень важном объекте. Как и положено всем важным объектам, он обнесён забором. Правда, время не пощадило этот забор, и в нём есть дыры, через которые на объект могут попадать нарушители.
Известно, что изначально забор состоял из n столбов и n соединяющих их секций. Забор ограничивал территорию, являющуюся выпуклым многоугольником. Однако, со временем, некоторые секции забора развалились и теперь через эти дыры можно почти беспрепятственно пройти внутрь:  Антону сложно следить за всеми дырами в заборе. Известно, что в заборе нет двух отсутствующих секций подряд.

Поняв, что, если на объект будет попадать слишком много нарушителей, Антон решил взять инициативу в свои руки и заделать некоторые дыры. Для этого он попросил у начальства моток колючей проволоки. Полученный им моток из l метров колючей проволоки нужно будет потом вернуть в целости, поэтому Антону запрещено его резать. Антон может закрепить один из концов мотка с проволокой в любом месте на границе объекта.
 
После чего, он может пойти вдоль границы по или против часовой стрелки, разматывая моток, и закрепить второй конец там, где он остановился. Он хочет выбрать место, с которого ему нужно начинать так, чтобы оставшиеся в заборе дыры имели минимально возможную длину. Помогите ему определить эту длину.
 
Формат входных данных
В первой строке входного файла содержится три целых числа n (3 <= n <= 105)  количество столбов в заборе, l (0 <= l  <= 1018)  длина выданного Антону мотка проволоки и k (0 <= k   <=n/2) количество дыр в заборе.
Во второй строке по возрастанию заданы k чисел ai (1 < ai <= n). Числу ai соответствует отсутствие секции забора между столбами ai и ai+1 mod n. Гарантируется, что из двух соседних секций хотя бы одна не отсутствует.
В следующих n строках находится по два целых числа xi и yi (|xi| <= 1018, |yi| <= 1018)  координаты i-го столба забора. Многоугольник может быть задан в порядке обхода как по, так и против часовой стрелки.

Формат выходных данных
Выведите единственное число  минимальную суммарную длину дыр в заборе после установки колючей проволоки. Ответ будет считаться правильным, если если он отличается от правильного не более, чем на p · 10?6
, где p  периметр многоугольника.

Примеры
Ввод Вывод
6 4 3
1 3 5
0 0
3 0
4 1
3 2
0 2
-1 1
2.82842712474619

Безопасный путь

геометрия графы кратчайшие пути

Петя и Вася — хорошие друзья. Поэтому они часто ездят друг к другу в гости. Недавно Петя
получил водительские права и собирается навестить своего друга. Для простоты будем считать, что
все дороги в городе, в котором они живут, являются бесконечными прямыми. В месте пересечения
двух или более дорог находятся перекрестки. Дома Пети и Васи расположены возле некоторых
дорог города, но не на перекрестках.
Петя начинает путь на дороге возле своего дома. При этом он может выбрать любое из
двух направлений. Когда Петя подъезжает к перекрестку, он может повернуть на любую другую
проходящую через него дорогу или продолжить ехать по текущей. Поскольку Петя не очень
опытный водитель, каждый поворот, который он совершает, заставляет его волноваться. Причем
волнение Пети равно величине угла, на который он поворачивает, в градусах. Например, при
повороте на прямой угол волнение Пети равно 90.

При менее крутом повороте Петя волнуется меньше, а при более крутом — сильнее.

 Будем считать, что волнение Пети в течении всего маршрута равно сумме величин в
градусах углов, на которые ему придется повернуть в течении движения. Конечно, Петя хочет
воспользоваться маршрутом, который заставит его волноваться как можно меньше.
Помогите Пете выяснить, чему равно минимальное суммарное волнение, которое он испытает,
добравшись до дома Васи.
Формат входных данных
В первой строке входного файла находится целое число n (1 ≤ n ≤ 50) — количество дорог в
городе. В следующих n строках находится описание дорог.
Каждая дорога описывается четверкой целых чисел x1, y1, x2, y2, которые задают координатами
двух различных точек (x1, y1) и (x2, y2), через которые проходит дорога.
Гарантируется, что никакие две дороги не совпадают. В следующих двух строках заданы
координаты домов Пети и Васи. Гарантируется, что каждый дом находится ровно на одной дороге,
а также, что Петя и Вася живут в разных местах.
Координаты всех точек во входном файле являются целыми числами и не превосходят 100 по
абсолютному значению.

Формат выходных данных
В выходной файл выведите единственное число — суммарный угол в градусах, на который
придется повернуть Пете при оптимальном выборе маршрута. Ответ считается правильным, если
его относительная или абсолютная погрешность не превосходит 10−9.
Если Петя никак не сможет добраться до дома Васи, выведите число −1.

Примеры
Ввод
3
0 0 2 0
1 1 0 2
1 2 3 2
-3 0
3 2
Вывод
270.0

Ввод
1
0 0 2 0
0 0
2 0
Вывод
0.0

Ввод
5
0 0 1 0
0 0 1 1
0 0 0 1
0 0 -1 1
0 1 1 1
5 0
0 5
Вывод
90.0

Следующий рисунок соответствует первому примеру. Петя совершает два поворота на 135
градусов, его суммарное волнение равно 270.


Table Recovery

геометрия

Перед Беси находится \(N\times N\) (\(1\le N\le 1000\)) таблица сложения, где целое число в ячейке строки \(r\) и столбца \(c\) есть \(r+c\), для всех \(1\le r,c\le N\). Например, для \(N=3\), эта таблица выглядит так:

2 3 4
3 4 5
4 5 6

Эльза поменяла числа в таблице, выполняя произвольное количество раз операции следующих трёх типов:

  1. Поменять две строки
  2. Поменять два столбца
  3. Выбрать два значения \(a\) и \(b\) из присутствующих в таблице, а затем одновременно поменять все вхождения \(a\) на \(b\) и все возможные вхождения \(b\) на \(a\).

Эльза всегда выполняет операции в порядке возрастания типа: сначала все операции (возможно ни одной) типа \(1\), затем типа \(2\), затем типа \(3\).

Помогите Беси восстановить возможное состояние таблицы после того как Эльза выполнит все операции типов \(1\) и \(2\), но прежде чем она выполнит первую операцию типа \(3\). Если возможно много вариантов ответов выберите лексикографически минимальный.

Чтобы сравнивать таблицы лексикографически сравните первые величины где они отличаются. Рассматривая обе таблицы в естественном порядке (строки сверху вниз, в строке слева направо).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\).

Каждая из следующих \(N\) строк содержит \(N\) целых чисел, представляющих таблицу сложения Беси после того, как Эльза перепутала её.

ФОРМАТ ВЫВОДА (на экран / stdout):

Лексикографически минимальное состояние таблицы после всех операций типа \(1\) и \(2\), но перед выполнением первой операции типа \(3\). Гарантируется, что ответ существует.

Target Practice II

геометрия битмаски

Замечание: время на тест 2.5 сек, по умолчанию 1.25.

Замечание: необходимо использовать 64-битные типы данных (например "long long" в C/C++).

Фермер Джон тренирует своих коров стрельбе из лука следующим упражнением на координатной плоскости.

Всего имеется \(N (1 \leq N \leq 4 \cdot 10^4)\) прямоугольных мишеней со сторонами параллельными осям координат и \(4N\) коров. Каждая корова должна быть назначена различной вершине прямоугольника. В момент \(i\), для \(1 \leq i \leq N\):

  1. Цель \(i\) появляется.
  2. \(4\) коров, назначенные своим вершинам, стреляют по ним.
  3. Если выстрел коровы попадает во внутренность мишени, прежде чем он попадёт в назначенную вершину или пройдёт мимо, корова не выполнила упражнение.
  4. Мишень исчезает, чтобы освободить место для следующей мишени.

Каждая корова расположена на \(y\)-оси \((x = 0)\), и каждая мишень - это прямоугольник, где мишень \(i\) имеет нижний левый угол в точке \((X_1, y_1^{(i)})\) и правый верхний угол в точке \((x_2^{(i)}, y_2^{(i)})\). Эти координаты также удовлетворяют условиям \(1 \leq X_1 < x_2^{(i)}\leq 10^9\) и \(1 \leq y_1^{(i)} < y_2^{(i)} \leq 10^9\) (Замечание: \(X_1\) одно и то же для каждой мишени).

В дополнение, каждая корова имеет свой "фокусный угол", где она может работать. Поэтому корова поворачивается на этот специфический угол, когда стреляет. Полагая, что их стрела летит по прямой от их позиции к назначенной вершине траектория стрелы \(i\)'-ой коровы может быть описана \(s_i\) \((0 < |s_i| < 10^9)\), наклоном траектории.

ФД хочет минимизировать расстояние между самыми дальними коровами. Если ФД оптимально назначит каждой корове её целевую вершину и оптимально разместит их на оси \(y\), вычислите минимальное расстояние между самыми дальними коровами или коровы всегда не выполнят упражнение.

Каждый тест содержит \(T\) (\(1 \leq T \leq 10\)) независимых подтестов. Гарантируется, что сумма всех \(N\) по всем подтестам не превысит \(4\cdot 10^4\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(T\) (\(1 \leq T \leq 10\)), количество независимых подтестов. Каждый подтест задаётся следующим образом:

Первая строка подтеста содержит два целых числа \(N\) и \(X_1\), количество мишеней и самую левую координату мишеней соответственно.

Затем следуют \(N\) строк, где \(i\)-ая строка содержит 3 целых числа \(y_1^{(i)}\), \(y_2^{(i)}\), \(x_2^{(i)}\), - нижняя \(y\)-координата, верхняя \(y\)-координата и правая \(x\)-координата \(i\)-ой мишени соответственно.

Последняя строка состоит из \(4N\) целых чисел \(s_1, s_2, \dots, s_{4N}\) где \(s_i\) обозначает наклон траектории выстрела \(i\)-ой коровы.

ФОРМАТ ВЫВОДА (на экран / stdout):

Минимальное возможное расстояние между самыми дальними коровами или \(-1\) если коровы всегда не справятся с упражнением.