Страница: << 1 2 3 4 5 6 7 >> Отображать по:
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes
Задано дерево. Каждый узел может покрасить в красный или черный цвет так, чтобы не было двух соединенных красных вершин и количество красных вершин на пути от корня до листьев было одинаковым. По заданному дереву требуется определить количество корректных способов раскраски дерева.

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

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

Если вершина Y – ребенок вершины X, то говорят, что вершина X является родителем вершины Y. У каждой вершины дерева, кроме одной, есть ровно один родитель. Единственная вершина, не имеющая родителя, называется корнем дерева.

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

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

 

  1. если вершина красная, то ее родитель – черный;
  2. количество черных вершин на пути от корня до любой вершины, у которой отсутствует хотя бы один ребенок, одно и то же.

Примеры двоичного дерева, вершины которого раскрашены в два цвета, приведены на следующем рисунке.

 

includegraphics{pics/rbtrees.1}  

Если считать закрашенные вершины черными, а незакрашенные – красными, то дерево на рисунке (а) является красно-черным деревом, а деревья на рисунках (б) и (в) – нет. Для дерева на рисунке (б) нарушается первое свойство – у красной вершины 5 родитель 2 также красный, а в дереве на рисунке (в) нарушается второе свойство – на пути от корня до вершины 1 одна черная вершина, а, например, на пути от корня до вершины 3 – две.

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

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

В первой строке вводится число n – количество вершин в дереве ( 1\( le\)n\( le\)1000).

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

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

Выведите  одно число – количество способов раскрасить вершины заданного  двоичного дерева в красный и черный цвета так, чтобы оно стало красно-черным деревом.

includegraphics{pics/rbtrees.1}  
Примеры
Входные данные
6
6 0
1 5
0 0
0 0
3 4
0 0
Выходные данные
3
Входные данные
4
2 0
3 0
4 0
0 0
Выходные данные
0
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes
Взаимной удаленностью двух вершин невзвешенного графа называется кратчайшее расстояние между ними. Необходимо построить граф, в котором сумма взаимных удаленностей вершин равна задана числу.

Сверхсекретный завод, расположенный высоко в горах, занимается изготовлением новейших систем контроля торсионных полей – нанокристаллов. Нанокристалл состоит из нескольких атомов, некоторые из которых попарно связаны сверхпрочными торсионными связями.

Нанокристалл стабилен, если между любыми двумя его атомами можно построить соединяющую их цепочку связей, возможно с использованием других атомов. Например, нанокристалл \( cal {X}\) из четырех атомов A, B, C и D, в котором между собой связаны пары A - B, A - C, B - C и B - D, стабилен. Если же, например, в нанокристалле из данных четырех атомов связаны только пары A - B и C - D, то кристалл нестабилен, поскольку, например, A и C не соединены никакой цепочкой связей.

Для любой пары атомов стабильного нанокристалла определена их взаимная удаленность – минимальная длина цепочки из связей, которая их соединяет. Например, рассмотрим описанный выше нанокристалл \( cal {X}\). Взаимная удаленность атомов A и B равна единице (они соединены напрямую), а взаимная удаленность C и D равна двум (они соединены цепочками C - B - D и C - A - B - D, длина кратчайшей цепочки равна двум).

Важнейшей характерикой стабильного нанокристалла является его емкость. Емкость нанокристалла равна сумме взаимных удаленностей всех пар его атомов. Например, емкость нанокристалла \( cal {X}\) равна 8.

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

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

На вход программы поступает число c ( 1\( le\)c\( le\)10 000).

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

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

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

Примеры
Входные данные
2
Выходные данные
0 0
Входные данные
8
Выходные данные
4 4
1 2
1 3
1 4
3 4
Имеется неограниченное количество досок, длины Z. Необходимо напилить A досок длины X и B досок длины Y. Необходимо подсчитать минимальное количество распилов, обрезки можно выкидывать.

Недавно на лесопилку, где работает Вася, поступил новый заказ. Для постройки нового дома мэру соседнего города требуется a досок длины x футов и b досок длины y футов.

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

Например, если на лесопилке имеются доски длины 80, а клиенту требуется две доски длины 30 и семь досок длины 20, то достаточно сделать семь распилов: одну доску распилить двумя распилами на доски длины 20, 30 и 30, одну тремя распилами на четыре доски длины 20 и одну двумя распилами на доски длины 20, 20 и 40. Доска длины 40 клиенту не нужна, она останется на лесопилке, остальные доски будут отправлены клиенту.

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

На вход программы поступают числа \(a, x, b, y \) и \( z \). Все числа положительны и не превышают 300, \( x \le z, y \le z, x \neq y \).

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

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

Примеры
Входные данные
2 30 7 20 80
Выходные данные
7
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
64 megabytes

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

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

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

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

Вводятся два числа \(N\) и \(K\) (\(1 \le N \le 100\), \(1 \le K \le 100\)).

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

Выведите одно число – количество различных лесенок. Гарантируется, что правильный ответ не будет превышать \(10^{18}\).

Примеры
Входные данные
10 4
Выходные данные
84
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes
Вершины графа находятся в точках пересечения линий сетки, а горизонтальные или вертикальные ребра единичной длины существуют только между ближайшими вершинами. Необходимо пройти по каждому ребру как минимум один раз совершив как можно меньше переходов.

Недавно Билл устроился на работу полицейским. Теперь ему предстоит каждый вечер обходить свой участок, который представляет собой прямоугольник, состоящий из N×M кварталов. Каждый квартал имеет вид квадрата размером 100×100 метров, кварталы отделены друг от друга прямыми улицами.

Таким образом, через участок Билла проходит \(N\) + 1 улица, идущая с запада на восток и \(M\) + 1 улица, идущая с севера на юг. Перекрестки разбивают улицы на (\(N\) + 1)\(M\) + (\(M\) + 1)\(N\) отрезков, каждый из которых имеет длину 100 метров.

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

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

Вводятся целые числа N и M, разделенные пробелом (1\( \le\)N, M\( \le\)10 000).

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

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

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

Один из возможных оптимальных путей для Билла во втором примере показан на рисунке.

Примеры
Входные данные
1 1
Выходные данные
4
Входные данные
2 2
Выходные данные
16
Входные данные
3 4
Выходные данные
38

Страница: << 1 2 3 4 5 6 7 >> Отображать по:
Выбрано
:
Отменить
|
Добавить в контест