битмаски

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

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

Проводя весеннюю уборку, Вася наткнулся на ящик с клавишами и подсчитал, сколько раз встречается каждая клавиша. Теперь он хочет составить из этих клавиш одну строку и украсить ей интерьер своего кабинета. Вася считает, что чем больше различных подстрок длины 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.

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

Центральная площадь Зожбурга представляет собой прямоугольник, разделенный на одинаковые единичные квадраты. Строки пронумерованы сверху вниз с единицы, столбцы слева направо с единицы. Каждый квадрат площади имеет координаты \(r\) и \(c\) — номер строки и столбца, соответственно.

На площади находится прямоугольный газон со сторонами, параллельными сторонам площади. Координаты левого верхнего углового квадрата газона \((R_L, C_L)\), координаты правого нижнего углового квадрата газона \((R_R, C_R)\). Вокруг газона оборудованы \(n\) дорожек для \(n\) бегунов. Дорожка \(i\) находится на расстоянии \(i\) от границы газона, на дорожке \(i\) находится бегун с номером \(i\). Бегун \(i\) стартует с квадрата с координатами \((r_i, c_i)\). Бегуны стартуют одновременно с одинаковой скоростью: через каждую секунду каждый спорстмен меняет текущий квадрат на своей дорожке на следующий квадрат на своей дорожке в направлении против часовой стрелки.

На прямоугольном газоне в квадрате \((R_p, C_p)\) стоит фотограф, цель которого — сделать красивую фотографию. Фотограф тестирует инновационную камеру с двойным объективом. Эта камера делает снимок одновременно в двух противоположных направлениях. Фотограф считает фотографию красивой, если все бегуны в момент, когда он делает снимок, находятся в одновременно в строке \(R_p\) или в стоблце \(C_p\). При этом благодаря инновационному свойству камеры они могут быть либо в одной строке с ним и справа и слева от него, либо в одном столбце с фотографом и выше и ниже него.

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

Формат входных данных
В первой строке входных данных находится число \(n\) (\(1 \le n \le 18\)) — количество бегунов. В следующей строке ввода даны шесть целых чисел \(R_L\), \(C_L\), \(R_R\), \(C_R\) (\(n + 1 \le R_L \le R_R \le 100 - n\), \(n + 1 \le C_L \le C_R \le 100 - n\)), \(R_p\) (\(R_L \le R_p \le R_R\)), \(C_p\) (\(C_L \le C_p \le C_R\)) — координаты левого верхнего квадрата газона, правого нижнего квадрата газона, координаты фотографа, соответственно. Гарантируется, что \(R_R - R_L + C_R - C_L\) делится на \(4\).

В следующих \(n\) строках даны два числа \(r_i\), \(c_i\) — стартовые координаты бегуна \(i\). Гарантируется, что стартовые координаты бегуна \(i\) находятся на дорожке \(i\), на каждой дорожке находится один бегун, дорожка \(i\) находится на расстоянии \(i\) от границы газона.

Формат выходных данных
Выведите единственное число \(t\) — через какое минимальное количество секунд \(t\) после старта забега фотограф сможет сделать красивую фотографию, или \(-1\), если фотографию сделать не получится.

 

Рисунок ко второму примеру.

image
Стартовое положение бегунов.

image
Положение бегунов через 3 секунды. Все бегуны находятся в строке \(R_p\), и фотограф делает красивое фото.

Город Восточный постоянно страдает от недостатка воды. Для устранения этой проблемы была построена новая водопроводная труба. Строительство трубы началось с обоих концов одновременно, и спустя некоторое время половины соединились. Ну, почти. Первая половина трубы заканчивалась в точке (x1, y1), а вторая - в точке (x2, y2).

К сожалению, осталось лишь несколько отрезков трубы различной длины. Более того, из-за специфики местной технологии трубы могут быть проложены только в направлении с севера на юг или с востока на запад и соединяются, образуя или прямую, или угол 90 градусов. Требуется, зная длины отрезков труб L1, L2, ..., LK и количество отрезков каждой длины C1, C2, ..., CK, сконструировать трубу, соединяющую две заданные точки, или определить, что это невозможно.

Ограничения: 1 <= K <= 4, 1 <= x1, y1, x2, y2, Li <= 1000, 1 <= Ci <= 10, все числа целые.



Входные данные
В первой строке находятся числа x1, y1, x2, y2, K, затем 2K чисел: L1, L2, ..., LK, C1, C2, ..., CK.

Выходные данные
Вывести одно число - минимальное количество нужных отрезков труб или -1, если соединение невозможно.
Поделиться
Класснуть