Алгоритмы(1657 задач)
Структуры данных(279 задач)
Интерактивные задачи(17 задач)
Другое(54 задач)
Компания, производящая оборудование для сотовой связи, обратилась к вам с просьбой написать программу, оценивающую качество организации сети. Одним из важных параметров является то, пересекаются ли зоны покрытия передатчиков, работающих на одинаковых частотах. Для простоты будем считать, что область покрытия каждого передатчика представляет собой многоугольник на плоскости (не обязательно выпуклый). Две области покрытия будем считать пересекающимися, если у них есть хотя бы одна общая точка (возможно, лежащая на границе одной или даже обеих областей). Ваша программа должна принимать на вход набор пар многоугольников, описывающих зоны покрытия передатчиков, и выводить про каждую пару информацию о том, пересекаются ли эти зоны.
На первой строке входного файла находится число \(K\) — количество тестов во входном файле. Далее идёт описание \(K\) тестов. Каждый тест задаётся описанием двух многоугольников, которые надо проверить на пересечение. Каждый многоугольник задаётся в следующем формате: сначала указывается одно число \(N_i\) — число вершин этого многоугольника, после чего идут \(N_i\) строк, каждая из которых содержит два разделённых пробелом числа \(x_{ij}\) и \(y_{ij}\) — координаты \(j\)-й вершины этого многоугольника. Вершины перечислены в порядке обхода многоугольника.
Число пар многоугольников в одном тесте \(1 \leq K \leq 10\), число вершин каждого многоугольника \(3 \leq N_i \leq 100\), координаты вершин — целые числа, \(|x_{ij}|, |y_{ij}| \leq 10\,000\).
Для каждой пары многоугольников выведите в выходной файл на отдельной строке одно слово: “YES”, если многоугольники пересекаются, и “NO”, если нет.
2 3 0 0 -1 0 0 -1 3 1 1 2 1 1 2 4 0 0 2 0 2 2 0 2 4 1 1 3 1 3 3 1 3
NO YES
Вы по-прежнему работаете под руководством д.б.н., проф. О.Б. Ломова и изучаете интеллект обезьян. Ваши подопечные уже очень далеко ушли от столь элементарной задачи, как сбор квадрата. Теперь вы работаете над тем, чтобы обучить их намного более сложной задаче. Вы по-прежнему даёте обезьянам набор из \(N\) палочек, но на этот раз вы хотите, чтобы они собрали из этих палочек треугольник.
Конечно, решить эту задачу в элементарном варианте — выбрать три палочки и собрать из них треугольник — ваши подопечные могут без каких-либо проблем; вы же хотите их обучить, чтобы они собирали один большой треугольник из всех выданных им палочек сразу. Таким образом, они должны разбить палочки на три группы так, чтобы, сложив палочки каждой группы в один большой отрезок, получить три отрезка, из которых можно собрать треугольник. Полученный треугольник должен быть невырожденным, т.е. его площадь должна быть строго больше нуля.
Как и в прошлый раз, вам понадобилась программа, которая определит, разрешима ли задача для данного набора палочек.
На первой строке входного файла находится одно натуральное число \(N\) — количество палочек в наборе (\(1\leq N \leq 16\,000\)). На второй строке находятся \(N\) натуральных чисел — длины палочек. Гарантируется, что суммарная длина палочек не превосходит \(100\,000\,000\).
Если решения не существует, то в первую строку выходного файла выведите одно слово “no”
(без кавычек). В противном случае в первую строку выведите одно слово “yes”, а в
следующие три строки выведите какой-нибудь способ собрать треугольник из данных палочек. Каждая
из этих трёх строк должна описывать очередную сторону получающегося треугольника: в каждой строке
сначала должно идти количество палочек, из которых состоит эта сторона, а потом длины этих палочек.
Каждую палочку, конечно, можно использовать только один раз.
Если есть несколько способов собрать треугольник из данных палочек, выведите любой.
5 1 2 3 4 5
yes 2 4 3 1 5 2 1 2
5 1 2 3 4 100
no
В Якутске \(n\) домов. Некоторые из них соединены дорогами с односторонним движением.
В последнее время в Якутске участились случаи пожаров. В связи с этим жители решили построить в городе несколько пожарных станций. Но возникла проблема: едущая по вызову пожарная машина, конечно, может игнорировать направление движения текущей дороги, однако возвращающаяся с задания машина обязана следовать правилам дорожного движения (жители Якутска свято чтут эти правила!).
Ясно, что, где бы ни оказалась пожарная машина, у нее должна быть возможность вернуться на ту пожарную станцию, с которой выехала. Но строительство станций стоит больших денег, поэтому на совете города было решено построить минимальное количество станций таким образом, чтобы это условие выполнялось. Кроме того, для экономии было решено строить станции в виде пристроек к уже существующим домам.
Ваша задача — написать программу, рассчитывающую оптимальное положение станций.
В первой строке входного файла задано число \(n\) (\(1 \le n \le 3\,000\)). Во второй строке записано количество дорог \(m\) (\(1 \le m \le 100\,000\)). Далее следует описание дорог в формате \(a_i\) \(b_i\), означающее, что по \(i\)-й дороге разрешается движение автотранспорта от дома \(a_i\) к дому \(b_i\) (\(1 \le a_i, b_i \le n\)).
В первой строке выведите минимальное количество пожарных станций \(K\), которые необходимо построить. Во второй строке выведите \(K\) чисел в произвольном порядке — дома, к которым необходимо пристроить станции. Если оптимальных решений несколько, выведите любое.
5 7 1 2 2 3 3 1 2 1 2 3 3 4 2 5
2 5 4
Магическим квадратом будем называть квадрат с одинаковой суммой чисел по всем вертикалям и горизонталям; никаких требований на суммы по диагоналям накладывать не будем. Составьте такой квадрат из заданного набора чисел.
Во входном файле записаны 16 различных целых чисел в интервале от 0 до 32 768.
В выходной файл необходимо вывести искомое расположение чисел, составляющее магический квадрат \(4\times 4\) (каждое число должно встречаться ровно один раз), в четырех строках по четыре числа, или строку «NO SOLUTION», если квадрат составить нельзя.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 6 13 14
2 11 12 9
15 7 4 8
16 10 5 3
Вводится последовательность целых чисел, оканчивающаяся нулем. Число 0 в последовательность не входит.
Выведите элементы последовательности в обратном порядке. Для хранения данных используйте стек.
Вводится последовательность целых чисел, по модулю не превосходящих 10000. Ввод заканчивается, когда будет введено число 0. Всего чисел не более 100 (не считая нуля).
Выведите элементы этой последовательности в обратном порядке, через пробел.
1 2 3 4 5 0
5 4 3 2 1