| | | |
|
Шахматная доска
Двумерные массивы
Клеточная геометрия
Из шахматной доски по границам клеток выпилили связную (не распадающуюся на части) фигуру без дыр. Требуется определить ее периметр.
Входные данные
Сначала вводится число N (1 ≤ N ≤ 64) – количество выпиленных клеток. В следующих N строках вводятся координаты выпиленных клеток, разделенные пробелом (номер строки и столбца – числа от 1 до 8). Каждая выпиленная клетка указывается один раз.
Выходные данные
Выведите одно число – периметр выпиленной фигуры (сторона клетки равна единице).
Примеры
| № |
Входные данные |
Выходные данные |
Пояснения |
| 1 |
3
1 1
1 2
2 1 |
8 |
Вырезан уголок из трех клеток. Сумма длин его сторон равна 8. |
| 2 |
1
8 8 |
4 |
Вырезана одна клетка. Ее периметр равен 4. |
| |
|
|
Восстанови многоугольник
Клеточная геометрия
Двумерные массивы
Вася нарисовал на клетчатой бумаге многоугольник, все стороны которого проходят по линиям сетки. После этого в каждой клетке он написал число, равное количеству сторон данной клетки, которые принадлежат сторонам многоугольника. Затем он стер многоугольник так, что остался листок бумаги, в каждой клетке которого написано число.
Восстановите нарисованный Васей многоугольник.
Входные данные
В первой строке входных данных содержатся два натуральных числа: Y - количество строк и X - количество столбцов листа (3 <= Y <= 1000, 3 <= X <= 1000). В каждой из следующих Y строк задается по X целых неотрицательных чисел, не превосходящих 4. Ни одна из сторон многоугольника не проходит по границе листа бумаги.
Выходные данные
Выведите искомый многоугольник в следующем формате.
Выходные данные должны содержать Y строк по 2X-1 символов в каждой (по одному символу на клетку и линию между клетками).
В первой строке выведите вертикальные отрезки в верхнем ряду клеток, обозначая их символом | (вертикальная черта - символ с кодом 124) и горизонтальные отрезки, отделяющие первый ряд клеток от следующего, обозначая их символом _ (подчеркивание). Если соответствующий отрезок в данном многоугольнике отсутствует, выведите вместо него символ . (точка). Во второй строке выведите в том же формате вертикальные отрезки во втором ряду и горизонтальные отрезки, отделяющие второй ряд от третьего. И т.д. В каждой строке на нечетных местах могут стоять только символы точка или подчеркивание, на четных местах - символы точка или вертикальная черта.
Гарантируется, что хотя бы одно решение существует. Если решений несколько, выведите любое из них.
| |
|
|
Поиск прямоугольников
Динамическое программирование на таблицах
Клеточная геометрия
На поле NxM клеток (N строк и M столбцов) положили K прямоугольников один поверх другого в случайном порядке. Длины сторон прямоугольников выражаются целым числом клеток. Прямоугольники не выходят за границы поля. Границы прямоугольников совпадают с границами клеток поля.
Получившуюся ситуацию записали в таблицу чисел (каждой клетке поля соответствует клетка таблицы). Если клетка поля не закрыта прямоугольником, то в соответствующую клетку таблицы записали число 0. Если же клетка закрыта одним или несколькими прямоугольниками, то в соответствующую клетку таблицы записали число, соответствующее номеру самого верхнего прямоугольника, закрывающего эту клетку.
По содержимому таблицы требуется определить положение и размеры прямоугольников.
Гарантируется, что во входных данных содержится информация, которой достаточно для однозначного определения размеров прямоугольников.
| 0 |
2 |
2 |
2 |
2 |
| 0 |
2 |
2 |
2 |
2 |
| 1 |
1 |
2 |
2 |
2 |
| 1 |
1 |
0 |
0 |
0 |
Входные данные
В первой строке входного файла записаны целые числа N, M, K (1≤N≤200, 1≤M≤200, 1≤K≤255). Далее следует N строк по M чисел в каждой — содержимое таблицы. Все числа в таблице целые, находятся в диапазоне от 0 до K включительно.
Выходные данные
В выходной файл необходимо выдать K строк. Каждая строка должна описывать соответствующий ее номеру прямоугольник четырьмя числами R C H W (R и C должны описывать координаты левого нижнего угла прямоугольника, а H и W — координаты правого верхнего угла). Числа должны разделяться пробелом.
Оси координат устроены следующим образом: начало координат находится в нижнем левом углу поля, а оси координат направлены вдоль сторон поля (ось Ox — вдоль нижней стороны, а ось Oy — вдоль левой стороны). Клетки поля имеют размер 1x1. Таким образом, координаты левого нижнего угла поля — (0,0), правого верхнего — (M,N). Заметьте, что вы должны вывести координаты углов прямоугольников (как точек) в этой системе координат, а не координаты угловых клеток, покрытых прямоугольниками.
| |
|
|
Mountain View
Клеточная геометрия
Со своего пастбища Беси имеет прекрасный вид на горный горизонт.
Имеется \(N\) гор (\(1 \leq N \leq 10^5\)). Каждая гора это треугольник,
основание которого лежит на оси \(x\). Обе стороны горы наклонены под углом
45 градусов, поэтому пик горы - угол в 90 градусов. Гора \(i\) поэтому
задаётся координатами \((x_i, y_i)\) её пика. Никакие две горы не имеют
одно и то же расположение пика.
Беси хочет посчитать все горы, но, поскольку все они примерно одного цвета,
она не может увидеть гору, если её пик лежит на границе или внутри другой горы.
Определите количество различных пиков (и следовательно гор), которые
Беси может увидеть.
ФОРМАТ ВВОДА (файл mountains.in):
Первая строка ввода содержит \(N\). Каждая из оставшихся \(N\) строк содержит
\(x_i\) (\(0 \leq x_i \leq 10^9\)) и \(y_i\) (\(1 \leq y_i \leq 10^9\))
описывающих пики гор.
ФОРМАТ ВЫВОДА (файл mountains.out):
Выведите минимальное количество гор, которые Беси может различить.
| |
|
|
Icy Perimeter
Поиск компонент связности
Клеточная геометрия
Задачи на моделирование
Фермер Джон собирается выпускать и продавать мороженое. Он построил
машину, которая производит шарики мороженого, но, к несчастью, немного
неправильной формы.
Конфигурация мороженого, которое производится машиной, может быть
описано решёткой \(N \times N\) grid (\(1 \leq N \leq 1000\)):
##....
....#.
.#..#.
.#####
...###
....##
Каждый символ '.' представляет пустое место, а каждый символ '#'
представляет \(1 \times 1\) квадратную ячейку мороженого.
К несчастью, сейчас машина работает не очень хорошо и может производить
несколько несвязанных сгустков мороженого (на картинке сверху их два).
Сгусток мороженого называется связным, если из любой ячейки сгустка можно
добраться до любой другой ячейки, перемещаясь в соседнюю по одному из
четырёх направлений (север, юг, запад, восток).
ФД хочет найти площадь и периметр сгустка, который имеет наибольшую
площадь. Площадь сгустка равна количеству символов '#' в его картинке.
Если несколько сгустков имеют одинаковую площадь, он хочет знать минимальный
периметр из них. На рисунке выше, маленький сгусток имеет площадь 2 и
периметр 6, а больший сгусток имеет площадь 13 и периметр 22.
Заметим, что сгусток может иметь "дыру" внутри (пустое пространство, окружённое мороженым). В таком случае граница "дыры" также учитывается в периметре
сгустка. Сгусток может находиться внутри другого сгустка, в этом случае они
рассматриваются как независимые сгустки. Например, ниже представлен сгусток
площади 1 внутри сгустка площади 16:
#####
#...#
#.#.#
#...#
#####
ФОРМАТ ВВОДА (файл perimeter.in):
Первая строка ввода содержит \(N\), а следующие \(N\) строк описывают вывод машины.
Присутствует, как минимум, один символ '#'.
ФОРМАТ ВЫВОДА (файл perimeter.out):
Выведите одну строку, содержащую два разделённых одиночным пробелом целых числа:
площадь наибольшего сгустка и его периметр. Если есть несколько сгустков
максимальной площади, вывести минимальный периметр.
| |
|
|
Painting the Barn
Клеточная геометрия
Фермер Джон красит одну сторону своего амбара маленькими прямоугольными
областями, однако его отвлекают коровы, и в результате некоторые участки
содержат больше слоёв краски, чем другие.
Мы можем описать эту сторону амбара как двумерную плоскость, на которой
ФД красит \(N\) прямоугольников, стороны каждого из которых параллельны осям
координат, и каждый из которых описывается своим левым нижним и правым верхним
углами.
ФД хочет применить несколько слоёв краски к амбару, чтобы не пришлось
перекрашивать в ближайшем будущем. Однако он не хочет тратить время
делая лишние слои краски. Он считает \(K\) оптимальным числом слоёв краски.
Помогите ФД определить, какая площадь будет покрыта ровно \(K\) слоями краски
после того, как он закрасит все свои прямоугольники.
ФОРМАТ ВВОДА (файл paintbarn.in):
Первая строка ввода содержит \(N\) и \(K\) (\(1 \leq K \leq N \leq 10^5\)).
Каждая из оставшихся \(N\) строк содержит четыре целых числа \(x_1, y_1, x_2, y_2\)
описывающих прямоугольный регион, который зарисовали левым нижним углом
\((x_1, y_1)\) и правым верхним углом \((x_2, y_2)\). Все величины \(x\) и \(y\)
находятся в интервале \(0 \ldots 1000\), все прямоугольники имеют положительную
площадь.
ФОРМАТ ВЫВОДА (файл paintbarn.out):
Выведите площадь амбара, которая покрыта ровно \(K\) слоями краски.
| |
|
|
Painting the Barn
Клеточная геометрия
Фермер Джон красит одну сторону амбара маленькими прямоугольниками.
Но его отвлекают коровы, и некоторые части амбара красятся чаще,
чем другие.
Мы можем описать эту сторону амбара как двумерную плоскость, на которой
ФД рисует \(N\) прямоугольников, стороны которых параллельны осям координат,
Прямоугольники описываются координатами левого нижнего и правого верхнего углов.
ФД хочет покрасить амбар в несколько слоёв, так чтобы не пришлось
вскорости снова красить. Однако, он не хочет тратить время на лишнюю покраску.
Сначала он решил, что оптимально покрасить \(K\) раз. Однако оглядев область
Амбара, покрашенную ровно \(K\) раз, он решил добавить два прямоугольника,
Так, чтобы максимально увеличить площадь, покрашенную ровно \(K\) раз, так
чтобы эти прямоугольники не имели общей ненулевой площади пересечения.
Заметим, что он может рисовать ноль новых прямоугольников или только
один прямоугольник, если это может улучшить результат.
ФОРМАТ ВВОДА (файл paintbarn.in):
Первая строка ввода содержит \(N\) и \(K\) (\(1 \leq K, N \leq 10^5\)).
Каждая из оставшихся \(N\) строк содержит четыре целых числа \(x_1, y_1, x_2, y_2\)
описывающих прямоугольный регион левым нижним углом \((x_1, y_1)\) и
правым верхним углом \((x_2, y_2)\). Все величины \(x\) и \(y\) в интервале
\(0 \ldots 200\), и все прямоугольники имеют положительную площадь.
Как и уже нарисованные прямоугольники, новые должны иметь положительную
площадь, а координаты их углов \(x\) и \(y\) должны быть в интервале \(0 \ldots 200\).
ФОРМАТ ВЫВОДА (файл paintbarn.out):
Выведите максимальную площадь амбара, которая может быть покрыта ровно \(K\)
слоями краски, если ФД закрасит ещё до двух дополнительных непересекающихся
(по площади) прямоугольника.
| |
|
|
The Lazy Cow
Клеточная геометрия
Сегодня жаркий летний день, и корова Беси чувствует себя утомлённой. Она хочет так расположиться на поле, чтобы она находилась на коротком расстоянии от как можно большего количества вкусной травы. Имеется N участков с травой (1 <= N <= 100,000) на поле Беси. i-ый из этих участков содержит gi единиц травы (1 <= gi <= 10,000) и расположен в различных точках (xi, yi) поля (0 <= xi, yi <=1,000,000). Беси хочет выбрать точку для своего начального расположения так, что бы максимальное количество травы было достижимо не более чем за K шагов от этого положения (1 <= K <= 2,000,000). Шаг Беси – это перемещение на 1 единицу к северу, югу, востоку или западу от текущей позиции. Например, перемещение из точки (0,0) в точку (3,2) требует 5 шагов. Пожалуйста, помогите Беси определить максимальное количество травы, Которое она сможет достичь, если выберет наилучшее начальное расположение. PROBLEM NAME: lazy Формат входных данных * Строка 1: Целые числа N и K. * Строки 2..1+N: Строка i+1 опсиывает i-ый участок травы используя 3 целых числа: gi, xi, yi. Формат выходных данных * Строка 1: Максимальное количество травы, которое может достичь Беси за K шагов, если он выберет наилучшее начальное положение. Примечание Расположившись в точке (3,0) Беси обеспечит себе доступ к траве в позициях (0,0), (6,0), и (4,2) – все на расстоянии не превышающем K.
| |
|
|
65997
Клеточная геометрия
Задачи на моделирование
реализация
Город имеет форму прямоугольника с вершинами в точках (-W,-H), (-W,H), (W,H),(W,-H).
Плоскость разбита на кварталы. Квартал — это единичная клетка, вершины которой имеют целочисленные координаты. Назовем квартал городским, если все вершины квартала находятся внутри города (считается, что точка на границе принадлежит городу). Всего в городе будет 4·W·H кварталов.
Дорожная сеть состоит из N дорог (часть дорог или все проходят через город).
Дорога — это прямая линия, не параллельная осям координат.
Дорога задается двумя различными точками на ней (точки могут находиться вне города).
Для каждого квартала определим "значимость". Значимость квартала равна количеству дорог, проходящих через этот квартал. Считается, что дорога проходит через квартал, если имеет с кварталом не менее двух общих точек.
Найдите значение "значимости" для каждого квартала. Для каждой полученной "значимости" определите количество кварталов, имеющих эту значимость.
Формат входных данных
В первой строке заданы значения W, H, N (9<W,H<201, 0<N<1001)
В следующих N строках задано по четыре числа (координаты двух точек прямой, определяющих дорогу).
Формат выходных данных
В первой строке выведите число K - количество различных ненулевых значений "значимости".
В следующих K строках выведите по два числа - значение "значимости" и количество кварталов, имеющих такое значение "значимости".
Примечание к примеру
Город расположен в прямоугольнике со сторонами 8 и 6 клеток (всего 48 кварталов)
Через город проходят 4 дороги AB, CD, EF, GH
Значимость 1 будет у 24 кварталов (коричневый цвет на рисунке)
Значимость 2 будет у 5 кварталов (зеленый цвет на рисунке)
Значимость 4 будет у 1 кварталов (красный цвет на рисунке)
18 кварталов будут иметь значимость равную 0 (на печать не выводиться)

| |
|
|
Жизнь бактерий
Клеточная геометрия
На плоскости живут N бактерий, они находятся в точках с целочисленными координатами. Каждый день бактерии размножаются "делением пополам": берутся все возможные пары бактерий и на середине отрезка их соединяющего рождается новая бактерия. Все старые бактерии при этом умирают. Определить первый день, когда найдутся две бактерии, которые родятся в одном и том же месте или сообщите, что этого никогда не произойдет.
Входные данные
Первая строка входных данных содержит число бактерий N (1 ≤ N ≤ 500). Каждая из следующих N строк содержит 2 целых числа xi, yi – координаты i-й бактерии (−109 ≤ xi, yi ≤ 109). Никакие 2 бактерии не располагаются в одной точке.
Выходные данные
Выведите 0, если 2 бактерии никогда не родятся в одном месте. В противном случае выведите минимальное количество дней, через которое это случится.
| |
|
|
История одной страны
Клеточная геометрия
поиск в глубину и подобное
На летние каникулы Петя приехал в Байтландию. Как оказалась, история этого государства весьма необычна.
Изначально, до появления Байтландии, на её территории были расположены n различных стран. Каждое государство владело своей территорией, которую можно было представить на карте как прямоугольник, стороны которого параллельны осям координат, а вершины расположены в целочисленных точках. Никакие две страны не пересекались, однако они могли касаться сторонами. Иногда в результате агрессивных переговоров и мирных военных походов две страны объединялись в одну. Слияние происходило только в том случае, если после объединения их владений снова получалась прямоугольная территория. В конце концов осталось только одно государство — Байтландия.
В начале времён территория каждой страны содержала внутри себя ровно один прямоугольный замок, где стороны этого замка параллельны осям координат, а вершины расположены в целочисленных точках. Допускается, что границы замка могли прилегать к границе соответствующей территории страны и к границам других замков. Удивительным образом, даже после всех переворотов, замки прекрасно сохранились. Но, к сожалению, это единственная информация, которая позволяет хоть как-то судить об изначальном расположении стран.

Возможное формирование Байтландии. Замки отмечены синим цветом.
Петя не смог смириться с тем, что не осталось никаких данных об изначальных странах. У него возникло подозрение, что вся эта история всего лишь вымысел. Он знает, что вы умный человек, и поэтому просит у вас помощи. Требуется выяснить, существует ли расположение изначальных государств, для которых может быть верна данная история, или нет.
Входные данные
Первая строка содержит одно целое число n (1 ≤ n ≤ 100000) — количество замков и стран.
Каждая из следующих n строк содержат четыре целых числа ai, bi, ci, di (0 ≤ ai < ci ≤ 109, 0 ≤ bi < di ≤ 109) — координаты вершин i-го замка, где (ai, bi) — координаты левой нижней точки, а (ci, di) — правой верхней.
Гарантируется, что никакие два замка не пересекаются, однако они могут касаться сторонами.
Выходные данные
Если существуют расположения изначальных стран, для которых верна данная история, то выведите « YES », иначе выведите « NO ».
Примечание
На картинках ниже изображено расположение замков в первом и втором примере.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4
0 0 1 2
0 2 1 3
1 0 2 1
1 1 2 3 |
YES |
| 2 |
4
0 0 2 1
1 2 3 3
2 0 3 2
0 1 1 3 |
NO |
| |
|