• A
  • B
  • C
  • D
  • E
  • F
  • G
  • H

Булевые функции

Задача A. Бинарные отношения

Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт

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

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

В первой строке содержится число n — размер носителя (1 ⩽ n ⩽ 100). В следующих n строках находится по n чисел — описание первого отношения. Если j-е число i-й строки равно 1, то пара (i, j) лежит в отношении, иначе эта пара не лежит в отношении. В следующих n строках находится описание второго отношения в таком же формате.

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

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

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

Примеры

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

3
0 1 0
0 0 1
1 0 0
1 1 0
0 1 1
1 0 1

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

0 1 0 1 0
1 0 0 1 0
0 1 1
1 0 1
1 1 0

Решение

Задача B. Теорема Поста

Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт

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

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

В первой строке содержится одно целое число n — количество функций (1 ⩽ n ⩽ 1000).

В следующих n строках содержится описание функций. Первым в строке дано число si — количество аргументов очередной функции (0 ⩽ si ⩽ 5). Далее дана строка ai из 2^si символов 0 и 1, она описывает таблицу истинности. Функция возвращает aij, если ей на вход подать представление j в двоичной системе счисления. Порядок аргументов соответствует порядку от младших битов к старшим.

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

В единственной строке выведите YES, если набор полон, и NO иначе.

Примеры

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

3
2 0111
2 0001
1 10

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

YES

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

2
2 0110
1 01

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

NO

Решение

Задача C. Схема из функциональных элементов

Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт

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

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

В первой строке указано натуральное число n — количество вершин в схеме (1 ⩽ n ⩽ 27). В следующих строках описано устройство схемы.

Элементы даны в порядке от первого до n-го. Каждый элемент описывается либо одной (если это переменная-лист), либо двумя строчками (если это функция). Все переменные различны. Первое целое число m в первой строчке из описания i-го элемента — количество входов для этого элемента (0 ⩽ m ⩽ 5) (если элемент — переменная, то m = 0). Далее в этой же строке перечислены m натуральных чисел — номера элементов, значения с которых подаются на вход i-му.

Если m > 0, то в следующей строке дано 2^m целых чисел a0, a1, a[2^m − 1]. Где aj — ответ, который выдает i-й элемент, если на входы подать двоичное представление числа j (0 ⩽ aj ⩽ 1). Более старшим разрядам j соответствуют более ранние (с меньшими индексами) входы, в порядке, написанном в предыдущей строке.

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

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

Назовем количество переменных-листьев k. В следующей строке выведите битовую строчку длины 2^k, где в позиции j будет число, выдаваемое схемой если на вход подается число j, старшим разрядам j соответствуют листы, имеющие меньшие индексы.

Примеры

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

5
0
0
2 1 2
1 1 0 1
0
2 3 4
1 0 0 1

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

2
01011001

Замечание

Обозначим как ans[i] — число, которое получается в i-м элементе. Тогда в данном примере значения функций, например, для 3-го элемента означают

ans[1]ans[2]ans[3]
001
011
100
111

Решение

Задача D. Построение схемы из функциональных элементов

Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт

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

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

В первой строке находится число n — количество переменных (2 ⩽ n ⩽ 10). Следующие 2^n строк имеют следующий вид: значения переменных x1, x2, , xn и значение функции при этих переменных. Строки даны в возрастающем лексикографическом порядке значений переменных.

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

В первой строке выведите число m — количество элементов в вашей схеме (включая n элементов, отвечающие за исходное значение переменных). Элементы с номерами с 1 до n соответствуют входным переменным _x1, x2, , xn. В следующих m−n строках выведите описание каждого нового элемента в схеме. Описание элемента состоит из номера операции в этом элементе и номеров аргументов, которые подаются на вход этому элементу.

Операция не имеет номер 1, и имеет номер 2, или имеет номер 3.

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

Разрешается использовать не более 10^5 элементов. Гарантируется, что существует схема, подходящее под данное ограничение.

Примеры

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

3
000 0
001 0
010 0
011 0
100 1
101 0
110 1
111 1

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

6
1 3
3 2 4
2 1 5

Замечание

Функцию из примера можно задать формулой x1 ∧ (x2 ∨ ¬x3). Ответ на пример — схема, реализующая эту формулу.

Решение

Задача E. Полином Жегалкина

Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт

Дана таблица истинности. Найдите по ней коэффициенты полинома Жегалкина.

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

В первой строке содержится число n — количество переменных в функции (1 ⩽ n ⩽ 10). Следующие 2^n строчек имеют следующий вид: значения переменных x1, x2, , xn и значение функции при этих переменных. Строки даны в лексикографически возрастающем порядке значений переменных.

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

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

Примеры

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

2
00 0
01 1
10 0
11 1

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

00 0
01 1
10 0
11 0

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

2
00 1
01 0
10 0
11 1

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

00 1
01 1
10 1
11 0

Решение

Задача F. Форма Хорна

Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт

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

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

Первая строка содержит два натуральных числа n, k — количество литералов и дизъюнктов (скобок в формуле) соответственно (1 ⩽ n, k ⩽ 100).

Следующие k строк описывают дизъюнкт в следующем формате: n чисел xi ∈ {−1, 0, 1}.

xi = 1i-й литерал входит в дизъюнкт без отрицания.

xi = 0i-й литерал входит в дизъюнкт с отрицанием.

xi = −1i-й литерал не входит в дизъюнкт.

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

Выведите YES (без кавычек), если функция — тождественный ноль. Иначе выведите NO (без кавычек).

Примеры

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

3 3
1 0 0 1 0
-1 0 1

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

NO

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

1 2
1
0

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

YES

Замечание

В первом примере формула выглядит следующим образом: (x1 ∨ x̅2) ∧ (x̅1 ∨ x2 ∨ x̅3) ∧ (x̅2 ∨ x3)

Второй пример: (x1) ∧ (x̅1)

Решение

Задача G. К или Д?

Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт

Дано целое число n и n неотрицательных целых чисел. Требуется проверить, можно ли составить формулу, используя побитовые И (&), ИЛИ (|), НЕ (~), круглые скобки ((, )) и данные числа, чтобы ее результатом являлось число s. Если да, то выведите любую. Вместо самих чисел в формуле должны быть их порядковые номера во входных данных. Для лучшего понимания разберите тесты из условия.

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

На первой строке содержится целое число n (1 ⩽ n ⩽ 5).

Во второйnцелых чисел ai (0 ⩽ ai ⩽ 2^32 − 1).

В последней строке содержится ровно одно целое число s.

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

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

Примеры

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

1
8
8

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

1

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

2
48 83
68

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

Impossible

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

2
20 8
8

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

2& ~1

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

1
1
4294967295

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

Impossible

Замечание

Коды символов в ASCII: & — 38, | — 124, ~ — 126, ( — 40, ) — 41.

Решение

Задача H. Штрих Шеффера

Ограничение по времени: 2 секунды
Ограничение по памяти: 256 мегабайт

Известно, что с помощью штриха Шеффера (отрицание конъюнкции) можно выразить любую булеву функцию. Таблица истинности штриха Шеффера приведена ниже:

xyx|y
001
011
101
110

Рассмотрим задачу сложения двух двоичных чисел A и B, каждое из которых состоит из N бит. Биты в числах A и B пронумерованы от 0 (младший разряд) до N − 1 (старший разряд). Сумму A и B всегда можно представить как N + 1-битное число. Назовем самый старший бит суммы (бит с номером N ) битом переполнения.

Вам нужно построить булеву формулу, вычисляющую значение бита переполнения для произвольных N-битных чисел A и B, используя только штрих Шеффера. Формула строится по следующим правилам:

  • Ai — формула, равная значению i-го бита числаA.
  • Bi — формула, равная значению i-го бита числаB.
  • (x|y) — формула, обозначающая применение штриха Шеффера к x и y, где x и y — некоторые формулы.

Индекс i в формулах для битов чисел A и _B_записывайте десятичным числом без ведущих нулей, например, бит числа A с номером 12 должен быть записан как A12. Вокруг каждого применения штриха Шеффера должны стоять скобки (согласно третьему правилу). Внутри формулы не должно быть пробелов.

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

Вход содержит число N (1 ⩽ N ⩽ 100).

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

Выведите формулу, вычисляющую бит переполнения суммы двух N-битных чисел A и B по правилам, описанным в условии. Для обозначения штриха Шеффера используйте символ | (ASCII код 124).

Размер выходного файла не должен превосходить 50N байт.

Примеры

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

2

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

((((A0|B0)|(A0|B0))|((A1|A1)|(B1|B1)))|(A1|B1))

Решение