Страница: 1 2 >> Отображать по:
ограничение по времени на тест
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

Напишите программу, вычисляющую остаток от деления заданного «длинного» числа на заданную цифру.

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

В первой строке задана цифра K (1≤K≤9). Во второй строке задано натуральное число N, состоящее из не более чем 100000 цифр.

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

Выведите остаток от деления N на K.

Примеры

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

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

5

123456789

4

1

123

0

ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes
Требуется подсчитать остаток от деления длинного числа на цифру.

Напишите программу, вычисляющую остаток от деления заданного «длинного» числа на заданную цифру.

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

В первой строке задана цифра K (1≤K≤9). Во второй строке задано натуральное число N, состоящее из не более чем 250 цифр.

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

Выведите остаток от деления N на K.

Примеры

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

5

123456789

4

1

123

0

#1117
  
Источники: [ Командные олимпиады, ВКОШП, 2008, Задача J ]
ограничение по времени на тест
10.0 second;
ограничение по памяти на тест
256 megabytes

Вася любит искать во всём закономерности. В его тетрадке записаны три числа A,B и C, и он хочет установить между ними какую-нибудь простую закономерность. Для начала он хочет узнать, можно ли этим числам приписать в конец несколько нулей так, чтобы сумма первых двух чисел стала равна третьему. Например, если у него записаны числа 9,34 и 43, то он может не приписывать к ним нулей сумма 9 и 34 и так равна 43. Если же у него записаны числа 23, 7 и 93, то он может приписать нуль к 7 и получить 70. После чего 23 + 70 = 93. Вам дано три натуральных числа A,B и C. Требуется найти неотрицательные целые числа n, m и k, такие что A × 10n + B × 10m = C × 10k.

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

На первой строке входного файла записано число A, на второй B, на третьей C. Все числа не меньше единицы и не больше 10100000.

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

Если числа n, m и k, удовлетворяющие условию, существует — выведите на первой строке YES, а на второй строке сами числа. Числа должны быть неотрицательными и не превосходить 106. Если решений несколько — выведите любое. Если же таких чисел не существует — выведите NO.

Примеры
Входные данные
9
34
43
Выходные данные
YES
0 0 0 
Входные данные
23
7
93
Выходные данные
YES
0 1 0 
Входные данные
1
2
4
Выходные данные
NO
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes

Петя и Вася играют в очередную интересную игру. У них есть лист бумаги, на котором изображены \(n\) кружочков, помеченных числами от 1 до \(n\). Участники по очереди рисуют стрелочки, соединяющие кружочки. При этом стрелочку из кружочка a в кружочек \(b\) разрешено проводить, если выполнены два условия:

1. еще нет стрелочки из \(a\) в \(b\);

2. нельзя дойти по стрелочкам из \(b\) в \(a\).

Например, в позиции на рис. 1 можно поставить одну из трех стрелочек (рис. 2).

Проигрывает тот, кто не может сделать ход.

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

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

Входной файл содержит одно число \(n\) (1 ≤ \(n\) ≤ 100).

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

Выведите в выходной файл число возможных позиций без ведущих нулей.

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

Примеры
Входные данные
3
Выходные данные
25

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