битмаски

31 задача
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.

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

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

Формат ввода

В первой строке задается количество наборов входных данных T. В этой задаче T всегда равно 1.

В первой строке каждого описания набора дано два целых числа m и k ( 1≤m≤3, 1≤k≤13 ) — число различных типов клавиш и требуемая длина различных подстрок.

В следующих m строках описываются клавиши. Каждое описание состоит из маленькой английской буквы Ci​, написанной на клавише, и числа Ti​ — количества таких клавиш. Гарантируется, что суммарное количество клавиш не превосходит 16.

Формат вывода

Для каждого набора выведите строку, составленную из клавиш. Чем больше в ней различных подстрок длины k — тем выше будет балл.

Фермер Джон старается описать свой любимый USACO-контест Эльзе, но она не понимает почему ФД его так любит. ФД отвечает, моя любимая часть контеста - это когда Беси говорит сейчас время мычать и мычит весь контест.

Эльза всё равно не поняла, поэтому ФД выгрузил контест как текстовый файл и старается объяснить, что он значит. Контест определяется как массив из \(N\) (\(1\le N\le 10^6\)) целых чисел \(a_1, a_2, \dots, a_N\) (\(1\le a_i\le N\)). ФД определяет "МУУ" как массив из трёх целых чисел, из которых второе равно третьему, но не равно первому. Говорят, что МУУ случился во время контеста, если возможно удалить целые числа из массива так, что останется только МУУ.

Поскольку якобы Беси "мычала весь контест", помогите Эльзе посчитать количество различных МУУ, которые случились во время контеста. Два МУУ считаются различными, если они не состоят из одних и тех же чисел, идущих в одном и то же порядке.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\).

Вторая строка содержит \(N\) разделённых одиночными пробелами целых чисел \(a_1,a_2,\dots,a_N\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите количество различных МУУ, происшедших во время контеста.

**Заметим, что большие размеры целых чисел могут потребовать использование 64-битных целых типов данных (как long long в С/С++).**

Фермер Джон старается описать свой любимый USACO-контест Эльзе, но она не понимает почему ФД его так любит. ФД отвечает, моя любимая часть контеста - это когда Беси говорит сейчас время мычать и мычит весь контест.

Эльза всё равно не поняла, поэтому ФД выгрузил контест как текстовый файл и старается объяснить, что он значит. Контест определяется как массив из \(N\) (\(1\le N\le 10^6\)) целых чисел \(a_1, a_2, \dots, a_N\) (\(1\le a_i\le N\)). ФД определяет "МУУ" как массив из трёх целых чисел, из которых второе равно третьему, но не равно первому. Говорят, что МУУ случился во время контеста, если возможно удалить целые числа из массива так, что останется только МУУ.

Поскольку якобы Беси "мычала весь контест", помогите Эльзе посчитать количество различных МУУ, которые случились во время контеста. Два МУУ считаются различными, если они не состоят из одних и тех же чисел, идущих в одном и то же порядке.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\).

Вторая строка содержит \(N\) разделённых одиночными пробелами целых чисел \(a_1,a_2,\dots,a_N\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Выведите количество различных МУУ, происшедших во время контеста.

**Заметим, что большие размеры целых чисел могут потребовать использование 64-битных целых типов данных (как long long в С/С++).**

У Фермера Джона есть \(N\) коров, помеченных числами от \(1\) до \(N\) (\(2\le N\le 16\)). Отношение дружбы между этими коровами может быть смоделировано ненаправленным графом с \(M\) (\(0\le M\le N(N-1)/2\)) ребрами. Две коровы являются друзьями, если и только если между ними есть ребро в этом графе.

За одну операцию Вы можете добавить или удалить одно ребро в этом графе. Посчитайте минимальное количество операций, которое требуется выполнить, чтобы обеспечить следующее свойство в этом графе: Если коровы \(a\) и \(b\) - друзья, тогда для любой другой коровы \(c\) по крайней мере одна из коров \(a\) и \(b\) является другом коровы \(c\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\) и \(M\).

Каждая из следующих \(M\) строк содержит пару чисел \(a\) и \(b\) (\(1\le a<b\le N\)). Никакая пара друзей не повторится.

ФОРМАТ ВЫВОДА (на экран / stdout):

Количество ребер, которые требуется удалить или добавить.

Замечание: время на тест 2.5 сек, по умолчанию 1.25.

Замечание: необходимо использовать 64-битные типы данных (например "long long" в C/C++).

Фермер Джон тренирует своих коров стрельбе из лука следующим упражнением на координатной плоскости.

Всего имеется \(N (1 \leq N \leq 4 \cdot 10^4)\) прямоугольных мишеней со сторонами параллельными осям координат и \(4N\) коров. Каждая корова должна быть назначена различной вершине прямоугольника. В момент \(i\), для \(1 \leq i \leq N\):

  1. Цель \(i\) появляется.
  2. \(4\) коров, назначенные своим вершинам, стреляют по ним.
  3. Если выстрел коровы попадает во внутренность мишени, прежде чем он попадёт в назначенную вершину или пройдёт мимо, корова не выполнила упражнение.
  4. Мишень исчезает, чтобы освободить место для следующей мишени.

Каждая корова расположена на \(y\)-оси \((x = 0)\), и каждая мишень - это прямоугольник, где мишень \(i\) имеет нижний левый угол в точке \((X_1, y_1^{(i)})\) и правый верхний угол в точке \((x_2^{(i)}, y_2^{(i)})\). Эти координаты также удовлетворяют условиям \(1 \leq X_1 < x_2^{(i)}\leq 10^9\) и \(1 \leq y_1^{(i)} < y_2^{(i)} \leq 10^9\) (Замечание: \(X_1\) одно и то же для каждой мишени).

В дополнение, каждая корова имеет свой "фокусный угол", где она может работать. Поэтому корова поворачивается на этот специфический угол, когда стреляет. Полагая, что их стрела летит по прямой от их позиции к назначенной вершине траектория стрелы \(i\)'-ой коровы может быть описана \(s_i\) \((0 < |s_i| < 10^9)\), наклоном траектории.

ФД хочет минимизировать расстояние между самыми дальними коровами. Если ФД оптимально назначит каждой корове её целевую вершину и оптимально разместит их на оси \(y\), вычислите минимальное расстояние между самыми дальними коровами или коровы всегда не выполнят упражнение.

Каждый тест содержит \(T\) (\(1 \leq T \leq 10\)) независимых подтестов. Гарантируется, что сумма всех \(N\) по всем подтестам не превысит \(4\cdot 10^4\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(T\) (\(1 \leq T \leq 10\)), количество независимых подтестов. Каждый подтест задаётся следующим образом:

Первая строка подтеста содержит два целых числа \(N\) и \(X_1\), количество мишеней и самую левую координату мишеней соответственно.

Затем следуют \(N\) строк, где \(i\)-ая строка содержит 3 целых числа \(y_1^{(i)}\), \(y_2^{(i)}\), \(x_2^{(i)}\), - нижняя \(y\)-координата, верхняя \(y\)-координата и правая \(x\)-координата \(i\)-ой мишени соответственно.

Последняя строка состоит из \(4N\) целых чисел \(s_1, s_2, \dots, s_{4N}\) где \(s_i\) обозначает наклон траектории выстрела \(i\)-ой коровы.

ФОРМАТ ВЫВОДА (на экран / stdout):

Минимальное возможное расстояние между самыми дальними коровами или \(-1\) если коровы всегда не справятся с упражнением.

**Замечание: Ограничение по памяти для этой задачи 512MB, в два раза больше чем по умолчанию.**

Каждой из \(N\) (\(1\le N\le 5\cdot 10^5\)) коров Фермера Джона назначена ненулевая битовая строка длиной \(K\) (\(1\le K\le 20\)). Различным коровам может быть назначена одинаковая битовая строка.

Сходство Жаккара двух битовых строк определяется как количество (?единичных) битов в их пересечении, делённое на количество (?единичных) битов в их объединении. Например, сходство Жаккара битовых строк \(\texttt{11001}\) и \(\texttt{11010}\) равно \(2/4\).

Для каждой коровы выведите сумму сходств Жаккара её с битовыми строками всех других коров, включая её саму, по модулю \(10^9+7\). Точнее если сумма равна рациональному числу \(a/b\), где \(a\) и \(b\) целые числа, не имеющие общих делителей, выведите уникальное целое число \(x\) в интервале \([0,10^9+7)\) такое, что \(bx-a\) делится на \(10^9+7\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\) и \(K\).

Каждая из следующих \(N\) строк содержит целое число \(i\in (0,2^K)\), представляющее корову, ассоциированную с \(K\)-битовым представлением числа \(i\).

ФОРМАТ ВЫВОДА (на экран / stdin):

Выведите сумму по модулю \(10^9+7\) для каждой коровы на отдельной строке.

Field Day#90232

**Примечание. Ограничение по времени для решения этой задачи в Python – 15 секунд. Для других языков ограничение по времени по умолчанию составляет 2 секунды.**

Каждый из \(N\) амбаров фермера Джона (\(2\le N\le 10^5\)) выбрал команду из \(C\) коров (\(1\le C\le 18\)) для участия в дне поля. Порода каждой коровы либо Guernsey либо Holstein.

Разница между двумя командами определяется как количество позиций \(i\) (\(1 \leq i \leq C\)), при котором породы коров на \(i\)-х позициях отличаются. Для каждой команды \(t\) из \(1 \ldots N\) вычислите максимальную разницу между командой \(t\) и любой другой командой.

ФОРМАТ ВВОДА (ввод поступает с терминала/стандартного ввода):

Первая строка содержит \(C\) и \(N\).

Каждая из следующих \(N\) строк содержит строку длины \(C\) из G и H. Каждая строка соответствует команде.

ФОРМАТ ВЫВОДА (вывод на терминал / стандартный вывод):

Для каждой команды выведите максимальную разницу.

**Замечание: Время на тест в этой задаче 4s, в два раза больше обычного.**

Беси хочет пойти спать, ей нужно выключить все лампы. Как это сделать?

У Беси есть две битовые строки длиной \(N\) (\(2\le N\le 20\)), представляющие последовательность лампочек и переключателей, соответственно. Каждая лампочка включена(1) или выключена(0). Каждый переключатель активен(1) или неактивен(0).

Один *шаг* состоит из следующей последовательности операций:

  1. Переключить ровно один переключатель (сделать активным, если он неактивный или наоборот).
  2. Для каждого активного переключателя переключить состояние соответствующей лампочки (выключить, если она была включена или наоборот).
  3. Циклически сдвинуть переключатели вправо на один. А именно, если битовая строка соответствующая переключателям была изначально \(s_0s_1\dots s_{N-1}\) она превратится в строку \(s_{N-1}s_0s_1\dots s_{N-2}\).

Для каждого из \(T\) (\(1\le T\le 2\cdot 10^5\)) примеров описанной выше проблемы посчитайте минимальное количество ходов выключить все лампочки.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(T\) и \(N\).

Каждая из следующих \(T\) строк содержит пару битовых строк длиной \(N\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Для каждой пары выведите минимальное количество требуемых ходов, чтобы выключить все лампочки.

Очень жаркое лето. Фермер Дон решил купить некоторое количество кондиционеров.

У ФД имеется \(N\) коров (\(1 \leq N \leq 20\)), которые живут в амбаре, содержащем последовательность стойл, пронумерованные \(1 \ldots 100\). Корова \(i\) занимает диапазон стойл, начиная с \(s_i\) и заканчивая в \(t_i\). Диапазоны стойл, занимаемые коровами, не пересекаются. У коров различные требования к охлаждению. Корова \(i\) должна быть охлаждена на количество \(c_i\). Это значает, что для всех стойл, занимаемых коровой \(i\) температура должна быть уменьшена на \(c_i\) единиц.

Амбар содержит \(M\) кондиционеров, помеченных \(1 \ldots M\) (\(1 \leq M \leq 10\)). \(i\)-ый кондиционер стоит \(m_i\) единиц денег, если работает и охлаждает воздух (уменьшает температуру) в стойлах начиная в \(a_i\) и заканчивая в \(b_i\). Если работает, \(i\)-ый кондиционер уменьшает температуру во всех стойлах этого диапазона на величину \(p_i\) (\(1 \leq p_i \leq 10^6\)). Диапазоны стойл кондиционеров могут перекрываться.

Определите минимальное количество денег, которое ФД должен потратить, чтобы сделать температуру комфортабельной для всех коров во всех стойлах. Гарантируется, что это возможно сделать.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка ввода содержит \(N\) и \(M\).

Последующие \(N\) строк описывают коров. \(i\)-ая из этих строк содержит \(s_i\), \(t_i\), \(c_i\).

Последующие \(M\) строк описывают кондиционеры. \(i\)-ая из этих строк содержит \(a_i\), \(b_i\), \(p_i\), \(m_i\).

Для всех тестов, кроме тех, что в примере, можете полагать, что \(M = 10\).

ФОРМАТ ВЫВОДА (на экран / stdout):

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

Беси купила новый телефон. Кнопки на нём расположены так:

123
456
789

Беси может нажимать одну клавишу, две клавиши одновременно (имеющие общую сторону, всего 12 комбинаций), 4 клавиши одновременно, которые формируют квадрат (1245, 2356, 4578, or 5689).

Например, если телефонный номер 123659874, она может сэкономить время следующим образом:

  1. Нажать 1 и 2 одновременно.
  2. Нажать 3.
  3. Нажать 6, 5, 9, 8 одноврменно.
  4. Нажать 7 и 4 одновременно.

Однако при нажатии нескольких клавиш одновременно, цифры могут могут записаться в произвольном порядке. Например, после последнего нажатия (7 и 4 одновременно) может получиться 123596847 или 213659874

По заданной последовательности цифр, вычислите количество телефонных номеров, которые она может набрать, по модулю \(10^9+7\).

**Замечание: Время на тест для этой задачи 4s, в два раза больше чем обычно..**

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(T\) (\(1\le T\le 10\)), количество независимых тестов.

Каждая из последующих \(T\) строк содержит непустую строку цифр от 1 до 9. Гарантируется, что длина этой строки не превысит \(10^5\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Для каждого теста выведите количество телефонных номеров, которые Беси может набрать по модулю \(10^9+7\).

У Фермера Джона есть \(N\) подарков помеченных числами \(1\ldots N\) для его \(N\) коров, также помеченных числами \(1\ldots N\) (\(1\le N\le 18\)) Каждая корова имеет список предпочтений, который представляет собой перестановку из всех \(N\) подарков, так что корова предпочитает подарок, который появился в списке раньше подарку, который появился в списке позже.

ФД по лени просто назначил корове \(i\) подарок \(i\) для всех \(i\). Теперь коровы собрались и решили переназначить подарки так, чтобы у каждой коровы либо остался изначальный подарок, либо он был заменён на более предпочитаемый подарок.

Имеется также дополнительное ограничение: подарок может быть переназначен корове, если он изначально был назначен корове такого же типа (Holstein или Guernsey)). Задано \(Q\) (\(1\le Q\le \min(10^5,2^N)\))длин \(N\) строк пород для каждой из них вычислите количество переназначений, соответствующих ей.

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит \(N\).

Каждая из следующих \(N\) строк содержит список предпочтений одной коровы. Гарантируется, что каждая строка является перестановкой \(1\dots N\).

Следующая строка содержит \(Q\).

Каждая из последующих \(Q\) строк содержит строку пород, каждая имеет \(N\) символов длину и состоит только из символов G и H. Никакая из строк пород не появится более одного раза.

ФОРМАТ ВЫВОДА (на экран / stdout):

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

Cowmistry#90090
Беси нуждается в Вашей помощи. Она должна создать микстуру из трёх различных компонент. Некоторые из компонент нельзя смешивать друг с другом. В частности, две компоненты с метками \(a\) и \(b\) могут присутствовать в одной микстуре, только если \(a \oplus b \le K\) (\(1 \le K \le 10^9\)).

Замечание: Здесь, \(a\oplus b\) обозначает побитовое исключающее ИЛИ неотрицательных целых чисел \(a\) и \(b\). Эта операция эквивалентна сложению соответствующих пар битов по модулю 2 и игнорированию переноса. Например

\[0\oplus 0=1\oplus 1=0,\]
\[1\oplus 0=0\oplus 1=1,\]
\[5\oplus 7=101_2\oplus 111_2=010_2=2.\]

У Беси есть \(N\) (\(1\le N\le 2\cdot 10^4\)) ящиков с компонентами. \(i\)-ый ящик содержит компоненты с номерами от \(l_i\) до \(r_i\) включительно \((0\le l_i \le r_i \le 10^9)\). Никакие два ящика не содержат одинаковые компоненты. Беси хочет узнать, сколько уникальных микстур из трёх различных компонент она может создать. Две микстуры рассматриваются как различные, если хотя бы одна компонента есть в одной микстуре и отсутствует в другой. Ответ выводите по модулю \(10^9 + 7\).

ФОРМАТ ВВОДА (с клавиатуры / stdin):

Первая строка содержит два целых числа \(N\) и \(K\).

Каждая из последующих \(N\) строк содержит два разделённых пробелом целых числа \(l_i\) и \(r_i\). Гарантируется, что ящики даются в порядке возрастания содержимого. а именно , \(r_i<l_{i+1}\) для каждого \(1\le i<N\).

ФОРМАТ ВЫВОДА (на экран / stdout):

Количество микстур из трёх различных компонент, которые Беси может создать по модулю \(10^9 + 7\).

SCORING

  • В тестах 3-4 \(\max(K,r_N)\le 10^4\).
  • В тестах 5-6 \(K=2^k-1\) для некоторого целого \(k\ge 1\).
  • В тестах 7-11 \(\max(K,r_N)\le 10^6\).
  • В тестах 12-16 \(N\le 20\).
  • В тестах 17-21 нет дополнительных ограничений.

Автор: Benjamin Qi

Две коровы потенциальные друзья, если они любят мороженое одного вкуса.

\(N\) коров (\(2 \leq N \leq 50,000\)) фермера Джона выписали по 5 любимых сортов мороженого. Каждый вкус мороженого отображается положительным целым ID не более чем \(10^6\). Две коровы совместимы, если их списки содержат как минимум один общий вкус мороженого.

Определите количество пар коров, которые не совместимы.

ФОРМАТ ВВОДА (файл cowpatibility.in):

Первая строка ввода содержит \(N\). Каждая из последующих \(N\) строк содержит 5 целых чисел (все различные) представляющие любимые вкусы мороженых одной коровы.

ФОРМАТ ВЫВОДА (файл cowpatibility.out):

Выведите количество пар коров, которые не совместимы.

Haywire#89908

N коров (4 <= N <= 12, N четное), построили примитивную систему для проводной коммуникации пар дружественных коров
Каждая корова имеет ровно 3 друзей в амбаре и коровы должны занять один ряд в амбаре из N стойл. Провод длины L требуется, чтобы соединить друзей в стойлах на расстоянии L. Например, если друзья находятся в стойлах 4 и 7, то требуется провод длины 3, чтобы их соединить.
Каждая пара коров должна быть соединена отдельным проводом. Определите минимальную длину провода, требуемую для организации такой сети наилучшим образом.
PROBLEM NAME: haywire
Формат входных данных
* Строка 1: Цело число N. Коровы пронумерованы 1..N.
* Строки 2..1+N: Каждая строка содержит три разделенных пробелом целых числа в диапазоне от 1 до N. Строка i+1 содержит числовые идентификаторы трех друзей коровы i. Если корова i дружит с коровой j, то и корова j дружит с коровой i.
Формат выходных данных
* Строка 1: Минимальная суммарная длина провода, чтобы соединить все пары дружественных коров.
Примечание
Лучшее упорядочивание коров есть 6, 5, 1, 4, 2, 3, и оно требует только 17 единиц длины провода.

Коровы любят соревноваться в беге по лестницам небоскребов. А вниз потом едут на лифте.
Лифт имеет максимальную вместимость W (1 <= W <= 100,000,000) фунтов, а корова номер i весит Ci (1 <= Ci <= W) фунтов.
Помогите Бесси определить минимальное количество спусков лифта, чтобы переместить вниз все N (1 <= N <= 18) коров.
Сумма весов коров в каждом спуске не должна превышать W.
PROBLEM NAME: skyscraper
Формат входных данных
* Строка 1: N W разделенные одним пробелом
* Строки 2..1+N: Строка i+1 содержит целое число Ci, вес коровы i.
Формат выходных данных
* Строка 1: Минимальное целое, R, указывающее количество требуемых спусков.
* Строки 2..1+R: Каждая строка описывает множество коров, которые были в лифте во время каждого из R спусков. Каждая строка начинается с количества коров в текущем спуске, а затем номера коров через пробел.
Примечание
Мы можем поместить в лифт корову 3 и любую из оставшихся коров. Но все другие коровы не помещаются даже по две. В решении представленном выше, в первом спуске участвуют коровы 1 и 3, Во втором - корова 2, в третьем - корова 4. Существует несколько правильных решений для данного ввода.
Problem 2: Binary Sudoku [Brian Dean]
Коровы Фермера Джона любят играть в интересный вариант популярной игры «Судоку». Их версия включает решетку 9*9, состоящую из подрешеток 3*3, как и обычная Судоку. Однако коровья версия использует только двоичные цифры:
000 000 000 001 000 100 000 000 000
000 110 000 000 111 000 000 000 000
000 000 000 000 000 000 000 000 000
Цель этой «Двоичной судоку» – переключить кк можно меньше битов, так чтобы в каждой из 9 строк, в каждом из 9 столбцов, в каждой из 9 подрешеток 3*3 выполнялось свойство «even parity» - то есть содержалось четное количество единиц.
Для примера выше, достаточно сделать 3 переключения, чтобы получить такое решение:
000 000 000 001 000 100 001 000 100
000 110 000 000 110 000 000 000 000
000 000 000 000 000 000 000 000 000
По заданному начальному состоянию Двоичной Судоку, определите минимальное количество переключений, чтобы решить ее.
PROBLEM NAME: bsudoku
Формат входных данных
* Строки 1..9: Каждая строка представляет собой 9 символов 0 или 1, задающих начальное положение двоичной судоку.
Формат выходных данных
* Строка 1: Минимальное количество переключений, которые требуется сделать, чтобы стало выполняться свойство «even parity» для всех строк, всех столбцов, и всех подрешеток.
Примечание
Требуется 3 переключения.

Коровы планируют сбежать от Фермера Джона на плоту, через реку. Проблема заключается в том, что плот может не выдержать всех желающих. N коров (1 <= N <= 20) имеют веса w1 ... wN. У коров плохо со сложением, они не умеют выполнять перенос. Вам требуется определить размер наибольшей группы коров, веса которых можно сложить без переноса при сложении.
PROBLEM NAME: escape
Формат входных данных
* Строка 1: Количество коров, N (1 <= N <= 20).
* Строки 2..N+1: Каждая строка содержит вес одной коровы, целое число от 1...100,000,000.
Формат выходных данных
* Строка 1: максимальное количество коров, чьи веса могут быть сложены без переноса.


Примечание
Три веса 522, 6, 7311, могут быть сложены без переноса.
522 6 + 7311 ------ 7839

65998#65998
Профессор Чадов и аспирант Шлёпов оптимизируют производство октогена. Одним из важных компонентов для создания этой мощной взрывчатки является азотная кислота. Чтобы как можно меньше таскать сосуды с кислотой, лаборанты попросили аспиранта Шлёпова написать программу, которая будет рассчитывать, какие емкости надо принести со склада в лабораторию, чтобы выполнялись несколько условий:
  1. Объем азотной кислоты должен быть не меньше требуемого для работы;
  2. Объем азотной кислоты в лаборатории должен быть минимально возможным;
  3. При прочих равных следует предпочесть переноску меньшего количества емкостей;
Напишите программу, которая поможет лаборантам.

Формат ввода
В первой строке программы вводится натуральное число N (N ≤ 20) – количество емкостей с кислотой. Во второй строке указывается натуральное число V (0 ≤ V ≤ 200 л) – ограничение по объему. Далее в N строчках вводится по одному натуральному числу vi (vi ≤ 20 л) – объем емкости под номером i.
Формат вывода
Вывести в одной строке через пробел в порядке возрастания объемы емкостей, которые надо отнести в лабораторию, уложившись в заданные условия. Если это невозможно, вывести 0.

Для поиска полезных ископаемых ученые разработали специальный сканер.

Представим область для поисков как таблицу из \(k\) строк и \(n\) столбцов. Нумерация строк идет от \(1\) до \(k\) сверху вниз, нумерация столбцов от \(1\) до \(n\) слева направо. В каждой клетке таблицы могут находиться полезные ископаемые.

Сканер работает следующим образом: он может быть запущен в столбце \(p\) и возвращает количество клеток в зоне сканирования, которые содержат полезные ископаемые. Зона сканирования включает все клетки столбца \(p\), верхние \(k-1\) клетку столбца \(p-1\), верхние \(k-2\) клетки столбца \(p-2\), и так далее. На рисунке показана зона сканирования для поля с \(k = 3\), \(n=5\) и всех значений \(p\).


Вам даны значения, которые вернул сканер для всех \(p\), обозначим за \(b_p\) значение в столбце \(p\). Будем называть таблицу, где для каждой клетки определено, находятся ли в ней полезные ископаемые, корректной, если для нее сканер возвращает верные значения. Например, если в примере выше сканер вернул значения \([2, 1, 2, 3, 2]\), то одна из корректных таблиц может выглядеть следующим образом (клетки, содержащие ископаемые, обозначены черным треугольником):


По заданным значениям, которые вернул сканер, определите количество корректных таблиц и выведите остаток от деления этого количества на число \(10^9+7\). Обратите внимание, что, возможно, сканер неисправен, и корректных таблиц вообще нет, тогда необходимо вывести \(0\).

Формат входных данных
В первой строке даны два числа \(n\), \(k\) — количество столбцов и строк, соответственно (\(1 \le n \le 200\), \(1 \le k \le 7\)).

Во второй строке даны \(n\) чисел \(b_1, b_2, \ldots, b_n\) — значения, которые вернул сканер (\(0 \le b_i \le k^2\)).

Формат выходных данных
Выведите единственное число — остаток от деления количества различных корректных таблиц на \(10^9 + 7\).

В 2025 году в Берляндии впервые будет проводиться трёхдневный межпланетный съезд по вопросам проведения олимпиад по информатике. Доклады съезда разбиты на 12 секций, и теперь организаторам необходимо распределить секции по дням: в каждый день будут проводиться 4 секции.

Известно, что в съезде примут участие \(n\) человек. Каждый участник съезда выбрал 3 секции, которые он хочет посетить. Но поскольку в один день секции будут проводиться одновременно, каждый участник в один день может присутствовать не более чем на одной секции. Поэтому если в один день будут идти две или три секции, выбранные каким-то участником, то он всё равно сможет посетить только одну из них. Если же выбранные секции будут проходить в разные дни, участник сможет посетить их все.

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

Формат входных данных
Первая строка входных данных содержит целое число \(n\) (\(1 \leq n \leq 10\,000\)) — количество участников съезда.

В каждой из следующих \(n\) строк даны \(3\) попарно различных натуральных числа, не превосходящие \(12\), — номера секций, которые хочет посетить один из участников.

Формат выходных данных
Программа должна вывести \(3\) строки, в каждой из которых должны быть \(4\) числа через пробел — номера секций, проводимых в первый, второй и третий день съезда соответственно. Каждое из чисел от 1 до 12 должно встречаться в выводе ровно один раз. Если возможных оптимальных расписаний несколько, можно вывести любое из них.

Примечание
В примере из условия расписание составлено так, что второй и третий участник посетят все желаемые секции, а первый — две секции (\(5\) и одну из секций \(1\), \(6\)). Таким образом, суммарно будут посещены 8 секций. Можно показать, что этот результат улучшить нельзя.

Поделиться
Класснуть