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


Олимпиадный тренинг

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

B. Кассир в кинотеатре

дп реализация *1500

Залы всех кинотеатров Берлядии представляют собой прямоугольники в K рядов по K кресел в каждом, причем K — нечетное число. Ряды и места нумеруются с 1 до K. Из соображений безопасности, человек, пришедший в кассу за билетами, не может сам выбрать места. Раньше это делал кассир, а теперь этим будет заниматься специальная программа рассадки. Было выяснено, что подавляющее большинство жителей Берляндии в кинотеатре предпочитают смотреть фильм, поэтому хотят сидеть как можно ближе к центру зала. Кроме того, компания из M человек, желающая посмотреть фильм, хочет непременно занять M последовательных мест в одном ряду. Сформулируем алгоритм, в соответствии с которым программа выдает людям билеты. При поступлении запроса на M мест программа должна определить номер ряда x и отрезок [yl, yr] номеров кресел на этом ряду, причем yr - yl + 1 = M. Из всех таких возможных вариантов программа должна выдать тот, для которого значение функции суммарной удаленности от центра минимально. Пусть — номер ряда и номер места у самого "центрального" кресла. Тогда значением функции удаленности от центра зала будет . Если вариантов с минимальным значением этой функции несколько, то программа должна выдать тот, что ближе к экрану (т.е. номер ряда x меньше). Если же вновь имеется неоднозначность, следует выдать вариант с минимальным yl. Если вы еще не догадались, то ваша задача — промоделировать работу программы.

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

Первая строка содержит два целых числа N и K (1 ≤ N ≤ 1000, 1 ≤ K ≤ 99) — число запросов и размер зала соответственно. Во второй строке содержится N целых чисел Mi из диапазона [1, K], разделенных пробелами, — запросы к программе.

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

Выведите N строк. В i-й строке выведите «-1» (без кавычек), если невозможно найти Mi свободных подряд идущих кресел в одном ряду, или выведите тройку x, yl, yr в противном случае. Числа разделяйте пробелами.

D. НОВП

дп *2800

Эта задача отличается от той, которая предлагалась на онлайн-контесте.

Последовательность a1, a2, ..., an называется возрастающей, если ai < ai + 1 для i < n.

Последовательность s1, s2, ..., sk называется подпоследовательностью последовательности a1, a2, ..., an, если найдется такой набор индексов 1 ≤ i1 < i2 < ... < ik ≤ n, что aij = sj. Иными словами, последовательность s может быть получена из a путем вычеркивания некоторых элементов.

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

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

Первая строка содержит целое число n (1 ≤ n ≤ 500) - длину первой последовательности. Во второй строке записаны n целых чисел из диапазона [0, 109], разделенные пробелами — элементы первой последовательности. В третьей строке записано целое число m (1 ≤ m ≤ 500) - длина второй последовательности. Во четвертой строке записаны m целых чисел из диапазона [0, 109], разделенные пробелами — элементы второй последовательности.

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

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

D. Очередная задача на подпоследовательности

дп Комбинаторика *1900

Последовательность целых чисел \(a_1, a_2, \dots, a_k\) называется хорошим массивом, если \(a_1 = k - 1\) и \(a_1 > 0\). Например последовательности \([3, -1, 44, 0], [1, -99]\) — хорошие массивы, а последовательности \([3, 7, 8], [2, 5, 4, 1], [0]\) — нет.

Последовательность целых чисел называется хорошей, если она состоит из положительного количества подряд идущих хороших массивов. Например последовательности \([2, -3, 0, 1, 4]\), \([1, 2, 3, -3, -9, 4]\) — хорошие, а последовательности \([2, -3, 0, 1]\), \([1, 2, 3, -3 -9, 4, 1]\) — нет.

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

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

В первой строке задано число \(n~(1 \le n \le 10^3)\) — длина изначальной последовательности. Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n~(-10^9 \le a_i \le 10^9)\) — сама последовательность.

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

В единственной строке выведите число — количество подпоследовательностей исходной последовательности, которые являются хорошими последовательностями, по модулю 998244353.

Примечание

В первом тестовом примере две хорошие подпоследовательности — \([a_1, a_2, a_3]\) и \([a_2, a_3]\).

Во втором тестовом примере семь хороших подпоследовательностей — \([a_1, a_2, a_3, a_4], [a_1, a_2], [a_1, a_3], [a_1, a_4], [a_2, a_3], [a_2, a_4]\) и \([a_3, a_4]\).

G. Два-пути

Деревья дп Структуры данных *2700

Вам задано взвешенное дерево (неориентированный связный граф без циклов, петель и кратных ребер) из \(n\) вершин. Ребро \(\{u_j, v_j\}\) имеет вес \(w_j\). Также, каждой вершине \(i\) присвоено значение \(a_i\).

Назовем путь, начинающийся в вершине \(u\) и заканчивающийся в \(v\), в котором по каждому ребру можно пройти не более двух раз (независимо от направления), 2-путем. Вершины в 2-пути могут встречаться любое количество раз (в том числе начальная и конечная).

Для каждого 2-пути \(p\) можно найти его профит \(\text{Pr}(p) = \sum\limits_{v \in \text{различные вершины в } p}{a_v} - \sum\limits_{e \in \text{различные ребра в } p}{k_e \cdot w_e}\), где \(k_e\) равно количеству вхождений \(e\) в \(p\). То есть, вершины учитываются ровно один раз, а ребра — столько, сколько раз каждое встречается в \(p\).

Вам необходимо ответить на \(m\) запросов. Каждый запрос является парой вершин \((qu, qv)\). Для каждого запроса найдите 2-путь \(p\) из \(qu\) в \(qv\) с максимальным профитом \(\text{Pr}(p)\).

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

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 3 \cdot 10^5\), \(1 \le q \le 4 \cdot 10^5\)) — количество вершин в дереве и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 10^9)\) — значения, присвоенные вершинам.

Следующие \(n - 1\) строк содержат описания ребер: каждая строка содержит три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\), \(1 \le w_i \le 10^9\)) — есть ребро \(\{u_i, v_i\}\) с весом \(w_i\) в заданном дереве.

Следующие \(q\) строк содержат запросы (по одному в строке). Каждый запрос содержит два целых числа \(qu_i\) и \(qv_i\) \((1 \le qu_i, qv_i \le n)\) — концы 2-пути, который Вам надо найти.

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

Для каждого запроса выведите по одному числу в строке — максимальный профит \(\text{Pr}(p)\) некоторого 2-пути \(p\) с соответствующими концами.

Примечание

Разъяснение запросов:

  1. \((1, 1)\) — один из оптимальных 2-путей следующий: \(1 \rightarrow 2 \rightarrow 4 \rightarrow 5 \rightarrow 4 \rightarrow 2 \rightarrow 3 \rightarrow 2 \rightarrow 1\). \(\text{Pr}(p) = (a_1 + a_2 + a_3 + a_4 + a_5) - (2 \cdot w(1,2) + 2 \cdot w(2,3) + 2 \cdot w(2,4) + 2 \cdot w(4,5)) = 21 - 2 \cdot 12 = 9\).
  2. \((4, 4)\): \(4 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 3 \rightarrow 2 \rightarrow 4\). \(\text{Pr}(p) = (a_1 + a_2 + a_3 + a_4) - 2 \cdot (w(1,2) + w(2,3) + w(2,4)) = 19 - 2 \cdot 10 = 9\).
  3. \((5, 6)\): \(5 \rightarrow 4 \rightarrow 2 \rightarrow 3 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 4 \rightarrow 6\).
  4. \((6, 4)\): \(6 \rightarrow 4 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 3 \rightarrow 2 \rightarrow 4\).
  5. \((3, 4)\): \(3 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 4\).
  6. \((3, 7)\): \(3 \rightarrow 2 \rightarrow 1 \rightarrow 2 \rightarrow 4 \rightarrow 5 \rightarrow 4 \rightarrow 2 \rightarrow 3 \rightarrow 7\).

F. Аббревиация

дп Строки хэши *2200

Дан текст, состоящий из \(n\) слов, разделённых пробелами. Между каждой парой соседних слов ровно один пробел. Перед первым словом и после последнего слова нет пробелов. Длина текста — это количество букв и пробелов в нём. \(w_i\) обозначает \(i\)-е слово текста. Все слова состоят только из строчных букв латинского алфавита.

Определим отрезок слов \(w[i..j]\) как последовательность слов \(w_i, w_{i + 1}, \dots, w_j\). Два отрезка слов \(w[i_1 .. j_1]\) и \(w[i_2 .. j_2]\) считаются одинаковыми, если \(j_1 - i_1 = j_2 - i_2\), \(j_1 \ge i_1\), \(j_2 \ge i_2\), и для каждого \(t \in [0, j_1 - i_1]\) \(w_{i_1 + t} = w_{i_2 + t}\). Например, в тексте "to be or not to be" отрезки \(w[1..2]\) и \(w[5..6]\) одинаковы, они соответствуют последовательности слов "to be".

Аббревиация — это замена некоторых слов в тексте их первыми заглавными буквами. Чтобы использовать аббревиацию, вы должны выбрать хотя бы два непересекающихся одинаковых отрезка слов и заменить каждый из выбранных отрезков на строку, состоящую из первых букв этих слов (буквы в новой строке являются заглавными). К примеру, в тексте "a ab a a b ab a a b c" можно заменить отрезки слов \(w[2..4]\) и \(w[6..8]\) аббревиацией "AAA" и получить текст "a AAA b AAA b c", или заменить \(w[2..5]\) и \(w[6..9]\) на аббревиацию "AAAB" и получить текст "a AAAB AAAB c".

Чему равна минимальная длина текста после использования не более чем одной аббревиации?

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

В первой строке записано одно число \(n\) (\(1 \le n \le 300\)) — количество слов в тексте.

Следующая строка содержит \(n\) слов \(w_1, w_2, \dots, w_n\), разделённых пробелами. Каждое слово состоит из строчных латинских букв.

Гарантируется, что длина текста не превосходит \(10^5\).

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

Выведите одно целое число — минимальную длину текста после использования не более чем одной аббревиации.

Примечание

В первом примере можно получить текст "TB or not TB".

Во втором примере можно получить текст "a AAAB AAAB c".

В третьем примере можно получить текст "AB aa AB bb".

E. Соня и магазины

Бинарный поиск Деревья дп жадные алгоритмы кратчайшие пути Структуры данных *2400

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

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

У Сони есть ровно \(k\) друзей, которым она доверяет. Если она откроет магазин, один с её друзей должен там работать и смотреть, чтобы никто не ел мороженое не заплатив. Поскольку Соня не хочет пропускать важные соревнования по программированию, непосредственно в магазинах она работать не будет.

Соня хочет, чтобы все её магазины мороженого образовали простой путь длины \(r\) (\(1 \le r \le k\)), то есть были расположены в различных перекрёстках \(f_1, f_2, \dots, f_r\) и существовала улица между \(f_i\) и \(f_{i+1}\) для всех \(i\) от \(1\) до \(r-1\).

Девочка заботится о потенциальных покупателях, поэтому, она также хочет минимизировать максимальное расстояние от перекрестков до ближайшего магазина мороженого. Расстояние между двумя перекрестками \(a\) и \(b\) равно сумме длин всех улиц, которые нужно пройти, чтобы попасть с перекрестка \(a\) на перекресток \(b\). Таким образом, девочка хочет минимизировать

\(\)\max_{a} \min_{1 \le i \le r} d_{a,f_i}\(\),

где \(a\) принимает значение всевозможных \(n\) перекрёстков, \(f_i\) — перекресток с \(i\)-м магазином Сони, а \(d_{x,y}\) — расстояние между перекрестками \(x\) и \(y\).

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

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

Первая строка содержит два целых числа \(n\) и \(k\) (\(1\leq k\leq n\leq 10^5\)) — количество перекрестков и друзей соответственно.

Каждая из следующих \(n-1\) строк содержит три целых числа \(u_i\), \(v_i\) и \(d_i\) (\(1\leq u_i, v_i\leq n\), \(v_i\neq u_i\), \(1\leq d\leq 10^4\)) — перекрестки, которые соединяет улица и длина этой улицы. Гарантируется, что между любой парой перекрестков не более одной улицы. Гарантируется, что можно доехать из любого перекрестка в любой другой, двигаясь только по улицам.

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

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

Примечание

В первом примере можно выбрать путь 2-4, тогда ответ будет 4.

Первый пример.

Во втором примере можно выбрать путь 4-1-2, тогда ответ будет 7.

Второй пример.

D. Поликарп и Div 3

дп жадные алгоритмы теория чисел *1500

Поликарп очень любит числа, которые делятся на \(3\).

У него есть длинное число \(s\). Поликарп хочет вырезать из него наибольшее количество чисел, которые делятся на \(3\). Для этого он проводит произвольное количество вертикальных разрезов между парами соседних цифр. В результате, после проведения \(m\) разрезов получается \(m+1\) число. Каждое из полученных чисел Поликарп анализирует и подсчитывает количество тех, которые делятся на \(3\).

Например, если исходное число \(s=3121\), то Поликарп может разрезать его на три части двумя разрезами \(3|1|21\). В результате он получит два числа, которые делятся на \(3\).

Поликарп может провести произвольное количество разрезов, каждый разрез проводится между парой соседних цифр. Числа, которые получатся в итоге не могут содержать лишних лидирующих нулей (то есть число может начинаться с 0 тогда и только тогда, когда это число в точности один символ '0'). Например, 007, 01 и 00099 не являются корректными числами, а 90, 0 и 10001 — являются.

Какое наибольшее количество делящихся на три чисел он сможет получить?

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

В первой строке входных данных записано целое положительное число \(s\). Длина числа \(s\) — от \(1\) до \(2\cdot10^5\) цифр. Первая (самая левая) цифра отлична от 0.

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

Выведите наибольшее количество делящихся на \(3\) чисел, которые Поликарп сможет получить, проведя вертикальные разрезы в заданном числе \(s\).

Примечание

Пример оптимального разделения числа для первого теста — 3|1|21.

Во втором тесте никаких разрезов совершать не нужно. Заданное число 6 образует одно число, делящееся на \(3\).

В третьем тесте надо провести разрезы между каждой парой цифр. В результате получим одну цифру 1 и \(33\) цифры 0. Каждая из \(33\) цифр 0 образует число, которое делится на \(3\).

Пример оптимального разделения числа для четвертого теста — 2|0|1|9|201|81. Числа \(0\), \(9\), \(201\) и \(81\) делятся на \(3\).

F. Xor-пути

meet-in-the-middle битмаски дп Перебор *2100

Задано прямоугольное поле размера \(n \times m\). В каждой клетке записано целое число; число, записанное в клетке (\(i, j\)) равно \(a_{i, j}\). Ваша задача — посчитать количество путей из клетки (\(1, 1\)) в клетку (\(n, m\)), удовлетворяющих следующим условиям:

  • Из клетки можно перемещаться только вниз или только вправо. Более формально, из клетки (\(i, j\)) можно переместиться в клетку (\(i, j + 1\)) или в клетку (\(i + 1, j\)). Клетка, в которую совершается перемещение, не может находиться за пределами поля.
  • Xor всех чисел на пути из клетки (\(1, 1\)) в клетку (\(n, m\)) должен быть равен \(k\) (xor это побитовое исключающее ИЛИ, эта операция представлена как '^' в Java или C++ и "xor" в Pascal).

Найдите количество подходящих путей для заданного поля.

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

Первая строка входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 20\), \(0 \le k \le 10^{18}\)) — высота и ширина поля, и число \(k\).

Следующие \(n\) строк содержат по \(m\) целых чисел каждая, где \(j\)-й элемент \(i\)-й строки равен \(a_{i, j}\) (\(0 \le a_{i, j} \le 10^{18}\)).

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

Выведите одно целое число — количество путей из (\(1, 1\)) в (\(n, m\)) с xor всех чисел на пути равным \(k\).

Примечание

Все пути из первого тестового примера:

  • \((1, 1) \rightarrow (2, 1) \rightarrow (3, 1) \rightarrow (3, 2) \rightarrow (3, 3)\);
  • \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2) \rightarrow (2, 3) \rightarrow (3, 3)\);
  • \((1, 1) \rightarrow (1, 2) \rightarrow (2, 2) \rightarrow (3, 2) \rightarrow (3, 3)\).

Все пути из второго тестового примера:

  • \((1, 1) \rightarrow (2, 1) \rightarrow (3, 1) \rightarrow (3, 2) \rightarrow (3, 3) \rightarrow (3, 4)\);
  • \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2) \rightarrow (3, 2) \rightarrow (3, 3) \rightarrow (3, 4)\);
  • \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2) \rightarrow (2, 3) \rightarrow (2, 4) \rightarrow (3, 4)\);
  • \((1, 1) \rightarrow (1, 2) \rightarrow (2, 2) \rightarrow (2, 3) \rightarrow (3, 3) \rightarrow (3, 4)\);
  • \((1, 1) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3) \rightarrow (3, 3) \rightarrow (3, 4)\).

E. Мини-метро

дп *3400

В упрощённой версии игры мини-метро есть только одна линия метро, на которой поезда ходят всегда в одну сторону. На линии расположено \(n\) станций, на \(i\)-й станции в начале игры ждут поезда \(a_i\) людей. Игра начинается в начале \(0\)-го часа. В конце каждого часа (за пару минут до конца часа) на станцию \(i\) мгновенно прибывают ещё \(b_i\) людей. Если в какой-то момент число людей на \(i\)-й станции превышает \(c_i\), то вы проиграли.

У игрока в распоряжении есть несколько поездов, которые он может распределить по часам. Вместимость каждого поезда — \(k\) пассажиров. В середине назначенного ему часа поезд моментально проходит с \(1\)-й по \(n\)-ю станции, забирая с каждой станции столько человек, сколько ещё может вместить. То есть поезд не может забрать людей со станции \(i\), если ещё есть люди на станции \(i-1\).

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

Игрок хочет продержаться в игре \(t\) часов. Определите, какое минимальное число поездов ему для этого потребуется.

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

Первая строка содержит три целых числа \(n\), \(t\) и \(k\) (\(1 \leq n, t \leq 200, 1 \leq k \leq 10^9\)) — количество станций на линии, количество часов, которое мы хотим продержаться, и вместимость каждого поезда, соответственно.

Каждая из следующих \(n\) строк содержит три целых числа \(a_i\), \(b_i\) и \(c_i\) (\(0 \leq a_i, b_i \leq c_i \leq 10^9\)) — количество людей на \(i\)-й станции в начале игры, количество людей, прибывающих на \(i\)-ю станцию в конце каждого часа, и максимальное разрешенное число людей на \(i\)-й станции, соответственно.

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

Выведите одно целое число — ответ на задачу.

Примечание

Рассмотрим тест из условия. Есть три станции, на первой изначально 2 человека, на второй — 3, а на третьей — 4. Максимальная вместимость станций — 10, 9 и 8 соответственно.

Одна из выигрышных стратегий — это пустить два поезда в первый и третий часы. Тогда в первый час поезд забирает всех людей со всех станций, а затем, в конце часа на первую станцию прибывают 4 человека, на вторую — 3, а на третью — 2.

Во второй час поезд не приходит, и в конце на станции вновь прибывают столько же человек.

В третий час поезд сначала забирает 8 человек с первой станции и, прибыв на вторую, забирает лишь 2 человека, потому что может вместить не более 10. Затем, он проезжает мимо третьей станции, поскольку поезд и так уже полон. После этого на станции вновь прибывают люди, и игра заканчивается.

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

B. Автобусы

Бинарный поиск дп Структуры данных *1700

Мальчик Геральд учится в школе, и она находится довольно далеко от его дома. Поэтому ему приходится ежедневно ездить туда на автобусах. Путь от дома до школы представляет собой отрезок прямой, на котором расположено ровно n + 1 остановок. Все они пронумерованы целыми числами от 0 до n в порядке их следования начиная от дома Геральда. Остановка у дома имеет номер 0, а остановка у школы — номер n.

Между домом и школой ездят m автобусов: i-ый автобус ездит от остановки si до остановки ti (si < ti), проезжая через все промежуточные остановки в порядке их следования. При этом Геральд не дурак, и не будет выходить из автобуса, пока на нем еще можно ехать в сторону школы — очевидно, что это не имеет смысла. То есть Геральд может сесть на i-ый автобус на любой остановке с номером от si до ti - 1 включительно, а выйти из i-го автобуса он может только на остановке ti.

Геральд не может идти между остановками пешком, а также не может перемещаться в сторону от школы к дому.

Геральд хочет узнать, сколько у него способов доехать от дома до школы. Сообщите ему это число. Два способа считаются различными, если какой-то участок между остановками Геральд едет на разных автобусах. Поскольку число способов может быть слишком большим, сообщите остаток этого числа от деления на 1000000007 (109 + 7).

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

В первой строке даны два целых числа через пробел: n и m (1 ≤ n ≤ 109, 0 ≤ m ≤ 105). Далее следует m строк по два целых числа si, ti в каждой — номера стартовых и конечных остановок автобусов (0 ≤ si < ti ≤ n).

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

Выведите единственное число — количество способов доехать до школы по модулю 1000000007 (109 + 7).

Примечание

В первом тесте есть единственный вариант доехать до школы: сначала на первом автобусе до первой остановки, а потом на втором автобусе до второй остановки.

Во втором тесте никакой автобус не идет до третьей остановки, на которой расположена школа, поэтому правильный ответ — 0.

В третьем тесте Геральд может воспользоваться или не воспользоваться каждым из первых четырех автобусов, чтобы подъехать поближе к школе. Поэтому правильный ответ 24 = 16.

D. Замок

Деревья дп жадные алгоритмы сортировки Теория вероятностей *2300

Геральд находится в старинном замке из n залов, соединенных n - 1 переходами. Из любого зала можно добраться до любого другого единственным способом, то есть граф представляет собой дерево. Изначально, в момент времени 0, Геральд находится в зале номер 1. Также в некотором другом зале этого замка находится клад, который Геральд хочет найти. Где именно находится клад неизвестно, он может быть с одинаковой вероятностью в любом из остальных n - 1 залов. Узнать о местонахождении клада Геральд может только тогда, когда придет непосредственно в тот зал. Тогда Геральд сразу же видит клад, и этот момент считается моментом достижения его цели.

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

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

Более формально, если клад окажется во втором зале, то Геральд найдет его в тот момент, когда первый раз окажется во втором зале — пусть это будет в момент t2. Если в третьем, то Геральд найдет его тогда, когда первый раз окажется в третьем зале. Пусть это произойдет в момент времени t3. И так далее. Таким образом, среднее время нахождения клада окажется равным .

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

В первой строке дано единственное целое число n (2 ≤ n ≤ 105) — количество залов в замке. В следующих n - 1 строках даны по три целых числа. В i-ой из этих строк расположены числа ai, bi и ti (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ ti ≤ 1000) — номера залов, которые соединяет i-ый переход и время, которое требуется, чтобы пройти по этому переходу. Геральд изначально находится в зале номер 1. Гарантируется, что из любого зала можно дойти по переходам до любого другого зала.

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

Выведите одно вещественное число: искомое матожидание времени поиска клада. Ответ должен отличаться от правильного не более чем на 10 - 6.

Примечание

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

Во втором тесте из первого зала Геральд может перейти только в третий. Из третьего он может перейти в первый или второй, но в первом он уже был, и из него он не может никуда попасть. Значит, ему нужно пойти во второй зал. Оттуда ему надо идти в 4 зал, потому что остальные залы уже посещены. Если клад окажется в третьем зале, Геральд найдет его через минуту, если во втором — через две, если в четвертом — через три. Среднее время — 2 минуты.

В третьем тесте Геральду нужно посетить 4 зала: второй, третий, четвертый и пятый. В них всех можно попасть только из первого зала. Значит, ему нужно поочередно заходить в эти 4 зала в один за другим и возвращаться обратно. В первом из этих залов Геральд окажется через минуту, во втором — через три, в третьем — через 5, в четвертом — через 7. Среднее время — 4 минуты.

E. Конфеты и Камни

дп разделяй и властвуй *2500

Мальчик Геральд и его тренер Миша играют в интересную игру. В начале игры имеются куча из n конфет и куча из m камней. Геральд и Миша ходят по очереди, первым ходит Миша. Миша на своем ходу проверят, сколько на данный момент Геральд съел конфет и камней. Пусть Геральд съел a конфет и b камней. Тогда Миша начисляет Геральду f(a, b) призовых очков. Геральд же на своем ходу съедает либо одну конфету из кучи с конфетами, либо один камень из кучи с камнями. Когда Миша обнаруживает, что Геральд съел все, кроме одной конфеты и одного камня, он последний раз начисляет очки и игра заканчивается. Опустошать ни ту, ни другую кучку Геральд не имеет права. Расскажите Геральду, как ему играть, чтобы получить наибольшее количество очков: требуется найти один из возможных оптимальных вариантов игры для Геральда.

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

В первой строке содержатся три целых числа n, m, p (1 ≤ n, m ≤ 20000, 1 ≤ p ≤ 109). Во второй строке находятся n целых чисел x0, x1, ..., xn - 1 (0 ≤ xi ≤ 20000). В третьей строке находятся m целых чисел y0, y1, ..., ym - 1 (0 ≤ yi ≤ 20000). Величина f(a, b) вычисляется, как остаток от деления суммы xa + yb на число p.

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

В первой строке выведите единственное число: максимальное количество призовых очков, которое может заработать Геральд. Во второй строке выведите строку из n + m - 2 символов, каждый из которых — это «C» или «S», i-ый символ должен быть «C», если на своем i-ом ходу Геральд должен съесть конфету, и «S», если камень.

Примечание

В первом тесте, если на первом ходу Геральд съест камень, то после него он получит одно очко, а если конфету — то ноль. Перед первым своим ходом Геральд получит в любом случае 0 очков, а после второго — в любом случае 1. Таким образом, максимальное количество очков, которое может получить Геральд равно 2, и для этого надо съесть сначала камень, потом конфету.

C. Холмы

дп *1900

Добро пожаловать в город Иннополис. Весь год бедные жители Иннополиса страдают от постоянного строительства.

Из окна вашей комнаты, вы можете увидеть последовательность из n холмов, где высота i-го из них равна ai. Администрация города Иннополис хочет построить несколько домов на этих холмах. При этом для красоты города было принято решение, что дом может быть построен только на холме, который строго выше соседних холмов (если таковые есть). Например, если последовательность высот это 5, 4, 6, 2, то в этом случае дом может быть построен только на холмах с высотой 5 и 6.

У администрации Иннополиса есть экскаватор, который может уменьшить высоту любого холма на единицу за один час. Экскаватор может работать только над одним холмом одновременно. Разрешено уменьшать высоту холмов до нуля, или даже до отрицательных значений. Увеличение высоты любого холма невозможно. Администрация города хочет построить k домов, поэтому должно быть хотя бы k холмов, которые соотвествуют условию, описанному выше. Какое минимальное количество времени нужно, чтобы осуществить план администрации?

Однако, конкретная величина k до сих пор не определена. Вам предлагается посчитать нужную величину для всех возможных k в отрезке . Здесь обозначает n делённое на 2, округлённое вверх.

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

Первая строка ввода состоит из единственного целого n (1 ≤ n ≤ 5000)— количества холмов в последовательности.

Вторая строка содержит n целых чисел ai (1 ≤ ai ≤ 100 000) — высоты холмов в последовательности.

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

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

Примечание

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

В первом примере, чтобы получить хотя бы два или три холма пригодных для строительства, можно уменьшить второй и четвертый холм на один, тогда последовательность станет равной 1, 0, 1, 0, 1 и холмы 1, 3, 5 будут пригодны для строительства.

F. Паспорта

дп реализация *3400

Глеб  — известный спортивный программист из Иннополиса. Он планирует поехать на N сборов по программированию в ближайшем будущем. Каждые сборы будут проходить в другой стране. И для въезда в каждую из этих стран Глебу нужно получать визу.

Для каждой поездки Глебу известны три числа: номер первого дня поездки si, продолжительность поездки в днях leni и количество дней ti, которое консульство соответствующей страны тратит на оформление визы. Глеб имеет P (1 ≤ P ≤ 2) действующих паспортов и может решать, в какой паспорт проставлять какую визу.

В каждую поездку Глеб улетает рано утром для si и возвращается поздно вечером дня si + leni - 1.

Чтобы подать паспорт на визу в день d, Глебу нужно быть в Иннополисе в середине соответствующего дня. Поэтому он не может подавать на визу, пока он в другой поездке, включая ее первый и последний день. Если поездка начинается на следующий день после окончания предыдущей, Глеб не может подать на визу между ними. Самое раннее, когда Глеб может подать на визу  — это день номер 1.

После подачи на визу страны i в день d Глеб получит паспорт назад в середине дня d + ti. Консультсва используют службы доставки, поэтому он может получить свой паспорт, даже если находится в поездке в этот день. Но Глеб может подать паспорт на другую визу в день получения паспорта, но только если в этот день он находится в Иннополисе в этот день.

Глеб не может начать поездку в день si, если он не имеет визы соответствующей страны утром дня si. И паспорт с нужной визой не должен в этот день находится в консульстве другой страны.

Помогите Глебу решить, какие визы ему нужно получать в какой паспорт и в какой день подавать на каждую из виз.

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

В первой строке входных данных находятся два целых числа N (1 ≤ N ≤ 22) и P (1 ≤ P ≤ 2): количество поездок и количество паспортов у Глеба соответственно.

Следующие N строк описывают поездки Глеба. Каждая строка описания содержит три положительных целых числа si, leni, ti (1 ≤ si, leni, ti ≤ 109): первый день поездки, продолжительность поездки и количество дней, которое требуется для получения соответствующей визы. Гарантируется, что никакие две поездки не пересекаются.

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

Если невозможно получить все визы во-время, просто выведите "NO" без кавычек.

В другом случае в первой строке выведите "YES", а затем N строк, соответствующих поездкам. Для каждой поездки выведите сначала номер паспорта, в который Глеб будет проставлять соответствующую визу, а затем номер дня, в который следует подавать на эту визу. Дни нумеруются с 1, начиная с первого дня, когда Глеб может подать на визу. Паспорта нумеруются от 1 до P.

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

Примечание

Примеры с ответом "YES" изображены ниже.

На рисунке каждая ячейка ленты соответствует одному дню. Прямоугольники представляют поездки (каждая поездка начинается утром и заканчивается вечером). Прямоугольники с угловыми краями представляют оформления виз. Каждая подача начинается в середине дня и заканчивается ti дней спустя. Поездка и получение визы в соответствующую страну обозначены одним и тем же цветом.

В примерах с двумя паспортами, оформления виз и поездка написанные сверху делаются с помощью первого паспорта, а написанные снизу делаются с помощью второго паспорта.

Example 1:

Example 2:

Example 3:

E1. Рисование звезд (упрощенная редакция)

дп жадные алгоритмы Перебор *1700

Звезда — это фигура на клетчатом поле следующего вида: символ звездочка '*' в центре фигуры и четыре луча (влево, вправо, вверх и вниз) одинаковой положительной длины. Размером звезды является длина ее лучей. Размер звезды должен быть строго положительным (то есть лучи длины \(0\) недопустимы).

Пусть пустые клетки обозначены как '.'. Тогда, например, следующие фигуры являются звездами:

Левая фигура — звезда размера \(1\), средняя фигура — звезда размера \(2\) и правая фигура — звезда размера \(3\).

Задано прямоугольное поле размера \(n \times m\), состоящее из звездочек '*' и точек '.'. Строки пронумерованы от \(1\) до \(n\), столбцы пронумерованы от \(1\) до \(m\). Ваша задача — нарисовать это поле при помощи любого количества звезд или понять, что это невозможно сделать. Звезды могут пересекаться, вкладываться и даже совпадать друг с другом. Количество звезд в ответе не может превышать \(n \cdot m\). Каждая из звезд должна находиться строго внутри поля. Вы можете использовать звёзды как одинаковых так и различных размеров.

В этой задаче нет необходимости минимизировать количество звезд. Необходимо найти любой способ нарисовать заданное поле при помощи не более, чем \(n \cdot m\) звезд.

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

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(3 \le n, m \le 100\)) — размер заданного поля.

Следующие \(n\) строк содержат \(m\) символов каждая, \(i\)-я строка описывает \(i\)-ю строку поля. Гарантируется, что поле состоит только из символов '*' и '.'.

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

Если невозможно нарисовать заданное поле только при помощи некоторого количества звезд , выведите «-1».

Иначе в первой строке выедите \(k\) (\(0 \le k \le n \cdot m\)) — количество звезд, необходимое, чтобы нарисовать заданное поле. Следующие \(k\) строк должны содержать по три целых числа каждая — \(x_j\), \(y_j\) и \(s_j\), где \(x_j\) это номер строки центрального символа звезды, \(y_j\) — номер столбца центрального символа звезды и \(s_j\) — размер звезды. Каждая из звезд должна находиться строго внутри поля.

Примечание

В первом примере вывод

2
3 4 1
3 5 2

тоже является корректным.

E2. Рисование звезд (усложненная редакция)

Бинарный поиск дп жадные алгоритмы *1900

Звезда — это фигура на клетчатом поле следующего вида: символ звездочка '*' в центре фигуры и четыре луча (влево, вправо, вверх и вниз) одинаковой положительной длины. Размером звезды является длина ее лучей. Размер звезды должен быть строго положительным (то есть лучи длины \(0\) недопустимы).

Пусть пустые клетки обозначены как '.'. Тогда, например, следующие фигуры являются звездами:

Левая фигура — звезда размера \(1\), средняя фигура — звезда размера \(2\) и правая фигура — звезда размера \(3\).

Задано прямоугольное поле размера \(n \times m\), состоящее из звездочек '*' и точек '.'. Строки пронумерованы от \(1\) до \(n\), столбцы пронумерованы от \(1\) до \(m\). Ваша задача — нарисовать это поле при помощи любого количества звезд или понять, что это невозможно сделать. Звезды могут пересекаться, вкладываться и даже совпадать друг с другом. Количество звезд в ответе не может превышать \(n \cdot m\). Каждая из звезд должна находиться строго внутри поля. Вы можете использовать звёзды как одинаковых так и различных размеров.

В этой задаче нет необходимости минимизировать количество звезд. Необходимо найти любой способ нарисовать заданное поле при помощи не более, чем \(n \cdot m\) звезд.

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

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(3 \le n, m \le 1000\)) — размер заданного поля.

Следующие \(n\) строк содержат \(m\) символов каждая, \(i\)-я строка описывает \(i\)-ю строку поля. Гарантируется, что поле состоит только из символов '*' и '.'.

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

Если невозможно нарисовать заданное поле только при помощи некоторого количества звезд , выведите «-1».

Иначе в первой строке выедите \(k\) (\(0 \le k \le n \cdot m\)) — количество звезд, необходимое, чтобы нарисовать заданное поле. Следующие \(k\) строк должны содержать по три целых числа каждая — \(x_j\), \(y_j\) и \(s_j\), где \(x_j\) это номер строки центрального символа звезды, \(y_j\) — номер столбца центрального символа звезды и \(s_j\) — размер звезды. Каждая из звезд должна находиться строго внутри поля.

Примечание

В первом примере вывод

2
3 4 1
3 5 2

тоже является корректным.

F. Скобочная подстрока

дп Строки *2300

Задана скобочная последовательность \(s\) (не обязательно правильная). Скобочная последовательность — это строка, состоящая только из символов '(' и ')'.

Правильная скобочная последовательность — это скобочная последовательность, которая может быть преобразована в корректное арифметическое выражение при помощи вставки символов '1' и '+' между изначальными символами последовательности. Например, скобочные последовательности «()()» и «(())» являются правильными (полученные выражения выглядят следующим образом: «(1)+(1)» и «((1+1)+1)»), а «)(», «(» и «)» — нет.

Ваша задача — посчитать количество правильных скобочных последовательностей длины \(2n\), содержащих заданную скобочную последовательность \(s\) как подстроку (последовательность подряд идущих символов) по модулю \(10^9+7\) (\(1000000007\)).

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — половина длины результирующей правильной скобочной последовательности (результирующие последовательности должны иметь длину ровно \(2n\)).

Вторая строка входных данных содержит одну строку \(s\) (\(1 \le |s| \le 200\)) — строку \(s\), которая должна содержаться как подстрока в каждой из результирующих правильных скобочных последовательностях (\(|s|\) — длина строки \(s\)).

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

Выведите одно целое число — количество правильных скобочных последовательностей, содержащих заданную скобочную последовательность \(s\) как подстроку. Так как это число может быть очень большим, выведите его по модулю \(10^9+7\) (\(1000000007\)).

Примечание

Все правильные скобочные последовательности, удовлетворяющие ограничениям, описанным выше, для первого тестового примера:

  • «(((()))())»;
  • «((()()))()»;
  • «((()))()()»;
  • «(()(()))()»;
  • «()((()))()».

Все правильные скобочные последовательности, удовлетворяющие ограничениям, описанным выше, для второго тестового примера:

  • «((()))»;
  • «(()())»;
  • «(())()»;
  • «()(())».

В третьем примере не существует правильных скобочных последовательностей длины \(4\), содержащих «(((» как подстроку.

C. Вася и грибы

дп реализация *1800

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

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

Помогите Васе! Сообщите ему максимальный суммарный вес грибов, который он может собрать.

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

Первая строка содержит число n (1 ≤ n ≤ 3·105) — длина поляны.

Вторая строка содержит n чисел a1, a2, ..., an (1 ≤ ai ≤ 106) — скорость роста грибов в первом ряду поляны.

Третья строка содержит n чисел b1, b2, ..., bn (1 ≤ bi ≤ 106) — скорость роста грибов во втором ряду поляны.

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

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

Примечание

В первом тестовом примере оптимальный маршрут выглядит следующим образом:

Таким образом, собраный вес грибов будет 0·1 + 1·2 + 2·3 + 3·4 + 4·5 + 5·6 = 70.

Во втором тестовом примере оптимальный маршрут выглядит следующим образом:

Таким образом, собраный вес грибов будет 0·1 + 1·10 + 2·100 + 3·1000 + 4·10000 + 5·100000 = 543210.

F. Проекты дорог

Деревья дп поиск в глубину и подобное *2600

Берляндия состоит из \(n\) городов, некоторые из которых соединены двусторонними дорогами таким образом, что между каждой парой вершин существует ровно один путь, проходящий по каждой дороге не более одного раза. Каждая дорога характеризуется своей длиной. Города пронумерованы от \(1\) до \(n\).

Время пути между некоторыми городами \(v\) и \(u\) — это суммарная длина дорог на кратчайшем пути из \(v\) в \(u\).

Два наиболее важных города Берляндии имеют номера \(1\) и \(n\).

Министерство Транспорта Берляндии решило построить ровно одну новую дорогу, чтобы разгрузить движение между самыми важными городами. Однако многие уже привыкли к текущему времени пути между самыми важными городами, поэтому новая дорога не должна его сильно изменить.

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

Они создали планы \(m\) возможных проектов. Каждый проект — это просто длина \(x\) новой дороги.

Поликарп работает главным аналитиком Министерства Транспорта Берляндии, разбираться с этими \(m\) проектами — его задача. Для \(i\)-го проекта он должен выбрать некоторые города \(v\) и \(u\) и построить новую дорогу длины \(x_i\) между ними так, чтобы время пути между самыми важными городами было максимально возможным.

К сожалению, Поликарп совсем не программист, да и никакой аналитик в мире не справится со всеми проектами с помощью лишь ручки и бумаги.

Поэтому он просит вас помочь ему посчитать максимально возможное время пути между самыми важными городами для каждого проекта. Обратите внимание, что \(v\) и \(u\) выбираются независимо для каждого проекта.

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(3 \le n \le 3 \cdot 10^5\), \(1 \le m \le 3 \cdot 10^5\)) — количество городов и количество проектов, соответственно.

В каждой из следующих \(n - 1\) строк записаны по три целых числа \(v_i\), \(u_i\) и \(w_i\) (\(1 \le v_i, u_i \le n\), \(1 \le w_i \le 10^9\)) — описание \(i\)-й дороги. Гарантируется, что между каждой парой городов существует ровно один путь, проходящий по каждой дороге не более одного раза.

В каждой из следующих \(m\) строк записано по одному целому числу \(x_j\) (\(1 \le x_j \le 10^9\)) — длина дороги для \(j\)-го проекта.

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

Выведите \(m\) строк, \(j\)-я строка должна содержать одно целое число — максимально возможное время пути между самыми важными городами для \(j\)-го проекта.

Примечание

Сеть дорог из первого примера:

Можно построить дорогу длины \(1\) между городами \(5\) и \(6\), чтобы получить \(83\) в качестве времени пути между \(1\) и \(7\) (\(1 \rightarrow 2 \rightarrow 6 \rightarrow 5 \rightarrow 3 \rightarrow 4 \rightarrow 7\) \(=\) \(18 + 4 + 1 + 12 + 24 + 24 = 83\)). Другие доступные пары городов дадут ответ меньше или равный \(83\).

D. Восстановление BST

Деревья дп математика Перебор теория чисел *2100

Хомяк Дима обожает грызть различные объекты, среди которых клетки, коробки, авторы плохих задач и даже деревья!

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

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

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

В первой строке задано количество вершин \(n\) (\(2 \le n \le 700\)).

В следующей строке через пробел следуют \(n\) различных чисел \(a_i\) (\(2 \le a_i \le 10^9\)) — значения в вершинах в отсортированном порядке.

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

Если можно собрать двоичное дерево поиска, такое что наибольший общий делитель любых двух вершин соединённых ребром больше \(1\), выведите «Yes» (без кавычек).

В противном случае выведите «No» (без кавычек).

Примечание

На картинке ниже проиллюстрировано одно из возможных деревьев для первого примера.

На картинке ниже проиллюстрировано одно из возможных деревьев для третьего примера.

E. Противоположная раскраска

дп Комбинаторика математика *2100

Дана квадратная доска, состоящая из \(n\) строк и \(n\) столбцов. Каждая клетка в ней должна быть раскрашена либо в белый, либо в черный цвет.

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

Назовем некоторую раскраску подходящей, если она красивая, и в ней нет ни одного прямоугольника одного цвета, состоящего не менее чем из \(k\) клеток.

Ваша задача — подсчитать количество подходящих раскрасок доски заданного размера.

Так как ответ может быть достаточно большим, выведите его по модулю \(998244353\).

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

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le n \le 500\), \(1 \le k \le n^2\)) — количество строк и столбцов доски и максимальное количество клеток внутри прямоугольника одного цвета, соответственно.

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

Выведите единственное целое число — количество подходящих раскрасок доски заданного размера по модулю \(998244353\).

Примечание

Доска размера \(1 \times 1\) — это либо единственная черная клетка, либо единственная белая клетка. Обе доски включают в себя прямоугольник одного цвета, состоящий из \(1\) клетки.

Вот красивые раскраски доски размера \(2 \times 2\), которые не включают в себя прямоугольники одного цвета, состоящие не менее чем из \(3\) клеток:

Оставшиеся красивые раскраски доски \(2 \times 2\):

G. Угадай число

дп интерактив *3000

Это интерактивная задача.

Ваша цель — угадать загаданное число \(x\), находящееся между \(1\) и \(M = 10004205361450474\), включительно. Вы можете использовать не больше \(5\) запросов.

В каждом запросе вы можете вывести возрастающую последовательность из не более чем \(k \leq x\) целых чисел, каждое из которых принадлежит отрезку от \(1\) до \(M\). В ответ Вы получите один из следующих результатов:

  • или загаданное число встречается в вашей последовательности и вы незамедлительно выигрывате.
  • или вы получите, как загаданное число соотносится с числами в запросе. Более формально, вы или узнаете, что он меньше всех чисел в запросе, или что он больше всех чисел в запросе или вы получите такое \(i\), что загаданное число \(x\) находится между \(i\)-м и \((i+1)\)-м числами в вашей последовательности.

Смотрите раздел «Протокол взаимодействия» для лучшего понимания.

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

Взломы разрешены только с фиксированным загаданным числом. Взлом в этой задаче представляет собой одно число между \(1\) и \(M\). Во всех претестах интерактор также загадывает число изначально.

Протокол взаимодействия

Вы можете сделать не более \(5\) запросов. В начале каждого запроса выведите число \(k\) (\(1 \le k \le 10^4\)) и возрастающую последовательность \(t_0 < t_1 < \ldots < t_{k-1}\) из \(k\) целых чисел из отрезка от \(1\) до \(M\) включительно. Если \(k > x\), Вы проиграли.

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

  • если это \(-2\), Вы сделали некорректный запрос или проиграли. Если ваша программа завершится сразу после получения числа \(-2\), то вы получите вердикт Wrong answer. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока;
  • если это \(-1\), то вы выиграли и также должны завершиться;
  • иначе вы получите число \(i\) между \(0\) и \(k\) включительно. Если \(i = 0\), то \(x < t_0\). Если \(i = k\), то \(t_{k-1} < x\), иначе \(t_{i-1} < x < t_i\).

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

В первом примере загадано число \(5\)

B. Составление контеста

дп жадные алгоритмы математика *1200

Дан набор из \(n\) задач. Сложность \(i\)-й задачи равна \(a_i\). Гарантируется, что все сложности различны и заданы в возрастающем порядке.

Вы хотите собрать контест, состоящий из некоторых задач из заданного набора. Другими словами, контест, который вы хотите собрать, должен быть подмножеством задач (не обязательно подряд идущих) из заданного набора. Должно быть соблюдено только одно условие: для каждой задачи, кроме самой сложной (задачи с максимальной сложностью) задачи контеста, должна быть задача со сложностью больше сложности этой задачи, но не больше, чем удвоенная сложность этой задачи. Другими словами, пусть \(a_{i_1}, a_{i_2}, \dots, a_{i_p}\) — сложности задач в собранном контесте в возрастающем порядке. Тогда для каждого \(j\) от \(1\) до \(p-1\) должно выполняться \(a_{i_{j + 1}} \le a_{i_j} \cdot 2\). Это означает, что контест, состоящий из одной задачи всегда является корректным.

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

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество задач в наборе задач.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — сложности задач. Гарантируется, что сложности задач различны и заданы в возрастающем порядке.

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

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

Примечание

Объяснение первого тестового примера: всего существует \(10\) корректных контестов, состоящих из \(1\) задачи, \(10\) корректных контестов, состоящих из \(2\) задач (\([1, 2], [5, 6], [5, 7], [5, 10], [6, 7], [6, 10], [7, 10], [21, 23], [21, 24], [23, 24]\)), \(5\) корректных контестов, состоящих из \(3\) задач (\([5, 6, 7], [5, 6, 10], [5, 7, 10], [6, 7, 10], [21, 23, 24]\)) и только один корректный контест, состоящий из \(4\) задач (\([5, 6, 7, 10]\)).

Во втором тестовом примере все корректные контесты состоят из \(1\) задачи.

В третьем тестовом примере два контеста состоят из \(3\) задач: \([4, 7, 12]\) и \([100, 150, 199]\).

E. Дерево коротких расстояний

графы дп жадные алгоритмы *2100

Задано неориентированное дерево, состоящее из \(n\) вершин. Неориентированное дерево — это связный граф с \(n - 1\) ребром.

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

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

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Следующие \(n - 1\) строк описывают ребра: ребро \(i\) задано как пара вершин \(u_i, v_i\) (\(1 \le u_i, v_i \le n\)). Гарантируется, что заданный граф является деревом. Гарантируется, что среди заданных ребер петли и кратные ребра отсутствуют.

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

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

Примечание

Дерево, соответствующее первому тестовому примеру: Ответ равен \(2\), вот несколько возможных ответов: \([(1, 5), (1, 6)]\), \([(1, 4), (1, 7)]\), \([(1, 6), (1, 7)]\).

Дерево, соответствующее второму тестовому примеру: Ответ равен \(0\).

Дерево, соответствующее третьему тестовому примеру: Ответ равен \(1\), единственный способ достичь такого ответа — добавить ребро \((1, 3)\).

E. Вася и хорошие последовательности

битмаски дп *2000

У Васи есть последовательность \(a\) состоящая из \(n\) целых чисел \(a_1, a_2, \dots, a_n\). За одну операцию Вася может выбрать число из последовательности и поменять местами два любых бита в его двоичной записи. Например из числа \(6\) \((\dots 00000000110_2)\) Вася может получить числа \(3\) \((\dots 00000000011_2)\), \(12\) \((\dots 000000001100_2)\), \(1026\) \((\dots 10000000010_2)\) и так далее. Вася может применять эту операцию любое количество раз (возможно, ни разу) к любому из заданных чисел.

Вася считает последовательность чисел хорошей, если, применяя к ней описанную выше операцию, он может получить последовательность, побитовое исключающее ИЛИ всех элементов которой равно \(0\).

Для заданной последовательности \(a_1, a_2, \ldots, a_n\) Вася хочет знать количество пар целых чисел \((l, r)\) таких, что \(1 \le l \le r \le n\) и последовательность \(a_l, a_{l + 1}, \dots, a_r\) является хорошей.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длину последовательности.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{18}\)) — саму последовательность \(a\).

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

В единственной строке выведите одно целое число — количество пар целых чисел \((l, r)\) таких, что \(1 \le l \le r \le n\) и последовательность \(a_l, a_{l + 1}, \dots, a_r\) является хорошей.

Примечание

В первом примере подходят пары \((2, 3)\) и \((1, 3)\). Для пары \((2, 3)\) числа можно изменить следующим образом: \(a_2 = 7 \rightarrow 11\), \(a_3 = 14 \rightarrow 11\) и \(11 \oplus 11 = 0\), где \(\oplus\) — операция побитового исключающего ИЛИ. Для пары \((1, 3)\) числа можно изменить следующим образом: \(a_1 = 6 \rightarrow 3\), \(a_2 = 7 \rightarrow 13\), \(a_3 = 14 \rightarrow 14\) and \(3 \oplus 13 \oplus 14 = 0\).

Во втором примере подходят четыре пары: \((1, 2)\), \((2, 3)\), \((3, 4)\) и \((1, 4)\).

C. Игра на фортепиано

дп Конструктив *1700

Маленький Пол хочет научиться играть на фортепиано. Он уже нашёл мелодию, которую будет играть. Для простоты он выписал последовательность \(a_1, a_2, \ldots, a_n\) целых чисел, которые означают номер клавиш: чем больше номер, тем правее клавиша на клавиатуре.

Пол очень умный и понимает, что самое важное — правильная аппликатура, то есть, правильно выбрать, каким пальцем какую ноту играть. Если выбрать неудобные пальцы, то потом можно потратить уйму времени на попытки научиться играть мелодию и всё равно в итоге не преуспеть.

Обозначим пальцы на руке числами от \(1\) до \(5\). Назовём аппликатурой любую последовательность \(b_1, \ldots, b_n\) номеров пальцев. Назовём аппликатуру удобной, если для любого \(1\leq i \leq n - 1\) выполнено следующее:

  • если \(a_i < a_{i+1}\), то \(b_i < b_{i+1}\), потому что иначе придётся оторвать руку от клавиатуры, чтобы сыграть \((i+1)\)-ю ноту;
  • если \(a_i > a_{i+1}\), то \(b_i > b_{i+1}\) по той же причине;
  • если \(a_i = a_{i+1}\), то \(b_i\neq b_{i+1}\), потому что довольно нелепо использовать один и тот же палец два раза подряд. Обратите внимание, что между \(b_i\) и \(b_{i+1}\) стоит знак \(\neq\), а не \(=\).

Найдите любую удобную аппликатуру или скажите, что таких нет.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)), обозначающее число нот в мелодии.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2\cdot10^5\)) — номера этих нот.

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

Если удобных аппликатур к этой мелодии не существует, выведите \(-1\). В противном случае выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) от \(1\) до \(5\), задающих удобную аппликатуру.

Примечание

Третий тест из условия — что-то вроде песни "Нон стоп" группы Рефлекс.

E. Невыносимая лёгкость гирек

дп математика *2100

У вас есть набор из \(n\) гирек. Вам известно, что они весят \(a_1\), \(a_2\), ..., \(a_n\) граммов, но вы не знаете, какая гирька сколько весит: для вас они неотличимы друг от друга.

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

Вы можете спросить вашего друга лишь один раз. У какого наибольшего числа гирек вы можете узнать точный вес после этого запроса?

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество гирек.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 100\)) — веса гирек.

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

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

Примечание

В первом примере мы можем попросить набор из двух гирек с суммарным весом \(4\), и единственное, что мы можем получить — \(\{2, 2\}\).

Получить такой же результат можно, попросив набор из двух гирек с суммарным весом \(5\), тогда нам дадут \(\{1, 4\}\). Отсюда мы можем заключить, что каждая из двух оставшихся гирь имеет вес \(2\).

Во втором примере мы можем попросить набор из двух гирек с суммарным весом \(8\) и получить \(\{4, 4\}\). Можно доказать, что нельзя за один запрос узнать веса трех гирек, но мы не будет приводить доказательство здесь.

F. Вася и максимальное паросочетание

Деревья дп *2400

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

Паросочетанием в графе называется подмножество ребер такое, что все концы этих ребер различны. Максимальным паросочетанием называется такое паросочетание, в котором количество ребер максимально возможное.

Так как количество способов может быть велико, выведите его по модулю \(998244353\).

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

Первая строка содержит целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) – количество вершин дерева.

Следующие \(n − 1\) строк содержат по два числа \(u\) и \(v\) (\(1 \le u, v \le n, u \neq v\)), представляющие ребро между вершинами \(u\) и \(v\). Гарантируется, что данные ребра составляют дерево.

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

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

Примечание

В первом тестовом примере максимальное паросочетание будет единственно в четырех случаях:

  • если удалить ребра \((1, 2)\) и \((1, 3)\).
  • если удалить ребра \((1, 2)\) и \((1, 4)\).
  • если удалить ребра \((1, 3)\) и \((1, 4)\).
  • если удалить все ребра.

Во втором тестовом примере максимальное паросочетание будет единственно в шести случаях:

  • если не удалять ни одного ребра.
  • если удалить ребра \((1, 2)\) и \((2, 3)\).
  • если удалить ребра \((1, 2)\) и \((3, 4)\).
  • если удалить ребра \((2, 3)\) и \((3, 4)\).
  • если удалить ребро \((2, 3)\).
  • если удалить все ребра.

C. Игра с перестановкой

дп игры Перебор *1600

После долгого дня Алиса и Боб решили сыграть в игру. Игровая доска состоит из \(n\) ячеек на прямой, пронумерованных от \(1\) до \(n\), где каждая ячейка содержит число \(a_i\) в диапазоне от \(1\) до \(n\). Кроме того, никакие две ячейки не содержат одинаковые числа.

Игровая фигурка находится на одной ячейке. Они ходят по очереди, двигая фигурку. Алиса ходит первая. Игрок, который ходит, может передвинуть фигурку с ячейки \(i\) на ячейку \(j\), только если выполняются условия:

  • число в новой ячейке \(j\) строго больше, чем в старой ячейке \(i\) (то есть \(a_j > a_i\)), и
  • расстояние, на которое передвигается фигурка в этом ходу, должно делиться на число, расположенное в старой ячейке (то есть \(|i-j|\bmod a_i = 0\)).

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

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество чисел.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)). Гарантируется, что нет таких чисел \(i \neq j\), что \(a_i = a_j\).

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

Выведите \(s\) — строку из \(n\) символов, где \(i\)-й символ представляет результат игры, которая начинается в ячейке \(i\). Если победит Алиса, то \(s_i\) должен быть равен «A»; в другом случае, \(s_i\) должен быть равен «B».

Примечание

В первом примере, если Боб поместит игровую фигурку на число (не на позицию):

  • \(1\): Алиса может переместиться на любую ячейку. Она может выбрать число \(7\), из которого у Боба нет выхода.
  • \(2\): Алиса может переместиться на числа \(3\) и \(5\). При переходе в \(5\), Боб может выиграть, если переместится в \(8\). Если она выберет \(3\), то она победит, так как Боб сможет переместиться только в \(4\), из которого Алиса сможет переместиться в \(8\).
  • \(3\): Алиса может переместиться только в \(4\), после чего Боб побеждает, перемещаясь в \(8\).
  • \(4\), \(5\) или \(6\): Алиса побеждает, перемещаясь в \(8\).
  • \(7\), \(8\): Алиса не может никуда переместиться, поэтому проигрывает.

C. Разбиение на регионы

Деревья дп Комбинаторика теория чисел *2700

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

В этом году правительство приняло решение разбить королевство на регионы. После разбиения будут существовать регионы нескольких уровней, при этом само королевство будет являться регионом первого уровня. Любой регион уровня \(i\) должен быть разделен на несколько (хотя бы два) регионов уровня \(i+1\), если это не регион последнего уровня. Каждый город должен принадлежать ровно одному региону каждого уровня. Внутри одного региона, между любыми двумя городами в нем должен существовать путь, проходящий только по городам этого региона.

Согласно исследованию, для каждого города \(i\) есть уровень важности — \(a_i\). Все регионы одного уровня должны иметь одинаковую сумму этих значений.

Ваша задача состоит в том, чтобы узнать, сколько существует планов разбиения королевства на регионы, чтобы все условия выполнялись. Два плана считаются различными тогда и только тогда, когда количество уровней в них различно, или существует пара городов, которые для какого-то уровня находятся в одном регионе в одном плане, но в разных регионах того же уровня в другом. Поскольку ответ может быть очень большим, выведите его по модулю \(10^9+7\).

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

Первая строка содержит число \(n\) (\(1 \leq n \leq 10^6\)) — количество городов в королевстве.

Вторая строка содержит \(n\) чисел, \(i\)-е из которых обозначает \(a_i\) (\(1 \leq a_i \leq 10^9\)) — важность \(i\)-го города.

В третьей строке записано \(n-1\) целое число, \(p_1, p_2, \ldots, p_{n-1}\); \(p_i\)(\(p_i \leq i\)) описывает дорогу между городами \(p_i\) и \(i+1\).

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

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

Примечание

В первом примере существует \(4\) различных плана:

План \(1\): Уровень \(1\): \(\{1,2,3,4\}\).

План \(2\): Уровень \(1\): \(\{1,2,3,4\}\), Уровень \(2\): \(\{1,2\}\),\(\{3,4\}\).

План \(3\): Уровень \(1\): \(\{1,2,3,4\}\), Уровень \(2\): \(\{1\}\),\(\{2\}\),\(\{3\}\),\(\{4\}\).

План \(4\): Уровень \(1\): \(\{1,2,3,4\}\), Уровень \(2\): \(\{1,2\}\),\(\{3,4\}\), Уровень \(3\): \(\{1\}\),\(\{2\}\),\(\{3\}\),\(\{4\}\).

Во втором примере существует \(2\) различных плана:

План \(1\): Уровень \(1\): \(\{1,2,3,4\}\).

План \(2\): Уровень \(1\): \(\{1,2,3,4\}\), Уровень \(2\): \(\{1\}\),\(\{2\}\),\(\{3\}\),\(\{4\}\).

В третьем примере существует \(3\) различных плана:

План \(1\): Уровень \(1\): \(\{1,2,3,4\}\).

План \(2\): Уровень \(1\): \(\{1,2,3,4\}\), Уровень \(2\): \(\{1,2\}\),\(\{3,4\}\).

План \(3\): Уровень \(1\): \(\{1,2,3,4\}\), Уровень \(2\): \(\{1,3\}\),\(\{2\}\),\(\{4\}\).

E. Little C любит 3 III

битмаски дп математика *3200

Little C очень любит число «3». Он любит все, что с ним связано.

В данный момент его заинтересовала следующая задача:

Даны два массива из \(2^n\) целых чисел: \(a_0,a_1,...,a_{2^n-1}\) и \(b_0,b_1,...,b_{2^n-1}\).

Задача состоит в том, чтобы для каждого \(i (0 \leq i \leq 2^n-1)\), вычислить \(c_i=\sum a_j \cdot b_k\) (\(j|k=i\) и \(j\&k=0\), где "\(|\)" обозначает побитовую операцию ИЛИ и "\(\&\)" обозначает побитовую операцию И).

Это замечательно, что можно доказать, что существует ровно \(3^n\) троек \((i,j,k)\), для которых \(j|k=i\), \(j\&k=0\) и \(0 \leq i,j,k \leq 2^n-1\). Поэтому Little C хочет решить эту отличную задачу (потому что она тесно связана с числом \(3\)) .

Помогите ему вычислить все \(c_i\). Little C очень любит число \(3\), поэтому он лишь хочет знать все \(c_i \& 3\).

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

Первая строка содержит целое число \(n (0 \leq n \leq 21)\).

Вторая строка содержит \(2^n\) целых чисел, принадлежащих \([0,3]\) без пробелов — \(i\)-е из них обозначает \(a_{i-1}\).

Третья строка содержит \(2^n\) целых чисел, принадлежащих \([0,3]\) без пробелов — \(i\)-е из них обозначает \(b_{i-1}\).

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

Выведите одну строку, которая содержит \(2^n\) целых чисел, принадлежащих \([0,3]\) без пробелов — \(i\)-е из них должно обозначать \(c_{i-1}\&3\). (Очевидно, что \(c_{i}\&3\) принадлежит \([0,3]\)).

C. Шикарные числа

дп Комбинаторика *1900

Назовем некоторое положительное целое число шикарным, если в его десятичной записи встречается не более \(3\) ненулевых цифр. Например, числа \(4\), \(200000\), \(10203\) шикарные, а числа \(4231\), \(102306\), \(7277420000\) — нет.

Задан отрезок \([L; R]\). Посчитайте количество таких шикарных чисел \(x\), что \(L \le x \le R\).

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

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

В первой строке записано одно целое число \(T\) (\(1 \le T \le 10^4\)) — количество отрезков в тесте.

В каждой из следующих \(T\) строк записаны по два целых числа \(L_i\) и \(R_i\) (\(1 \le L_i \le R_i \le 10^{18}\)).

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

Выведите \(T\) строк — в \(i\)-й строке должно быть записано количество шикарных чисел на отрезке \([L_i; R_i]\).

C. Добиться равенства

дп жадные алгоритмы Строки *1300

Вам даны две бинарные строки \(a\) и \(b\) равной длины. Вы можете производить над строкой \(a\) следующие операции:

  • Поменять два бита на позициях \(i\) и \(j\) соответственно (\(1 \le i, j \le n\)), стоимость этой операции составляет \(|i - j|\), то есть модуль разницы \(i\) и \(j\).
  • Выбрать произвольную позицию \(i\) (\(1 \le i \le n\)) и инвертировать (заменить \(0\) на \(1\) или \(1\) на \(0\)) значение бита на этой позиции. Стоимость этой операции равна \(1\)

Найдите минимальную стоимость, которую нужно потратить, чтобы сделать строку \(a\) равной строке \(b\). Менять строку \(b\) не разрешается.

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — длина строк \(a\) и \(b\).

Вторая и третья строки содержат строки \(a\) и \(b\) соответственно.

Обе строки \(a\) и \(b\) имеют длину \(n\) и состоят только из «0» и «1».

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

Выведите минимальную стоимость, которая требуется, чтобы превратить строку \(a\) в \(b\).

Примечание

В первом примере одним из оптимальных способов является следующий: нужно инвертировать позицию \(1\), а затем позицию \(3\). Тогда строка \(a\) меняется следующим образом: «100» \(\to\) «000» \(\to\) «001». Стоимость составляет \(1 + 1 = 2\).

Другим оптимальным решением является следующее: можно поменять местами позиции \(1\) и \(3\), тогда строка \(a\) меняется как «100» \(\to\) «001», стоимость также равна \(|1 - 3| = 2\).

Во втором примере оптимальным решением является следующее: нужно поменять местами позиции \(2\) и \(3\), тогда строка \(a\) меняется как «0101» \(\to\) «0011». Стоимость равна \(|2 - 3| = 1\).

D. Слизняки

дп жадные алгоритмы реализация *1800

Есть ряд из \(n\) слизней. У каждого слизня есть некоторая целочисленная ценность, связанная с ним (ценность может быть также меньше нуля или равна нулю).

Любой из слизняков может съесть любого из своих соседей (ближайшего к нему слизня слева или справа, при условии что такой слизень есть).

Когда слизень с ценностью \(x\) съедает слизня со значением \(y\), то съеденный слизень исчезает, а ценность оставшегося слизня становится равной \(x - y\).

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

Выясните какая наибольшая возможная ценность может оказаться у последнего слизня.

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 500\,000\)) — количество слизней в ряду.

Вторая строка содержит \(n\) целых чисел \(a_i\) (\(-10^9 \le a_i \le 10^9\)), где \(a_i\) — это ценность \(i\)-го слизня.

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

Выведите одно число — наибольшую возможную ценность у последнего слизня.

Примечание

В первом примере одним из способов получить последнего слизня с ценностью \(4\) следующий:

  • Второй слизень съедает третьего, ряд теперь содержит слизней \(2, -1, 1\)
  • Второй слизень съедает третьего, ряд теперь содержит слизней \(2, -2\)
  • Первый слизень съедает второго, ряд теперь содержит одного слизня \(4\)

Во втором примере первый слизень может есть слизней слева направо, тем самым получая итоговую ценность \(4\).

E. Наибольшее паросочетание

битмаски графы дп Перебор поиск в глубину и подобное *2400

Вам даны \(n\) блоков, каждый из которых выглядит как [color\(_1\)|value|color\(_2\)], при чём блок можно также перевернуть, чтобы получить [color\(_2\)|value|color\(_1\)].

Назовём последовательность блоков корректной, если касающиеся концы блоков совпадают по цветам. Например, последовательность из трёх блоков A, B и C является корректной, если левый цвет B совпадает с правым цветом A и правый цвет B совпадает с левым цветом C.

Ценность последовательности равна сумме ценностей (value) отдельных блоков в ней.

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

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)).

Каждая из следующих \(n\) строчек описывает очередной блок и состоит из трёх целых чисел \(\mathrm{color}_{1,i}\), \(\mathrm{value}_i\) и \(\mathrm{color}_{2,i}\) (\(1 \le \mathrm{color}_{1,i}, \mathrm{color}_{2,i} \le 4\), \(1 \le \mathrm{value}_i \le 100\,000\)).

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

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

Примечание

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

Один из корректных способов следующий:

[4|2|1] [1|32|2] [2|8|3] [3|16|3] [3|4|4] [4|1|2]

Первый блок из входных данных ([2|1|4] \(\to\) [4|1|2]) и второй ([1|2|4] \(\to\) [4|2|1]) перевёрнуты.

Во втором примере один из оптимальных ответов состоит только из первых трёх блоков упорядоченных следующим образом (второй или третий блок из входных данных перевёрнут):

[2|100000|1] [1|100000|1] [1|100000|2]

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

F. Поворот строки

дп Строки *2900

Вам дана строка \(s\) над бинарным алфавитом.

Посчитайте количество различных циклических строк длины \(n\) над бинарным алфавитом, которые содержат \(s\) как подстроку.

Циклическая строка \(t\) содержит \(s\) как подстроку если существует какой-то циклический сдвиг строки \(t\), такой что \(s\) является подстрокой этого циклического сдвига строки \(t\).

Например, циклическая строка «000111» содержит подстроки «001», «01110» и «10», но не содержит «0110» и «10110».

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

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 40\)) — длина требуемых строк \(t\).

Вторая строка содержит строку \(s\) (\(1 \le |s| \le n\)) — строка, которая должна быть подстрокой циклической строки \(t\). Строка \(s\) содержит только символы '0' и '1'.

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

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

Примечание

В первом примере есть три циклических строки, которые содержат "0" — "00", "01" и "10".

Во втором примере есть только две такие строки — "1010", "0101".

D. Вам дано дерево

Деревья дп Структуры данных *2800

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

Вам дано дерево на \(n\) вершинах. Для каждого \(k\) от \(1\) до \(n\) включительно найдите максимально возможную мощность \(k\)-допустимого множества простых путей.

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

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 100\,000\)) — количество вершин в дереве.

Следующие \(n - 1\) строк задают дерево, каждая из них содержит два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\)) — концы соответствующего ребра.

Гарантируется, что заданный граф является деревом.

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

Выведите \(n\) чисел, \(i\)-е из которых равно максимально возможной мощности \(i\)-допустимого множества путей.

Примечание

Один из способов достичь наибольшего количества путей во втором примере изображён на следующей картинке:

B. Приготовление шашлыка

дп жадные алгоритмы математика *1300

Если кратко, то шашлык — любимое блюдо Мирослава. Шашлык жарится одновременно на нескольких шампурах. В каждый момент времени каждый шампур может быть либо в исходном, либо в перевернутом состоянии.

В этот раз Мирослав разложил параллельно друг другу \(n\) шампуров и пронумеровал их слева направо целыми числами от \(1\) до \(n\). При этом для достижения наибольшего кулинарного эффекта Мирослав плотно прижимает шампуры друг к другу, так что если он переворачивает шампур с номером \(i\), то это так же приводит к переворачиванию \(k\) ближайших шампуров с каждой из сторон от шампура \(i\), то есть шампуров с номерами \(i - k\), \(i - k + 1\), ..., \(i - 1\), \(i + 1\), ..., \(i + k - 1\), \(i + k\) (если такие существуют).

Пусть, например, \(n = 6\) и \(k = 1\). Тогда если Мирослав перевернёт шампур с номером \(3\), то в итоге перевёрнутыми окажутся шампуры с номерами \(2\), \(3\) и \(4\). Если же после этого Мирослав перевернёт шампур с номером \(1\), то перевёрнутыми окажутся шампуры \(1\), \(3\) и \(4\), а шампур \(2\) вернётся в исходное положение (так как перевернется в этой операции).

Как мы уже упоминали выше, искусство приготовления шашлыка требует делать всё вовремя, так что Мирослав хочет научиться переворачивать все \(n\) шампуров за минимальное количество действий. Например, для рассмотренного выше примера \(n = 6\) и \(k = 1\) можно справиться за два действия, просто перевернув шампуры с номерами \(2\) и \(5\).

Помогите Мирославу перевернуть все \(n\) шампуров.

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

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \leq n \leq 1000\), \(0 \leq k \leq 1000\)) — количество шампуров, выложенных Мирославом на мангале и количество соседних шампуров с каждой стороны, которые переворачиваются за раз.

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

В первой строке выведите целое число \(l\) — минимальное количество действий, которое потребуется совершить Мирославу, чтобы перевернуть все \(n\) шампуров. Далее выведите \(l\) целых чисел от \(1\) до \(n\), обозначающие номер шампура, который требуется перевернуть на соответствующем шаге.

Примечание

В первом примере на первой операции переворачиваются шампуры \(1\), \(2\) и \(3\), а на второй — \(4\), \(5\), \(6\) и \(7\).

Во втором примере правильным ответом также является перевернуть шампуры с номерами \(2\) и \(5\), но если перевернуть шампуры с номерами \(2\) и \(4\), или шампуры с номерами \(1\) и \(5\), то шампур номер \(3\) окажется в исходном состоянии.

F. Луч в трубе

дп математика разделяй и властвуй Структуры данных *2500

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

Вы собираетесь провести эксперимент с этой трубой и лазерным лучом. Для этого надо выбрать две целочисленные точки \(A\) и \(B\) на первой и второй прямой соответственно (координаты точек могут быть отрицательные): точка \(A\) будет отвечать за позицию лазера, а точка \(B\) — за направление лазерного луча. Лазерный луч представляет собой луч, стартующий в \(A\) и направленный в \(B\), который отражается от стенок трубы (независимо от того, есть в данной точке сенсор или нет). Сенсор регистрирует луч, если он попадает точно в позицию сенсора.

Примеры использования лучей. Обратите внимания, что здесь два примера. Если использовать синий луч, то \(3\) сенсора (которые обозначены черными точками на сторонах трубы) зарегистрируют луч. А если красный, то только \(2\).

Определите максимальное количество сенсоров, которые могут зарегистрировать луч, если вы можете выбрать целочисленные точки \(A\) и \(B\) на первой и второй прямой.

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

Первая строка содержит два целых числа \(n\) и \(y_1\) (\(1 \le n \le 10^5\), \(0 \le y_1 \le 10^9\)) — количество сенсоров на первой прямой и её \(y\) координата.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — \(x\) координаты сенсоров на первой прямой в строго возрастающем порядке.

Третья строка содержит два целых числа \(m\) и \(y_2\) (\(1 \le m \le 10^5\), \(y_1 < y_2 \le 10^9\)) — количество сенсоров на второй прямой и ее \(y\) координата.

Четвертая строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(0 \le b_i \le 10^9\)) — \(x\) координаты сенсоров на второй прямой в строго возрастающем порядке.

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

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

Примечание

Один из оптимальных способов представлен на иллюстрации парой \(A_2\) и \(B_2\).

B. Витамины

битмаски дп Перебор реализация *1200

В берляндском магазине есть \(n\) видов сока. Каждый сок характеризуется своей ценой \(c_i\), а также витаминами, которые в нём содержатся. В Берляндии есть всего три типа витаминов: витамин «A», витамин «B» и витамин «C». В каждом соке может быть один, два или все три витамина.

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

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

В первой строке следует целое число \(n\) \((1 \le n \le 1\,000)\) — количество видов сока.

В каждой из следующих \(n\) строк следует целое число \(c_i\) \((1 \le c_i \le 100\,000)\) и строка \(s_i\) — цена \(i\)-го сока и описание витаминов, которые в нём есть. Строка \(s_i\) имеет длину от \(1\) до \(3\) и состоит из букв «A», «B» и «C». Гарантируется, что каждая буква встречается в каждой строке \(s_i\) не более одного раза. Порядок букв в строках \(s_i\) произвольный.

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

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

Примечание

В первом примере Петя должен купить первый, второй и четвертый сок. Тогда он потратит \(5 + 6 + 4 = 15\) и получит все три витамина. Также он может купить только третий сок и получить все три витамина, но это невыгодно, так как третий сок стоит \(16\).

Во втором примере Петя не сможет получить все три витамина, так как витамина «C» нет ни в одном соке.

E. Вася и волшебная матрица

дп математика Теория вероятностей *2300

У Васи есть волшебная матрица \(a\) размера \(n \times m\). Строки матрицы нумеруются от \(1\) до \(n\) сверху вниз, столбцы матрицы нумеруются от \(1\) до \(m\) слева направо. Обозначим как \(a_{ij}\) элемент, находящийся на пересечении \(i\)-й строки и \(j\)-го столбца.

Также у Васи есть фишка. Изначально фишка находится на пересечении \(r\)-й строки и \(c\)-го столбца (то есть в ячейке со значением \(a_{rc}\)). Вася выполняет следующую процедуру до тех пор, пока это возможно: среди всех ячеек матрицы, в которых значение меньше, чем в ячейке, содержащей сейчас фишку, Вася случайно и равновероятно выбирает одну ячейку и перемещает свою фишку туда.

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

Евклидово расстояние между ячейками матрицы \((i_1, j_1)\) и \((i_2, j_2)\) равно \(\sqrt{(i_1-i_2)^2 + (j_1-j_2)^2}\).

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

Можно показать, что ответ может быть выражен как \(\frac{P}{Q}\), где \(P\) и \(Q\) — взаимно простые целые числа, а \(Q \not\equiv 0~(mod ~ 998244353)\). Выведите значение \(P \cdot Q^{-1}\) по модулю \(998244353\).

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

В первой строке содержатся два целых числа \(n\) и \(m\) \((1 \le n, m \le 1\,000)\) — количество строк и столбцов в матрице \(a\).

Следующие \(n\) строк содержат описание матрицы \(a\). В \(i\)-й строке задано \(m\) целых чисел \(a_{i1}, a_{i2}, \dots, a_{im} ~ (0 \le a_{ij} \le 10^9)\).

Следующая строка содержит два целых числа \(r\) и \(c\) \((1 \le r \le n, 1 \le c \le m)\) — номер строки и номер столбца, в которых изначально находится фишка.

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

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

Примечание

В первом тестовом примере Вася сможет переместить фишку ровно один раз. Математическое ожидание набранных очков будет равно \(\frac{1^2 + 2^2+ 1^2}{3} = 2\).

F. Сделай единицу

битмаски дп Комбинаторика кратчайшие пути математика теория чисел *2500

Януш — бизнесмен. Он владеет компанией «Янушзекс», которая производит игры для школьников. Последним хитом Янушзекс является крутая игра для одного человека «Сделай единицу». Игроку дана последовательность из \(n\) целых чисел \(a_i\).

Разрешается выбрать любое подмножество из них и количество очков равно наибольшему общему делителю выбранных чисел. Игроку нужно выбрать наименьшее количество элементов, получив количество очков, равное \(1\). Теперь Януш интересуется, какое минимальное количество элементов нужно выбрать игроку в таком случае?

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

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 300\,000\)) — количество чисел в последовательности.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 300\,000\)).

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

Если нет ни одного подмножества данной последовательности с наибольшим общим делителем равным \(1\), то выведите -1.

Иначе выведите ровно одно целое число — размер минимального множества с наибольшим общим делителем равным \(1\).

Примечание

В первом примере подмножество, соответствующее всей последовательности даёт наибольший общий делитель равный \(1\). Все меньшие подмножества дают наибольший общий делитель больший \(1\).

Во втором примере наибольший общий делитель любого подмножества хотя бы \(2\).

C. Оптимальный периметр многоугольника

геометрия дп *2100

Есть \(n\) точек на плоскости. Многоугольник, сформированный этими \(n\) точками, строго выпуклый, то есть многоугольник выпуклый и нет трех коллинеарных точек (то есть лежащих на одной прямой). Точки пронумерованы от \(1\) до \(n\) по часовой стрелке.

Определим расстояние между двумя точками \(p_1 = (x_1, y_1)\) и \(p_2 = (x_2, y_2)\) как их манхэттенское расстояние: \(\)d(p_1, p_2) = |x_1 - x_2| + |y_1 - y_2|.\(\)

Более того, определим периметр многоугольника как сумму манхэттенских расстояний между всеми соседними парами точек на нем; если точки на многоугольнике упорядочены как \(p_1, p_2, \ldots, p_k\) \((k \geq 3)\), тогда периметр многоугольника равен \(d(p_1, p_2) + d(p_2, p_3) + \ldots + d(p_k, p_1)\).

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

Обратите внимание, что при проверке многоугольника на самопересечение, ребра многоугольника рисуются как прямые линии. Например, на следующих рисунках:

В многоугольнике, который изображен посередине, последовательность точек (\(p_1, p_3, p_2, p_4\)) неправильная потому, что многоугольник самопересекается. Правый многоугольник (ребра которого напоминают Манхэттенское расстояние) имеет такую же последовательность и не самопересекается, но мы рассматриваем ребра как прямые отрезки. Правильный способ нарисовать этот многоугольник — это использовать последовательность (\(p_1, p_2, p_3, p_4\)), пример которого можно увидеть на левом рисунке.

Вычислите \(f(3), f(4), \ldots, f(n)\). Другими словами, найдите максимально возможный периметр для каждого количества точек (то есть от \(3\) до \(n\)).

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

Первая строка содержит одно целое число \(n\) (\(3 \leq n \leq 3\cdot 10^5\)) — количество точек.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^8 \leq x_i, y_i \leq 10^8\)) — координаты точки \(p_i\).

Гарантируется, что множество точек выпуклое, все точки различны, они упорядочены по часовой стрелке, и нет трех коллинеарных точек.

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

Для каждого \(i\) (\(3\leq i\leq n\)) выведите \(f(i)\).

Примечание

В первом примере для \(f(3)\) есть четыре возможных многоугольника:

  • (\(p_1, p_2, p_3\)) с периметром \(12\).
  • (\(p_1, p_2, p_4\)) с периметром \(8\).
  • (\(p_1, p_3, p_4\)) с периметром \(12\).
  • (\(p_2, p_3, p_4\)) с периметром \(12\).

А для \(f(4)\) есть всего один многоугольник, который состоит из всех точек. Его периметр \(14\).

Во втором примере есть только один многоугольник, его периметр \(8\).

C. Вася и мультимножества

дп жадные алгоритмы математика Перебор реализация *1500

У Васи есть мультимножество чисел \(s\), состоящее из \(n\) элементов. Вася называет число \(x\) хорошим, если это число встречается в мультимножестве ровно один раз. Например, в мультимножестве \(\{1, 1, 2, 3, 3, 3, 4\}\) хорошими числами являются \(2\) и \(4\).

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

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

В первой строке записано целое число \(n~(2 \le n \le 100)\).

Во второй строке записаны \(n\) целых чисел \(s_1, s_2, \dots s_n~(1 \le s_i \le 100)\) — мультимножество \(s\).

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

Если не существует разбиения мультимножества \(s\), удовлетворяющих описанным выше условиям, в первой строке выведите «NO».

В противном случае в первой строке выведите «YES».

Во второй строке выведите строку из \(n\) символов. \(i\)-й символ должен равняться 'A', если \(i\)-й элемент мультимножества \(s\) попадает в мультимножество \(a\), и 'B', если \(i\)-й элемент мультимножества \(s\) попадает в мультимножество \(b\). Элементы нумеруются от \(1\) до \(n\) в том порядке, в каком они заданы во входном файле.

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

D. Двураскраски

битмаски дп *1700

Задана таблица, состоящая из \(2\) строк и \(n\) столбцов. Каждая ячейка данной таблицы должна быть раскрашена либо в черный, либо в белый цвет.

Две ячейки являются соседями, если у них есть общая сторона и их цвет одинаков. Две ячейки \(A\) и \(B\) принадлежат одной и той же компоненте, если они являются соседями, или если существует сосед \(A\), который принадлежит к той же компоненте, что и \(B\).

Назовем некоторую двураскраску красивой, если у нее ровно \(k\) компонент из ячеек.

Посчитайте количество красивых двураскрасок. Это число может быть достаточно велико, поэтому выведите его по модулю \(998244353\).

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

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

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

Выведите единственное целое число — количество красивых двураскрасок по модулю \(998244353\).

Примечание

Одна из возможных раскрасок в примере \(1\):

E. Вася и длинные числа

Бинарный поиск дп Строки Структуры данных хэши *2600

У Васи есть три длинных числа — \(a, l, r\). Назовем разбиением длинного числа \(x\) такую последовательность строк \(s_1, s_2, \dots, s_k\), что \(s_1 + s_2 + \dots + s_k = x\), где \(+\) означает конкатенацию строк. При этом \(s_i\) называется \(i\)-м элементом разбиения. Например, для числа \(12345\) существуют следующие разбиения: ["1", "2", "3", "4", "5"], ["123", "4", "5"], ["1", "2345"], ["12345"] и многие другие.

Назовем разбиение числа \(a\) хорошим, если каждый его элемент не содержит лидирующих нулей.

Вася хочет знать количество хороших разбиений числа \(a\), где каждый элемент разбиения \(s_i\) будет удовлетворять условию \(l \le s_i \le r\). Обратите внимание, что сравнение происходит по правилам сравнения целых чисел, а не сравнения строк.

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

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

В первой строке содержится целое число \(a~(1 \le a \le 10^{1000000})\).

Во второй строке содержится целое число \(l~(0 \le l \le 10^{1000000})\).

В третьей строке содержится целое число \(r~(0 \le r \le 10^{1000000})\).

Гарантируется, что \(l \le r\).

Так же гарантируется, что числа \(a, l, r\) не содержат лидирующих нулей.

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

Выведите одно целое число — количество разбиений числа \(a\), удовлетворяющих описанным выше условиям, по модулю \(998244353\).

Примечание

В первом тестовом примере существует два хороших разбиения \(13+5\) и \(1+3+5\).

Во втором тестовом примере существует одно хорошее разбиение \(1+0+0+0+0\).

E. Отрезки на прямой

Бинарный поиск дп *2500

Дан список целых чисел \(a_1, a_2, \ldots, a_n\) и \(s\) его подотрезков \([l_j; r_j]\) (где \(1 \le l_j \le r_j \le n\)).

Требуется выбрать ровно \(m\) подотрезков, чтобы \(k\)-я порядковая статистика мультимножества чисел \(a_i\), где \(i\) принадлежит хотя бы одному из выбранных подотрезков, была наименьшей возможной. Если невозможно выбрать множество из \(m\) подотрезков, чтобы мультимножество содержало хотя бы \(k\) элементов, выведите -1.

Напомним, что \(k\)-й порядковой статистикой называется значение \(k\)-го элемента в отсортированном по возрастанию списке.

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

Первая строка содержит четыре целых числа \(n\), \(s\), \(m\) и \(k\) (\(1 \le m \le s \le 1500\), \(1 \le k \le n \le 1500\)) — размер списка чисел, количество его подотрезков, количество подотрезков, которые нужно выбрать, и номер статистики.

Вторая строка содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^9\)) — значения чисел в списке.

Следующие \(s\) строк содержат по два целых числа \(l_i\), \(r_i\) (\(1 \le l_i \le r_i \le n\)) — границы данных подотрезков.

Подотрезки во входных данных могут совпадать друг с другом.

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

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

Примечание

В первом примере одно из возможных решений — выбрать первый и третий подотрезок. Вместе они покрывают три элемента из исходного списка (все, кроме третьего). Тогда \(2\)-я порядковая статистика выбранных элементов равна \(2\).

D. Укрась яблоню

графы Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное сортировки *1600

В саду Аркадия растет одна яблоня. Ее можно представить как множество точек развилок, соединенных ветками так, что между любыми двумя развилками существует ровно один путь по веткам. Развилки пронумерованы от \(1\) до \(n\), развилка номер \(1\) называется корнем.

Поддеревом развилки \(v\) называется множество развилок \(u\) таких, что путь из \(u\) в корень проходит через \(v\). Обратите внимание, сама вершина \(v\) тоже входит в поддерево \(v\).

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

Скоро Новый год, поэтому Аркадий решил украсить яблоню. Он повесит по лампочке некоторого цвета на каждый лист и затем посчитает число счастливых развилок. Счастливой развилкой называется такая развилка \(t\), что все лампочки в поддереве \(t\) имеют различные цвета.

Аркадий заинтересован в следующем вопросе: для каждого \(k\) от \(1\) до \(n\), какое минимальное число различных цветов лампочек необходимо, чтобы число счастливых развилок было не меньше \(k\)?

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество развилок в дереве.

Вторая строка содержит \(n - 1\) целое число \(p_2\), \(p_3\), ..., \(p_n\) (\(1 \le p_i < i\)), где \(p_i\) означает, что есть ветка между развилками \(i\) и \(p_i\). Гарантируется, что данное множество веток задает дерево.

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

Выведите \(n\) целых чисел. \(i\)-е из них должно быть равно минимальному количеству цветов, необходимых для того, чтобы число счастливых развилок было не меньше \(i\).

Примечание

В первом примере для \(k = 1\) и \(k = 2\) можно все лампочки сделать одного цвета: счастливыми будут развилки \(2\) и \(3\). Для \(k = 3\) нужно повесить лампочки разных цветов, тогда все развилки будут счастливыми.

Во втором примере для \(k = 4\) можно, например, повесить лампочки цвета \(1\) в развилки \(2\) и \(4\), а лампочку цвета \(2\) в развилку \(5\). Тогда счастливыми будут развилки \(2\), \(3\), \(4\) и \(5\).

F. Напиши контест

Бинарный поиск дп математика *2500

Поликарп, друг Аркадия, готовится к олимпиаде по программированию и решил написать контест. Контест состоит из \(n\) задач и длится \(T\) минут. Каждая из задач задаётся двумя целыми положительными числами \(a_i\) и \(p_i\) — её сложность и количество баллов за её решение

Опыт Поликарпа подсказывает, что его навык характеризуется положительным вещественным числом \(s\), причем изначально \(s=1.0\). Для решения \(i\)-й задачи Поликарпу требуется \(a_i/s\) минут.

Поликарп очень любит смотреть сериалы, поэтому перед решением каждой из задач он обязательно будет смотреть одну серию. За время просмотра серии его навык уменьшается на \(10\%\), то есть навык \(s\) уменьшается до \(0.9s\). Каждая серия имеет продолжительность \(10\) минут. Приняв решение работать над задачей, Поликарп обязательно сначала смотрит серию, а затем решает без перерывов задачу в течение \(a_i/s\) минут, где \(s\) — его текущий навык. При вычислении \(a_i/s\) округление не используется, просто производится деление целого числа \(a_i\) на вещественное число \(s\).

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

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

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

В первой строке записано целое число \(tc\) (\(1 \le tc \le 20\)) — количество тестовых случаев. Далее следуют \(tc\) тестовых случаев.

В первой строке каждого тестового случая записано одно целое число \(n\) (\(1 \le n \le 100\)) — количество задач в контесте.

Вторая строка теста содержит два вещественных числа \(C, T\) (\(0 < C < 10\), \(0 \le T \le 2 \cdot 10^5\)), где \(C\) — параметр, характеризующий эффективность тренировок, а \(T\) — длительность контеста в минутах. Значения \(C, T\) записаны ровно с тремя знаками после десятичной точки.

Каждая из следующих \(n\) строк теста содержит характеристики соответствующей задачи — два целых числа \(a_i, p_i\) (\(1 \le a_i \le 10^4\), \(1 \le p_i \le 10\)) — сложность и количество баллов за её решение.

Гарантируется, что значение \(T\) в каждом тесте таково, что изменение этого числа на \(0.001\) в любую сторону не изменит ответ на тест.

Обратите внимание, что во взломах вы можете использовать только \(tc = 1\).

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

Выведите \(tc\) целых чисел — максимальное возможное количество баллов в каждом тестовом случае.

Примечание

В первом примере набрать \(7\) баллов Поликарп может следующим образом:

  1. Сначала он тренируется \(4\) минуты, увеличивая \(s\) до величины \(5\);
  2. Потом хочет решить \(4\)-ю задачу: смотрит сериал \(10\) минут, глупеет до \(s=5*0.9=4.5\) и тратит на решение \(5/s=5/4.5\), что примерно составляет \(1.111\) минуты;
  3. Наконец, он хочет решить \(2\)-ю задачу: смотрит сериал \(10\) минут, глупеет до \(s=4.5*0.9=4.05\) и тратит на решение \(20/s=20/4.05\), что примерно составляет \(4.938\) минуты.

Таким образом, Поликарп может потратить примерно \(4+10+1.111+10+4.938=30.049\) минут, чтобы набрать \(7\) баллов. Действуя любым другим способом, набрать больше баллов за \(31\) минуту он не успеет.

Во втором примере набрать \(20\) баллов Поликарп может следующим образом:

  1. Сначала он тренируется \(4\) минуты, увеличивая \(s\) до величины \(5\);
  2. Потом хочет решить \(1\)-ю задачу: смотрит сериал \(10\) минут, глупеет до \(s=5*0.9=4.5\) и тратит на решение \(1/s=1/4.5\), что примерно составляет \(0.222\) минуты;
  3. Наконец, он хочет решить \(2\)-ю задачу: смотрит сериал \(10\) минут, глупеет до \(s=4.5*0.9=4.05\) и тратит на решение \(10/s=10/4.05\), что примерно составляет \(2.469\) минуты.

Таким образом, Поликарп может потратить примерно \(4+10+0.222+10+2.469=26.691\) минут, чтобы набрать \(20\) баллов. Действуя любым другим способом, набрать больше баллов за \(30\) минут он не успеет.

C. Таня и цветные конфеты

*особая задача дп *2000

Перед Таней расположены \(n\) коробок с конфетами. Коробки расположены в ряд слева направо, пронумерованы от \(1\) до \(n\). В \(i\)-й коробке находится \(r_i\) конфет, конфеты имеют цвет \(c_i\) (цвет может принимать одно из трёх значений — красный, зеленый или синий). Все конфеты внутри одной коробки имеют одинаковый цвет (и он равен \(c_i\)).

Изначально Таня находится рядом с коробкой номер \(s\). Таня может переместиться к соседней коробке (то есть с номером, который отличается на единицу) или съесть конфеты в этой коробке. Конфеты Таня съедает мгновенно, а вот перемещение занимает одну секунду.

Если Таня съедает конфеты из коробки, то сама коробка остаётся на своём месте, но конфет в ней больше нет. Иными словами, Таня всегда съедает все конфеты из коробки и конфеты в коробках не восполняются.

Известно, что Таня не позволяет себе съедать подряд конфеты одинакового цвета (то есть цвета конфет в двух последовательных коробках, из которых она съедает конфеты — всегда различны). Кроме того, аппетит Тани постоянно растёт (она и сама постоянно растёт), поэтому в каждой следующей коробке, из которой она съедает конфеты, должно быть строго больше конфет, чем в предыдущей.

Заметим, что для первой коробке, откуда Таня съест конфеты, ограничений на цвет и количество конфет — нет.

Таня хочет съесть не менее \(k\) конфет. Какое минимальное количество секунд ей потребуется? Помните, что конфеты она съедает моментально, а время тратится только на перемещения.

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

В первой строке записаны три целых числа \(n\), \(s\) и \(k\) (\(1 \le n \le 50\), \(1 \le s \le n\), \(1 \le k \le 2000\)) — количество коробок, начальное положение Тани и количество конфет, не менее скольки Таня хочет съесть. Следующая строка содержит \(n\) целых числе \(r_i\) (\(1 \le r_i \le 50\)) — количества конфет в коробках. Третья строка содержит последовательность из \(n\) символов «R», «G» или «B», которые обозначают цвета конфет в соответствующих коробках («R» — красный, «G» — зеленый, «B» — голубой). Напомним, что каждая коробка содержит конфеты только одного цвета. Третья строка не содержит пробелов.

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

Выведите одно целое число — наименьшее необходимое время для того, чтобы Таня съела не менее \(k\) конфет. Если решения не существует, выведите «-1».

Примечание

Последовательность действий Тани для первого примера:

  • переместиться от коробки \(3\) к коробке \(2\);
  • съесть конфеты в коробке \(2\);
  • переместиться от коробки \(2\) к коробке \(3\);
  • съесть конфеты в коробке \(3\);
  • переместиться от коробки \(3\) к коробке \(4\);
  • переместиться от коробки \(4\) к коробке \(5\);
  • съесть конфеты в коробке \(5\).

Так как конфеты Таня ест мгновенно, необходимое время — четыре секунды.

E. Разбейте дерево

Бинарный поиск Деревья дп жадные алгоритмы Структуры данных *2400

Вам дано корневое дерево на \(n\) вершинах, его корень имеет номер \(1\). В \(i\)-й вершине записано число \(w_i\). Разбейте его на минимальное число таких вертикальных путей, что сумма чисел \(w_i\) в вершинах пути не превосходит \(S\), а количество вершин в пути не превосходит \(L\). Каждая вершина должна принадлежать ровно одному пути.

Вертикальным путём называется последовательность вершин \(v_1, v_2, \ldots, v_k\), где \(v_i\) (\(i \ge 2\)) — непосредственный предок \(v_{i - 1}\) в дереве.

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

В первой строке даны целые числа \(n\), \(L\), \(S\) (\(1 \le n \le 10^5\), \(1 \le L \le 10^5\), \(1 \le S \le 10^{18}\)) — число вершин в дереве, максимальная длина пути, максимальная сумма на пути.

Во второй строке содержатся \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) (\(1 \le w_i \le 10^9\)) — числа, записанные в вершинах.

Третья строка содержит \(n - 1\) целое число \(p_2, \ldots, p_n\) (\(1 \le p_i < i\)), где \(p_i\) обозначает непосредственного предка \(i\)-й вершины.

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

Выведите одно целое число — минимальное число вертикальных путей. Если разбить дерево невозможно, выведите \(-1\).

Примечание

В первом примере дерево разбивается на пути \(\{1\},\ \{2\},\ \{3\}\).

Во втором примере дерево разбивается на пути \(\{1,\ 2\},\ \{3\}\) или \(\{1,\ 3\},\ \{2\}\).

В третьем примере разбить дерево невозможно.

C. Булочки

дп *1700

Пекарь Лаврентий собирается испечь несколько булочек с начинкой на продажу.

У Лаврентия есть n грамм теста, а так же m различных видов начинки. Виды начинки пронумерованы натуральными числами от 1 до m. Лаврентий знает, что i-го вида начинки у него осталось ai грамм. Чтобы испечь одну булочку с i-ой начинкой, нужно ровно bi грамм этой начинки и ci грамм теста, а продать одну такую булочку можно за di тугриков.

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

Определите какое максимальное количество тугриков Лаврентий может заработать.

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

В первой строке содержатся 4 целых числа n, m, c0 и d0 (1 ≤ n ≤ 1000, 1 ≤ m ≤ 10, 1 ≤ c0, d0 ≤ 100). В каждой из последующих m строк содержится по 4 целых числа. В i-ой из них находятся числа ai, bi, ci и di (1 ≤ ai, bi, ci, di ≤ 100).

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

Выведите единственное число — максимальное количество тугриков, которые Лаврентий может заработать.

Примечание

Чтобы получить наибольшее количество тугриков в первом примере, нужно испечь 2 булочки с начинкой 1, 4 булочки с начинкой 2 и одну булочку без начинки.

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

E. Сергей и метро

Деревья дп поиск в глубину и подобное *2000

Мэр уездного города N Сергей Семёнович днями и ночами думает об улучшении жизни Nчан. К сожалению, все мыслимые и немыслимые идеи по модернизации городского пространства уже были приведены в исполнение и больше мэру нечем занимать свой ум днём (ночью он теперь спит). Однако, его помощники быстро нашли выход из положения, они рисуют на бумаге новый город и предлагают мэру составлять проекты его улучшения.

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

Как показатель качества схемы метро, Сергей Семёнович использует сумму попарных расстояний между всеми парами станций. Расстоянием между двумя станциями называется минимально возможное количество перегонов на пути между ними.

Сергей Семёнович решил добавить в схему новые перегоны. А именно, он дорисовал перегон между станциями \(u\) и \(v\), если эти станции не были соединены перегоном напрямую, но у них была общая станция-сосед, то есть существовала такая станция \(w\), что в оригинальной схеме присутствовал перегон между \(u\) и \(w\) и перегон между \(w\) и \(v\). Вам поставлена задача вычислить сумму попарных расстояний между всеми парами станций в получившейся схеме метрополитена.

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

В первой строке входных данных записано целое число \(n\) (\(2 \leq n \leq 200\,000\)) — количество станций метро в выдуманной помощниками мэра схеме. В каждой из последующих \(n - 1\) строк записаны два числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \ne v_i\)), соответствующие номерам двух станций, соединённых перегоном.

Гарантируется, что заданные во входных данных \(n\) станций и \(n - 1\) перегон образуют дерево.

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

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

Примечание

В первом примере в новой схеме от каждой станции до каждой существует прямой перегон, поэтому сумма расстояний \(6\).

Во втором примере перегоны существуют между всеми парами станций, кроме пары \((1, 4)\), расстояние для которой равно \(2\).

F. Сжимающееся дерево

дп Комбинаторика *2900

Рассмотрим дерево \(T\) (связный неориентированный граф без циклов) с \(n\) вершинами, пронумерованными целыми числами от \(1\) до \(n\). Запустим следующий процесс на \(T\): пока в \(T\) более одной вершины, делать следующее:

  • равновероятно выбрать случайное ребро \(T\);
  • стянуть выбранное ребро: если ребро соединяло вершины \(v\) и \(u\), удалить и \(v\), и \(u\), и создать новую вершину, смежную со всеми вершинами, которые до этого были смежны или с \(v\), или с \(u\). Новая вершина равновероятно получает номер или \(v\), или \(u\).

Когда процесс завершится, \(T\) будет состоять из одной вершины, с номером из \(1, \ldots, n\). Найдите для каждого числа вероятность, что это число окажется номером финальной вершины.

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

В первой строке входного файла записано целое число \(n\) (\(1 \leq n \leq 50\)).

Следующие \(n - 1\) строк описывают ребра дерева. Каждая из этих строк содержит два целых числа \(u_i, v_i\) — номера вершин, соединенных соответствующим ребром (\(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\)). Гарантируется, что данный граф является деревом.

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

Выведите \(n\) вещественных чисел — описанные вероятности для номеров \(1, \ldots, n\), соответственно. Все числа должны быть правильными с точностью до абсолютной или относительной погрешности \(10^{-6}\).

Примечание

В первом примере, получившаяся вершина будет иметь номер 1 тогда и только тогда, когда для всех ребер вершина 1 выживет, соответственно вероятность равна \(1/2^3 = 1/8\). Все остальные числа имеют равную вероятность из-за симметрии, таким образом, каждое из них имеет вероятность \((1 - 1/8) / 3 = 7/24\).

C. Делимость

дп математика реализация Структуры данных теория чисел *1700

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\).

Массив \(b\) называется подпоследовательностью \(a\) если можно удалить некоторые элементы \(a\), чтобы остался массив \(b\).

Массив \(b_1, b_2, \ldots, b_k\) называется хорошим если он не пуст и для каждого \(i\) (\(1 \le i \le k\)) \(b_i\) делится на \(i\).

Посчитайте количество хороших подпоследовательностей \(a\) по модулю \(10^9 + 7\). Две подпоследовательности считаются различными, если множества индексов входящих в них чисел различны, то есть значения элементов не учитываются при сравнении подпоследовательностей. В частности, у массива \(a\) есть ровно \(2^n - 1\) различных подпоследовательностей (не считая пустую).

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 100\,000\)) — длину массива \(a\).

Вторая строка содержит целые числа \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)).

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

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

Примечание

В первом примере все три непустые подпоследовательности являются хорошими: \(\{1\}\), \(\{1, 2\}\), \(\{2\}\)

Во втором примере хорошими являются следующие подпоследовательности: \(\{2\}\), \(\{2, 2\}\), \(\{2, 22\}\), \(\{2, 14\}\), \(\{2\}\), \(\{2, 22\}\), \(\{2, 14\}\), \(\{1\}\), \(\{1, 22\}\), \(\{1, 14\}\), \(\{22\}\), \(\{22, 14\}\), \(\{14\}\).

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

F. Путешествие по строке

дп строковые суфф. структуры Структуры данных *3300

Скажем, что последовательность строк t1, ..., tk является путешествием длины k, если для всех i > 1 ti является подстрокой ti - 1 строго меньшей длины. Например, {ab, b} является путешествием, а {ab, c} или {a, a} — нет.

Определим путешествие по строке s как путешествие t1, ..., tk, все строки которого могут быть вложены в s так, чтобы существовали (возможно, пустые) строки u1, ..., uk + 1, такие, что s = u1t1u2t2... uktkuk + 1. К примеру, {ab, b} является путешествием по строке для abb, но не для bab, так как соответствующие подстроки расположены справа налево.

Назовём длиной путешествия количество строк, из которых оно состоит. Определите максимально возможную длину путешествия по заданной строке s.

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

В первой строке задано целое число n (1 ≤ n ≤ 500 000) — длина строки s.

Во второй строке содержится строка s, состоящая из n строчных английских букв.

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

Выведите одно число — наибольшую длину путешествия по строке s.

Примечание

В первом примере путешествием по строке наибольшей длины является {abcd, bc, c}.

Во втором примере подходящим вариантом будет {bb, b}.

D. Три фигуры

дп кратчайшие пути поиск в глубину и подобное *2200

Вы наткнулись на новый вид шахматной головоломки. Доска, на которой вы играете, не обязательно \(8 \times 8\), но обязательно \(N \times N\). На каждой клетке записано некоторое число от \(1\) до \(N^2\), и все числа попарно различны. В \(j\)-й клетке \(i\)-й строки записано число \(A_{ij}\).

У вас в распоряжении только три фигуры: конь, слон и ладья. Вначале вы выставляете одну из фигур в клетку с номером \(1\) (вы сами выбираете какую). Далее вы хотите добраться до клетки с номером \(2\) (возможно, проходя через некоторые другие клетки в процессе), далее — до клетки \(3\) и так далее, пока не достигнете клетки \(N^2\). За один шаг вы можете либо сделать один валидный ход текущей фигурой, либо заменить фигуру на другую в вашем распоряжении. Каждая клетка может быть посещена любое количество раз.

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

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

Найдите путь, отвечающий всем условиям.

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

Первая строка содержит одно число \(N\) (\(3 \le N \le 10\)) — размер шахматной доски.

Каждая из следующих \(N\) строк содержит \(N\) чисел \(A_{i1}, A_{i2}, \dots, A_{iN}\) (\(1 \le A_{ij} \le N^2\)) — числа, написанные на клетках \(i\)-й строки доски.

Гарантируется, что все \(A_{ij}\) попарно различны.

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

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

Примечание

Один из оптимальных ответов описан ниже (начальная фигура — конь):

  1. Перейти в \((3, 2)\)
  2. Перейти в \((1, 3)\)
  3. Перейти в \((3, 2)\)
  4. Заменить коня на ладью
  5. Перейти в \((3, 1)\)
  6. Перейти в \((3, 3)\)
  7. Перейти в \((3, 2)\)
  8. Перейти в \((2, 2)\)
  9. Перейти в \((2, 3)\)
  10. Перейти в \((2, 1)\)
  11. Перейти в \((1, 1)\)
  12. Перейти в \((1, 2)\)

F. Вверх и вниз по дереву

Деревья дп поиск в глубину и подобное *2500

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

  • спуститься к любому листу поддерева вершины \(v\);
  • если вершина \(v\) — лист, то подняться вверх по дереву не более чем \(k\) раз. Другими словами, если \(h(v)\) — глубина вершины \(v\) (глубина корня равна \(0\)), то вы можете передвинуть фишку в вершину \(to\) такую, что \(to\) — некоторый предок \(v\) и \(h(v) - k \le h(to)\).

В данной задаче считается, что корень не является листом (даже если его степень равна \(1\)). Посчитайте максимальное количество различных листов, которые вы сможете посетить одной последовательностью ходов.

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

В первой строке заданы два целых числа \(n\) и \(k\) (\(1 \le k < n \le 10^6\)) — количество вершин в дереве и ограничение на высоту подъема.

Вторая строка содержит \(n - 1\) целых чисел \(p_2, p_3, \dots, p_n\), где \(p_i\) — непосредственный родитель вершины \(i\).

Гарантируется, что входные данные задают дерево с корнем в вершине \(1\).

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

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

Примечание

Граф из первого примера изображен ниже:

Один из возможных оптимальных обходов: \(1 \rightarrow 2 \rightarrow 1 \rightarrow 5 \rightarrow 3 \rightarrow 7 \rightarrow 4 \rightarrow 6\).

Граф из второго примера:

Один из возможных оптимальных обходов: \(1 \rightarrow 7 \rightarrow 5 \rightarrow 8\). Заметим, что невозможно добраться из вершины \(6\) в \(7\) или \(8\) и наоборот.

F. Очередная ходьба в 2D

дп *2100

Максим ходит по декартовой плоскости. Он начинает в точке \((0, 0)\) и за один ход он может перейти в любую из четырех соседних точек (влево, вправо, вверх, вниз). Например, если сейчас Максим находится в точке \((0, 0)\), то за один ход он может пойти в точки:

  • \((1, 0)\);
  • \((0, 1)\);
  • \((-1, 0)\);
  • \((0, -1)\).

Также на плоскости есть \(n\) различных ключевых точек. \(i\)-я точка равна \(p_i = (x_i, y_i)\). Гарантируется, что \(0 \le x_i\) и \(0 \le y_i\) и нет ключевой точки \((0, 0)\).

Назовем точками первого уровня такие точки, что \(max(x_i, y_i) = 1\), точками второго уровня такие точки, что \(max(x_i, y_i) = 2\) и так далее. Максим хочет посетить все ключевые точки. Но он не хочет посещать точки уровня \(i + 1\) пока не посетит все точки уровня \(i\). Он начинает посещать точки, начиная с минимального уровня точек из заданного множества.

Пусть расстояние между точками \((x_1, y_1)\) и \((x_2, y_2)\) равно \(|x_1 - x_2| + |y_1 - y_2|\) где \(|v|\) равно абсолютной величине \(v\).

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

Если вы программируете на Python, рассмотрите возможность отправки решения на PyPy, а не на Python, когда будете посылать свой код.

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество ключевых точек.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\), \(y_i\) (\(0 \le x_i, y_i \le 10^9\)) — \(x\)-координата ключевой точки \(p_i\) и \(y\)-координата ключевой точки \(p_i\). Гарантируется, что все точки различны и точки \((0, 0)\) нет среди заданных.

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

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

Примечание

Картинка, соответствующая первому тестовому примеру:

Здесь описан один из возможных ответов длины \(15\).

Картинка, соответствующая второму тестовому примеру:

Здесь описан один из возможных ответов длины \(9\).

A. Массив без локальных максимумов

дп *1900

Ване попался на глаза подарок с какого-то его предыдущего дня рождения, это массив размера \(n\) из целых чисел от \(1\) до \(200\). Массив немного истрепался, и некоторые числа нельзя разобрать. Ваня помнит, что для любого числа в массиве хотя бы один из его соседей не меньше его, более формально:

\(a_{1} \le a_{2}\),

\(a_{n} \le a_{n-1}\) и

\(a_{i} \le max(a_{i-1}, \,\, a_{i+1})\) для всех \(i\) от \(2\) до \(n-1\).

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

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

В первой строке содержится одно число \(n\) (\(2 \le n \le 10^{5}\)) — длина массива.

Во второй строке содержится \(n\) целых чисел \(a_{i}\) — элементы массива. При этом либо \(a_{i} = -1\), либо \(1 \le a_{i} \le 200\). \(a_{i} = -1\) значит, что \(i\)-й элемент массива нельзя разобрать.

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

Выведите одно целое число — количество способов восстановить массив по модулю \(998244353\).

Примечание

В первом примере единственное возможное значение \(a_{2}\) — \(2\).

Во втором примере \(a_{1} = a_{2}\), следовательно различных значений ровно \(200\), так как все восстановленные значения должны быть целыми числами от \(1\) до \(200\).

D. Компьютерная игра

дп жадные алгоритмы математика Теория вероятностей *3100

Ваня играет в компьютерную игру. В ней есть \(n\) квестов. Каждый из квестов можно один раз улучшить, после этого награда за его выполнение увеличится. У каждого квеста есть \(3\) характеристики: \(a_{i}\), \(b_{i}\), \(p_{i}\). Это награда за выполнение квеста до улучшения, награда за выполнение квеста после его улучшения (\(a_{i} < b_{i}\)) и вероятность успешно выполнить этот квест.

Каждую секунду Ваня может попытаться выполнить любой квест, и выполнит его с вероятностью \(p_{i}\). В этом случае Ваня получит вознаграждение за него и возможность улучшить один любой квест (не обязательно тот, который он выполнил), в противном случае он не получит ничего. После выполнения квесты не исчезают.

У Вани в распоряжении есть \(t\) секунд. Ваня хочет максимизировать математическое ожидание прибыли за \(t\) секунд. Помогите ему вычислить это значение.

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

В первой строке находятся \(2\) числа \(n\) (\( 1 \le n \le 10^{5}\)) и \(t\) (\( 1 \le t \le 10^{10}\)) — количество квестов и общее время.

В последующих \(n\) содержится описание квестов: каждая строка содержит \(3\) числа \(a_{i}\), \(b_{i}\), \(p_{i}\) (\(1 \le a_{i} < b_{i} \le 10^{8}\), \(0 < p_{i} < 1\)) — награда за выполнение квеста до улучшения, награда за выполнение квеста после его улучшения и вероятность выполнить этот квест. Числа \(a_{i}\), \(b_{i}\) целые. Все вероятности даны с точностью не более \(9\) знаков после запятой.

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

Выведите искомое математическое ожидание.

Ваш ответ будет засчитан, если относительная или абсолютная погрешность не будет превышать \(10^{-6}\). Формально если \(a\) — ваш ответ, а \(b\) — ответ жюри, то он будет засчитан если \(\frac{|a-b|}{max⁡(b, \,\, 1)} \le 10^{-6}\).

E. Ранг случайного леса

Деревья дп математика Паросочетания *2800

Определим ранг неориентированного графа как ранг его матрицы смежности в \(\mathbb{R}^{n \times n}\).

Дано дерево. Каждое из рёбер дерева исчезает с вероятностью \(1/2\) независимо от остальных. Пусть \(E\) — математическое ожидание ранга полученного леса. Найдите остаток от деления \(E \cdot 2^{n-1}\) на \(998244353\) (несложно показать, что \(E \cdot 2^{n-1}\) — целое число).

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

В первой строке записано одно число \(n\) (\(1 \le n \le 5 \cdot 10^{5}\)) — количество вершин дерева.

В следующих \(n-1\) строках описаны рёбра дерева. Каждое ребро описывается парой \(u\) \(v\) (\(1 \le u, \,\, v \le n; \,\, u \ne v\)) вершин, которые оно соединяет.

Гарантируется, что описанный граф является деревом.

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

Выведите одно число — ответ на задачу.

B. Баскетбольная команда

дп Комбинаторика математика Теория вероятностей *1600

Мистер Вафа учится в German University in Cairo (GUC) и любит играть в баскетбол. Он был приятно удивлен, когда узнал, что GUC планирует принять участие в Ежегодном Соревновании по Баскетболу (Annual Basketball Competition, ABC).

Для соревнования будет собрана команда из n игроков — студентов GUC. Игроки будут случайным образом выбраны среди студентов играющих в баскетбол. Однако, в команде могут быть игроки с разных факультетов. Всего в GUC m факультетов, пронумерованных числами от 1 до m. Мистер Вафа учится на факультете номер h. Для каждого факультета i Мистер Вафа знает число si — сколько студентов с него играют в баскетбол, и соответственно могут оказаться членами команды GUC.

Благодаря своим паранормальным способностям, Мистер Вафа знает, что он точно попадет в команду GUC. Теперь он хочет вычислить вероятность того, что вместе с ним в команде окажется хотя бы один студент с его факультета. Так как он очень не любит вычисления с дробными числами, эта задача поручается вам.

Учтите, что все составы команды, в которых есть Мистер Вафа, могут быть выбраны с равной вероятностью. Считайте, что все студенты отличаются друг от друга.

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

В первой строке записаны три целых числа n, m и h (1 ≤ n ≤ 100, 1 ≤ m ≤ 1000, 1 ≤ h ≤ m) — число игроков в команде GUC, число факультетов в GUC, и номер факультета на котором учится Мистер Вафа, соответственно.

На следующей строке записано m целых чисел si (1 ≤ si ≤ 100), разделенных пробелами: количества играющих в баскетбол студентов на каждом факультете соответственно. Учтите, что число sh включает самого Мистера Вафу.

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

Выведите вероятность того, что кроме Мистера Вафы в команде GUC будет хотя бы один студент с его факультета. Если в GUC не хватит игроков чтобы выставить команду на ABC, выведите -1. Ответ считается верным, если абсолютная или относительная погрешность не превосходит 10 - 6.

Примечание

В первом примере все три игрока в баскетбол — два с факультета 1 и один с факультета 2 — будут членами команды GUC. Так как оба игрока с первого факультета будут членами команды, у Вафы гарантированно будет партнер по команде с его факультета.

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

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

C. Размещение

битмаски дп *2400

В 2500-ом году ежегодная церемония вручения дипломов в German University in Cairo (GUC) приближается к своему 500-летнему юбилею.

Важной частью церемонии является размещение профессоров в зале, где происходит вручение дипломов.

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

В зале, где проходит вручение дипломов, имеется n мест, по одному месту для каждого профессора. Некоторые места в этом зале предназначены для более старших профессоров. Конкретно, про m пар мест известно, что для пары мест (ai, bi) профессор, занимающий место ai должен быть старше профессора, занимающего место bi.

Начиная с 2001 года в GUC ответственно подходят к соблюдению традиции размещения профессоров. Традиция гласит, что:

  • Порядок размещения меняется каждый год.
  • В 2001 году было использовано лексикографически первое размещение.
  • Каждый последующий год используется лексикографически следующее размещение.

Под размещением профессоров понимается список из n чисел, где первое число соответствует уровню старшинства профессора, занимающего место номер один, второе число соответствует уровню старшинства профессора, занимающего место номер два и так далее.

Зная n, количество профессоров в GUC, текущий год y, и m пар ограничений на размещение, выведите порядок, в котором будет размещены профессора GUC на церемонии награждения в этом году.

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

В первой строке записано три целых числа n, y и m (1 ≤ n ≤ 16, 2001 ≤ y ≤ 1018, 0 ≤ m ≤ 100) — соответственно, количество профессоров, год, для которого следует вывести порядок размещения профессоров и количество пар мест, про которые известно, что отношение старшинства профессоров должно соблюдаться.

Далее в m строках записаны m пар целых чисел «ai bi», для которых должно выполняться требование, что профессор, занимающий место ai, старше профессора, занимающего место bi (1 ≤ ai, bi ≤ n, ai ≠ bi). Некоторые пары могут быть перечислены более одного раза.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cin (также вы можете использовать спецификатор %I64d).

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

Выведите порядок размещения профессоров в году y.

Если к этому году размещения, удовлетворяющие вышеописанным требованиям, закончатся, или заданные отношения старшинства противоречивы, выведите «The times have changed» (без кавычек).

Примечание

В первом примере лексикографически первым является порядок «1 2 3».

В третьем примере после 3630800-го года допустимые порядки размещения закончатся.

В четвертом примере не существует ни одного размещения удовлетворяющего всем ограничениям.

Лексикографическое сравнение размещений реализует оператор < в современных языках программирования. Размещение a лексикографически меньше размещения b, если существует такое i (1 ≤ i ≤ n), что ai < bi, а для любого j (1 ≤ j < i) aj = bj.

D. Преступление и наказание

графы дп матрицы *2400

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

В случае Египта известно c условий, налагаемых на повторяемость преступлений. Каждое ограничение представляет собой тип преступления ti и его разрешенную кратность mi. Если количество раз, которое Зиад совершил преступление типа ti кратно mi, то он не будет наказан за преступления этого типа. Некоторые типы преступлений могут быть перечислены более одного раза. В этом случае достаточно удовлетворить одному из ограничений для этого типа преступления, чтобы не быть наказанным за него. Естественно, если Зиад не совершил ни одного преступления некоторого типа, то он не будет наказан за преступления этого типа.

Обладая вышеприведенной информацией, Зиад интересуется, сколькими способами можно совершить в Египте ровно n преступлений и остаться безнаказанным?

Порядок совершения преступлений имеет значение. Более формально, два способа, последовательности w1 и w2, считаются одинаковыми, если w1i = w2i, для любого 1 ≤ i ≤ n.

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

На первой строке записано два целых числа n и c (0 ≤ n ≤ 1018, 0 ≤ c ≤ 1000) — суммарное количество преступлений, которые хочет совершить Зиад, и количество ограничений на кратность преступлений.

Затем следуют описания c ограничений на кратность. Всего существует 26 типов преступлений. Каждое ограничение задается типом преступления — большой латинской буквой — и его кратностью.

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

Если кратность какого-то преступления равна 1, то, независимо от того, сколько раз это преступление было совершено, наказания за него не последует. Строгость египетских законов компенсируется необязательностью их выполнения.

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

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cin (также вы можете использовать спецификатор %I64d).

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

Выведите количество способов совершить ровно n преступлений, по модулю 12345.

Примечание

В первом примере возможны следующие 16 способов: AAAAA, AAABB, AABAB, AABBA, ABAAB, ABABA, ABBAA, BAAAB, BAABA, BABAA, BBAAA, ABBBB, BABBB, BBABB, BBBAB, BBBBA.

A. Find a Number

графы дп кратчайшие пути теория чисел *2200

You are given two positive integers \(d\) and \(s\). Find minimal positive integer \(n\) which is divisible by \(d\) and has sum of digits equal to \(s\).

Input

The first line contains two positive integers \(d\) and \(s\) (\(1 \le d \le 500, 1 \le s \le 5000\)) separated by space.

Output

Print the required number or -1 if it doesn't exist.

G. Monsters and Potions

дп жадные алгоритмы Перебор реализация *2300

Polycarp is an introvert person. In fact he is so much of an introvert that he plays "Monsters and Potions" board game alone. The board of the game is a row of \(n\) cells. The cells are numbered from \(1\) to \(n\) from left to right. There are three types of cells: a cell containing a single monster, a cell containing a single potion or a blank cell (it contains neither a monster nor a potion).

Polycarp has \(m\) tokens representing heroes fighting monsters, which are initially located in the blank cells \(s_1, s_2, \dots, s_m\). Polycarp's task is to choose a single cell (rally point) and one by one move all the heroes into this cell. A rally point can be a cell of any of three types.

After Policarp selects a rally point, he picks a hero and orders him to move directly to the point. Once that hero reaches the point, Polycarp picks another hero and orders him also to go to the point. And so forth, until all the heroes reach the rally point cell. While going to the point, a hero can not deviate from the direct route or take a step back. A hero just moves cell by cell in the direction of the point until he reaches it. It is possible that multiple heroes are simultaneously in the same cell.

Initially the \(i\)-th hero has \(h_i\) hit points (HP). Monsters also have HP, different monsters might have different HP. And potions also have HP, different potions might have different HP.

If a hero steps into a cell which is blank (i.e. doesn't contain a monster/potion), hero's HP does not change.

If a hero steps into a cell containing a monster, then the hero and the monster fight. If monster's HP is strictly higher than hero's HP, then the monster wins and Polycarp loses the whole game. If hero's HP is greater or equal to monster's HP, then the hero wins and monster's HP is subtracted from hero's HP. I.e. the hero survives if his HP drops to zero, but dies (and Polycarp looses) if his HP becomes negative due to a fight. If a hero wins a fight with a monster, then the monster disappears, and the cell becomes blank.

If a hero steps into a cell containing a potion, then the hero drinks the potion immediately. As a result, potion's HP is added to hero's HP, the potion disappears, and the cell becomes blank.

Obviously, Polycarp wants to win the game. It means that he must choose such rally point and the order in which heroes move, that every hero reaches the rally point and survives. I.e. Polycarp loses if a hero reaches rally point but is killed by a monster at the same time. Polycarp can use any of \(n\) cells as a rally point — initially it can contain a monster, a potion, or be a blank cell with or without a hero in it.

Help Polycarp write a program to choose a rally point and the order in which heroes move.

Input

The first line of the input contains two integers \(n\) and \(m\) (\(1 \le n \le 100\); \(1 \le m \le n\)) — length of the game board and the number of heroes on it.

The following \(m\) lines describe heroes. Each line contains two integers \(s_i\) and \(h_i\) (\(1 \le s_i \le n\); \(1 \le h_i \le 10^6\)), where \(s_i\) is the initial position and \(h_i\) is the initial HP of the \(i\)-th hero. It is guaranteed that each cell \(s_i\) is blank. It is also guaranteed that all \(s_i\) are different.

The following line contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(-10^6 \le a_j \le 10^6\)), where \(a_j\) describes the \(i\)-th cell of the game board:

  • \(a_j=0\) means that the \(i\)-th cell is blank,
  • \(a_j<0\) means that the \(i\)-th cell contains monster with positive HP of \(-a_j\),
  • \(a_j>0\) means that the \(i\)-th cell contains potion with \(a_j\) HP.
Output

On the first line of the output print the index of the rally point cell.

On the second line print \(m\) integers — the order in which heroes should move to the rally point. Heroes are numbered from \(1\) to \(m\) in the order they are given in the input.

If there are multiple solutions, print any of them.

If it is impossible to find a rally point which can be reached by all heroes, print a single integer -1 in the output.

Note

The picture illustrates the first example:

J. Streets and Avenues in Berhattan

дп *2300

Berhattan is the capital of Berland. There are \(n\) streets running parallel in the east-west direction (horizontally), and there are \(m\) avenues running parallel in the south-north direction (vertically). Each street intersects with each avenue, forming a crossroad. So in total there are \(n \cdot m\) crossroads in Berhattan.

Recently, the government has changed in Berland. The new government wants to name all avenues and all streets after heroes of revolution.

The special committee prepared the list of \(k\) names. Only these names can be used as new names for streets and avenues. Each name can be used at most once.

The members of committee want to name streets and avenues in the way that minimizes inconvenience for residents. They believe that if street and avenue names start with the same letter, then their crossroad will be inconvenient. Hence only the first letter of each name matters.

Given first letters of \(k\) names, find \(C\) — minimal possible number of inconvenient crossroads in Berhattan after the naming process.

Input

Input contains one or several test cases to process. The first line contains \(t\) (\(1 \le t \le 30000\)) — the number of test cases. Solve test cases separately, test cases are completely independent and do not affect each other.

The description of \(t\) test cases follows. Each test case starts with line with space-separated numbers \(n, m, k\) (\(1 \le n,m \le 30000\); \(n+m \le k \le 2\cdot10^5\)) — the number of streets, number of avenues and the number of names in the committee's list, respectively.

The the second line of each test case contains a string of \(k\) uppercase English letters. \(i\)-th letter of the string is the first letter of \(i\)-th name from the committee's list.

It's guaranteed that the sum of numbers \(n\) from all test cases is not greater than \(30000\). Similarly, the sum of numbers \(m\) from all test cases is not greater than \(30000\). The sum of numbers \(k\) from all test cases is not greater than \(2\cdot10^5\).

Output

For each test case print single number \(C\) in the separate line — minimal possible number of inconvenient crossroads in Berhattan after the naming process.

E. Сумма на отрезке

битмаски дп Комбинаторика математика *2300

Задано два целых числа \(l\) и \(r\) (\(l \le r\)). Ваша задача — посчитать сумму чисел от \(l\) до \(r\) (включая \(l\) и \(r\)) таких, что каждое число содержит не более \(k\) различных цифр, и вывести эту сумму по модулю \(998244353\).

Например, если \(k = 1\), тогда вам необходимо посчитать все числа от \(l\) до \(r\) такие, что каждое число содержит только одинаковые цифры. Для \(l = 10, r = 50\) ответ равен \(11 + 22 + 33 + 44 = 110\).

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

Единственная строка входных данных содержит три целых числа \(l\), \(r\) и \(k\) (\(1 \le l \le r < 10^{18}, 1 \le k \le 10\)) — границы отрезка и максимальное количество различных цифр.

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

Выведите одно целое число — сумму чисел от \(l\) до \(r\) таких, что каждое число содержит не более \(k\) различных цифр, по модулю \(998244353\).

Примечание

В первом тестовом примере ответом является сумма чисел от \(l\) до \(r\), которая равна \(\frac{50 \cdot 51}{2} - \frac{9 \cdot 10}{2} = 1230\). Этот пример также разобран в условии задачи, но для \(k = 1\).

Во втором тестовом примере ответом является просто сумма чисел от \(l\) до \(r\), которая равна \(\frac{2345 \cdot 2346}{2} = 2750685\).

В третьем тестовом примере ответ равен \(101 + 110 + 111 + 112 + 113 + 114 + 115 + 116 + 117 + 118 + 119 + 121 + 122 + 131 + 133 + 141 + 144 + 151 = 2189\).

F. Выбери два пути

Деревья дп жадные алгоритмы поиск в глубину и подобное *2500

Задано неориентированное невзвешенное дерево, состоящее из \(n\) вершин.

Неориентированное дерево — это связный неориентированный граф с \(n - 1\) ребром.

Ваша задача — выбрать две пары вершин этого дерева (все выбранные вершины должны быть различны) \((x_1, y_1)\) и \((x_2, y_2)\) таким образом, что \(x_1\) и \(y_1\) не должны принадлежать простому пути от \(x_2\) до \(y_2\) и наоборот (\(x_2\) и \(y_2\) не должны принадлежать простому пути от \(x_1\) до \(y_1\)).

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

Среди всех возможных способов выбрать эти пары вам необходимо выбрать способ с максимальным количеством общих вершин между путями от \(x_1\) до \(y_1\) и от \(x_2\) до \(y_2\). И среди всех таких пар вам необходимо выбрать пару с максимальной суммарной длиной этих двух путей.

Гарантируется, что для заданного дерева существует ответ, содержащий хотя бы две общие вершины между путями.

Длина пути — это количество ребер в нем.

Простой путь — это путь, посещающий каждую вершину не более одного раза.

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

Первая строка входных данных содержит одно целое число \(n\) — количество вершин в дереве (\(6 \le n \le 2 \cdot 10^5\)).

Каждая из следующих \(n - 1\) строк описывает ребра дерево.

Ребро \(i\) описывается двумя целыми числами \(u_i\) и \(v_i\), номерами вершин, которые оно соединяет (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)).

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что для заданного дерева существует ответ, содержащий хотя бы две общие вершины между путями.

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

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

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

Примечание

Картинка, соответствующая первому тестовому примеру:

Пересечение путей равно \(2\) (вершины \(1\) и \(4\)), а суммарная длина равна \(4 + 3 = 7\).

Картинка, соответствующая второму тестовому примеру:

Пересечение путей равно \(2\) (вершины \(3\) и \(4\)), а суммарная длина равна \(5 + 3 = 8\).

Картинка, соответствующая третьему тестовому примеру:

Пересечение путей равно \(3\) (вершины \(2\), \(7\) и \(8\)), а суммарная длина равна \(5 + 5 = 10\).

Картинка, соответствующая четвертому тестовому примеру:

Пересечение путей равно \(5\) (вершины \(1\), \(2\), \(3\), \(4\) и \(5\)), а суммарная длина равна \(6 + 6 = 12\).

F. Отчет по летней практике

дп жадные алгоритмы *2500

Вова прошел летнюю практику в этом году, и теперь должен написать отчет по ней.

Вова уже нарисовал все таблицы и выписал все формулы. Более того, он уже продумал, что отчет будет состоять ровно из \(n\) страниц, и на \(i\)-й страницу будет \(x_i\) таблиц и \(y_i\) формул. Страницы пронумерованы от \(1\) до \(n\).

Вова заполняет страницы одну за другой, он не может перейти к заполнению страницы \(i + 1\) до окончания заполнения страницы \(i\) и он не может пропускать страницы.

Однако, если он чертит строго больше, чем \(k\), таблиц подряд или пишет строго больше, чем \(k\), формул подряд, то ему становится скучно. Вова хочет расположить таблицы и формулы на каждой странице так, что он не устанет в процессе. Вова не может перемещать какую-либо таблицу или формулу на другую страницу.

Обратите внимание, что счетчик не сбрасывается в начале новой страницы. Например, если страница заканчивается \(3\) таблицами и следующая страница начинается с \(5\) таблиц, то они учитываются, как \(8\) таблиц подряд.

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

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

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le n \le 3 \cdot 10^5\), \(1 \le k \le 10^6\)).

Во второй строке записаны \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^6\)) — количество таблиц на \(i\)-й странице.

В третьей строке записаны \(n\) целых чисел \(y_1, y_2, \dots, y_n\) (\(1 \le y_i \le 10^6\)) — количество формул на \(i\)-й странице.

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

Выведите «YES», если Вова может так расположить таблицы и формулы на каждой странице, что нет более чем \(k\) таблиц подряд и нет более чем \(k\) формул подряд.

В противном случае выведите «NO».

Примечание

В первом примере единственный способ расставить все (пусть таблицы будут 'T', а формулы — 'F'):

  • страница \(1\): «TTFTTFT»
  • страница \(2\): «TFTTFTT»

Таким образом, все подряд идущие таблицы образуют блоки длины \(2\).

Во втором примере нет способа расположить все так, чтобы было не более \(2\) таблиц подряд и не более \(2\) формул подряд.

F1. Картинки с котиками (простая версия)

дп *1900

Единственное отличие простой версии от сложной — ограничения.

Вове очень нравятся картинки с котиками. Новостную ленту в социальной сети, в которой он сидит, можно представить как \(n\) последовательных картинок (с котиками, конечно же). Все эти картинки нравятся Вове, но некоторые нравятся больше других: Вова оценивает красоту \(i\)-й картинки как \(a_i\).

Вова хочет репостнуть ровно \(x\) картинок так, что будут выполнены следующие условия:

  • для каждого отрезка новостной ленты из \(k\) последовательных картинок Вова репостнет хотя бы одну из этих картинок;
  • сумма красот репостнутых картинок максимально возможна.

К примеру, если \(k=1\), Вова хочет репостнуть все картинки. Если \(k=2\), Вове не обязательно репостить все картинки, но для каждой пары соседних картинок хотя бы одна должна быть репостнута.

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

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

В первой строке заданы три числа \(n, k\) и \(x\) (\(1 \le k, x \le n \le 200\)) — количество картинок в новостной ленте, минимальная длина подотрезка, на котором обязательно должна быть хотя бы одна репостнутая картинка, и количество картинок, которое собирается репостнуть Вова.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — красота \(i\)-й картинки.

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

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

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

F2. Картинки с котиками (сложная версия)

дп Структуры данных *2100

Единственное отличие простой версии от сложной — ограничения.

Вове очень нравятся картинки с котиками. Новостную ленту в социальной сети, в которой он сидит, можно представить как \(n\) последовательных картинок (с котиками, конечно же). Все эти картинки нравятся Вове, но некоторые нравятся больше других: Вова оценивает красоту \(i\)-й картинки как \(a_i\).

Вова хочет репостнуть ровно \(x\) картинок так, что будут выполнены следующие условия:

  • для каждого отрезка новостной ленты из \(k\) последовательных картинок Вова репостнет хотя бы одну из этих картинок;
  • сумма красот репостнутых картинок максимально возможна.

К примеру, если \(k=1\), Вова хочет репостнуть все картинки. Если \(k=2\), Вове не обязательно репостить все картинки, но для каждой пары соседних картинок хотя бы одна должна быть репостнута.

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

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

В первой строке заданы три числа \(n, k\) и \(x\) (\(1 \le k, x \le n \le 5000\)) — количество картинок в новостной ленте, минимальная длина подотрезка, на котором обязательно должна быть хотя бы одна репостнутая картинка, и количество картинок, которое собирается репостнуть Вова.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — красота \(i\)-й картинки.

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

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

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

C. Цветные кирпичики

дп Комбинаторика математика *1500

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

На земле выложен ряд из \(n\) кирпичей. У Chouti есть под рукой \(m\) ведер с красками разных цветов, поэтому он покрасил каждый кирпич в один из этих \(m\) цветов.

Закончив красить все кирпичи, Chouti был доволен. Он решил узнать что-нибудь про эти кирпичики. После некоторых подсчетов он обнаружил, что существует ровно \(k\) кирпичей, у которых цвет отличается от цвета кирпича слева (конечно, мы не рассматриваем первый кирпич).

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

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

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \leq n,m \leq 2000, 0 \leq k \leq n-1\)) — количество кирпичей, цветов, и кирпичей, у которых цвет отличается цвет от кирпича слева, соответственно.

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

Выведите одно целое число — количество способов покрасить кирпичи по модулю \(998\,244\,353\).

Примечание

В первом примере, так как \(k=0\), цвета всех кирпичей должны быть одинаковыми, поэтому есть ровно \(m=3\) способа покрасить кирпичи.

Во втором примере, предположим в ведре находятся желтый и лаймовый цвета, на следующей картинке расположены все \(4\) раскраски.

E. Увеличение частоты

Бинарный поиск дп жадные алгоритмы *2000

Вам задан массив \(a\) длины \(n\). Вы можете выбрать один отрезок \([l, r]\) (\(1 \le l \le r \le n\)) и целое число \(k\) (положительное, отрицательное или ноль) и изменить \(a_l, a_{l + 1}, \dots, a_r\) на \(k\) каждое (другими словами, \(a_i := a_i + k\) для каждого \(l \le i \le r\)).

Какое максимально возможное количество элементов со значением \(c\) может быть получено после одной такой операции?

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

Первая строка содержит два целых числа \(n\) и \(c\) (\(1 \le n \le 5 \cdot 10^5\), \(1 \le c \le 5 \cdot 10^5\)) — длина массив и значение \(c\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 5 \cdot 10^5\)) — массив \(a\).

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

Выведите единственное число — максимально возможное количество элементов со значением \(c\), которое может быть получено после одной операции описанной выше.

Примечание

В первом примере можно выбрать любой отрезок и \(k = 0\). Массив после применения операции не изменится.

Во втором примере можно выбрать отрезок \([1, 3]\) и \(k = -4\). Массив примет вид \([2, -2, 2]\).

F. Быстрый набор

Деревья дп Строки *2800

У Поликарпа в записной книжке \(n\) телефонов, про каждый он знает сам номер \(s_i\) и \(m_i\) — сколько раз в день он его набирает.

Недавно Поликарп приобрел совершенно новый телефон с инновационной опцией быстрого набора! Более точно, \(k\) его клавишам можно назначить некоторый номер (не обязательно из телефонной книги). Для ввода номера Поликарп может нажать одну из этих \(k\) клавиш, а потом завершить набор номера нажатиями на обычные цифровые клавиши (ввод номера только цифровыми клавишами также возможен).

Клавиша быстрого набора может быть нажата только когда ни одной цифры еще не набрано. Нельзя переназначать номера на клавиши быстрого набора.

Сколько минимально нажатий цифровых клавиш ему придётся делать в сутки, если он назначит на клавиши быстрого набора номера оптимальным способом?

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

В первой строке записаны два целых числа \(n\) and \(k\) (\(1 \le n \le 500\), \(1 \le k \le 10\)) — количество номеров в телефонной книге Поликарпа и количество клавиш быстрого набора на его новом телефоне.

В \(i\)-й из следующих \(n\) строк записана строка \(s_i\) и целое число \(m_i\) \((1 \le m_i \le 500)\), где \(s_i\) — непустая строка из цифр от \(0\) до \(9\) включительно (\(i\)-й номер), а \(m_i\) — и сколько раз в день он будет набран, соответственно.

Гарантируется, что суммарная длина номеров не превысит \(500\).

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

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

Примечание

На единственной клавише цифрового набора в первом примере должно быть записано «0001». Тогда суммарное количество нажатий цифровых клавиш будет равно \(0 \cdot 5\) для первого номера + \(3 \cdot 4\) для второго + \(2 \cdot 1\) для третьего. \(14\) в сумме.

На единственной клавише цифрового набора во втором примере должно быть записано «00». Тогда суммарное количество нажатий цифровых клавиш будет равно \(2 \cdot 5\) для первого номера + \(1 \cdot 6\) для второго + \(2 \cdot 1\) для третьего. \(18\) в сумме.

A. Орехус и оптимальный путь

Деревья дп Структуры данных *1800

Орехус отправляется путешествовать в Древесную страну, в которой \(n\) городов. Кроме того, что большая часть её территории покрыта лесами, местная система дорог также представляет собой дерево (связный ациклический граф). Орехус хочет арендовать автомобиль в городе \(u\) и поехать по простому пути до города \(v\). Он ещё не определил свой путь, и сейчас самое время это сделать. Обратите внимание, что выбранный путь может состоять из одной вершины.

В \(i\)-м городе стоит бензоколонка, в которой по странным законам Древесной страны можно купить не более \(w_i\) литров бензина. Можно считать, что у Орехуса бесконечное количество денег. У каждой дороги есть длина, и как только Орехус проезжает по ней, количество бензина уменьшается на длину дороги. Конечно, Орехус не сможет поехать по пути, на одной из дорог которого ему не хватит бензина. Он может купить в бензин в любом городе, в котором он был, в том числе в первом и последнем.

Кроме того, он хочет найти максимальное количество бензина, которое у него может остаться в конце пути. Помогите ему: посчитайте это количество.

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)) — количество городов.

Вторая строка содержит \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) (\(0 \leq w_{i} \leq 10^9\)) — максимальные количества бензина, которое Орехус может купить в городах.

Каждая из следующих \(n - 1\) строк описывает дорогу и содержит три целых числа \(u\), \(v\), \(c\) (\(1 \leq u, v \leq n\), \(1 \leq c \leq 10^9\), \(u \ne v\)), где \(u\) и \(v\) — города, которые соединяет дорога, а \(c\) — её длина.

Гарантируется, что граф соединённости городов дорогами - это правильное дерево.

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

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

Примечание

Оптимальный путь в первом примере \(2 \to 1 \to 3\).

Оптимальный путь во втором примере \(2 \to 4\).

E. Орехус и прямоугольники

геометрия дп Структуры данных *2400

Орехус застрял в плоском мире. Чтобы выбраться, необходимо решить следующую задачу.

Вам даны \(n\) прямоугольников с вершинами в точках \((0, 0)\), \((x_i, 0)\), \((x_i, y_i)\), \((0, y_i)\). Также для каждого прямоугольника вам дано число \(a_i\). Необходимо выбрать некоторые из них, чтобы площадь их объединения минус сумма их \(a_i\) была максимальна.

Гарантируется, что нет вложенных прямоугольников.

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

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

В первой строке дано одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — число прямоугольников.

Каждая из следующих \(n\) строк содержит три целых числа \(x_i\), \(y_i\) и \(a_i\) (\(1 \leq x_i, y_i \leq 10^9\), \(0 \leq a_i \leq x_i \cdot y_i\)).

Гарантируется, что нет вложенных прямоугольников.

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

В единственной строке выведите ответ на задачу — максимальное значение, которое можно получить.

Примечание

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

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

C. Орехус и строка

дп Комбинаторика реализация *1500

Орехус нашел строку \(s\), состоящую из латинских букв нижнего регистра. Орехус любознательный парень, поэтому ему стал интересен следующий вопрос: сколько существует строго возрастающих последовательностей \(p_1, p_2, \ldots, p_k\) таких, что:

  1. Для каждого \(i\) (\(1 \leq i \leq k\)), \(s_{p_i} =\) 'a'.
  2. Для каждого \(i\) (\(1 \leq i < k\)), существует \(j\), что \(p_i < j < p_{i + 1}\) и \(s_j =\) 'b'.

Удовлетворите любопытство Орехуса, или он расстроится.

Это число должно быть посчитано по модулю \(10^9 + 7\).

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

В первой строке входных данных находится строка \(s\) (\(1 \leq |s| \leq 10^5\)) из латинских букв нижнего регистра.

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

В единственной строке выведите ответ — число искомых последовательностей \(p_1, p_2, \ldots, p_k\) по модулю \(10^9 + 7\).

Примечание

В первом примере \(5\) допустимых последовательностей. \([1]\), \([4]\), \([5]\), \([1, 4]\), \([1, 5]\).

Во втором примере \(4\) допустимых последовательности. \([2]\), \([3]\), \([4]\), \([5]\).

В третьем примере \(3\) допустимых последовательности. \([1]\), \([3]\), \([4]\).

G. Красивая раскраска

дп Комбинаторика Структуры данных *2900

Петя является коллекционером красивых матриц.

Матрица размера \(n \times n\) является красивой, если:

  • Все элементы матрицы являются целыми числами от \(1\) до \(n\);
  • В строке все элементы различные;
  • В столбце нет двух соседних одинаковых элементов.

Сегодня Петя купил красивую матрицу \(a\) размера \(n \times n\) и хочет определить ее редкость.

Редкость матрицы определяется, как ее номер в списке всех красивых матриц размера \(n \times n\), отсортированных в лексикографическом порядке. Сравнение матриц происходит построчно. (Нумерация начинается с нуля).

Так как красивых матриц очень много, то Пете будет достаточно узнать редкость матрицы \(a\) по модулю \(998\,244\,353\).

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

В первой строке записано целое число \(n\) (\(1 \le n \le 2000\)) — размеры матрицы \(a\).

В последующих \(n\) строках записано по \(n\) целых чисел \(a_{i,j}\) (\(1 \le a_{i,j} \le n\)) — элементы матрицы \(a\).

Гарантируется, что матрица \(a\) удовлетворяет свойствам красивой матрицы.

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

Выведите одно целое число — редкость матрицы \(a\) по модулю \(998\,244\,353\).

Примечание

Для матриц размера \(2 \times 2\) существует всего \(2\) красивые матрицы:

Красивых матриц \(3 \times 3\) довольно много, вот первые \(5\) в лексикографическом порядке:

E. Ехаб и задача о выборе компонент

Деревья дп жадные алгоритмы математика *2400

Вам дано дерево, состоящее из \(n\) вершин. Каждая вершина \(u\) имеет некоторый вес \(a_u\). Вы хотите выбрать целое число \(k\) \((1 \le k \le n)\), а затем выбрать \(k\) связных компонент, которые не пересекаются друг с другом (каждая вершина находится максимум в одной компоненте). Пусть вы выбрали компоненты, в совокупности содержащие множество вершин \(s\). Вы хотите максимизировать следующее значение:

\(\)\frac{\sum\limits_{u \in s} a_u}{k}\(\)

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

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

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

В первой строке содержится одно целое число \(n\) \((1 \le n \le 3 \cdot 10^5)\), количество вершин в дереве.

Во второй строке содержатся \(n\) целых чисел \(a_1\), \(a_2\), \(\dots\), \(a_n\) \((|a_i| \le 10^9)\), веса вершин данного дерева.

Далее следует \(n-1\) строка, в каждой из которых содержатся по два целых числа\(u\) и \(v\) \((1 \le u,v \le n)\). Это означает, что между \(u\) и \(v\) есть ребро в данном дереве.

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

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

Примечание

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

В первом примере оптимально выбрать все дерево.

Во втором примере есть только один вариант выбора (выбрать компоненту, содержащую единственную вершину 1) потому что нельзя выбирать 0 компонент.

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

В четвертом примере оптимально выбрать вершины 1 и 3.

C. Счастливое дерево

Деревья дп снм *1900

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

Однажды Пете встретилось дерево из n вершин. При этом дерево было взвешенным, то есть каждое его ребро имело вес (целое положительное число). Ребро счастливое, если его вес — счастливое число. Напомним, что дерево из n вершин — это неориентированный связный граф, у которого ровно n - 1 ребер.

Пете стало интересно, сколько существует таких троек вершин дерева (i, j, k), что и на пути из i в j, и на пути из i в k есть хотя бы одно счастливое ребро (все три вершины попарно различны). Порядок чисел в тройке имеет значение, то есть тройка (1, 2, 3) не равна тройке (2, 1, 3) и не равна тройке (1, 3, 2).

Найдите количество таких троек.

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

В первой строке задано единственное целое число n (1 ≤ n ≤ 105) — количество вершин дерева. В следующих n - 1 строках заданы тройки целых чисел ui vi wi (1 ≤ ui, vi ≤ n, 1 ≤ wi ≤ 109) — пара вершин, которые соединяет ребро, и его вес.

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

В единственной строке выведите одно число — ответ на задачу.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

16 троек из первого примера: (1, 2, 4), (1, 4, 2), (2, 1, 3), (2, 1, 4), (2, 3, 1), (2, 3, 4), (2, 4, 1), (2, 4, 3), (3, 2, 4), (3, 4, 2), (4, 1, 2), (4, 1, 3), (4, 2, 1), (4, 2, 3), (4, 3, 1), (4, 3, 2).

Во втором примере подходит любая тройка вершин. Всего троек: 4·3·2 = 24.

D. Новый год и конкатенация перестановок

дп Комбинаторика математика *1700

Пусть \(n\) — целое число. Рассмотрим все перестановки целых чисел от \(1\) до \(n\) в лексикографическом порядке. Объедините их в одну большую последовательность \(p\). Например, если \(n = 3\), то \(p = [1, 2, 3, 1, 3, 2, 2, 1, 3, 2, 3, 1, 3, 1, 2, 3, 2, 1]\). Длина этой последовательности будет \(n \cdot n!\).

Пусть \(1 \leq i \leq j \leq n \cdot n!\) — пара индексов. Мы называем последовательность \((p_i, p_{i+1}, \dots, p_{j-1}, p_j)\) подотрезком \(p\). Его длина определяется как количество элементов, то есть \(j - i + 1\). Его сумма определяется как сумма всех его элементов, то есть \(\sum_{k=i}^j p_k\).

Дано \(n\). Найдите количество подотрезков \(p\) длины \(n\), имеющих сумму \(\frac{n(n+1)}{2}\). Поскольку это число может быть большим, выведите его по модулю \(998244353\) (простое число).

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

Единственная строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)), которое описано в условии задачи.

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

Выведите одно число — количество подотрезков длины \(n\), в которых сумма равна \(\frac{n(n+1)}{2}\), по модулю \(998244353\).

Примечание

В первом примере есть \(16\) подотрезков длины \(3\). В порядке появления это:

\([1, 2, 3]\), \([2, 3, 1]\), \([3, 1, 3]\), \([1, 3, 2]\), \([3, 2, 2]\), \([2, 2, 1]\), \([2, 1, 3]\), \([1, 3, 2]\), \([3, 2, 3]\), \([2, 3, 1]\), \([3, 1, 3]\), \([1, 3, 1]\), \([3, 1, 2]\), \([1, 2, 3]\), \([2, 3, 2]\), \([3, 2, 1]\).

Их суммы равны \(6\), \(6\), \(7\), \(6\), \(7\), \(5\), \(6\), \(6\), \(8\), \(6\), \(7\), \(5\), \(6\), \(6\), \(7\), \(6\). Поскольку \(\frac{n(n+1)}{2} = 6\), то ответ — \(9\).

F. Дерево максимальной стоимости

Деревья дп поиск в глубину и подобное *1900

Задано дерево, состоящее ровно из \(n\) вершин. Дерево — это связный неориентированный граф с \(n-1\) ребром. Каждой вершине \(v\) этого дерева соответствует некоторое значение \(a_v\).

Пусть \(dist(x, y)\) — расстояние между вершинами \(x\) и \(y\). Расстояние между вершинами — это количество ребер на простом пути между ними.

Определим стоимость дерева как следующую величину: сначала давайте зафиксируем одну вершину дерева. Пусть она равна \(v\). Тогда стоимость дерева равна \(\sum\limits_{i = 1}^{n} dist(i, v) \cdot a_i\).

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

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

Первая строка входных данных содержит одно целое число \(n\), количество вершин в дереве (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)), где \(a_i\) равно значению вершины \(i\).

Каждая из следующих \(n - 1\) строк описывает ребра дерева. Ребро \(i\) описывается двумя целыми числами \(u_i\) и \(v_i\), номерами вершин, которые оно соединяет (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)).

Гарантируется, что заданные ребра образуют дерево.

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

Выведите одно целое число — максимально возможную стоимость дерева, если вы можете выбрать любую вершину в качестве вершины \(v\).

Примечание

Картинка, соответствующая первому тестовому примеру:

Вы можете выбрать вершину \(3\) как корень, тогда ответ будет равен \(2 \cdot 9 + 1 \cdot 4 + 0 \cdot 1 + 3 \cdot 7 + 3 \cdot 10 + 4 \cdot 1 + 4 \cdot 6 + 4 \cdot 5 = 18 + 4 + 0 + 21 + 30 + 4 + 24 + 20 = 121\).

Во втором тестовом примере дерево состоит только из одной вершины, поэтому ответ всегда равен \(0\).

F. Вася и массив

дп *2400

У Васи есть массив, состоящий из \(n\) чисел, а также два числа \(k\) и \(len\). Все числа массива либо лежат в отрезке от \(1\) до \(k\) (включительно), либо равны \(-1\). Массив называется хорошим, если в нем нет подотрезка длины \(len\) или более, состоящего из одинаковых чисел.

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

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

В первой строке заданы три целых числа \(n, k\) и \(len\) (\(1 \le n \le 10^5, 1 \le k \le 100, 1 \le len \le n\)).

Во второй строке заданы \(n\) целых чисел — массив Васи. Каждое число либо равно \(-1\), либо лежит в отрезке от \(1\) до \(k\) (включительно).

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

В единственной строке выведите целое число — количество способов заменить все \(-1\) на числа от \(1\) до \(k\) (включительно) так, чтобы получившийся массив был хорошим. Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Примечание

В перовом тестовом примере существует два способа:

  1. \([1, 2, 1, 1, 2]\);
  2. \([1, 2, 1, 2, 2]\).

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

В третьем тестовом примере перечислить все хорошие массивы не представляется возможным.

D. Простая задача

дп *1800

Вася решил подготовить собсвенный контест и сейчас он разрабатывает самую простую задачу в нем. Условие задачи — это строка длины \(n\), состоящая только из строчных букв латинского алфавита. Вася считает условие задачи сложным, если в нем есть подпоследовательность hard. В противном случае, условие задачи считается простым. Например, hard, hzazrzd, haaaaard — сложные условия, а har, hart and drah — простые условия.

Вася не хочет, чтобы условие его задачи было сложным. Он может удалить некоторые символы из своего условия. Но, конечно же, некоторые части условия являются важными для понимания. Изначально неоднозначность условия равно \(0\), и удалив \(i\)-й символ Вася увеличит неоднозначность условия на \(a_i\) (при этом индексы символов остаются такие же, как и в первоначально строке, например, если удалить символ r из строки hard, то индекс символа d останется \(4\)).

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

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

Первая строка содержит число \(n\) (\(1 \le n \le 10^5\)) — длину условия.

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

Третья строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 998244353\)).

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

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

Примечание

В первом примере можно удалить первые два символа, и условие станет ardh.

Во втором примере можно удалить \(5\)-й символ, и условие станет hhzawde.

В третьем примере ничего удалять не нужно.

E. Супер-Бомбардир

дп Комбинаторика математика Теория вероятностей *2500

Хасан любит различные игры, и недавно его заинтересовала игра под названием Супер-Бомбардир. В этой игре (которая довольно похожа на футбол) \(p\) игроков бьют пенальти. Победитель — это тот игрок, который забил наибольшее число голов. В случае ничьи, один из игроков, забивших наибольшее число голов, объявляется победителем равновероятно.

Игроки только закончили матч, и теперь ожидают результата. Однако закралась небольшая проблема! Судьи потеряли таблицу с счетом всех игроков! К счастью, до потери они успели посчитать сумму забитых голов, а также для каждого игрока они запомнили нижнюю границу на количество забитых им голов. Однако информация об этих границах конфиденциальна, поэтому Хасан смог узнать только свою нижнюю границу.

Согласно предоставленной информации, он знает, что его счет не меньше \(r\), а сумма счета всех игроков — \(s\).

Поэтому финальное состояние игры может быть записано в виде последовательности \(p\) целых чисел \(a_1, a_2, \dots, a_p\) (\(0 \le a_i\)) — счет игроков. Хасан — игрок номер \(1\), поэтому \(a_1 \ge r\). К тому же \(a_1 + a_2 + \dots + a_p = s\). Два состояния считаются различными, если существует такая позиция \(i\), что значение \(a_i\) различается в этих двух состояниях.

Еще раз, Хасан не знает точного счета игроков (он не знает и свой точный счет). Поэтому он считает, что вероятность получить любое финальное состояние игры одинакова.

Помогите Хасану найти вероятность его победы.

Можно показать, что она может быть представлена в форме \(\frac{P}{Q}\), где \(P\) и \(Q\) — неотрицательные целые числа и \(Q \ne 0\), \(P \le Q\). Сообщите значение \(P \cdot Q^{-1} \pmod {998244353}\).

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

В единственной строке записаны три целых числа \(p\), \(s\) и \(r\) (\(1 \le p \le 100\), \(0 \le r \le s \le 5000\)) — количество игроков, сумма счета всех игроков и счет Хасана, соответственно.

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

Выведите единственное число — вероятность победы Хасана.

Можно показать, что она может быть представлена в форме \(\frac{P}{Q}\), где \(P\) и \(Q\) — неотрицательные целые числа и \(Q \ne 0\), \(P \le Q\). Сообщите значение \(P \cdot Q^{-1} \pmod {998244353}\).

Примечание

В первом примере Хасан мог забить \(3\), \(4\), \(5\) или \(6\) голов. Если он забил \(4\) гола или больше, то его счет будет строго больше счета единственного соперника. Если он забил \(3\), то и его соперник забил \(3\), и вероятность победы Хасана равна \(\frac 1 2\). Следовательно, итоговая вероятность победы Хасана равна \(\frac 7 8\).

Во втором примере даже нижняя граница на счет Хасана подразумевает, что он забил больше, чем любой из его соперников. Следовательно, итоговая вероятность победы Хасана равна \(1\).

F. Матожидание инверсий

дп математика Теория вероятностей *2300

Перестановкой размера \(n\) называют такой массив из \(n\) чисел, что все числа от \(1\) до \(n\) встречаются в нем ровно один раз. Инверсией в перестановке \(p\) называют такую пару позиций \((i, j)\), что \(i > j\) и \(a_i < a_j\). Например, перестановка \([4, 1, 3, 2]\) содержит \(4\) инверсии: \((2, 1)\), \((3, 1)\), \((4, 1)\), \((4, 3)\).

Задана перестановка \(p\) размера \(n\). Однако числа на некоторых позициях заменены на \(-1\). Назовем правильной перестановкой такую замену \(-1\) в этой последовательности обратно на числа от \(1\) до \(n\), что полученная последовательность является перестановкой размера \(n\).

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

Найдите математическое ожидание суммарного количества инверсий в полученной правильной перестановке.

Можно показать, что она может быть представлена в форме \(\frac{P}{Q}\), где \(P\) и \(Q\) — неотрицательные целые числа и \(Q \ne 0\). Сообщите значение \(P \cdot Q^{-1} \pmod {998244353}\).

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

В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина последовательности.

Во второй строке записаны \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(-1 \le p_i \le n\), \(p_i \ne 0\)) — начальная последовательность.

Гарантируется, что все элементы, которые не равны \(-1\), попарно различны.

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

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

Можно показать, что она может быть представлена в форме \(\frac{P}{Q}\), где \(P\) и \(Q\) — неотрицательные целые числа и \(Q \ne 0\). Сообщите значение \(P \cdot Q^{-1} \pmod {998244353}\).

Примечание

В первом примере возможны две правильные перестановки:

  • \([3, 1, 2]\)\(2\) инверсии;
  • \([3, 2, 1]\)\(3\) инверсии.

Математическое ожидание равно \(\frac{2 \cdot 1 + 3 \cdot 1}{2} = 2.5\).

Во втором примере нет \(-1\), поэтому возможна единственная правильная перестановка — данная во входных данных. В ней \(0\) инверсий.

В третьем примере возможны две правильные перестановки — одна с \(0\) инверсий и одна с \(1\) инверсией.

G. Счастливые билеты

бпф дп разделяй и властвуй *2400

Все автобусные билеты в Берляндии пронумерованы. Номер каждого билета состоит из \(n\) цифр (\(n\) четно). При этом в номерах билетов могут быть использованы только \(k\) цифр \(d_1, d_2, \dots, d_k\). Допустимо, что номера билетов Берляндии содержат один или более лидирующих нулей, если \(0\) может использоваться в номерах билетов. Например, если \(n = 4\) и в билетах можно использовать две цифры \(0\) и \(4\), то номера \(0000\), \(4004\), \(4440\) могут быть номерами билетов в Берляндии, а номера \(0002\), \(00\), \(44443\) — нет.

Билет в Берляндии считается счастливым, если сумма первых \(n / 2\) цифр равна сумме последних \(n / 2\) цифр.

Определите общее количество счастливых билетов в Берляндии. Так как это число может быть очень большим, выведите остаток от деления общего количества счастливых билетов на \(998244353\).

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

В первой строке следуют два целых числа \(n\) и \(k\) \((2 \le n \le 2 \cdot 10^5, 1 \le k \le 10)\) — количество цифр в номерах билетов, а также количество цифр, которые могут быть использованы в номерах билетов. Гарантируется, что \(n\) — четное число.

Во второй строке следует последовательность различных целых чисел \(d_1, d_2, \dots, d_k\) \((0 \le d_i \le 9)\) — цифры, которые могут быть использованы в билетах в Берляндии. Цифры могут быть заданы в произвольном порядке.

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

Выведите остаток от деления общего количества счастливых билетов в Берляндии на \(998244353\).

Примечание

В первом примере всего \(6\) счастливых номеров билетов: \(1111\), \(1818\), \(1881\), \(8118\), \(8181\) и \(8888\).

Во втором примере существует всего один номер билета, который допустим в Берляндии, он состоит из \(20\) цифр \(6\). Этот билет является счастливым, поэтому ответ \(1\).

B. Пётр и кодовый замок

битмаски дп Перебор *1200

Пётр недавно купил новую машину. Он только приехал на самую известную заправку города Санкт-Петербурга чтобы пополнить свой бензобак, как обнаружил, что бензобак защищён кодовым замком. Замок имеет шкалу в \(360\) градусов и указатель, который изначально указывает на ноль. Замок выглядит следующим образом:

Петр позвонил в свой автосалон и узнал, что должен повернуть колесо замка ровно \(n\) раз, причём \(i\)-й поворот должен составлять ровно \(a_i\) градусов. После всех \(n\) поворотов указатель должен снова указать на ноль.

Это немного озадачило Петра, так как он не знает, какие повороты следует сделать по часовой стрелке, а какие против. Так как есть много разных вариантов, помогите ему и узнайте, есть ли хотя бы один способ сделать все \(n\) поворотов так, чтобы указатель в конце снова указывал на ноль.

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

Первая строка содержит \(n\) (\(1 \leq n \leq 15\)) — количество поворотов.

Каждая из следующих \(n\) строк содержит одно целое число \(a_i\) (\(1 \leq a_i \leq 180\)) — количество градусов в \(i\)-м повороте.

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

Если можно осуществить все повороты так, что указатель будет указывать на ноль, то выведите «YES». Если же этого сделать нельзя, и Петру придётся купить новую машину, то выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

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

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

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

D. Makoto и доска

дп математика Теория вероятностей теория чисел *2200

У Makoto есть большая доска, на которой изначально написано целое положительное число \(n\). После этого он ровно \(k\) раз проделает следующую операцию:

Предположим, что число, записанное сейчас на доске, равно \(v\). Тогда он выберет случайным образом один из делителей \(v\) (включая \(1\) и \(v\)) и заменит \(v\) на этот делитель. Так как Makoto использует свой известный генератор случайных чисел (rng) и число \(58\) как сид этого генератора, то все делители имеют одинаковую вероятность выбора.

Makoto интересуется, чему равно математическое ожидание числа, записанного на доске после всех \(k\) операций.

Можно показать, что это число можно представить как \(\frac{P}{Q}\), где \(P\) и \(Q\) взаимно просты и \(Q \not\equiv 0 \pmod{10^9+7}\). Выведите значение \(P \cdot Q^{-1}\) по модулю \(10^9+7\).

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

Единственная строка содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^{15}\), \(1 \leq k \leq 10^4\)).

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

Выведите одно целое число, математическое ожидание числа записанного на доске после \(k\) операций как \(P \cdot Q^{-1} \pmod{10^9+7}\), где \(P\) и \(Q\) определены выше.

Примечание

В первом примере после одного шага число, записанное на доске, равно \(1\), \(2\), \(3\) или \(6\) с равной вероятностью. Тем самым ответ равен \(\frac{1+2+3+6}{4}=3\).

Во втором примере ответ равен \(1 \cdot \frac{9}{16}+2 \cdot \frac{3}{16}+3 \cdot \frac{3}{16}+6 \cdot \frac{1}{16}=\frac{15}{8}\).

G. Владислав и великая легенда

Деревья дп Комбинаторика *3000

Однажды здесь была великая легенда, но один тролль взломал Codeforces и удалил его. Очень плохо для наc, но в сообществе троллей он заработал уважение и титул овер-супер-мега тролля. Пожалуй для них это что-то хорошее. А для нас, наверное, ещё лучше будет формальное условие.

Вам дано дерево \(T\), содержащее \(n\) вершин, пронумерованных от \(1\) до \(n\). Для каждого непустого \(X\), являющемся подмножеством вершин \(T\), определим \(f(X)\) как количество рёбер в минимальном по размеру поддереве \(T\), содержащем все вершины из \(X\).

Вам также дано целое число \(k\). Вам нужно вычислить сумму \((f(X))^k\) по всем непустым подмножествам вершин, то есть:

\(\) \sum\limits_{X \subseteq \{1, 2,\: \dots \:, n\},\, X \neq \varnothing} (f(X))^k. \(\)

Так как эта величина может быть очень большой, выведите её по модулю \(10^9 + 7\).

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

Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \leq n \leq 10^5\), \(1 \leq k \leq 200\)) — размер дерева и степень при суммировании.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \leq a_i,b_i \leq n\)) — индексы вершин, соединённых соответствующим ребром.

Гарантируется, что заданные рёбра образуют дерево.

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

Выведите одно целое число — требуемую сумму по модулю \(10^9 + 7\).

Примечание

В первых двух примерах значения \(f\) выглядят следующим образом:

\(f(\{1\}) = 0\)

\(f(\{2\}) = 0\)

\(f(\{1, 2\}) = 1\)

\(f(\{3\}) = 0\)

\(f(\{1, 3\}) = 2\)

\(f(\{2, 3\}) = 1\)

\(f(\{1, 2, 3\}) = 2\)

\(f(\{4\}) = 0\)

\(f(\{1, 4\}) = 2\)

\(f(\{2, 4\}) = 1\)

\(f(\{1, 2, 4\}) = 2\)

\(f(\{3, 4\}) = 2\)

\(f(\{1, 3, 4\}) = 3\)

\(f(\{2, 3, 4\}) = 2\)

\(f(\{1, 2, 3, 4\}) = 3\)

H. Матеуш и бесконечная последовательность

битмаски дп Перебор Строки *3400

Последовательность Туе-Морса-Радецки-Матеуша (Туорса-Радевуша, для краткости) это бесконечная последовательность, получающаяся из конечной последовательности \(\mathrm{gen}\) длины \(d\) и целого числа \(m\), следующим образом:

  • В начале мы определяем \(M_0=(0)\).
  • На \(k\)-м шаге, \(k \geq 1\), мы определяем \(M_k\) как конкатенацию \(d\) копий \(M_{k-1}\). Однако, каждая из них немного изменяется — в \(i\)-й из них (\(1 \leq i \leq d\)) каждый элемент \(x\) заменяется на \((x+\mathrm{gen}_i) \pmod{m}\).

Например, если \(\mathrm{gen} = (0, \color{blue}{1}, \color{green}{2})\) и \(m = 4\):

  • \(M_0 = (0)\),
  • \(M_1 = (0, \color{blue}{1}, \color{green}{2})\),
  • \(M_2 = (0, 1, 2, \color{blue}{1, 2, 3}, \color{green}{2, 3, 0})\),
  • \(M_3 = (0, 1, 2, 1, 2, 3, 2, 3, 0, \color{blue}{1, 2, 3, 2, 3, 0, 3, 0, 1}, \color{green}{2, 3, 0, 3, 0, 1, 0, 1, 2})\), и так далее.

Как можно заметить, при условии, что первый элемент \(\mathrm{gen}\) равен \(0\), каждый последующий шаг порождает последовательность, префиксом которой является последовательность с предыдущего шага. Тогда мы можем определить бесконечную последовательность Туорса-Радевуша \(M_\infty\) как последовательность, получаемую бесконечным применением шага выше. Например, для параметров выше, \(M_\infty = (0, 1, 2, 1, 2, 3, 2, 3, 0, 1, 2, 3, 2, 3, 0, 3, 0, 1, \dots)\).

Матеуш выбрал последовательность \(\mathrm{gen}\) и целое число \(m\), и с помощью них получил последовательность Туорса-Радевуша \(M_\infty\). Затем он выбрал два целых числа \(l\) и \(r\) и записал подпоследовательность этой последовательности: \(A := ((M_\infty)_l, (M_\infty)_{l+1}, \dots, (M_\infty)_r)\).

Обратите внимание, что мы используем нумерацию с \(1\) для \(M_\infty\) и \(A\).

У Матеуша есть его любимая последовательность \(B\) длины \(n\) и хочет узнать, насколько она большая относительно \(A\). Он говорит, что последовательность \(B\) мажорирует последовательность \(X\) длины \(n\) (обозначим как \(B \geq X\)), если для всех \(i \in \{1, 2, \dots, n\}\) выполняется \(B_i \geq X_i\).

Теперь он спрашивает себя, сколько существует целых чисел \(x\) в отрезке \([1, |A| - n + 1]\) таких, что \(B \geq (A_x, A_{x+1}, A_{x+2}, \dots, A_{x+n-1})\). Так как обе последовательности очень большие, то ответить на вопрос, используя только бумагу и ручку, оказалось затруднительно. Не могли бы вы ему помочь?

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

Первая строка содержит два целых числа \(d\) и \(m\) (\(2 \leq d \leq 20\), \(2 \leq m \leq 60\)) — длина последовательности \(\mathrm{gen}\) и целое число, используемое как модуль в вычислениях. Вторая строка содержит \(d\) целых чисел \(\mathrm{gen}_i\) (\(0 \leq \mathrm{gen}_i < m\)). Гарантируется, что первый элемент последовательности \(\mathrm{gen}\) равен нулю.

Третья строка содержит одно целое число \(n\) (\(1 \leq n \leq 30000\)) — длина последовательности \(B\).

Четвёртая строка содержит \(n\) целых чисел \(B_i\) (\(0 \leq B_i < m\)).

Пятая строка содержит два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq 10^{18}\), \(r-l+1 \geq n\)).

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

Выведите одно целое число — ответ на задачу.

Примечание

Последовательность Туорса-Радевуша в первом примере это стандартная последовательность Туе-Морса, так что последовательность \(A\) выглядит следующим образом: \(11010011001011010010\). Места, где \(B\) мажорирует последовательность \(A\) представлены на картинке:

F. Печеньки

Бинарный поиск Деревья дп игры поиск в глубину и подобное Структуры данных *2400

Митя и Вася играют в интересную игру. У них есть подвешенное дерево из \(n\) вершин, пронумерованных числами от \(1\) до \(n\). В этом дереве вершина \(1\) является корнем, а родителем вершины \(i \ge 2\) является вершина \(p_i\) (при этом будем говорить, что вершина \(i\) — ребенок вершины \(p_i\)).

В каждой вершине дерева находятся печеньки, в вершине \(i\) находится \(x_i\) печенек. Чтобы съесть одну печеньку в вершине \(i\), нужно потратить \(t_i\) единиц времени. Также в игре есть одна фишка. Изначально она находится в корне дерева. Чтобы переместить фишку по ребру, соединяющему вершину \(i\) с ее родителем, нужно потратить \(l_i\) единиц времени.

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

На любом своем ходу Митя может закончить игру. После этого он двигает фишку вверх до корня, по пути съедая какие-то печеньки. Митя может потратить суммарно на спуск, подъем и поедание печенек не более \(T\) единиц времени. Обратите внимание, что в конце игры фишка всегда оказывается в корне: Митя не может оставить фишку ни в какой промежуточной вершине, даже если требуемое число печенек уже было съедено — он обязан переместить фишку в корень (и на каждое перемещение фишки по ребру из вершины \(v\) в ее предка он тратит \(l_v\) единиц времени).

Какое максимальное количество печенек Митя может съесть, независимо от действий Васи?

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

В первой строке находятся два числа \(n\), \(T\) — количество вершин в дереве и время, которое у него есть на это (\(2\le n \le 10^5\); \(1\le T\le10^{18}\)).

Во второй строке находятся \(n\) чисел \(x_1\), \(x_2\), ..., \(x_n\) — число печенек в каждой вершине (\(1\le x_i\le10^6\)). В третьей строке находятся \(n\) чисел \(t_1\), \(t_2\), ..., \(t_n\) — время, которое требуется, чтобы съесть одну печеньку в \(i\)-й вершине (\(1\le t_i\le10^6\)).

Далее следует \(n - 1\) строка, которые описывают дерево. Для каждого \(i\) от \(2\) до \(n\) в отдельной строке записаны два числа \(p_i\) и \(l_i\), где \(p_i\) — родитель вершины \(i\), а \(l_i\) — время, которое требуется Мите для перемещения фишки вдоль ребра из вершины \(i\) в ее родителя (\(1\le p_i < i\), \(0\le l_i \le 10^9\)).

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

Выведите одно целое число — максимальное число печенек, которое может съесть Митя.

Примечание

В первом примере Митя может первым ходом переместить фишку в вершину \(2\). В этом случае, как бы после этого не играл Вася, Митя сможет съесть не менее \(11\) печенек. Ниже приведен пример того, как могла происходить игра:

  1. Митя перемещает фишку в вершину \(2\).
  2. Вася отрезает ребро, ведущее в вершину \(4\).
  3. Митя перемещает фишку в вершину \(5\).
  4. Так как у вершины \(5\) нет детей, Вася не отрезает ничего.
  5. Митя заканчивает игру и поднимается наверх, по пути собирая печеньки (\(7\) в вершине \(5\), \(3\) в вершине \(2\), \(1\) в вершине \(1\)).

Митя тратит \(1+0\) времени на движение вниз, \(0+1\) на движение вверх, \(7\cdot 2\) чтобы съесть \(7\) печенек в вершине 5, \(3\cdot 3\) чтобы съесть \(3\) печеньки в вершине 2, \(1\cdot 1\) чтобы съесть \(1\) печеньку в вершине 1. Суммарное время равно \(1+0+0+1+7\cdot 2+3\cdot 3+1\cdot 1=26\).

D. Простая задача

битмаски графы дп *2200

Задан простой неориентированный граф. Выведите число простых циклов в нем. Цикл называется простым если не содержит повторяющихся вершин и ребер (т.е. каждая вершина и ребро содержатся в нем не более 1 раза).

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

Первая строка содержит два целых числа n и m (1 ≤ n ≤ 19, 0 ≤ m) — количество вершин и ребер соответственно. Последующие m строк описывают ребра графа парами a, b, (1 ≤ a, b ≤ n, a ≠ b), обозначающими номера соединяемых ребром вершин. Между каждой парой вершин не более одного ребра.

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

Выведите количество простых циклов в заданном графе.

E. Шагом марш!

Бинарный поиск дп жадные алгоритмы *2800

Добро пожаловать в армию, сынок. Джек служит рядовым и у него проблемы со строевой подготовкой. У него никак не получается делать как все: шаг левой, шаг правой, шаг левой, шаг правой и т.д. Заместо этого он запомнил некоторую последовательность действий и повторят ее по циклу. Например, он может запомнить «правой, левой, пропустить» и это значит, что первый шаг он сделает правой ногой, потом сделает шаг левой ногой, а потом и вовсе возьмет перерыв в то время как все остальные в строю делают очередной шаг. Затем он начнет повторять свои действия далее по циклу. Марширую таким образом он будет попадать в общий шаг лишь только в одной трети случаев.

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

Спасите рядового Джека. Задана текущая последовательность шагов. Вычислите какую наибольшую долю попаданий в общий шаг он может иметь после модификации ее.

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

Входные данные состоят из единственной непустой строки, состоящий из символов 'L', 'R' и 'X', где 'L' обозначает шаг левой ногой, 'R' — правой, а 'X' — отдых на время одного шага. Длина заданной последовательности не превосходит 106.

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

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

Примечание

Во втором примере, если добавить две паузы, чтобы получить LXXRXR, то Джек будет маршировать: LXXRXRLXXRXRL... заместо LRLRLRLRLRLRL... и будет делать верный шаг в половине случаев. Если же не добавить пауз вообще, то получится некорректная последовательность шагов, так как Джек будет подряд делать шаг справа.

D. Подсчёт GCD

Деревья дп поиск в глубину и подобное Структуры данных теория чисел *2000

Дано дерево из \(n\) вершин. На каждой вершине дерева записано число; на \(i\)-й вершине записано число \(a_i\).

Определим функцию \(g(x, y)\) как наибольший общий делитель всех чисел, записанных на вершинах на простом пути от вершины \(x\) до вершины \(y\) (включая эти две вершины). Также определим \(dist(x, y)\) как количество вершин на простом пути между \(x\) и \(y\), включая концы пути. \(dist(x, x) = 1\) для каждой вершины \(x\).

Посчитайте максимальное значение \(dist(x, y)\) по всем таким парам вершин, что \(g(x, y) > 1\).

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

В первой строке задано целое число \(n\) \((1 \le n \le 2 \cdot 10^5)\) — количество вершин.

Во второй строке задано \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) \((1 \le a_i \le 2 \cdot 10^5)\) — числа, записанные на вершинах дерева.

Затем следует \(n - 1\) строка, каждая из которых содержит два числа \(x\) и \(y\) \((1 \le x, y \le n, x \ne y)\), обозначающие ребро между вершиной \(x\) и вершиной \(y\). Гарантируется, что эти ребра задают дерево.

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

Если не существует такой пары вершин \(x, y\), что \(g(x, y) > 1\), выведите \(0\). Иначе выведите максимальное значение \(dist(x, y)\) по всем таким парам.

F. Грузовики и города

Бинарный поиск дп *2400

Вдоль дороги, которую можно представить как прямую линию, расположены \(n\) городов. \(i\)-й город находится на расстоянии \(a_i\) километров от начала координат. Все города расположены по одну сторону от начала координат. Также есть \(m\) грузовиков, курсирующих между городами.

Каждый грузовик может быть описан \(4\)-мя числами: начальный город \(s_i\), конечный город \(f_i\), расход топлива \(c_i\) и количество возможных дозаправок \(r_i\). \(i\)-й грузовик тратит \(c_i\) литров топлива на один километр.

Когда грузовик приезжает в некоторый город, он может дозаправиться в нем (но дозаправляться можно только в городах). \(i\)-й грузовик может быть дозаправлен не более чем \(r_i\) раз. При дозаправке грузовик набирает полный бак. Все грузовики стартуют из своих городов с полным баком.

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

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 400\), \(1 \le m \le 250000\)) — количество городов и грузовиков соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\), \(a_i < a_{i+1}\)) — позиции городов с возрастающем порядке.

Следующие \(m\) строк содержат по \(4\) целых числа каждая. \(i\)-я строка содержит целые числа \(s_i\), \(f_i\), \(c_i\), \(r_i\) (\(1 \le s_i < f_i \le n\), \(1 \le c_i \le 10^9\), \(0 \le r_i \le n\)) — описание \(i\)-го грузовика.

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

Выведите единственное число — минимально возможный объем топливных баков \(V\) такой, что все грузовики смогут достигнуть своих конечных городов.

Примечание

Рассмотрим запросы поподробнее:

  1. \(1\)-й грузовик должен прибыть в позицию \(7\) из \(2\) без дозаправок, поэтому ему необходим бензобак объема хотя бы \(50\).
  2. \(2\)-й грузовик должен прибыть в позицию \(17\) из \(2\) и может дозаправляться в каждом городе вдоль пути (который находится между начальным и конечным городом), поэтому ему необходим бак объема хотя бы \(48\).
  3. \(3\)-й грузовик должен прибыть в позицию \(14\) из \(10\), так как нет городов между позициями, то грузовику необходим бак объема хотя бы \(52\).
  4. \(4\)-й грузовик должен прибыть в позицию \(17\) из \(10\) и может дозаправиться один раз: оптимально дозаправиться в \(5\)-м городе (позиция \(14\)), поэтому ему необходим бак объема хотя бы \(40\).
  5. \(5\)-й грузовик имеет то же самое описание, поэтому ему также понадобится бак объема хотя бы \(40\).
  6. \(6\)-th грузовик должен прибыть в позицию \(14\) из \(2\) и может дозаправиться два раза: первый раз в городе \(2\) или \(3\) и второй раз в городе \(4\), поэтому ему понадобится бак объема хотя бы \(55\).

F. Вытянутая матрица

Бинарный поиск битмаски графы дп Перебор *2000

Задана матрица \(a\), состоящая из \(n\) строк и \(m\) столбцов. В каждой ячейке записано целое число.

Разрешается произвольно изменить порядок строк (в том числе и оставить начальный порядок), но не разрешается менять порядок ячеек в строке. После того, как был выбран некоторый порядок строк, матрица полностью обходится следующим образом: сначала посещаются все ячейки первого столбца с верхней строки до нижней, потом так же все ячейки второго столбца и так далее. Во время обхода выписывается последовательность чисел в ячейках в том же порядке, в котором они были посещены. Назовем эту последовательность \(s_1, s_2, \dots, s_{nm}\).

Обход называется \(k\)-приемлемым, если для всех \(i\) (\(1 \le i \le nm - 1\)) \(|s_i - s_{i + 1}| \ge k\).

Найдите такое максимальное целое число \(k\) такое, что существует порядок строк матрицы \(a\), который образует \(k\)-приемлемый обход.

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 16\), \(1 \le m \le 10^4\), \(2 \le nm\)) — количество строк и столбцов, соответственно.

В каждой из следующих \(n\) строк записаны по \(m\) целых чисел (\(1 \le a_{i, j} \le 10^9\)) — описание матрицы.

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

Выведите единственное целое число \(k\) — такое максимальное число, что существует порядок строк матрицы \(a\), который образует \(k\)-приемлемый обход.

Примечание

В первом примере можно переставить строки следующим образом, чтобы получить \(5\)-приемлемый обход:


5 3
10 8
4 3
9 9

Тогда последовательность \(s\) будет \([5, 10, 4, 9, 3, 8, 3, 9]\). Каждая пара соседних элементов отличается хотя бы на \(k = 5\).

Во втором примере максимальное \(k = 0\), любой порядок \(0\)-приемлем.

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

D. Слой профессионалов

битмаски дп *3100

Кардблаф - популярный вид спорта в Телеграме. Каждый игрок в Кардблаф когда-либо мечтал попасть в слой профессионалов. В слое профессионалов сейчас \(n\) судей и вы проходите туда отбор. У вас есть число \(k\) — ваше умение играть в Кардблаф.

Каждый судья имеет число \(a_i\) — показатель неуверенности относительно того, брать вас или нет, а также опыт \(e_i\). Для того, чтобы убеждать судей, вам нужно играть с ними. С каждым судьёй вы можете сыграть только один раз. По результатам игры вы можете уменьшить неуверенность \(i\)-го судьи, разделив её на любой делитель \(a_i\) небольший \(k\). Если НОД всех показателей судей будет равен \(1\), то они придут к согласию и возьмут вас в слой профессионалов.

Также вы хотели бы минимизировать время, потраченное на убеждение судей. Известно, что если вы сыграете с \(x\) судьями с суммарным опытом \(y\), то потратите \(x \cdot y\) секунд.

Выведите минимальное время для вступление в слой профессионалов, если это возможно, и \(-1\), иначе.

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

В первой строке содержатся два числа \(n\) и \(k\) (\(1 \leq n \leq 10^6\), \(1 \leq k \leq 10^{12}\)) — число судей и ваше умение играть в Кардблаф.

Во второй строке содержатся \(n\) чисел, где \(i\)-е число \(a_i\) (\(1 \leq a_i \leq 10^{12}\)) — неуверенность \(i\)-го судьи.

В третьей строке содержатся \(n\) чисел в аналогичном формате (\(1 \leq e_i \leq 10^9\)), \(e_i\) — опыт \(i\)-го судьи.

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

Выведите одно число - минимальное число секунд, если существует способ убедить судей, и \(-1\), иначе.

C. Аюб и утерянный массив

дп Комбинаторика математика *1500

У Аюба был массив целых чисел \(a\) длины \(n\) и у этого массива было два необычных свойства:

  • Все целые числа в этом массиве были от \(l\) до \(r\) (включительно).
  • Сумма всех элементов в массиве делилась на \(3\).

К сожалению, Аюб потерял свой массив, но он помнит размер массива \(n\), а также числа \(l\) и \(r\), так что он попросил вас посчитать количество способов восстановить массив по этим данным.

Так как ответ может быть очень большим, выведите его по модулю \(10^9 + 7\) (то есть остаток при делении на \(10^9 + 7\)). В случае если не существует ни одного подходящего массива (Аюб что-то перепутал) — выведите \(0\).

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

Первая и единственная строка содержит три целых числа \(n\), \(l\) и \(r\) (\(1 \le n \le 2 \cdot 10^5 , 1 \le l \le r \le 10^9\)) — размер массива и диапазон чисел в нём.

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

Выведите остаток при делении на \(10^9 + 7\) количества способов восстановить массив.

Примечание

В первом примере возможны массивы \([1,2], [2,1], [3, 3]\).

Во втором примере единственный возможный массив — \([2, 2, 2]\).

E. Помочь Хиасату

meet-in-the-middle битмаски дп Перебор *2200

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

К счастью для Хиасата, он может менять свой профиль в некоторые моменты времени. Также он знает моменты времени, когда его друзья будут заходить на его страницу. Формально, дана последовательность событий двух видов:

  • \(1\) — Хиасат может поменять свой хендл.
  • \(2\) \(s\) — друг \(s\) посещает профиль Хиасата.

Друг \(s\) будет счастлив, если каждый раз, когда он посетит страницу Хиасата, его хендл будет равен \(s\).

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

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^5, 1 \le m \le 40\)) — количество событий и количество друзей.

Затем следуют \(n\) строк, задающих событие одно из двух видов:

  • \(1\) — Хиасат может поменять свой хендл.
  • \(2\) \(s\) — друг \(s\) (\(1 \le |s| \le 40\)) посещает профиль Хиасата.

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

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

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

Выведите одно целое число — наибольшее число счастливых друзей.

Примечание

В первом примере, оптимально поменять хендл на «motarack» в первом событие и на «light» в четвёртом. Таким образом, «motarack» и «light» будут счастливы, а «mike» — нет.

Во втором примере можно выбрать «alice», «bob» или «tanyaromanova», и ровно этот друг и будет счастлив.

E. Лунный новый год и красные конверты

дп Структуры данных *2100

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

Опишем задачу математически. Рассмотрим ось времени с момента \(1\) до момента \(n\). \(i\)-й красный конверт будет доступен с момента времени \(s_i\) до \(t_i\) включительно, он будет содержать \(w_i\) монет. Если Боб хочет забрать из \(i\)-го конверта монеты, то он может это сделать только в целочисленный момент времени между \(s_i\) и \(t_i\) включительно, а после этого он не сможет собирать монеты из других конвертов до времени \(d_i\) включительно. Выполняется \(s_i \leq t_i \leq d_i\).

Боб жадный, поэтому он жадно собирает монеты: в каждый момент времени \(x\) он собирает монеты из доступного конверта с максимальным количеством монет. Если есть несколько доступных конвертов с одинаковым максимальным количеством монет, Боб выберет конверт, параметр \(d\) которого максимальный. Если все еще есть несколько вариантов, Боб выберет один из них случайным образом.

Все было бы хорошо, но Алиса — дочь Боба — не хочет, чтобы ее отец собрал слишком много монет. Она может отвлечь Боба не более чем \(m\) раз, каждый раз — в один целочисленный момент времени. Если Алиса решает отвлечь Боба в момент времени \(x\), он не сможет ничего делать в момент времени \(x\) и продолжит свою обычную стратегию в момент времени \(x + 1\) (включительно), что приведет к тому, что он может пропустить некоторые красные конверты.

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

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

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \leq n \leq 10^5\), \(0 \leq m \leq 200\), \(1 \leq k \leq 10^5\)) — длину оси времени, количество раз, которое Алиса может отвлечь Боба, и число красных конвертов, соответственно.

Следующие \(k\) строк описывают \(k\) красных конвертов. \(i\)-я строка содержит четыре целых числа \(s_i\), \(t_i\), \(d_i\) и \(w_i\) (\(1 \leq s_i \leq t_i \leq d_i \leq n\), \(1 \leq w_i \leq 10^9\)) — отрезок времени, когда доступен \(i\)-й конверт, время, начиная с которого Боб может продолжить собирать деньги после того, как он соберет конверты из \(i\)-го конверта, и количество монет в этом конверте, соответственно.

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

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

Примечание

В первом примере Алиса не может отвлекать Боба. Поэтому Боб соберет монеты в красных конвертах в моменты времени \(1\) и \(5\), и в итоге соберет \(13\) монет.

Во втором примере Алиса должна отвлечь Боба в момент времени \(1\). Тогда Боб пропустит первый конверт, соберет второй и после этого ничего не будет делать. Ответ будет равен \(2\).

D. Сжатие

дп математика реализация теория чисел *1800

Вам дана двоичная матрица \(A\) размера \(n \times n\). Обозначим \(x\)-сжатие данной матрицы как матрицу \(B\) размера \(\frac{n}{x} \times \frac{n}{x}\), такую, что для всех \(i \in [1, n], j \in [1, n]\) выполняется условие \(A[i][j] = B[\lceil \frac{i}{x} \rceil][\lceil \frac{j}{x} \rceil]\).

Очевидно, \(x\)-сжатие возможно только в том случае, если \(x\) является делителем \(n\), но этого недостаточно. К примеру, у этой матрицы \(2 \times 2\) нет \(2\)-сжатия:

\(01\)
\(10\)

Для заданной матрицы \(A\) найдите максимальное \(x\), для которого возможно \(x\)-сжатие этой матрицы.

Обратите внимание: входные данные заданы в сжатом виде. Несмотря на это, лучше используйте быстрое считывание.

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

В первой строке записано одно число \(n\) (\(4 \le n \le 5200\)) — количество строк и столбцов в матрице \(A\). Гарантируется, что \(n\) делится на \(4\).

Далее следует описание матрицы. В каждой из \(n\) следующих строк следуют по \(\frac{n}{4}\) однозначных числа шестнадцатеричной системы счисления (то есть, эти числа могут задаваться либо как цифры от \(0\) до \(9\), либо как прописные латинские буквы от \(A\) до \(F\)). Двоичная запись каждого из этих чисел задаёт очередные \(4\) элемента матрицы в текущей строке. Например, если число равно \(B\), то очередные четыре элемента матрицы равны 1011, а если число равно \(5\), то очередные четыре элемента матрицы равны 0101.

Элементы в каждой строке задаются без пробелов.

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

Выведите одно число: максимальное \(x\), для которого возможно \(x\)-сжатие.

Примечание

В первом примере задается матрица:

\(11100111\)
\(11100111\)
\(11100111\)
\(00000000\)
\(00000000\)
\(11100111\)
\(11100111\)
\(11100111\)

Довольно легко увидеть, что ответ равен \(1\).

E. Вася и двоичная строка

дп *2400

У Васи есть строка \(s\) длины \(n\) состоящая только из цифр 0 и 1. Так же у него есть массив \(a\) длины \(n\).

Вася выполняет следующую операцию до тех пор пока строка не станет пустой: взять последовательный подотрезок одинаковых символов, удалить его из строки и склеить оставшиеся две части (любая из оставшихся частей может быть пустой). Например, если Вася удалит подстроку 111 из строки 111110 он получит строку 110. За удаление строки длины \(x\) Вася получает \(a_x\) очков.

Вася хочет максимизировать суммарное количество очков, помогите ему с этим!

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

Первая строка содержит число \(n\) (\(1 \le n \le 100\)) — длину строки \(s\).

Вторая строка содержит строку \(s\), состоящую только из цифр 0 и1.

Третья строка содержит \(n\) чисел \(a_1, a_2, \dots a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно количеству очков за удаление подстроки длины \(i\).

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

В единственной строке выведите число — максимальное количество очков которое может получить Вася.

Примечание

В первом тестовом примере оптимальная последовательность удалений имеет следующий вид: 1101001 \(\rightarrow\) 111001 \(\rightarrow\) 11101 \(\rightarrow\) 1111 \(\rightarrow\) \(\varnothing\).

Во втором тестовом примере оптимальная последовательность удалений имеет следующий вид: 10101 \(\rightarrow\) 1001 \(\rightarrow\) 11 \(\rightarrow\) \(\varnothing\).

F. Вася и бесконечные кредиты

графы дп Паросочетания Потоки сортировки *2600

Вася решил купить себе шикарную новую машину. К сожалению, ему немного не хватает денег. Сейчас у него есть 0 бурлей.

В местном банке есть \(n\) предложений по кредитам. Каждое предложение описывается тремя числами \(a_i\), \(b_i\) и \(k_i\). Предложения пронумерованы от \(1\) до \(n\). Если Вася пользуется \(i\)-м предложением, то банк выдает ему \(a_i\) бурлей в начале месяца, а потом забирает по \(b_i\) бурлей в конце каждого из \(k_i\) следующих месяцев (включая месяц, в который кредит был взят). Вася может брать предложения в любом порядке.

В каждый месяц Вася может брать не более одного кредитного предложения. К тому же каждое кредитное предложение может быть использовано не более одного раза. Несколько кредитов могут быть активны в одно и то же время. Это подразумевает, что Вася платит банку сумму \(b_i\) по всем \(i\) активных кредитов в конце каждого из месяцев.

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

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

Какая максимальная цена может быть у новой машины?

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

В первой строке записано одно целое число \(n\) (\(1 \le n \le 500\)) — количество кредитных предложений.

В каждой из следующих \(n\) строк записаны по три целых числа \(a_i\), \(b_i\) и \(k_i\) (\(1 \le a_i, b_i, k_i \le 10^9\)).

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

Выведите одно целое число — максимальную цену машины.

Примечание

В первом примере оптимальная последовательность взятых кредитов такова: 4 \(\rightarrow\) 3.

Количество бурлей у Васи меняется следующим образом: 5 \(\rightarrow\) 32 \(\rightarrow\) -86 \(\rightarrow\) .... Он забирает деньги в середине второго месяца (32 бурля) и покупает машину.

Отрицательное число бурлей значит, что Вася должен заплатить банку эту сумму денег.

Во втором примере оптимальная последовательность взятых кредитов такова: 3 \(\rightarrow\) 1 \(\rightarrow\) 2.

Количество бурлей у Васи меняется следующим образом: 0 \(\rightarrow\) 300 \(\rightarrow\) 338 \(\rightarrow\) 1337 \(\rightarrow\) 236 \(\rightarrow\) -866 \(\rightarrow\) ....

G. Вася и максимальный заработок

Бинарный поиск дп Конструктив снм Структуры данных *2400

Вася сильно устал от кредитов (из задачи F) и теперь хочет заработать деньги сам! Для этого он решил подготовить контест.

Васе предложено \(n\) задач. Они пронумерованы от \(1\) до \(n\). Сложность \(i\)-й задачи равна \(d_i\). Кроме того, задачи заданы в возрастающем относительно сложности порядке. Сложности всех задач различны. Для того чтобы добавить \(i\)-ю задачу в контест Васе нужно заплатить \(c_i\) бурлей автору. За каждую задачу в своем контесте Вася получит \(a\) бурлей.

Для того чтобы создать контест нужно выбрать непрерывный подотрезок задач.

Суммарный заработок за контест считается следующим образом:

  • если Вася берет задачу \(i\) в контест, ему нужно заплатить \(c_i\) её автору;
  • за каждую добавленную задачу Вася получает \(a\) бурлей;
  • пусть \(gap(l, r) = \max\limits_{l \le i < r} (d_{i + 1} - d_i)^2\). Если Вася берет в контест все задачи с индексом от \(l\) до \(r\), он так же платит \(gap(l, r)\). Если \(l = r\) то \(gap(l, r) = 0\).

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

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

Первая строка содержит \(n\) и\(a\) (\(1 \le n \le 3 \cdot 10^5\), \(1 \le a \le 10^9\)) — количество предложенных задач и количество бурлей, которое Вася получает за одну задачу соответственно. В каждой из следующих \(n\) строк содержится два числа \(d_i\) и \(c_i\) (\(1 \le d_i, c_i \le 10^9, d_i < d_{i+1}\)).

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

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

D. Разнообразная гирлянда

дп жадные алгоритмы Конструктив *1400

У вас есть гирлянда, состоящая из \(n\) ламп. Каждая лампа — красная, зеленая или синяя. Цвет \(i\)-й лампы равен \(s_i\) ('R', 'G' и 'B' — цвета ламп в гирлянде).

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

Гирлянда называется разнообразной, если любые ее две соседние (последовательные) лампы (то есть такие лампы, что расстояние между их позициями равно \(1\)) имеют различные цвета.

Другими словами, если получилась гирлянда \(t\), то для всех \(i\) от \(1\) до \(n-1\) должно выполняться условие \(t_i \ne t_{i + 1}\).

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

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество ламп.

Вторая строка входных данных содержит строку \(s\), состоящую из \(n\) символов 'R', 'G' и 'B' — цвета ламп в гирлянде.

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

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

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

A. Саша и немного отдыха

дп реализация *1600

Саша любит программировать. Однажды, во время одного очень долгого контеста Саша решил, что он устал и было бы не плохо немного передохнуть. Так он и поступил. Но так как Саша не простой парень, то и отдыхает он необычно. Во время отдыха Саша очень любит дорешивать когда-то нерешённые задачи, ведь дорешка очень важна.

А дорешать Саша решил следующую задачу:

Дан массив \(a\) из \(n\) целых чисел, необходимо найти количество смешных пар \((l, r)\) \((l \leq r)\). Чтобы проверить, что пара \((l, r)\) — смешная, обозначим \(mid = \frac{l + r - 1}{2}\), тогда, если \(r - l + 1\) — четное число, и \(a_l \oplus a_{l+1} \oplus \ldots \oplus a_{mid} = a_{mid + 1} \oplus a_{mid + 2} \oplus \ldots \oplus a_r\), то пара смешная. Иначе говоря \(\oplus\) элементов левой половины подмассива с \(l\) по \(r\) должен быть равен \(\oplus\) элементов правой половины. Где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Саше необходимо продолжить решать контест, а эту задачу он предложил решить вам.

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

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{20}\)) — сам массив.

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

Выведите одно число — количество смешных пар. Вы должны учитывать только те пары, в которых \(r - l + 1\) чётно.

Примечание

Дорешивай задачи, будь как Саша!

В первом примере единственная смешная пара — это \((2, 5)\), так как \(2 \oplus 3 = 4 \oplus 5 = 1\).

Во втором примере смешные пары \((2, 3)\), \((1, 4)\), и \((3, 6)\).

В третьем примере нет смешных пар.

D. Саша и интересный факт из теории графов

Деревья дп Комбинаторика математика Перебор *2400

Однажды, во время пары Саше стало скучно и он решил поговорить со своими друзьями. Тут он увидел Кефу. О Кефе можно говорить бесконечно, поэтому делать мы этого не будем. Разговор ребят зашёл о графах. Кефа пообещал рассказать Саше один интересный факт из теории графов, если тот, в свою очередь, поможет Кефе посчитать количество красивых деревьев.

В данной задаче деревом называется взвешенный связный граф, состоящий из \(n\) вершин и \(n-1\)-го ребра, такой, что веса всех рёбер — целые числа от \(1\) до \(m\). Красоту дерева Кефа оценивает следующим образом: он находит в дереве две свои любимые врешины — вершины с номерами \(a\) и \(b\), и считает расстояние между ними. Расстоянием между двумя вершинами \(x\) и \(y\) назовём сумму весов всех рёбер на простом пути из \(x\) в \(y\). Если расстояние от вершины \(a\) до вершины \(b\) равно \(m\), то дерево красивое.

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

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

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

Первая строка содержит четыре целых числа \(n\), \(m\), \(a\), \(b\) (\(2 \le n \le 10^6\), \(1 \le m \le 10^6\), \(1 \le a, b \le n\), \(a \neq b\)) — количество вершин в дереве, максимальный вес ребра и две любимые вершины Кефы.

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

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

Примечание

В первом примере существует \(5\) красивых деревьев:

Во втором примере красивыми являются следующие деревья:

C. Петя и пауки

битмаски дп снм *2100

Маленький Петя любит заниматься дрессировкой пауков. У Пети есть доска размера n × m, в каждой клетке которой изначально сидит паук. Через одну секунду Петя быстро выбирает для каждого паука некоторое действие, и все они покорно выполняют свои команды. Всего есть 5 различных команд: остаться на месте или переползти из своей клетки в определенную из четырех соседних по стороне (то есть по одной команде на каждое из четырех возможных направлений). Петя дает команды таким образом, чтобы ни один паук не уполз за пределы доски. Допускается, что пауки могут ползти навстречу друг другу. Все пауки переползают одновременно, в одной клетке в итоге может оказаться более одного паука. Петя хочет знать, каким может быть максимальное возможное количество свободных от пауков клеток через одну секунду.

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

В первой строке через пробел записано два целых числа n и m (1 ≤ n, m ≤ 40, n·m ≤ 40) — размеры доски.

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

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

Примечание

В первом примере единственный возможный ответ:

s

Во втором примере один из возможных вариантов ответа:

rdl
rul

s обозначает команду «оставаться на месте», l, r, d, u обозначают команды соответственно «ползти влево», «ползти вправо», «ползти вниз», «ползти вверх».

D. Петя и раскраски

дп Комбинаторика *2300

Маленький Петя любит считать. Он хочет посчитать, сколько существует способов раскрасить прямоугольную клетчатую доску размера n × m (n строк, m столбцов) в k цветов. При этом раскраска должна обладать следующим свойством: для любой вертикальной прямой, проходящей по линиям сетки и делящей доску на две непустые части, количество различных цветов в обеих этих частях должно быть одинаковым. Помогите Пете посчитать количество таких раскрасок.

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

В первой строке через пробел записаны целые числа n, m и k (1 ≤ n, m ≤ 1000, 1 ≤ k ≤ 106) — размерность доски по вертикали, размерность доски по горизонтали и количество цветов соответственно.

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

Выведите ответ на задачу. Так как ответ может быть достаточно большим, нужно вывести его по модулю 109 + 7 (1000000007).

D. Jongmah

дп *2200

Вы играете в игру «Jongmah». В вашей руке есть \(n\) костей. На каждой кости написано целое число от \(1\) до \(m\).

Чтобы выиграть, вам нужно составить некоторое количество троек. Каждая тройка состоит из трёх костей, таких что или все числа на этих костях совпадают, или расположены последовательно. Например, \(7, 7, 7\) и \(12, 13, 14\) является корректными тройками, а \(2,2,3\) и \(2,4,6\) — нет. Каждую кость можно использовать не более чем в одной тройке.

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

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^6\)) — количество костей у вас на руках и количество типов костей.

Вторая строка содержит целые числа \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le m\)), где \(a_i\) обозначает число, написанное на \(i\)-й кости.

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

Выведите одно целое число — максимально возможное количество троек, которое вы можете составить.

Примечание

В первом примере у вас есть кости \(2, 3, 3, 3, 4, 4, 4, 5, 5, 6\). Мы можем составить три тройки следующим образом: \(2, 3, 4\); \(3, 4, 5\); \(4, 5, 6\). Так как всего есть только \(10\) костей, то составить \(4\) тройки точно не получится, а значит ответом является \(3\).

Во втором примере у вас есть кости \(1\), \(2\), \(3\) (\(7\) штук), \(4\), \(5\) (\(2\) штуки). Можно составить \(3\) тройки следующим образом: \(1, 2, 3\); \(3, 3, 3\); \(3, 4, 5\). Можно показать, что составить \(4\) тройки нельзя.

H. Скромные подстроки

дп Строки *3500

Вам даны два целых числа \(l\) и \(r\).

Назовём число \(x\) скромным, если \(l \le x \le r\).

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

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

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

Первая строка содержит одно целое число \(l\) (\(1 \le l \le 10^{800}\)).

Вторая строке содержит одно целое число \(r\) (\(l \le r \le 10^{800}\)).

Третья строка содержит одно целое число \(n\) (\(1 \le n \le 2\,000\)).

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

В первой строке выведите наибольшее возможное количество скромных подстрок.

Во второй строке выведите строку длины \(n\) имеющую ровно такое число скромных подстрок.

Если существует несколько таких строк, выведите лексикографически минимальную из них.

Примечание

В первом примере у строки «101» скромные подстроки «1», «10», «1».

Во втором примере у строки «111» скромные подстроки «1» (\(3\) раза) и «11» (\(2\) раза).

D. Уничтожить поселение

дп Комбинаторика математика *2600

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

Каждое поселение можно представить как строку четной длины, где \(i\)-й символ строки определяет тип злодея, живущего в \(i\)-м логове.

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

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

Железный человек задает Джарвису \(q\) вопросов. В каждом вопросе он дает Джарвису два номера \(x\) и \(y\). Джарвис должен ответить, сколько различных вариантов поселения он может сделать из исходного таких, что все злодеи, тип которых совпадает с типом злодея, находящегося изначально в \(x\)-м или \(y\)-м логове, живут в одной и той же половине, и Железный человек может уничтожить это поселение.

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

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

Первая строка содержит строку \(s\) (\(2 \le |s| \le 10^{5}\)), описывающую начальный вариант поселения. Строка \(s\) состоит из строчных и заглавных латинских букв и имеет четную длину.

Вторая строка содержит одно целое число \(q\) (\(1 \le q \le 10^{5}\)) — количество вопросов.

\(i\)-я из следующих \(q\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le |s|\), \(x_i \ne y_i\)) — два номера, данные Джарвису в \(i\)-м вопросе.

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

Для каждого вопроса выведите остаток от деления количества вариантов поселений на \(10^9+7\).

Примечание

Рассмотрим первый пример. В первом вопросе возможные варианты поселения это «aabb» и «bbaa». Во втором вопросе логово \(1\) содержит злодея типа «a», а логово \(2\) содержит злодея типа «b», и не существует варианта поселения, где все «a» и «b» находятся в одной половине.

E. Дерево

графы Деревья дп поиск в глубину и подобное Структуры данных *2500

Дано дерево из \(n\) вершин и \(q\) запросов.

Каждый запрос начинается с трех целых чисел \(k\), \(m\) и \(r\), и продолжается \(k\) вершинами дерева \(a_1, a_2, \ldots, a_k\). Чтобы ответить на запрос, предположите, что дерево подвешено за вершину \(r\). Рассмотрим разбиения данных \(k\) вершин на не более чем \(m\) групп так, что выполняются следующие условия:

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

Выведите количество различных таких разбиений по модулю \(10^{9}+7\) для каждого запроса.

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

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^{5}\)) — количество вершин в дереве и количество запросов, соответственно.

Каждая из следующих \(n-1\) вершин содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n, u \ne v\)), обозначающие ребро между вершинами \(u\) и \(v\). Гарантируется, что данный граф является деревом.

Каждая из следующих \(q\) строк начинается с трех целых чисел \(k\), \(m\) и \(r\) (\(1 \le k, r \le n\), \(1 \le m \le min(300,k)\)) — количество вершин, максимальный размер группы и корень дерева для данного запроса, соответственно. После этого следуют \(k\) различных целых чисел \(a_1, a_2, \ldots, a_k\) (\(1 \le a_i \le n\)) — вершины текущего запроса.

Гарантируется, что сумма значений \(k\) по всем запросам не превосходит \(10^{5}\).

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

Выведите \(q\) строк, где \(i\)-я строка содержит ответ на \(i\)-й запрос.

Примечание

Рассмотрим первый пример.

В первом запросе нужно разделить три данные вершины (\(7\), \(4\) и \(3\)) на не более чем три группы, считая, что корнем дерева является вершина \(2\). Когда дерево подвешено за вершину \(2\), вершина \(4\) является предком вершин \(3\) и \(7\). Поэтому нельзя все вершины отнести к одной группе. Есть только \(1\) способ разделить эти вершины на две группы: \([4]\) и \([3, 7]\). Кроме того, есть один способ разделить данные вершины на три группы: \([7]\), \([4]\) и \([3]\). Таким образом, есть всего \(2\) способа разбить данные вершины на не более чем три группы.

Во втором запросе дерево подвешено за вершину \(4\), при этом \(6\) является предком \(2\), а \(2\) является предком \(1\). Поэтому нельзя все вершины отнести к одной группе.

A. Саша и путешествие

дп жадные алгоритмы математика *900

Саша — очень весёлый парень, поэтому он никогда не сидит на месте. В стране, где живёт Саша, есть \(n\) городов. Все они расположены на одной прямой и, для удобства, пронумерованы целыми числами от \(1\) до \(n\) в возрастающем порядке. Расстояние между любой парой соседних городов составляет \(1\) километр. Так как движение в стране одностороннее, то из города с номером \(x\) можно попасть в город с номером \(y\) только если \(x < y\).

Однажды Саша решил отправиться в путешествие по стране и посетить все \(n\) городов. Путешествовать он будет на своей машине Cheetah-2677. Вместимость бака у данной модели составляет \(v\) литров, а на \(1\) километр пути она тратит ровно \(1\) литр топлива. Изначально бак пуст. Саша находится в городе с номером \(1\) и хочет попасть в город с номером \(n\). В каждом городе есть заправка, причём в \(i\)-м городе \(1\) литр бензина стоит ровно \(i\) долларов. Очевидно, что в любой момент времени, в баке его машины может быть не более \(v\) литров топлива.

Саша не любит тратить деньги впустую, поэтому хочет узнать, какую минимальную сумму придётся взять с собой, чтобы доехать до последнего города, покупая топливо там, где он захочет. Помогите ему в этом!

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

Первая строка содержит два целых числа \(n\), \(v\) (\(2 \le n \le 100\), \(1 \le v \le 100\)) — количество городов в стране и ёмкость бака машины.

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

Выведите одно целое число — минимальное количество долларов, необходимое для путешествия.

Примечание

В первом примере Саша может заправить \(2\) литра за \(2\) доллара (\(1\) доллар за литр) в первом городе, доехать до второго города, потратив \(1\) литр, затем заправить \(1\) литр за \(2\) доллара во втором городе и доехать до города \(4\), не совершая дополнительных остановок. Поэтому ответ \(1+1+2=4\).

Во втором примере объём бака позволяет, заправив его полностью в первом городе, доехать до последнего города без остановок в других городах.

A. Саша и путешествие

дп жадные алгоритмы математика *900

Саша — очень весёлый парень, поэтому он никогда не сидит на месте. В стране, где живёт Саша, есть \(n\) городов. Все они расположены на одной прямой и, для удобства, пронумерованы целыми числами от \(1\) до \(n\) в возрастающем порядке. Расстояние между любой парой соседних городов составляет \(1\) километр. Так как движение в стране одностороннее, то из города с номером \(x\) можно попасть в город с номером \(y\) только если \(x < y\).

Однажды Саша решил отправиться в путешествие по стране и посетить все \(n\) городов. Путешествовать он будет на своей машине Cheetah-2677. Вместимость бака у данной модели составляет \(v\) литров, а на \(1\) километр пути она тратит ровно \(1\) литр топлива. Изначально бак пуст. Саша находится в городе с номером \(1\) и хочет попасть в город с номером \(n\). В каждом городе есть заправка, причём в \(i\)-м городе \(1\) литр бензина стоит ровно \(i\) долларов. Очевидно, что в любой момент времени, в баке его машины может быть не более \(v\) литров топлива.

Саша не любит тратить деньги впустую, поэтому хочет узнать, какую минимальную сумму придётся взять с собой, чтобы доехать до последнего города, покупая топливо там, где он захочет. Помогите ему в этом!

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

Первая строка содержит два целых числа \(n\), \(v\) (\(2 \le n \le 100\), \(1 \le v \le 100\)) — количество городов в стране и ёмкость бака машины.

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

Выведите одно целое число — минимальное количество долларов, необходимое для путешествия.

Примечание

В первом примере Саша может заправить \(2\) литра за \(2\) доллара (\(1\) доллар за литр) в первом городе, доехать до второго города, потратив \(1\) литр, затем заправить \(1\) литр за \(2\) доллара во втором городе и доехать до города \(4\), не совершая дополнительных остановок. Поэтому ответ \(1+1+2=4\).

Во втором примере объём бака позволяет, заправив его полностью в первом городе, доехать до последнего города без остановок в других городах.

A. Саша и путешествие

дп жадные алгоритмы математика *900

Саша — очень весёлый парень, поэтому он никогда не сидит на месте. В стране, где живёт Саша, есть \(n\) городов. Все они расположены на одной прямой и, для удобства, пронумерованы целыми числами от \(1\) до \(n\) в возрастающем порядке. Расстояние между любой парой соседних городов составляет \(1\) километр. Так как движение в стране одностороннее, то из города с номером \(x\) можно попасть в город с номером \(y\) только если \(x < y\).

Однажды Саша решил отправиться в путешествие по стране и посетить все \(n\) городов. Путешествовать он будет на своей машине Cheetah-2677. Вместимость бака у данной модели составляет \(v\) литров, а на \(1\) километр пути она тратит ровно \(1\) литр топлива. Изначально бак пуст. Саша находится в городе с номером \(1\) и хочет попасть в город с номером \(n\). В каждом городе есть заправка, причём в \(i\)-м городе \(1\) литр бензина стоит ровно \(i\) долларов. Очевидно, что в любой момент времени, в баке его машины может быть не более \(v\) литров топлива.

Саша не любит тратить деньги впустую, поэтому хочет узнать, какую минимальную сумму придётся взять с собой, чтобы доехать до последнего города, покупая топливо там, где он захочет. Помогите ему в этом!

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

Первая строка содержит два целых числа \(n\), \(v\) (\(2 \le n \le 100\), \(1 \le v \le 100\)) — количество городов в стране и ёмкость бака машины.

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

Выведите одно целое число — минимальное количество долларов, необходимое для путешествия.

Примечание

В первом примере Саша может заправить \(2\) литра за \(2\) доллара (\(1\) доллар за литр) в первом городе, доехать до второго города, потратив \(1\) литр, затем заправить \(1\) литр за \(2\) доллара во втором городе и доехать до города \(4\), не совершая дополнительных остановок. Поэтому ответ \(1+1+2=4\).

Во втором примере объём бака позволяет, заправив его полностью в первом городе, доехать до последнего города без остановок в других городах.

A. Саша и путешествие

дп жадные алгоритмы математика *900

Саша — очень весёлый парень, поэтому он никогда не сидит на месте. В стране, где живёт Саша, есть \(n\) городов. Все они расположены на одной прямой и, для удобства, пронумерованы целыми числами от \(1\) до \(n\) в возрастающем порядке. Расстояние между любой парой соседних городов составляет \(1\) километр. Так как движение в стране одностороннее, то из города с номером \(x\) можно попасть в город с номером \(y\) только если \(x < y\).

Однажды Саша решил отправиться в путешествие по стране и посетить все \(n\) городов. Путешествовать он будет на своей машине Cheetah-2677. Вместимость бака у данной модели составляет \(v\) литров, а на \(1\) километр пути она тратит ровно \(1\) литр топлива. Изначально бак пуст. Саша находится в городе с номером \(1\) и хочет попасть в город с номером \(n\). В каждом городе есть заправка, причём в \(i\)-м городе \(1\) литр бензина стоит ровно \(i\) долларов. Очевидно, что в любой момент времени, в баке его машины может быть не более \(v\) литров топлива.

Саша не любит тратить деньги впустую, поэтому хочет узнать, какую минимальную сумму придётся взять с собой, чтобы доехать до последнего города, покупая топливо там, где он захочет. Помогите ему в этом!

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

Первая строка содержит два целых числа \(n\), \(v\) (\(2 \le n \le 100\), \(1 \le v \le 100\)) — количество городов в стране и ёмкость бака машины.

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

Выведите одно целое число — минимальное количество долларов, необходимое для путешествия.

Примечание

В первом примере Саша может заправить \(2\) литра за \(2\) доллара (\(1\) доллар за литр) в первом городе, доехать до второго города, потратив \(1\) литр, затем заправить \(1\) литр за \(2\) доллара во втором городе и доехать до города \(4\), не совершая дополнительных остановок. Поэтому ответ \(1+1+2=4\).

Во втором примере объём бака позволяет, заправив его полностью в первом городе, доехать до последнего города без остановок в других городах.

A. Саша и путешествие

дп жадные алгоритмы математика *900

Саша — очень весёлый парень, поэтому он никогда не сидит на месте. В стране, где живёт Саша, есть \(n\) городов. Все они расположены на одной прямой и, для удобства, пронумерованы целыми числами от \(1\) до \(n\) в возрастающем порядке. Расстояние между любой парой соседних городов составляет \(1\) километр. Так как движение в стране одностороннее, то из города с номером \(x\) можно попасть в город с номером \(y\) только если \(x < y\).

Однажды Саша решил отправиться в путешествие по стране и посетить все \(n\) городов. Путешествовать он будет на своей машине Cheetah-2677. Вместимость бака у данной модели составляет \(v\) литров, а на \(1\) километр пути она тратит ровно \(1\) литр топлива. Изначально бак пуст. Саша находится в городе с номером \(1\) и хочет попасть в город с номером \(n\). В каждом городе есть заправка, причём в \(i\)-м городе \(1\) литр бензина стоит ровно \(i\) долларов. Очевидно, что в любой момент времени, в баке его машины может быть не более \(v\) литров топлива.

Саша не любит тратить деньги впустую, поэтому хочет узнать, какую минимальную сумму придётся взять с собой, чтобы доехать до последнего города, покупая топливо там, где он захочет. Помогите ему в этом!

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

Первая строка содержит два целых числа \(n\), \(v\) (\(2 \le n \le 100\), \(1 \le v \le 100\)) — количество городов в стране и ёмкость бака машины.

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

Выведите одно целое число — минимальное количество долларов, необходимое для путешествия.

Примечание

В первом примере Саша может заправить \(2\) литра за \(2\) доллара (\(1\) доллар за литр) в первом городе, доехать до второго города, потратив \(1\) литр, затем заправить \(1\) литр за \(2\) доллара во втором городе и доехать до города \(4\), не совершая дополнительных остановок. Поэтому ответ \(1+1+2=4\).

Во втором примере объём бака позволяет, заправив его полностью в первом городе, доехать до последнего города без остановок в других городах.

A. Саша и путешествие

дп жадные алгоритмы математика *900

Саша — очень весёлый парень, поэтому он никогда не сидит на месте. В стране, где живёт Саша, есть \(n\) городов. Все они расположены на одной прямой и, для удобства, пронумерованы целыми числами от \(1\) до \(n\) в возрастающем порядке. Расстояние между любой парой соседних городов составляет \(1\) километр. Так как движение в стране одностороннее, то из города с номером \(x\) можно попасть в город с номером \(y\) только если \(x < y\).

Однажды Саша решил отправиться в путешествие по стране и посетить все \(n\) городов. Путешествовать он будет на своей машине Cheetah-2677. Вместимость бака у данной модели составляет \(v\) литров, а на \(1\) километр пути она тратит ровно \(1\) литр топлива. Изначально бак пуст. Саша находится в городе с номером \(1\) и хочет попасть в город с номером \(n\). В каждом городе есть заправка, причём в \(i\)-м городе \(1\) литр бензина стоит ровно \(i\) долларов. Очевидно, что в любой момент времени, в баке его машины может быть не более \(v\) литров топлива.

Саша не любит тратить деньги впустую, поэтому хочет узнать, какую минимальную сумму придётся взять с собой, чтобы доехать до последнего города, покупая топливо там, где он захочет. Помогите ему в этом!

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

Первая строка содержит два целых числа \(n\), \(v\) (\(2 \le n \le 100\), \(1 \le v \le 100\)) — количество городов в стране и ёмкость бака машины.

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

Выведите одно целое число — минимальное количество долларов, необходимое для путешествия.

Примечание

В первом примере Саша может заправить \(2\) литра за \(2\) доллара (\(1\) доллар за литр) в первом городе, доехать до второго города, потратив \(1\) литр, затем заправить \(1\) литр за \(2\) доллара во втором городе и доехать до города \(4\), не совершая дополнительных остановок. Поэтому ответ \(1+1+2=4\).

Во втором примере объём бака позволяет, заправив его полностью в первом городе, доехать до последнего города без остановок в других городах.

A. Саша и путешествие

дп жадные алгоритмы математика *900

Саша — очень весёлый парень, поэтому он никогда не сидит на месте. В стране, где живёт Саша, есть \(n\) городов. Все они расположены на одной прямой и, для удобства, пронумерованы целыми числами от \(1\) до \(n\) в возрастающем порядке. Расстояние между любой парой соседних городов составляет \(1\) километр. Так как движение в стране одностороннее, то из города с номером \(x\) можно попасть в город с номером \(y\) только если \(x < y\).

Однажды Саша решил отправиться в путешествие по стране и посетить все \(n\) городов. Путешествовать он будет на своей машине Cheetah-2677. Вместимость бака у данной модели составляет \(v\) литров, а на \(1\) километр пути она тратит ровно \(1\) литр топлива. Изначально бак пуст. Саша находится в городе с номером \(1\) и хочет попасть в город с номером \(n\). В каждом городе есть заправка, причём в \(i\)-м городе \(1\) литр бензина стоит ровно \(i\) долларов. Очевидно, что в любой момент времени, в баке его машины может быть не более \(v\) литров топлива.

Саша не любит тратить деньги впустую, поэтому хочет узнать, какую минимальную сумму придётся взять с собой, чтобы доехать до последнего города, покупая топливо там, где он захочет. Помогите ему в этом!

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

Первая строка содержит два целых числа \(n\), \(v\) (\(2 \le n \le 100\), \(1 \le v \le 100\)) — количество городов в стране и ёмкость бака машины.

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

Выведите одно целое число — минимальное количество долларов, необходимое для путешествия.

Примечание

В первом примере Саша может заправить \(2\) литра за \(2\) доллара (\(1\) доллар за литр) в первом городе, доехать до второго города, потратив \(1\) литр, затем заправить \(1\) литр за \(2\) доллара во втором городе и доехать до города \(4\), не совершая дополнительных остановок. Поэтому ответ \(1+1+2=4\).

Во втором примере объём бака позволяет, заправив его полностью в первом городе, доехать до последнего города без остановок в других городах.

A. Саша и путешествие

дп жадные алгоритмы математика *900

Саша — очень весёлый парень, поэтому он никогда не сидит на месте. В стране, где живёт Саша, есть \(n\) городов. Все они расположены на одной прямой и, для удобства, пронумерованы целыми числами от \(1\) до \(n\) в возрастающем порядке. Расстояние между любой парой соседних городов составляет \(1\) километр. Так как движение в стране одностороннее, то из города с номером \(x\) можно попасть в город с номером \(y\) только если \(x < y\).

Однажды Саша решил отправиться в путешествие по стране и посетить все \(n\) городов. Путешествовать он будет на своей машине Cheetah-2677. Вместимость бака у данной модели составляет \(v\) литров, а на \(1\) километр пути она тратит ровно \(1\) литр топлива. Изначально бак пуст. Саша находится в городе с номером \(1\) и хочет попасть в город с номером \(n\). В каждом городе есть заправка, причём в \(i\)-м городе \(1\) литр бензина стоит ровно \(i\) долларов. Очевидно, что в любой момент времени, в баке его машины может быть не более \(v\) литров топлива.

Саша не любит тратить деньги впустую, поэтому хочет узнать, какую минимальную сумму придётся взять с собой, чтобы доехать до последнего города, покупая топливо там, где он захочет. Помогите ему в этом!

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

Первая строка содержит два целых числа \(n\), \(v\) (\(2 \le n \le 100\), \(1 \le v \le 100\)) — количество городов в стране и ёмкость бака машины.

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

Выведите одно целое число — минимальное количество долларов, необходимое для путешествия.

Примечание

В первом примере Саша может заправить \(2\) литра за \(2\) доллара (\(1\) доллар за литр) в первом городе, доехать до второго города, потратив \(1\) литр, затем заправить \(1\) литр за \(2\) доллара во втором городе и доехать до города \(4\), не совершая дополнительных остановок. Поэтому ответ \(1+1+2=4\).

Во втором примере объём бака позволяет, заправив его полностью в первом городе, доехать до последнего города без остановок в других городах.

A. Саша и путешествие

дп жадные алгоритмы математика *900

Саша — очень весёлый парень, поэтому он никогда не сидит на месте. В стране, где живёт Саша, есть \(n\) городов. Все они расположены на одной прямой и, для удобства, пронумерованы целыми числами от \(1\) до \(n\) в возрастающем порядке. Расстояние между любой парой соседних городов составляет \(1\) километр. Так как движение в стране одностороннее, то из города с номером \(x\) можно попасть в город с номером \(y\) только если \(x < y\).

Однажды Саша решил отправиться в путешествие по стране и посетить все \(n\) городов. Путешествовать он будет на своей машине Cheetah-2677. Вместимость бака у данной модели составляет \(v\) литров, а на \(1\) километр пути она тратит ровно \(1\) литр топлива. Изначально бак пуст. Саша находится в городе с номером \(1\) и хочет попасть в город с номером \(n\). В каждом городе есть заправка, причём в \(i\)-м городе \(1\) литр бензина стоит ровно \(i\) долларов. Очевидно, что в любой момент времени, в баке его машины может быть не более \(v\) литров топлива.

Саша не любит тратить деньги впустую, поэтому хочет узнать, какую минимальную сумму придётся взять с собой, чтобы доехать до последнего города, покупая топливо там, где он захочет. Помогите ему в этом!

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

Первая строка содержит два целых числа \(n\), \(v\) (\(2 \le n \le 100\), \(1 \le v \le 100\)) — количество городов в стране и ёмкость бака машины.

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

Выведите одно целое число — минимальное количество долларов, необходимое для путешествия.

Примечание

В первом примере Саша может заправить \(2\) литра за \(2\) доллара (\(1\) доллар за литр) в первом городе, доехать до второго города, потратив \(1\) литр, затем заправить \(1\) литр за \(2\) доллара во втором городе и доехать до города \(4\), не совершая дополнительных остановок. Поэтому ответ \(1+1+2=4\).

Во втором примере объём бака позволяет, заправив его полностью в первом городе, доехать до последнего города без остановок в других городах.

D. Игра-заливка

дп *1900

Вам дана полоска из клетчатой бумаги из \(n\) раскрашенных квадратов, пронумерованных от \(1\) до \(n\) слева направо. Квадрат под номером \(i\) изначально покрашен в цвет \(c_i\).

Скажем, что квадраты \(i\) и \(j\) лежат в одной компоненте, если \(c_i = c_j\) и \(c_i = c_k\) для всех \(k\), удовлетворяющих \(i < k < j\). Иначе говоря, все квадраты на отрезке от \(i\) до \(j\) должны иметь одинаковый цвет.

Например, у полоски \([3, 3, 3]\) есть \(1\) компонента связности, а у \([5, 2, 4, 4]\) их \(3\).

Игра «заливка» играется на этой полоске следующим образом:

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

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

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — количество квадратов.

Вторая строка содержит целые числа \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 5000\)) — изначальные цвета квадратов.

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

Выведите одно целое число — минимальное количество ходов, которое нужно сделать.

Примечание

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

  • \([5, 2, 2, 1]\)
  • \([5, 5, 5, 1]\)
  • \([1, 1, 1, 1]\)

Во втором примере одним из оптимальных способов является следующий: нужно выбрать квадрат с номером \(5\) как стартовый а затем произвести перекраски в цвета \(2, 3, 5, 4\) в таком порядке.

В третьем примере полоска уже состоит только из одного цвета.

D. Магические камни

дп математика матрицы *2100

У Reziba есть много магических камней. Каждый магический камень может быть разделен на \(M\) обычных камней. Каждый магический (и обычный) камень занимает \(1\) единицу пространства. Обычный камень не может быть разделен.

Reziba хочет выбрать набор магических камней и разделить некоторые из них таким образом, чтобы общее пространство, занятое получившимся множеством, было равно \(N\). Если магический камень выбран и разделен, он занимает \(M\) единиц пространства (потому что это разделение на \(M\) камней); если же магический камень не разделен, то он занимает \(1\) единицу пространства.

Как много различных конфигураций получившихся множеств камней может иметь Reziba, если общее пространство, занятое этим множеством, равно \(N\)? Выведите ответ по модулю \(1000000007\) (\(10^9+7\)). Две конфигурации считаются различными, если количество магических камней, которые имеет Reziba, различается, или индексы камней, которые Reziba не разделяет, различаются.

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

Выходные данные содержат единственную строку, содержащую \(2\) целых числа \(N\) и \(M\) (\(1 \le N \le 10^{18}\), \(2 \le M \le 100\)).

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

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

Примечание

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

Пусть \(1\) обозначает магический камень, а \(0\) обозначает обычный камень.

Все конфигурации, которые вы можете иметь:

  • \(1 1 1 1\) (никакие камни не разделены);
  • \(0 0 1 1\) (первый магический камень разделен на \(2\) обычных камня);
  • \(1 0 0 1\) (второй магический камень разделен на \(2\) обычных камня);
  • \(1 1 0 0\) (третий магический камень разделен на \(2\) обычных камня);
  • \(0 0 0 0\) (первый и второй магические камни разделены суммарно на \(4\) обычных камня).

Таким образом, ответ равен \(5\).

F. Аккуратная строка

битмаски дп *2500

Задана строка длины \(n\). Каждый ее символ — это одна из \(p\) первых строчных латинских букв.

Также задана матрица \(A\) из бинарных значений размера \(p \times p\). Матрица симметрична (\(A_{ij} = A_{ji}\)). \(A_{ij} = 1\) обозначает, что \(i\)-я и \(j\)-я латинские буквы могут быть соседями в строке.

Назовем строку аккуратной, если все соседние символы в ней могут быть соседями (имеют 1 в соответствующей ячейке матрицы \(A\)).

Разрешается делать следующую операцию. Выбрать некоторую букву, удалить все ее вхождения и соединить оставшиеся части строки, не меняя их порядок. Например, после удаления буквы 'a' из «abacaba» останется «bcb».

Заданная строка аккуратная. Строка должна оставаться аккуратной после каждой сделанной операции.

Разрешается делать произвольное число операций (возможно ноль). Какую самую короткую строку можно получить в результате?

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

В первой строке записаны два целых числа \(n\) и \(p\) (\(1 \le n \le 10^5\), \(1 \le p \le 17\)) — длина начальной строки и длина разрешенного префикса латинских букв.

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

В каждой из следующих \(p\) строк записаны \(p\) целых чисел — матрица \(A\) (\(0 \le A_{ij} \le 1\), \(A_{ij} = A_{ji}\)). \(A_{ij} = 1\) обозначает, что \(i\)-я и \(j\)-я латинские буквы могут быть соседями в строке.

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

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

Примечание

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

Во втором примере можно удалять буквы в порядке 'b', 'c', 'a'. Строки на промежуточных шагах будут: "abacaba" \(\rightarrow\) "aacaa" \(\rightarrow\) "aaaa" \(\rightarrow\) "".

В третьем примере можно удалить букву 'b', и все.

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

F2. Разрезание дерева (сложная версия)

Деревья дп Комбинаторика поиск в глубину и подобное *2700

Задано неориентированное дерево из \(n\) вершин.

Некоторые вершины покрашены в один из \(k\) цветов, а некоторые не покрашены совсем. Гарантируется, что дерево содержит хотя бы одну вершину каждого из \(k\) цветов. Может быть ноль непокрашенных вершин.

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

Сколько хороших наборов ребер есть в данном дереве? Два набора считаются различными, если существует такое ребро, что оно присутствует в одном наборе и отсутствует в другом.

Ответ может быть довольно большим, поэтому выведите его по модулю \(998244353\).

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

В первой строке записаны два целых числа \(n\) и \(k\) (\(2 \le n \le 3 \cdot 10^5\), \(2 \le k \le n\)) — количество вершин в дереве и количество цветов, соответственно.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le k\)) — цвета вершин. \(a_i = 0\) значит, что вершина \(i\) не покрашена, любое другое число значит, что вершина \(i\) покрашена в этот цвет.

В \(i\)-й из следующих \(n - 1\) строк содержится два целых числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\), \(v_i \ne u_i\)) — ребра дерева. Гарантируется, что данные ребра образуют дерево. Гарантируется, что дерево содержит хотя бы одну вершину каждого из \(k\) цветов. Может быть ноль непокрашенных вершин.

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

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

Ответ может быть довольно большим, поэтому выведите его по модулю \(998244353\).

Примечание

Дерево из первого примера:

Единственный хороший набор — это ребро \((2, 4)\). После его удаления дерево распадается на компоненты \(\{4\}\) и \(\{1, 2, 3, 5\}\). В первой компоненте есть только вершина цвета \(1\), а во второй — только вершины цвета \(2\) и непокрашенные вершины.

Дерево из второго примера:

Хорошие наборы: \(\{(1, 3), (4, 7)\}\), \(\{(1, 3), (7, 2)\}\), \(\{(3, 6), (4, 7)\}\) и \(\{(3, 6), (7, 2)\}\).

E. Павел и треугольники

бпф дп жадные алгоритмы Перебор Тернарный поиск *1900

У Павла есть набор палок, с длинами равными степеням двойки.

У него есть \(a_0\) палок длины \(2^0 = 1\), \(a_1\) палок длины \(2^1 = 2\), ..., \(a_{n-1}\) палок длины \(2^{n-1}\).

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

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

Найдеите наибольшее количество треугольников, которое может составить Павел.

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

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

Вторая строка содержит \(n\) целых чисел, разделенных пробелами, \(a_0\), \(a_1\), ..., \(a_{n-1}\) (\(1 \leq a_i \leq 10^9\)), \(a_i\) обозначает количество палок длины \(2^i\).

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

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

Примечание

В первом примере Павел может, например, составить такой комплект треугольников (перечислены длины сторон треугольника):

\((2^0, 2^4, 2^4)\), \((2^1, 2^3, 2^3)\), \((2^1, 2^2, 2^2)\).

Во втором примере Павел не может составить ни одного треугольника.

В третьем примере Павел может, например, составить такой комплект треугольников (перечислены длины сторон треугольника):

\((2^0, 2^0, 2^0)\), \((2^1, 2^1, 2^1)\), \((2^2, 2^2, 2^2)\).

F. Нияз и маленькие степени

Деревья дп Структуры данных *3400

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

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

Нияз не любит, когда вершины в дереве имеют слишком большие степени, поэтому он хочет найти для каждого \(x\) от \(0\) до \((n-1)\), ребра какого минимального суммарного веса нужно удалить, чтобы степени всех вершин стали не более \(x\).

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

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 250\,000\)) — количество вершин в дереве Нияза.

Каждая из следующих \((n - 1)\) строк содержит три целых числа \(a\), \(b\), \(c\) (\(1 \le a, b \le n\), \(1 \leq c \leq 10^6\)) — номера вершин, которые соединяет очередное ребро дерева и его вес, соответственно. Гарантируется, что заданные ребра образуют дерево.

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

Выведите \(n\) целых чисел, разделенных пробелами: для каждого \(x = 0, 1, \ldots, (n-1)\) выведите минимальный суммарный вес такого множества ребер, при удалении которого степень всех вершин становится не больше \(x\).

Примечание

В первом примере в графе вершина \(1\) соединена со всеми остальными. Таким образом, для всеx \(x\) достаточно удалить \((4-x)\) ребер минимальной стоимости, исходящих из вершины \(1\), таким образом, ответы равны \(1+2+3+4\), \(1+2+3\), \(1+2\), \(1\), и \(0\).

Во втором примере при \(x=0\) необходимо удалить все ребра, при \(x=1\) достаточно удалить два ребра веса \(1\) и \(5\), а при \(x \geq 2\) ребра удалять необязательно, поэтому ответы равны \(1+2+5+14\), \(1+5\), \(0\), \(0\) и \(0\).

C. Азбука Морзе

Бинарный поиск дп сортировки Строки строковые суфф. структуры Структуры данных хэши *2400

В азбуке Морзе каждая буква латинского алфавита определена как строка некоторый длины от \(1\) до \(4\), состоящая из точек и тире. В этой задаче мы будем обозначать точку как «0», а тире как «1».

Так как существует \(2^1+2^2+2^3+2^4 = 30\) строк длины от \(1\) до \(4\), состоящих только из «0» и «1», не все из них соответствуют какой-то из \(26\) букв латинского алфавита. А именно, все строки из «0» и/или «1» длины не более \(4\) соответствуют разным буквы латинского алфавита, кроме следующих четырех строк, которые ничему не соответствуют: «0011», «0101», «1110» и «1111».

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

Так как ответы могут быть очень большим, выводите их по модулю \(10^9 + 7\).

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

Первая строка содержит одно целое число \(m\) (\(1 \leq m \leq 3\,000\)) — количество модификаций строки \(S\).

Каждая из следующих \(m\) строк содержит или «0» (обозначающий точку), или «1» (обозначающую тире), описывающее, какой символ добавляется к \(S\).

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

Выведите \(m\) строк, \(i\)-я из которых должна содержать ответ после \(i\)-й модификации \(S\).

Примечание

Рассмотрим первый тестовый пример, после того, как к \(S\) будут дописаны все буквы, т.е. «111».

Как вы можете видеть, «1», «11» и «111» соответствуют каким-то буквам латинского алфавита. Более точно, они переводятся в 'T', 'M', и в 'O', соответственно. Все слова, которые переводятся в подстроку строки \(S\) в азбуке Морзе, таким образом, равны:

  1. «T» (переводится в «1»)
  2. «M» (переводится в «11»)
  3. «O» (переводится в «111»)
  4. «TT» (переводится в «11»)
  5. «TM» (переводится в «111»)
  6. «MT» (переводится в «111»)
  7. «TTT» (переводится в «111»)

Хоть это и не нужно в этой задаче, таблица переводов букв латинского алфавита в азбуку Морзе: здесь.

D. Изоляция

дп Структуры данных *2900

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

Так как ответ может быть очень большим, выведите остаток от деления ответа на \(998\,244\,353\).

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

Первая строка содержит два целых числа \(n\) и \(k\), разделенных пробелами (\(1 \leq k \leq n \leq 10^5\)) — количество элементов в массиве \(a\) и ограничение из условия.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — элементы массива \(a\).

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

Первая и единственная строка вывода должна содержать количество способов разбить элементы массива \(a\) по модулю \(998\,244\,353\).

Примечание

В первом примере возможных разбиений три:

  • \([[1], [1], [2]]\)
  • \([[1, 1], [2]]\)
  • \([[1, 1, 2]]\)

Разбиение \([[1], [1, 2]]\) невозможно, потому что два целых числа встречаются ровно один раз на отрезке \([1, 2]\).

D. Выбор гурмана

графы дп жадные алгоритмы поиск в глубину и подобное снм *2000

Гурман Яблочков работает редактором известного гастрономического издания. Он разъезжает по всему миру, дегустируя новые изыски именитых шеф-поваров самых фешенебельных ресторанов высокой кухни. У Яблочкова есть свой фирменный способ ревью: в каждом заведении Яблочков заказывает два набора блюд в разные дни. Все заказанные блюда разные, так как Яблочков не любит есть одно и то же. Для каждой пары блюд из разных наборов он точно помнит, какое из них лучше по его ощущениям, или что они одинаковы по вкусовым качествам. Затем гурман оценивает каждое блюдо положительным целым числом.

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

Гурман в первый день дегустировал набор из \(n\) блюд, во второй день набор из \(m\) блюд. Он составил таблицу ощущений \(a\) размером \(n \times m\), в которой описал свои впечатления. Если по мнению эксперта блюдо \(i\) из первого набора лучше блюда \(j\) из второго набора, то \(a_{ij}\) равно «>», в противоположном случае \(a_{ij}\) равно «<». Блюда также могут быть равны по уровню, тогда \(a_{ij}\) равно «=».

Теперь Яблочков хочет, чтобы вы помогли ему оценить каждое блюдо в наборах целым положительным числом. Так как Яблочков очень строгий дегустатор, то постарается оценить блюда так, чтобы максимальная из оценок была как можно меньше. В то же время Яблочков очень справедливый, поэтому никогда не оценивает блюда так, чтобы это шло вразрез с его ощущениями. Другими словами, если \(a_{ij}\) равно «<», то оценка блюда \(i\) из первого набора должна быть меньше оценки блюда \(j\) из второго набора, если \(a_{ij}\) равно «>», то должна быть больше, а если \(a_{ij}\) равно «=», то должна совпадать.

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

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

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 1000\)) — количества блюд в каждый из двух дней.

Каждая из следующих \(n\) строк содержит строку из \(m\) символов, \(j\)-й символ в \(i\)-й строке задаёт значение \(a_{ij}\). Все строки состоят только из символов «<», «>» и «=».

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

В первой строке выведите «Yes», если можно сделать корректную оценку всем блюдам и «No» иначе.

В случае, если сделать корректную оценку можно, во второй строке выведите \(n\) целых чисел — оценки блюд первого набора, а в третьей строке \(m\) целых чисел — оценки блюд второго набора.

Примечание

В первом примере все блюда первого дня лучше всех блюд второго дня. Значит, самой высокой оценкой будет \(2\) для всех блюд первого дня.

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

E. Произведение строк

дп жадные алгоритмы Строки *2300

Рома и Денис отправились на соревнование по программированию. В долгой дороге ребята заскучали, поэтому решили придумать что-нибудь интересное. Рома придумал рецепт вкусной пиццы, а Денис придумал операцию умножения строк. По версии Дениса, произведением строки \(s\) длины \(m\) и строки \(t\) называется строка \(t + s_1 + t + s_2 + \ldots + t + s_m + t\), где \(s_i\) обозначает \(i\)-й символ строки \(s\), а знаком «+» обозначена конкатенация строк. Например, произведением строк «abc» и «de» является строка «deadebdecde», а произведением строк «ab» и «z» является строка «zazbz». Обратите внимание, что, в отличие от умножения чисел, произведение строк \(s\) и \(t\) не всегда равно произведению строк \(t\) и \(s\).

Рома позавидовал Денису, что он придумал такую интересную операцию, и тоже решил придумать что-нибудь связанное со строками. Так как Рома — ценитель прекрасного, он решил определить красоту строки как максимальную длину подстроки, состоящей из одинаковых букв. Например, красота строки «xayyaaabca» равна \(3\), так как есть подстрока «aaa», а красота строки «qwerqwer» равна \(1\), потому что все соседние буквы в ней различны.

Чтобы развлечь Рому, Денис написал ему на листочке \(n\) строк \(p_1, p_2, p_3, \ldots, p_n\) и попросил его вычислить красоту строки \(( \ldots (((p_1 \cdot p_2) \cdot p_3) \cdot \ldots ) \cdot p_n\), где \(s \cdot t\) обозначает произведение строк \(s\) и \(t\). Рома не до конца понял, как работает умножение Дениса, но не хочет признаваться в этом, поэтому просит посчитать красоту этой строки вас. Денис знает, что Рома слишком впечатлительный, поэтому гарантирует, что красота полученной строки не превосходит \(10^9\).

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

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 100\,000\)) — количество строк, которые написал Денис.

Следующие \(n\) строк содержат непустые строки \(p_1, p_2, \ldots, p_n\), состоящие из маленьких букв английского алфавита.

Гарантируется, что суммарная длина строк \(p_i\) не превосходит \(100\,000\), а также, что красота итогового произведения не превосходит \(10^9\).

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

Выведите одно целое число — красоту произведения строк.

Примечание

В первом примере произведение строк равно «abaaaba».

Во втором примере произведение строк равно «abanana».

G. Самая опасная акула

дп Структуры данных *2700

Акула Семён участвует в самом престижном соревновании Мирового океана на звание самой опасной акулы. Во время этого состязания акулы соревнуются в различных дисциплинах: плавание на скорость, маскировка, навигация по картам и многим другим. Сейчас Семён проходит испытание под названием «разрушение».

Во время этого испытания перед акулой ставят \(m\) доминошек. Все доминошки стоят на одной прямой, однако высоты доминошек могут различаться. Расстояние между соседними доминошками равно \(1\). Кроме того, у каждой доминошки есть своя стоимость, выраженная целым числом. Цель акулы — уронить все доминошки. Для этого акула может толкнуть любую доминошку влево или вправо, после чего она начнёт падать в этом направлении. Если во время падения доминошка задевает другие, они также начинают падать в ту же сторону, в которую падала исходная, таким образом начинается цепная реакция, в результате которой может упасть много доминошек. Падающая доминошка задевает другую, если и только если расстояние между ними строго меньше высоты падающей доминошки, причём доминошки не обязательно должны быть соседними.

Разумеется, любая акула справится с тем, чтобы уронить все доминошки таким образом, поэтому оценивается не факт разрушения, а его стоимость. Стоимостью разрушения называется сумма стоимостей доминошек, которые акуле придётся толкнуть, чтобы все доминошки упали.

Семён уже победил в прошлых испытаниях, однако недостаточно умён, чтобы победить в этом. Помогите Семёну и определите минимальную суммарную стоимость доминошек, которые ему придётся толкнуть, чтобы все доминошки упали.

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

Для уменьшения размера ввода высоты и стоимости доминошек задаются при помощи блоков.

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 250\,000, 1 \leq m \leq 10^7\)) — количество блоков и суммарное количество доминошек, которые надо уронить Семёну.

Затем следует описание \(n\) блоков. Описание каждого блока состоит из трёх строк.

В первой строке описания блока содержится целое число \(k_i\) (\(1 \leq k_i \leq 250\,000, \sum_{i = 1}^{n}{k_i} \leq 250\,000\)) — количество доминошек в блоке.

Во второй строке описания блока содержатся \(k_i\) целых чисел \(a_j\) (\(1 \leq a_j \leq m\)) — высоты доминошек в блоке.

В третьей строке описания содержатся \(k_i\) целых чисел \(c_j\) (\(1 \leq c_j \leq 100\,000\)) — стоимости доминошек в блоке.

Далее следует описание последовательности доминошек, которые надо уронить Семёну, в порядке слева направо.

В первой строке описания последовательности задано целое число \(q\) (\(n \leq q \leq 250\,000\)) — количество блоков в последовательности доминошек, которые надо уронить.

Каждая из следующих \(q\) строк содержит пары целых чисел \(id_i, mul_i\) (\(1 \leq id_i \leq n\), \(1 \leq mul_i \leq 100\,000\)), обозначающие, что очередные \(k_{id_i}\) в порядке слева направо доминошек — это доминошки блока \(id_i\), чьи стоимости были умножены на число \(mul_i\).

Гарантируется, что \(\sum_{i = 1}^{q}{k_{id_i}} = m\), а также, что каждый блок встречается хотя бы один раз в последовательности доминошек, которые требуется уронить.

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

Выведите одно целое число — минимальную суммарную стоимость доминошек, которые надо толкнуть, чтобы все доминошки упали.

Примечание

В первом примере перед Семёном стоят \(7\) доминошек. Их высоты равны \([3, 1, 2, 2, 1, 2, 2]\), а стоимости равны \([4, 3, 6, 3, 1, 2, 1]\). Сначала Семёну следует уронить доминошку с номером \(7\) влево, она упадёт и заденет доминошку с номером \(6\). Доминошка \(6\), падая, заденет доминошку с номером \(5\), которая упадёт, но не заденет другие доминошки. Затем Семён должен уронить доминошку с номером \(1\) вправо, она, падая, заденет доминошки с номерами \(2\) и \(3\), а доминошка \(3\), падая, заденет доминошку \(4\), таким образом все доминошки упадут.

Во втором примере перед Семёном стоит одна доминошка стоимостью \(10000000000\).

E. Рюкзак

дп жадные алгоритмы поиск в глубину и подобное *2300

У вас есть набор предметов, у каждого из которых есть какой-то целочисленный вес не более \(8\). Вы называете подмножество набора предметов хорошим, если суммарный вес предметов в подмножестве не превосходит \(W\).

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

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

В первой строке записано одно целое число \(W\) (\(0 \le W \le 10^{18}\)) — максимально возможный вес хорошего подмножества.

Вторая строка описывает набор предметов, который у вас есть. Она содержит \(8\) целых чисел \(cnt_1\), \(cnt_2\), ..., \(cnt_8\) (\(0 \le cnt_i \le 10^{16}\)), где \(cnt_i\) — количество предметов веса \(i\) в наборе.

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

Выведите одно целое число — максимальный вес хорошего подмножества.

F. Удали строку

дп *2000

Вам задана строка \(s\) длины \(n\), состоящая только из строчных букв латинского алфавита. Вы можете применять к строке следующую операцию: взять непрерывную подстроку этой строки, состоящий из одинаковых символов и удалить её. Например, после удаление подстроки bbbb из строки abbbbaccdd вы получите строку aaccdd.

Посчитайте минимальное количество операций, необходимое для удаления всей строки \(s\).

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

В первой строке содержится целое число \(n\) (\(1 \le n \le 500\)) — длина строки \(s\).

Вторая строка содержит саму строку \(s\) (\(|s| = n\)) состоящую только из строчных букв латинского алфавита.

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

В единственное строке выведите число — минимальное количество операций, необходимое для удаления всей строки \(s\).

G. Жадные подпоследовательности

Деревья дп Структуры данных *2400

Для массива \(c\) назовем жадной подпоследовательностью последовательность индексов \(p_1\), \(p_2\), ..., \(p_l\), такую, что \(1 \le p_1 < p_2 < \dots < p_l \le |c|\), и для всех \(i \in [1, l - 1]\), \(p_{i + 1}\) — минимальный индекс, для которого выполняются условия: \(p_{i + 1} > p_i\) и \(c[p_{i + 1}] > c[p_i]\).

Вам дан массив \(a_1, a_2, \dots, a_n\). Для каждого его подотрезка длины \(k\) посчитайте длину его самой длинной жадной подпоследовательности.

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

В первой строке заданы два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^6\)) — длина массива \(a\) и длина подотрезков.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — массив \(a\).

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

Выведите \(n - k + 1\) чисел — максимальные длины жадных подпоследовательностей для каждого подотрезка длины \(k\). Первое число должно быть ответом для подотрезка \(a[1..k]\), второе — для \(a[2..k + 1]\), и так далее.

Примечание

В первом примере:

  • \([1, 5, 2, 5]\) — наидлиннейшими являются подпоследовательности \(1, 2\) (\([c_1, c_2] = [1, 5]\)) или \(3, 4\) (\([c_3, c_4] = [2, 5]\)).
  • \([5, 2, 5, 3]\) — подпоследовательность \(2, 3\) (\([c_2, c_3] = [2, 5]\)).
  • \([2, 5, 3, 6]\) — подпоследовательность \(1, 2, 4\) (\([c_1, c_2, c_4] = [2, 5, 6]\)).

Во втором примере:

  • \([4, 5, 2, 5, 3, 6]\) — наидлиннейшими являются подпоследовательности \(1, 2, 6\) (\([c_1, c_2, c_6] = [4, 5, 6]\)) или \(3, 4, 6\) (\([c_3, c_4, c_6] = [2, 5, 6]\)).
  • \([5, 2, 5, 3, 6, 6]\) — подпоследовательность \(2, 3, 5\) (\([c_2, c_3, c_5] = [2, 5, 6]\)).

E. K сбалансированных команд

дп сортировки *1800

Вы — университетский тренер. Всего в университете \(n\) студентов под Вашим надзором, умение программировать \(i\)-го студента равно \(a_i\).

Вы хотите составить \(k\) команд для другого нового соревнования по программированию. Как Вы знаете, чем больше студентов на соревновании — тем больше шансов победить! Поэтому Вы хотите составить не более \(k\) непустых команд (и хотя бы одну) таким образом, чтобы суммарное число студентов в них было максимально возможно. Но Вы также знаете, что каждая команда должна быть сбалансированной. Это означает, что умение программировать каждой пары студентов в каждой команде должно отличаться не более, чем на \(5\). Команды являются независимыми друг от друга (это означает, что разница в умении программировать двух студентов из двух разных команд не имеет значения).

Возможно, что некоторые студенты не будут включены ни в какие команды вообще.

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

Если Вы программируете на Python, рассмотрите возможность отправки решения на PyPy, а не на Python, когда будете отправлять свой код.

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

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 5000\)) — количество студентов и количество команд, соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) означает умение \(i\)-го студента программировать.

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

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

C. Путешествие по музеям

графы дп реализация *2500

В стране \(N\) есть \(n\) городов, соединённых \(m\) односторонними дорогами. Эта, казалось бы непримечательная страна, всё же интересна двумя своими особенностями. Во-первых, неделя здесь длится \(d\) дней. Во-вторых, в каждом городе страны \(N\) расположен ровно один музей.

Турфирма «Открытые музеи» разрабатывает новую программу для путешественников, интересующихся музеями. Работникам турфирмы известно, в какие дни недели каждый из музеев открыт для посещения. Путешествие должно начаться в столице — городе с номером \(1\), причём день начала путешествия должен быть первым днём недели. Днём турист будет находиться в городе и смотреть экспозицию музея (в случае если музей, конечно, работает сегодня), а в конце дня путешествие либо заканчивается, либо турист отправляется в другой город, соединённый с текущим дорогой. Дорожная система \(N\) устроена так, что перемещение по одной дороге всегда занимает одну ночь, кроме того все дороги в стране односторонние. Во время путешествия разрешается посещать один город несколько раз.

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

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

Первая строка содержит три целых числа \(n\), \(m\) и \(d\) (\(1 \leq n \leq 100\,000\), \(0 \leq m \leq 100\,000\), \(1 \leq d \leq 50\)) — количество городов, количество дорог и количество дней в неделе.

Каждая из следующих \(m\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)), обозначающие одностороннюю дорогу из города \(u_i\) в город \(v_i\).

Следующие \(n\) строк содержат график работы музеев. График работы музея, находящегося в \(i\)-м городе, описывается в \(i\)-й из этих строк. Каждая строка состоит ровно из \(d\) символов «0» или «1», \(j\)-й символ строки равен «1», если музей открыт в \(j\)-й день недели, и «0» в противном случае.

Гарантируется, для каждой пары городов \((u, v)\) существует не более одной дороги, ведущей из \(u\) в \(v\).

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

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

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

Максимально возможное количество музеев для посещения равно \(3\). Можно посетить \(3\) различных музея, например, так, как описано ниже.

  • День 1. Сейчас день недели \(1\), и турист находится в городе \(1\). Музей там закрыт. Ночью турист направляется в город \(2\).
  • День 2. Сейчас день недели \(2\), и турист находится в городе \(2\). Музей там открыт, турист его посещает. Ночью турист направляется в город \(4\).
  • День 3. Сейчас день недели \(3\), и турист находится в городе \(4\). Музей там открыт, турист его посещает. Ночью турист направляется в город \(1\).
  • День 4. Сейчас день недели \(1\), и турист находится в городе \(1\). Музей там закрыт. Ночью турист направляется в город \(2\).
  • День 5. Сейчас день недели \(2\), и турист находится в городе \(2\). Музей там открыт, но турист в нём уже был. Ночью турист направляется в город \(3\).
  • День 6. Сейчас день недели \(3\), и турист находится в городе \(3\). Музей там открыт, турист его посещает. На этом путешествие заканчивается.
Пояснение ко второму примеру

Максимально возможное количество музеев для посещения равно \(2\). Можно посетить \(2\) различных музея, например, так, как описано ниже.

  • День 1. Сейчас день недели \(1\), и турист находится в городе \(1\). Музей там открыт, турист его посещает. Ночью направляемся в город \(2\).
  • День 2. Сейчас день недели \(2\), и турист находится в городе \(2\). Музей там закрыт. Ночью направляемся в город \(3\).
  • День 3. Сейчас день недели \(3\), и турист находится в городе \(3\). Музей там открыт, турист его посещает. На этом путешествие заканчивается.

D. Получить единицу

дп математика Теория вероятностей теория чисел *2300

У Вивека есть изначально пустой массив \(a\) и некоторая целая константа \(m\).

Он выполняет следующий алгоритм:

  1. Выбрать случайное целое число \(x\) равновероятно в диапазоне от \(1\) до \(m\) и добавить в конец \(a\).
  2. Вычислить наибольший общий делитель чисел в массиве \(a\).
  3. Если он равен \(1\), то закончить.
  4. Иначе продолжить с шага \(1\).

Найдите математическое ожидание длины массива \(a\). Можно показать, что его можно представить как \(\frac{P}{Q}\), где \(P\) и \(Q\) взаимнопростые целые числа и \(Q\neq 0 \pmod{10^9+7}\). Выведите значение \(P \cdot Q^{-1} \pmod{10^9+7}\).

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

Первая и единственная строка содержит целое число \(m\) (\(1 \leq m \leq 100000\)).

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

Выведите одно целое число — математическое ожидание длины массива \(a\) как \(P \cdot Q^{-1} \pmod{10^9+7}\).

Примечание

В первом примере Вивек может добавлять только числа в диапазоне от \(1\) до \(1\), так что у него получится массив \(a=[1]\), после чего алгоритм завершится. Так как длина массива \(a\) всегда получится равной \(1\), то математическое ожидание также будет равно \(1\).

Во втором примере Вивек каждый раз будет дописывать в массив или \(1\) или \(2\), так что после выполнения алгоритма он получит список, который состоит из некоторого количества \(2\) (возможно нулевого) и заканчивается одной \(1\). Математическое ожидание длины списка равно \(1\cdot \frac{1}{2} + 2\cdot \frac{1}{2^2} + 3\cdot \frac{1}{2^3} + \ldots = 2\).

D. Минимальная триангуляция

дп жадные алгоритмы математика *1200

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

Найдите минимальный вес среди всех триангуляций заданного многоугольника.

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

Первая строка содержит единственное целое число \(n\) (\(3 \le n \le 500\)) — количество вершин в правильном многоугольнике.

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

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

Примечание

Согласно Вики: триангуляция многоугольника — это декомпозиция простого многоугольника \(P\) на набор треугольников, другими словами, нахождение набора треугольников с попарно непересекающимися внутренними частями, объединение которых равно \(P\).

В первом примере многоугольник — это треугольник, поэтому его не надо делить дальше. Ответ, соответственно, равен \(1 \cdot 2 \cdot 3 = 6\).

Во втором примере многоугольник — это прямоугольник, его необходимо разбить на два треугольника. Выгодно разделить его используя диагональ \(1-3\), а потому ответ \(1 \cdot 2 \cdot 3 + 1 \cdot 3 \cdot 4 = 6 + 12 = 18\).

E. Беспалиндромные массивы

дп Комбинаторика разделяй и властвуй *2200

Назовем массив \(b\) плохим если он содержит последовательный отрезок \(b_l, b_{l+1}, \dots, b_{r}\) нечетной длины больше \(1\) (\(l < r\) и \(r - l + 1\) нечетно) такой что \(\forall i \in \{0, 1, \dots, r - l\}\) \(b_{l + i} = b_{r - i}\).

Если массив не плохой, то он хороший.

Вам задан массив \(a_1, a_2, \dots, a_n\). Некоторые его элементы равны \(-1\). Посчитайте количество хороших массивов, которое вы можете получить, заменив все \(-1\) на какие-то числа от \(1\) до \(k\).

Так как ответ может быть большим, выведите его по модулю \(998244353\).

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

Первая строка содержит два числа \(n\) и \(k\) (\(2 \le n, k \le 2 \cdot 10^5\)) — длина массива \(a\) и размер "алфавита", т. е., максимальное число, на которое вы можете заменять \(-1\).

Вторая строка содержит \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(a_i = -1\) or \(1 \le a_i \le k\)) — массив \(a\).

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

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

B. Lynyrd Skynyrd

Деревья дп математика поиск в глубину и подобное Структуры данных *2000

Недавно Линэрд и Скинэрд отправились в магазин, где Линэрд купил себе перестановку \(p\) длины \(n\), а Скинэрд купил себе массив \(a\) длины \(m\), состоящий из чисел от \(1\) до \(n\).

Линэрду и Скинэрду скучно, поэтому они решили задать вам \(q\) вопросов, имеющих следующий вид: «есть ли у подотрезка массива \(a\) c \(l\)-й по \(r\)-ю позицию включительно подпоследовательность, которая является циклическим сдвигом \(p\)?».

Перестановка длины \(n\) — это последовательность из \(n\) чисел, в которой каждое число от \(1\) до \(n\) встречается ровно один раз.

Циклический сдвиг перестановки \((p_1, p_2, \ldots, p_n)\) — это перестановка \((p_i, p_{i + 1}, \ldots, p_{n}, p_1, p_2, \ldots, p_{i - 1})\) для какого-то \(i\) от \(1\) до \(n\). Так, например, у перестановки \((2, 1, 3)\) есть три различных циклических сдвига: \((2, 1, 3)\), \((1, 3, 2)\), \((3, 2, 1)\).

Подпоследовательность подотрезка массива \(a\) с \(l\)-й по \(r\)-ю позицию включительно — это последовательность \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) для каких-то \(i_1, i_2, \ldots, i_k\) таких, что \(l \leq i_1 < i_2 < \ldots < i_k \leq r\).

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

В первой строке даны три целых числа \(n\), \(m\), \(q\) (\(1 \le n, m, q \le 2 \cdot 10^5\)) — длина перестановки \(p\), длина массива \(a\) и число запросов.

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

В следующей строке даны \(m\) целых чисел от \(1\) до \(n\), \(i\)-е из них — \(i\)-й элемент массива \(a\).

В следующих \(q\) строках дано описание запросов. В \(i\)-й из этих строк даны два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)), означающие, что \(i\)-й вопрос относится к отрезку массива с \(l_i\)-й по \(r_i\)-ю позицию включительно.

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

В единственной строке выведите строку длины \(q\), состоящую из \(0\) и \(1\), при этом на \(i\)-й позиции должна стоять \(1\), если у подотрезка массива \(a\) c \(l_i\)-й по \(r_i\)-ю позицию включительно есть подпоследовательность, которая является циклическим сдвигом \(p\), и \(0\) в противном случае.

Примечание

В первом примере отрезок с \(1\)-й по \(5\)-ю позицию это \(1, 2, 3, 1, 2\). В нём есть подпоследовательность \(1, 3, 2\), которая является циклическим сдвигом перестановки. В отрезке с \(2\)-й по \(6\)-ю позицию есть подпоследовательность \(2, 1, 3\), совпадающая с перестановкой. Отрезок с \(3\)-й по \(5\)-ю позицию это \(3, 1, 2\), в нём есть только одна подпоследовательность длиной \(3\) (\(3, 1, 2\)), но она не совпадает ни с каким циклическим сдвигом перестановки.

Во втором примере у перестановки циклические сдвиги это \(1, 2\) и \(2, 1\). Отрезок с \(1\)-й по \(2\)-ю позицию это \(1, 1\), его подпоследовательности не совпадает ни с каким циклическим сдвигом перестановки. Отрезок с \(2\)-й по \(3\)-ю позицию это \(1, 2\), он совпадает с перестановкой. Отрезок с \(3\)-й по \(4\)-ю позицию это \(2, 2\), его подпоследовательности не совпадает ни с каким циклическим сдвигом перестановки.

D. Foreigner

дп *2800

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

Неадекватные числа определяются так:

  • все числа от \(1\) до \(9\) являются неадекватными;
  • чтобы число \(x \ge 10\) являлось неадекватным, необходимо, чтобы число \(\lfloor x / 10 \rfloor\) являлось неадекватным, но это еще не все. Упорядочим все неадекватные числа по возрастанию. Пусть число \(\lfloor x / 10 \rfloor\) имеет номер \(k\). Тогда, чтобы число \(x\) было неадекватным, необходимо, чтобы последняя цифра числа \(x\) была строго меньше остатка от деления \(k\) на \(11\).

Здесь \(\lfloor x / 10 \rfloor\) обозначает \(x/10\), округлённое вниз.

Таким образом, если число \(x\) — \(m\)-е во возрастанию неадекватное число, и \(m\) при делении на \(11\) даёт остаток \(c\), то числа \(10 \cdot x + 0, 10 \cdot x + 1 \ldots, 10 \cdot x + (c - 1)\) будут неадекватными, а числа \(10 \cdot x + c, 10 \cdot x + (c + 1), \ldots, 10 \cdot x + 9\) не будут неадекватными.

Первые несколько неадекватных чисел это \(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 21, 30, 31, 32 \ldots\). Дальше, так как \(4\) — четвёртое неадекватное число, то \(40, 41, 42, 43\) — неадекватные, а \(44, 45, 46, \ldots, 49\) не являются неадекватными; так как \(10\) — \(10\)-е неадекватное число, то числа \(100, 101, 102, \ldots, 109\) все являются неадекватными. И так как \(20\) — \(11\)-е неадекватное число, то числа \(200, 201, 202, \ldots, 209\) не являются неадекватными.

Путешествуя по странам, вы совершали много покупок и записывали все цены, за которые покупали товары. К сожалению, все числа смешались в одну большую стоку из цифр \(s\) и вы потеряли границы между соседними числами. Теперь вам интересно, когда иностранные продавцы могли завышать вам цены. Поэтому вы хотите узнать, сколько подстрок получившейся у вас строки являются неадекватными числами. Если какая-то подстрока встречается в нескольких различных позициях, все ее вхождения считаются различными.

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

В единственной строке находится строка \(s\) (\(1 \le |s| \le 10^5\)), состоящая только из цифр. Гарантируется, что на первой позиции \(s\) стоит не ноль.

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

В единственной строке выведите количество подстрок \(s\), являющихся неадекватными числами.

Примечание

В первом тесте из условия неадекватными числами, входящими как подстрока, являются \(1, 2, 4, 21, 40, 402\).

Во втором тесте неадекватными числами, входящими как подстрока, являются \(1\) и \(10\), при этом \(1\) входит как подстрока дважды (на первой и на второй позиции).

G. Слияние двух последовательностей

дп жадные алгоритмы *2400

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

Строго возрастающая последовательность — это последовательность чисел \([x_1 < x_2 < \dots < x_k]\). А строго убывающая последовательность — это последовательность чисел \([y_1 > y_2 > \dots > y_l]\). Обратите внимание, что пустая последовательность и последовательность, состоящая из одного числа, тоже являются как строго возрастающими, так и строго убывающими последовательностями.

Элементы возрастающей последовательности вставили между элементами убывающей последовательности (и, возможно, перед первым элементом и после последнего) без изменения порядка элементов. Например, из последовательностей \([1, 3, 4]\) и \([10, 4, 2]\) можно составить одну из следующих последовательностей: \([10, \textbf{1}, \textbf{3}, 4, 2, \textbf{4}]\), \([\textbf{1}, \textbf{3}, \textbf{4}, 10, 4, 2]\). Следующая последовательность не может быть получена: \([\textbf{1}, 10, \textbf{4}, 4, \textbf{3}, 2]\), так как нельзя менять порядок элементов.

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

Если во входных данных есть противоречие и невозможно разбить \(a\) на одну возрастающую и одну убывающую последовательность, выведите "NO".

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

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в \(a\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2 \cdot 10^5\)), где \(a_i\)\(i\)-й элемент последовательности \(a\).

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

Если во входных данных есть противоречие и невозможно разбить \(a\) на одну возрастающую и одну убывающую последовательность, выведите "NO" в первой строке.

Иначе в первой строке выведите "YES". Во второй строке выведите последовательность из \(n\) целых чисел \(res_1, res_2, \dots, res_n\), где \(res_i\) должно быть равно либо \(0\), либо \(1\) для каждого \(i\) от \(1\) до \(n\). \(i\)-й элемент этой последовательности должен быть равен \(0\), если \(i\)-й элемент \(a\) принадлежит к возрастающей последовательности, и \(1\) в ином случае. Обратите внимание, что пустая последовательность и последовательность, состоящая из одного числа, тоже являются как строго возрастающими, так и строго убывающими последовательностями.

F. Разделение листов

Деревья дп *2500

Вам дано корневое дерево с \(n\) вершинами, пронумерованными от \(1\) до \(n\). Корнем дерева является вершина \(1\). Предком \(i\)-й вершины является вершина \(p_i\). Лист — это вершина без детей. Для некоторого набора листьев \(L\) пусть \(f(L)\) обозначает наименьший связный подграф, содержащий все листья \(L\).

Вы хотите разделить листы так, чтобы для любых двух различных множеств \(x, y\) разбиения \(f(x)\) и \(f(y)\) не пересекались.

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

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

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 200\,000\)) — количество вершин в дереве.

Вторая строка содержит \(n-1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \leq p_i < i\)).

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

Выведите одно целое число по модулю \(998244353\) — количество способов разбить вершины.

Примечание

В первом примере листьями являются вершины \(2,3,4,5\). Способы разделить листья:

Во втором примере есть только один лист \(10\). Значит, что есть только один способ разбиения. Обратите внимание, что вершина \(1\) не является листом.

G. Ограничения

графы дп Потоки *2700

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

За каждый дом вы получаете прибыль в размере \(a^2\) долларов, где \(a\) — высота этого дома.

У города есть \(m\) ограничений. \(i\)-е ограничение говорит о том, что если самый высокий дом от \(l_i\) до \(r_i\) строго больше, чем \(x_i\), вы должны заплатить штраф в размере \(c_i\) долларов.

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

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

Первая строка содержит три целых числа \(n,h,m\) (\(1 \leq n,h,m \leq 50\)) — количество мест для постройки домов, максимальная высота и количество ограничений соответственно.

Каждая из следующих \(m\) строк содержит четыре целых числа \(l_i, r_i, x_i, c_i\) (\(1 \leq l_i \leq r_i \leq n\), \(0 \leq x_i \leq h\), \(1 \leq c_i \leq 5\,000\)).

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

Выведите одно целое число — максимальную прибыль, которую вы можете получить.

Примечание

В первом примере оптимальным является строительство домов высотой \([1, 3, 2]\). Мы получаем прибыль в размере \(1^2+3^2+2^2 = 14\). Мы не нарушаем никаких ограничений, поэтому никаких штрафов нет, поэтому общая прибыль составляет \(14 - 0 = 14\).

Во втором примере оптимально строить дома высотой \([10, 8, 8, 10]\). Мы получаем прибыль в размере \(10^2+8^2+8^2+10^2 = 328\), и мы нарушаем второе ограничение и платим штраф в \(39\) долларов, таким образом, общая прибыль составляет \(328-39 = 289\). Обратите внимание, что даже при отсутствии ограничения на дом \(1\), мы все равно не можем иметь высоту выше \(10\) метров.

H. Сатанинская паника

геометрия дп *2900

Вам дан набор из \(n\) точек на 2D-плоскости. Гарантируется, что нет трех точек на одной прямой.

Пентаграмма — это набор из \(5\) точек \(A,B,C,D,E\), которые можно расположить следующим образом. Обратите внимание, что длина отрезков не имеет значения, главное то, что пересечения существуют.

Подсчитайте количество способов выбрать \(5\) точек из данного набора, которые образуют пентаграмму.

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

Первая строка содержит одно целое число \(n\) (\(5 \leq n \leq 300\)) — количество точек.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i, y_i\) (\(-10^6 \leq x_i,y_i \leq 10^6\)) — координаты \(i\)-й точки. Гарантируется, что нет трех точек на одной прямой.

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

Выведите одно целое число — количество множеств из \(5\) точек, которые составляют пентаграмму.

Примечание

Первый пример: Второй пример: Третий пример:

B. Три религии

дп реализация Строки *2200

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

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

Три религии могут сосуществовать мирно, если их описания являются непересекающимеся подпоследовательностями Слова Вселенной. Формально, религии могут сосуществовать мирно если можно покрасить некоторые символы Слова Вселенной в три цвета: \(1\), \(2\), \(3\), что каждый символ покрашен в не более чем один цвет, и описание \(i\)-й религии может быть построено из Слова Вселенной удалением всех символов, которые не покрашены в цвет \(i\).

Однако религии изменяются. Вначале описание каждой религии пусто. Время от времени, в конец описания какой-нибудь из религий добавляется символ или из описания какой-то религии удаляется последний символ. После каждого изменения определите, могут ли три религии сосуществовать мирно.

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

В первой строке записаны два целых числа \(n, q\) (\(1 \leq n \leq 100\,000\), \(1 \leq q \leq 1000\)) — длина Слова Вселенной и количество изменений религий, соответственно. В следующей строке содержится Слово Вселенной — строка длины \(n\), состоящая из строчных букв латинского алфавита.

Каждая из следующих строк содержит описание одного изменения в одном из следующих форматов:

  • + \(i\) \(c\) (\(i \in \{1, 2, 3\}\), \(c \in \{\mathtt{a}, \mathtt{b}, \dots, \mathtt{z}\}\): в конец описания \(i\)-й религии добавляется символ \(c\).
  • - \(i\) (\(i \in \{1, 2, 3\}\)) – из описания \(i\)-й религии удаляется последний символ. Гарантируется, что в этот момент описание этой религии непусто.

Гарантируется, что описания каждой религий в любой момент времени состоит из не более чем \(250\) символов.

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

Выведите \(q\) строк. \(i\)-я из них должна содержать «YES» если религии могут мирно сосуществовать после \(i\)-й эволюции, и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В первом примере, после 6 изменений описания религий равны: ad, bc, и ab. Следующая иллюстрация показывает, какими подпоследовательностями Слова Вселенной они являются:

D. Отказ от дорог

графы дп жадные алгоритмы Перебор *3000

Codefortia это маленькое островное государство, расположенное где-то в западной части Тихого океана. Оно состоит из \(n\) поселений, соединенных \(m\) двусторонними дорогами из гравия. Любопытно, что верования жителей требуют, чтобы время, необходимое для прохода по каждой дороге было равно \(a\) или \(b\) секунд. Гарантируется, что из любого поселения можно добраться до любого другого, пользуясь только дорогами из гравия.

Codefortia не так давно столкнулась с финансовым кризисом. Таким образом, король решил отказаться от некоторых дорог так, чтобы:

  • было возможно добраться из любого поселения до любого другого, пользуясь только оставленными дорогами,
  • сумма времен, которые требуются для проезда по каждой дороге, должна быть минимально возможной (другими словами, оставленные дороги должны образовывать минимальное остовное дерево, используя время, которое требуется для проезда по дороге как ее вес),
  • среди всех планов, которые минимизируют описанную выше сумму, время, которое нужно, для путешествия от королевской резиденции (в поселении \(1\)) до дома парламента (в поселении \(p\)) используя только оставленные дороги, должно быть минимально возможно.

К сожалению, король забыл, где находится дом парламента Для каждого поселения \(p = 1, 2, \dots, n\), можете ли вы сказать, за какое минимальное время король может проехать от королевской резиденции до дома парламента (расположенном в поселении \(p\)), после отказа от некоторых дорог, по правилам описанным выше?

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

В первой строке записано четырые целых числа \(n\), \(m\), \(a\) and \(b\) (\(2 \leq n \leq 70\), \(n - 1 \leq m \leq 200\), \(1 \leq a < b \leq 10^7\)) — количество поселений и дорог из гравия в Codefortia, и два возможных времен проезда.

В следующих строках записано по три целых числа \(u, v, c\) (\(1 \leq u, v \leq n\), \(u \neq v\), \(c \in \{a, b\}\)), описывающих дорогу из гравия между поселениями \(u\) и \(v\), для проезда по которой требуется \(c\) минут.

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

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

Выведите одну строку, содержащую \(n\) целых чисел. \(p\)-е из них должно содержать минимальное время, которое нужно для проезда из \(1\) в \(p\), после отказа от выбранных дорог. Обратите внимание, что для разных \(p\) вам может быть нужно отказаться от разных наборов дорог.

Примечание

Минимальное возможное время проездов по дорогам в первом примере равно \(85\) — следует отказаться ровно от одной дороги, время проезда по которой равно \(25\). Обратите внимание, что после отказа от одной из этих дорог, становится невозможно проехать от поселения \(1\) до поселения \(3\) за время \(50\).

D. Арифметическое выражение

дп Разбор выражений *2600

Определим арифметическое выражение (АВ) следующим образом.

  • Каждое неотрицательное целое число является АВ. Целые числа могут иметь лидирующие нули (например, 0000 и 0010 считаются допустимыми целыми числами).
  • Если X и Y являются АВ, то «(X) + (Y)», «(X) - (Y)», «(X) * (Y)», и «(X) / (Y)» (без кавычек) тоже являются АВ.
  • Если X является АВ, то « - (X)» и « + (X)» (без кавычек) тоже являются АВ.

    Дана строка, состоящая из цифр («0» - «9») и символов «-», «+», «*», и «/». Ваша задача — посчитать количество арифметических выражений, таких, что после удаления из него всех скобок (символов «(» и «)»), это выражение становится эквивалентным данной строке. Так как ответ может быть очень большим, выведите его по модулю 1000003 (106 + 3).

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

Первая строка — непустая строка из цифр («0» - «9») и символов «-», «+», «*», и/или «/». Длина строки не превосходит 2000 символов. Строка не содержит пробелов.

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

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

Примечание

В первом примере возможны два арифметических выражения:

((1) + (2)) * (3)
(1) + ((2) * (3))

Во втором примере возможны три арифметических выражения:

(03) + (( - (30)) + (40))
(03) + ( - ((30) + (40)))
((03) + ( - (30))) + (40)

E. Гонки в Линейном Королевстве

дп Структуры данных *2400

Вы — организатор гонок, и вы хотите провести серию заездов в Линейном Королевстве.

В Линейном Королевстве n дорог, пронумерованных от 1 до n. Дороги идут одна за другой слева направо, в порядке возрастания номера. Вам поступило несколько предложений проведения заездов. Для каждого заезда известно, на каких дорогах предлагается его проводить — некоторый набор последовательных дорог Королевства. Также известно ваше вознаграждение, в случае если вы решите провести данный заезд. Все заезды предлагается проводить в разное время, то есть одна и та же дорога может использоваться в нескольких заездах.

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

Найдите максимальную возможную прибыль.

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

В первой строке через пробел записано два целых числа n и m (1 ≤ n, m ≤ 2·105) — количество дорог и предложенных заездов соответственно.

Далее следует n строк. Каждая строка содержит одно целое неотрицательное число, не превосходящее 109 — стоимость починки очередной дороги. Стоимости починки даны в порядке начиная с дороги номер 1 заканчивая дорогой номер n.

Далее следует m строк по три числа в каждой: lb, ub, и p (1 ≤ lb ≤ ub ≤ n, 1 ≤ p ≤ 109). Каждая строка описывает очередной заезд: предлагается использовать дороги с lb по ub включительно, и вознаграждение будет составлять p.

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

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

Пожалуйста, не используйте спецификатор %lld для чтения и записи 64-битных целых чисел в C++. Рекомендуется использовать потоки cin, cout (также вы можете использовать спецификатор %I64d).

Примечание

В первом примере выгодно чинить дороги 1, 2, 3 и 7. Три заезда приносят доход 15. Ремонт стоит 11, значит прибыль равна 4.

B. Дима и плохой XOR

битмаски дп Конструктив Перебор *1600

У лицеиста Димы из Кремляндии есть таблица \(a\) размера \(n \times m\), заполненная целыми неотрицательными числами.

Он хочет в каждой строке выбрать ровно одно число так, чтобы побитовое исключающее ИЛИ выбранных чисел было строго больше нуля. Помогите ему!

Формально, он хочет выбрать последовательность чисел \(c_1, c_2, \ldots, c_n\) (\(1 \leq c_j \leq m\)) так, чтобы выполнялось неравенство \(a_{1, c_1} \oplus a_{2, c_2} \oplus \ldots \oplus a_{n, c_n} > 0\), где \(a_{i, j}\) — элемент таблицы в \(i\)-й строке и \(j\)-м столбце.

Здесь \(x \oplus y\) обозначает операцию побитового исключающего ИЛИ чисел \(x\) и \(y\).

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

В первой строке записаны два целых числа \(n\) и \(m\), разделенных пробелом (\(1 \leq n, m \leq 500\)) — количество строк и столбцов в матрице \(a\).

В следующих \(n\) строках записано по \(m\) целых чисел, разделенных пробелом: \(j\)-е число в \(i\)-й из этих строк обозначает \(j\)-й элемент \(i\)-й строки матрицы \(a\), то есть \(a_{i, j}\) (\(0 \leq a_{i, j} \leq 1023\)).

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

Если не существует способа выбрать в каждой строке таблицы одно число, чтобы их побитовое исключающее ИЛИ было строго больше нуля, выведите «NIE».

В противном случае выведите «TAK», и в следующей строке выведите \(n\) целых чисел \(c_1, c_2, \ldots c_n\), разделенных пробелами, (\(1 \leq c_j \leq m\)), чтобы выполнялось неравенство \(a_{1, c_1} \oplus a_{2, c_2} \oplus \ldots \oplus a_{n, c_n} > 0\).

Если существует более одного возможного ответа, вы можете вывести любой.

Примечание

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

Во втором примере выбранные числа \(7\) (первое число в первой строке) и \(10\) (третье число во второй строке), \(7 \oplus 10 = 13\), \(13\) больше чем \(0\), поэтому ответ найден.

E. Количество компонент

дп Комбинаторика математика Структуры данных *2100

Королевство Кремляндия представляет собой дерево (связный неориентированный граф без циклов), состоящее из \(n\) вершин. У каждой вершины \(i\) есть своя стоимость \(a_i\). Все вершины последовательно соединены рёбрами. Формально, для каждого \(1 \leq i < n\) существует ребро между вершинами \(i\) и \(i+1\).

Введём понятие функции \(f(l, r)\), принимающую два целых числа \(l\) и \(r\) (\(l \leq r\)):

  • Оставим в дереве только вершины, стоимости которых находятся в пределах от \(l\) до \(r\).
  • Значением функции будет количество компонент связности в новом графе.

Ваша задача состоит в том, чтобы посчитать следующую сумму: \(\)\sum_{l=1}^{n} \sum_{r=l}^{n} f(l, r) \(\)

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество вершин в дереве.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — стоимости вершин.

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

Выведите одно число — ответ на задачу.

Примечание

В первом примере значения функции будут такими:

  • \(f(1, 1)=1\) (остается только вершина под номером \(2\), которая образует одну компоненту)
  • \(f(1, 2)=1\) (остаются вершины \(1\) и \(2\), которые образуют одну компоненту)
  • \(f(1, 3)=1\) (все вершины остаются, получается одна компонента)
  • \(f(2, 2)=1\) (только вершина под номером \(1\))
  • \(f(2, 3)=2\) (остаются вершины \(1\) и \(3\), которые образуют две компоненты)
  • \(f(3, 3)=1\) (только вершина \(3\))
Суммарно выходит \(7\).

Во втором примере значения функции будут такими:

  • \(f(1, 1)=1\)
  • \(f(1, 2)=1\)
  • \(f(1, 3)=1\)
  • \(f(1, 4)=1\)
  • \(f(2, 2)=1\)
  • \(f(2, 3)=2\)
  • \(f(2, 4)=2\)
  • \(f(3, 3)=1\)
  • \(f(3, 4)=1\)
  • \(f(4, 4)=0\) (никакой вершины не остаётся, а значит количество компонент равно \(0\))
Суммарно выходит \(11\).

F. Соня и информатика

дп Комбинаторика матрицы Теория вероятностей *2300

Девочка по имени Соня учится в научном лицее Королевства Кремляндия. Учитель информатики (любимого предмета Сони!) придумал для неё задачу.

Даётся массив \(a\) длины \(n\), состоящий только из чисел \(0\) и \(1\), а также число \(k\). Ровно \(k\) раз происходит следующее:

  • Равновероятно выбираются два числа \(i\) и \(j\) такие, что (\(1 \leq i < j \leq n\)).
  • Числа, стоящие на позициях \(i\) и \(j\), меняются местами.

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

Можно показать, что искомая вероятность или равна \(0\), или её можно представить как \(\dfrac{P}{Q}\), где \(P\) и \(Q\) — взаимно простые числа и \(Q \not\equiv 0~\pmod {10^9+7}\).

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

Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \leq n \leq 100, 1 \leq k \leq 10^9\)) — длина массива \(a\) и количество операций.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 1\)) — описание массива \(a\).

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

Если искомая вероятность равна \(0\), выведите \(0\), иначе выведите величину \(P \cdot Q^{-1}\) \(\pmod {10^9+7}\), где \(P\) и \(Q\) определены выше.

Примечание

В первом примере все возможные варианты конечного массива \(a\), после применения ровно двух операций: \((0, 1, 0)\), \((0, 0, 1)\), \((1, 0, 0)\), \((1, 0, 0)\), \((0, 1, 0)\), \((0, 0, 1)\), \((0, 0, 1)\), \((1, 0, 0)\), \((0, 1, 0)\). Следовательно ответ равен \(\dfrac{3}{9}=\dfrac{1}{3}\).

Во втором примере массив не станет отсортированным по неубыванию после одной операции, следовательно ответ равен \(0\).

D. Неко и пранк

Деревья дп жадные алгоритмы *2100

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

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

Правильные скобочные последовательности определяются следующим образом:

  • Пустая последовательность является правильной скобочной последовательностью.
  • Если \(s\) является правильной скобочной последовательностью, то \((\,s\,)\) тоже является правильной скобочной последовательностью,
  • Если \(s\) и \(t\) образуют правильную скобочную последовательность, то \(st\) тоже является правильной скобочной последовательностью.

Например, строки «(())» и «()()» образуют правильную скобочную последовательность, а строки «)(» и «((» нет.

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

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

Единственная строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)).

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

Выведите одно число — размер наибольшего паросочетания в дереве. Так как ответ может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

Примечание

Картинки ниже иллюстрируют бор в первом и втором примере (для наглядности круглые скобки заменены на угловые). Максимальное паросочетание обозначено синим.

 

F1. Неко захватывает кошковселенную (упрощённая версия)

битмаски дп матрицы *2800

Эта задача такая же как и следующая, но с меньшими ограничениями.

Аки играет в новую видео-игру. В этой игре он управляет Неко, огромным котом, способным перемещаться между планетами кошковселенной.

Кошковселенная состоит из \(n\) планет, пронумерованных от \(1\) до \(n\). В начале игры Аки выбирает планету, на которой изначально находится Неко. Затем Аки совершает \(k - 1\) ходов, где за один ход Аки перемещает Неко с текущей планеты \(x\) на какую-то планету \(y\), такую что:

  • Планета \(y\) ещё не посещена.
  • \(1 \leq y \leq x + m\) (где \(m\) это фиксированная константа, заданная во входных данных)

Таким образом Неко посетит ровно \(k\) различных планет. Два способа посещений планет называются различными, если существует индекс \(i\), что \(i\)-я планета в первом способе отличается от \(i\)-й планеты во втором способе.

Сколько всего существует способов посетить \(k\) планет таким образом? Так как ответ может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

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

Единственная строка входных данных содержит три целых числа \(n\), \(k\) и \(m\) (\(1 \le n \le 10^5\), \(1 \le k \le \min(n, 12)\), \(1 \le m \le 4\)) — количество планет в кошковселенной, количество планет, которое нужно посетить и вышеупомянутая константа \(m\).

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

Выведите ровно одно целое число — количество способов, которыми Неко может посетить \(k\) планет. Так как это число может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

Примечание

В первом примере есть \(4\) способа для Неко посетить все планеты:

  • \(1 \rightarrow 2 \rightarrow 3\)
  • \(2 \rightarrow 3 \rightarrow 1\)
  • \(3 \rightarrow 1 \rightarrow 2\)
  • \(3 \rightarrow 2 \rightarrow 1\)

Во втором примере есть \(9\) способов посетить ровно \(2\) планеты:

  • \(1 \rightarrow 2\)
  • \(2 \rightarrow 1\)
  • \(2 \rightarrow 3\)
  • \(3 \rightarrow 1\)
  • \(3 \rightarrow 2\)
  • \(3 \rightarrow 4\)
  • \(4 \rightarrow 1\)
  • \(4 \rightarrow 2\)
  • \(4 \rightarrow 3\)

В третьем примере \(m = 4\) и Неко может посетить все планеты в любом порядке, так что всего есть \(5! = 120\) способов всё посетить.

В четвёртом примере Неко должен посетить только \(1\) планету (которая в частности будет начальной планетой маршрута), а значит есть \(100\) способов посетить одну планету.

F2. Неко захватывает кошковселенную (усложнённая версия)

битмаски дп матрицы *3000

Эта задача такая же как и предыдущая, но с большими ограничениями.

Аки играет в новую видео-игру. В этой игре он управляет Неко, огромным котом, способным перемещаться между планетами кошковселенной.

Кошковселенная состоит из \(n\) планет, пронумерованных от \(1\) до \(n\). В начале игры Аки выбирает планету, на которой изначально находится Неко. Затем Аки совершает \(k - 1\) ходов, где за один ход Аки перемещает Неко с текущей планеты \(x\) на какую-то планету \(y\), такую что:

  • Планета \(y\) ещё не посещена.
  • \(1 \leq y \leq x + m\) (где \(m\) это фиксированная константа, заданная во входных данных)

Таким образом Неко посетит ровно \(k\) различных планет. Два способа посещений планет называются различными, если существует индекс \(i\), что \(i\)-я планета в первом способе отличается от \(i\)-й планеты во втором способе.

Сколько всего существует способов посетить \(k\) планет таким образом? Так как ответ может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

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

Единственная строка входных данных содержит три целых числа \(n\), \(k\) и \(m\) (\(1 \le n \le 10^9\), \(1 \le k \le \min(n, 12)\), \(1 \le m \le 4\)) — количество планет в кошковселенной, количество планет, которое нужно посетить и вышеупомянутая константа \(m\).

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

Выведите ровно одно целое число — количество способов, которыми Неко может посетить \(k\) планет. Так как это число может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

Примечание

В первом примере есть \(4\) способа для Неко посетить все планеты:

  • \(1 \rightarrow 2 \rightarrow 3\)
  • \(2 \rightarrow 3 \rightarrow 1\)
  • \(3 \rightarrow 1 \rightarrow 2\)
  • \(3 \rightarrow 2 \rightarrow 1\)

Во втором примере есть \(9\) способов посетить ровно \(2\) планеты:

  • \(1 \rightarrow 2\)
  • \(2 \rightarrow 1\)
  • \(2 \rightarrow 3\)
  • \(3 \rightarrow 1\)
  • \(3 \rightarrow 2\)
  • \(3 \rightarrow 4\)
  • \(4 \rightarrow 1\)
  • \(4 \rightarrow 2\)
  • \(4 \rightarrow 3\)

В третьем примере \(m = 4\) и Неко может посетить все планеты в любом порядке, так что всего есть \(5! = 120\) способов всё посетить.

В четвёртом примере Неко должен посетить только \(1\) планету (которая в частности будет начальной планетой маршрута), а значит есть \(100\) способов посетить одну планету.

D. Сервал и подвешенное дерево

Бинарный поиск Деревья дп жадные алгоритмы поиск в глубину и подобное *1900

Теперь Сервал — младший ученик средней школы Джапари, и он все еще в восторге от математики, как и раньше.

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

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

Подвешенное дерево Сервала имеет \(n\) вершин, корень дерева — вершина \(1\). Сервал хочет написать по одному числу в каждую из вершин, но есть некоторые ограничения. В каждой из вершин, кроме листьев, записана операция \(\max\) или \(\min\), указывающая, что число в этой вершине должно быть равно максимуму или минимуму среди всех чисел, написанных в ее детях, соответственно.

Предположим, что в дереве \(k\) листьев. Сервал хочет написать числа \(1, 2, \ldots, k\) в эти \(k\) листьев (каждое число должно использоваться ровно один раз). Он любит большие числа, поэтому он хочет максимизировать число в корне. Как его лучший друг, вы можете помочь ему?

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

Первая строка содержит целое число \(n\) (\(2 \leq n \leq 3\cdot 10^5\)) — количество вершин в дереве.

Вторая строка содержит \(n\) целых чисел, \(i\)-е из них описывает операцию на вершине \(i\). \(0\) обозначает \(\min\) и \(1\) обозначает \(\max\). Если вершина является листом, будет записано \(0\) или \(1\), но вы можете игнорировать это число.

Третья строка содержит \(n-1\) целое число \(f_2, f_3, \ldots, f_n\) (\(1 \leq f_i \leq i-1\)), где \(f_i\) обозначает родителя вершины \(i\).

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

Выведите одно целое число — максимальное значение числа в корне, которое Сервал может получить.

Примечание

Примеры показаны на рисунках ниже. Числа, написанные в середине вершин, являются их номерами, а сверху написаны числа, которые пишет Сервал.

В первом примере, независимо от того, как вы расположите числа, ответ будет \(1\).

Во втором примере, независимо от того, как вы расположите числа, ответ будет \(4\).

В третьем примере одним из оптимальных решений для достижения \(4\) является расстановка чисел \(4\) и \(5\) на вершины \(4\) и \(5\).

В четвертом примере оптимальным решением является поставить число \(5\) на вершину \(5\).

F. Сервал и бонусная задача

дп Комбинаторика математика Теория вероятностей *2600

Продвигаясь в своем пути к становлению математиком, Сервал стал студентом математического Университета Джапари. На уроке математики учитель научил его вычислять математическое ожидание длины случайного подотрезка данного отрезка. Затем он оставил бонусную задачу в качестве домашнего задания. Эта бонусная задача — расширить разобранную задачу на произвольный случай, как описано ниже.

Задан отрезок длиной \(l\). Мы случайным образом выбираем \(n\) отрезков, выбирая равновероятно две точки (возможно, с нецелыми координатами) из данного отрезка и получая отрезок между двумя этими точками. Вам дано количество случайных отрезков \(n\) и еще одно целое число \(k\). \(2n\) концов выбранных отрезков делят исходный отрезок на \((2n+1)\) отрезков. Ваша задача — вычислить математическое ожидание суммарной длины тех из отрезков, которые покрыты хотя бы \(k\) отрезками из \(n\) случайных отрезков.

Вам требуется вычислить ответ на эту задачу по модулю \(998244353\).

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

Единственная строка содержит три целых числа \(n\), \(k\) и \(l\) (\(1\leq k \leq n \leq 2000\), \(1\leq l\leq 10^9\)).

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

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

Формально, пусть \(M = 998244353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом примере математическое ожидание равно \(\int_0^1 \int_0^1 |x-y| \,\mathrm{d}x\,\mathrm{d}y = {1\over 3}\), а \(3^{-1}\) по модулю \(998244353\) равно \(332748118\).

F. Магазин лопат

дп жадные алгоритмы сортировки *2100

В магазине поблизости продается \(n\) лопат. \(i\)-я лопата стоит \(a_i\) бурлей.

Миша хочет купить ровно \(k\) лопат. EКаждая лопата может быть куплена не более одного раза.

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

Также в магазине есть \(m\) специальных предложений. \(j\)-е из них задано парой \((x_j, y_j)\) и означает, что если Миша купит ровно \(x_j\) лопат в течение одной покупки, то \(y_j\) самых дешевых из них он получит бесплатно (то есть он не будет платить за \(y_j\) самых дешевых лопат в течение текущей покупки).

Миша может использовать любое предложение любое (возможно, нулевое) количество раз, но он не может использовать более одного предложения в течение одной покупки (но он может покупать лопаты без использования каких-либо предложений).

Ваша задача — посчитать минимальную стоимость покупки \(k\) лопат, если Миша будет покупать их оптимальным образом.

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

Первая строка входных данных содержит три целых числа \(n, m\) и \(k\) (\(1 \le n, m \le 2 \cdot 10^5, 1 \le k \le min(n, 2000)\)) — количество лопат в магазине, количество специальных предложений и количество лопат, которое Миша хочет купить соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)), где \(a_i\) равно стоимости \(i\)-й лопаты.

Следующие \(m\) строк содержат специальные предложения. \(j\)-е из них задано парой целых чисел \((x_i, y_i)\) (\(1 \le y_i \le x_i \le n\)) и означает, что если Миша купит ровно \(x_i\) лопат в течение одной покупки, то он сможет взять \(y_i\) самых дешевых из них бесплатно.

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

Выведите одно целое число — минимальную стоимость покупки \(k\) лопат, если Миша будет покупать их оптимальным образом.

Примечание

В первом тестовом примере Миша может купить лопаты на позициях \(1\) и \(4\) (обе со стоимостями \(2\)) в течение первой покупки и получить одну из них бесплатно при помощи первого или третьего специального предложения. И затем он может купить лопаты на позициях \(3\) и \(6\) (со стоимостями \(4\) и \(3\)) в течение второй покупки и получить вторую бесплатно при помощи первого или третьего специального предложения. Затем он может купить лопату на позиции \(7\) со стоимостью \(1\). Таким образом, общая стоимость равна \(4 + 2 + 1 = 7\).

Во втором тестовом примере Миша может купить лопаты на позициях \(1\), \(2\), \(3\), \(4\) и \(8\) (цены равны \(6\), \(8\), \(5\), \(1\) и \(2\)) и получить три самые дешевые (со стоимостями \(5\), \(1\) и \(2\)) бесплатно. И затем он может купить лопаты на позициях \(6\), \(7\) и \(9\) (все со стоимостями \(1\)) без использования любых специальных предложений. Таким образом, общая стоимость равна \(6 + 8 + 1 + 1 + 1 = 17\).

В третьем тестовом примере Миша может купить четыре самые дешевые лопаты без использования любых специальных предложений и получить общую стоимость \(17\).

D. Красивый массив

дп жадные алгоритмы Перебор разделяй и властвуй Структуры данных *1900

Вам дан массив \(a\) состоящий из \(n\) целых чисел. Красота массива – это максимальная сумма какого-то последовательного подотрезка этого массива (этот подотрезок может быть пустым). Например красота массива [10, -5, 10, -4, 1] равна 15, а красота массива [-3, -5, -1] равна 0.

Вы можете выбрать не более одного последовательного подотрезка массива \(a\) и домножить все элементы этого подотрезка на \(x\). Вы хотите максимизировать красоту массива после применения такой операции.

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

Первая строка содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 3 \cdot 10^5, -100 \le x \le 100\)) — длина массива \(a\) и число \(x\) соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — сам массив \(a\).

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

Выведите одно число — максимальную красоту массива \(a\) после не более одного домножения непрерывного подотрезка этого массива на \(x\).

Примечание

В первом тестовом примере нужно домножить подотрезок [-2, 1, -6], после этого массив примет вид [-3, 8, 4, -2, 12] с красотой 22 ([-3, 8, 4, -2, 12]).

Во втором примере нам не нужно домножать какой-либо подотрезок массива вообще.

В третьем тестовом примере независимо от того, какой подотрезок мы домножим, красота массива будет равна 0.

F. Олигополия на доставку

графы дп Перебор *2800

Весь рынок доставки Берляндии находится под контролем у двух враждующих компаний: BerEx и BerPS. Обе компании предоставляют быструю и надежную доставку по всем городами Берляндии.

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

BerEx и BerPS соперничают настолько серьезно, что для каждой пары городов \((v, u)\) они установили свои маршруты из \(v\) в \(u\) таким образом, что эти два маршрута не имеют ни одной общей дороги. Гарантируется, что это было возможно.

Теперь правительство Берляндии решило урезать траты на поддержание дорог путем отказа от поддержания некоторых. Очевидно, они хотят поддерживать как можно меньше дорог. С другой стороны, они не хотят разрушить всю структуру доставок. То есть BerEx и BerPS должны сохранить возможность выбирать пути между каждой парой городов так, чтобы они не имели общих ребер.

Какое минимальное количество ребер правительство Берляндии может поддерживать?

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

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(3 \le n \le 14\), \(n \le m \le \frac{n(n - 1)}{2}\)) — количество городов и количество дорог между ними.

В каждой из следующих \(m\) строк записаны по два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\), \(v \ne u\)) — города, соединенные очередной дорогой.

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

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

В первой строке выведите одно целое число \(k\) – минимальное число дорог, которое правительство Берляндии может поддерживать так, чтобы у BerEx и BerPS оставалась возможность выбирать пути между каждой парой городов так, чтобы они не имели общих ребер.

Следующие \(k\) строк должны содержать список дорог, которые будут поддерживаться. Каждая строка имеет вид "\(v~u\)", где \(v\) и \(u\) — это города, соединенные очередной дорогой.

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

Примечание

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

D. 0-1-Дерево

Деревья дп поиск в глубину и подобное разделяй и властвуй снм *2200

Задано дерево (неориентированный связный ацикличный граф), состоящее из \(n\) вершин и \(n - 1\) ребра. На каждом ребре записано число, каждое из чисел — это либо \(0\) (назовем такие ребра \(0\)-ребрами), либо \(1\) (назовем их \(1\)-ребрами).

Назовем упорядоченную пару вершин \((x, y)\) (\(x \ne y\)) корректной, если при проходе по простому пути от \(x\) до \(y\) мы никогда не пройдем по \(0\)-ребру после прохода по \(1\)-ребру. Ваша задача — посчитать количество корректных пар в дереве.

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

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 200000\)) — количество вершин в дереве.

Затем следует \(n - 1\) строка, каждая из которых описывает ребро дерева. Каждое ребро представлено в виде трех целых чисел \(x_i\), \(y_i\) и \(c_i\) (\(1 \le x_i, y_i \le n\), \(0 \le c_i \le 1\), \(x_i \ne y_i\)) — вершины, соединенные этим ребром, и число, записанное на нем, соответственно.

Гарантируется, что заданный набор ребер формирует дерево.

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

Выведите одно целое число — количество корректных пар вершин.

Примечание

Картинка, соответствующая первому тестовому примеру:

F. Мешок с карточками

дп математика Теория вероятностей *2300

У вас есть мешок с \(n\) карточками. На каждой карточке написано какое-то число; на \(i\)-й карточке написано число \(a_i\).

Вы играете в следующую игру. Во время каждого хода вы берете и удаляете случайную карточку из мешка (все карточки, оставшиеся в мешке, выбираются равновероятно). Больше ничего в первый ход не происходит, но во время каждого следующего хода после удаления карточки из мешка (обозначим число, написанное на ней, как \(x\)) вы сравниваете ее с карточкой, которая была удалена на предыдущий ход (обозначим число, написанное на ней, как \(y\)). Есть три возможных варианта:

  • если \(x < y\), вы проиграли, игра заканчивается;
  • если \(x = y\), вы выиграли, игра заканчивается;
  • если \(x > y\), игра продолжается.

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

Вам нужно посчитать вероятность выиграть в этой игре. Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{P}{Q}\), где \(P\) и \(Q\) — положительные целые числа, и \(Q \neq 0\), \(P \le Q\). Вам нужно вывести \(P \cdot Q^{−1} ~(mod ~~ 998244353)\).

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

Первая строка содержит число \(n\) (\(2 \le n \le 5000\)) — количество карточек в мешке.

Следующая строка содержит \(n\) чисел \(a_1, a_2, \dots a_n\) (\(1 \le a_i \le n\)) — \(i\)-е число обозначает число, записанное на \(i\)-й карточке.

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

Выведите одно число — вероятность выиграть в игре по модулю \(998244353\).

Примечание

В первом тестовом примере вероятность выиграть равна \(\frac{1}{10}\).

Во втором тестовом примере вероятность выиграть равна \(1\).

В третьем тестовом примере вероятность выиграть равна \(0\).

В четвертом тестовом примере вероятность выиграть равна \(\frac{1}{4}\).

F. Максимальный сбалансированный круг

дп жадные алгоритмы Конструктив *2000

В ряду стоит \(n\) людей. Рост \(i\)-го человека равен \(a_i\). Вы можете выбрать любое подмножество этих людей и попробовать переставить их в сбалансированный круг.

Сбалансированным кругом называется такой порядок людей, что разница в росте между любой парой соседних людей не превышает \(1\). Например, пусть роста выбранных людей равны \([a_{i_1}, a_{i_2}, \dots, a_{i_k}]\), где \(k\) — количество людей, которых вы выбрали. Тогда должно выполняться условие \(|a_{i_j} - a_{i_{j + 1}}| \le 1\) для всех \(j\) от \(1\) до \(k-1\), а также должно выполняться условие \(|a_{i_1} - a_{i_k}| \le 1\). \(|x|\) означает абсолютное значение \(x\). Очевидно, что круг, состоящий из одного человека, является сбалансированным.

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

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество людей.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)), где \(a_i\) равно росту \(i\)-го человека.

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

В первой строе выведите \(k\) — количество людей в максимальном сбалансированном круге.

Во второй строке выведите \(k\) целых чисел \(res_1, res_2, \dots, res_k\), где \(res_j\) равно росту \(j\)-го человека в максимальном сбалансированном круге. Должно выполняться условие \(|res_{j} - res_{j + 1}| \le 1\) для всех \(j\) от \(1\) до \(k-1\), а также должно выполняться условие \(|res_{1} - res_{k}| \le 1\).

F. Плотности подмассивов

дп математика *3500

Есть некоторое целое положительное число \(c\). Будем называть массив \(a_1, a_2, \ldots, a_n\) целых чисел \(c\)-массивом, если для всех \(i\) выполнено \(1 \leq a_i \leq c\). Будем называть \(c\)-массив \(b_1, b_2, \ldots, b_k\) подмассивом \(c\)-массива \(a_1, a_2, \ldots, a_n\), если существует такой набор из \(k\) индексов \(1 \leq i_1 < i_2 < \ldots < i_k \leq n\), такой, что \(b_j = a_{i_j}\) для всех \(1 \leq j \leq k\). Плотностью \(c\)-массива \(a_1, a_2, \ldots, a_n\) будем называть максимальное целое неотрицательное число \(p\), такое что любой \(c\)-массив, состоящий из \(p\) чисел, будет являться подмассивом \(a_1, a_2, \ldots, a_n\).

Вам дано число \(c\) и некоторый \(c\)-массив \(a_1, a_2, \ldots, a_n\). Найдите для всех \(0 \leq p \leq n\) количество последовательностей индексов \(1 \leq i_1 < i_2 < \ldots < i_k \leq n\) для \(1 \leq k \leq n\), таких что плотность массива \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) равна \(p\). Так как эти количества могут получиться очень большими, найдите их по модулю \(998\,244\,353\).

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

В первой строке находятся два целых числа \(n\) и \(c\), разделённых пробелами (\(1 \leq n, c \leq 3\,000\)). В следующей строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\), разделённых пробелами (\(1 \leq a_i \leq c\)).

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

Выведите \(n + 1\) число \(s_0, s_1, \ldots, s_n\). Число \(s_p\) должно равняться количеству последовательностей индексов \(1 \leq i_1 < i_2 < \ldots < i_k \leq n\) для \(1 \leq k \leq n\) по модулю \(998\,244\,353\), таких что плотность массива \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) равна \(p\).

Примечание

В первом примере, заметим, что плотность массива будет всегда равна его длине. Существует \(4\) последовательности индексов из одного индекса, \(6\) из двух, \(4\) из трех и \(1\) из четырех.

Во втором примере, единственная последовательность индексов, такая что получится массив ненулевой плотности это все индексы, так как иначе будет не хватать хотя бы одного из чисел от \(1\) до \(3\) в массиве, а значит он не будет удовлетворять условию плотности для \(p \geq 1\).

D. Таинственный код

дп Строки *2100

Гуляя по лесу, Кэти наткнулась на таинственный код! Однако некоторые символы, к сожалению, оказались нечитаемыми. Кэти записала таинственный код как строку \(c\), состоящую из строчных латинских букв и звёздочек («*»), где звёздочка обозначает нечитаемый символ. Вдохновлённая своим открытием, Кэти хочет восстановить нечитаемые символы, заменив каждую звёздочку произвольной строчной латинской буквой (разные звёздочки можно заменить на разные буквы).

Также у Кэти есть любимая строка \(s\) и не очень любимая строка \(t\). Она хочет восстановить таинственный код таким образом, чтобы количество вхождений \(s\) в него было как можно больше, а количество вхождений \(t\) как можно меньше. Формально, обозначим \(f(x, y)\) как количество вхождений строки \(y\) в строку \(x\) (например, \(f(aababa, ab) = 2\)). Кэти хочет восстановить код \(c'\), подходящий под изначальный код \(c\), такой что \(f(c', s) - f(c', t)\) является максимально возможной. Кэти не очень хороша в восстановлении кодов, поэтому она хочет, чтобы вы ей помогли.

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

Первая строка содержит строку \(c\) (\(1 \leq |c| \leq 1000\)) — таинственный код. Гарантируется, что строка \(c\) состоит только из строчных латинских букв и звёздочек «*».

Вторая и третья строка содержат строки \(s\) и \(t\) соответственно (\(1 \leq |s|, |t| \leq 50\), \(s \neq t\)). Гарантируется, что строки \(s\) и \(t\) состоят только из строчных латинских букв.

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

Выведите одно целое число — максимальное значение \(f(c', s) - f(c', t)\) у восстановленного кода.

Примечание

В первом примере для \(c'\) равной «katie», \(f(c', s) = 1\) и \(f(c', t) = 0\), тем самым \(f(c', s) - f(c', t) = 1\), что является наибольшим возможным значением.

Во втором примере есть лишь одна \(c'\) подходящая под исходный код \(c\): «caat». Соответствующая \(f(c', s) - f(c', t) = 1 - 2 = -1\).

В третьем примере есть несколько способов восстановить код, так чтобы \(f(c', s) - f(c', t)\) была максимально возможной, например «aaa», «aac», или «zaz». Величина \(f(c', s) - f(c', t) = 0\) для всех этих способов.

В четвёртом примере оптимальным способом восстановить \(c'\) является «ccc». В этом случае \(f(c', s) - f(c', t) = 2\).

C. И-достижимость

битмаски дп *2200

У жабы Пимпла есть массив целых чисел \(a_1, a_2, \ldots, a_n\).

Скажем, что \(y\) достижимо из \(x\), если \(x<y\) и существует такой целочисленный массив \(p\), что \(x = p_1 < p_2 < \ldots < p_k=y\) и \(a_{p_i}\, \&\, a_{p_{i+1}} > 0\) для всех таких целых чисел \(i\), что \(1 \leq i < k\).

Здесь \(\&\) обозначает операцию побитовое И.

Вам дано \(q\) пар индексов, проверьте достижимость для каждой из них.

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

В первой строке записаны два целых числа \(n\) и \(q\) (\(2 \leq n \leq 300\,000\), \(1 \leq q \leq 300\,000\)) — количество чисел в массиве и количество запросов, на которые вам нужно будет ответить.

Во второй строке записаны \(n\) целых чисел, разделенных пробелами: \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 300\,000\)) — данный массив.

В следующих \(q\) строках записаны по два целых числа. В \(i\)-й из них записаны два целых числа \(x_i\) и \(y_i\) (\(1 \leq x_i < y_i \leq n\)). Вам нужно проверить, достижимо ли \(y_i\) из \(x_i\).

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

Выведите \(q\) строк. В \(i\)-й из них выведите «Shi», если \(y_i\) достижимо из \(x_i\). Иначе выведите «Fou».

Примечание

В первом примере \(a_3 = 0\). Побитовое И с ним всегда будет равно нулю. \(a_2\, \&\, a_4 > 0\), поэтому \(4\) достижима из \(2\), а чтобы дойти от \(1\) до \(4\), вы можете воспользоваться \(p = [1, 2, 4]\).

D. Анаграммные пути

Деревья дп реализация *3000

У жабы Ильи есть подвешенное двоичное дерево с корнем в вершине \(1\). Деревом называется связный граф без циклов. Дерево называется подвешенным, если в нем выделена одна вершина, эта вершина называется корнем. Вершина \(u\) является сыном вершины \(v\), если \(u\) и \(v\) соединены ребром, и \(v\) ближе к корню, чем \(u\). Листом называется вершина, которая не является корнем, и у которой нет детей.

В дереве Ильи у каждой вершины не более двух детей, и на каждом ребре записан символ. Каждый символ может быть строчной буквой латинского алфавита или знаком вопроса '?'.

Илья немного изменит дерево \(q\) раз. Каждое обновление заменит один символ на ровно одном ребре. После каждого обновления Илья должен проверить, является ли дерево анаграммным и если это так, то еще и найти его анаграмность для каждой буквы. Это непросто объяснить, но мы попробуем.

Для начала, строка \(a\) является анаграммой строки \(b\), если возможно переставить буквы строки \(a\) (не меняя сами буквы) так, что она станет равной строке \(b\). Например, строка «fortyfive» является анаграммой строки «overfifty», но строка «aabb» — не анаграмма строки «bbba».

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

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

После каждого обновления проверьте, является ли дерево анаграммным, и если является, то найдите \(\sum{f(c) \cdot ind(c)}\) по всем буквам \(c\), где \(f(c)\) — это анаграмность для буквы \(c\), а \(ind(x)\) — порядок буквы в алфавите (\(ind(\)"a"\() = 1\), \(ind(\)"b"\() = 2\), ..., \(ind(\)"z"\() = 26\)).

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

В первой строке записано два целых числа \(n\) и \(q\) (\(2 \leq n \leq 150\,000\), \(1 \leq q \leq 150\,000\)) — количество вершин в дереве и количество запросов.

В следующих \(n-1\) строках записано по одному целому числу и по одному символу. В \(i\)-й из них записано целое число \(p_i\) и символ \(c_i\) (\(1 \leq p_i \leq i\), \(c_i\) это строчный символ латинского алфавита или знак вопроса '?'), описывающих ребро между вершинами \(p_i\) и \(i+1\) с символом \(c_i\), записанным на нем.

Корень этого дерева это вершина \(1\), и у каждой вершины есть не более двух детей.

В следующих \(q\) строк записано по одному целому числу и по одному символу, описывающих запросы. В \(i\)-й из них записано по два целых числа \(v\) и \(c\) (\(2 \leq v \leq n\), \(c\) это строчный символ латинского алфавита или знак вопроса '?'), описывающих, что обновленный символ на ребре между вершинами \(p_{v-1}\) и \(v\) равен \(c\). Обновленный символ может быть равен символу, записанному на этом ребре ранее.

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

Выведите \(q\) строк. В \(i\)-й из них выведите «Fou» если дерево не анаграммное после первых \(i\) обновлений.

Иначе выведите «Shi» и \(\sum{f(c) \cdot ind(c)}\) по всем буквам \(c\).

Примечание

В первом примере после первого запроса, для каждого символа, вы можете поставить все ребра равными этому символу, и вы получите \(1\) такой символ на каждом пути, так что ответ равен \(1 \cdot (1+2+\ldots+26) = 351\).

В первом примере после второго запроса, вы знаете, что все пути должны быть анаграммой «a», так что все пути должны быть равны «a», так что ответ равен \(1 \cdot 1 = 1\).

В первом примере после третьего запроса, у вас есть два пути со строками «a» и «b», но эти строки не анаграммы, так что ответ «Fou».

В первом примере после четвертого запроса, вы знаете, что все пути должны быть «b», так что ответ равен \(1 \cdot 2 = 2\).

Во втором примере после первого запроса, вы знаете, что \(f(\)'a'\() = 2\) и \(f(c) = 1\) для всех остальных символов, так что ответ равен \(1 \cdot (2 + 3 + \ldots + 26) + 2 = 352\).

Во втором примере после второго запроса, вы знаете, что на каждом пути должно быть одно 'a' и одно 'b', так что ответ равен \(1 \cdot 1 + 1 \cdot 2 = 3\).

I. Хорошие подмножества

*особая задача дп

Задано \(n\) отрезков на координатной оси \(Ox\). \(i\)-й отрезок задан парой \(l_i, r_i\), где \(l_i\) равно позиции левого конца \(i\)-го отрезка, а \(r_i\) равно позиции правого конца \(i\)-го отрезка. Отрезки могут пересекаться, вкладываться и даже совпадать. Отрезок — это множество чисел (включая вещественнозначные) которые находятся между концами отрезка или совпадают с ними. Формально, отрезок \([l, r]=\{x~|~x \in \Bbb{R},~l \le x \le r\}\).

Назовем объединением отрезков все точки оси, покрытые набором отрезков. Назовем подмножество заданных отрезков хорошим, если его объединение равно объединению всех \(n\) отрезков.

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

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество отрезков.

Следующие \(n\) строк содержат отрезки. \(i\)-й отрезок задан парой \(l_i, r_i\) (\(1 \le l_i \le r_i \le 10^9\)), где \(l_i\) равно левой границе отрезка, а \(r_i\) равно правой границе отрезка. Отрезки могут пересекаться, вкладываться и даже совпадать.

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

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

B. Nauoo и окружность

Деревья дп Комбинаторика поиск в глубину и подобное *1900

Nauuo — девочка, которая любит рисовать окружности.

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

Дерево — это связный неориентированный граф из \(n\) вершин и \(n-1\) ребер. Вершины пронумерованы целыми числами от \(1\) до \(n\).

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

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

Nauuo хочет нарисовать дерево, используя перестановку из \(n\) элементов. Перестановка из \(n\) элементов это последовательность целых чисел \(p_1,p_2,\ldots,p_n\), в которой каждое целое число от \(1\) до \(n\) встречается ровно один раз.

После выбора перестановки Nauuo нарисует \(i\)-ю вершину в \(p_i\)-й точке на окружности, а затем нарисует ребра, основываясь на положении вершин.

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

Очевидно, что корректность перестановки не зависит от выбранных \(n\) точек на окружности.

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

В первой строке записано одно целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — количество вершин в дереве.

В каждой из следующих \(n-1\) строк записаны два целых числа \(u\) и \(v\) (\(1\le u,v\le n\)), описывающих ребро между вершинами \(u\) и \(v\).

Гарантируется, что данные ребра образуют дерево.

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

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

Примечание

Пример 1

Корректные перестановки и их деревья.

А вот пример некорректной перестановки: ребра \((1,3)\) и \((2,4)\) пересекаются.

Example 2

Каждая перестановка приводит к корректному дереву, так что ответ равен \(4! = 24\).

C1. Nauuo и картинки (упрощенная версия)

дп Теория вероятностей *2300

Единственное отличие этой версии от усложненной это ограничения.

Nauuo — девочка, которая любит сайты со случайными картинками.

Однажды она сделала свой сайт со случайными картинками, на котором было \(n\) картинок.

Когда Nauuo посещает этот веб-сайт, она видит ровно одну картинку. На этом вебсайте вероятности показывания каждой картинки не одинаковы. У \(i\)-й картинки есть неотрицательный вес \(w_i\), и вероятность, что покажут \(i\)-ю картинку, равна \(\frac{w_i}{\sum_{j=1}^nw_j}\). Таким образом, вероятность показывания каждой картинки пропорциональна ее весу.

Однако Nauuo заметила, что некоторые картинки, которые ей не нравятся, показываются ей слишком часто.

Чтобы избавиться от этой проблемы, она придумала гениальную идею: когда она видит картинку, которая ей нравится, она прибавляет \(1\) к ее весу; иначе она вычитает \(1\) из ее веса.

Nauuo посетит веб-сайт \(m\) раз. Она хочет узнать ожидаемый вес каждой картинки после всех \(m\) посещений по модулю \(998244353\). Можете ли вы ей помочь?

Ожидаемый вес \(i\)-й картинки может быть представлен в виде \(\frac {q_i} {p_i}\) где \(\gcd(p_i,q_i)=1\), тогда вам нужно вывести такое \(r_i\), что \(0\le r_i<998244353\) и \(r_i\cdot p_i\equiv q_i\pmod{998244353}\). Можно доказать, что такое \(r_i\) существует и уникально.

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(1\le n\le 50\), \(1\le m\le 50\)) — количество картинок и количество посещений веб-сайта.

Во второй строке записаны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(a_i\) либо \(0\), либо \(1\)): если \(a_i=0\), Nauuo не нравится \(i\)-я картинка; иначе Nauuo нравится \(i\)-я картинка. Гарантируется, что есть хотя бы одна картинка, которая нравится Nauuo.

В третьей строке записаны \(n\) целых чисел \(w_1,w_2,\ldots,w_n\) (\(1\le w_i\le50\)) — изначальные веса картинок.

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

Выведите \(n\) целых чисел \(r_1,r_2,\ldots,r_n\) — ожидаемые веса по модулю \(998244353\).

Примечание

В первом примере если на единственном посещении, с вероятностью \(\frac 2 3\), ей покажут первую картинку, итоговые веса будут \((1,1)\); если же на единственном посещении, с вероятностью \(\frac1 3\), ей покажут вторую картинку, итоговые веса будут \((2,2)\).

Таким образом, оба ожидаемых веса равны \(\frac2 3\cdot 1+\frac 1 3\cdot 2=\frac4 3\) .

Так как \(332748119\cdot 3\equiv 4\pmod{998244353}\), вы должны вывести \(332748119\) вместо \(\frac4 3\) или \(1.3333333333\) .

Во втором примере существует только одна картинка, и она нравится Nauuo, таким образом после каждого посещения \(w_1\) будет увеличено на \(1\).

Таким образом, ожидаемый вес равен \(1+2=3\).

Nauuo очень капризная, поэтому она отказалась давать вам какие-либо подсказки по третьему примеру.

C2. Nauuo и картинки (усложненная версия)

дп Теория вероятностей *2600

Единственное отличие этой версии от упрощенной это ограничения.

Nauuo — девочка, которая любит сайты со случайными картинками.

Однажды она сделала свой сайт со случайными картинками, на котором было \(n\) картинок.

Когда Nauuo посещает этот веб-сайт, она видит ровно одну картинку. На этом вебсайте вероятности показывания каждой картинки не одинаковы. У \(i\)-й картинки есть неотрицательный вес \(w_i\), и вероятность, что покажут \(i\)-ю картинку, равна \(\frac{w_i}{\sum_{j=1}^nw_j}\). Таким образом, вероятность показывания каждой картинки пропорциональна ее весу.

Однако Nauuo заметила, что некоторые картинки, которые ей не нравятся, показываются ей слишком часто.

Чтобы избавиться от этой проблемы, она придумала гениальную идею: когда она видит картинку, которая ей нравится, она прибавляет \(1\) к ее весу; иначе она вычитает \(1\) из ее веса.

Nauuo посетит веб-сайт \(m\) раз. Она хочет узнать ожидаемый вес каждой картинки после всех \(m\) посещений по модулю \(998244353\). Можете ли вы ей помочь?

Ожидаемый вес \(i\)-й картинки может быть представлен в виде \(\frac {q_i} {p_i}\) где \(\gcd(p_i,q_i)=1\), тогда вам нужно вывести такое \(r_i\), что \(0\le r_i<998244353\) и \(r_i\cdot p_i\equiv q_i\pmod{998244353}\). Можно доказать, что такое \(r_i\) существует и уникально.

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(1\le n\le 2\cdot 10^5\), \(1\le m\le 3000\)) — количество картинок и количество посещений веб-сайта.

Во второй строке записаны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(a_i\) либо \(0\), либо \(1\)): если \(a_i=0\), Nauuo не нравится \(i\)-я картинка; иначе Nauuo нравится \(i\)-я картинка. Гарантируется, что есть хотя бы одна картинка, которая нравится Nauuo.

В третьей строке записаны \(n\) целых чисел \(w_1,w_2,\ldots,w_n\), (\(w_i \geq 1\)) — изначальные веса картинок. Гарантируется, что сумма исходных весов не превосходит \(998244352-m\).

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

Выведите \(n\) целых чисел \(r_1,r_2,\ldots,r_n\) — ожидаемые веса по модулю \(998244353\).

Примечание

В первом примере если на единственном посещении, с вероятностью \(\frac 2 3\), ей покажут первую картинку, итоговые веса будут \((1,1)\); если же на единственном посещении, с вероятностью \(\frac1 3\), ей покажут вторую картинку, итоговые веса будут \((2,2)\).

Таким образом, оба ожидаемых веса равны \(\frac2 3\cdot 1+\frac 1 3\cdot 2=\frac4 3\) .

Так как \(332748119\cdot 3\equiv 4\pmod{998244353}\), вы должны вывести \(332748119\) вместо \(\frac4 3\) или \(1.3333333333\) .

Во втором примере существует только одна картинка, и она нравится Nauuo, таким образом после каждого посещения \(w_1\) будет увеличено на \(1\).

Таким образом, ожидаемый вес равен \(1+2=3\).

Nauuo очень капризная, поэтому она отказалась давать вам какие-либо подсказки по третьему примеру.

E. Ихаб и обычная задача на OEIS

дп Комбинаторика математика теория чисел *2500

Определим функцию \(f(p)\) от перестановки \(p\) следующим образом. Пусть \(g_i\) — наибольший общий делитель (НОД) чисел \(p_1\), \(p_2\), ..., \(p_i\) (другими словами, НОД на префиксе длины \(i\)). Тогда \(f(p)\) равно числу различных значений среди \(g_1\), \(g_2\), ..., \(g_n\).

Пусть \(f_{max}(n)\) — максимальное значение \(f(p)\) среди всех перестановок \(p\) чисел \(1\), \(2\), ..., \(n\).

Вам дано число \(n\), подсчитайте число перестановок \(p\) чисел \(1\), \(2\), ..., \(n\) таких, что \(f(p)\) равно \(f_{max}(n)\). Так как ответ может быть большим, выведите остаток от деления этого числа на \(1000\,000\,007 = 10^9 + 7\).

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

Единственная строка содержит целое число \(n\) (\(2 \le n \le 10^6\)) — длину рассматриваемых перестановок.

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

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

Примечание

Рассмотрим второй пример: ниже перечислены перестановки длины \(3\):

  • \([1,2,3]\), \(f(p)=1\).
  • \([1,3,2]\), \(f(p)=1\).
  • \([2,1,3]\), \(f(p)=2\).
  • \([2,3,1]\), \(f(p)=2\).
  • \([3,1,2]\), \(f(p)=2\).
  • \([3,2,1]\), \(f(p)=2\).

Максимальное значение \(f_{max}(3) = 2\), и существуют \(4\) перестановки \(p\) такие, что \(f(p)=2\).

E. Минимальное покрытие отрезков

Деревья дп жадные алгоритмы поиск в глубину и подобное разделяй и властвуй реализация Структуры данных *2200

Даны \(n\) отрезков в формате \([l; r]\) на числовой прямой.

Также даны \(m\) запросов в формате \([x; y]\). Какое минимальное число отрезков надо взять так, чтобы каждая точка (не обязательно целочисленная) от \(x\) до \(y\) была покрыта хотя бы одним из них?

Если нельзя выбрать отрезки так, чтобы каждая точка от \(x\) до \(y\) была покрыта, тогда выведите -1 на этот запрос.

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество отрезков и количество запросов, соответственно.

В каждой из следующих \(n\) строк записаны по два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i < r_i \le 5 \cdot 10^5\)) — данные отрезки.

В каждой из следующих \(m\) строк записаны по два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i < y_i \le 5 \cdot 10^5\)) — запросы.

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

Выведите \(m\) целых чисел. \(i\)-е число должно быть ответом на \(i\)-й запрос: либо минимальное число отрезков необходимое, чтобы каждая точка (не обязательно целочисленная) от \(x_i\) до \(y_i\) была покрыта хотя бы одним из них, либо -1, если нельзя выбрать отрезки так, чтобы каждая точка от \(x_i\) до \(y_i\) была покрыта.

Примечание

В первом примере три запроса:

  1. запрос \([1; 3]\) может быть покрыт отрезком \([1; 3]\);
  2. запрос \([1; 4]\) может быть покрыт отрезками \([1; 3]\) и \([2; 4]\). Нельзя покрыть \([1; 4]\) одним отрезком;
  3. запрос \([3; 4]\) может быть покрыт отрезком \([2; 4]\); Не важно, что покрыты какие-то точки вне данного запроса.

Во втором примере четыре запроса:

  1. запрос \([1; 2]\) может быть покрыт отрезком \([1; 3]\). Обратите внимание, что можно выбрать любой из отрезков \([1; 3]\);
  2. запрос \([1; 3]\) может быть покрыт отрезком \([1; 3]\);
  3. запрос \([1; 4]\) не может быть покрыт никаким набором отрезков;
  4. запрос \([1; 5]\) не может быть покрыт никаким набором отрезков. Обратите внимание, что отрезки \([1; 3]\) и \([4; 5]\) вместе не покрывают \([1; 5]\), потому что даже нецелые точки должны быть покрыты. Здесь \(3.5\) не покрыта, например.

G. Очередная задача на разбиения

геометрия дп разделяй и властвуй Структуры данных *3000

Вам задан массив \(a_1, a_2, \dots, a_n\). Вам необходимо разделить его на \(k\) подотрезков (так, что каждый элемент принадлежит ровно одному подотрезку).

Весом подотрезка \(a_l, a_{l+1}, \dots, a_r\) назовем значение \((r - l + 1) \cdot \max\limits_{l \le i \le r}(a_i)\). Весом разбиения — суммарный вес его подотрезков.

Найдите разбиение минимального веса.

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

В первой строке заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^4\), \(1 \le k \le \min(100, n)\)) — длина массива \(a\) и количество подотрезков в разбиении.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^4\)) — массив \(a\).

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

Выведите единственное число — минимальный вес среди всех возможных разбиений.

Примечание

Оптимальное разбиение в первом примере: \(6\) \(1\) \(7\) \(\bigg|\) \(4\).

Оптимальное разбиение во втором примере: \(6\) \(\bigg|\) \(1\) \(\bigg|\) \(7\) \(4\).

Одно из оптимальных разбиений в третьем примере: \(5\) \(\bigg|\) \(1\) \(5\) \(\bigg|\) \(1\) \(\bigg|\) \(5\).

C. Теряй!

дп жадные алгоритмы реализация *1300

Вам задан массив \(a\), состоящий из \(n\) целых чисел. Каждое \(a_i\) равно одному из следующих шести чисел: \(4, 8, 15, 16, 23, 42\).

Ваша задача — удалить минимальное количество элементов, чтобы сделать массив хорошим.

Массив длины \(k\) называется хорошим, если \(k\) делится на \(6\) и возможно разделить его на \(\frac{k}{6}\) подпоследовательностей \(4, 8, 15, 16, 23, 42\).

Примеры хороших массивов:

  • \([4, 8, 15, 16, 23, 42]\) (весь массив является необходимой последовательностью);
  • \([4, 8, 4, 15, 16, 8, 23, 15, 16, 42, 23, 42]\) (первая последовательность состоит из первого, второго, четвертого, пятого, седьмого и десятого элементов, а вторая состоит из оставшихся элементов);
  • \([]\) (пустой массив является хорошим).

Примеры плохих массивов:

  • \([4, 8, 15, 16, 42, 23]\) (порядок элементов должен быть в точности \(4, 8, 15, 16, 23, 42\));
  • \([4, 8, 15, 16, 23, 42, 4]\) (длина массива не делится на \(6\));
  • \([4, 8, 15, 16, 23, 42, 4, 8, 15, 16, 23, 23]\) (первая последовательность может состоять из первых шести элементов, но оставшийся массив не может составить необходимую последовательность).
Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество элементов в \(a\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (каждое \(a_i\) равно одному из следующих шести чисел: \(4, 8, 15, 16, 23, 42\)), где \(a_i\)\(i\)-й элемент \(a\).

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

Выведите одно целое число — минимальное количество элементов, которое необходимо удалить, чтобы получить хороший массив.

F. Уничтожай!

дп реализация сортировки *2100

Вы играете в компьютерную игру, которая называется Splay the Sire. Сейчас Вы сражаетесь с финальным боссом игры.

Битва с боссом состоит из \(n\) ходов. В течение каждого хода Вы получаете некоторое количество карт. Каждая карта имеет два параметра: ее цену \(c_i\) и урон \(d_i\). Вы можете играть какими-то картами в какой-то последовательности в течение каждого хода (Вы выбираете карты и точный порядок, в котором их поставите) до тех пор, пока суммарная стоимость карт, которыми Вы играете в течение хода, не превосходит \(3\). После игры некоторым (возможно, нулевым) количеством карт Вы заканчиваете ход, а все карты, которыми Вы не сыграли, пропадают. Заметьте, что вы можете использовать каждую карту не более одного раза.

Ваш персонаж также нашел артефакт, который позволяет увеличить урон некоторых действий: каждая \(10\)-я карта, которую Вы играете, наносит двойной урон.

Чему равен максимально возможный урон, который Вы можете нанести в течение \(n\) ходов?

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество ходов.

Затем следуют \(n\) блоков входных данных, \(i\)-й блок описывает карты, которые Вы получите в течение \(i\)-го хода.

Каждый блок начинается со строки, содержащей одно целое число \(k_i\) (\(1 \le k_i \le 2 \cdot 10^5\)) — количество карт, которое Вы получите в течение \(i\)-го хода. Затем следуют \(k_i\) строк, каждая из которых содержит два целых числа \(c_j\) и \(d_j\) (\(1 \le c_j \le 3\), \(1 \le d_j \le 10^9\)) — параметры соответствующей карты.

Гарантируется, что \(\sum \limits_{i = 1}^{n} k_i \le 2 \cdot 10^5\).

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

Выведите одно целое число — максимально возможный урон, который Вы можете нанести.

Примечание

В тестовом примере лучшая последовательность действий будет выглядеть следующим образом:

В течение первого хода сыграть всеми тремя картами и нанести \(18\) единиц урона.

В течение второго хода сыграть обеими картами и нанести \(7\) единиц урона.

В течение третьего хода сыграть первой и третьей картами и нанести \(13\) единиц урона.

В течение четвертого хода сыграть первой и третьей картами и нанести \(25\) единиц урона.

В течение пятого хода сыграть единственной картой, которая нанесет двойной урон (\(200\)).

B. WOW фактор

дп Строки *1300

Строка \(a\) является подпоследовательностью строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов. Например, для строки \(a\)wowwo», следующие строки являются подпоследовательностями: «wowwo», «wowo», «oo», «wow», «» и другие, а следующие не являются подпоследовательностями: «owoo», «owwwo», «ooo».

Wow фактор строки равен количеству подпоследовательностей, которые равны строке «wow». Боб хотел выписать строку, которая имеет большой wow фактор. Однако кнопка «w» на его клавиатуре сломана, поэтому он пишет вместо нее две буквы «v».

Боб неожиданно осознал, что, возможно, в строке можно найти больше букв «w», чем он написал. Например, рассмотрим строку «ww». Боб написал бы ее как «vvvv», но в этой строке можно найти три буквы «w»:

  • «vvvv»
  • «vvvv»
  • «vvvv»

Например, wow фактор в слове «vvvovvv» равен четырем, потому что есть четыре способа выбрать «wow»:

  • «vvvovvv»
  • «vvvovvv»
  • «vvvovvv»
  • «vvvovvv»

Обратите внимание, что подпоследовательность «vvvovvv» не считается, так как буквы «v» должны быть последовательными.

Посчитайте wow фактор для строки \(s\) и выведите его. Обратите внимание, что не гарантируется, что возможно получить строку \(s\) из другой строки, заменяя «w» на «vv». Например, \(s\) может быть «vov».

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

Первая строка содержит одну непустую строку \(s\), которая состоит только из символов «v» и «o». Длина строки \(s\) не более \(10^6\) символов.

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

Выведите одно целое число — wow фактор строки \(s\).

Примечание

Первый пример объяснен в легенде.

F1. Короткая разноцветная полоска

дп Комбинаторика поиск в глубину и подобное *2200

Это первая подзадача задачи F. Единственные различия между этой и второй подзадачами — это ограничения на значение \(m\) и ограничение по времени. Вам нужно решить обе подзадачи, чтобы взламывать эту подзадачу.

Во вселенной всего есть \(n+1\) разных цветов, пронумерованных от \(0\) до \(n\). Есть полоска, длина которой \(m\) сантиметров, изначально покрашенная в цвет \(0\).

Алиса взяла кисть и начала разукрашивать полоску. Для каждого \(i\) от \(1\) до \(n\) в таком порядке она выбирает два числа \(0 \leq a_i < b_i \leq m\) такие, что отрезок \([a_i, b_i]\) сейчас покрашен одним цветом, и красит его в цвет \(i\).

Алиса выбрала такие отрезки, что сейчас каждый сантиметр имеет отличный от \(0\) цвет. Формально, отрезок \([i-1, i]\) покрашен в цвет \(c_i\) (\(c_i \neq 0\)). Каждый цвет, кроме \(0\), виден на полоске.

Посчитайте количество пар последовательностей \(\{a_i\}_{i=1}^n\), \(\{b_i\}_{i=1}^n\), которые дадут заданную полоску.

Так как это число может быть очень большим, выведите его по модулю \(998244353\).

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

Первая строка содержит два целых числа \(n\), \(m\) (\(1 \leq n \leq 500\), \(n = m\)) — количество цветов, исключая цвет \(0\), и длина полоски, соответственно.

Вторая строка содержит \(m\) целых чисел \(c_1, c_2, \ldots, c_m\) (\(1 \leq c_i \leq n\)) — цвет, который видно на отрезке \([i-1, i]\) после того, как раскраска закончилась. Гарантируется, что для каждого \(j\) от \(1\) до \(n\) есть индекс \(k\) такой, что \(c_k = j\).

Обратите внимание, что так как, в этой подзадаче \(n = m\), то \(c\) — это перестановка целых чисел от \(1\) до \(n\).

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

Выведите одно целое число — количество способов получить такую полоску по модулю \(998244353\).

Примечание

В первом примере всего есть \(5\) способов, все они показаны на рисунке ниже. Здесь \(0\) — белый цвет, \(1\) — красный, \(2\) — зеленый, а \(3\) — синий.

Ниже показан пример неправильной раскраски. Во второй операции отрезок 1 3 не покрашен ни в один цвет, поэтому он не может быть покрашен в цвет \(2\).

F2. Длинная разноцветная полоска

дп *2600

Это вторая подзадача задачи F. Единственные различия между этой и второй подзадачами — это ограничения на значение \(m\) и ограничение по времени. Достаточно решить эту подзадачу, чтобы взламывать ее, но вам нужно решить обе подзадачи, чтобы взломать первую.

Во вселенной всего есть \(n+1\) разных цветов, пронумерованных от \(0\) до \(n\). Есть полоска, длина которой \(m\) сантиметров, изначально покрашенная в цвет \(0\).

Алиса взяла кисть и начала разукрашивать полоску. Для каждого \(i\) от \(1\) до \(n\) в таком порядке она выбирает два числа \(0 \leq a_i < b_i \leq m\) такие, что отрезок \([a_i, b_i]\) сейчас покрашен одним цветом, и красит его в цвет \(i\).

Алиса выбрала такие отрезки, что сейчас каждый сантиметр имеет отличный от \(0\) цвет. Формально, отрезок \([i-1, i]\) покрашен в цвет \(c_i\) (\(c_i \neq 0\)). Каждый цвет, кроме \(0\), виден на полоске.

Посчитайте количество пар последовательностей \(\{a_i\}_{i=1}^n\), \(\{b_i\}_{i=1}^n\), которые дадут заданную полоску.

Так как это число может быть очень большим, выведите его по модулю \(998244353\).

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

Первая строка содержит два целых числа \(n\), \(m\) (\(1 \leq n \leq 500\), \(n \leq m \leq 10^6\)) — количество цветов, исключая цвет \(0\), и длина полоски, соответственно.

Вторая строка содержит \(m\) целых чисел \(c_1, c_2, \ldots, c_m\) (\(1 \leq c_i \leq n\)) — цвет, который видно на отрезке \([i-1, i]\) после того, как раскраска закончилась. Гарантируется, что для каждого \(j\) от \(1\) до \(n\) есть индекс \(k\) такой, что \(c_k = j\).

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

Выведите одно целое число — количество способов получить такую полоску по модулю \(998244353\).

Примечание

В первом примере всего есть \(5\) способов, все они показаны на рисунке ниже. Здесь \(0\) — белый цвет, \(1\) — красный, \(2\) — зеленый, а \(3\) — синий.

Ниже показан пример неправильной раскраски. Во второй операции отрезок 1 3 не покрашен ни в один цвет, поэтому он не может быть покрашен в цвет \(2\).

Во втором примере, Алиса должна сначала покрасить отрезок 0 3 цветом \(1\) и после этого отрезок 1 2 цветом \(2\).

D. Фёдор идет в президенты

Деревья дп Структуры данных *2700

Фёдор выдвигается в президенты Байтландии! На дебатах (да-да!) его, конечно же, спросят, как он собирается решать транспортную проблему Байтландии? Дело действительно непростое, так как транспортная система Байтландии сейчас представляет собой дерево (связный граф без циклов). В министерстве транспорта Байтландии команда Федора выяснила, что средств в казне хватит на постройку всего одной дополнительной дороги. На дебатах Фёдор собирается сказать, что построит эту дорогу так, чтобы в стране было как можно больше различных простых путей. Простой путь — это путь, который проходит через каждую вершину не более одного раза. (два простых пути называются различными, если различается множество ребер, в них входящих).

Однако наука Байтландии в упадке, и команде Фёдора не удалось найти ученых, которые быстро выяснят, а какого же максимальноого количества простых путей можно достичь добавлением в транспортную систему одного ребра? Поэтому он обратился к вам. Ответьте на этот вопрос.

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

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

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

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 500\ 000\)) — количество вершин.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(v_i\) и \(u_i\) (\(1 \leq v_i, u_i \leq n\)). Гарантируется что граф — дерево.

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

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

D. Легионы Цезаря

дп *1700

Знаменитый полководец Гай Юлий Цезарь любил выстраивать воинов своей армии в шеренгу. Всего в армии было n1 пехотинцев и n2 всадников. Цезарь считал, что расстановка не красивая, если где-то в строю стоит подряд строго больше k1 пехотинцев или строго больше k2 всадников. Найдите количество красивых расстановок воинов.

Учтите, что в каждой расстановке должны присутствовать все n1 + n2 воинов. Все пехотинцы считаются неразличимыми между собой. Аналогично, все всадники считаются неразличимыми между собой.

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

В единственной строке через пробел записаны четыре целых числа n1, n2, k1, k2 (1 ≤ n1, n2 ≤ 100, 1 ≤ k1, k2 ≤ 10) — количество пехотинцев и всадников в армии, а также наибольшее допустимое количество стоящих подряд пехотинцев и всадников, соответственно.

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

Выведите количество красивых расстановок войск по модулю 100000000 (108), то есть количество таких расстановок, где подряд стоит не более k1 пехотинцев и не более k2 всадников.

Примечание

Обозначим пехотинца как 1, а всадника как 2.

В первом примере единственное красивое построение: 121

Во втором примере существует 5 красивых построений: 12122, 12212, 21212, 21221, 22121

A. Саня и ромб

дп математика реализация *800

Играясь с геометрическими фигурами, Саня случайно ввел понятие ромба \(n\)-го порядка на клеточной сетке.

Ромб \(1\)-го порядка — это квадратик \(1 \times 1\) (т.е просто одна клетка).

Ромб \(n\)-го порядка для \(n \geq 2\) получается из ромба \(n-1\)-го порядка путём добавления к нему всех клеток, соседних с ним по стороне (для лучшего понимания смотрите картинку).

Саня просит вас посчитать количество клеток в ромбе \(n\)-го порядка.

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

Первая и единственная строка ввода содержит число \(n\) (\(1 \leq n \leq 100\)) — порядок ромба, для которого нужно посчитать количество клеток в нем.

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

Выведите одно число — количество клеток в ромбе \(n\)-го порядка.

Примечание

Изображения ромбов соответствующих примерам приведены в условии.

C. Флаг

дп Комбинаторика Перебор реализация *1900

Иннокентий работает на блошином рынке, продавая посетителям всякий хлам необычные вещи. Недавно он нашёл у себя на складе старое прямоугольное покрывало. Как оказалось, это покрывало имеет сетчатую форму, то есть покрывало состоит из \(n \cdot m\) цветных лоскутков, разбитых на \(n\) строк и \(m\) столбцов.

Цветные лоскутки привлекли внимание Иннокентия, и он сразу же придумал, как можно заработать на своей находке. Если вырезать из покрывала подпрямоугольник, состоящий из трёх цветных полос, то потом этот подпрямоугольник можно будет продать как флаг какой-нибудь страны. В частности, Иннокентий считает, что подпрямоугольник будет достаточно похож на флаг какой-нибудь страны, если он будет состоять из трёх одноцветных полос одинаковой высоты, находящихся друг под другом. Разумеется, цвет верхней полосы не должен совпадать с цветом средней полосы, а цвет средней не должен совпадать с цветом нижней.

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

  

Примеры подпрямоугольников, являющихся флагами

     

Примеры подпрямоугольников, не являющихся флагами

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 1\,000\)) — количество строк и столбцов в покрывале.

Каждая из следующих \(n\) строк описывает очередную строку покрывала и состоит из \(m\) строчных латинских букв от «a» до «z», где одинаковым цветам соответствуют одинаковые буквы, а разным цветам — разные буквы.

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

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

Примечание
 

Пояснение к примеру. Выделены подпрямоугольники, являющиеся флагами

A. Заполнение формами

дп математика *1000

Вам дано целое число \(n\). Найдите количество способов заполнить все \(3 \times n\) плитки формой, описанной на рисунке ниже. Нельзя, чтобы после заполнения были пустые плитки. Формы не могут перекрываться.

Эта картина описывает ситуацию, когда \(n = 4\). Слева — форма, а справа — \(3 \times n\) плиток.
Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 60\)) — длину.

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

Выведите количество способов.

Примечание

В первом примере есть всего \(4\) возможных способов заполнения.

Во втором примере вы не можете заполнить \(3 \times 1\) плиток.

D. Полное зеркало

Деревья дп Конструктив поиск в глубину и подобное реализация хэши *2400

Дерево состоит из \(n\) вершин. Выберите одну вершину как корень. Он должен удовлетворять условию ниже.

  • Для каждой пары вершин \(v_{1}\) и \(v_{2}\), если \(distance\)(\(root\), \(v_{1}\)) \(= distance\)(\(root\), \(v_{2})\), тогда \(degree\)(\(v_{1}\)) \(= degree\)(\(v_{2}\)), где \(degree\) — количество смежных вершин, а \(distance\) — количество ребер между двумя вершинами.

Определите и найдите, есть ли такой корень в дереве. Если есть несколько ответов, выведите любой из них.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^{5}\)) — количество верши.

Каждая из следующих \(n-1\) строк содержит два целых числа \(v_{i}\) и \(u_{i}\) (\(1 \le v_{i} \lt u_{i} \le n\)), которые значат, что существует ребра между вершинами \(v_{i}\) и \(u_{i}\). Гарантируется, что граф — дерево.

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

Если такой корень существует, выведите любой из них. Иначе выведите \(-1\).

Примечание

Рисунок до первого примера. \(1\), \(5\), \(7\) — также могут быть корнями.

Рисунок до второго примера. Невозможно найти корень графа.

E. Рекуррентность произведений

дп математика матрицы теория чисел *2300

Пусть \(f_{x} = c^{2x-6} \cdot f_{x-1} \cdot f_{x-2} \cdot f_{x-3}\) для \(x \ge 4\).

Вам даны \(n\), \(f_{1}\), \(f_{2}\), \(f_{3}\) и \(c\). Найдите \(f_{n} \bmod (10^{9}+7)\).

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

Первая строка содержит пять целых чисел \(n\), \(f_{1}\), \(f_{2}\), \(f_{3}\) и \(c\) (\(4 \le n \le 10^{18}\), \(1 \le f_{1}\), \(f_{2}\), \(f_{3}\), \(c \le 10^{9}\)).

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

Выведите \(f_{n} \bmod (10^{9} + 7)\).

Примечание

В первом примере \(f_{4} = 90\), \(f_{5} = 72900\).

Во втором примере \(f_{17} \approx 2.28 \times 10^{29587}\).

E. Подпоследовательности (легкая версия)

графы дп кратчайшие пути реализация *2000

Единственное отличие между легкой и сложной версиями — ограничения.

Подпоследовательность строки может быть получена из другой строки при помощи удаления некоторого (возможно, нулевого) количества символов без изменения порядка оставшихся символов. Удаляемые символы не обязательно должны идти друг за другом, между ними могут быть любые пропуски. Например, для строки «abaca» следующие строки являются ее подпоследовательностями: «abaca», «aba», «aaa», «a» и «» (пустая строка). А следующие строки не являются подпоследовательностями: «aabaca», «cb» и «bcaa».

Вам задана строка \(s\), состоящая из \(n\) строчных букв латинского алфавита.

За один ход вы можете выбрать любую подпоследовательность \(t\) заданной строки и добавить ее во множество \(S\). Множество \(S\) не может содержать одинаковых элементов. Этот ход стоит \(n - |t|\), где \(|t|\) равно длине добавляемой подпоследовательности (то есть цена равна количеству удаленных символов).

Ваша задача — найти минимальную возможную суммарную стоимость получения множества \(S\) размера \(k\) или сообщить, что это сделать невозможно.

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

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 100\)) — длину строки и размер множества соответственно.

Вторая строка входных данных содержит строку \(s\), состоящую из \(n\) строчных букв латинского алфавита.

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

Выведите одно целое число — если невозможно составить множество \(S\) размера \(k\), выведите -1. Иначе выведите минимально возможную суммарную стоимость составления такого множества.

Примечание

В первом тестовом примере мы можем составить \(S\) = { «asdf», «asd», «adf», «asf», «sdf» }. Стоимость первого элемента в \(S\) равна \(0\), а стоимости остальных равны \(1\). Таким образом, суммарная стоимость \(S\) равна \(4\).

H. Подпоследовательности (усложненная версия)

дп Строки *1900

Единственное отличие между легкой и сложной версиями — ограничения.

Подпоследовательность строки может быть получена из другой строки при помощи удаления некоторого (возможно, нулевого) количества символов без изменения порядка оставшихся символов. Удаляемые символы не обязательно должны идти друг за другом, между ними могут быть любые пропуски. Например, для строки «abaca» следующие строки являются ее подпоследовательностями: «abaca», «aba», «aaa», «a» и «» (пустая строка). А следующие строки не являются подпоследовательностями: «aabaca», «cb» и «bcaa».

Вам задана строка \(s\), состоящая из \(n\) строчных букв латинского алфавита.

За один ход вы можете выбрать любую подпоследовательность \(t\) заданной строки и добавить ее во множество \(S\). Множество \(S\) не может содержать одинаковых элементов. Этот ход стоит \(n - |t|\), где \(|t|\) равно длине добавляемой подпоследовательности (то есть цена равна количеству удаленных символов).

Ваша задача — найти минимальную возможную суммарную стоимость получения множества \(S\) размера \(k\) или сообщить, что это сделать невозможно.

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

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100, 1 \le k \le 10^{12}\)) — длину строки и размер множества соответственно.

Вторая строка входных данных содержит строку \(s\), состоящую из \(n\) строчных букв латинского алфавита.

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

Выведите одно целое число — если невозможно составить множество \(S\) размера \(k\), выведите -1. Иначе выведите минимально возможную суммарную стоимость составления такого множества.

Примечание

В первом тестовом примере мы можем составить \(S\) = { «asdf», «asd», «adf», «asf», «sdf» }. Стоимость первого элемента в \(S\) равна \(0\), а стоимости остальных равны \(1\). Таким образом, суммарная стоимость \(S\) равна \(4\).

G1. Плейлист для Поликарпа (упрощённая версия)

битмаски дп Комбинаторика *2100

Единственное отличие этой версии от усложнённой — это ограничения.

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

В плеере у Поликарпа хранится \(n\) песен, причем каждая из них характеризуется двумя параметрами: \(t_i\) и \(g_i\), где \(t_i\) — длительность песни в минутах (\(1 \le t_i \le 15\)), \(g_i\) — её жанр (\(1 \le g_i \le 3\)).

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

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

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

В первой строке входных данных записаны два целых числа \(n\) и \(T\) (\(1 \le n \le 15, 1 \le T \le 225\)) — количество песен в плеере и требуемая суммарная длительность, соответственно.

Далее в \(n\) строках записаны описания песен: \(i\)-я строка содержит два целых числа \(t_i\) и \(g_i\) (\(1 \le t_i \le 15, 1 \le g_i \le 3\)) — длительность \(i\)-й песни и её жанр, соответственно.

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

Выведите одно целое число — количество различных последовательностей песен, суммарной длительностью ровно \(T\), таких, что в них нет двух подряд идущих песен одинакового жанра и все песни в плейлисте различны. Так как ответ может быть большим, выводите его по модулю \(10^9 + 7\) (то есть остаток при делении количества на число \(10^9 + 7\)).

Примечание

В первом примере Поликарп может составить любой из \(6\)-ти вариантов плейлист перестановкой имеющихся песен: \([1, 2, 3]\), \([1, 3, 2]\), \([2, 1, 3]\), \([2, 3, 1]\), \([3, 1, 2]\) и \([3, 2, 1]\) (указаны номера песен).

Во втором примере первая и вторая песни не могут идти подряд (так как имеют одинаковый жанр). Таким образом, Поликарп может составить плейлист одним из \(2\)-х возможных способов: \([1, 3, 2]\) и \([2, 3, 1]\) (указаны номера песен).

В третьем примере Поликарп может составить следующие плейлисты: \([1, 2, 3]\), \([1, 3, 2]\), \([2, 1, 3]\), \([2, 3, 1]\), \([3, 1, 2]\), \([3, 2, 1]\), \([1, 4]\), \([4, 1]\), \([2, 3, 4]\) и \([4, 3, 2]\) (указаны номера песен).

G2. Плейлист для Поликарпа (усложнённая версия)

дп Комбинаторика *2600

Единственное отличие этой версии от упрощённой — это ограничения.

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

В плеере у Поликарпа хранится \(n\) песен, причем каждая из них характеризуется двумя параметрами: \(t_i\) и \(g_i\), где \(t_i\) — длительность песни в минутах (\(1 \le t_i \le 50\)), \(g_i\) — её жанр (\(1 \le g_i \le 3\)).

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

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

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

В первой строке входных данных записаны два целых числа \(n\) и \(T\) (\(1 \le n \le 50, 1 \le T \le 2500\)) — количество песен в плеере и требуемая суммарная длительность, соответственно.

Далее в \(n\) строках записаны описания песен: \(i\)-я строка содержит два целых числа \(t_i\) и \(g_i\) (\(1 \le t_i \le 50, 1 \le g_i \le 3\)) — длительность \(i\)-й песни и её жанр, соответственно.

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

Выведите одно целое число — количество различных последовательностей песен, суммарной длительностью ровно \(T\), таких, что в них нет двух подряд идущих песен одинакового жанра и все песни в плейлисте различны. Так как ответ может быть большим, выводите его по модулю \(10^9 + 7\) (то есть остаток при делении количества на число \(10^9 + 7\)).

Примечание

В первом примере Поликарп может составить любой из \(6\)-ти вариантов плейлист перестановкой имеющихся песен: \([1, 2, 3]\), \([1, 3, 2]\), \([2, 1, 3]\), \([2, 3, 1]\), \([3, 1, 2]\) и \([3, 2, 1]\) (указаны номера песен).

Во втором примере первая и вторая песни не могут идти подряд (так как имеют одинаковый жанр). Таким образом, Поликарп может составить плейлист одним из \(2\)-х возможных способов: \([1, 3, 2]\) и \([2, 3, 1]\) (указаны номера песен).

В третьем примере Поликарп может составить следующие плейлисты: \([1, 2, 3]\), \([1, 3, 2]\), \([2, 1, 3]\), \([2, 3, 1]\), \([3, 1, 2]\), \([3, 2, 1]\), \([1, 4]\), \([4, 1]\), \([2, 3, 4]\) и \([4, 3, 2]\) (указаны номера песен).

E. Покраска дерева

Деревья дп поиск в глубину и подобное *2100

Вам задано дерево (неориентированный связный ацикличный граф), состоящее из \(n\) вершин. Вы играете в игру на этом дереве.

Изначально все вершины белые. На первом ходу игры Вы выбираете одну вершину и красите ее в черный. Затем на каждом ходу Вы выбираете белую вершину, смежную (соединенную ребром) с любой черной вершиной и красите ее в черный.

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

Рассмотрим следующий пример:

Вершины \(1\) и \(4\) уже покрашены в черный цвет. Если Вы выберете вершину \(2\), Вы получите \(4\) очка за компоненту связности, состоящую из вершин \(2, 3, 5\) и \(6\). Если Вы выберете вершину \(9\), Вы получите \(3\) очка за компоненту связности, состоящую из вершин \(7, 8\) и \(9\).

Ваша задача — максимизировать количество очков, которое Вы получите.

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

Первая строка содержит одно целое число \(n\) — количество вершин в дереве (\(2 \le n \le 2 \cdot 10^5\)).

Каждая из следующих \(n - 1\) строк описывает ребро дерева. Ребро \(i\) описывается двумя целыми числами \(u_i\) и \(v_i\), номерами вершин, которые оно соединяет (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)).

Гарантируется, что заданные ребра образуют дерево.

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

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

Примечание

Первый тестовый пример показан в условии задачи.

F. Ожидаемый квадрат красоты

дп математика Теория вероятностей *2500

Пусть \(x\) — массив целых чисел \(x = [x_1, x_2, \dots, x_n]\). Обозначим \(B(x)\) как наименьший размер разбиения \(x\) на подотрезки, такие что все элементы в каждом подотрезке равны. Например, \(B([3, 3, 6, 1, 6, 6, 6]) = 4\) благодаря такому разбиению: \([3, 3\ |\ 6\ |\ 1\ |\ 6, 6, 6]\).

У вас нет точного массива \(x\), но вы знаете, что \(x_i\) может принимать любое целое значение из отрезка \([l_i, r_i]\) (\(l_i \le r_i\)) случайно и равновероятно. Все \(x_i\) независимы.

Посчитайте ожидаемое значение (матожидание) значения \((B(x))^2\) или \(E((B(x))^2)\). Гарантируется, что матожидание может быть представлено как рациональная дробь \(\frac{P}{Q}\), где \((P, Q) = 1\), поэтому выведите значение \(P \cdot Q^{-1} \mod 10^9 + 7\).

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

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массива \(x\).

Вторая строка содержит \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(1 \le l_i \le 10^9\)).

Третья строка содержит \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(l_i \le r_i \le 10^9\)).

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

Выведите единственное число — значение \(E((B(x))^2)\) как \(P \cdot Q^{-1} \mod 10^9 + 7\).

Примечание

Опишем все возможные значения массива \(x\) из первого примера:

  • \([1, 1, 1]\): \(B(x) = 1\), \(B^2(x) = 1\);
  • \([1, 1, 2]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([1, 1, 3]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([1, 2, 1]\): \(B(x) = 3\), \(B^2(x) = 9\);
  • \([1, 2, 2]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([1, 2, 3]\): \(B(x) = 3\), \(B^2(x) = 9\);
В результате \(E = \frac{1}{6} (1 + 4 + 4 + 9 + 4 + 9) = \frac{31}{6}\) или \(31 \cdot 6^{-1} = 166666673\).

Все возможные значения \(x\) из второго примера:

  • \([3, 4, 5]\): \(B(x) = 3\), \(B^2(x) = 9\);
  • \([3, 4, 6]\): \(B(x) = 3\), \(B^2(x) = 9\);
  • \([3, 5, 5]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([3, 5, 6]\): \(B(x) = 3\), \(B^2(x) = 9\);
  • \([4, 4, 5]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([4, 4, 6]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([4, 5, 5]\): \(B(x) = 2\), \(B^2(x) = 4\);
  • \([4, 5, 6]\): \(B(x) = 3\), \(B^2(x) = 9\);
В результате \(E = \frac{1}{8} (9 + 9 + 4 + 9 + 4 + 4 + 4 + 9) = \frac{52}{8}\) или \(13 \cdot 2^{-1} = 500000010\).

C. Красота массива

дп *2500

Назовем красотой массива \(b_1, b_2, \ldots, b_n\) (\(n > 1\))  — \(\min\limits_{1 \leq i < j \leq n} |b_i - b_j|\). Рассмотрим некоторый массив \(a_1, a_2, \ldots a_n\) и число \(k\). Требуется подсчитать сумму красот всех подпоследовательностей данного массива длины ровно \(k\). Так как ответ может получиться достаточно большим, то выведите его по модулю \(998244353\).

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

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

Первая строка содержит два целых числа \(n, k\) (\(2 \le k \le n \le 1000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^5\)).

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

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

Примечание

В первом примере существует \(4\) подпоследовательности длины \(3\) — \([1, 7, 3]\), \([1, 3, 5]\), \([7, 3, 5]\), \([1, 7, 5]\), каждая из которых имеет красоту \(2\), поэтому ответ \(8\).

Во втором примере, есть только одна подпоследовательность длины \(5\) — весь массив, красота которого равна \(|10-1| = 9\).

D. Сделайте равными

дп *3100

Даны \(n\) чисел \(a_1, a_2, \dots, a_n\). За одну операцию мы можем прибавить к любому из этих чисел неотрицательную целую степень \(2\).

Какое наименьшее число операций нужно сделать, чтобы сделать все \(n\) чисел равными? Можно доказать, что при данных ограничениях это число не превосходит \(10^{18}\).

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^{17}\)).

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

Выведите ровно одно число — наименьшее число операций, которое нужно сделать, чтобы сделать все \(n\) чисел равными.

Примечание

В первом примере, все числа уже равны. Поэтому нужное число операций равно \(0\).

Во втором примере, мы можем применить операцию \(3\) раза: прибавить \(8\) к первой \(2\), прибавить \(8\) к второй \(2\), прибавить \(2\) к \(8\), сделав все числа равными \(10\). Можно доказать, что нельзя сделать все числа равными за менее чем \(3\) операции.

C. Конфеты!

дп математика реализация Структуры данных *1400

Рассмотрим последовательность цифр длины \(2^k\) \([a_1, a_2, \ldots, a_{2^k}]\). Будем выполнять с ней следующую операцию: заменить пару \((a_{2i+1}, a_{2i+2})\) на \((a_{2i+1} + a_{2i+2})\bmod 10\) для \(0\le i<2^{k-1}\). За каждое \(i\) такое, что \(a_{2i+1} + a_{2i+2}\ge 10\), мы получаем конфету! В результате, мы получим последовательность цифр длины \(2^{k-1}\).

Менее формально, последовательность длины \(2^k\) мы разбиваем на \(2^{k-1}\) пар, каждая из которых состоит из двух чисел: первая пара состоит из первых двух чисел, вторая из третьего и четвертого, \(\ldots\), последняя пара состоит из (\(2^k-1\))-го и (\(2^k\))-го чисел. За каждую пару, сумма чисел в которой не менее \(10\), мы получаем конфету. После этого, мы заменяем каждую пару чисел на остаток от деления их суммы на \(10\) (при этом сохраняем порядок чисел).

Будем выполнять данную операцию с последовательностью, пока она не станет длины \(1\). Пусть \(f([a_1, a_2, \ldots, a_{2^k}])\) обозначает количество конфет, которые мы получим в процессе.

К примеру: если изначальной последовательностью была \([8, 7, 3, 1, 7, 0, 9, 4]\), то:

После первой операции последовательность станет \([(8 + 7)\bmod 10, (3 + 1)\bmod 10, (7 + 0)\bmod 10, (9 + 4)\bmod 10]\) \(=\) \([5, 4, 7, 3]\), и мы получим \(2\) конфеты так как \(8 + 7 \ge 10\) и \(9 + 4 \ge 10\).

После второй операции последовательность станет \([(5 + 4)\bmod 10, (7 + 3)\bmod 10]\) \(=\) \([9, 0]\), и мы получим еще одну конфету так как \(7 + 3 \ge 10\).

После последней операции последовательность станет \([(9 + 0) \bmod 10]\) \(=\) \([9]\).

Следовательно, \(f([8, 7, 3, 1, 7, 0, 9, 4]) = 3\), так как мы получили всего \(3\) конфеты.

Вам дана последовательность цифр длины \(n\) \(s_1, s_2, \ldots s_n\). Вы должны ответить на \(q\) запросов вида \((l_i, r_i)\), где для \(i\)-го запроса вы должны вывести \(f([s_{l_i}, s_{l_i+1}, \ldots, s_{r_i}])\). Гарантируется, что \(r_i-l_i+1\) имеет вид \(2^k\) для некоторого неотрицательного целого \(k\).

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину последовательности.

Вторая строка содержит \(n\) цифр \(s_1, s_2, \ldots, s_n\) (\(0 \le s_i \le 9\)).

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(l_i\), \(r_i\) (\(1 \le l_i \le r_i \le n\)) — \(i\)-й запрос. Гарантируется, что \(r_i-l_i+1\) является неотрицательной целой степенью \(2\).

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

Выведите \(q\) строк, в \(i\)-й строке выведите единственное число — \(f([s_{l_i}, s_{l_i + 1}, \ldots, s_{r_i}])\), ответ на \(i\)-й запрос.

Примечание

Первый пример иллюстрирует пример из условия

\(f([7, 3, 1, 7]) = 1\): последовательность операций такая — \([7, 3, 1, 7] \to [(7 + 3)\bmod 10, (1 + 7)\bmod 10]\) \(=\) \([0, 8]\) и одна конфета так как \(7 + 3 \ge 10\) \(\to\) \([(0 + 8) \bmod 10]\) \(=\) \([8]\), поэтому мы получаем всего \(1\) конфету.

\(f([9]) = 0\), так как мы не выполняем с ним операции.

C. Реформа образования

дп *2000

Недавно в Берляндии была проведена очередная образовательная реформа. Суть ее состоит в следующем.

Теперь учебный год состоит из n дней. Каждый день ученики занимаются ровно одним из m предметов, причем каждому предмету отводится не более одного дня. После завершения занятий по i-ому предмету школьники получают домашнее задание, содержащее не менее ai и не более bi упражнений. Кроме того, для каждого предмета определяется специальная характеристика — сложность (ci). Школа имеет право самостоятельно составлять расписание занятий, однако при этом должны быть выполнены следующие условия:

  • предметы в расписании должны располагаться в порядке строгого возрастания сложности;
  • каждый день, за исключением первого, задание должно содержать либо в k раз больше, либо на k больше упражнений, чем в предыдущий (более формально: пусть xi — количество упражнений в домашнем задании в i-ый день, тогда для каждого i (1 < i ≤ n) должно выполняться либо xi = k + xi - 1, либо xi = k·xi - 1);
  • суммарное число упражнений во всех заданиях должно быть максимально возможным.

Все ограничения устанавливаются для каждой школы отдельно.

Оказалось, что ai и bi во многих случаях достигают 1016 (однако, поскольку министр образования Берляндии славится своей любовью к полумерам, величина bi - ai не превосходит 100). Случилось так и в Берляндской школе №256. Тем не менее, Вам — как директору этой школы — все равно придется составить расписание для следующего учебного года...

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

В первой строке записаны три целых числа n, m, k (1 ≤ n ≤ m ≤ 50, 1 ≤ k ≤ 100) — количество дней в учебном году, количество предметов и параметр k соответственно. В каждой из следующих m строк содержится описание одного предмета: три целых числа ai, bi, ci (1 ≤ ai ≤ bi ≤ 1016, bi - ai ≤ 100, 1 ≤ ci ≤ 100) — два ограничения на количество упражнений по i-ому предмету и сложность i-ого предмета соответственно. Различные предметы могут иметь одинаковую сложность. Предметы пронумерованы целыми числами от 1 до m.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать поток cin или спецификатор %I64d.

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

Если не существует ни одного корректного расписания, выведите единственное слово «NO» (без кавычек). В противном случае первая строка должна содержать слово «YES» (без кавычек), а следующие n строк — любое расписание, удовлетворяющее всем требованиям. В i + 1-ой строке следует вывести два натуральных числа: номер предмета, которым необходимо заниматься в i-ый день, и количество упражнений в домашнем задании по этому предмету. В расписании должно быть ровно n предметов.

C. Кубворд

*особая задача meet-in-the-middle дп Перебор

Кубворд — особый вид кроссворда. Для построения кубворда сначала выбирается положительное целое число \(a\) — длина стороны куба. Затем строится большой куб, состоящий из \(a \times a \times a\) единичных кубиков. У большого куба 12 ребер. После этого выкидываются все единичные кубики, которые не касаются ребер большого куба. Рисунок ниже показывает, что получится при \(a=6\).

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

Рисунок ниже показывает фигуру при \(a=6\), где в некоторые единичные кубики уже записаны буквы. Уже можно прочитать слова «SUBMIT», «ACCEPT» и «TURING» вдоль трех ребер большого куба.

Вам дан список осмысленных слов. Каждое слово из этого списка может сколько угодно раз читаться на ребрах кубворда. Найдите число различных кубвордов, которые можно составить из этих слов, по модулю \(998,244,353\).

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

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 100,000\)) – количество слов.

Далее следуют \(n\) строк. Каждая из этих строк содержит одно слово, которое может присутствовать на ребрах большого куба. Длина каждого слова находится в пределах от 3 до 10 включительно.

Гарантируется, что все слова различны.

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

Выведите одно целое число — количество различных кубвордов из данных слов по модулю \(998,244,353\).

Система оценки

Подзадача 1 (21 балл): слова содержат только буквы «a» - «f» (строчные)

Подзадача 2 (29 баллов): слова содержат только буквы «a» - «p» (строчные)

Подзадача 3 (34 балла): слова содержат только буквы «a» - «p» (строчные) и «A» - «P» (заглавные)

Подзадача 4 (16 баллов): слова содержат только буквы «a» - «z» (строчные), «A» - «Z» (заглавные) и цифры «0» - «9»

Примечание

В первом примере единственная возможность составить кубворд — написать слово «radar» на всех ребрах.

Во втором примере есть два различных кубворда, которые получаются друг из друга поворотом: слово «robot» на всех ребрах, и разница лишь в том, содержит ли левый нижний передний угол букву «r» или «t».

Третий пример похож на второй. То, что мы можем читать слова в обоих направлениях, не изменяет ответ.

В четвертом примере есть один кубворд со словом «bob» на каждом ребре. Кроме того, есть \(2^{12} = 4096\) кубов со словом «baobab» на каждом ребре: для каждого из 12 ребер есть два возможных направления, в которых можно написать слово «baobab».

A. Парк аттракционов

*особая задача дп математика

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

Владелец парка передал вам текущий проект: список планируемых к постройке аттракционов и список спусков, которые должны быть построены. Так как он предприниматель, то он, как обычно, вообразил невозможное: кроме всего прочего, он запланировал спуск от замка с привидениями к американским горкам, спуск от американских горок к башни свободного падения, а также спуск от башни свободного падения к замку с привидениями. Так как спуски могут вести только вниз, очевидно, что это невозможно. У вас нет привилегий игнорировать законы физики при постройке парка, поэтому в проект нужно внести изменения. Может, владелец примет изменение направления спуска между башней и замком?

Формально:

  • Проектом называется список аттракционов и список направленных спусков. Каждый спуск начинается около одного аттракциона и заканчивается у другого.
  • Предложение получается из проекта изменением направлений некоторых спусков (возможно, ни одного или всех).
  • Предложение корректно, если существует способ выбрать высоты расположений всех аттракционов так, чтобы все спуски вели вниз.
  • Стоимостью предложения называется количество спусков, направление которых нужно изменить.

Для данного проекта найдите сумму стоимостей всех корректных предложений по модулю \(998,244,353\).

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

Первая строка содержит два целых числа \(n\), \(m\) (\(1 \leq n \leq 18\), \(0 \leq m \leq n(n-1)/2\)) — количество аттракционов и количество спусков, соответственно. Аттракционы пронумерованы от \(1\) до \(n\).

Далее следуют \(m\) строк. \(i\)-я из этих строк содержит два целых числа \(a_i\), \(b_i\) (\(1 \leq a_i, b_i \leq n\)), обозначающие спуск от \(a_i\) к \(b_i\).

Можете рассчитывать, что:

  • Нет петель, то есть для всех \(i\) выполняется \(a_i \neq b_i\).
  • Никакой спуск не встречается дважды, то есть для всех \(i \neq j\) выполняется \(a_i \neq a_j\) или \(b_i \neq b_j\).)
  • Никакая пара аттракционов не соединена в обоих направлениях, то есть неупорядоченные пары \(\{a_i, b_i\}\) различны.
Выходные данные

Выведите одно целое число — сумму стоимостей всех корректных предложений по модулю \(998,244,353\).

Система оценки

Подзадача 1 (7 баллов): \(n \leq 3\)

Подзадача 2 (12 баллов): \(n \leq 6\)

Подзадача 3 (23 балла): \(n \leq 10\)

Подзадача 4 (21 балл): \(n \leq 15\)

Подзадача 5 (37 баллов): нет дополнительных ограничений

Примечание

В первом примере есть два предложения:

  • Направление спуска не изменено. Стоимость \(0\).
  • Направление спуска изменено. Стоимость \(1\).
Так как оба предложения корректны, то ответ равен \(0 + 1 = 1\).

Во втором примере есть восемь предложений, где спуски направлены так:

  • \(1 \rightarrow 2\), \(2 \rightarrow 3\), \(1 \rightarrow 3\) (стоимость \(0\))
  • \(1 \rightarrow 2\), \(2 \rightarrow 3\), \(3 \rightarrow 1\) (стоимость \(1\))
  • \(1 \rightarrow 2\), \(3 \rightarrow 2\), \(1 \rightarrow 3\) (стоимость \(1\))
  • \(1 \rightarrow 2\), \(3 \rightarrow 2\), \(3 \rightarrow 1\) (стоимость \(2\))
  • \(2 \rightarrow 1\), \(2 \rightarrow 3\), \(1 \rightarrow 3\) (стоимость \(1\))
  • \(2 \rightarrow 1\), \(2 \rightarrow 3\), \(3 \rightarrow 1\) (стоимость \(2\))
  • \(2 \rightarrow 1\), \(3 \rightarrow 2\), \(1 \rightarrow 3\) (стоимость \(2\))
  • \(2 \rightarrow 1\), \(3 \rightarrow 2\), \(3 \rightarrow 1\) (стоимость \(3\))

Второе предложение некорректно, так как есть последовательность спусков \(1 \rightarrow 2 \rightarrow 3 \rightarrow 1\). Это означает, что аттракцион \(1\) должен быть строго выше чем он сам, что, очевидно, невозможно. Аналогично, седьмое предложение тоже некорректно. Поэтому ответ равен \(0 + 1 + 2 + 1 + 2 + 3 = 9\).

B. Волшебное дерево

*особая задача Деревья дп Структуры данных

У нас есть волшебное дерево: корневое дерево с \(n\) вершинами. Вершины пронумерованы от \(1\) до \(n\). Вершина \(1\) является корнем.

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

Сейчас день 0 и ни один плод еще не поспел. Каждый плод будет спелым лишь в течение одного дня. Для каждого плода известна вершина \(v_j\), где он растет, день \(d_j\), когда он будет спелым, а также объем \(w_j\) волшебного сока, который мы можем получить, если соберем этот плод в тот день, когда он спелый.

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

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

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

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

Первая строка содержит три целых числа \(n\) (\(2 \le n \le 100,000\)), \(m\) (\(1 \le m \le n-1\)) и \(k\) (\(1 \le k \le 100,000\)) — количество вершин, количество плодов и максимальное количество дней, через которое плоды могут стать спелыми.

Следующие \(n-1\) строк содержат числа \(p_2, \dots, p_n\) по одному в строке. Для всех \(i\) (от \(2\) до \(n\) включительно) вершина \(p_i\) (\(1 \leq p_i \le i-1\)) является предком вершины \(i\).

Каждая из последних \(m\) строк описывает один плод. \(j\)-я из этих строк имеет вид «\(v_j\ d_j\ w_j\)» (\(2 \le v_j \le n\), \(1 \le d_j \le k\), \(1 \le w_j \le 10^9\)).

Гарантируется, что никакая вершина не содержит более, чем один плод (т. е. все значения \(v_j\) различны).

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

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

Система оценки

Подзадача 1 (6 баллов): \(n, k \leq 20\), а также \(w_j = 1\) для всех \(j\)

Подзадача 2 (3 балла): фрукты растут только в листьях дерева

Подзадача 3 (11 баллов): \(p_i = i-1\) для всех \(i\), а также \(w_j = 1\) для всех \(j\)

Подзадача 4 (12 баллов): \(k \leq 2\)

Подзадача 5 (16 баллов): \(k \leq 20\), а также \(w_j = 1\) для всех \(j\)

Подзадача 6 (13 баллов): \(m \leq 1,000\)

Подзадача 7 (22 балла): \(w_j = 1\) для всех \(j\)

Подзадача 8 (17 баллов): нет дополнительных ограничений

Примечание

В примере одно из оптимальных решений выглядит так:

  • В день 4 отрезать ребро между вершинами 4 и 5 и собрать спелый плод с 1 единицей волшебного сока. В тот же день отрезать ребро между вершинами 1 и 2 и собрать 5 единиц волшебного сока со спелого плода в вершине 3.
  • В день 7 ничего не делать. Мы могли бы собрать плод из вершины 4, но это не оптимально.
  • В день 9 отрезать ребро между вершинами 1 и 4. Плод в вершине 4 уже не спелый, так что его нужно выбросить, а собрать 3 единицы волшебного сока со спелого фрукта в вершине 6. Кроме того, того же эффекта мы бы добились, отрезав ребро между вершинами 4 и 6.

F. Эксперт по кроссвордам

дп Комбинаторика Теория вероятностей теория чисел *2400

Сегодня у Адилбека тест по теории вероятности. К сожалению, к моменту, когда Адилбек пришел в университет, уже сформировалась огромная очередь из других желающих сдать этот же тест. Адилбек оценил, что он сможет приступить к тесту только через \(T\) секунд.

К счастью, Адилбек может провести время ожидания более интересным образом, чем повторение скучных теорем и формул. У него на телефоне есть приложение с \(n\) японскими кроссвордами. Адилбек собрался решать их по одному, в том же порядке, в котором они перечислены в приложении, не пропуская ни одного кроссворда. Для каждого кроссворда известно время \(t_i\), за которое его в среднем может решить эксперт по кроссвордам (время также задано в секундах).

Адилбек — настоящий эксперт по японским кроссвордам, но, к сожалению, ему иногда не везет с выбором стратегии решения. Поэтому решение \(i\)-го кроссворда будет занимать у него либо \(t_i\) секунд, либо \(t_i + 1\) секунд равновероятно (с вероятностью \(\frac{1}{2}\) он решает кроссворд ровно за \(t_i\) секунд, а с вероятностью \(\frac{1}{2}\) он потратит дополнительную секунду на решение кроссворда). Все эти события независимы.

Ровно через \(T\) секунд (либо после решения последнего кроссворда, если он успевает их все решить меньше чем за \(T\) секунд) Адилбек закрывает приложение (если он заканчивает какой-то кроссворд в последний момент, то данный кроссворд считается решенным; иначе Адилбек бросает кроссворд не решенным до конца). Он считает, что будет очень интересно и по теме посчитать \(E\) — математическое ожидание количества кроссвордов, которые он успеет полностью решить. Можете ли вы посчитать данное матожидание?

Напомним, что матожидание дискретной случайной величины — это вероятностно-взвешенное среднее всех ее возможных значений. В данной задаче это означает, что матожидание количества решенных кроссвордов может быть посчитано как как \(E = \sum \limits_{i = 0}^{n} i p_i\), где \(p_i\) — вероятность того, что Адилбек решит ровно \(i\) кроссвордов.

Мы можем представить \(E\) как рациональную дробь \(\frac{P}{Q}\) с \(Q > 0\). В качестве ответа выведите \(P \cdot Q^{-1} \bmod (10^9 + 7)\).

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

В первой строке заданы два целых числа \(n\) и \(T\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le T \le 2 \cdot 10^{14}\)) — количество кроссвордов и время, которое есть у Адилбека.

Во второй строке заданы \(n\) целых чисел \(t_1, t_2, \dots, t_n\) (\(1 \le t_i \le 10^9\)), где \(t_i\) — это время, необходимое эксперту, чтобы решить \(i\)-й кроссворд.

Заметим, что Адилбек решает кроссворды в порядке, заданном во входных данных, не пропуская ни одного из них.

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

Выведите одно число — матожидание количества кроссвордов, решенных Адилбеком за \(T\) секунд, в форме \(P \cdot Q^{-1} \bmod (10^9 + 7)\).

Примечание

Ответ для первого примера равен \(\frac{14}{8}\).

Ответ для второго примера равен \(\frac{17}{8}\).

G. Очередная мемная задача

дп *2700

Назовем дробь \(\frac{x}{y}\) хорошей, если существует хотя бы одна дробь \(\frac{x'}{y'}\), удовлетворяющая следующим условиям: \(\frac{x}{y} = \frac{x'}{y'}\), \(1 \le x', y' \le 9\), цифра, обозначающая \(x'\), встречается хотя бы один раз в десятичной записи \(x\), и цифра, обозначающая \(y'\), встречается хотя бы один раз в десятичной записи \(y\). Например, \(\frac{26}{13}\) — хорошая дробь, так как \(\frac{26}{13} = \frac{2}{1}\).

Вам дано целое число \(n\). Посчитайте количество хороших дробей \(\frac{x}{y}\), для которых \(1 \le x \le n\) и \(1 \le y \le n\). Ответ может быть очень большим, поэтому выведите его по модулю \(998244353\).

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

В единственной строке входных данных записано одно целое число \(n\) (\(1 \le n < 10^{100}\)).

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

Выведите количество хороших дробей \(\frac{x}{y}\), для которых \(1 \le x \le n\) и \(1 \le y \le n\). Ответ может быть очень большим, поэтому выведите его по модулю \(998244353\).

C. Баскетбольная зарядка

дп *1400

В ЛКШ наконец-то появилось поле для игры в баскетбол, и на радостях Демид решил провести баскетбольную зарядку. На зарядку к Демиду пришло \(2 \cdot n\) человек, и он построил их в два ряда по \(n\) человек в каждом. В каждом из рядов он пронумеровал игроков от \(1\) до \(n\) слева направо.

Теперь Демид хочет выбрать команду для игры в баскетбол. Он будет выбирать игроков слева направо, и номер каждого следующего взятого игрока будет строго больше, чем предыдущего взятого. А для того, чтобы не отдавать предпочтения одному из рядов, каждый следующий выбранный школьник должен стоять не в том же ряду, что предыдущий. Первый выбранный школьник может быть любым из всех \(2n\), а количество игроков в команде не ограничено.

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

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

В первой строке дано число \(n\) (\(1 \le n \le 10^5\)) — количество школьников в каждом из рядов.

Вторая строка входных данных содержит \(n\) целых чисел \(h_{1, 1}, h_{1, 2}, \ldots, h_{1, n}\), разделенных пробелами (\(1 \le h_{1, i} \le 10^9\)), где \(h_{1, i}\) равно росту \(i\)-го человека в первом ряду.

Третья строка входных данных содержит \(n\) целых чисел \(h_{2, 1}, h_{2, 2}, \ldots, h_{2, n}\), разделенных пробелами (\(1 \le h_{2, i} \le 10^9\)), где \(h_{2, i}\) равно росту \(i\)-го человека во втором ряду.

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

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

Примечание

В первом примере Демид может выбрать такую команду:

Во втором примере Демид может выбрать такую команду:

D2. Подстрока RGB (сложная версия)

дп реализация Структуры данных *1600

Единственное отличие между простой и сложной версиями — размер входных данных.

Вам задана строка \(s\), состоящая из \(n\) символов, каждый символ равен 'R', 'G' или 'B'.

Вам также задано целое число \(k\). Ваша задача — изменить минимальное количество символов в изначальной строке \(s\) таким образом, что после этих изменений найдется строка длины \(k\) такая, что она является и подстрокой \(s\), и подстрокой бесконечной строки «RGBRGBRGB ...».

Строка \(a\) называется подстрокой \(b\), если существует положительное целое число \(i\), что \(a_1 = b_i\), \(a_2 = b_{i + 1}\), \(a_3 = b_{i + 2}\), ..., \(a_{|a|} = b_{i + |a| - 1}\). Например, строки «GBRG», «B», «BR» являются подстроками бесконечной строки «RGBRGBRGB ...»,а строки «GR», «RGR» и «GGG» — нет.

Вам необходимо ответить на \(q\) независимых запросов.

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов. Затем следуют \(q\) запросов.

Первая строка запроса содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — длину строки \(s\) и длину подстроки.

Вторая строка запроса содержит строку \(s\), состоящую из \(n\) символов 'R', 'G' и 'B'.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

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

На каждый запрос выведите одно число — минимальное количество символов, которое вам необходимо изменить в изначальной строке \(s\), чтобы после изменений нашлась такая подстрока длины \(k\) в \(s\), что она также является подстрокой бесконечной строки «RGBRGBRGB ...».

Примечание

В первом тестовом примере вы можете изменить первый символ на 'R' и получить подстроку «RG», или изменить второй символ на 'R' и получить подстроку «BR», или изменить третий, четвертый или пятый символ на 'B' и получить «GB».

Во втором тестовом примере подстрока равна «BRG».

D. Очередная задача на подотрезки

дп жадные алгоритмы математика *1900

Вам задан массив \(a_1, a_2, \dots , a_n\), а также два числа \(m\) и \(k\).

Вы можете выбрать любой подотрезок этого массива \(a_l, a_{l+1}, \dots, a_{r-1}, a_r\).

Цена такого подотрезка \(a_l, a_{l+1}, \dots, a_{r-1}, a_r\) равна \(\sum\limits_{i=l}^{r} a_i - k \lceil \frac{r - l + 1}{m} \rceil\), где \(\lceil x \rceil\) — это наименьшее целое число, больше либо равное чем \(x\).

Цена пустого подотрезка равна нулю.

Например, если \(m = 3\), \(k = 10\) и \(a = [2, -4, 15, -3, 4, 8, 3]\), то цены некоторых подотрезков равны:

  • \(a_3 \dots a_3: 15 - k \lceil \frac{1}{3} \rceil = 15 - 10 = 5\);
  • \(a_3 \dots a_4: (15 - 3) - k \lceil \frac{2}{3} \rceil = 12 - 10 = 2\);
  • \(a_3 \dots a_5: (15 - 3 + 4) - k \lceil \frac{3}{3} \rceil = 16 - 10 = 6\);
  • \(a_3 \dots a_6: (15 - 3 + 4 + 8) - k \lceil \frac{4}{3} \rceil = 24 - 20 = 4\);
  • \(a_3 \dots a_7: (15 - 3 + 4 + 8 + 3) - k \lceil \frac{5}{3} \rceil = 27 - 20 = 7\).

Вам нужно найти максимальную цену какого-то подотрезка (возможно, пустого) массива \(a\).

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

Первая строка содержит три числа \(n\), \(m\), и \(k\) (\(1 \le n \le 3 \cdot 10^5, 1 \le m \le 10, 1 \le k \le 10^9\)).

Вторая строка содержит \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

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

Выведите максимальную цену подотрезка массива \(a\).

E. Культурный код

Бинарный поиск дп Комбинаторика кратчайшие пути сортировки Структуры данных *2300

В магазине неподалеку продаются известные русские деревянные игрушки под названием «матрешки», и вы бы хотели приобрести несколько штук. В магазине продается \(n\) различных матрешек. Любая матрешка — это фигурка объема \(out_i\) с пустотой внутри объемом \(in_i\) (конечно, \(out_i > in_i\)).

У вас не так много свободного места в сумке, но, к счастью, вы знаете, что матрешки можно вкладывать друг в друга. Формально, назовем набор матрешек вкладываемым, если мы можем переупорядочить их таким образом, что первая матрешка вкладывается во вторую, вторая — в третью и так далее. Матрешка \(i\) вкладывается в матрешку \(j\), если \(out_i \le in_j\). Только последняя игрушка из вкладываемого набора будет занимать место в вашей сумке.

Назовем пустотой вкладываемого набора общий объем пустого места внутри данной структуры. Очевидно, что она равна \(in_{i_1} + (in_{i_2} - out_{i_1}) + (in_{i_3} - out_{i_2}) + \dots + (in_{i_k} - out_{i_{k-1}})\), где \(i_1\), \(i_2\), ..., \(i_k\) — индексы выбранных матрешек в порядке их вкладывания.

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

Вы хотели бы купить много матрешек, а потому выбираете достаточно большой вкладываемый поднабор. Но автора задачи сильно расстроит, если в вашей сумке будет потрачено зря слишком много места, поэтому вы выбираете достаточно большой вкладываемый поднабор, пустота которого минимально возможная среди всех достаточно больших поднаборов. И вот возник вопрос: как много различных поднаборов удовлетворяют всем требованиям (поднаборы достаточно большие, и нет другого достаточно большого поднабора с пустотой меньше заданного). Два поднабора считаются различными, если существует хотя бы один индекс \(i\) такой, что один поднабор содержит \(i\)-ю матрешку, а другой — нет.

Так как ответ может быть очень большим — выведите его по модулю \(10^9 + 7\).

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

В первой строке содержится одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество матрешек.

Следующие \(n\) строк содержат описание каждой матрешки: два целых числа \(out_i\) и \(in_i\) (\(1 \le in_i < out_i \le 10^9\)) — внешний и внутренний объемы \(i\)-й матрёшки.

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

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

Примечание

В первом примере есть ровно \(6\) достаточно больших вкладываемых поднаборов с минимальной пустотой:

  • \(\{1, 5\}\): мы не можем добавить в него другие матрешки, не нарушая вкладываемость; пустота поднабора равна \(1\);
  • \(\{1, 6\}\);
  • \(\{2, 4, 5\}\);
  • \(\{2, 4, 6\}\);
  • \(\{3, 4, 5\}\);
  • \(\{3, 4, 6\}\).

Других «хороших» поднаборов нет, потому что, например, поднабор \(\{6, 7\}\) не достаточно большой (в него можно добавить \(4\)-ю матрешку), а поднабор \(\{4, 6, 7\}\) имеет пустоту, равную \(2\).

F. Игра с раскрашиванием

дп игры матрицы *2700

Алиса и Боб собираются сыграть в игру. У них есть \(n\) раскрашенных полосок бумаги; \(i\)-я полоска поделена на \(a_i\) клеток, пронумерованных от \(1\) до \(a_i\). Каждая клетка может быть раскрашена в один из \(3\) цветов.

В самом начале игры Алиса и Боб ставят на полоски \(n\) фишек, \(i\)-я фишка ставится в клетку \(a_i\) полоски \(i\). Затем игроки совершают ходы по очереди, Алиса ходит первой. В процессе хода игрок должен выбрать ровно одну фишку и подвинуть ее на \(1\), \(2\) или \(3\) клетки к началу полоски (если текущая клетка имеет номер \(x\), то можно подвинуть фишку в клетку \(x - 1\), \(x - 2\) или \(x - 3\)). Есть два ограничения: фишка не может покидать пределы полоски (например, если фишка находится в ячейке \(3\), нельзя подвинуть ее на \(3\) ячейки); и некоторые ходы могут быть недоступны из-за цвета текущей клетки (эти запреты обозначаются матрицей \(f\) размера \(3 \times 3\), где \(f_{i, j} = 1\), если можно подвинуть фишку на \(j\) клеток к началу полоски из клетки с цветом \(i\), или \(f_{i, j} = 0\), если этот ход недоступен). Игрок, который не может сделать ход, проигрывает.

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

Боб хочет посчитать количество хороших раскрасок. Можете ли вы сделать это для него?

Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

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

В первой строке задано одно целое число \(n\) — количество полосок (\(1 \le n \le 1000\)).

Во второй строке заданы \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — количество клеток в \(i\)-й полоске.

В третьей строке задано одно целое число \(m\) (\(1 \le m \le 1000\)) — количество изначально окрашенных клеток.

Затем следуют \(m\) строк, каждая из которых обозначает окрашенную клетку. \(i\)-я строка содержит три целых числа \(x_i\), \(y_i\) и \(c_i\) (\(1 \le x_i \le n\), \(1 \le y_i \le a_{x_i}\), \(1 \le c_i \le 3\)), обозначающие, что клетка \(y_i\) в полоске \(x_i\) окрашена в цвет \(c_i\). Гарантируется, что если \(i \ne j\), то \(x_i \ne x_j\), или \(y_i \ne y_j\) (или и то, и другое сразу).

Затем следуют \(3\) строки, \(i\)-я строка содержит \(3\) целых числа \(f_{i, 1}\), \(f_{i, 2}\), \(f_{i, 3}\) (\(0 \le f_{i, j} \le 1\)). Если \(f_{i, j} = 1\), то можно переместить фишку на \(j\) клеток к началу полоски из клетки с цветом \(i\); если же \(f_{i, j} = 0\), то такой ход невозможен.

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

Выведите количество хороших раскрасок по модулю \(998244353\).

D. Покраска прямоугольника 1

дп *2300

Есть клетчатый квадрат размера \(n \times n\). Некоторые клетки квадрата покрашены в черный цвет, остальные клетки покрашены в белый. За одну операцию разрешается выбрать некоторый прямоугольник и перекрасить все его клетки в белый цвет. За перекраску прямоугольника размера \(h \times w\) взимается штраф в размере \(\max(h, w)\). Требуется за минимальный суммарный штраф покрасить все клетки в белый цвет.

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

В первой строке через пробел задано одно целое число \(n\) — размер квадрата (\(1 \leq n \leq 50\)).

В следующих \(n\) строках записаны строки длины \(n\), состоящие из символов . и #. Если \(j\)-й символ \(i\)-й строки равен #, то клетка квадрата с координатами \((i, j)\) является чёрной, иначе — белой.

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

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

Примечание

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

F. Пауки

Деревья дп жадные алгоритмы *1400

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

Паук состоит из k бусинок, связанных k - 1 ниточкой. Каждая ниточка соединяет две различные бусинки, при этом любая пара бусинок, составляющих паука, либо непосредственно связана ниточкой, либо связана некоторой цепочкой из ниточек и бусинок.

Склеивать пауков Петя может непосредственно за бусинки. Длина каждой нитки равна 1. Размерами бусинок можно пренебречь. Поэтому можно считать, что склеивание пауков происходит путем отождествления некоторых бусинок (см. рисунок). При этом конструкция, получаемая при склеивании, также должна представлять собой паука, т.е. для нее должны выполняться указанные свойства.

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

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

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

В первой строке входного файла записано одно целое число n (1 ≤ n ≤ 100) — количество пауков. Следующие n строк содержат описания каждого паука: целое число ni (2 ≤ ni ≤ 100) — количество бусин, далее ni - 1 пара чисел, означающих номера бусин, соединенных нитками. Бусинки, составляющие каждого паука, нумеруются от 1 до ni.

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

Выведите одно число — длину искомой конструкции.

B. Block Adventure

дп жадные алгоритмы *1200

Гильдон играет в компьютерную игру под названием Block Adventure. В ряд выставлены \(n\) столбиков из кубиков, эти столбики пронумерованы от \(1\) до \(n\). Все кубики имеют равную высоту. Высота \(i\)-го столбика равна \(h_i\) — числу кубиков в \(i\)-м столбике.

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

У персонажа есть рюкзак, в который он может положить сколько угодно кубиков. Когда персонаж стоит на \(i\)-м столбике, Гильдон может выполнить одно из следующих трех действий сколько угодно раз:

  • если в \(i\)-м столбике есть хотя бы один кубик, то можно убрать один кубик с этого столбика и положить его в рюкзак;
  • если в рюкзаке есть хотя бы один кубик, можно один кубик достать и положить на \(i\)-й столбик;
  • если \(i < n\) и \(|h_i - h_{i+1}| \le k\), можно передвинуть персонажа на верх \(i+1\)-го столбика. \(k\) — некоторое неотрицательное целое число, зафиксированное в начале игры. Обратите внимание, что можно переместиться лишь в следующий столбик.

В действиях первого и второго типа персонаж остается на \(i\)-м столбике, при этом изменяется \(h_i\).

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

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

Каждый тест состоит из одного или нескольких тестовых случаев. Первая строка содержит количество тестовых случаев \(t\) (\(1 \le t \le 1000\)). Далее следуют описания тестовых случаев.

Первая строка каждого тестового случая содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n \le 100\), \(0 \le m \le 10^6\), \(0 \le k \le 10^6\)) — количество столбиков, количество кубиков в рюкзаке изначально и неотрицательное число \(k\), описанное в условии.

Вторая строка каждого тестового случая содержит \(n\) целых чисел. \(i\)-е из этих чисел равно \(h_i\) (\(0 \le h_i \le 10^6\)) — изначальная высота \(i\)-го столбика.

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

Для каждого тестового случая выведите «YES», если возможно выиграть игру. Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом случае Гильдон может забрать один кубик из \(1\)-го столбца, перейти во \(2\)-й столбец, положить кубик на \(2\)-й столбец, а затем перейти в \(3\)-й столбец.

Во втором случае Гильдон должен положить кубик из рюкзака на \(1\)-й столбец, чтобы попасть во \(2\)-й. Но тогда уже не получится попасть в \(3\)-й столбец, так как \(|h_2 - h_3| = 3 > k\) и невозможно уменьшить эту разницу.

В пятом случае персонаж изначально на \(n\)-м столбце, поэтому игра выиграна сразу.

D. Белые полосы

дп Перебор реализация Структуры данных *1900

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

В cfpaint есть инструмент, называемый ластиком. Ластик имеет размер \(k\) (\(1 \le k \le n\)). Чтобы его использовать, Гильдон должен щелкнуть в некоторую клетку \((i, j)\), где \(1 \le i, j \le n - k + 1\). Если он щелкнет в клетку \((i, j)\), то все клетки \((i', j')\) такие, что \(i \le i' \le i + k - 1\) и \(j \le j' \le j + k - 1\) станут белыми. Иными словами, квадрат со стороной в \(k\) клеток, левый верхний угол которого находится в клетке \((i, j)\), будет закрашен белым.

Белой полосой называется строка или столбец, не содержащие черных клеток.

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

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

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2000\)) — количество строк и столбцов и размер ластика.

Каждая из следующих \(n\) строк содержит \(n\) символов без пробелов. Символ \(j\) в \(i\)-й строке описывает клетку \((i,j)\). Каждый символ — либо «B», что обозначает черную клетку, либо «W», что обозначает белую клетку.

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

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

Примечание

В первом примере Гильдон может щелкнуть в клетку \((2, 2)\), тогда рабочая зона будет выглядеть так:

BWWW
WWWW
WWWW
WWWB

Здесь есть четыре белых полосы: \(2\)-я и \(3\)-я строки, а также \(2\)-й и \(3\)-й столбцы.

Во втором примере нажатие на клетку \((2, 3)\) сделает \(2\)-ю строку белой.

В третьем примере \(2\)-й столбец и \(5\)-я строка станут белыми полосами, если щелкнуть в клетку \((3, 2)\).

F. Graph Traveler

графы дп математика Перебор поиск в глубину и подобное реализация Структуры данных теория чисел *2300

Гильдон проводит эксперименты с интересной машиной под названием Graph Traveler. В этой машине есть ориентированный граф из \(n\) вершин, пронумерованных от \(1\) до \(n\). \(i\)-я вершина имеет \(m_i\) выходящих ребер, они обозначаются \(e_i[0]\), \(e_i[1]\), \(\ldots\), \(e_i[m_i-1]\), где каждый элемент обозначает номер вершины конца ребра. В графе могут быть кратные ребра и петли. Кроме того, в каждой вершине \(i\) написано некоторое целое число \(k_i\).

Путь по графу определяется следующим образом.

  1. Гильдон выбирает вершину, с которой начнет путь, а также некоторое начальное целое число. Запомним это число в переменную \(c\).
  2. Когда Гильдон приходит в вершину \(i\), а также, в начале, если путь начинается с вершины \(i\), он добавляет значение \(k_i\) к \(c\).
  3. Следующая вершина пути — это \(e_i[x]\), где \(x\) — такое целое число \(0 \le x \le m_i-1\), что \(x \equiv c \pmod {m_i}\). Гильдон переходит в эту следующую вершину и возвращается на шаг 2.

Ясно, что такой путь никогда не кончается, потому что шаги 2 и 3 будут повторяться бесконечное число раз.

Например, предположим, что Гильдон начинает в вершине \(1\) с \(c = 5\), при этом \(m_1 = 2\), \(e_1[0] = 1\), \(e_1[1] = 2\), \(k_1 = -3\). Сразу после того, как он начинает в вершине \(1\), \(c\) становится равным \(2\). Так как единственное целое число \(x\) (\(0 \le x \le 1\)) такое, что \(x \equiv c \pmod {m_i}\), это \(0\), то Гильдон пойдет в вершину \(e_1[0] = 1\). После того как он попадет в вершину \(1\) снова, \(c\) станет равной \(-1\). Единственное целое число \(x\), удовлетворяющее сравнению, есть \(1\), поэтому он идет в вершину \(e_1[1] = 2\), и так далее.

Так как Гильдон достаточно любознательный, он хочет спросить у вас \(q\) вопросов. Каждый раз он хочет узнать, сколько различных вершин он посетит бесконечное число раз, если он начнет с определенной вершины с определенным числом \(c\). Обратите внимание, что не нужно учитывать вершины, которые будут посещены только конечное число раз.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — количество вершин в графе.

Вторая строка содержит \(n\) целых чисел. \(i\)-е из них равно \(k_i\) (\(-10^9 \le k_i \le 10^9\)) — число, написанное в \(i\)-й вершине.

Следующие \(2 \cdot n\) строк описывают ребра, выходящие из каждой вершины. \((2 \cdot i + 1)\)-я строка содедржит одно целое число \(m_i\) (\(1 \le m_i \le 10\)) — число исходящих ребер из вершины \(i\). \((2 \cdot i + 2)\)-я строка содержит \(m_i\) целых чисел \(e_i[0]\), \(e_i[1]\), \(\ldots\), \(e_i[m_i-1]\), все значения которых лежат в пределах от \(1\) до \(n\) включительно.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество вопросов Гильдона.

Каждая из следующих \(q\) строк содержит два целых числа \(x\) и \(y\) (\(1 \le x \le n\), \(-10^9 \le y \le 10^9\)), которые означают, что Гильдон хочет начать путь с вершины \(x\), а начальное значение переменной \(c\) должно быть \(y\).

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

Для каждого запроса выведите количество различных вершин, которые будут посещены бесконечно много раз, если Гильдон начнет путь из вершины \(x\) с начальным значением \(y\).

Примечание

Граф в первом примере показан на рисунке ниже:

Три числа, показанные на вершине \(i\), равны соответственно \(i\), \(k_i\) и \(m_i\). Числа на ребрах показывают их номер в списке выходящих ребер из \(i\)-й вершины.

Путь для каждого запроса показан ниже. Он описывается последовательностью фраз, каждая в формате «вершина (\(c\) после добавления \(k_i\))».

  • \(1(0) \to 2(0) \to 2(0) \to \ldots\)
  • \(2(0) \to 2(0) \to \ldots\)
  • \(3(-1) \to 1(-1) \to 3(-1) \to \ldots\)
  • \(4(-2) \to 2(-2) \to 2(-2) \to \ldots\)
  • \(1(1) \to 3(1) \to 4(1) \to 1(1) \to \ldots\)
  • \(1(5) \to 3(5) \to 1(5) \to \ldots\)

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

Пути во втором примере показаны ниже:

  • \(1(4) \to 2(-1) \to 2(-6) \to \ldots\)
  • \(2(-5) \to 2(-10) \to \ldots\)
  • \(3(-4) \to 1(0) \to 2(-5) \to 2(-10) \to \ldots\)
  • \(4(-3) \to 1(1) \to 3(-2) \to 4(-3) \to \ldots\)
  • \(1(5) \to 3(2) \to 1(6) \to 2(1) \to 2(-4) \to \ldots\)
  • \(1(9) \to 3(6) \to 2(1) \to 2(-4) \to \ldots\)

D. Охота за сокровищами

Бинарный поиск дп жадные алгоритмы реализация *2100

Вы находитесь на острове, который можно представить как таблицу \(n \times m\). Строки таблицы пронумерованы целыми числами от \(1\) до \(n\), а столбцы пронумерованы целыми числами от \(1\) до \(m\). На острове расположено \(k\) сокровищ, \(i\)-е из которых находится в клетке \((r_i, c_i)\).

Изначально вы находитесь в нижней левой клетке острова, в клетке \((1, 1)\). Если вы окажетесь в одной клетке с сокровищем, то вы можете забрать его, не тратя дополнительного времени. За один ход вы можете переместится вверх (из \((r, c)\) в \((r+1, c)\)), налево (из \((r, c)\) в \((r, c-1)\)) или направо (из \((r, c)\) в \((r, c+1)\)). Из-за ловушек вы не можете двигаться вниз.

Однако двигаться вверх тоже небезопасно. Вы можете двигаться вверх, только если вы находитесь в безопасном столбце. Есть \(q\) безопасных столбцов: \(b_1, b_2, \ldots, b_q\). Вы хотите собрать все сокровища как можно быстрее. Выясните минимальное число ходов, за которое это можно сделать.

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

Первая строка содержит целые числа \(n\), \(m\), \(k\) и \(q\) (\(2 \le n, \, m, \, k, \, q \le 2 \cdot 10^5\), \(q \le m\)) — количество строк, количество столбцов, количество сокровищ на острове и количество безопасных столбцов.

Каждая из \(k\) следующих строк содержит целые числа \(r_i, c_i\), (\(1 \le r_i \le n\), \(1 \le c_i \le m\)) — координаты клеток, в которых расположены сокровища. Все сокровища расположены в различных клетках.

Последняя строка содержит \(q\) различных чисел \(b_1, b_2, \ldots, b_q\) (\(1 \le b_i \le m\)) — номера безопасных столбцов.

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

Выведите минимальное число ходов, которое нужно, чтобы собрать все сокровища.

Примечание

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

Во втором примере следует идти вверх в первом столбце.

В третьем примере оптимально собрать сокровище в клетке \((1;6)\), затем переместиться вверх в строку \(2\), используя столбец \(6\), затем собрать сокровище в клетке \((2;2)\), подняться в верхний ряд, используя столбец \(1\), и собрать последнее сокровище в клетке \((3;4)\). Всего \(15\) ходов.

B. Вам задана десятичная строка...

дп кратчайшие пути Перебор *1700

Предположим, у вас есть специальный \(x\)-\(y\)-счетчик. Этот счетчик способен хранить некоторое число в десятичной записи; первоначально это число \(0\).

Счетчик выполняет следующий алгоритм: он выводит последнюю цифру своего значения, и после этого прибавляет к своему значению либо \(x\), либо \(y\). Поэтому все последовательности, порожденные им, начинаются с \(0\). Для примера, \(4\)-\(2\)-счетчик может вести себя следующим образом:

  1. он выводит \(0\) и добавляет \(4\) к своему значению, поэтому текущее значение — \(4\), и вывод — \(0\);
  2. он выводит \(4\) и добавляет \(4\) к своему значению, текущее значение — \(8\), и вывод — \(04\);
  3. он выводит \(8\) и добавляет \(4\) к своему значению, текущее значение — \(12\), и вывод — \(048\);
  4. он выводит \(2\) и добавляет \(2\) к своему значению, текущее значение — \(14\), и вывод — \(0482\);
  5. он выводит \(4\) и добавляет \(4\) к своему значению, текущее значение — \(18\), и вывод — \(04824\).

Это только один из возможных выводов; например, этот же счетчик мог сгенерировать \(0246802468024\) как вывод, если бы он добавлял \(2\) на каждом шаге.

Вы выписали последовательность, которая была сгенерирована \(x\)-\(y\)-счетчиком. Но последовательность была испорчена и некоторые ее элементы могли быть стерты.

Теперь вы хотите восстановить эту последовательность, но вы даже не знаете тип счетчика, который вы использовали. У вас есть только десятичная строка \(s\) — оставшиеся элементы последовательности.

Для каждого \(0 \le x, y < 10\) посчитайте минимальное количество цифр, которое вам необходимо вставить в строку \(s\), чтобы сделать ее возможным выводом \(x\)-\(y\)-счетчика. Заметим, что вы не можете менять порядок цифр в строке \(s\) или стирать какие-то цифры; разрешены только вставки.

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

В первой строке задана одна строка \(s\) (\(1 \le |s| \le 2 \cdot 10^6\), \(s_i \in \{\text{0} - \text{9}\}\)) — оставшаяся от последовательности информация. Гарантируется, что \(s_1 = 0\).

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

Выведите матрицу \(10 \times 10\), где \(j\)-й элемент (\(0\)-индексация) на \(i\)-й строке (тоже \(0\)-индексация) равен минимальному количеству цифр, которые необходимо вставить в строку \(s\), чтобы сделать ее возможным выводом \(i\)-\(j\)-счетчика, либо \(-1\), если так сделать невозможно.

Примечание

Возьмем, например, \(4\)-\(3\)-счетчик. Один из возможных выводов, который он мог выдать, — \(0(4)8(1)4(7)0\) (в скобках потерянные элементы).

Один из возможных выводов \(2\)-\(3\)-счетчика — \(0(35)8(1)4(7)0\).

А \(6\)-\(8\)-счетчик, например, мог вывести ровно строку \(0840\).

C. Вам задана WASD-строка...

дп жадные алгоритмы математика Перебор реализация Строки Структуры данных *2100

У вас есть строка \(s\) — последовательность команд для робота. Робот находится в одной из клеток клетчатого поля. Он может выполнять следующие команды:

  • 'W' — переместиться на одну клетку вверх;
  • 'S' — переместиться на одну клетку вниз;
  • 'A' — переместиться на одну клетку влево;
  • 'D' — переместиться на одну клетку вправо.

\(Grid(s)\) — прямоугольное поле минимальной площади, такое, что на нем можно выбрать стартовую позицию робота так, что при выполнении всей последовательностей комнад \(s\) робот не выйдет за пределы прямоугольника. Например, если \(s = \text{DSAWWAW}\), то \(Grid(s)\) — это прямоугольник \(4 \times 3\).

  1. вы можете поместить робота в клетку \((3, 2)\);
  2. робот выполняет команду 'D' и перемещается в \((3, 3)\);
  3. робот выполняет команду 'S' и перемещается в \((4, 3)\);
  4. робот выполняет команду 'A' и перемещается в \((4, 2)\);
  5. робот выполняет команду 'W' и перемещается в \((3, 2)\);
  6. робот выполняет команду 'W' и перемещается в \((2, 2)\);
  7. робот выполняет команду 'A' и перемещается в \((2, 1)\);
  8. робот выполняет команду 'W' и перемещается в \((1, 1)\).

У вас есть \(4\) дополнительных буквы: одна 'W', одна 'A', одна 'S' и одна 'D'. Вы можете вставить одну из них (либо не вставлять вообще) в любую позицию в строке \(s\) для минимизации площади \(Grid(s)\).

Какую минимальную площадь \(Grid(s)\) вы можете получить?

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

Первая строка содержит число \(T\) (\(1 \le T \le 1000\)) — количество запросов.

Следующие \(T\) строк содержат запросы. Каждый запрос содержит строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\), \(s_i \in \{\text{W}, \text{A}, \text{S}, \text{D}\}\)) — последовательность команд.

Гарантируется, что суммарная длина строк \(s\) по всем запросам не превосходит \(2 \cdot 10^5\).

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

Выведите \(T\) строк, по одному числу в каждой строке.

На каждый запрос выведите минимальное значение \(Grid(s)\), которое вы можете получить.

Примечание

В первом запросе вам нужно получить строку \(\text{DSAWW}\underline{D}\text{AW}\).

Во втором и третьем запросах вы не можете уменьшить площадь \(Grid(s)\).

F2. Завершение проектов (сложная версия)

дп жадные алгоритмы *2300

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

Поликарп — очень известный фрилансер. Его текущий рейтинг равен \(r\).

Некоторые очень богатые заказчики попросили его завершить некоторые проекты для их компаний. Чтобы завершить \(i\)-й проект, Поликарпу необходимо иметь хотя бы \(a_i\) единиц рейтинга; после того, как он завершит этот проект, его рейтинг изменится на \(b_i\) (его рейтинг увеличится или уменьшится на \(b_i\)) (\(b_i\) может быть положительным и отрицательным). Рейтинг Поликарпа не может падать ниже нуля, потому что люди перестанут доверять фрилансеру с таким низким рейтингом.

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

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

Ваша задача — посчитать максимально возможный размер такого подмножества проектов.

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

Первая строка входных данных содержит два целых числа \(n\) и \(r\) (\(1 \le n \le 100, 1 \le r \le 30000\)) — количество проектов и изначальный рейтинг Поликарпа, соответственно.

Следующие \(n\) строк содержат проекты, один на строку. \(i\)-й проект представлен парой целых чисел \(a_i\) и \(b_i\) (\(1 \le a_i \le 30000\), \(-300 \le b_i \le 300\)) — рейтинг, необходимый для того, чтобы завершить \(i\)-й проект и изменение рейтинга после завершения проекта.

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

Выведите одно целое число — размер максимально возможного подмножества (возможно, пустого) проектов, которые Поликарп может выбрать.

C. Анна, Святослав и карта

графы дп жадные алгоритмы кратчайшие пути *1700

Главные герои были опущены для краткости.

Вам дан ориентированный невзвешенный граф без петель с \(n\) вершинами и путь в нём (не обязательно простой), заданный последовательностью \(p_1, p_2, \ldots, p_m\) из \(m\) вершин; для любого \(1 \leq i < m\) существует дуга из \(p_i\) в \(p_{i+1}\).

Будем называть последовательность \(v_1, v_2, \ldots, v_k\) из \(k\) вершин хорошей, если \(v\) является подпоследовательностью \(p\), \(v_1 = p_1\), \(v_k = p_m\), и \(p\) является одним из кратчайших путей, проходящих через вершины \(v_1\), \(\ldots\), \(v_k\) в этом порядке.

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

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

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

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 100\)) — количество вершин в графе.

Следующие \(n\) строк задают граф матрицей смежности: \(j\)-й символ в \(i\)-й строке равен \(1\), если есть дуга из вершины \(i\) в вершину \(j\), иначе равен \(0\). Гарантируется, что заданный граф не имеет петель.

Следующая строка содержит одно целое число \(m\) (\(2 \le m \le 10^6\)) — количество вершин в выбранном пути.

Следующая строка содержит \(m\) целых чисел \(p_1, p_2, \ldots, p_m\) (\(1 \le p_i \le n\)) — вершины в пути. Гарантируется, что для любого \(1 \leq i < m\) существует дуга из \(p_i\) в \(p_{i+1}\).

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

В первой строке выведите одно число \(k\) (\(2 \leq k \leq m\)) — длину кратчайшей хорошей подпоследовательности. Во второй строке выведите \(k\) целых чисел \(v_1\), \(\ldots\), \(v_k\) (\(1 \leq v_i \leq n\)) — вершины в подпоследовательности. Если существует несколько кратчайших хороших подпоследовательностей, выведите любую. Любые два последовательные числа должны быть различны.

Примечание

На рисунке представлен граф для первого примера:

Заданный путь проходит через вершины \(1\), \(2\), \(3\), \(4\). Последовательность \(1-2-4\) является хорошей, т.к. она является подпоследовательностью заданного пути, её первый и последний элементы совпадают с первым и последним элементом заданного пути, и кратчайший путь, проходящий через вершины \(1\), \(2\) и \(4\) в этом порядке, это \(1-2-3-4\). Обратите внимание, что последовательности \(1-4\) и \(1-3-4\) не подходят, т. к. в обоих случаях кратчайший путь, проходящий через вершины этих последовательностей, это \(1-3-4\).

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

В четвёртом примере пути \(1-2-4\) и \(1-3-4\) являются кратчайшими путями, проходящими через вершины \(1\) и \(4\).

E. Наташа, Саша и префиксные суммы

дп Комбинаторика математика теория чисел *2300

Два любимых числа Наташи — это \(n\) и \(1\), а два любимых числа Саши — \(m\) и \(-1\). Однажды Саша и Наташа встретились и выписали все возможные массивы из \(n+m\) элементов, в которых \(n\) элементов равны \(1\), а другие \(m\) элементов равны \(-1\). Для каждого массива они посчитали его максимальную префиксную сумму, возможно пустую, равную \(0\) (т. е. если каждая непустая префиксная сумма меньше нуля, то она считается равной нулю). Более формально, обозначим за \(f(a)\) максимальную префиксную сумму массива \(a_{1, \ldots ,l}\) длины \(l \geq 0\). Тогда:

\(\)f(a) = \max (0, \smash{\displaystyle\max_{1 \leq i \leq l}} \sum_{j=1}^{i} a_j )\(\)

Теперь они хотят посчитать сумму максимальных префиксных сумм по всем выписанным массивам и просят вас в этом помочь. Так как эта сумма может быть очень большой, выведите её по модулю \(998\: 244\: 853\).

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

Единственная строка содержит два целых числа \(n\) и \(m\) (\(0 \le n,m \le 2\,000\)).

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

Выведите ответ на задачу по модулю \(998\: 244\: 853\).

Примечание

В первом примере существует единственный возможный массив: [-1,-1], его максимальная префиксная сумма равна \(0\).

Во втором примере существует единственный возможный массив: [1,1], его максимальная префиксная сумма равна \(2\).

В третьем примере существуют \(6\) возможных массивов:

[1,1,-1,-1], f([1,1,-1,-1]) = 2

[1,-1,1,-1], f([1,-1,1,-1]) = 1

[1,-1,-1,1], f([1,-1,-1,1]) = 1

[-1,1,1,-1], f([-1,1,1,-1]) = 1

[-1,1,-1,1], f([-1,1,-1,1]) = 0

[-1,-1,1,1], f([-1,-1,1,1]) = 0

Ответ для третьего примера равен \(2+1+1+1+0+0 = 5\).

B. Сделайте произведение единицей

дп реализация *900

Даны \(n\) целых чисел \(a_1, a_2, \dots, a_n\). За одну монету можно сделать следующую операцию:

Выбрать одно из этих чисел, и уменьшить или увеличить его на \(1\).

В частности, мы можем применять эту операцию к одному и тому же числу несколько раз.

Мы хотим добиться того, чтобы произведение всех чисел стало равно \(1\), другими словами, чтобы \(a_1 \cdot a_2\) \(\dots\) \(\cdot a_n = 1\).

К примеру, для \(n = 3\) и чисел \([1, -3, 0]\) мы можем сделать произведение равным \(1\) за \(3\) монеты: добавить \(1\) к второму элементу, добавить \(1\) к второму элементу еще раз, отнять \(1\) от третьего элемента, в результате чего массив станет равным \([1, -1, -1]\). А \(1\cdot (-1) \cdot (-1) = 1\).

Какое минимальное количество монет нужно для этого заплатить?

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество чисел.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — сами числа.

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

Выведите единственное число — минимальное количество монет, которое нужно потратить, чтобы сделать произведение равным \(1\).

Примечание

В первом примере, вы можете изменить \(1\) на \(-1\) или \(-1\) на \(1\) за \(2\) монеты.

Во втором примере, вы должны применить по крайней мере \(4\) операции, чтобы произведение не было равным \(0\).

В третьем примере, вы можете изменить \(-5\) на \(-1\) за \(4\) монеты, \(-3\) на \(-1\) за \(2\) монеты, \(5\) на \(1\) за \(4\) монеты, \(3\) на \(1\) за \(2\) монеты, \(0\) на \(1\) за \(1\) монету.

C. Газопровод

дп жадные алгоритмы *1500

Вам назначили задачу проложить газопровод вдоль дороги. Для простоты будем считать, что дорога — это отрезок \([0, n]\) на оси \(OX\). На дороге может быть несколько перекрестков, но для простоты будем считать каждый перекресток как интервал \((x, x + 1)\) для некоторого целого \(x\). Таким образом, можно представить дорогу как двоичную строку, состоящую из \(n\) символов, где цифра 0 означает, что текущий интервал не содержит перекресток, а 1 означает, что интервал содержит перекресток.

Обычно газопровод можно установить вдоль дороги на высоте \(1\) вместе с поддерживающими его столбами в каждой целой точке (поэтому при установке вдоль дороги \([0, n]\) нам необходимо поставить \(n + 1\) столб). Но на перекрестках нам необходимо поднять трубу на высоту \(2\), чтобы она не мешала проезду машин.

Мы можем поднять или опустить трубу за счет вставки зигзагообразных частей. Каждый зигзаг можно представить как отрезок \([x, x + 1]\) с целым \(x\), состоящий из трех частей: \(0.5\) единицы горизонтальной трубы + \(1\) единицы вертикальной трубы + \(0.5\) горизонтальной. Заметьте, что если труба находится на высоте \(2\), столбы, ее поддерживающие, также должны быть длины \(2\).

Каждая единица длины газопровода стоит нам \(a\) бурлей, а каждая единица длины столба — \(b\) бурлей. Поэтому не всегда выгодно просто пустить трубопровод на высоте \(2\). Определите форму трубопровода с минимальной возможной ценой, а также его цену.

Заметим, что вы обязаны начать и закончить трубу на высоте \(1\), а также гарантируется, что первый и последний символы во входной строке обязательно равны 0.

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

В первой строке задано одно число \(T\) (\(1 \le T \le 100\)) — количество независимых запросов. В следующих \(2 \cdot T\) строках заданы запросы — один запрос на две строки.

В первой строке заданы три целых числа \(n\), \(a\), \(b\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le a \le 10^8\), \(1 \le b \le 10^8\)) — длина дороги, цена за единицу длины трубы и цена за единицу длины столба, соответственно.

Во второй строке задана двоичная строка \(s\) (\(|s| = n\), \(s_i \in \{0, 1\}\), \(s_1 = s_n = 0\)) — описание дороги.

Гарантируется, что суммарная длина строк \(s\) во всех запросах не превосходит \(2 \cdot 10^5\).

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

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

Примечание

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

Оптимальный газопровод для второго запроса изображен ниже:

Оптимальный (и единственный) газопровод для третьего примера изображен ниже:

Оптимальный газопровод для четвертого примера изображен ниже:

F. Биты и выбор

битмаски дп жадные алгоритмы поиск в глубину и подобное *2600

Вам дан массив \(a\) из \(n\) целых чисел.

Вам нужно найти наибольшее возможное значение \(a_{i} | ( a_{j} \& a_{k} )\) по всем таким тройкам \((i,j,k)\), что \(i < j < k\).

Здесь \(\&\) обозначает операцию побитового И, а \(|\) обозначает операцию побитового ИЛИ.

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

В первой строке ввода записано целое число \(n\) (\(3 \le n \le 10^{6}\)) — размер массива \(a\).

Во второй строке записаны \(n\) целых чисел, разделенных пробелами \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_{i} \le 2 \cdot 10^{6}\)) — массив \(a\).

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

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

Примечание

В первом примере единственная возможная тройка это \((1, 2, 3)\). Таким образом, ответ равен \(2 | (4 \& 6) = 6\).

Во втором примере есть \(4\) возможные тройки:

  1. \((1, 2, 3)\), значение которой \(2|(8\&4) = 2\).
  2. \((1, 2, 4)\), значение которой \(2|(8\&7) = 2\).
  3. \((1, 3, 4)\), значение которой \(2|(4\&7) = 6\).
  4. \((2, 3, 4)\), значение которой \(8|(4\&7) = 12\).

Таким образом максимальное значение равно \(12\).

E1. Вращая столбцы (упрощенная версия)

битмаски дп жадные алгоритмы Перебор сортировки *2000

Это более лёгкая версия следующей задачи, отличающаяся от неё только ограничениями.

Вам дана прямоугольная матрица \(a\) размером \(n \times m\). За один ход вы можете выбрать произвольный столбец и циклически сдвинуть все элементы в этом столбце. Вы можете выполнять эту операцию произвольное (ноль или более) количество раз. Вы можете применять эту операцию для одного столбца произвольное количество раз.

После того, как вы закончили, вы вычисляете для каждой строки наибольший элемент в ней. Предположим, для \(i\)-й строки он равен \(r_i\). Чему равно наибольшее значение \(r_1+r_2+\ldots+r_n\)?

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

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 40\)), количество наборов входных данных в тесте.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(m\) (\(1 \le n \le 4\), \(1 \le m \le 100\)) — число строк и число столбцов в матрице \(a\).

Каждая из следующих \(n\) строк содержит \(m\) чисел — элементы матрицы \(a\) (\(1 \le a_{i, j} \le 10^5\)).

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

Выведите \(t\) целых чисел: ответы на все наборы входных данных, в порядке, в котором они заданы в тесте.

Примечание

В первом тестовом наборе можно сдвинуть третий столбец вниз на один, тогда будет \(r_1 = 5\) и \(r_2 = 7\).

Во втором тестовом наборе можно ничего не делать, тогда будет \(r_1 = r_2 = 10\) и \(r_3 = 9\).

E2. Вращая столбцы (усложнённая версия)

битмаски дп жадные алгоритмы сортировки *2500

Это сложная версия задачи, отличающаяся более высокими ограничениями.

Вам дана прямоугольная матрица \(a\) размером \(n \times m\). За один ход вы можете выбрать произвольный столбец и циклически сдвинуть все элементы в этом столбце. Вы можете выполнять эту операцию произвольное (ноль или более) количество раз. Вы можете применять эту операцию для одного столбца произвольное количество раз.

После того, как вы закончили, вы вычисляете для каждой строки наибольший элемент в ней. Предположим, для \(i\)-й строки он равен \(r_i\). Чему равно наибольшее значение \(r_1+r_2+\ldots+r_n\)?

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

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 40\)), количество наборов входных данных в тесте.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(m\) (\(1 \le n \le 12\), \(1 \le m \le 2000\)) — число строк и число столбцов в матрице \(a\).

Каждая из следующих \(n\) строк содержит \(m\) чисел — элементы матрицы \(a\) (\(1 \le a_{i, j} \le 10^5\)).

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

Выведите \(t\) целых чисел: ответы на все наборы входных данных, в порядке, в котором они заданы в тесте.

Примечание

В первом тестовом наборе можно сдвинуть третий столбец вниз на один, тогда будет \(r_1 = 5\) и \(r_2 = 7\).

Во втором тестовом наборе можно ничего не делать, тогда будет \(r_1 = r_2 = 10\) и \(r_3 = 9\).

G. Матеуш и эскейп-рум

дп *3500

Матеуш любит путешевствовать! Однако, на его \(42\)-м визите Санкт-Компьютерсбурга осталось не так много достопримечательностей для осмотра. Поэтому он решил отправиться со своими друзьями в эскейп-рум!

Команда с легкостью разгадала почти все загадки. Осталось только одна — большой круглый стол! Есть \(n\) весов, лежащих на поверхности стола, распределенных по окружности. Каждые весы соседствуют ровно двум другим весами: для каждого \(i \in \{1, 2, \dots, n-1\}\), \(i\)-е и \((i+1)\)-е весы являются соседними, а также соседними являются первые и \(n\)-е весы.

Изначально на \(i\)-х весах лежат \(a_i\) тяжелых монет. Матеуш может совершать движения — каждое движение состоит из взятия одной монеты с одних весов и перекладывания ее на соседние весы.

Оказывается, что загадка будет решена только если соблюдаются некоторые условия на количества монет на каждых весах. А именно, у каждых весов есть параметры \(l_i\) и \(r_i\). Если каждая монета лежит на ровно одних весах, и для каждого \(i\), на \(i\)-х весах лежат хотя бы \(l_i\) и не более \(r_i\) монет, загадка будет решена и команда Матеуша выиграет!

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

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

В первой строке записано одно целое число \(n\) (\(3 \le n \le 35\,000\)) — количество весов на круге.

Следующие \(n\) строк описывают весы. \(i\)-я из них описывает \(i\)-е весы и содержит три целых числа \(a_i, l_i, r_i\) (\(0 \le a_i \le 35\,000\), \(0 \le l_i \le r_i \le 35\,000\)).

Гарантируется, что загадка разрешима, а именно \(\sum_{i=1}^n l_i \le \sum_{i=1}^n a_i \le \sum_{i=1}^n r_i\).

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

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

H. Ремонт дорог в Древляндии

*особая задача Бинарный поиск Деревья дп *3100

В Древляндии \(n\) городов и \(n-1\) двусторонняя дорога. Каждая дорога соединяет пару различных городов. Из любого города можно проехать в любой другой, двигаясь только по дорогам. Города пронумерованы от \(1\) до \(n\). Да, конечно, вы узнали в этом описании неориентированное дерево.

Правительство страны планирует отремонтировать все дороги. Каждая дорога будет отремонтирована некоторой частной компанией. Всего в стране \(10^6\) частных компаний, которые пронумерованы от \(1\) до \(10^6\). Допустимо, что некоторые компании не получат вообще дорог для ремонта, а некоторые будут ремонтировать множество дорог.

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

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

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

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

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее записаны сами наборы входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 3000\)) — количество городов в Древляндии. Далее в \(n-1\) строке записаны дороги по одному в строке: строка содержит два целых числа \(x_i\), \(y_i\) (\(1 \le x_i, y_i \le n\)), обозначающих, что \(i\)-я дорога соединяет города \(x_i\) и \(y_i\).

Гарантируется, что сумма всех значений \(n\) по всем наборам входных данных в тесте не превосходит \(3000\).

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

Выведите ответы для всех \(t\) наборов входных данных в тесте. Каждый набор должен начинаться строкой, которая содержит \(r\) — минимальное возможное количество дорог, назначенных наиболее используемой компании. Далее в следующей строке выведите \(n-1\) число \(c_1, c_2, \dots, c_{n-1}\) (\(1 \le c_i \le 10^6\)), где \(c_i\) обозначает номер компании, которой назначен ремонт \(i\)-й дороги. Если существует несколько способов назначения, выведите любой из них.

D. Остров Сокровищ

дп поиск в глубину и подобное Потоки хэши *1900

Сокровища! Кто не мечтал о них в детстве? Именно так подумал юный Вася и отправился в длительное путешествие к Острову Сокровищ.

Остров Сокровищ представляет собой прямоугольное поле \(n \times m\), окруженное океаном. Пронумеруем строки поля последовательными целыми числами от \(1\) до \(n\) сверху вниз, а столбцы последовательными целыми числами от \(1\) до \(m\) слева направо. Обозначение \((r, c)\) соответствует клетке, расположенной в строке \(r\) и столбце \(c\). В некоторых клетках острова растут непроходимые леса, а остальные клетки свободные и проходимые. Сокровище закопано в клетке \((n, m)\).

Вася высадился с корабля в клетку \((1, 1)\). Теперь он хочет добраться до сокровища. Вася сильно спешит за сокровищем, поэтому может перемещаться только в клетку в следующей строке (вниз) или следующем столбце (вправо), то есть из клетки \((x, y)\) он может сделать ход только в клетки \((x+1, y)\) и \((x, y+1)\). Конечно, Вася не может заходить в клетки, где растёт непроходимый лес.

Злая Ведьма узнала о планах Васи завладеть сокровищами и хочет ему помешать. До начала движения Васи она с помощью своей магии может вырастить непроходимые леса в клетках, которые ранее были свободными. Ведьма может вырастить непроходимый лес в любых клетках, кроме клетки \((1, 1)\), где уже высадился Вася, и клетки \((n, m)\), где закопаны сокровища.

Помогите Злой Ведьме определить, на каком минимальном количестве клеток ей придётся вырастить непроходимый лес, чтобы Вася не смог добраться до сокровища?

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

Первая строка содержит два целых положительных числа \(n\), \(m\) (\(3 \le n \cdot m \le 1\,000\,000\)) — размеры острова.

Следующие \(n\) строк содержат строки \(s_i\) длины \(m\), задающие описание острова, \(j\)-й символ строки \(s_i\) равен «#», если в клетке \((i, j)\) острова растёт непроходимый лес и «.», если клетка свободна. Напомним, что Вася высаживается в клетке \((1, 1)\), то есть в первой клетке первой строки и идёт навстречу сокровищам, находящимся в клетке \((n, m)\), то есть в последней клетке последней строки.

гарантируется, что клетки \((1, 1)\) и \((n, m)\) не содержат леса.

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

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

Примечание

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

B. Количество произведений

дп Комбинаторика реализация *1400

В данной задаче вам задана последовательность \(a_1, a_2, \dots, a_n\), состоящая из \(n\) ненулевых целых чисел (то есть \(a_i \ne 0\)).

Перед вами стоит задача найти два числа:

  1. количество таких пар индексов \((l, r)\) \((l \le r)\), что произведение \(a_l \cdot a_{l + 1} \dots a_{r - 1} \cdot a_r\) строго отрицательно;
  2. количество таких пар индексов \((l, r)\) \((l \le r)\), что произведение \(a_l \cdot a_{l + 1} \dots a_{r - 1} \cdot a_r\) строго положительно.
Входные данные

В первой строке следует целое число \(n\) \((1 \le n \le 2 \cdot 10^{5})\) — количество элементов в последовательности.

Во второй строке следует \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((-10^{9} \le a_i \le 10^{9}; a_i \neq 0)\) — элементы последовательности.

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

Выведите два целых числа — количество отрезков со строго отрицательным произведением и количество отрезков со строго положительным произведением.

E. Шарики

битмаски дп *2200

Монокарп выложил на стол слева направо \(n\) шариков, причем цвет \(i\)-го слева шарика равен \(a_i\). Он любит порядок, поэтому захотел, чтобы все шарики одного цвета образовывали непрерывные отрезки, причем для каждого цвета этот отрезок был ровно один.

Иными словами, Монокарп хочет расположить шарики так, что для каждого цвета \(j\), если самый левый шарик цвета \(j\) находится в позиции \(l\), а самый правый — в позиции \(r\), то все шарики между позициями \(l\) и \(r\) должны иметь цвет \(j\). Такое расположение шариков Монокарп называет упорядоченным.

Для упорядочивания шариков Монокарп может выполнять следующую операцию: выбрать пару соседних шариков и поменять их местами.

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

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

В первой строке следует целое число \(n\) \((2 \le n \le 4 \cdot 10^5)\) — количество шариков на столе.

Во второй строке следует последовательность \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 20)\), где \(a_i\) равно цвету \(i\)-го шарика.

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

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

Примечание

В первом примере Монокарпу достаточно сделать три обмена. Сначала он может поменять местами третий и четвертый шарики, после этого последовательность шариков станет равна \([3, 4, 3, 2, 4, 2, 2]\). Затем Монокарп может поменять местами второй и третий шарики, после этого последовательность шариков станет равна \([3, 3, 4, 2, 4, 2, 2]\). После этого Монокарпу остается поменять местами четвертый и пятый шарики, после этого последовательность шариков станет равна \([3, 3, 4, 4, 2, 2, 2]\).

Во втором примере ничего менять не нужно, так как все шарики уже лежат в удовлетворяющем Монокарпа порядке.

F. Wi-Fi

дп жадные алгоритмы Структуры данных *2100

Вы работаете администратором в общежитии, состоящем из \(n\) комнат, расположенных в ряд вдоль коридора. Комнаты пронумерованы слева направо от \(1\) до \(n\).

Вы хотите подключить все \(n\) комнат к интернету.

Каждая из комнат может быть подключена к интернету кабелем напрямую, стоимость подключения \(i\)-й комнаты равна \(i\) монет.

В некоторых комнатах также есть место для установки роутера. Стоимость установки роутера в \(i\)-й комнате также равна \(i\) монет. Вы не можете поставить роутер в комнате, в которой нет места для его установки. Когда вы ставите роутер в комнате \(i\), вы подключаете все комнаты с номерами от \(max(1,~i - k)\) до \(min(n,~i + k)\) включительно к интернету, где \(k\) — это радиус действия роутера. Значение \(k\) одинаково для всех роутеров.

Определите минимальную стоимость подключения всех \(n\) комнат к интернету. Считайте, что количество комнат, в которые можно установить роутеры, не превосходит количества роутеров, которые у вас есть.

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

В первой строке следуют два целых числа \(n\) и \(k\) (\(1 \le n, k \le 2 \cdot 10^5\)) — количество комнат и радиус действия каждого роутера.

Во второй строке следует строка \(s\) длины \(n\), состоящая только из нулей и единиц. Если \(i\)-й символ строки равен единице, то в \(i\)-й комнате есть место для установки роутера. Если \(i\)-й символ строки равен нулю, то в \(i\)-й комнате нет места для установки роутера.

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

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

Примечание

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

Во втором примере нельзя устанавливать роутеры ни в одну из комнат, поэтому все комнаты нужно подключать напрямую кабелем. Таким образом, стоимость подключения всех комнат равна \(1 + 2 + 3 + 4 + 5 + 6 = 21\).

В третьем примере комнату \(1\) нужно подключить напрямую кабелем, а в комнату \(3\) установить роутер. Таким образом, стоимость подключения всех комнат равна \(1 + 3 = 4\).

В четвертом примере нужно установить роутеры в комнаты \(5\) и \(10\). Тогда все комнаты будут подключены к интернету. Стоимость подключения равна \(5 + 10 = 15\).

A. BubbleReactor

графы дп *2800

You are in charge of the BubbleReactor. It consists of \(N\) BubbleCores connected with \(N\) lines of electrical wiring. Each electrical wiring connects two distinct BubbleCores. There are no BubbleCores connected with more than one line of electrical wiring.

Your task is to start the BubbleReactor by starting each BubbleCore. In order for a BubbleCore to be started it needs to be receiving power from a directly connected BubbleCore which is already started. However, you can kick-start one BubbleCore manually without needing power. It is guaranteed that all BubbleCores can be started.

Before the BubbleCore boot up procedure its potential is calculated as the number of BubbleCores it can power on (the number of inactive BubbleCores which are connected to it directly or with any number of inactive BubbleCores in between, itself included)

Start the BubbleReactor so that the sum of all BubbleCores' potentials is maximum.

Input

First line contains one integer \(N (3 \leq N \leq 15.000)\), the number of BubbleCores.

The following N lines contain two integers \(U, V (0 \leq U \neq V < N)\) denoting that there exists electrical wiring between BubbleCores \(U\) and \(V\).

Output

Single integer, the maximum sum of all BubbleCores' potentials.

Note

If we start by kickstarting BubbleCup 8 and then turning on cores 7, 2, 1, 3, 0, 9, 4, 5, 6 in that order we get potentials 10 + 9 + 8 + 7 + 6 + 5 + 1 + 3 + 1 + 1 = 51

C. Jumping Transformers

дп *2600

You, the mighty Blackout, are standing in the upper-left \((0,0)\) corner of \(N\)x\(M\) matrix. You must move either right or down each second.

There are \(K\) transformers jumping around the matrix in the following way. Each transformer starts jumping from position \((x,y)\), at time \(t\), and jumps to the next position each second. The \(x\)-axes grows downwards, and \(y\)-axes grows to the right. The order of jumping positions is defined as \({(x,y),(x+d,y-d),(x+d,y),(x,y+d)}\), and is periodic. Before time \(t\) transformer is not in the matrix.

You want to arrive to the bottom-right corner \((N-1,M-1)\), while slaying transformers and losing the least possible amount of energy. When you meet the transformer (or more of them) in the matrix field, you must kill them all, and you lose the sum of the energy amounts required to kill each transformer.

After the transformer is killed, he of course stops jumping, falls into the abyss and leaves the matrix world. Output minimum possible amount of energy wasted.

Input

In the first line, integers \(N\),\(M\) (\(1 \leq N, M \leq 500\)), representing size of the matrix, and \(K\) (\(0 \leq K \leq 5*10^5\)) , the number of jumping transformers.

In next \(K\) lines, for each transformer, numbers \(x\), \(y\), \(d\) (\(d \geq 1\)), \(t\) (\(0 \leq t \leq N+M-2\)), and \(e\) (\(0 \leq e \leq 10^9\)), representing starting coordinates of transformer, jumping positions distance in pattern described above, time when transformer starts jumping, and energy required to kill it.

It is guaranteed that all 4 of jumping points of the transformers are within matrix coordinates

Output

Print single integer, the minimum possible amount of energy wasted, for Blackout to arrive at bottom-right corner.

Note

If Blackout takes the path from (0, 0) to (2, 0), and then from (2, 0) to (2, 2) he will need to kill the first and third transformer for a total energy cost of 9. There exists no path with less energy value.

E. Туризм

графы Деревья дп жадные алгоритмы поиск в глубину и подобное снм *2200

Лёша решил отправиться в туристическую поездку по стране.

Для простоты стоит считать, что в стране есть \(n\) городов и \(m\) двусторонних дороги, которые их соединяют. Лёша живёт в городе \(s\) и изначально находится в нём. Каждый город в стране по своему хорош, и чтобы сравнивать города между собой, Лёша поставил каждому городу оценку \(w_i\), которая тем больше, чем интереснее город кажется Лёше.

Лёша считает, что его поездка по стране будет интересной только в том случае, если ему ни в какой момент времени не придётся ехать назад по дороге, по которой он только что проехал. Другими словами, если Лёша переехал из города \(u\) в город \(v\), следующим в своей поездке Лёша может выбрать любой город, соединённый с \(v\) дорогой, кроме города \(u\).

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

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

Первая строка содержит два целых числа \(n\), \(m\), (\(1 \le n \le 2 \cdot 10^5\), \(0 \le m \le 2 \cdot 10^5\)) — количество городов и дорог в стране.

Вторая строка содержит \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) (\(0 \le w_i \le 10^9\)) — оценки всех городов.

Следующие \(m\) строк содержат описание дорог. Каждая из \(m\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)) — города, которые соединяются дорогой.

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

Последняя строка содержит одно целое число \(s\) (\(1 \le s \le n\)) — номер стартового города.

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

Выведите одно целое число — максимальную сумму оценок посещённых городов, которую можно получить.

D. Сделаем забор великим снова

дп *1800

У вас есть забор, состоящий из \(n\) вертикальных досок. Ширина каждой доски равна \(1\). Высота \(i\)-й доски равна \(a_i\). Вы считаете забор великим, если все соседние доски имеют разную высоту. Формально, забор великий, если для любого индекса от \(2\) до \(n\), выполняется условие \(a_{i-1} \neq a_i\).

К сожалению, ваш забор может быть не великим. Но вы можете это исправить! Вы можете увеличить длину \(i\)-й доски на \(1\), но за это вам придется заплатить \(b_i\) рублей. Длину каждой доски можно увеличивать любое количество раз (в том числе, можно не увеличивать её длину совсем).

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

Вам нужно ответить на \(q\) независимых запросов.

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

Первая строка содержит число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

Первая строка каждого запроса содержит число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество досок в заборе.

Следующие \(n\) строк каждого запроса содержат описание досок.\(i\)-я строка содержит два числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^9\)) — длину \(i\)-й доски и цену за увеличение её длины на \(1\), соответственно.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(3 \cdot 10^5\).

Так же гарантируется, что ответ не превосходит \(10^{18}\).

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

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

Примечание

В первом запросе вам нужно увеличить длину второй доски на \(2\). Тогда всего вы потратите \(2 \cdot b_2 = 2\) рублей.

Во втором запросе вам нужно увеличить длину первой доски на \(1\) и длину третьей доски на \(1\). Таким образом, вы потратите \(1 \cdot b_1 + 1 \cdot b_3 = 9\) рублей.

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

G. Граф и числа

meet-in-the-middle битмаски дп Комбинаторика Перебор *2900

Вам задан неориентированный граф из \(n\) вершин и \(m\) ребер. Вы должны написать число на каждой вершине графа, каждое число должно быть равно \(0\) или \(1\). После этого на каждом ребре будет записана сумма чисел на двух вершинах, инцидентных этому ребру.

Вы должны выбрать числа таким образом, чтобы было хотя бы одно ребро с числом \(0\), хотя бы одно ребро с числом \(1\) и хотя бы одно ребро с числом \(2\). Сколько способов так расставить числа? Два способа различны, если существует хотя бы одна вершина, на которой в разных способах записаны разные числа.

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

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 40\), \(0 \le m \le \frac{n(n - 1)}{2}\)) — количество вершин и ребер, соответственно.

Затем следуют \(m\) строк, в каждой из которых записаны два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\)) — вершины, соединяемые \(i\)-м ребром. Гарантируется, что между каждой парой вершин существует не более одного ребра.

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

Выведите одно целое число — количество способов так записать числа на вершинах, что есть хотя бы одно ребро с числом \(0\), хотя бы одно ребро с числом \(1\) и хотя бы одно ребро с числом \(2\).

D. Сортировка последовательности

дп жадные алгоритмы *2000

Вам задана последовательность целых чисел \(a_1, a_2, \dots, a_n\).

Вы можете применять следующую операцию к этой последовательности: выбрать число \(x\) и переместить все элементы равные \(x\) либо в начало, либо в конец массива \(a\). Обратите внимание, что за одну операцию вы перемещаете все элементы в одном направлении.

Например, если \(a = [2, 1, 3, 1, 1, 3, 2]\), вы можете получить следующие последовательности за одну операцию (для удобства, обозначим элементы равные \(x\) как \(x\)-элементы):

  • \([1, 1, 1, 2, 3, 3, 2]\), если вы переместите все \(1\)-элементы в начало;
  • \([2, 3, 3, 2, 1, 1, 1]\), если вы переместите все \(1\)-элементы в конец;
  • \([2, 2, 1, 3, 1, 1, 3]\), если вы переместите все \(2\)-элементы в начало;
  • \([1, 3, 1, 1, 3, 2, 2]\), если вы переместите все \(2\)-элементы в конец;
  • \([3, 3, 2, 1, 1, 1, 2]\), если вы переместите все \(3\)-элементы в начало;
  • \([2, 1, 1, 1, 2, 3, 3]\), если вы переместите все \(3\)-элементы в конец;

Вам нужно посчитать минимальное количество операций, после применения которых последовательность \(a\) станет отсортирована в порядке неубывания. Последовательность отсортирована в порядке неубывания, если для любого индекса \(i\) от \(2\) до \(n\), выполняется условие \(a_{i-1} \le a_i\).

Обратите внимание, что вам нужно ответить на \(q\) независимых запросов.

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

Первая строка содержит целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов. Каждый запрос состоит из двух последовательных строк.

Первая строка каждого запроса содержит целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество элементов массива.

Вторая строка каждого запроса содержит \(n\) целых чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(3 \cdot 10^5\).

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

На каждый запрос выведите одно число — минимальное количество операций для сортировки последовательности \(a\) в порядке неубывания.

Примечание

В первом запросе вы можете переместить все \(1\)-элементы в начало (после этого последовательность превратится в \([1, 1, 1, 3, 6, 6, 3]\)) и затем переместить все \(6\)-элементы в конец.

Во втором запросе последовательность отсортирована изначально, а значит ответ равен нулю.

В третьем запросе вам нужно переместить все \(2\)-элементы в начало.

E. Раскрась дерево

Деревья дп сортировки *2100

Вам задано взвешенное дерево, состоящее из \(n\) вершин. Напомним, что деревом называется связный граф без циклов. Вершины \(u_i\) и \(v_i\) соединены ребром веса \(w_i\).

Определим \(k\)-раскраску дерева как присвоение каждой вершине ровно \(k\) цветов, таким образом, что каждый цвет используется не более двух раз. Считайте, что различных доступных цветов бесконечно много. Назовем ребро насыщенным в \(k\)-раскраске, если его концы имеют хотя бы один общий цвет (т.е. найдется цвет, который присвоен обоим концам ребра).

Так же определим счет \(k\)-раскраски как сумму весов насыщенных ребер.

Вам необходимо найти максимально возможный счет \(k\)-раскраски заданного дерева.

Вам нужно ответить на \(q\) независимых запросов.

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

Первая строка содержит целое число \(q\) (\(1 \le q \le 5 \cdot 10^5\)) — количество запросов.

Первая строка каждого запроса содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 5 \cdot 10^5\)) — количество вершин в дереве и количество цветов, которое нужно присвоить каждой вершине.

Каждая из следующих \(n - 1\) строк описывает ребра дерева. Ребро \(i\) обозначается тремя целыми числами \(u_i\), \(v_i\) и \(w_i\) — номерами вершин, которые оно соединяет, и весом ребра (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\), \(1 \le w_i \le 10^5\)). Гарантируется, что заданный набор ребер образует дерево.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(5 \cdot 10^5\).

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

На каждый запрос выведите одно целое число — максимально возможный счет \(k\)-раскраски заданного дерева.

Примечание

Дерево, соответствующее первому запросу в тестовом примере:

Одна из возможных \(k\)-раскрасок в первом запросе: \((1), (1), (2), (2)\), тогда ребра номер \(1\) и \(3\) являются насыщенными и сумма их весов равна \(8\).

Дерево, соответствующее второму запросу в тестовом примере:

Одна из возможных \(k\)-раскрасок во втором запросе: \((1, 2), (1, 3), (2, 4), (5, 6), (7, 8), (3, 4), (5, 6)\), тогда ребра номер \(1\), \(2\), \(5\) и \(6\) являются насыщенными и сумма их весов равна \(14\).

F. Стек-уничтожимые массивы

дп разделяй и властвуй Структуры данных хэши *2600

Давайте рассмотрим следующий процесс: изначально у вас есть пустой стек и массив \(s\) длины \(l\). Вы пытаетесь добавлять элементы массива в стек в порядке \(s_1, s_2, s_3, \dots s_{l}\). Причем если стек пустой или элемент на вершине стека не равен текущему, то вы просто добавляете текущий элемент на вершину стека. Иначе вы не добавляете элемент и более того, удаляете верхний элемент стека.

Если после данного процесса стек окажется пустым, то массив \(s\) считается стек-уничтожимым.

Примеры стек-уничтожимых массивов:

  • \([1, 1]\);
  • \([2, 1, 1, 2]\);
  • \([1, 1, 2, 2]\);
  • \([1, 3, 3, 1, 2, 2]\);
  • \([3, 1, 3, 3, 1, 3]\);
  • \([3, 3, 3, 3, 3, 3]\);
  • \([5, 1, 2, 2, 1, 4, 4, 5]\);

Давайте рассмотрим изменения стека более подробно при \(s = [5, 1, 2, 2, 1, 4, 4, 5]\) (элемент на вершине текста выделен жирным шрифтом).

  1. после добавления \(s_1 = 5\) стек будет равен \([\textbf{5}]\);
  2. после добавления \(s_2 = 1\) стек будет равен \([5, \textbf{1}]\);
  3. после добавления \(s_3 = 2\) стек будет равен \([5, 1, \textbf{2}]\);
  4. после добавления \(s_4 = 2\) стек будет равен \([5, \textbf{1}]\);
  5. после добавления \(s_5 = 1\) стек будет равен \([\textbf{5}]\);
  6. после добавления \(s_6 = 4\) стек будет равен \([5, \textbf{4}]\);
  7. после добавления \(s_7 = 4\) стек будет равен \([\textbf{5}]\);
  8. после добавления \(s_8 = 5\) стек станет пустым.

Вам задан массив \(a_1, a_2, \ldots, a_n\). Вам нужно посчитать количество подотрезков этого массива, которые являются стек-уничтожимыми.

Обратите внимание, что вам нужно ответить на \(q\) независимых запросов.

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

Первая строка содержит целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

Первая строка каждого запроса содержит единственное целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого запроса содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(3 \cdot 10^5\).

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

На каждый запрос выведите одно число — количество стек-уничтожимых подотрезков массива \(a\).

Примечание

В первом запросе есть четыре стек-уничтожимых подотрезка: \(a_{1 \ldots 4} = [2, 1, 1, 2], a_{2 \ldots 3} = [1, 1], a_{2 \ldots 5} = [1, 1, 2, 2], a_{4 \ldots 5} = [2, 2]\).

Во втором запросе только один стек-уничтожимый подотрезок  — \(a_{3 \ldots 4}\).

В третьем запросе есть восемь стек-уничтожимых подотрезков: \(a_{1 \ldots 8}, a_{2 \ldots 5}, a_{2 \ldots 7}, a_{2 \ldots 9}, a_{3 \ldots 4}, a_{6 \ldots 7}, a_{6 \ldots 9}, a_{8 \ldots 9}\).

E. Rock Is Push

Бинарный поиск дп *2200

Вы находитесь в левой верхней клетке \((1, 1)\) лабиринта размера \(n \times m\) клеток. Ваша цель — попасть в правую нижнюю клетку \((n, m)\). Вы можете двигаться только вправо и вниз по одной клетке за ход. Переход вправо из клетки \((x, y)\) ведёт в клетку \((x, y + 1)\), а переход вниз — в клетку \((x + 1, y)\).

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

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

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

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

В первой строке записано два целых числа \(n, m\) — размеры лабиринта (\(1 \leq n, m \leq 2000\)).

Следующие \(n\) строк описывают лабиринт. Каждая из этих строк содержит \(m\) символов. \(j\)-й символ \(i\)-й из этих строк равен «R», если клетка \((i, j)\) содержит камень, или «.», если клетка \((i, j)\) пуста.

Гарантируется, что стартовая клетка \((1, 1)\) пуста.

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

Выведите одно целое число — количество различных способов добраться из клетки \((1, 1)\) в клетку \((n, m)\) по модулю \(10^9 + 7\).

Примечание

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

Во втором примере цель заблокирована и в неё нельзя попасть.

Иллюстрации к третьему примеру можно найти здесь: https://cfassets.m27.workers.dev/rounds/1225/index.html

G. Получить 1

битмаски дп жадные алгоритмы Конструктив теория чисел *3100

На доске написано \(n\) положительных чисел. Также выбрано положительное число \(k \geq 2\), и ни одно из написанных чисел не делится на \(k\). За одну операцию разрешается стереть с доски любые два числа \(x\) и \(y\) и записать вместо них \(f(x + y)\), где \(f(x)\) равно \(x\), если \(x\) не делится на \(k\), и \(f(x) = f(x / k)\) в противном случае.

В конце на доске останется одно число. Возможно ли сделать это число равным \(1\)? Если это так, восстановите любую последовательность операций, которая к этому приводит.

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

В первой строке записано два целых числа \(n\) и \(k\) — исходное количество чисел на доске и выбранное число (\(2 \leq n \leq 16\), \(2 \leq k \leq 2000\)).

Во второй строке записано \(n\) положительных чисел \(a_1, \ldots, a_n\), изначально написанных на доске. Гарантируется, что ни одно из чисел \(a_i\) не делится на \(k\), а также сумма всех \(a_i\) не превосходит \(2000\).

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

Если получить \(1\) в качестве последнего числа невозможно, выведите единственную строку «NO».

В противном случае, в первой строке выведите «YES», а затем выведите \(n - 1\) строку с описанием операций. \(i\)-я из этих строк должна содержать два целых числа \(x_i\) и \(y_i\), которые необходимо заменить на \(f(x_i + y_i)\) на \(i\)-й операции. Если существует несколько подходящих последовательностей, выведите любую из них.

Примечание

Во втором примере:

  • \(f(8 + 7) = f(15) = f(5) = 5\);
  • \(f(23 + 13) = f(36) = f(12) = f(4) = 4\);
  • \(f(5 + 4) = f(9) = f(3) = f(1) = 1\).

F1. Неправильный ответ на тесте 233 (упрощенная версия)

дп *2200

Ваша программа снова не работает, на этот раз она получает вердикт «Неправильный ответ на тесте 233»

Это упрощенная версия задачи, в этой версии \(1 \le n \le 2000\). Вы можете взламывать эту задачу, только если вы заблокировали обе версии.

В задаче идёт речь о тесте из \(n\) вопросов. Каждый вопрос содержит \(k\) вариантов ответа, и только один из них правильный. Ответ на \(i\)-й вопрос это \(h_{i}\). Если ваш ответ на вопрос \(i\) равен \(h_{i}\), вы получите \(1\) балл, в противном случае вы получите \(0\) баллов за этот вопрос. В этой задаче значения \(h_1, h_2, \dots, h_n\) вам известны (заданы).

Однако, вы допустили ошибку в вашей программе! Расположим все \(n\) ответов на окружности по часовой стрелке. Из-за ошибки в вашей программе, они сдвигаются на один по циклу в направлении часовой стрелки.

Формально, ошибка двигает ответ на вопрос \(i\) к вопросу \(i \bmod n + 1\). Так она двигает ответ на вопрос \(1\) к вопросу \(2\), ответ на вопрос \(2\) к вопросу \(3\), ..., ответ на вопрос \(n\) к вопросу \(1\).

Назовем все \(n\) ответов вместе набором ответов. Всего есть \(k^n\) возможных наборов ответов.

Вас интересует количество наборов ответов удовлетворяющих следующему условию: после сдвига по часовой стрелки на \(1\), итоговое количество баллов нового набора ответов строго больше чем старого. Вам необходимо найти это количество по модулю \(998\,244\,353\).

Например, если \(n = 5\) и ваш набор ответов \(a=[1,2,3,4,5]\), он будет изменен вашей программой на \(a'=[5,1,2,3,4]\) из-за ошибки. Если набор правильных ответов равен \(h=[5,2,2,3,4]\), тогда набор ответов \(a\) получит \(1\) балл, а набор ответов \(a'\) получит \(4\) балла. Так как \(4 > 1\), набор ответов \(a=[1,2,3,4,5]\) удовлетворяет условию и должен быть посчитан.

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

В первой строке записаны два целых числа \(n\), \(k\) (\(1 \le n \le 2000\), \(1 \le k \le 10^9\)) — количество вопросов и количество вариантов ответа в каждом вопросе.

Во второй строке записаны \(n\) целых чисел \(h_1, h_2, \dots, h_n\), (\(1 \le h_{i} \le k)\) — правильные ответы на вопросы.

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

Выведите одно целое число — количество наборов ответов, удовлетворяющих данному ограничению, по модулю \(998\,244\,353\).

Примечание

На первый пример, корректные наборы ответов — это \([2,1,1], [2,1,2], [2,1,3], [3,1,1], [3,1,2], [3,1,3], [3,2,1], [3,2,2], [3,2,3]\).

E. Другое заполнение таблицы

дп Комбинаторика математика *2300

Дана квадратная таблица \(n \times n\) и целое число \(k\). Поставьте в каждую клетку по одному целому числу так, чтобы все условия были удовлетворены.

  • Все числа в таблице должны быть от \(1\) до \(k\) включительно.
  • Минимальное число \(i\)-й строки должно быть равно \(1\) (\(1 \le i \le n\)).
  • Минимальное число \(j\)-го столбца должно быть равно \(1\) (\(1 \le j \le n\)).

Найдите количество способов расставить числа в клетках. Так как ответ может быть очень большой, найдите его по модулю \((10^{9} + 7)\).

Пример правильной (слева) и неправильной (справа) таблицы, где \(n=k=2\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 250\), \(1 \le k \le 10^{9}\)).

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

Выведите ответ по модулю \((10^{9} + 7)\).

Примечание

В первом примере есть \(7\) способов.

Во втором примере убедитесь, что вы выводите ответ по модулю \((10^{9} + 7)\).

C. Скобочки

дп жадные алгоритмы Комбинаторика *2300

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

Двумерный скобочный массив размером n × m называется правильным скобочным массивом, если любая строка, полученная выписыванием скобочек на каком-то монотонном пути из клетки (1, 1) в клетку (n, m), образует правильную скобочную последовательность.

Определим операцию сравнения двух правильных скобочных массивов (a и b) следующим образом. Пусть задан двумерный массив приоритетов (p) — двумерный массив, заполненный различными целыми числами от 1 до nm. Найдем такую позицию (i, j) в двумерном массиве, что ai, j ≠ bi, j. Если таких позиций несколько, выберем ту, где число pi, j минимально. Если ai, j = «(», то a < b, иначе a > b. Если позиция (i, j) не найдена, то массивы считаются равными.

Ваша задача — найти k-ый двумерный правильный скобочный массив. Гарантируется, что для заданных размеров n и m будет существовать не менее k двумерных правильных скобочных массивов.

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

В первой строке заданы целые числа n, m и k — размеры массива и номер искомого правильного скобочного массива, который требуется найти (1 ≤ n, m ≤ 100, 1 ≤ k ≤ 1018). Далее задается матрица приоритетов — n строк по m чисел, число pi, j показывает приоритет символа j в строке i (1 ≤ pi, j ≤ nm, все pi, j различные).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных целых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

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

Выведите k-ый двумерный правильный скобочный массив.

Примечание

В первом примере существует лишь один правильный скобочный двумерный массив.

Во втором и третьем примерах существует по два варианта.

Напомним, что скобочная последовательность называется правильной, если путем вставки в нее символов «+» и «1» можно получить из нее корректное математическое выражение. Например, последовательности «(())()», «()» и «(()(()))» — правильные, в то время как «)(», «(()» и «(()))(» — нет.

E. Лабиринт

Деревья дп поиск в глубину и подобное Теория вероятностей *2500

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


DFS(x)
if x == вершина выхода then
завершить обход дерева
flag[x] <- TRUE
перемешать порядок вершин в V(x) // здесь каждая перестановка V(x) равновероятна
for i <- 1 to length[V] do
if flag[V[i]] = FALSE then
count++;
DFS(V[i]);
count++;

V(x) — список вершин смежных с x. Массив flag изначально заполнен FALSE. Изначально DFS запускается с параметром вершины входа. По завершению обхода в переменной count будет находится количество ходов.

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

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

В первой строке задается число вершин в графе n (1 ≤ n ≤ 105). В следующих n - 1 строках задаются пары чисел ai и bi, которые показывают существования ребра между ai и bi вершинами (1 ≤ ai, bi ≤ n). Гарантируется, что заданный граф является деревом.

В следующих n строках задаются пары неотрицательных чисел xi и yi, которые характеризуют вероятность выбора i-ой вершины в качества входа и выхода соответственно. Вероятности выбрать вершину i в качестве входа и выхода равны и соответственно. Сумма по всем xi и сумма по всем yi положительны и не превосходят 106.

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

Выведите матожидание количества ходов. Абсолютная или относительная погрешность не должна превосходить 10 - 9.

Примечание

В первом примере вершина входа всегда 1 и вершина выхода всегда 2.

Во втором примере вершина входа всегда 1, вершина выхода с вероятностью 2/5 будет 2 или с вероятность 3/5 будет 3. Матожидания для вершин выхода 2 и 3 будут равны (симметричные случаи). На первом ходе с вероятностью 0.5 можно пойти в вершину выхода или с вероятностью 0.5 не в вершину выхода. В первом случаи количество ходов равно 1, во втором оно будет равно 3. Итоговое матожидание считается как 2 / 5 × (1 × 0.5 + 3 × 0.5) + 3 / 5 × (1 × 0.5 + 3 × 0.5)

C. Трубы

дп реализация *1500

Вам задана система труб. Она состоит из двух рядов, каждый из которых состоит из \(n\) труб. Верхняя левая труба имеет координаты \((1, 1)\), а нижняя правая — \((2, n)\).

Всего существует шесть типов труб: два типа прямых труб и четыре типа изогнутых труб. Ниже приведены примеры всех шести типов:

Типы труб

Вы можете поворачивать каждую из заданных труб на \(90\) градусов по часовой или против часовой стрелки любое (возможно, нулевое) количество раз (таким образом, типы \(1\) и \(2\) могут переходить друг в друга, а также \(3, 4, 5, 6\) могут переходить друг в друга).

Вы хотите повернуть некоторые трубы таким образом, чтобы поток воды мог начать свое движение в \((1, 0)\) (слева от верхней левой трубы), пойти по трубе в \((1, 1)\), как-то потечь по связным трубам до трубы \((2, n)\) и потечь вправо в \((2, n + 1)\).

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

Примеры связных труб

Попробуем описать задачу при помощи примера:

Входные данные первого примера

И его решение ниже:

Решение первого примера

Как вы можете заметить, поток воды — это плохо нарисованная синяя линия. Чтобы достичь ответа, нам необходимо повернуть трубу на позиции \((1, 2)\) на \(90\) градусов по часовой стрелке, трубу на позиции \((2, 3)\) на \(90\) градусов, трубу на позиции \((1, 6)\) на \(90\) градусов, трубу на позиции \((1, 7)\) на \(180\) градусов и трубу на позиции \((2, 7)\) на \(180\) градусов. Тогда поток воды сможет достичь \((2, n + 1)\) из \((1, 0)\).

Вам необходимо ответить на \(q\) независимых запросов.

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 10^4\)) — количество запросов. Затем следуют \(q\) запросов.

Каждый запрос состоит ровно из трех строк. Первая строка запроса содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество труб в каждом ряду. Следующие две строки содержат описания первого и второго рядов соответственно. Описание каждого ряда состоит из \(n\) цифр от \(1\) до \(6\) без каких-либо пробелов между ними, каждая цифра соответствует типу трубы в соответствующей клетке. Прочтите условие задачи, чтобы понять, какие цифры соответствуют каким типам труб.

Гарантируется, что сумма \(n\) по всем запросам не пресоходит \(2 \cdot 10^5\).

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

Для \(i\)-го запроса выведите ответ на него — «YES» (без кавычек), если возможно повернуть некоторые трубы таким образом, чтобы поток воды смог достичь \((2, n + 1)\) из \((1, 0)\), и «NO» иначе.

Примечание

Первый запрос из тестового примера описан в условии задачи.

F. Очередной разворот подстроки

битмаски дп *2200

Вам задана строка \(s\), состоящая только из первых \(20\) строчных букв латинского алфавита ('a', 'b', ..., 't').

Напомним, что подстрокой \(s[l; r]\) строки \(s\) называется строка \(s_l s_{l + 1} \dots s_r\). Например, подстроками «codeforces» являются «code», «force», «f», «for», но не строки «coder» и «top».

Вы можете произвести следующую операцию не более одного раза: выбрать какую-то подстроку \(s[l; r]\) и развернуть ее (то есть строка \(s_l s_{l + 1} \dots s_r\) превращается в \(s_r s_{r - 1} \dots s_l\)).

Ваша задача — максимизировать длину максимальной подстроки \(s\), состоящей из различных (то есть уникальных) символов.

Строка состоит из различных символов, если ни один символ этой строки не встречается более одного раза. Например, строки «abcde», «arctg» и «minecraft» состоят из различных символов, а строки «codeforces», «abacaba» не состоят из различных символов.

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

Единственная строка входных данных содержит одну строку \(s\), состоящую из не более, чем \(10^6\) символов 'a', 'b', ..., 't' (первых \(20\) строчных букв латинского алфавита).

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

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

E. Алиса и нечестная игра

Бинарный поиск дп снм Структуры данных *2500

Алиса играет в игру со своей хорошей подругой, Марисой.

В линию располагается \(n\) коробок, пронумерованных слева направо целыми числами от \(1\) до \(n\). Мариса спрячет куклу в одной из коробок. Затем у Алисы будет \(m\) шансов угадать где находится кукла. Если Алиса хотя бы раз верно угадает номер коробки, в которой сейчас находится кукла, то она победит, иначе победит ее подруга.

Для того, чтобы победить, Мариса будет использовать некоторые нечестные трюки. После каждого раза, когда Алиса пыталась угадать коробку, она может переместить куклу в соседнюю коробку или оставить на месте. Коробки с номерами \(i\) и \(i + 1\) являются соседними, для всех \(1 \leq i \leq n - 1\). Перед тем как игра начнется, она также может сделать этот трюк один раз.

Таким образом, игра происходит следующим образом: игра начинается, Мариса делает трюк, Алиса делает первое предположение, Мариса делает трюк, Алиса делает второе предположение, Мариса делает трюк, \(\ldots\), Алиса делает \(m\)-е предположение, Мариса делает трюк, игра заканчивается.

Алиса придумала некоторую последовательность \(a_1, a_2, \ldots, a_m\). В \(i\)-м вопросе, она спросит, находится ли кукла в коробке с номером \(a_i\). Она хочет узнать сколько существует различных сценариев \((x, y)\) (для всех \(1 \leq x, y \leq n\)), таких что Мариса сможет выиграть в игре, если она положит куклу в коробку с номером \(x\) в начале игры и после того, как игра закончится, кукла будет в коробке с номером \(y\). Помогите ей и посчитайте это число.

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

В первой строке находится два целых числа \(n\) и \(m\), разделенных пробелом (\(1 \leq n, m \leq 10^5\)) — количество коробок и количество предположений, которое сделает Алиса.

В следующей строке находится \(m\) целых чисел \(a_1, a_2, \ldots, a_m\), разделенных пробелами (\(1 \leq a_i \leq n\)), число \(a_i\) означает номер коробки, которую спросит Алиса во время \(i\)-го предположения.

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

Выведите количество сценариев в единственной строке, а именно количество пар коробок \((x, y)\) (\(1 \leq x, y \leq n\)), таких что если Мариса положит куклу в коробку \(x\), то она сможет делать трюки так, что в конце игры кукла будет в коробке \(y\) и она не проиграет игру.

Примечание

В первом тесте, возможные сценарии это \((1, 1)\), \((1, 2)\), \((2, 1)\), \((2, 2)\), \((2, 3)\), \((3, 2)\), \((3, 3)\).

Возьмем \((2, 2)\) в качестве примера. Коробки, в которых находится кукла во время игры могут быть \(2 \to 3 \to 3 \to 3 \to 2\).

E. Сбалансированные деревья поиска

дп математика *2400

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

Глубина вершины определяется как число рёбер на простом пути между вершиной и корнем дерева. В частности, глубина корня равна \(0\).

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

Будем называть двоичное дерево поиска с целочисленными ключами полосатым, если для каждой вершины \(v\) выполняются оба следующих условия:

  • Если у \(v\) есть левое поддерево с корнем в \(u\), чётность ключа \(v\) должна отличаться от чётности ключа \(u\).
  • Если у \(v\) есть правое поддерево с корнем в \(w\), чётность ключа \(v\) должна совпадать с чётностью ключа \(w\).

Вам дано целое число \(n\). Найдите число идеально сбалансированных полосатых двоичных деревьев поиска из \(n\) вершин, ключи которых — различные целые числа от \(1\) до \(n\) включительно. Выведите остаток от деления этого числа на \(998\,244\,353\).

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

Единственная строка содержит целое число \(n\) (\(1 \le n \le 10^6\)) — требуемое число вершин в дереве.

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

Выведите число идеально сбалансированных полосатых двоичных деревьев поиска из \(n\) вершин, ключи которых — различные целые числа от \(1\) до \(n\) включительно, по модулю \(998\,244\,353\).

Примечание

В первом примере единственное дерево, удовлетворяющее условиям, выглядит так:

А так выглядят деревья, не удовлетворяющие различным условиям во втором примере:

F. Сбалансированные расположения домино

дп Комбинаторика *2600

Рассмотрим прямоугольную доску из \(h\) строк и \(w\) столбцов, на которой расположены костяшки домино. Каждая костяшка покрывает ровно две клетки доски, которые имеют общую сторону. Каждая клетка покрыта не более чем одной костяшкой.

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

Вам дано идеально сбалансированное расположение домино на доске. Найдите число способов разместить ноль или более дополнительных костяшек на этой доске, чтобы расположение осталось идеально сбалансированным. Выведите это число по модулю \(998\,244\,353\).

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

Первая строка содержит три целых числа \(h\), \(w\) и \(n\) (\(1 \le h, w \le 3600\); \(0 \le n \le 2400\)) — размерности доски и число уже размещённых костяшек. Строки пронумерованы от \(1\) до \(h\), а столбцы пронумерованы от \(1\) до \(w\).

Каждая из следующих \(n\) строк содержит четыре целых числа \(r_{i, 1}, c_{i, 1}, r_{i, 2}, c_{i, 2}\) (\(1 \le r_{i, 1} \le r_{i, 2} \le h\); \(1 \le c_{i, 1} \le c_{i, 2} \le w\)) — номера строк и столбцов клеток, покрытых \(i\)-й костяшкой. Клетки \((r_{i, 1}, c_{i, 1})\) и \((r_{i, 2}, c_{i, 2})\) различны и имеют общую сторону.

Заданное расположение домино идеально сбалансировано.

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

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

Примечание

В первом примере заданная доска выглядит так:

Вот \(8\) способов разместить ноль или более дополнительных костяшек, чтобы расположение осталось идеально сбалансированным:

Во втором примере заданная доска выглядит так:

Ни одной дополнительной костяшки разместить нельзя.

G. Сбалансированное распределение

дп жадные алгоритмы Структуры данных *3500

Вдоль кольцевой дороги живут \(n\) друзей. Друзья и их дома пронумерованы по часовой стрелке от \(0\) до \(n-1\).

Изначально у человека \(i\) есть \(a_i\) камней. Друзья хотят сделать распределение камней между ними идеально сбалансированным: у всех должно оказаться равное число камней.

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

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

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

Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \le k < n \le 10^5\)) — число друзей и размер одной встречи.

Вторая строка содержит \(n\) целых чисел \(a_0, a_1, \ldots, a_{n-1}\) (\(0 \le a_i \le 10^4\)) — изначальное число камней у людей.

Сумма всех \(a_i\) делится на \(n\).

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

Выведите наименьшее число встреч \(m\) (\(m \ge 0\)) и \(m\) описаний встреч в хронологическом порядке.

\(i\)-е описание должно состоять из целого числа \(s_i\) (\(0 \le s_i < n\)) и \(k\) неотрицательных целых чисел \(b_{i, 0}, b_{i, 1}, \ldots, b_{i, k-1}\) (\(b_{i, j} \ge 0\)). Такое описание обозначает встречу людей \(s_i, (s_i + 1) \bmod n, \ldots, (s_i + k - 1) \bmod n\), а \(b_{i,j}\) обозначает число камней, которое должно оказаться у человека \((s_i + j) \bmod n\) после \(i\)-й встречи. Сумма \(b_{i, j}\) должна совпадать с общим числом камней, которое было у этих людей до \(i\)-й встречи.

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

Примечание

В первом примере распределение камней меняется следующим образом:

  • после первой встречи: \(2\) \(6\) \(\mathbf{7}\) \(\mathbf{3}\) \(\mathbf{4}\) \(2\);
  • после второй встречи: \(\mathbf{4}\) \(\mathbf{2}\) \(7\) \(3\) \(4\) \(\mathbf{4}\);
  • после третьей встречи: \(4\) \(\mathbf{4}\) \(\mathbf{4}\) \(\mathbf{4}\) \(4\) \(4\).

Во втором примере распределение камней меняется следующим образом:

  • после первой встречи: \(1\) \(0\) \(1\) \(\mathbf{2}\) \(\mathbf{2}\) \(\mathbf{2}\) \(\mathbf{2}\) \(2\) \(4\) \(3\) \(3\);
  • после второй встречи: \(\mathbf{5}\) \(0\) \(1\) \(2\) \(2\) \(2\) \(2\) \(2\) \(\mathbf{2}\) \(\mathbf{2}\) \(\mathbf{2}\);
  • после третьей встречи: \(\mathbf{2}\) \(\mathbf{2}\) \(\mathbf{2}\) \(2\) \(2\) \(2\) \(2\) \(2\) \(2\) \(2\) \(\mathbf{2}\).

C. Обычная условно-бесплатная игра

дп жадные алгоритмы математика *1600

Вы играете в игру, в которой вашему персонажу нужно преодолевать различные препятствия. Например, сейчас вам нужно спуститься с утеса. Высота утеса равна \(h\), и на каждой целой высоте \(x\) от \(1\) до \(h\) есть выдвижная платформа.

Каждая платформа либо спрятана в утесе, либо выдвинута. Изначально выдвинуто \(n\) платформ на высотах \(p_1, p_2, \dots, p_n\). Платформа на высоте \(h\) выдвинута (и на ней изначально стоит персонаж).

Если ваш персонаж стоит на выдвинутой платформе на высоте \(x\), то он может нажать на специальный рычаг, который меняет положение двух платформ: на высотах \(x\) и \(x - 1\). Другими словами, платформа, на которой вы стоите, спрячется в утес, а платформа ниже поменяет свое состояние: если она была выдвинута, она спрячется, а если она была спрятана — выдвинется. Во втором случае вы безопасно приземлитесь на нее. Заметьте, что нажать на рычаг — это единственный способ спуститься с платформы.

Ваш персонаж довольно хрупок, так что он может безопасно падать с высоты не более \(2\). Другими словами, падение с платформы \(x\) на платформу \(x - 2\) безопасно, но падение с платформы \(x\) на платформу \(x - 3\) (или ниже) смертельно.

Иногда невозможно безопасно спуститься с утеса, но вы всегда можете купить (естественно за реальные деньги) несколько магических кристаллов. Каждый магический кристалл может быть использован для изменения состояния любой платформы (за исключением платформ на высоте \(h\)). После использования кристалл исчезает.

Какое минимальное количество кристаллов вам нужно купить для того, чтобы безопасно спуститься на землю, которая находится на высоте \(0\)?

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

Первая строка содержит число \(q\) (\(1 \le q \le 100\)) — количество запросов. Каждый запрос состоит из двух строк.

Первая строка каждого запроса содержит два числа \(h\) и \(n\) (\(1 \le h \le 10^9\), \(1 \le n \le \min(h, 2 \cdot 10^5)\)) — высота утеса и количество выдвинутых платформ.

Вторая строка каждого запроса содержит \(n\) чисел \(p_1, p_2, \dots, p_n\) (\(h = p_1 > p_2 > \dots > p_n \ge 1\)) — выдвинутые платформы в порядке убывания их высоты.

Сумма всех \(n\) по всем запросам не превосходит \(2 \cdot 10^5\).

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

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

D. AB-строка

Бинарный поиск дп Комбинаторика Строки *1900

Строка \(t_1t_2 \dots t_k\) является хорошей, если каждый символ этой строки принадлежит хотя бы одному палиндрому длины больше 1.

Палиндром — это строка, читающаяся одинаково от первого символа к последнему и от последнего символа к первому. Например, строки A, BAB, ABBA, BAABBBAAB являются палиндромами, а строки AB, ABBBAA, BBBA — нет.

Например, хорошим являются строки:

  • \(t\) = AABBB (символы \(t_1\), \(t_2\) принадлежат палиндрому \(t_1 \dots t_2\), а символы \(t_3\), \(t_4\), \(t_5\) — палиндрому \(t_3 \dots t_5\));
  • \(t\) = ABAA (символы \(t_1\), \(t_2\), \(t_3\) принадлежат палиндрому \(t_1 \dots t_3\), а символ \(t_4\) — палиндрому \(t_3 \dots t_4\));
  • \(t\) = AAAAA (все символы принадлежат палиндрому \(t_1 \dots t_5\));

Вам задана строка \(s\) длины \(n\), состоящая только из букв A и B.

Посчитайте количество хороших подстрок строки \(s\).

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

Первая строка содержит число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длину строки \(s\).

Вторая строка содержит строку \(s\), состоящую из букв A и B.

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

Выведите одно число — количество хороших подстрок строки \(s\).

Примечание

Первая строка содержит шесть хороших подстрок: \(s_1 \dots s_2\), \(s_1 \dots s_4\), \(s_1 \dots s_5\), \(s_3 \dots s_4\), \(s_3 \dots s_5\) и \(s_4 \dots s_5\).

Вторая строка содержит две хороших подстроки: \(s_1 \dots s_2\), \(s_1 \dots s_3\) and \(s_2 \dots s_3\)

E. Покупка клавиатуры

битмаски дп *2200

У вас есть пароль, который вы часто набираете — строка \(s\) длины \(n\), состоящая из первых \(m\) букв латинского алфавита.

Из-за того, что вы много времени тратите на набор этого пароля, вы хотите купить новую клавиатуру.

Клавиатура — это перестановка первых \(m\) букв латинского алфавита. Например, если \(m = 3\), то существует всего шесть различных клавиатур: abc, acb, bac, bca, cab и cba.

Так как вы набираете пароль одним пальцем, вам нужно тратить время на перемещение этого пальца от одного символа пароля к другому. Время перемещения пальца от символа \(s_i\) к символу \(s_{i+1}\) равно дистанции между этими символами на клавиатуре. Суммарное потраченное время на набор пароля называется медлительностью.

Формально, медлительность клавиатуры равна \(\sum\limits_{i=2}^{n} |pos_{s_{i-1}} - pos_{s_i} |\), где \(pos_x\) — позиция символа \(x\) на клавиатуре.

Например, если \(s\) = aacabc, а клавиатура равна bac, то медлительность клавиатуры равна \(|pos_a - pos_a| + |pos_a - pos_c| + |pos_c - pos_a| + |pos_a - pos_b| + |pos_b - pos_c|\) = \(|2 - 2| + |2 - 3| + |3 - 2| + |2 - 1| + |1 - 3|\) = \(0 + 1 + 1 + 1 + 2 = 5\).

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

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

Первая строка содержит два числа \(n\) и \(m\) (\(1 \le n \le 10^5, 1 \le m \le 20\)).

Вторая строка содержит строку \(s\) длины \(n\), состоящую только из первых \(m\) строчных букв латинского алфавита.

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

Выведите одно число — минимально возможную медлительность клавиатуры.

Примечание

Первый тестовый пример разобран в условии.

Во втором тестовом примере медлительность любой клавиатуры равна \(0\).

В третьем тестовом одна из подходящих клавиатур — bacd.

F. Максимальное поддерево

графы Деревья дп поиск в глубину и подобное *2200

Пусть у вас есть \(k\) одномерных отрезков \(s_1, s_2, \dots s_k\) (каждый отрезок представляется двумя числами — координатами его концов). Тогда вы можете построить граф из \(k\) вершин на этих отрезках. Между \(i\)-й и \(j\)-й вершинами (\(i \neq j\)) есть ребро тогда и только тогда, когда отрезки \(s_i\) и \(s_j\) пересекаются (когда существует хотя бы одна точка, принадлежащая обоим отрезкам).

Например, если \(s_1 = [1, 6], s_2 = [8, 20], s_3 = [4, 10], s_4 = [2, 13], s_5 = [17, 18]\), то граф будет выглядеть следующим образом:

Дерево размера \(m\) считается хорошим, если можно выбрать \(m\) таких одномерных отрезков, что граф, построенный на этих отрезках, совпадает с деревом.

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

Обратите внимание, что вам нужно ответить на \(q\) независимых запросов.

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

Первая строка содержит число \(q\) (\(1 \le q \le 15 \cdot 10^4\)) — количество запросов.

Первая строка каждого запроса содержит число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество вершин дерева.

Каждая из следующих \(n - 1\) содержит два числа \(x\) и \(y\) (\(1 \le x, y \le n\)) — ребро между вершинами \(x\) и \(y\). Гарантируется, что заданный граф является деревом.

Гарантируется, что сумма всех \(n\) не превосходит \(3 \cdot 10^5\).

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

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

Примечание

В первом запросе одно из хороших поддеревьев размера \(8\) состоит из вершин: \({9, 4, 10, 2, 5, 1, 6, 3}\).

A. Иванушка-дурачок и теория вероятностей

дп Комбинаторика математика *1700

Недавно Иванушка-дурачок захотел стать умнее и поэтому начал изучать теорию вероятностей. Он считает, что уже достаточно хорошо понимает данную тему, и стал этим хвастаться перед всеми.

В качестве примера, Иванушка продемонстрировал окружающим концепцию случайного рисунка. Рисунок представляет собой клетчатое поле из \(n\) строкам и \(m\) столбцов, каждая клетка которого покрашена в белый или чёрный цвет. Иванушка считает, что рисунок случайный, если для любой клетки верно, что среди её соседей по стороне есть не более одной клетки такого же цвета, что и она.

Его братья быстро выяснили, что задумал Иванушка. Они долго пытались объяснить ему, что он, дурачок, все ещё плохо понимает, что такое случайность. Но Иванушка так и не поверил им, поэтому они попросили помощи у вас. Они хотят найти количество различных случайных (по мнению Иванушки) рисунков. Два рисунка называются различными, если существует клетка, которая покрашена в разные цвета на этих рисунках. Так как число таких картинок может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

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

Единственная строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100\,000\)) — количество строк и столбцов клетчатого поля.

Выходные данные

Выведите одно целое число — остаток от деления числа случайных рисунков на \(10^9 + 7\).

Примечание

На картинке ниже изображены все возможные случайные раскраски поля \(2\) на \(3\).

E. Черепашка

дп реализация *3100

У мальчика Коли есть черепашка и поле \(2 \times n\). Строки поля пронумерованы от \(1\) до \(2\) сверху вниз, а столбцы от \(1\) до \(n\) слева направо.

Предположим, что в каждой клетке есть съедобный лист салата, энергетическая ценность которого в клетке поля в строке \(i\) и столбце \(j\) составляет \(a_{i,j}\). Черепашка изначально находится в верхней левой клетке и хочет попасть в правую нижнюю. Черепашка умеет двигаться только вниз и вправо, а среди всех возможных путей, она выберет тот, который максимизирует суммарную энергетическую ценность листов салата, через которые она проходит (если таких путей несколько, она выберет произвольный из них).

Коля беспокоится, что если черепашка съест слишком много салата, то это может быть опасно для её здоровья. Поэтому он хочет переставить листья салата таким образом, чтобы минимизировать суммарную энергетическую ценность салата, которую съест черепашка.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 25\)) — длина поля.

Вторая строка содержит \(n\) целых чисел \(a_{1, i}\) (\(0 \le a_{1, i} \le 50\,000\)) — энергетическая ценность листьев салата в первой строке поля.

Третья строка содержит \(n\) целых чисел \(a_{2, i}\) (\(0 \le a_{2, i} \le 50\,000\)) — энергетическая ценность листьев салата во второй строке поля.

Выходные данные

Выведите две строки по \(n\) чисел в каждой — расстановку листов салата после переупорядочивания Коли.

Если существует несколько оптимальных переупорядочиваний — выведите любое из них.

Примечание

В первом примере черепашка после перестановки сможет съесть салат суммарной энергетической эффективности \(1+4+2 = 7\).

Во втором примере черепашка съест салат суммарной энергетической эффективности \(0\).

В третьем примере черепашка сможет съесть салат суммарной энергетической эффективности \(1\).

C. Баланс сумм

битмаски графы дп поиск в глубину и подобное *2400

У Уджана в коробках накопилось много чисел. Ему нравится баланс и порядок, поэтому он решил перераспределить числа.

Всего есть \(k\) коробок, пронумерованных числами от \(1\) до \(k\). \(i\)-я коробка содержит \(n_i\) целых чисел. Числа могут быть и отрицательными. Все данные числа различны.

Уджан ленивый, поэтому он выполнит следующее перераспределение ровно один раз. Вначале он выберет по одному числу из каждой коробки, всего \(k\) чисел. Затем он поместит выбранные числа по одному числу в каждую из коробок, так, что количество чисел в каждой коробке такое же, как и в начале. Учтите, что он может поместить число, которое он выбрал из одной коробки обратно в ту же коробку.

Уджан будет рад, если сумма чисел во всех коробках станет одинаковая. Может ли он достичь этого, и сбалансировать таким образом все коробки, как все вещи и должны быть?

Входные данные

Первая строка ввода содержит одно целое число \(k\) (\(1 \leq k \leq 15\)), количество коробок.

\(i\)-я из следующих \(k\) строк начинается с одного целого числа \(n_i\) (\(1 \leq n_i \leq 5\,000\)), количества чисел в коробке с номером \(i\). Затем та же строка содержит \(n_i\) чисел \(a_{i,1}, \ldots, a_{i,n_i}\) (\(|a_{i,j}| \leq 10^9\)), числа, которые находятся в \(i\)-й коробке.

Гарантируется, что все числа \(a_{i,j}\) различны.

Выходные данные

Если Уджан не может достичь своей цели, выведите «No». В противоположном случае выведите сначала «Yes», и затем выведите \(k\) строк. \(i\)-я из этих строк должна содержать два целых числа \(c_i\) и \(p_i\). Эти числа должны означать то, что Уджан выберет число \(c_i\) из \(i\)-й коробки и поместит его в \(p_i\)-ю коробку.

Если существует больше одного решения, выведите любое.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом примере Уджан может поместить число \(7\) во \(2\)-ю коробку, число \(2\) в \(3\)-ю коробку, число \(5\) в \(1\)-ю коробку, а число \(10\) оставить в той же \(4\)-й коробке. Тогда коробки будут содержать числа \(\{1,5,4\}\), \(\{3, 7\}\), \(\{8,2\}\) и \(\{10\}\). Сумма чисел в каждой коробке станет равна \(10\).

Во втором примере невозможно выбрать и перераспределить числа данным способом.

В третьем примере можно поменять местами числа \(-20\) и \(-10\), тогда сумма чисел в обеих коробках станет равна \(-10\).

D. Покраска вершин

графы Деревья дп Конструктив Перебор реализация *1800

Вам задано дерево, состоящее из \(n\) вершин. Дерево — это связный неориентированный граф, не содержащий циклов.

Пример дерева.

Вы должны покрасить каждую вершину дерева в один из трех цветов. Для каждой вершины известна стоимость ее покраски в каждый из трех цветов.

Вам нужно покрасить все вершины таким образом, чтобы в любом пути, состоящем ровно из трех различных вершин, цвета всех этих трех вершин были различны. Иными словами, рассмотрим все такие тройки вершин \((x, y, z)\), что \(x \neq y, y \neq z, x \neq z\), вершина \(x\) соединена ребром с вершиной \(y\), а вершина \(y\) соединена ребром с вершиной \(z\). Тогда цвета вершин \(x\), \(y\) и \(z\) должны быть попарно различны. Назовем такую покраску вершин хорошей.

Перед вами стоит задача определить минимальную стоимость хорошей покраски дерева, а также в какой цвет необходимо покрасить каждую из вершин. Если не существует ни одной хорошей покраски дерева, сообщите об этом.

Входные данные

В первой строке следует целое число \(n\) \((3 \le n \le 100\,000)\) — количество вершин в дереве.

Во второй строке следует последовательность \(c_{1, 1}, c_{1, 2}, \dots, c_{1, n}\) \((1 \le c_{1, i} \le 10^{9})\), где \(c_{1, i}\) равно стоимости покраски \(i\)-й вершины в первый цвет.

В третьей строке следует последовательность \(c_{2, 1}, c_{2, 2}, \dots, c_{2, n}\) \((1 \le c_{2, i} \le 10^{9})\), где \(c_{2, i}\) равно стоимости покраски \(i\)-й вершины во второй цвет.

В четвертой строке следует последовательность \(c_{3, 1}, c_{3, 2}, \dots, c_{3, n}\) \((1 \le c_{3, i} \le 10^{9})\), где \(c_{3, i}\) равно стоимости покраски \(i\)-й вершины в третий цвет.

В каждой из следующих \((n - 1)\) строк следует по два целых числа \(u_j\) и \(v_j\) \((1 \le u_j, v_j \le n, u_j \neq v_j)\) — номера вершин, соединенных неориентированным ребром \(j\). Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Если не существует хорошей покраски дерева, выведите \(-1\).

В противном случае, в первой строке выведите минимальную стоимость хорошей покраски графа. Во второй строке выведите \(n\) целых чисел \(b_1, b_2, \dots, b_n\) \((1 \le b_i \le 3)\), где \(i\)-е число должно быть равно цвету, в который нужно покрасить вершину \(i\). Если подходящих покрасок минимальной стоимости несколько, разрешается вывести любую из них.

Примечание

В первом примере три вершины, поэтому все они должны быть покрашены в разные цвета. Первую вершину нужно покрасить в цвет \(1\), вторую вершину — в цвет \(3\), а третью вершину — в цвет \(2\). Стоимость такой покраски равна \(3 + 2 + 1 = 6\).

B. Камень-ножницы-бумага с ограничениями

дп жадные алгоритмы Конструктив *1200

Пусть \(n\) — некоторое положительное целое число, а \(a, b, c\) — некоторые неотрицательные целые числа такие, что \(a + b + c = n\).

Алиса и Боб собираются сыграть в камень-ножницы-бумага \(n\) раз. Алиса знает последовательность жестов, которые будет играть Боб. Однако она должна сыграть камень ровно \(a\) раз, бумагу — ровно \(b\) раз, а ножницы — ровно \(c\) раз.

Обратите внимание, что хоть игра и называется камень-ножницы-бумага, для синхронизации с английским названием все обозначения идут в порядке камень-бумага-ножницы.

Алиса выигрывает, если она побеждает Боба хотя бы в \(\lceil \frac{n}{2} \rceil\) (\(\frac{n}{2}\), округленное вверх до ближайшего целого) раундах, иначе — проигрывает.

Напоминаем, что в камень-ножницы-бумага:

  • камень побеждает ножницы;
  • бумага побеждает камень;
  • ножницы побеждают бумагу.

Ваша задача — по заданной последовательности жестов, которые будет играть Боб, и по числам \(a, b, c\), определить, может ли Алиса выиграть. И если может, то найти некоторую последовательность жестов, которая приведет Алису к победе.

Если существует несколько решений, выведите любое из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте.

Затем следуют \(t\) наборов входных данных, каждый из которых состоит из трех строк:

  • В первой строке записано одно целое число \(n\) (\(1 \le n \le 100\)).
  • Во второй строке записаны три целых числа \(a, b, c\) (\(0 \le a, b, c \le n\)). Гарантируется, что \(a + b + c = n\).
  • В третьей строке содержится последовательность жестов \(s\) длины \(n\). \(s\) состоит только из символов 'R', 'P' и 'S'. \(i\)-й символ равен 'R', если Боб в \(i\)-м раунде выбирает камень, 'P' — если бумагу и 'S' — если ножницы.
Выходные данные

Для каждого набора входных данных:

  • Если Алиса не может выиграть, то выведите «NO» (без кавычек).
  • Иначе выведите «YES» (без кавычек). Также выведите строку \(t\) длины ровно \(n\), которая состоит только из символов 'R', 'P' и 'S' — последовательность жестов, которую должна сыграть Алиса, чтобы выиграть. В \(t\) должно быть ровно \(a\) букв 'R', ровно \(b\) букв 'P' и ровно \(c\) букв 'S'.
  • Если существует несколько решений, выведите любое из них.

В части вывода с «YES»/«NO» регистр букв не имеет значения (например, «yEs», «no» or «YEs» — все корректные значения). Обратите внимание, что в 'R', 'P' и 'S' регистр важен.

Примечание

В первом наборе входных данных примера, в первой игре Алиса выбирает бумагу, а Боб выбирает камень, поэтому Алиса побеждает Боба. Во второй игре Алиса выбирает ножницы, а Боб выбирает бумагу, поэтому Алиса побеждает Боба. В третьей игре Алиса выбирает камень, а Боб выбирает ножницы, поэтому Алиса побеждает Боба. Алиса побеждает Боба 3 раза, и \(3 \ge \lceil \frac{3}{2} \rceil = 2\), поэтому Алиса выигрывает.

Во втором наборе входных данных примера единственная последовательность жестов, которые может выбрать Алиса — это «RRR». Алиса побеждает Боба только в последней игре, поэтому Алиса не может выиграть: \(1 < \lceil \frac{3}{2} \rceil = 2\).

C. Аппарат Констанции

дп *1400

Констанция — самая умная девушка в своей деревне, но вот зрением она не блещет.

Однажды она изобрела невероятный аппарат! Когда вы произносите букву, аппарат записывает ее на лист бумаги. Например, если вы произнесете буквы 'c', 'o', 'd' и 'e' в таком порядке, то аппарат запишет «code» на бумаге. Благодаря этому изобретению, она наконец-то может писать письма, не надевая очки.

Однако ее глупый друг Акко решил над ней подшутить. Акко испортил аппарат так, что если произнести 'w', то будет записано «uu» вместо «w», и если произнести 'm', то будет записано «nn» вместо «m». Так как зрение у Констанции довольно плохое, она не заметила, что Акко сделал.

Остальные буквы работают так же, как и прежде — если произнести любую букву, кроме 'w' и 'm', то аппарат просто запишет ее на бумаге.

На следующий день я получил письмо. Я его не смог разобрать, так что я решил, что это либо какая-то тарабарщина от Акко, либо то, что записала Констанция своим аппаратом. Но так как мне известно, что совершил Акко, мне захотелось перечислить все возможные строки, которые могли получиться в результате записи аппаратом Констанции, чтобы посмотреть, могло ли это быть посланным сообщением.

Таким образом, мне хочется узнать, сколько понадобится бумаги для этой затеи. В этом мне не помешает твоя помощь. Подскажи мне количество строк, которые аппарат Констанции мог превратить в полученное мной сообщение.

Так как данное число могло получиться довольно большим, сообщи мне остаток от его деления на \(10^9+7\).

Если не существует ни одной такой строки, что аппарат Констанции мог превратить их в полученное мной сообщение, то выведите \(0\).

Входные данные

В единственной строке содержится строка \(s\) (\(1 \leq |s| \leq 10^5\)) — полученное сообщение. \(s\) содержит только строчные латинские буквы.

Выходные данные

Выведите одно целое число — количество строк, которые аппарат Констанции мог превратить в полученное мной сообщение \(s\), по модулю \(10^9+7\).

Примечание

В первом примере возможные строки: «ouuokarinn», «ouuokarim», «owokarim» и «owokarinn».

Во втором примере есть только одна строка: «banana».

В третьем примере возможные строки: «nm», «mn» и «nnn».

В последнем примере нет ни одной строки, которую аппарат бы вывел как «amanda», так как аппарат не может напечатать 'm'.

E. Хиякугоку и лестницы

дп кратчайшие пути Теория вероятностей *2300

Хиякугоку недавно покинула должность местного божежства Южного Храма Черной Улитки в погоне за своей мечтой стать художником мультфильмов. Шесть месяцев она только и делала, что играла в веревочку («Cat's Cradle»), и теперь решила попробовать новую игру — «Змеи и лестницы» («Лила»). К сожалению, все змеи оказались истреблены, поэтому остались лишь только лестницы.

Игра происходит на доске \(10 \times 10\) по следующим правилам:

  • В начале игры игрок стоит в левой нижней клетке.
  • Цель игры заключается в достижении игроком финиша (левой верхней клетки). Как только он достигает финиша, игра заканчивается.
  • Путь выглядит следующим образом: если клетка находится не на краю ряда, то она ведет в следующую клетку по направлению движения ряда; если на краю, то ведет в ячейку выше. Направление движение ряда определяется так: направление в самом нижнем ряду — направо; направление в любом другом ряду противоположно направлению предыдущего ряда. В примечании есть изображение данного маршрута.
  • На каждом ходу игрок бросает стандартный шестигранный кубик. Пусть выпало некоторое число \(r\). Если до финиша меньше \(r\) ходов, тогда игрок остается на месте (но ход считается сделанным). Иначе игрок делает ровно \(r\) шагов по своему пути и останавливается. Если игрок остановился в клетке, в которой находится основание лестницы, то игрок может выбрать, залезть по лестнице или нет. Если он выбирает не залезать, то к следующему ходу он остается в этой клетке.
  • В некоторых клетках есть лестницы. Лестницы расположены только вертикально — каждая ведет в ту же клетку в одном из рядов сверху.Игрок обязан остановиться в клетке, содержащей основание лестницы, после броска кубика, чтобы иметь возможность забраться по данной лестнице. После использования лестницы игрок оказывается в клетке, содержащей верхний конец лестницы. Нельзя слезть с лестницы в ходе восхождения. И если клетка, содержащая верхний конец лестницы, содержит также и основание другой лестницы, то вторую лестницу использовать нельзя.
  • Числа, написанные на кубике: 1, 2, 3, 4, 5 и 6 — у каждого одинаковая вероятность выпасть.

Обратите внимание, что:

  • возможно, что некоторые лестницы пересекаются, но игрок не может перелезть на другую лестницы, пока он использует первую.
  • возможно, что лестница ведет на самый верхний ряд, но не выше;
  • возможно, что две лестницы ведут в одну и ту же клетку;
  • возможно, что лестница ведет в клетку, в которой находится основание другой лестницы, но игрок не может воспользоваться второй, если он использовал первую;
  • игрок может только залезать вверх по лестнице, спускаться вниз не может.

Хиякугоку хочет как можно быстрее закончить игру. Поэтому на каждом ходу она выбирает, залезать по лестнице или нет, оптимальным способом. Помогите ей определить минимальное математическое ожидание количества ходов, которое может занять игра.

Входные данные

Входные данные состоят из десяти строк. В \(i\)-й строке записаны 10 неотрицательных целых чисел \(h_{i1}, h_{i2}, \dots, h_{i10}\). Если \(h_{ij}\) равно \(0\), то ячейка в \(i\)-й строке в \(j\)-м столбце не содержит лестницу. Иначе высота лестницы в данной клетке равна \(h_{ij}\), то есть ее использование приведет в клетку, которая на \(h_{ij}\) рядов сверху данной. Гарантируется, что \(0 \leq h_{ij} < i\). Также первое число первой строки и первое число поледней строки всегда равны \(0\), то есть стартовая и финишная клетки никогда не содержат лестниц.

Выходные данные

Выведите единственное вещественное число — минимальное математическое ожидание количества ходов, которые может занять игра. Ваш ответ будет засчитан, если его абсолютная или относительная ошибка не будет превосходить \(10^{-6}\).

Примечание

Визуализация пути и поле для второго примера:

Клетка с 'S' — это стартовая клетка, клетка с 'E' — финиш.

В первом примере лестниц нет.

Во втором примере поле выглядит, как на втором изображении (лестницы раскрашена для наглядности).

Возможно, что лестницы накладываются, как в случае с красной и желтой, а также с зеленой и синей лестницами. Так же возможно, что лестницы ведут на самый верхний ряд, как черная и синия лестницы. Однако выше лестницы вести не могут (вне границ поля). Еще возможно, что две лестницы ведут в одну и ту же ячейку, как в случае с красной и желтой лестницами. Еще обратите внимание, что красная и желтая лестницы ведут в клетку с основанием оранжевой лестницы. Тогда если игрок выберет забираться по красной или желтой лестнице, то по оранжевой будет нельзя забираться. Наконец, обратите внимание, что зеленая лестница проходит через основние синей лестницы. Игрок не может слезть с зеленой и перебраться на синию, пока он использует зеленую лестницу.

F. Даниэль и весенняя уборка

битмаски дп Комбинаторика Перебор *2300

В ходе проведения очередной весенней уборки, Даниэль нашел старый калькулятор, который ему очень понравился. Однако кажется, что что-то в нем сломано. Когда он хочет посчитать \(1 + 3\) c помощью калькулятора, он получает \(2\) вместо \(4\). Но при вычислении \(1 + 4\) ответ получается правильный, \(5\). Озадаченный таким поведением, он вскрыл калькулятор и нашел разгадку: полные сумматоры стали полусумматорами!

Теперь, когда он хочет посчитать \(a + b\) при помощи калькулатора, он получает ксор-сумму \(a \oplus b\) (определение можно прочитать по ссылке: https://ru.wikipedia.org/wiki/Сложение_по_модулю_2).

Но как он уже заметил ранее, калькулятор иногда выдает правильные ответы. Поэтому его интересует, при данных \(l\) и \(r\) сколько существует таких пар целых чисел \((a, b)\), для которых выполняются следующие условия: \(\)a + b = a \oplus b\(\) \(\)l \leq a \leq r\(\) \(\)l \leq b \leq r\(\)

Даниэль Бармен, однако, сейчас направляется в бар, а вернется только через пару часов. Он советует вам решить эту задачу до его возвращения, или же вы будете забанены.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте.

Затем следует \(t\) строк, в каждой записаны по два целых числа \(l\) и \(r\) (\(0 \le l \le r \le 10^9\)).

Выходные данные

Выведите \(t\) целых чисел, \(i\)-е число должно быть ответом на \(i\)-й набор входных данных.

Примечание

\(a \oplus b\) обозначает побитовое исключающее ИЛИ \(a\) и \(b\).

В первом примере подходящие пары: \((1, 2)\), \((1, 4)\), \((2, 1)\), \((2, 4)\), \((3, 4)\), \((4, 1)\), \((4, 2)\), и \((4, 3)\).

D1. Весь мир — задача по программированию (упрощённая версия)

дп жадные алгоритмы Перебор реализация *2000

Это упрощённая версия задачи. В этой версии \(n \le 500\).

Вася — опытный составитель задач для олимпиад по программированию. Как и все великие творцы, Вася столкнулся с творческим кризисом. Чтобы исправить ситуацию, Петя подарил ему строку, состоящую только из открывающих и закрывающих скобок. Петя считает, что красотой строки из скобок называется количество её циклических сдвигов, которые приводят к правильной скобочной последовательности.

Чтобы отвлечься от проблем, Вася хочет выбрать любые две позиции в строке (не обязательно различных) и поменять местами символы на этих позициях. Такую операция Вася проделает ровно один раз. Ему стало интересно, какой максимальной красоты строки можно добиться, применив данную операцию. Помогите ему.

Напомним, что последовательность \(s\) из круглых скобок называется правильной, если верно одно из:

  • \(s\) является пустой;
  • \(s\) равна «(\(t\))», где \(t\) — правильная скобочная последовательность;
  • \(s\) равна \(t_1 t_2\), то есть конкатенации \(t_1\) и \(t_2\), где \(t_1\) и \(t_2\) являются правильными скобочными последовательностями.

Например, последовательности «(()())», «()» являются правильными, а «)(» и «())» нет.

Циклическим сдвигом строки \(s\) длины \(n\) на \(k\) (\(0 \leq k < n\)) называется строка, представляющая собой конкатенацию (сложение) последних \(k\) символов строки \(s\) и первых \(n - k\) символов строки \(s\). Например, циклический сдвиг строки «(())()» на \(2\) равен «()(())».

Циклические сдвиги на \(i\) и \(j\) называются различными, если \(i \ne j\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 500\)) — длина строки, которую подарили Васе.

Вторая строка содержит одну строку, состоящую ровно из \(n\) символов, каждый из которых — либо открывающая скобка «(», либо закрывающая скобка «)».

Выходные данные

В первой строке выведите одно целое число — максимальную красоту строки, которую можно получить, поменяв местами какие-то два символа.

Во второй строке выведите целые числа \(l\) и \(r\) (\(1 \leq l, r \leq n\)) — номера символов, которые нужно поменять местами, чтобы максимизировать красоту строки.

Если возможных замен несколько, выведите любую из них.

Примечание

В первом примере после обмена местами \(7\)-й и \(8\)-й скобок получается строка «()()()()()», её циклические сдвиги на \(0, 2, 4, 6, 8\) являются правильными скобочными последовательностями.

Во втором примере после обмена местами \(5\)-й и \(10\)-й скобок получается строка «)(())()()(()», её циклические сдвиги на \(11, 7, 5, 3\) являются правильными скобочными последовательностями.

В третьем примере какие бы две скобки мы не поменяли местами, число циклических сдвигов, являющихся правильными скобочными последовательностями, будет равно \(0\).

E. На лифте или по лестнице?

дп кратчайшие пути *1700

Вы планируете купить квартиру в \(n\)-этажном здании. Этажи пронумерованы от \(1\) до \(n\) в порядке снизу вверх. Сначала вы хотите узнать для каждого этажа минимально возможное время, необходимое для того, чтобы добраться до него с первого (нижнего) этажа.

Пусть:

  • \(a_i\) для всех \(i\) от \(1\) до \(n-1\) равно времени, необходимому для того, чтобы добраться с \(i\)-го этажа на \((i+1)\)-й (а также с \((i+1)\)-го на \(i\)-й) по лестнице;
  • \(b_i\) для всех \(i\) от \(1\) до \(n-1\) равно времени, необходимому для того, чтобы добраться с \(i\)-го этажа на \((i+1)\)-й (а также с \((i+1)\)-го на \(i\)-й) при помощи лифта, но здесь также есть дополнительное время \(c\) — дополнительное время за использование лифта (вам необходимо ждать его, также двери лифта очень медленные!).

За один ход вы можете добраться с этажа, на котором вы сейчас стоите, \(x\) до любого этажа \(y\) (\(x \ne y\)) двумя различными способами:

  • Если вы идете по лестнице, то это просто сумма соответствующих значений \(a_i\). Формально, это займет \(\sum\limits_{i=min(x, y)}^{max(x, y) - 1} a_i\) единиц времени.
  • Если вы используете лифт, то это просто сумма \(c\) и соответствующих значений \(b_i\). Формально, it это займет \(c + \sum\limits_{i=min(x, y)}^{max(x, y) - 1} b_i\) единиц времени.

Вы можете выполнять любое количество ходов (возможно, нулевое).

Таким образом, ваша задача — определить для каждого \(i\) минимально возможное суммарное время, чтобы достичь \(i\)-й этаж с \(1\)-го (нижнего) этажа.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(c\) (\(2 \le n \le 2 \cdot 10^5, 1 \le c \le 1000\)) — количество этажей и дополнительное время, которое тратится при использовании лифта.

Вторая строка входных данных содержит \(n - 1\) целых чисел \(a_1, a_2, \dots, a_{n-1}\) (\(1 \le a_i \le 1000\)), где \(a_i\) авно времени, необходимому для того, чтобы добраться с \(i\)-го этажа на \((i+1)\)-й (а также с \((i+1)\)-го на \(i\)-й) по лестнице.

Третья строка входных данных содержит \(n - 1\) целое число \(b_1, b_2, \dots, b_{n-1}\) (\(1 \le b_i \le 1000\)), где \(b_i\) равно времени, необходимому для того, чтобы добраться с \(i\)-го этажа на \((i+1)\)-й (а также с \((i+1)\)-го на \(i\)-й) при помощи лифта.

Выходные данные

Выведите \(n\) целых чисел \(t_1, t_2, \dots, t_n\), где \(t_i\) равно минимально возможному суммарному времени, чтобы достичь \(i\)-й этаж с первого этажа, если вы можете выполнять любое количество ходов.

F. Подмножество максимального веса

Деревья дп *2200

Вам задано дерево, состоящее из \(n\) вершин. Напомним что дерево — это связный неориентированный граф без циклов

Пример дерева.

Вершины пронумерованы от \(1\) до \(n\). Все вершины имеют вес, вес вершины \(v\) равен \(a_v\).

Напомним, что дистанция между двумя вершинами в дереве равна количеству ребер на простом пути между ними.

Ваша задача — найти подмножество вершин максимального суммарного веса (вес подмножества равен сумме весов всех вершин в нем) такое, что в этом подмножестве нет пары вершин на расстоянии \(k\) или меньше.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 200\)) — количество вершин в дереве и ограничение на расстояние соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)), где \(a_i\) равно весу вершины \(i\).

Следующие \(n - 1\) строк описывают ребра дерева. Ребро \(i\) описано двумя целыми числами \(u_i\) и \(v_i\) — номерами вершин, которые оно соединяет (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)).

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите одно целое число — максимально возможный суммарный вес подмножества, в котором все пары вершин находятся на расстоянии более \(k\).

D. Conference Problem

дп *3000

A large-scale conference on unnatural sciences is going to be held soon in Berland! In total, \(n\) scientists from all around the world have applied. All of them have indicated a time segment when they will attend the conference: two integers \(l_i\), \(r_i\) — day of arrival and day of departure.

Also, some of the scientists have indicated their country, while some preferred not to. So, each scientist also has a value \(c_i\), where:

  • \(c_i > 0\), if the scientist is coming from country \(c_i\) (all countries are numbered from \(1\) to \(200\));
  • \(c_i = 0\), if the scientist preferred to not indicate the country.

Everyone knows that it is interesting and useful to chat with representatives of other countries! A participant of the conference will be upset if she will not meet people from other countries during the stay. It is possible to meet people during all time of stay, including the day of arrival and the day of departure.

Conference organizers need to be ready for the worst! They are interested in the largest number \(x\), that it is possible that among all people attending the conference exactly \(x\) will be upset.

Help the organizers to find the maximum number of upset scientists.

Input

The first line of the input contains integer \(t\) (\(1 \le t \le 100\)) — number of test cases. Then the test cases follow.

The first line of each test case contains integer \(n\) (\(1 \le n \le 500\)) — the number of registered conference participants.

Next \(n\) lines follow, each containing three integers \(l_i\), \(r_i\), \(c_i\) (\(1 \le l_i \le r_i \le 10^6\), \(0 \le c_i \le 200\)) — the day of arrival, the day of departure and the country (or the fact that it was not indicated) for the \(i\)-th participant.

The sum of \(n\) among all test cases in the input does not exceed \(500\).

Output

Output \(t\) integers — maximum number of upset scientists for each test case.

G. Discarding Game

дп жадные алгоритмы *2300

Eulampius has created a game with the following rules:

  • there are two players in the game: a human and a computer;
  • the game lasts for no more than \(n\) rounds. Initially both players have \(0\) points. In the \(j\)-th round the human gains \(a_j\) points, and the computer gains \(b_j\) points. The points are gained simultaneously;
  • the game ends when one of the players gets \(k\) or more points. This player loses the game. If both players get \(k\) or more points simultaneously, both lose;
  • if both players have less than \(k\) points after \(n\) rounds, the game ends in a tie;
  • after each round the human can push the "Reset" button. If the human had \(x\) points, and the computer had \(y\) points before the button is pushed (of course, \(x < k\) and \(y < k\)), then after the button is pushed the human will have \(x' = max(0, \, x - y)\) points, and the computer will have \(y' = max(0, \, y - x)\) points. E. g. the push of "Reset" button transforms the state \((x=3, \, y=5)\) into the state \((x'=0, \, y'=2)\), and the state \((x=8, \, y=2)\) into the state \((x'=6, \, y'=0)\).

Eulampius asked his friend Polycarpus to test the game. Polycarpus has quickly revealed that amounts of points gained by the human and the computer in each of \(n\) rounds are generated before the game and stored in a file. In other words, the pushes of the "Reset" button do not influence the values \(a_j\) and \(b_j\), so sequences \(a\) and \(b\) are fixed and known in advance.

Polycarpus wants to make a plan for the game. He would like to win the game pushing the "Reset" button as few times as possible. Your task is to determine this minimal number of pushes or determine that Polycarpus cannot win.

Input

The first line of the input contains one integer \(t\) (\(1 \le t \le 10000\)) — the number of test cases. Then the test cases follow.

The first line of each test case contains two integers \(n\) and \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(2 \le k \le 10^9\)) — the maximum possible number of rounds in the game and the number of points, after reaching which a player loses, respectively.

The second line of each test case contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(1 \le a_j < k)\), where \(a_j\) is the amount of points the human gains in the \(j\)-th round.

The third line of each test case contains \(n\) integers \(b_1, b_2, \dots, b_n\) (\(1 \le b_j < k\)), where \(b_j\) is the amount of points the computer gains in the \(j\)-th round.

The sum of \(n\) over all test cases in the input does not exceed \(2 \cdot 10^5\).

Output

Print the answers for all test cases in the order they appear in the input.

If Polycarpus cannot win the game, then simply print one line "-1" (without quotes). In this case, you should not output anything else for that test case. Otherwise, the first line of the test case answer should contain one integer \(d\) — the minimum possible number of "Reset" button pushes, required to win the game. The next line should contain \(d\) distinct integers \(r_1, r_2, \dots, r_d\) (\(1 \le r_i < n\)) — the numbers of rounds, at the end of which Polycarpus has to press the "Reset" button, in arbitrary order. If \(d=0\) then either leave the second line of the test case answer empty, or do not print the second line at all.

If there are several possible solutions, print any of them.

Note

In the second test case, if the human pushes the "Reset" button after the second and the fourth rounds, the game goes as follows:

  1. after the first round the human has \(5\) points, the computer — \(4\) points;
  2. after the second round the human has \(7\) points, the computer — \(10\) points;
  3. the human pushes the "Reset" button and now he has \(0\) points and the computer — \(3\) points;
  4. after the third round the human has \(8\) points, the computer — \(6\) points;
  5. after the fourth round the human has \(10\) points, the computer — \(9\) points;
  6. the human pushes "Reset" button again, after it he has \(1\) point, the computer — \(0\) points;
  7. after the fifth round the human has \(5\) points, the computer — \(5\) points;
  8. after the sixth round the human has \(11\) points, the computer — \(6\) points;
  9. after the seventh round the human has \(12\) points, the computer — \(13\) points;
  10. after the eighth round the human has \(14\) points, the computer — \(17\) points;
  11. the human wins, as the computer has \(k\) or more points and the human — strictly less than \(k\) points.

E1. Голосование (упрощённая версия)

дп жадные алгоритмы Структуры данных *2300

Единственное отличие между простой и сложной версиями — ограничения.

Сейчас в Берляндии проходят выборы и вы хотите победить в них. А точнее, вы не просто хотите победить, а сделать так, чтобы все проголосовали за вас.

Всего есть \(n\) голосующих и два варианта сделать так, чтобы они проголосовали за вас. Первый вариант это заплатить \(i\)-му голосующему \(p_i\) монет. Второй вариант, это сделать так, чтобы \(m_i\) других людей проголосовало за вас, и тогда \(i\)-й голосующий проголосует бесплатно.

Более того, процесс такого голосования проходит в несколько шагов. Например, если есть пять голосующих \(m_1 = 1\), \(m_2 = 2\), \(m_3 = 2\), \(m_4 = 4\), \(m_5 = 5\), то вы можете купить голос пятого, и в конце концов все проголосуют за вас. Множество людей, голосующих за вас, будет меняться следующим образом: \({5} \rightarrow {1, 5} \rightarrow {1, 2, 3, 5} \rightarrow {1, 2, 3, 4, 5}\).

Посчитайте минимально количество монет, которое вам нужно потратить, чтобы все проголосовали за вас.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит число \(n\) (\(1 \le n \le 5000\)) — количество голосующих.

Следующие \(n\) строк содержат описание голосующих. \(i\)-я строка содержит два числа \(m_i\) и \(p_i\) (\(1 \le p_i \le 10^9, 0 \le m_i < n\)).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(5000\).

Выходные данные

На каждый набор выведите одно число — минимально количество монет, которое вам нужно потратить, чтобы все проголосовали за вас.

Примечание

В первом наборе вам нужно купить голос третьего голосующего. Тогда множество людей, голосующих за вас, будет меняться следующим образом: \({3} \rightarrow {1, 3} \rightarrow {1, 2, 3}\).

Во втором наборе вам не нужно покупать голоса. Множество людей, голосующих за вас, будет меняться следующим образом: \({1} \rightarrow {1, 3, 5} \rightarrow {1, 2, 3, 5} \rightarrow {1, 2, 3, 5, 6, 7} \rightarrow {1, 2, 3, 4, 5, 6, 7}\).

В третьем наборе вам нужно купить голоса второго и пятого голосующих. Тогда множество людей, голосующих за вас, будет меняться следующим образом: \({2, 5} \rightarrow {1, 2, 3, 4, 5} \rightarrow {1, 2, 3, 4, 5, 6}\).

B. Cleaning Robots

Деревья дп *2300

The new ICPC town has \(N\) junctions (numbered from \(1\) to \(N\)) which are connected by \(N-1\) roads. It is possible from one junction to go to any other junctions by going through one or more roads. To make sure all the junctions are well-maintained, the government environment agency is planning to deploy their newest advanced cleaning robots. In addition to its cleaning ability, each robot is also equipped with a movement ability such that it can move from one junction to any other junctions connected by roads. However, as you might have guessed, such robots are not cheap. Therefore, the agency is considering the following deployment plan.

Let \(T_k\) be the set of junctions which should be cleaned by the \(k^{th}\) robot (also known as, the robot's task), and \(|T_k| \ge 1\) be the number of junctions in \(T_k\). The junctions in \(T_k\) form a path, i.e. there exists a sequence of \(v_1, v_2, \dots, v_{|T_k|}\) where \(v_i \in T_k\) and \(v_i \neq v_j\) for all \(i \neq j\) such that each adjacent junction in this sequence is connected by a road. The union of \(T\) for all robots is equal to the set of all junctions in ICPC town. On the other hand, no two robots share a common junction, i.e. \(T_i \cap T_j = \emptyset\) if \(i \neq j\).

To avoid complaints from citizens for an inefficient operation, the deployment plan should be irreducible; in other words, there should be no two robots, \(i\) and \(j\), such that \(T_i \cup T_j\) forms a (longer) path. Note that the agency does not care whether the number of robots being used is minimized as long as all the tasks are irreducible.

Your task in this problem is to count the number of feasible deployment plan given the town's layout. A plan is feasible if and only if it satisfies all the above-mentioned requirements.

For example, let \(N = 6\) and the roads are \(\{(1,3),(2,3),(3,4),(4,5),(4,6)\}\). There are \(5\) feasible deployment plans as shown in the following figure.

  • The first plan uses \(2\) robots (labeled as A and B in the figure) to clean \(\{1,2,3\}\) and \(\{4,5,6\}\).
  • The second plan uses \(3\) robots (labeled as A, B, and C in the figure) to clean \(\{1,3,4,6\}\), \(\{2\}\), and \(\{5\}\).
  • The third plan uses \(3\) robots to clean \(\{1,3,4,5\}\), \(\{2\}\), and \(\{6\}\).
  • The fourth plan uses \(3\) robots to clean \(\{1\}\), \(\{2,3,4,6\}\), and \(\{5\}\).
  • The fifth plan uses \(3\) robots to clean \(\{1\}\), \(\{2,3,4,5\}\), and \(\{6\}\).
No other plans are feasible in this case. For example, the plan \(\{\{1,3\},\{2\},\{4,5,6\}\}\) is not feasible as the task \(\{1,3\}\) and \(\{2\}\) can be combined into a longer path \(\{1,3,2\}\). The plan \(\{\{1,2,3,4\},\{5\},\{6\}\}\) is also not feasible as \(\{1,2,3,4\}\) is not a path.
Input

Input begins with a line containing an integer: \(N\) (\(1 \le N \le 100\,000\)) representing the number of junctions. The next \(N-1\) lines each contains two integers: \(u_i\) \(v_i\) (\(1 \le u_i < v_i \le N\)) representing a road connecting junction \(u_i\) and junction \(v_i\). It is guaranteed that it is possible from one junction to go to any other junctions by going through one or more roads.

Output

Output in a line an integer representing the number of feasible deployment plans. As this output can be large, you need to modulo the output by \(1\,000\,000\,007\).

Note

Explanation for the sample input/output #1

This is the example from the problem description.

D. Find String in a Grid

Деревья дп Строки Структуры данных *3000

You have a grid \(G\) containing \(R\) rows (numbered from \(1\) to \(R\), top to bottom) and \(C\) columns (numbered from \(1\) to \(C\), left to right) of uppercase characters. The character in the \(r^{th}\) row and the \(c^{th}\) column is denoted by \(G_{r, c}\). You also have \(Q\) strings containing uppercase characters. For each of the string, you want to find the number of occurrences of the string in the grid.

An occurrence of string \(S\) in the grid is counted if \(S\) can be constructed by starting at one of the cells in the grid, going right \(0\) or more times, and then going down \(0\) or more times. Two occurrences are different if the set of cells used to construct the string is different. Formally, for each string \(S\), you would like to count the number of tuples \(\langle r, c, \Delta r, \Delta c \rangle\) such that:

  • \(1 \le r \le R\) and \(r \le r + \Delta r \le R\)
  • \(1 \le c \le C\) and \(c \le c + \Delta c \le C\)
  • \(S = G_{r, c} G_{r, c + 1} \dots G_{r, c + \Delta c} G_{r + 1, c + \Delta c} \dots G_{r + \Delta r, c + \Delta c}\)
Input

Input begins with a line containing three integers: \(R\) \(C\) \(Q\) (\(1 \le R, C \le 500\); \(1 \le Q \le 200\,000\)) representing the size of the grid and the number of strings, respectively. The next \(R\) lines each contains \(C\) uppercase characters representing the grid. The \(c^{th}\) character on the \(r^{th}\) line is \(G_{r, c}\). The next \(Q\) lines each contains a string \(S\) containing uppercase characters. The length of this string is a positive integer not more than \(200\,000\). The sum of the length of all \(Q\) strings combined is not more than \(200\,000\).

Output

For each query in the same order as input, output in a line an integer representing the number of occurrences of the string in the grid.

Note

Explanation for the sample input/output #1

  • There are \(2\) occurrences of "ABC", represented by the tuples \(\langle 1, 1, 1, 1 \rangle\) and \(\langle 1, 1, 0, 2 \rangle\).
  • There are \(3\) occurrences of "BC", represented by the tuples \(\langle 1, 2, 0, 1 \rangle\), \(\langle 1, 2, 1, 0 \rangle\), and \(\langle 2, 1, 0, 1 \rangle\).
  • There is \(1\) occurrence of "BD", represented by the tuple \(\langle 2, 1, 1, 0 \rangle\).
  • There is no occurrence of "AC".
  • There are \(2\) occurrences of "A", represented by the tuples \(\langle 1, 1, 0, 0 \rangle\) and \(\langle 3, 2, 0, 0 \rangle\).

J. Tiling Terrace

дп Перебор *2300

Talia has just bought an abandoned house in the outskirt of Jakarta. The house has a nice and long yard which can be represented as a one-dimensional grid containing \(1 \times N\) cells. To beautify the house, Talia is going to build a terrace on the yard by tiling the cells. Each cell on the yard contains either soil (represented by the character '.') or rock (represented by the character '#'), and there are at most \(50\) cells containing rocks.

Being a superstitious person, Talia wants to tile the terrace with mystical tiles that have the power to repel ghosts. There are three types of mystical tiles:

  • Type-1: Covers \(1 \times 1\) cell and can only be placed on a soil cell (".").
  • Type-2: Covers \(1 \times 2\) cells and can only be placed on two consecutive soil cells ("..").
  • Type-3: Covers \(1 \times 3\) cells and can only be placed on consecutive soil-rock-soil cells (".#.").

Each tile of Type-1, Type-2, and Type-3 has the power to repel \(G_1\), \(G_2\), and \(G_3\) ghosts per day, respectively. There are also some mystical rules which must be followed for the power to be effective:

  • There should be no overlapping tiles, i.e. each cell is covered by at most one tile.
  • There should be at most \(K\) tiles of Type-1, while there are no limitations for tiles of Type-2 and Type-3.

Talia is scared of ghosts, thus, the terrace (which is tiled by mystical tiles) should be able to repel as many ghosts as possible. Help Talia to find the maximum number of ghosts that can be repelled per day by the terrace. Note that Talia does not need to tile all the cells on the yard as long as the number of ghosts that can be repelled by the terrace is maximum.

Input

Input begins with a line containing five integers: \(N\) \(K\) \(G_1\) \(G_2\) \(G_3\) (\(1 \le N \le 100\,000\); \(0 \le K \le N\); \(0 \le G_1, G_2, G_3 \le 1000\)) representing the number of cells, the maximum number of tiles of Type-1, the number of ghosts repelled per day by a tile of Type-1, the number of ghosts repelled per day by a tile of Type-2, and the number of ghosts repelled by a tile of Type-3, respectively. The next line contains a string of \(N\) characters representing the yard. Each character in the string is either '.' which represents a soil cell or '#' which represents a rock cell. There are at most \(50\) rock cells.

Output

Output in a line an integer representing the maximum number of ghosts that can be repelled per day.

Note

Explanation for the sample input/output #1

Let "A" be a tile of Type-1, "BB" be a tile of Type-2, and "CCC" be a tile of Type-3. The tiling "ACCCBB" in this case produces the maximum number of ghosts that can be repelled, i.e. \(10 + 40 + 25 = 75\)

Explanation for the sample input/output #2

This sample input has the same yard with the previous sample input, but each tile of Type-2 can repel more ghosts per day. The tiling "BB#BBA" or "BB#ABB" produces the maximum number of ghosts that can be repelled, i.e. \(100 + 100 + 10 = 210\). Observe that the third cell is left untiled.

Explanation for the sample input/output #3

The tiling "ACCCA.#", "ACCC.A#", or ".CCCAA#" produces the maximum number of ghosts that can be repelled, i.e. \(30 + 100 + 30 = 160\). Observe that there is no way to tile the last cell.

C. Поедание конфет

дп жадные алгоритмы математика сортировки *1500

Tsumugi купила \(n\) вкусных конфет в Light Music Club. Они пронумерованы целыми числами от \(1\) до \(n\), у \(i\)-й конфеты концентрация сахара описана целым числом \(a_i\).

Yui любит конфеты, но она может есть не более \(m\) конфет каждый день, из соображений здоровья.

Дни нумеруются в \(1\)-индексации (пронумерованы \(1, 2, 3, \ldots\)). Съесть конфету \(i\) в \(d\)-й день будет стоить \((d \cdot a_i)\) сахарного штрафа, так как со временем конфеты становятся более сладкими. Каждая конфета может быть съедена не более одного раза.

Итоговый сахарный штраф равен сумме сахарных штрафов всех съеденных конфет.

Предположим, что Yui выбирает ровно \(k\) конфет, и ест их в любом порядке, в каком захочет. Какой минимальный сахарный штраф она может получить?

Так как Yui нерешительная девушка, она просит ответить вас на этот вопрос для всех \(k\) от \(1\) до \(n\).

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le m \le n \le 200\ 000\)).

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 200\ 000\)).

Выходные данные

Вы должны вывести \(n\) целых чисел \(x_1, x_2, \ldots, x_n\) в отдельной строке, разделяя пробелами, где \(x_k\) это минимальный сахарный штраф который Yui может получить, съев ровно \(k\) конфет.

Примечание

Проанилизируем ответ для \(k = 5\) первого примера. Вот один из возможных способов съесть \(5\) конфет, чтобы минимизировать суммарный сахарный штраф:

  • День \(1\): конфеты \(1\) и \(4\)
  • День \(2\): конфеты \(5\) и \(3\)
  • День \(3\) : конфета \(6\)

Итоговый штраф равен \(1 \cdot a_1 + 1 \cdot a_4 + 2 \cdot a_5 + 2 \cdot a_3 + 3 \cdot a_6 = 6 + 4 + 8 + 6 + 6 = 30\). Мы можем доказать, что это минимальный возможный сахарный штраф, который Yui может получить если она съест \(5\) конфет, таким образом \(x_5 = 30\).

E. Покрытие антеннами

дп жадные алгоритмы сортировки Структуры данных *2200

Мэр Центрального Города решил модернизировать Центральную Улицу, представленную в этой задаче в виде оси \((Ox)\).

На этой улице стоит \(n\) антенн, пронумерованных от \(1\) до \(n\). \(i\)-я антенна стоит в точке \(x_i\) и имеет изначальный радиус \(s_i\): Она покрывает все целые точки в интервале \([x_i - s_i; x_i + s_i]\).

Возможно увеличить радиус любой антенны на \(1\), эта операция стоит \(1\) монету. Мы можем выполнять эту операцию сколько угодно раз (несколько раз для одной и той же антенны, если хотим).

Чтобы модернизировать улицу, нам необходимо, чтобы все целые точки от \(1\) до \(m\) включительно были покрыты хотя бы одной антенной. Обратите внимание, что разрешается покрывать точки за пределами интервала \([1; m]\), однако, это не требуется.

Какое минимальное количество монет требуется, чтобы добиться модернизации?

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 80\) и \(n \le m \le 100\ 000\)).

В \(i\)-й из следующих \(n\) строк записаны два целых числа \(x_i\) и \(s_i\) (\(1 \le x_i \le m\) and \(0 \le s_i \le m\)).

На каждой позиции стоит не более одной антенны (все позиции \(x_i\) попарно различны).

Выходные данные

Выведите одно целое число: минимальное количество монет, которое нужно, чтобы все позиции от \(1\) до \(m\) покрывались хотя бы одной антенной.

Примечание

В первом примере, одна из возможных стратегий это:

  • Увеличить радиус первой антенны на \(40\), чтобы он стал \(2 + 40 = 42\). Эта антенна будет покрывать интервал \([43 - 42; 43 + 42]\), который равен \([1; 85]\)
  • Увеличить радиус второй антенны на \(210\), чтобы он стал \(4 + 210 = 214\). Эта антенна будет покрывать интервал \([300 - 214; 300 + 214]\), который равен \([86; 514]\)
  • Увеличить радиус третьей антенны \(31\), чтобы он стал \(10 + 31 = 41\). Эта антенна будет покрывать интервал \([554 - 41; 554 + 41]\), равный \([513; 595]\)

Итоговая стоимость равна \(40 + 210 + 31 = 281\). Можно показать, что это минимальная стоимость, необходимая, чтобы интервал от \(1\) до \(595\) был покрыт хотя бы одной антенной.

Обратите внимание, что точки \(513\) и \(514\) в этом решении покрыты двумя антеннами, но это не важно.

Во втором примере, первая антенна исходно покрывает интервал \([0; 2]\), так что нам не нужно ничего делать.

Обратите внимание, что единственная позиция, которую вам нужно покрыть это \(1\); позиции \(0\) и \(2\) покрыты, но это не важно.

E. Очередное разделение на команды

дп жадные алгоритмы сортировки *2000

В вашем университете обучается \(n\) студентов. Умение программировать \(i\)-го студента равно \(a_i\). Как тренер, вы хотите разделить их на команды, чтобы приготовить к предстоящему финалу ICPC. Просто представьте, насколько хорош этот университет, если в нем есть \(2 \cdot 10^5\) студентов, готовых к финалу!

Каждая команда должна состоять из хотя бы трех студентов. Каждый студент должен принадлежать ровно одной команде. Разнообразием команды называется разница между максимальным умением программировать какого-то студента, принадлежащего этой команде, и минимальным умением программировать какого-то студента, принадлежащего этой команде (другими словами, если команда состоит из \(k\) студентов с умениями программировать \(a[i_1], a[i_2], \dots, a[i_k]\), то разнообразность этой команды равна \(\max\limits_{j=1}^{k} a[i_j] - \min\limits_{j=1}^{k} a[i_j]\)).

Суммарная разнообразность — это сумма разнообразностей по всем собранным команда.

Ваша задача — минимизировать суммарную разнообразность разделения студентов и найти оптимальный способ их разделить.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество студентов.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно умению программировать \(i\)-го студента.

Выходные данные

В первой строке выведите два целых числа \(res\) и \(k\) — минимально возможную разнообразность разделения и количество команд в вашем разделении соответственно.

Во второй строке выведите \(n\) целых чисел \(t_1, t_2, \dots, t_n\) (\(1 \le t_i \le k\)), где \(t_i\) равно номеру команды, к которой принадлежит \(i\)-й студент.

Если существует несколько возможных ответов, выведите любой. Заметьте, что нет необходимости минимизировать количество команд. Каждая команда должна состоять хотя бы из трех студентов.

Примечание

В первом тестовом примере есть только одна команда с умениями \([1, 1, 2, 3, 4]\), таким образом, ответ равен \(3\). Можно показать, что вы не можете достичь ответа лучше.

Во втором тестовом примере есть две команды с умениями \([1, 2, 5]\) и \([12, 13, 15]\), таким образом, ответ равен \(4 + 3 = 7\).

В третьем тестовом примере есть три команды с умениями \([1, 2, 5]\), \([129, 185, 581, 1041]\) и \([1580, 1909, 8150]\), таким образом, ответ равен \(4 + 912 + 6570 = 7486\).

D. Очередная задача на сражение с монстрами

Бинарный поиск дп жадные алгоритмы сортировки Структуры данных *1700

Вы играете в компьютерную игру. В этой игре вы являетесь главой партии из \(m\) героев, и вам нужно зачистить подземелье, в котором находится \(n\) монстров. Каждый монстр характеризуется своей силой \(a_i\). Каждый герой характеризуется своей силой \(p_i\) и выносливостью \(s_i\).

Герои чистят подземелье день за днем. В начале каждого дня вы выбираете героя (ровно одного), который пойдет в подземелье в этот день.

Когда герой заходит в подземелье, он начинает сражаться с первым монстром, не побежденным в прошлые дни (т. е. если уже было побеждено \(k\) монстров, то этот герой будет сражаться с монстром под номером \(k + 1\)). Когда герой сражается с монстром, возможно два варианта:

  • если сила монстра строго больше силы героя, то герой уходит из подземелья и день заканчивается;
  • иначе монстр считается побежденным.

После победы над монстром герой либо продолжает сражаться с монстрами, либо уходит из подземелья. Он уходит, если он в этот день победил количество монстров, равное его выносливости (таким образом, \(i\)-й герой не может победить больше \(s_i\) монстров в течение одного дня), либо если все монстры побеждены — в противном случае герой сражается со следующим монстром. Когда герой покидает пещеру, текущий день заканчивается.

Ваша задача — победить всех монстров. Какое минимальное количество дней вам понадобится для этого? Каждый день вы выбираете ровно одного героя; возможно, некоторые герои не будут сражаться вообще, а некоторые будут сражаться несколько раз.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Каждый набор данных выглядит следующим образом.

Первая строка содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество монстров в подземелье.

Вторая строка содержит \(n\) чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — сила \(i\)-го монстра.

Третья строка содержит целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество героев в вашей партии.

После следуют \(m\) строк, каждая описывает героя. Каждая такая строка содержит два числа \(p_i\) и \(s_i\) (\(1 \le p_i \le 10^9\), \(1 \le s_i \le n\)) — силу и выносливость \(i\)-го героя.

Гарантируется, что сумма \(n + m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно число — минимальное количество дней, которое вам нужно потратить для победы над всеми монстрами (или \(-1\), если это невозможно).

E. Контест

дп жадные алгоритмы Структуры данных *2000

Команда из трех человек пришла писать контест. Всего в контесте есть \(n\) задач, пронумерованных от \(1\) до \(n\). Каждая задача находится ровно на одном листе. Участники по привычке решили разделить условия на три части: первый взял какой-то префикс листов (какое-то количество первых листов) из набора условий, третий взял какой-то суффикс листов (какое-то количество последних листов) из набора условий, а второй взял себе все то, что осталось. Но произошла непредвиденная ситуация — условия распечатались неправильно и порядок задач перемешался.

Таким образом, первый участник получил задачи с номерами \(a_{1, 1}, a_{1, 2}, \dots, a_{1, k_1}\). Второй — с номерами \(a_{2, 1}, a_{2, 2}, \dots, a_{2, k_2}\). Третий участник получил все оставшиеся задачи (\(a_{3, 1}, a_{3, 2}, \dots, a_{3, k_3}\)).

Ваша задача — сообщить, какое минимальное количество задач ребятам нужно передать друг другу, чтобы у первого из них был какой-то префикс задач, у третьего — какой-то суффикс задач, а у второго все оставшиеся. Одним действием считается именно передача одной задачи одним участником другому.

После процесса передач условий какой-то из участников может остаться без задач вообще. В том числе можно передать все задачи одному из участников.

Входные данные

Первая строка входных данных содержит три целых числа \(k_1, k_2\) и \(k_3\) (\(1 \le k_1, k_2, k_3 \le 2 \cdot 10^5, k_1 + k_2 + k_3 \le 2 \cdot 10^5\)) — количество задач, полученным первым участником, вторым участником и третьим участником, соответственно.

Вторая строка входных данных содержит \(k_1\) целых чисел \(a_{1, 1}, a_{1, 2}, \dots, a_{1, k_1}\) — номера задач, полученных первым участником.

Третья строка входных данных содержит \(k_2\) целых чисел \(a_{2, 1}, a_{2, 2}, \dots, a_{2, k_2}\) — номера задач, полученных вторым участником.

Четвертая строка входных данных содержит \(k_3\) целых чисел \(a_{3, 1}, a_{3, 2}, \dots, a_{3, k_3}\) — номера задач, полученных третьих участником.

Гарантируется, что среди всех заданных номеров задач нет совпадающих и для всех номеров задач \(a_{i, j}\) выполняется условие \(1 \le a_{i, j} \le n\), где \(n = k_1 + k_2 + k_3\).

Выходные данные

Выведите одно целое число — минимальное количество задач, которые ребятам нужно передать друг другу, чтобы у первого из них был какой-то префикс задач, у третьего — какой-то суффикс задач, а у второго все оставшиеся.

Примечание

В первом примере третий участник должен отдать задачу \(2\) первому участнику. Тогда у первого участника будут \(3\) первые задачи, у третьего — \(1\) последняя задача, а у второго — \(1\) оставшаяся задача.

Во втором примере распределение задач менять не нужно: у первого участника \(3\) первых задачи, у третьего участника \(1\) последняя задача, и у второго участника две \(2\) оставшиеся задачи.

В третьем примере выгодно отдать все задачи третьему участнику.

В четвертом примере выгодно отдать все задачи второму участнику.

B. Пароль

Бинарный поиск дп Строки строковые суфф. структуры хэши *1700

Астерикс, Обеликс и их временные спутники Суффикс и Префикс наконец нашли храм Гармонии. Однако его двери были прочно заперты, и даже Обеликсу было не под силу их открыть.

Чуть позже они обнаружили строку s, которая была высечена в камне над воротами храма. Астерикс предположил, что это пароль для входа в храм, и громко вслух произнес эту надпись. Однако ничего не произошло. Тогда Астерикс предположил, что паролем является некоторая подстрока t строки s.

Префикс считал, что строка t является началом строки s. Суффикс считал, что строки t должна быть концом строки s. Обеликс же посчитал, что t должна находиться где-то внутри строки s, то есть не являться ни ее началом, ни ее концом.

Астерикс выбрал подстроку t так, чтобы угодить всем своим спутникам. Кроме того, из всех допустимых вариантов Астерикс выбрал наиболее длинный (потому что Астерикс любит длинные строки). Когда Астерикс произнес строку t — двери храма открылись.

Вам известна строка s. Найдите строку t или определите, что таких строк не существует, а все написанное выше — всего лишь легенда.

Входные данные

Дана строка s длины от 1 до 106 (включительно), состоящая из строчных латинских букв.

Выходные данные

Выведите строку t. Если подходящей строки t не существует — выведите «Just a legend» без кавычек.

D. Фибоначчиевы суммы

дп математика *2300

Числа Фибоначчи имеют следующий вид:

F1 = 1, 
F2 = 2, 
Fi = Fi - 1 + Fi - 2, i > 2.

Рассмотрим какое-либо непустое множество S = {s1, s2, ..., sk}, состоящее из различных чисел Фибоначчи, и найдем сумму значений элементов этого множества:

Будем называть множество S разложением в фибоначчиеву сумму числа n.

Нетрудно видеть, что некоторые числа имеют несколько разложений в фибоначчиеву сумму. Например, для 13 имеем 13, 5 + 8, 2 + 3 + 8 — три разложения, а для 16: 3 + 13, 1 + 2 + 13, 3 + 5 + 8, 1 + 2 + 5 + 8 — четыре разложения.

По заданному числу n определите количество его различных разложений в фибоначчиеву сумму.

Входные данные

В первой строке находится целое число t — количество тестов (1 ≤ t ≤ 105). В каждой из последующих t строк находится по одному тесту.

Каждый тест — это целое число n (1 ≤ n ≤ 1018).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Для каждого теста из входных данных выведите одно число в отдельной строке — ответ на задачу.

Примечание

Два разложения различны если существует число, которое содержится в одном разложении, и не содержится в другом. Разложения, отличающиеся только порядком слагаемых, считаются одинаковыми.

D. Игра с ловушками

Бинарный поиск дп жадные алгоритмы сортировки *1900

Вы играете в компьютерную игру, в которой руководите \(m\) солдатами. У каждого солдата есть своя ловкость \(a_i\).

Уровень, который вы проходите, можно представить как отрезок прямой между точками \(0\) (где вы и ваш отряд изначально) и \(n + 1\) (где находится босс уровня).

Уровень заполнен \(k\) ловушками. Каждая ловушка характеризуется тремя числами \(l_i\), \(r_i\) и \(d_i\). \(l_i\) — точка, в которой расположена ловушка, а \(d_i\) — опасность ловушки: когда солдат с ловкостью меньше \(d_i\) наступает на нее (то есть перемещается в точку \(l_i\)), ловушка сразу же убивает его. К счастью, вы можете разряжать ловушки: если вы дойдете до точки \(r_i\), вы можете разрядить ловушку, и она больше не будет представлять угрозу. На вас ловушки не действуют, только на ваших солдат.

У вас есть \(t\) секунд на прохождение уровня — то есть на то, чтобы вы смогли доставить некоторых солдат к боссу. Перед началом уровня вы выбираете, каких солдат вы будете вести, а какие останутся вне уровня. После этого вам нужно привести всех выбранных солдат к боссу. Для этого вы можете совершать следующие действия:

  • если вы находитесь в точке \(x\), вы можете переместиться в \(x + 1\) или в \(x - 1\). Это действие тратит одну секунду;
  • если вы находитесь в точке \(x\) и ваш отряд находится в точке \(x\), вы можете переместиться в \(x + 1\) или \(x - 1\) вместе с отрядом за одну секунду. Вы не можете совершать это действие, если оно опасно для солдат (то есть точка, в которую вы перемещаетесь, содержит неразряженную ловушку с величиной \(d_i\) больше ловкости какого-нибудь солдата в отряде). Это действие тратит одну секунду;
  • если вы находитесь в точке \(x\) и существует ловушка \(i\) с \(r_i = x\), вы можете разрядить эту ловушку. Это действие не тратит времени.

Обратите внимание, что после каждого действия и ваша координата, и координата вашего отряда — целые числа.

Вы должны выбрать максимальное количество солдат, которых вы сможете привести из точки \(0\) в точку \(n + 1\) не более чем за \(t\) секунд.

Входные данные

В первой строке записаны четыре целых числа \(m\), \(n\), \(k\) и \(t\) (\(1 \le m, n, k, t \le 2 \cdot 10^5\), \(n < t\)) — количество солдат, количество целочисленных точек между вами и боссом, количество ловушек и время на прохождение уровня.

Во второй строке записаны \(m\) целых чисел \(a_1\), \(a_2\), ..., \(a_m\) (\(1 \le a_i \le 2 \cdot 10^5\)), где \(a_i\) — ловкость \(i\)-го солдата.

Затем следуют \(k\) строк, описывающих ловушки. В каждой строке записаны три целых числа \(l_i\), \(r_i\) и \(d_i\) (\(1 \le l_i \le r_i \le n\), \(1 \le d_i \le 2 \cdot 10^5\)) — местоположение ловушки, точка, из которой ловушку можно разрядить, и опасность ловушки.

Выходные данные

Выведите одно целое число — максимальное количество солдат, которых можно привести к боссу не более чем за \(t\) секунд.

Примечание

В первом примере можно взять с собой солдат с ловкостью \(3\), \(4\) и \(5\). Пройти уровень можно следующим образом:

  • пойти в точку \(2\) без отряда;
  • разрядить ловушку \(2\);
  • пойти в точку \(3\) без отряда;
  • разрядить ловушку \(3\);
  • пойти в \(0\) без отряда;
  • пойти в \(7\) с отрядом.

Весь план можно выполнить за \(13\) секунд.

E. Турнир

дп жадные алгоритмы Перебор *2400

Вы организуете боксерский турнир, в котором участвует \(n\) боксеров (\(n\) это степень \(2\)), и один из боксеров ваш друг. Все боксеры имеют различную силу от \(1\) до \(n\), и боксер \(i\) побеждает боксера \(j\), когда \(i\) больше чем \(j\).

Турнир орагнизовывается следующим образом: \(n\) боксеров делятся на пары; проигравший в каждой паре выбывает из турнира, а \(\frac{n}{2}\) победителей проходят в следующий этап, в котором снова делятся на пары, после чего победители опять проходят в следующий этап, и так далее, пока не останется только один боксер (он считается победителем).

Ваш друг сильно хочет выиграть это турнир, но возможно, он не самый сильный боксер. Для того, чтобы помочь другу выиграть турнир, вы можете подкупать его противников: если ваш друг будет драться с боксером, которого вы подкупили, то ваш друг выиграет, даже если он слабее.

На каждом этапе вы сами делите боксеров на пары.

Боксера с силой \(i\) можно подкупить, заплатив ему \(a_i\) долларов. Какое минимальное количество долларов вам нужно потратить для того, чтобы ваш друг победил, если на каждом этапе вы сами делите всех боксеров на пары?

Входные данные

Первая строка содержит число \(n\) (\(2 \le n \le 2^{18}\)) — количество боксеров. \(n\) обязательно равна степени \(2\).

Вторая строка содержит \(n\) чисел \(a_1\), \(a_2\), ..., \(a_n\), где \(a_i\) равно количеству долларов, которое вам нужно заплатить для подкупа боксера с силой \(i\). Ровно одно число \(a_i\) равно \(-1\) — это значит, что боксер с силой \(i\) ваш друг. Все остальные числа находятся в отрезке \([1, 10^9]\).

Выходные данные

Выведите одно число — минимальное количество долларов, которое вам нужно потратить для победы вашего друга.

Примечание

В первом тестовом примере не важно как вы будете распределять боксеров, так как ваш друг самый сильный из них и выиграет в любом случае.

Во втором тестовом примере вы можете распределять боксеров в пары следующим образом (под номером \(2\) ваш друг):

\(1 : 2, 8 : 5, 7 : 3, 6 : 4\) (боксеры \(2, 8, 7\) и \(6\) проходят в следующий этап);

\(2 : 6, 8 : 7\) (боксеры \(2\) и \(8\) проходят в следующий этап, вам нужно подкупить боксера с силой \(6\));

\(2 : 8\) (вам нужно подкупить боксера с силой \(8\));

F. Экономические проблемы

графы Деревья дп поиск в глубину и подобное Потоки Структуры данных *2400

Электросеть дворцов в Берляндии состоит из 2-х сетей: основной и запасной. Провода во дворцах сделаны из дорогого материала, поэтому их продажа будет отличной идеей!

Каждая из сетей (основная и запасная) имеет главный узел (он имеет номер \(1\)), из которого ток поступает на другие узлы сети. Все узлы доступны от главного по единственному пути. В обеих сетях количество узлов, из которых ток не распространяется дальше, равно \(n\).

Иными словами, каждая из сетей является отдельным корневым ориентированным деревом с \(n\) листьями и с корнем в вершине \(1\). В каждом дереве свои вершины и своя независимая нумерация вершин.

Кроме электросетей во дворце есть \(n\) приборов, каждый из которых соединён с одним из узлов основной и с одним из узлов запасной сети. Приборы соединяются только с такими узлами, из которых ток не распространяется далее (то есть, которые являются листьями). Каждый такой узел (лист дерева) соединён ровно с одним прибором.

В этом примере основная сеть содержит \(6\) узлов (изображена сверху), а запасная — \(4\) узла (изображена снизу). Количество приборов равно \(3\), они пронумерованы синим цветом.

Гарантируется, что вся электросеть (две сети и \(n\) приборов) может быть изображена на схеме способом, аналогичным картинке выше:

  • основная сеть будет составлять дерево сверху, в котором все провода ведут в направлении «сверху вниз»,
  • запасная сеть будет составлять дерево снизу, в котором все провода ведут в направлении «снизу вверх»,
  • приборы — горизонтальный ряд между ними, пронумерованный от \(1\) до \(n\) слева направо,
  • провода между узлами сетей изображены непересекающимися отрезками.

Формально, для каждого дерева существует такой обход в глубину из вершины \(1\), что его листья посещаются в порядке их присоединения к приборам \(1, 2, \dots, n\) (то есть сначала узел, присоединенный к прибору \(1\), затем узел, присоединенный к прибору \(2\), и так далее).

Предприниматель хочет продать (удалить) максимальное количество проводов так, чтобы на каждый прибор поступал ток из хотя бы одной сети. Иначе говоря, для каждого прибора должен существовать путь до главного узла сети (основной или запасной), проходящий по проводам сети от этого главного узла.

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 1000\)) — количество приборов во дворце.

В следующей строке записано целое число \(a\) (\(1 + n \le a \le 1000 + n\)) — количество узлов в основной электросети.

В следующей строке содержатся \(a - 1\) целых чисел \(p_i\) (\(1 \le p_i \le a\)). Каждое число \(p_i\) задает провод от \(p_i\)-го узла к \((i + 1)\)-му.

В следующей строке записаны \(n\) чисел \(x_i\) (\(1 \le x_i \le a\)) — номер узла в основной электросети, с которым соединен \(i\)-й электроприбор.

В следующей строке записано целое число \(b\) (\(1 + n \le b \le 1000 + n\)) — количество узлов в запасной электросети.

В следующей строке содержатся \(b - 1\) целых чисел \(q_i\) (\(1 \le q_i \le b\)). Каждое число \(q_i\) задает провод от \(q_i\)-го узла к \((i + 1)\)-му.

В следующей строке записаны \(n\) чисел \(y_i\) (\(1 \le y_i \le b\)) — номер узла в запасной электросети, с которым соединен \(i\)-й электроприбор.

Гарантируется, что каждая сеть представляет собой дерево, у каждого из которых ровно \(n\) листьев, причем каждый лист соединен с одним прибором. Также гарантируется, что для каждой сети существует такой порядок обхода в глубину из вершины \(1\), что листы появляются в данном обходе в порядке нумерации соответствующих приборов.

Выходные данные

Выведите единственное целое число — максимальное количество проводов, которые можно удалить из сети так, чтобы каждый прибор продолжил получать электрический ток.

Примечание

Для первого примера ниже на картинке изображен один из возможных вариантов решения (красным цветом отмечены провода, которые можно удалить):

Второй и третий примеры изображены ниже:

D1. Красивая скобочная последовательность (простая версия)

дп Комбинаторика Теория вероятностей *2600

Это простая версия этой задачи. Единственное отличие в ограничении на \(n\) — длине входной строки. В этой версии, \(1 \leq n \leq 2000\). Сложная версия этой задачи не предлагается в раунде для второго дивизиона.

Определим правильную скобочную последовательность и ее глубину следующим образом:

  • Пустая строка это правильная скобочная последовательность глубины \(0\);
  • Если «s» это правильная скобочная последовательность глубины \(d\) тогда «(s)» это правильная скобочная последовательность глубины \(d + 1\);
  • Если «s» и «t» это две правильные скобочные последовательности тогда их конкатенация «st» это правильная скобочная последовательность с глубиной равной максимальной из глубин \(s\) и \(t\).

Для (не обязательно правильной) скобочной последовательности \(s\) мы определяем ее глубину как максимальную глубину любой правильной скобочной последовательности, которая может быть получена с помощью удаления некоторых символов из \(s\) (возможно нуля). Например, скобочная последовательность \(s = \)«())(())» имеет глубину \(2\), потому что при удалении третьего символа мы получим правильную скобочную последовательность «()(())» глубины \(2\).

Дана строка \(a\), состоящая из символов '(', ')' и '?'. Рассмотрим все (не обязательно правильные) скобочные последовательности, получающиеся заменой всех символов '?' в строке \(a\) на '(' или ')'. Посчитайте сумму глубин всех таких скобочных последовательностей. Так как это число может быть очень большим, найдите его по модулю \(998244353\).

Взломы в первом дивизионе по этой задачи могут быть сделаны, только если простая и сложная версия этой задачи сданы.

Входные данные

Единственная строка содержит непустую строку, состоящую только из символов '(', ')' и '?'. Длина строки не превосходит \(2000\).

Выходные данные

Выведите ответ по модулю \(998244353\) в единственной строке.

Примечание

В первом тесте, мы можем получить \(4\) скобочные последовательности меняя все символы '?' на '(' или ')':

  • «((». Ее глубина \(0\);
  • «))». Ее глубина \(0\);
  • «)(». Ее глубина \(0\);
  • «()». Ее глубина \(1\).

Поэтому, ответ равен \(1 = 0 + 0 + 0 + 1\).

Во втором тесте, мы можем получить \(4\) скобочные последовательности меняя все символы '?' на '(' или ')':

  • «(((())». Ее глубина \(2\);
  • «()()))». Ее глубина \(2\);
  • «((()))». Ее глубина \(3\);
  • «()(())». Ее глубина \(2\).

Поэтому, ответ равен \(9 = 2 + 2 + 3 + 2\).

E. Красивые зеркала

дп математика Структуры данных Теория вероятностей *2100

У Creatnx есть \(n\) зеркал, пронумерованных от \(1\) до \(n\). Каждый день Creatnx спрашивает ровно одно зеркало «Красивый ли я?». \(i\)-е зеркало скажет Creatnx, что он красивый с вероятностью \(\frac{p_i}{100}\) для всех \(1 \le i \le n\).

Creatnx спрашивает зеркала одно за другим, начиная с \(1\)-о зеркала. Каждый день, если он спрашивает \(i\)-е зеркало, есть две возможности:

  • \(i\)-е зеркало скажет Creatnx, что он красивый. В этом случае, если \(i = n\) Creatnx остановится и станет счастливым, иначе он продолжит спрашивать \(i+1\)-е зеркало на следующий день;
  • В другом случае Creatnx очень расстроится. На следующий день, Creatnx начнет спрашивать \(1\)-е зеркало заново.

Вам нужно посчитать математическое ожидание количества дней, до того как Creatnx станет счастливым.

Это число нужно найти по модулю \(998244353\). Формально, пусть \(M = 998244353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) целые числа и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

В первой строке находится единственное целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество зеркал.

Во второй строке находится \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq 100\)).

Выходные данные

Выведите ответ по модулю \(998244353\) в единственной строке.

Примечание

В первом тесте, есть единственное зеркало и оно говорит, что Creatnx красивый с вероятностью \(\frac{1}{2}\). Поэтому математическое ожидание количества дней, пока Creatnx не станет счастливым равно \(2\).

H. Красно-синий граф

meet-in-the-middle графы дп математика матрицы *3400

Дан ориентированный граф из \(n\) вершин, пронумерованных от \(1\) до \(n\), в котором из каждой вершины (кроме \(n\)) исходит две дуги, красная и синяя. В любой момент времени ровно одна исходящая дуга является активной для каждой вершины. Изначально все синие дуги активны, а в вершине \(1\) находится фишка. В начале каждой секунды у вершины, в которой стоит фишка, меняется активная дуга. Затем фишка перемещается по активной дуге. Когда фишка достигает вершины \(n\), она останавливается. Гарантируется, что вершина \(n\) достижима по дугам из всех остальных вершин графа.

Вам задаются \(q\) запросов, в каждом из которых описывается состояние графа — пара \((v, s)\) следующего вида:

  • \(v\) — вершина, в которой находится фишка;
  • \(s\) — строка из \(n - 1\) символов. \(i\)-й символ обозначает, какая дуга, ведущая из \(i\), активна (красная, если символ равен 'R', или синяя, если символ — 'B').

Для каждого запроса определите, достижимо ли заданное состояние из стартового, и если да — когда такое состояние графа появится в первый раз. Обратите внимание, что заданные две операции неразрывны между собой — состояние не считается достигнутым, если оно появляется после изменения активной дуги, но до того, как фишку переместили по дуге.

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \leq n \leq 58\)) — количество вершин.

Далее следуют \(n-1\) строк, \(i\)-я из которых содержит два целых числа \(b_i\) и \(r_i\) (\(1 \leq b_i, r_i \leq n\)), обозначающих синюю дугу \((i, b_i)\) и красную дугу \((i, r_i)\), соответственно. Гарантируется, что вершина \(n\) достижима из всех остальных.

Следующая строка содержит одно целое число \(q\) (\(1 \leq q \leq 5000\)) — количество запросов.

Затем следуют \(q\) строк с запросами. \(j\)-я из них содержит целое число \(v\) (\(1 \leq v < n\)) и строку \(s\) из \(n-1\) символов, каждый из которых либо 'R', либо 'B'. \(i\)-й из этих символов равен 'R', если красная дуга, ведущая из вершины \(i\), активна, иначе этот символ равен 'B'.

Выходные данные

Выведите \(q\) чисел, каждое из которых содержит ответ на один запрос.

Если состояние в \(i\)-м запросе недостижимо, выведите \(-1\). Иначе выведите \(t_i\) — первый момент времени, когда это состояние появилось (выводите время в секундах, начиная отсчет с секунды \(0\), в которую появилось стартовое состояние).

Примечание

На картине изображен граф из первого примера.

Первые \(19\) запросов показывают перемещение фишки. После \(19\)-го шага фишка достигает вершины \(6\). Последние два запроса соответствуют недостижимым состояниям.

B. Домино для молодых

дп жадные алгоритмы математика *2000

Вам дана диаграмма Юнга.

Данная диаграмма это гистограмма с \(n\) столбцами длин \(a_1, a_2, \ldots, a_n\) (\(a_1 \geq a_2 \geq \ldots \geq a_n \geq 1\)).

Диаграмма Юнга для \(a=[3,2,2,2,1]\).

Ваша задача — найти наибольшее количество непересекающихся домино, которое вы можете нарисовать внутри этой диаграммы, домино это прямоугольник \(1 \times 2\) или \(2 \times 1\).

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 300\,000\)): количество столбцов в данной гистограмме.

В следующей строке записаны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 300\,000, a_i \geq a_{i+1}\)): длины столбцов.

Выходные данные

Выведите одно целое число: наибольшее количество непересекающихся домино, которое вы можете нарисовать внутри данной диаграммы Юнга.

Примечание

Некоторые возможные решения для первого примера:

E. Счастливый кактус

дп *3400

Вам дан кактус, это граф, где каждое ребро лежит не более чем на одном простом цикле.

Он дан в виде \(m\) ребер \(a_i, b_i\), вес \(i\)-го ребра равен \(i\).

Назовем путь в кактусе возрастающим если веса ребер на этом пути возрастают.

Назовем пару вершин \((u,v)\) счастливой если существует возрастающий путь, который начинается в \(u\) и кончается в \(v\).

Для каждой вершины \(u\) найдите количество других вершин \(v\), что пара \((u,v)\) счастливая.

Входные данные

В первой строке записаны два целых числа \(n,m\) (\(1 \leq n, m \leq 500\,000\)): количество вершин и ребер в данном кактусе.

Следующие \(m\) строк содержат описания ребер кактуса, \(i\)-я из них содержит два целых числа \(a_i, b_i\) (\(1 \leq a_i, b_i \leq n, a_i \neq b_i\)).

Гарантируется, что граф связен и в нем нет кратных ребер.

Выходные данные

Выведите \(n\) целых чисел, необходимые значения для вершин \(1,2,\ldots,n\).

D. Порталы

дп жадные алгоритмы реализация сортировки Структуры данных *2100

Вы играете в стратегическую компьютерную игру (да, у нас закончились идеи для легенд задач). В этой игре вы управляете огромной армией, и ваша задача — захватить \(n\) замков противника.

Рассмотрим игровой процесс более подробно. Изначально у вас в управлении армия из \(k\) воинов. Противник контролирует \(n\) замков; для захвата \(i\)-го замка вам потребуется \(a_i\) воинов (считается, что каждый захват замка проводится без потерь, поэтому размер армии после захвата не меняется). После захвата каждого замка вы увеличиваете свою армию, нанимая воинов в новом замке — в \(i\)-м замке вы сможете нанять \(b_i\) воинов. Помимо захвата замков, в каждом из них можно оставить охрану (только после захвата): если вы оставляете хотя бы одного воина в замке, то этот замок будет считаться охраняемым. У каждого замка есть параметр важности \(c_i\), и успешность вашей стратегии определяется суммарной важностью всех охраняемых замков в конце игры. Оставлять охрану в замке можно двумя способами:

  • если вы находитесь в замке \(i\), вы можете оставить одного воина для охраны замка \(i\);
  • замки связаны \(m\) односторонними порталами. Каждый портал характеризуется двумя номерами соединяемых замков \(u\) и \(v\) (для каждого портала \(u > v\)). Порталами можно пользоваться следующим способом: если вы находитесь в замке \(u\), вы можете отправить одного воина охранять замок \(v\) через портал.

Вы захватываете замки по очереди: сначала первый, потом второй, и так далее. После захвата замка \(i\), пока вы не захватили замок \(i + 1\), вы можете нанять воинов в замке \(i\), оставить охрану в замке \(i\), а также воспользоваться любым количеством порталов, ведущих из замка \(i\) в замки с меньшими номерами. После того, как вы захватите следующий замок, эти действия для замка \(i\) будут уже недоступны.

Если в какой-то момент вам не хватает воинов для захвата следующего замка, вы проигрываете. Ваша цель — максимизировать суммарную важность всех охраняемых замков после захвата последнего замка (обратите внимание, что вы можете нанимать воинов в последнем замке после его захвата, оставлять в нем охрану и пользоваться порталами — суммарная важность всех охраняемых замков будет подсчитана после всех ваших действий).

Можете ли вы разработать оптимальную стратегию захвата замков и оставления охраны?

Входные данные

В первой строке входных данных заданы три целых числа \(n\), \(m\) и \(k\) (\(1 \le n \le 5000\), \(0 \le m \le \min(\frac{n(n - 1)}{2}, 3 \cdot 10^5)\), \(0 \le k \le 5000\)) — количество замков, количество порталов и изначальное количество воинов в вашей армии, соответственно.

Далее следуют \(n\) строк, в \(i\)-й из которых содержится описание \(i\)-го замка — три целых числа \(a_i\), \(b_i\) и \(c_i\) (\(0 \le a_i, b_i, c_i \le 5000\)) — количество воинов, требуемых для захвата замка \(i\), количество воинов, которых можно нанять после захвата, и важность замка, соответственно.

Далее следуют \(m\) строк, в \(i\)-й из которых содержится описание \(i\)-го портала — два целых числа \(u_i\) и \(v_i\) (\(1 \le v_i < u_i \le n\)), соответствующих порталу, который ведет из замка \(u_i\) в замок \(v_i\). Не существует двух одинаковых порталов.

Гарантируется, что размер вашей армии ни при каких условиях не может превысить \(5000\) (то есть \(k + \sum\limits_{i = 1}^{n} b_i \le 5000\)).

Выходные данные

Если невозможно захватить все замки ни при каких обстоятельствах, выведите одно целое число \(-1\).

Иначе выведите одно целое число — максимальную суммарную важность всех охраняемых замков в конце игры.

Примечание

Лучшая стратегия в первом примере — следующая:

  1. захватить первый замок;
  2. нанять солдат в первом замке, теперь у вас \(11\) солдат;
  3. захватить второй замок;
  4. захватить третий замок;
  5. нанять солдат в третьем замке, теперь у вас \(13\) солдат;
  6. захватить четвертый замок;
  7. оставить одного воина в четвертом замке, теперь у вас \(12\) солдат.

Эта стратегия (и некоторые другие) дает в результате суммарную важность охраняемых замков, равную \(5\).

Лучшая стратегия во втором примере — следующая:

  1. захватить первый замок;
  2. нанять солдат в первом замке, теперь у вас \(11\) солдат;
  3. захватить второй замок;
  4. захватить третий замок;
  5. нанять солдат в третьем замке, теперь у вас \(13\) солдат;
  6. захватить четвертый замок;
  7. оставить одного воина в четвертом замке, теперь у вас \(12\) солдат;
  8. отправить одного воина в первый замок через третий портал, теперь у вас \(11\) солдат.

Эта стратегия (и некоторые другие) дает в результате суммарную важность охраняемых замков, равную \(22\).

В третьем примере нельзя захватить последний замок: для этого нужны \(14\) воинов, но вы можете собрать не более \(13\) до захвата последнего замка.

E. Общее число

Бинарный поиск дп Комбинаторика математика *2100

Введем определение функции \(f(x)\): \(\) \begin{matrix} f(x) & = & \left\{ \begin{matrix} \frac{x}{2} & \mbox{если } x \text{ четное} \\ x - 1 & \mbox{в противном случае } \end{matrix} \right. \end{matrix} \(\)

Можно заметить, что если мы выбираем некоторое число \(v\) и применяем к нему функцию \(f\), затем применяем функцию \(f\) к числу \(f(v)\), и так далее, то рано или поздно мы получим значение \(1\). Выпишем все промежуточные значения на пути от \(v\) до \(1\) и назовем все выписанные значения \(path(v)\). Например, \(path(1) = [1]\), \(path(15) = [15, 14, 7, 6, 3, 2, 1]\), \(path(32) = [32, 16, 8, 4, 2, 1]\).

Выпишем все \(path(x)\) для всех \(x\) от \(1\) до \(n\). Перед вами стоит задача: определить максимальное число \(m\) такое, что \(m\) встречается хотя бы в \(k\) различных \(path(x)\).

Иначе говоря, нужно найти такое максимальное \(y\), что \(\left| \{ x ~|~ 1 \le x \le n, y \in path(x) \} \right| \ge k\).

Входные данные

В первой строке следуют два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^{18}\)).

Выходные данные

Выведите максимальное число \(m\) такое, что \(m\) встречается хотя бы в \(k\) различных \(path(x)\).

Примечание

В первом примере ответ равен \(5\), так как \(5\) встретится в \(path(5)\), в \(path(10)\) и в \(path(11)\).

Во втором примере ответ равен \(4\), так как \(4\) встретится в \(path(4)\), в \(path(5)\), в \(path(8)\), в \(path(9)\), в \(path(10)\) и в \(path(11)\).

В третьем примере \(n = k\), поэтому ответ равен \(1\), так как \(1\) это единственное число, содержащееся в путях всех чисел от \(1\) до \(20\).

C. Очередная сломанная клавиатура

дп Комбинаторика реализация *1200

Недавно Norge нашел строку \(s = s_1 s_2 \ldots s_n\), состоящую из \(n\) строчных букв латинского алфавита. В качестве упражнения для улучшения скорости печатания он решил напечатать все подстроки \(s\). Да, все \(\frac{n (n + 1)}{2}\) из них!

Подстрокой строки \(s\) называется непустая строка \(x = s[a \ldots b] = s_{a} s_{a + 1} \ldots s_{b}\) (\(1 \leq a \leq b \leq n\)). Например, «auto» и «ton» являются подстроками «automaton».

Незадолго до начала упражнения Norge осознал, что его клавиатура сломана, а если говорить более точно, он может использовать только \(k\) латинских букв \(c_1, c_2, \ldots, c_k\) из \(26\).

После этого Norge стало интересно, как много подстрок строки \(s\) он сможет написать, используя свою сломанную клавиатуру. Помогите ему найти это число.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq k \leq 26\)) — длину строки \(s\) и количество латинских букв, доступных на клавиатуре.

Вторая строка входных данных содержит строку \(s\), состоящую ровно из \(n\) строчных букв латинского алфавита.

Третья строка содержит \(k\) различных строчных букв латинского алфавита \(c_1, c_2, \ldots, c_k\) — буквы, доступные на клавиатуре.

Выходные данные

Выведите одно целое число — количество подстрок \(s\), которые можно написать, используя только доступные буквы \(c_1, c_2, \ldots, c_k\).

Примечание

В первом примере Norge может напечатать подстроки \(s[1\ldots2]\), \(s[2\ldots3]\), \(s[1\ldots3]\), \(s[1\ldots1]\), \(s[2\ldots2]\), \(s[3\ldots3]\), \(s[5\ldots6]\), \(s[6\ldots7]\), \(s[5\ldots7]\), \(s[5\ldots5]\), \(s[6\ldots6]\), \(s[7\ldots7]\).

D. Удалите один элемент

дп Перебор *1500

Вам задан массив \(a\), состоящий из \(n\) целых чисел.

Вы можете удалить не более одного элемента из этого массива. Таким образом, после этой операции длина массива равна либо \(n-1\), либо \(n\).

Ваша задача — посчитать максимально возможную длину строго возрастающего последовательного подмассива получившегося массива.

Напомним, что последовательным подмассивом \(a\) с индексами от \(l\) до \(r\) называется \(a[l \dots r] = a_l, a_{l + 1}, \dots, a_r\). Массив \(a[l \dots r]\) называется строго возрастающим, если \(a_l < a_{l+1} < \dots < a_r\).

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество элементов в \(a\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно \(i\)-му элементу \(a\).

Выходные данные

Выведите одно целое число — максимально возможную длину строго возрастающего последовательного подмассива массива \(a\) после удаления не более одного элемента.

Примечание

В первом примере можно удалить \(a_3=5\). Тогда получившийся массив будет равен \([1, 2, 3, 4]\) и длина его наибольшего возрастающего подмассива будет равна \(4\).

F. Две скобочные последовательности

дп Строки *2200

Вам задано две скобочные последовательности (не обязательно правильные) \(s\) и \(t\), состоящие только из символов '(' и ')'. Вы хотите построить кратчайшую правильную скобочную последовательность, которая содержит обе заданные скобочные последовательности в качестве подпоследовательностей (не обязательно подряд идущих).

Напомним, что такое правильная скобочная последовательность:

  • () является правильной скобочной последовательностью;
  • если \(S\) является правильной скобочной последовательностью, то (\(S\)) является правильной скобочной последовательностью;
  • если \(S\) и \(T\) являются правильными скобочными последовательностями, то \(ST\) (конкатенация \(S\) и \(T\)) тоже является правильной скобочной последовательностью.

Напомним, что подпоследовательностью строки \(s\) называется такая строка \(t\), которая получается из \(s\) при помощи удаления некоторого (возможно, нулевого) количества символов. Например, «coder», «force», «cf» и «cores» являются подпоследовательностями «codeforces», а «fed» и «z» — нет.

Входные данные

Первая строка входных данных содержит одну скобочную последовательность \(s\), состоящую из не более \(200\) символов '(' и ')'.

Вторая строка входных данных содержит одну скобочную последовательность \(t\), состоящую из не более \(200\) символов '(' и ')'.

Выходные данные

Выведите одну строку — кратчайшую правильную скобочную последовательность, которая содержит обе заданные скобочные последовательности как подпоследовательности (не обязательно подряд идущие). Если существует несколько возможных ответов, выведите любой.

C. Ягодное варенье

дп жадные алгоритмы реализация Структуры данных *1700

Карлсон недавно обнаружил огромные запасы ягодного варенья в подвале дома. Если точнее, то там оказались \(2n\) банок клубничного и черничного варенья.

Все \(2n\) банок расставлены в ряд. Лестница в подвал находится ровно в середине этого ряда. Поэтому, когда Карлсон спускается в подвал, он видит ровно \(n\) банок слева и \(n\) банок справа.

Например, подвал может выглядеть следующим образом:

Карлсон — очень прямолинейный молодой человек, поэтому он сразу начинает есть варенье. За одну минуту он опустошает либо первую непустую банку слева, либо первую непустую банку справа.

Наконец, Карлсон решил, что в конце процесса должно остаться равное количество банок с клубничным и черничным вареньем.

Например, результат может быть таким:

Он съел \(1\) банку слева, а затем \(5\) банок справа. Осталось ровно по \(3\) полных банки клубничного и черничного варенья.

Банки пронумерованы от \(1\) до \(2n\) слева направо, так что Карлсон начинает между банками \(n\) и \(n+1\).

Какое минимальное число банок Карлсону придется опустошить, чтобы осталось равное количество банок с клубничным и черничным вареньем?

Вам нужно ответить на \(t\) наборов входных данных.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 10^5\)).

В второй строке каждого набора входных данных записаны \(2n\) целых чисел \(a_1, a_2, \dots, a_{2n}\) (\(1 \le a_i \le 2\)) — \(a_i=1\) значит, что \(i\)-я банка слева — это банка клубничного варенья, а \(a_i=2\) значит, что это банка черничного варенья.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите ответ — минимальное количество банок, которые Карлсону придется опустошить, чтобы осталось равное количество банок с клубничным и черничным вареньем.

Примечание

На картинке описывается первый набор входных данных.

Во втором наборе входных данных количества банок с клубничным и с черничным вареньем уже совпадают.

В третьем наборе входных данных Карлсону придется съесть все \(6\) банок, так чтобы осталось \(0\) банок каждого варенья.

В четвертом наборе входных данных Карлсон может либо опустошить вторую и третью банки, либо третью и четвертую. В обоих случаях останется по \(1\) банке каждого варенья.

F. Карты

дп Комбинаторика математика Теория вероятностей теория чисел *2600

Рассмотрим следующий эксперимент. У вас есть колода из \(m\) карт, ровно одна из них — джокер. \(n\) раз вы производите следующие действия: перемешиваете колоду, берете верхнюю карту, просматриваете ее и возвращаете ее в колоду.

Пусть \(x\) — количество раз, когда вы брали с вершины колоды джокера. Предполагая, что при каждом перемешивании колоды все \(m!\) перестановок карт равновероятны, чему равно математическое ожидание \(x^k\)? Выведите ответ по модулю \(998244353\).

Входные данные

В единственной строке заданы три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m < 998244353\), \(1 \le k \le 5000\)).

Выходные данные

Выведите одно число — математическое ожидание \(x^k\), взятое по модулю \(998244353\) (ответ всегда можно представить в виде несократимой дроби \(\frac{a}{b}\), где \(b \mod 998244353 \ne 0\); выведите \(a \cdot b^{-1} \mod 998244353\)).

E. Новогодние перестановки

дп Комбинаторика *2700

Да, мы не смогли придумать новогоднюю легенду для этой задачи.

Перестановка длины \(n\) — это массив \(n\) целых чисел, таких что каждое целое число от \(1\) до \(n\) появляется в нем ровно один раз.

Элемент \(y\) перестановки \(p\) достижим из элемента \(x\), Если \(x = y\), или \(p_x = y\), или \(p_{p_x} = y\) и так далее.

Определим декомпозицию перестановки \(p\) следующим образом: сначала у нас есть перестановка \(p\), все элементы которой не помечены, и пустой список \(l\). Затем мы делаем следующее: пока хотя бы один элемент не помечен в \(p\), находим самый левый такой элемент, перечисляем все элементы, которые достижимы из него в порядке их появления в \(p\), помечаем все эти элементы, затем циклически сдвигаем список этих элементов так, чтобы максимум появился в первой позиции, и добавляем этот список как элемент в \(l\). После того, как все элементы помечены, \(l\) является результатом этой декомпозиции.

Например, если мы хотим построить декомпозицию \(p = [5, 4, 2, 3, 1, 7, 8, 6]\), мы делаем следующее:

  1. изначально \(p = [5, 4, 2, 3, 1, 7, 8, 6]\) (жирным шрифтом выделены помеченные элементы), \(l = []\);
  2. самый левый не помеченный элемент — \(5\); \(5\) и \(1\) достижимы из него, поэтому список, который мы хотим сдвинуть, — \([5, 1]\); нет необходимости сдвигать его, так как максимум уже является первым элементом;
  3. \(p = [\textbf{5}, 4, 2, 3, \textbf{1}, 7, 8, 6]\), \(l = [[5, 1]]\);
  4. самый левый не помеченный элемент — \(4\), список достижимых элементов из него — это \([4, 2, 3]\); максимум уже первый элемент, поэтому сдвигать его не нужно;
  5. \(p = [\textbf{5}, \textbf{4}, \textbf{2}, \textbf{3}, \textbf{1}, 7, 8, 6]\), \(l = [[5, 1], [4, 2, 3]]\);
  6. самый левый не помеченный элемент — \(7\), список достижимых элементов из него — это \([7, 8, 6]\); мы должны сдвинуть его, чтобы он стал \([8, 6, 7]\);
  7. \(p = [\textbf{5}, \textbf{4}, \textbf{2}, \textbf{3}, \textbf{1}, \textbf{7}, \textbf{8}, \textbf{6}]\), \(l = [[5, 1], [4, 2, 3], [8, 6, 7]]\);
  8. все элементы помечены, так что \([[5, 1], [4, 2, 3], [8, 6, 7]]\) — результат декомпозиции.

Определим новогоднее преобразование перестановки следующим образом: построим декомпозицию этой перестановки; затем отсортируем все списки в декомпозиции по возрастанию первых элементов (мы не меняем местами элементы в этих списках, только сами списки); затем объединим списки в один список, который становится новой перестановкой. Например, новогоднее преобразование \(p = [5, 4, 2, 3, 1, 7, 8, 6]\) строится следующим образом:

  1. декомпозиция равна \([[5, 1], [4, 2, 3], [8, 6, 7]]\);
  2. после сортировки, декомпозиция становится равна \([[4, 2, 3], [5, 1], [8, 6, 7]]\);
  3. \([4, 2, 3, 5, 1, 8, 6, 7]\) — результат преобразования.

Назовем перестановку хорошей, если результат ее преобразования совпадает с самой перестановкой. Например, \([4, 3, 1, 2, 8, 5, 6, 7]\) это хорошая перестановка; а \([5, 4, 2, 3, 1, 7, 8, 6]\) плохая, так как результатом преобразования является \([4, 2, 3, 5, 1, 8, 6, 7]\).

Ваша задача состоит в следующем: при заданных \(n\) и \(k\) найти \(k\)-ю (лексикографически) хорошую перестановку длины \(n\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 50\), \(1 \le k \le 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите ответ на него следующим образом: если число хороших перестановок длины \(n\) меньше \(k\), выведите одно целое число \(-1\); в противном случае выведите \(k\)-ю (в лексикографическом порядке) хорошую перестановку из \(n\) элементов.

F. Новый год и смена хендла

Бинарный поиск дп *2800

Наступает новый год. Это значит, что на codeforces пришла пора менять хендлы. Мишке захотелось поменять свой хендл, но таким образом, чтобы люди не забыли, кто он такой.

Чтобы все получилось так, как он хочет, он решил менять только регистры букв. Более формально, за одну смену хендла он может выбрать любой отрезок своего хендла \([i; i + l - 1]\) и сделать tolower или toupper ко всем буквам своего хендла на этом отрезке (более формально, поменять все строчные буквы на отрезке на соответствующие прописные или наоборот). Длина \(l\) фиксирована для всех смен.

Так как на codeforces нельзя слишком часто менять хендлы, всего Мишка может сделать не более \(k\) таких операций. Какого минимального значения может быть \(min(lower, upper)\) (где \(lower\) — количество строчных букв, а \(upper\) — количество прописных букв) после оптимальной последовательности смен?

Входные данные

Первая строка входных данных содержит три целых числа \(n, k\) и \(l\) (\(1 \le n, k, l \le 10^6, l \le n)\) — длину хендла Мишки, количество смен и длину отрезка.

Вторая строка входных данных содержит одну строку \(s\), состоящую из \(n\) строчных и прописных букв латинского алфавита — хендл Мишки.

Выходные данные

Выведите одно целое число — минимальное значение, которого может достигнуть \(min(lower, upper)\) после того, как Мишка сменит свой хендл не более \(k\) раз так, как описано в условии задачи.

C. Игра с прямоугольниками

дп Комбинаторика *2000

В этой задаче Аня и Маша играют в игру. Изначально у них есть клетчатый лист бумаги, на котором нарисован прямоугольник n × m (только рамка, без внутренности). Аня и Маша делают ходы по очереди, первой ходит Аня. На каждом ходу надо внутри предыдущего прямоугольника нарисовать по линиям сетки прямоугольник, который не будет иметь с ним общих точек. Обратите внимание, что, опять же, рисуется только рамка, без внутренности.

В этой игре никто не выигрывает — Аня и Маша просто играют, пока не сделают в сумме k ходов. Посчитайте, сколько в этой игре вариантов развития событий.

Входные данные

В первой и единственной строке заданы три целых числа: n, m, k (1 ≤ n, m, k ≤ 1000).

Выходные данные

Выведите единственное число — количество вариантов развития событий в этой игре. Поскольку это число может быть очень большим, выведите его значение по модулю 1000000007 (109 + 7).

Примечание

Два варианта развития событий считаются различными, если получившиеся в итоге картинки различны, то есть в одном варианте нарисован прямоугольник, который не нарисован в другом варианте.

В первом примере у Ани, которая делает первый и единственный ход, есть единственный вариант хода — вставить квадратик 1 × 1 в данный квадрат 3 × 3.

Во втором примере у Ани есть целых 9 вариантов: 4 способа нарисовать квадратик 1 × 1, 2 способа поставить прямоугольник 1 × 2 вертикально, еще 2 — поставить его горизонтально, и еще один способ нарисовать квадратик 2 × 2.

D. Мисс Punyverse

Деревья дп жадные алгоритмы *2500

Дуб имеет \(n\) гнезд, пронумерованных целыми числами от \(1\) до \(n\). Гнездо \(i\) это дом для \(b_i\) пчел и \(w_i\) ос.

Некоторые гнезда соединены ветками. Мы называем два гнезда соседними если существует ветка, соединяющая их. Простой путь из гнезда \(x\) в \(y\) задается последовательностью \(s_0, \ldots, s_p\) различных гнезд, где \(p\) это неотрицательное целое число и \(s_0 = x\), \(s_p = y\) и \(s_{i-1}\) и \(s_{i}\) соседние для всех \(i = 1, \ldots, p\). Ветки дуба расположены так, что для любой пары гнезд \(x\) и \(y\) существует единственный простой путь из \(x\) в \(y\). По причине этого и биологи и программисты согласны, что дуб, по факту, является деревом.

Деревня это непустое множество \(V\) гнезд, такое что для всех \(x\) и \(y\) из \(V\), существует простой путь из \(x\) в \(y\), все гнезда вдоль которого также лежат в \(V\).

Множество деревень \(\cal P\) называется разбиением если каждое из \(n\) гнезд содержится в ровно одной деревне из \(\cal P\). Другими словами, никакие две деревни из \(\cal P\) не содержат одно и то же гнездо и в объединении дают все \(n\) гнезд.

На дубе проводится ежегодный конкурс красоты мисс Punyverse. Всего два участника участвуют в этом году, это некрасивая оса и красивая пчела. Победитель конкурса красоты определяется голосованием, систему которого мы сейчас опишем. Пусть \(\mathcal{P}\) это разбиение гнезд на \(m\) деревень \(V_1, \ldots, V_m\). Проводится локальные выборы в каждой деревне. Каждое насекомое в деревне голосует за свое любимое насекомое. Если в деревне окажется, что строго больше голосов отдано за некрасивую осу чем за красивую пчелу, тогда некрасивая оса объявляется победителем в этой деревне. Иначе, красивая пчела побеждает.

Известно, что пчелы всегда голосуют за пчел, то есть проголосуют за красивую пчелу в этом году и осы всегда голосуют за ос, то есть проголосуют за некрасивую осу в этом году. Все насекомые в улье участвуют в голосовании.

Мэр Waspacito, а также его заместитель Alexwasp, хотят, чтобы некрасивая оса победила. Они имеют влияние и могут выбрать разбиение дуба на ровно \(m\) деревень. Если они выберут разбиение оптимально, определите максимальное количество деревень, в которых победит некрасивая оса.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)), количество тестовых случаев. В следующих строках находится описание тестовых случаев.

В первой строке каждого тестового случая находится два целых числа \(n\) и \(m\) (\(1 \le m \le n \le 3000\)). Во второй строке находится \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i \le 10^9\)). В третьей строке находится \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) (\(0 \le w_i \le 10^9\)). В следующих \(n - 1\) находятся описания соседних пар гнезд, \(i\)-я из них содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \neq y_i\)), обозначающих номера гнезд, соединенных веткой. Гарантируется, что эти пары задают дерево.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10^5\).

Выходные данные

Для каждого тестового случая выведите целое число, равное максимальному количеству деревень, в которых победит некрасивая оса по всем разбиениям дуба на \(m\) деревень.

Примечание

В первом тестовом случае, нужно разделить \(n = 4\) гнезд на \(m = 3\) деревень. Мы можем так разделить, что некрасивая оса победит в \(2\) деревнях, например с помощью такого разбиения: \(\{\{1, 2\}, \{3\}, \{4\}\}\). В этом разбиении:

  • Некрасивая оса побеждает в деревне \(\{1, 2\}\), получив \(181\) голосов тогда как красивая пчела получила \(170\) голосов;
  • Некрасивая оса также побеждает в деревне \(\{3\}\), получив \(111\) голосов тогда как красивая пчела получила \(70\) голосов;
  • Некрасивая оса проиграет в деревне \(\{4\}\), получив \(0\) голосов тогда как красивая пчела получила \(50\).

Таким образом некрасивая оса победила в \(2\) деревнях и можно показать, что это максимально возможное число.

Во втором тесте мы должны разделить \(n = 2\) гнезд на \(m = 1\) деревень. Есть только один способ это сделать: \(\{\{1, 2\}\}\). В этом разбиении некрасивая оса получит \(563\) голосов и красивая пчела также получит \(563\) голосов. Некрасивая оса побеждает, если получает строго больше голосов. Поэтому некрасивая оса не выиграет ни в какой деревне.

B1. K по цене одного (простая версия)

дп жадные алгоритмы сортировки *1400

Это простая версия этой задачи. Единственное отличие в ограничении на \(k\) — количество подарков в акции. В этой версии, \(k=2\).

Вася пришел в магазин, чтобы купить подарки для своих друзей на Новый год. Оказалось, что ему очень повезло — именно сегодня в магазине проводится акция «\(k\) товаров по цене одного». Помните, что в этой задаче \(k=2\).

Благодаря этой акции Вася может купить ровно \(k\) любых подарков, заплатив только за самый дорогой из них. Вася решил воспользоваться этой возможностью и купить как можно больше подарков для своих друзей на деньги, которые у него имеются.

Более формально, для каждого подарка определена его цена \(a_i\) — количество монет, которое нужно потратить, чтобы приобрести этот подарок. Изначально, у Васи есть \(p\) монет. Он хочет приобрести максимальное количество подарков. Вася может сколько угодно раз выполнить одну из следующих операций.

  • Вася может купить один любой подарок с номером \(i\), если у него в настоящий момент достаточно монет (то есть \(p \ge a_i\)). После покупки этого подарка, количество монет у Васи уменьшится на величину \(a_i\), то есть становится \(p := p - a_i\).
  • Вася может купить подарок с номером \(i\), а также выбрать еще ровно \(k-1\) подарков, цены которых не превосходят \(a_i\), если у него в настоящий момент достаточно монет (то есть \(p \ge a_i\)). Таким образом он покупает все эти \(k\) подарков, а его количество монет уменьшается на величину \(a_i\), то есть становится \(p := p - a_i\).

Обратите внимание, что каждый подарок можно приобрести не больше одного раза.

Например, если в магазине сейчас есть \(n=5\) подарков, имеющих цены \(a_1=2, a_2=4, a_3=3, a_4=5, a_5=7\) соответственно, \(k=2\), а у Васи есть \(6\) монет, то он может купить суммарно \(3\) подарка. Подарок с номером \(1\) Вася купит, не используя акцию, и заплатит \(2\) монеты. Подарки с номерами \(2\) и \(3\) Вася купит используя акцию, и заплатит \(4\) монеты. Можно доказать, что приобрести больше подарков, имея шесть монет, Вася не может.

Помогите Васе узнать максимальное количество подарков, которые он может приобрести.

Входные данные

В первой строке находится число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания \(t\) наборов входных данных, по две строки на каждый набор.

В первой строке каждого набора входных данных содержится три целых числа \(n, p, k\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le p \le 2\cdot10^9\), \(k=2\)) — количество товаров в магазине, количество монет, имеющихся у Васи и количество товаров, которые можно купить по цене самого дорогого.

Во второй строке каждого набора данных находятся \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^4\)) — цены подарков.

Гарантируется, что сумма \(n\) по всем наборам данных не превосходит \(2 \cdot 10^5\). Гарантируется, что в этой версии задачи \(k=2\) для всех наборов входных данных.

Выходные данные

Для каждого набора данных в отдельной строке выведите одно целое число \(m\) — максимальное количество подарков, которые может купить Вася.

B2. K по цене одного (усложнённая версия)

дп жадные алгоритмы сортировки *1600

Это сложная версия этой задачи. Единственное отличие в ограничении на \(k\) —количество подарков в акции. В этой версии \(2 \le k \le n\).

Вася пришел в магазин, чтобы купить подарки для своих друзей на Новый год. Оказалось, что ему очень повезло — именно сегодня в магазине проводится акция «\(k\) товаров по цене одного».

Благодаря этой акции Вася может купить ровно \(k\) любых подарков, заплатив только за самый дорогой из них. Вася решил воспользоваться этой возможностью и купить как можно больше подарков для своих друзей на деньги, которые у него имеются.

Более формально, для каждого подарка определена его цена \(a_i\) — количество монет, которое нужно потратить, чтобы приобрести этот подарок. Изначально, у Васи есть \(p\) монет. Он хочет приобрести максимальное количество подарков. Вася может сколько угодно раз выполнить одну из следующих операций.

  • Вася может купить один любой подарок с номером \(i\), если у него в настоящий момент достаточно монет (то есть \(p \ge a_i\)). После покупки этого подарка, количество монет у Васи уменьшится на величину \(a_i\), то есть становится \(p := p - a_i\).
  • Вася может купить подарок с номером \(i\), а также выбрать еще ровно \(k-1\) подарков, цены которых не превосходят \(a_i\), если у него в настоящий момент достаточно монет (то есть \(p \ge a_i\)). Таким образом он покупает все эти \(k\) подарков, а его количество монет уменьшается на величину \(a_i\), то есть становится \(p := p - a_i\).

Обратите внимание, что каждый подарок можно приобрести не больше одного раза.

Например, если в магазине сейчас есть \(n=5\) подарков, имеющих цены \(a_1=2, a_2=4, a_3=3, a_4=5, a_5=7\) соответственно, \(k=2\), а у Васи есть \(6\) монет, то он может купить суммарно \(3\) подарка. Подарок с номером \(1\) Вася купит, не используя акцию, и заплатит \(2\) монеты. Подарки с номерами \(2\) и \(3\) Вася купит используя акцию, и заплатит \(4\) монеты. Можно доказать, что приобрести больше подарков, имея шесть монет, Вася не может.

Помогите Васе узнать максимальное количество подарков, которые он может приобрести.

Входные данные

В первой строке находится число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания \(t\) наборов входных данных, по две строки на каждый набор.

В первой строке каждого набора входных данных содержится три целых числа \(n, p, k\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le p \le 2\cdot10^9\), \(2 \le k \le n\)) — количество товаров в магазине, количество монет, имеющихся у Васи и количество товаров, которые можно купить по цене самого дорогого.

Во второй строке каждого набора данных находятся \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^4\)) — цены подарков.

Гарантируется, что сумма \(n\) по всем наборам данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора данных в отдельной строке выведите одно целое число \(m\) — максимальное количество подарков, которые может купить Вася.

E. Новогодние посиделки

дп жадные алгоритмы *1800

О, Новый год. Лучшее время, чтобы собрать всех друзей вместе и окунуться в теплые воспоминания прошедшего года...

\(n\) друзей живут в городе, который можно представить в виде числовой прямой. \(i\)-й друг живет в городе с координатой \(x_i\). \(i\)-й друг может пойти отмечать Новый год в дом с координатой \(x_i-1\), \(x_i+1\) или остаться у себя в \(x_i\). Каждый друг может пойти куда-либо не более одного раза.

Для всех друзей выполняется \(1 \le x_i \le n\), но они могут ходить и в дома с координатами \(0\) и \(n+1\) (если координаты их домов \(1\) или \(n\), соответственно).

Например, пусть начальные позиции будут \(x = [1, 2, 4, 4]\). Тогда конечные позиции могут быть \([1, 3, 3, 4]\), \([0, 2, 3, 3]\), \([2, 2, 5, 5]\), \([2, 1, 3, 5]\) и так далее. Количество заполненных домов — это количество различных позиций среди конечных.

Теперь все друзья выбрали, куда пойти. После всех перемещений подсчитали количество заполненных домов. Какое минимальное и максимальное количество заполненных домов могло получиться?

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество друзей.

Во второй строке записаны \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le n\)) — координаты домов друзей.

Выходные данные

Выведите два целых числа — минимальное и максимальное количество заполненных домов, которые могли получиться после всех перемещений.

Примечание

В первом примере друзья могут пойти в \([2, 2, 3, 3]\). То есть друг \(1\) идет в \(x_1+1\), друг \(2\) остается у себя дома в \(x_2\), друг \(3\) идет в \(x_3-1\) и друг \(4\) идет в \(x_4-1\). \([1, 1, 3, 3]\), \([2, 2, 3, 3]\) или \([2, 2, 4, 4]\) также являются возможными способами получить \(2\) заполненных дома.

Для максимального количества заполненных домов друзья могут пойти в \([1, 2, 3, 4]\) или в \([0, 2, 4, 5]\), например.

B. Новый год и восходящая последовательность

Бинарный поиск дп Комбинаторика реализация сортировки Структуры данных *1400

Последовательность \(a = [a_1, a_2, \ldots, a_l]\) длиной \(l\) имеет восход, если существует пара таких индексов \((i, j)\), что \(1 \le i < j \le l\) и \(a_i < a_j\). Например, последовательность \([0, 2, 0, 2, 0]\) имеет восход из-за пары индексов \((1, 4)\), но последовательность \([4, 3, 3, 3, 1]\) не имеет восхода.

Назовем конкатенацией двух последовательностей \(p\) и \(q\) такую последовательность, которая получится при последовательной записи сначала \(p\), затем \(q\) друг за другом, не меняя порядок элементов в них. Например, конкатенация последовательностей \([0, 2, 0, 2, 0]\) и \([4, 3, 3, 3, 1]\) равна последовательности \([0, 2, 0, 2, 0, 4, 3, 3, 3, 1]\). Конкатенация последовательностей \(p\) и \(q\) обозначается как \(p+q\).

Кенгун считает, что последовательность с восходом приносит удачу. Поэтому он хочет сделать много таких последовательностей на новый год. У Кенгун есть \(n\) последовательностей \(s_1, s_2, \ldots, s_n\), которые могут иметь разную длину.

Кенгун рассмотрит \(n^2\) всевозможных пар последовательностей \(s_x\) и \(s_y\) (\(1 \le x, y \le n\)) и проверит содержит ли конкатенация \(s_x + s_y\) восход или нет. Обратите внимание, что порядок выбора последовательностей в пару имеет значение. Кроме того, он может выбирать последовательность в пару к самой себе.

Пожалуйста, посчитайте количество пар последовательностей (\(x, y\)) для заданного набора \(s_1, s_2, \ldots, s_n\), конкатенация \(s_x + s_y\) которых имеет восход.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 100\,000\)), обозначающее количество последовательностей.

В каждой из следующих \(n\) строк записано целое число \(l_i\) (\(1 \le l_i\)), обозначающее длину \(s_i\), после которой записано \(l_i\) целых чисел \(s_{i, 1}, s_{i, 2}, \ldots, s_{i, l_i}\) (\(0 \le s_{i, j} \le 10^6\)), обозначающие последовательность \(s_i\).

Гарантируется, что сумма всех \(l_i\) не превосходит \(100\,000\).

Выходные данные

Выведите одно целое число, количество пар последовательностей, конкатенация которых имеет восход.

Примечание

В первом примере, следующие \(9\) последовательностей имеют восход: \([1, 2], [1, 2], [1, 3], [1, 3], [1, 4], [1, 4], [2, 3], [2, 4], [3, 4]\). Одинаковые по содержимому последовательности учитываются столько раз, сколько раз они встречаются как результат конкатенации.

B. Вкусные покупки

дп жадные алгоритмы реализация *1300

Сегодня Яссер и Адель пошли в магазин за пирожными. На полке в магазине стоят \(n\) типов пирожных, пронумерованные от \(1\) до \(n\). Количество пирожных каждого типа бесконечно. Определим вкус \(i\)-го пирожного некоторой величиной \(a_i\), которая является целым числом. В магазине есть как вкусные пирожные, так и неприятные, поэтому данная величина может быть положительной, нулем или отрицательной.

Яссер, разумеется, хочет попробовать их все, поэтому он купит ровно по одному пирожному каждого типа.

Адель, с другой стороны, выберет некоторый отрезок \([l, r]\) \((1 \le l \le r \le n)\), который содержит не все пирожные (он не может выбрать \([l, r] = [1, n]\)) и купит ровно по одному пирожному каждого из типов \(l, l + 1, \dots, r\).

После этого они сравнят суммарный вкус купленных ими пирожных. Яссер будет счастлив, если суммарный вкус пирожных, которые он купил, строго больше, чем суммарный вкус пирожных, которые купил Адель вне зависимости от выбора Адель.

Например, пусть вкус пирожных будет \([7, 4, -1]\). Яссер купит все, суммарный вкус будет равен \(7 + 4 - 1 = 10\). Адель может выбрать отрезки \([7], [4], [-1], [7, 4]\) или \([4, -1]\), суммарный вкус будет равен \(7, 4, -1, 11\) и \(3\), соответственно. Адель может выбрать отрезок с суммарным вкусом \(11\), и раз \(10\) не строго больше \(11\), то Яссер не будет счастлив :(

Узнайте, будет ли Яссер счастлив после похода в магазин.

Входные данные

В каждом тесте содержится несколько наборов входных данных. В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует описание наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(2 \le n \le 10^5\)).

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)), где \(a_i\) является вкусом \(i\)-го типа пирожного.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если суммарный вкус пирожных, которые купил Яссер, строго больше, чем суммарный вкус пирожных, которые купил Адель вне зависимости от выбора Адель. В противном случае выведите «NO».

Примечание

В первом примере суммарный вкус любого отрезка, который может выбрать Адель, меньше, чем суммарный вкус всех пирожных.

Во втором примере Адель выберет отрезок \([1, 2]\) с суммарным вкусом \(11\), что не меньше, чем суммарный вкус всех пирожных, который равен \(10\).

В третьем примере, Адель может выбрать отрезок \([3, 3]\) c суммарным вкусом \(5\). Обратите внимание, что вкус пирожных у Яссера тоже равен \(5\), поэтому в данном случае суммарный вкус пирожных, которые купил Яссер, не строго больше, чем суммарный вкус пирожных, которые купил Адель.

D. Dr. Evil Underscores

битмаски Деревья дп жадные алгоритмы Перебор поиск в глубину и подобное разделяй и властвуй Строки *1900

Сегодня Бакри в качестве дружеского подарка вручил Бадави \(n\) целых чисел \(a_1, a_2, \dots, a_n\) и дал ему задачку выбрать такой \(X\), что \(\underset{1 \leq i \leq n}{\max} (a_i \oplus X)\) принимает минимальное возможное значение, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Бадави, как обычно, ленится, поэтому вы решили помочь ему и найти минимальное возможное значение \(\underset{1 \leq i \leq n}{\max} (a_i \oplus X)\).

Входные данные

В первой строке записано одно целое число \(n\) (\(1\le n \le 10^5\)).

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2^{30}-1\)).

Выходные данные

Выведите одно целое число — минимальное возможное значение \(\underset{1 \leq i \leq n}{\max} (a_i \oplus X)\).

Примечание

В первом примере можно выбрать \(X = 3\).

Во втором примере можно выбрать \(X = 5\).

E. Удали один отрезок

графы Деревья дп Конструктив Перебор сортировки Структуры данных *2300

На координатной прямой \(Ox\) заданы \(n\) отрезков \([l_1, r_1]\), \([l_2, r_2]\), ..., \([l_n, r_n]\). Отрезок \([l, r]\) покрывает все точки от \(l\) до \(r\) включительно, то есть такие \(x\), что \(l \le x \le r\).

Отрезки могут располагаться произвольным образом  — вкладываться друг в друга, совпадать и т.п. Отрезки могут вырождаться в точку, то есть допустимо, что \(l_i=r_i\).

Объединением набора отрезков называется такой минимальный набор отрезков, который покрывает в точности тот же набор точек, что и заданный набор. Например:

  • если \(n=3\) и отрезки имеют вид \([3, 6]\), \([100, 100]\), \([5, 8]\), то их объединение состоит из \(2\) отрезков: \([3, 8]\) и \([100, 100]\);
  • если \(n=5\) и отрезки имеют вид \([1, 2]\), \([2, 3]\), \([4, 5]\), \([4, 6]\), \([6, 6]\) то их объединение состоит из \(2\) отрезков: \([1, 3]\) и \([4, 6]\).

Очевидно, что объединение — это набор непересекающихся отрезков.

Требуется удалить ровно один отрезок из заданных \(n\) таким образом, чтобы количество отрезков в объединении оставшихся \(n-1\) было наибольшим.

Например, если \(n=4\) и отрезки имеют вид \([1, 4]\), \([2, 3]\), \([3, 6]\), \([5, 7]\), то:

  • если из набора удалить первый отрезок, то останутся отрезки \([2, 3]\), \([3, 6]\), \([5, 7]\), объединение которых состоит из \(1\) отрезка;
  • если из набора удалить второй отрезок, то останутся отрезки \([1, 4]\), \([3, 6]\), \([5, 7]\), объединение которых состоит из \(1\) отрезка;
  • если из набора удалить третий отрезок, то останутся отрезки \([1, 4]\), \([2, 3]\), \([5, 7]\), объединение которых состоит из \(2\) отрезков;
  • если из набора удалить четвертый отрезок, то останутся отрезки \([1, 4]\), \([2, 3]\), \([3, 6]\), объединение которых состоит из \(1\) отрезка.

Таким образом, в примере выше надо обязательно удалять третий отрезок, чтобы получить ответ \(2\).

Напишите программу, которая найдет наибольшее количество отрезков, которые получатся в объединении \(n-1\) оставшегося, если можно удалить любой из заданных \(n\) отрезков.

Обратите внимание, что если в заданном наборе есть несколько одинаковых отрезков, то удалить вы всё-равно можете ровно один из них. То есть набор отрезков после удаления одного будет содержать ровно \(n-1\) отрезок.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(2 \le n \le 2\cdot10^5\)) — количество отрезков в заданном наборе. Далее в \(n\) строках заданы сами отрезки парами целых чисел \(l_i\), \(r_i\) (\(-10^9 \le l_i \le r_i \le 10^9\)), где \(l_i\) и \(r_i\) — координаты левого и правого конца \(i\)-го отрезка, соответственно.

Отрезки заданы в произвольном порядке.

Гарантируется, что сумма значений \(n\) по всем наборам во входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Выведите \(t\) чисел — ответы на заданные \(t\) наборов входных данных в порядке их следования в тесте. Ответ равен максимальному количеству отрезков в объединении \(n-1\) отрезка из \(n\) заданных, если допускается удалить один любой отрезок.

A. Гирлянда

дп жадные алгоритмы сортировки *1800

Вадим очень любит наряжать новогоднюю ёлку, поэтому ему подарили невероятно красивую гирлянду. Она состоит из \(n\) лампочек, расположенных в ряд. На каждой лампочке написано число от \(1\) до \(n\), причем все числа различны и шли в произвольном порядке. Пока Вадим решал задачи, его домашний Карась снял с гирлянды некоторые лампочки. Теперь Вадим хочет вернуть их на место.

Вадим хочет повесить все лампочки обратно на гирлянду. Он считает сложностью гирлянды количество пар соседних лампочек, на которых написаны числа разной четности (то есть имеющие разные остатки при делении на \(2\)). Например, сложность гирлянды 1 4 2 3 5 равна \(2\), а сложность гирлянды 1 3 5 7 6 4 2, равна \(1\).

Никто не любит сложности, поэтому Вадим хочет минимизировать количество таких пар. Найдите способ повесить снятые лампочки на гирлянду, чтобы минимизировать ее сложность.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество лампочек в гирлянде.

Вторая строка содержит \(n\) целых чисел \(p_1,\ p_2,\ \ldots,\ p_n\) (\(0 \le p_i \le n\)) — номер \(i\)-й лампочки или \(0\), если Карась ее снял.

Выходные данные

Выведите единственное число — минимальную сложность гирлянды.

Примечание

В первом примере надо расставить лампочки как 1 5 4 2 3. В этом случае сложность будет равна 2, так как рядом расположены пары лампочек \((5, 4)\) и \((2, 3)\).

Во втором примере один из правильных ответов 1 7 3 5 6 4 2.

F. Гарри Гончар

бпф дп Конструктив математика Перебор реализация *3100

Как известно, чтобы победить лорда Волан-де-Морта, Гарри необходимо сперва уничтожить все крестражи. Последний крестраж лорда Сами-Знаете-кого представляет собой массив \(a\) состоящий из \(n\) целых чисел, который Гарри необходимо уничтожить. Массив считается уничтоженным, если все его элементы равны 0. Чтобы его уничтожить, Гарри может производить два типа операций:

  1. выбрать индекс \(i\) (\(1 \le i \le n\)), целое число \(x\) и вычесть из \(a_i\) число \(x\).
  2. выбрать индексы \(i\) и \(j\) (\(1 \le i, j \le n; i \ne j\)), целое число \(x\) и вычесть из \(a_i\) число \(x\), а из \(a_j\) — число \(x + 1\).

Обратите внимание, что \(x\) может быть произвольным, в том числе и отрицательным.

У Гарри осталось совсем немного времени. Помогите ему и узнайте, какое минимальное число операций с массивом ему придётся совершить, чтобы уничтожить массив и покончить с лордом Волан-де-Мортом!

Входные данные

Первая строка входных данных содержит одно целое число \(n\) — количество элементов в массиве \(a\) (\(1 \le n \le 20\)).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — элементы массива (\(-10^{15} \le a_i \le 10^{15}\)).

Выходные данные

Выведите одно число — минимальное количество действий, за которое Гарри сможет уничтожить массив \(a\).

Примечание

В первом примере можно три раза применить операцию первого типа к массиву.

Во втором примере можно два раза применить операцию второго типа: сначала выбрать \(i = 2, j = 1, x = 4\) и получить массив \((0, -1, -2)\), затем выбрать \(i = 3, j = 2, x = -2\) чтобы уничтожить массив.

В третьем примере ничего делать не надо, так как массив уже состоит из нулей.

C. Два массива

дп Комбинаторика *1600

Вам заданы два числа \(n\) и \(m\). Посчитайте количество таких пар массивов \((a, b)\), что:

  • длина обоих массивов равна \(m\);
  • каждый элемент каждого массива — целое число от \(1\) до \(n\) (включительно);
  • \(a_i \le b_i\) для любого индекса \(i\) от \(1\) до \(m\);
  • массив \(a\) отсортирован в порядке неубывания;
  • массив \(b\) отсортирован в порядке невозрастания.

Так как ответ может быть слишком большим, посчитайте его по модулю \(10^9+7\).

Входные данные

Единственная строка содержит два числа \(n\) и \(m\) (\(1 \le n \le 1000\), \(1 \le m \le 10\)).

Выходные данные

Выведите одно число – количество массивов \(a\) и \(b\), удовлетворяющих условиям, описанным выше по модулю \(10^9+7\).

Примечание

В первом тесте существуют \(5\) подходящих вариантов:

  • \(a = [1, 1], b = [2, 2]\);
  • \(a = [1, 2], b = [2, 2]\);
  • \(a = [2, 2], b = [2, 2]\);
  • \(a = [1, 1], b = [2, 1]\);
  • \(a = [1, 1], b = [1, 1]\).

D. Задача Минимакс

Бинарный поиск битмаски дп *2000

Вам заданы \(n\) массивов \(a_1\), \(a_2\), ..., \(a_n\); каждый массив состоит ровно из \(m\) целых чисел. Будем обозначать \(y\)-й элемент \(x\)-го массива как \(a_{x, y}\).

Вы должны выбрать два массива \(a_i\) и \(a_j\) (\(1 \le i, j \le n\), допустима ситуация \(i = j\)). Из данных массивов строится новый массив \(b\) длины \(m\), такой что для каждого \(k \in [1, m]\) \(b_k = \max(a_{i, k}, a_{j, k})\).

Ваша задача — выбрать \(i\) и \(j\) так, чтобы значение \(\min \limits_{k = 1}^{m} b_k\) было максимально возможным.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 3 \cdot 10^5\), \(1 \le m \le 8\)) — количество массивов и количество элементов в каждом массиве соответственно.

Далее следуют \(n\) строк, в \(x\)-й строке задан массив \(a_x\), другими словами, \(m\) целых чисел \(a_{x, 1}\), \(a_{x, 2}\), ..., \(a_{x, m}\) (\(0 \le a_{x, y} \le 10^9\)).

Выходные данные

Выведите два числа \(i\) и \(j\) (\(1 \le i, j \le n\), допустима ситуация \(i = j\)) — индексы выбранных массивов, таких что значение \(\min \limits_{k = 1}^{m} b_k\) — максимально возможное. Если существует несколько ответов — выведите любой из них.

F. Построение многоугольников

дп *3500

Вам дано \(n\) попарно неколлинеарных двумерных векторов. Вы можете создавать замкнутые ломаные на двумерной плоскости с помощью этих векторов и следующего процесса:

  1. Вы встаете в начало координат, точку \((0, 0)\).
  2. Выберите один из векторов и отложите отрезок из текущей точки, равный этому вектору. То есть, если ваша текущая точка имеет координаты \((x, y)\) и вы выбираете вектор \((u, v)\), нарисуйте отрезок из текущей точки в точку с координатами \((x + u, y + v)\) и встаньте в точку \((x + u, y + v)\).
  3. Повторяйте шаг 2, пока вы не окажетесь в начале координат снова.

Вы можете использовать каждый вектор любое количество раз в ходе процесса.

Посчитайте количество различных, невырожденных (площадь больше \(0\)), выпуклых многоугольников, которые могут быть получены этим процессом и такие, что они могут быть помещены в квадрат размером \(m \times m\) и вектора, использованные для построения многоугольника, идут в порядке против часовой стрелки. Поскольку это количество может быть слишком большим вы должны найти его по модулю \(998244353\).

Два многоугольника считаются одинаковыми, если существует параллельный перенос одного из многоугольников, переводящий его в другой.

Многоугольник можно поместить в квадрат размером \(m \times m\), если существует параллельный перенос этого многоугольника, при котором любая точка \((u, v)\) внутри или на границе получившегося многоугольника удовлетворяет неравенствам \(0 \leq u, v \leq m\).

Входные данные

В первой строке находится два целых числа \(n\) и \(m\)  — количество векторов и размер квадрата (\(1 \leq n \leq 5\), \(1 \leq m \leq 10^9\)).

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\)  — \(x\)-координата и \(y\)-координата \(i\)-о вектора (\(|x_i|, |y_i| \leq 4\), \((x_i, y_i) \neq (0, 0)\)).

Гарантируется, что никакие два данных вектора не параллельны, то есть для любых двух индексов \(i\) и \(j\), таких что \(1 \leq i < j \leq n\), не существует вещественного числа \(k\), такого что \(x_i \cdot k = x_j\) и \(y_i \cdot k = y_j\).

Выходные данные

Выведите единственное целое число  — количество многоугольников, удовлетворяющих всем условиям по модулю \(998244353\).

Примечание

Многоугольники для первого теста:

Единственный многоугольник для второго теста:

Единственный многоугольник для четвертого теста:

C. Атака Ксенона

Деревья дп жадные алгоритмы Комбинаторика поиск в глубину и подобное *2300

На другом этаже A.R.C. Markland-N, молодой человек Саймон "Ксенон" Джексон отдыхает, завершив свои работы по проекту быстрее запланированного (впрочем как всегда). Так как свободного времени достаточно много, он надевает свой легендарный хакерский "X" инстинкт и бежит сражаться против банд кибермира.

Его целью является сеть из \(n\) небольших банд. Их сеть состоит из ровно \(n - 1\) прямых соединений, каждое из которых связывает какие-то две банды вместе. Соединения устроены таким образом, что любые две банды соединены через последовательность прямых соединений.

Изучая данные, Ксенон понял, что банды используют для самозащиты следующую форму шифрования. Каждому соединению назначено целое число от \(0\) до \(n - 2\), таким образом, что все назначенные числа различны, а каждое число назначено какому-то соединению. Если атакующий пытается получить доступ к защищённым данным, то ему придётся прорваться через \(S\) слоёв с паролями, где \(S\) определяется как:

\(\)S = \sum_{1 \leq u < v \leq n} mex(u, v)\(\)

Здесь \(mex(u, v)\) обозначает наименьшее неотрицательное целое число, которое не встречается на соединениях на единственном простом пути между бандами \(u\) и \(v\).

Ксенон не знает каким образом числа были назначены соединениям, но это не проблема. Он собирается поручить своим AI перебрать и взломать все пароли, но перед этим он хочет знать чему равно наибольшее возможное значение \(S\), чтобы настроить AI наиболее эффективно.

Сейчас Ксенон ушёл писать скрипты для AI, и он собирается их закончить в течение двух часов. Не могли бы вы найти наибольшее значение \(S\) перед тем, как он вернётся?

Входные данные

Первая строка содержит целое число \(n\) (\(2 \leq n \leq 3000\)) — количество банд в сети.

Каждая из следующих \(n - 1\) строк содержит числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\); \(u_i \neq v_i\)), обозначающие прямое соединение между бандами \(u_i\) и \(v_i\).

Гарантируется, что связи расположены таким образом, что каждая пара банд соединена ровно одним простым путём.

Выходные данные

Выведите наибольшее возможное значение \(S\) — количества слоёв с паролями в сети банд.

Примечание

В первом примере можно достичь максимального \(S\) следующим образом:

В этой сети, \(mex(1, 2) = 0\), \(mex(1, 3) = 2\) и \(mex(2, 3) = 1\). Таким образом, \(S = 0 + 2 + 1 = 3\).

Во втором примере можно достичь максимального \(S\) таким образом:

В этой сети все ненулевые значения mex перечислены ниже:

  • \(mex(1, 3) = 1\)
  • \(mex(1, 5) = 2\)
  • \(mex(2, 3) = 1\)
  • \(mex(2, 5) = 2\)
  • \(mex(3, 4) = 1\)
  • \(mex(4, 5) = 3\)

Таким образом, \(S = 1 + 2 + 1 + 2 + 1 + 3 = 10\).

D. Хаотичная В.

графы Деревья дп жадные алгоритмы математика теория чисел *2700

«Всё было спланировано, Никаких больше скрытых забот. Состояние Цитуса тоже совершенно..»

Текущее время...... 00:01:12......

Время пришло.

Образцов эмоций теперь достаточно. Прошло почти три года, и пришло время для Айви разбудить свою связанную сестру Ванессу.

Система внутри библиотеки A.R.C. может быть представлена как неориентированный граф с бесконечным числом обрабатывающих вершин, пронумерованных последовательными положительными целыми числами (\(1, 2, 3, \ldots\)). Вершина с номером \(x\) (\(x > 1\)) напрямую соединена с вершиной с номером \(\frac{x}{f(x)}\), где \(f(x)\) обозначает наименьший простой делитель \(x\).

Разум Ванессы разделён на \(n\) фрагментов. Спустя более 500 лет в коме, фрагменты несколько подраскидало: \(i\)-й фрагмент теперь находится в вершине с номером \(k_i!\) (факториал \(k_i\)).

Чтобы максимизировать шансы успешного пробуждения, Айви хочет разместить образцы эмоций в вершине \(P\), такой что суммарная длина всех путей от каждого фрагмента до \(P\) является минимально возможной. В случае если несколько фрагментов расположены в одной и той же вершине, путь от них до \(P\) учитывается несколько раз.

В мире нулей и единиц такое требование вполне тривиально для Айви. Не более, чем секундой позже, она уже нашла такую вершину.

Возможно ли такое же для простого смертного как вы?

Для простоты, найдите минимальную суммарную длину путей от каждого фрагмента до оптимальной вершины \(P\).

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 10^6\)) — количество фрагментов в разуме Ванессы.

Вторая строка содержит \(n\) целых чисел \(k_1, k_2, \ldots, k_n\) (\(0 \le k_i \le 5000\)), задающие вершины содержащие фрагменты разума Ванессы: \(i\)-й фрагмент расположен в вершине \(k_i!\).

Выходные данные

Выведите одно целое число, обозначающее минимальную сумму путей от фрагментов до вершины с образцами эмоций \(P\).

Напомним, что если несколько фрагментов расположены в одной вершины, то расстояние от этой вершины до \(P\) нужно учесть несколько раз.

Примечание

Первые \(24\) вершины системы выглядят следующим образом (вершины \(1!\), \(2!\), \(3!\), \(4!\) обозначены жирным):

В первом примере Айви может разместить образцы эмоций в вершине \(1\), тогда:

  • Расстояние от первого фрагмента Ванессы до вершины \(1\) равно \(1\).
  • Расстояние от второго фрагмента Ванессы до вершины \(1\) равно \(0\).
  • Расстояние от третьего фрагмента Ванессы до вершины \(1\) равно \(4\).

Суммарная длина равна \(5\).

Во втором примере Айви оптимальной вершина для сбора является \(6\):

  • Расстояние от первого фрагмента Ванессы до вершины \(6\) равно \(0\).
  • Расстояние от второго фрагмента Ванессы до вершины \(6\) равно \(2\)..
  • Расстояние от третьего фрагмента Ванессы до вершины \(6\) равно \(2\).
  • Расстояние от четвёртого фрагмента Ванессы до вершины \(6\) снова равно \(2\).

Суммарная длина равна \(6\).

F. Игрушки Норы

битмаски дп Комбинаторика *3500

Давным давно, семилетняя Нора любила играть в игрушки вместе со своим созданием ROBO_Head-02, не только для того чтобы развлечься, но и чтобы улучшить его способности.

Однажды, приёмный отец Норы, Феникс Уайл, принёс Норе \(n\) коробок с игрушками. Перед тем как их распаковать, Нора решила устроить для ROBO небольшую игру.

Она пронумеровала все \(n\) коробок используя \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) и попросила ROBO выполнить ноль или более операций следующего вида:

  • Выбрать три различных индекса \(i\), \(j\) и \(k\), таких что \(a_i \mid a_j\) и \(a_i \mid a_k\). Иными словами, \(a_i\) делит и \(a_j\), и \(a_k\). Иначе говоря, \(a_j \bmod a_i = 0\), \(a_k \bmod a_i = 0\).
  • Затем, Нора передаст \(k\)-ю коробку ROBO, а тот положит её наверх стопки с коробками рядом с ним. Изначально эта стопка пуста.
  • После этого коробка \(k\) становится недоступной для любых дальнейших действий.

После девяти игр, это процесс весьма позабавил Нору. Она попросила ROBO посчитать количество возможных стопок с коробками, имеющие максимально возможный размер, которые могут получиться. Две стопки считаются различными, если существует хотя бы одна позиция, в которой они отличаются.

Так как ROBO пока на очень ранней стадии развития, да и Нора достаточно молода, чтобы концентрироваться надолго, они оба заснули, не найдя ответа. Не могли бы вы им помочь?

Так как количество таких стопок может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка содержит целое число \(n\) (\(3 \le n \le 60\)) — количество коробок.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 60\)), где \(a_i\) обозначает пометку на \(i\)-й коробке.

Выходные данные

Выведите количество различных максимальных по размеру стопок, которые могли получится у ROBO, по модулю \(10^9 + 7\).

Примечание

Обозначим содержимое стопки как последовательность \(b\), где самая нижняя коробка стопки находится на самой левой позиции.

В первом примере возможно \(2\) различных стопки:

  • \(b = [6]\) (\([2, \mathbf{6}, 8] \xrightarrow{(1, 3, 2)} [2, 8]\))
  • \(b = [8]\) (\([2, 6, \mathbf{8}] \xrightarrow{(1, 2, 3)} [2, 6]\))

Во втором примере возможно \(4\) различных стопки:

  • \(b = [9, 12]\) (\([2, 3, 4, \mathbf{9}, 12] \xrightarrow{(2, 5, 4)} [2, 3, 4, \mathbf{12}] \xrightarrow{(1, 3, 4)} [2, 3, 4]\))
  • \(b = [4, 12]\) (\([2, 3, \mathbf{4}, 9, 12] \xrightarrow{(1, 5, 3)} [2, 3, 9, \mathbf{12}] \xrightarrow{(2, 3, 4)} [2, 3, 9]\))
  • \(b = [4, 9]\) (\([2, 3, \mathbf{4}, 9, 12] \xrightarrow{(1, 5, 3)} [2, 3, \mathbf{9}, 12] \xrightarrow{(2, 4, 3)} [2, 3, 12]\))
  • \(b = [9, 4]\) (\([2, 3, 4, \mathbf{9}, 12] \xrightarrow{(2, 5, 4)} [2, 3, \mathbf{4}, 12] \xrightarrow{(1, 4, 3)} [2, 3, 12]\))

В третьем примере ROBO не сможет сделать ничего. Поэтому возможна только \(1\) стопка, и это пустая стопка.

F. Три пути в дереве

Деревья дп жадные алгоритмы поиск в глубину и подобное *2000

Вам задано невзвешенное дерево с \(n\) вершинами. Напомним, что дерево — это связный неориентированный граф без циклов.

Ваша задача — выбрать три различных вершины \(a, b, c\) в этом дереве таких, что количество ребер, принадлежащих как минимум одному из простых путей между \(a\) и \(b\), \(b\) и \(c\), или \(a\) и \(c\), максимально. Обратите внимание на примечания для лучшего понимания.

Простой путь — это путь, который посещает каждую вершину не более одного раза.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Следующая \(n - 1\) строка описывает ребра дерева в виде \(a_i, b_i\) (\(1 \le a_i\), \(b_i \le n\), \(a_i \ne b_i\)). Гарантируется, что заданный граф является деревом.

Выходные данные

Первой строкой выведите одно целое число \(res\) — максимальное количество ребер, принадлежащих как минимум одному из простых путей между \(a\) и \(b\), \(b\) и \(c\), или \(a\) и \(c\).

Во второй строке выведите три целых числа \(a, b, c\) таких, что \(1 \le a, b, c \le n\) и \(a \ne, b \ne c, a \ne c\).

Если существует несколько подходящих ответов, вы можете вывести любой.

Примечание

Изображение, соответствующее первому примеру (и другой правильный ответ):

Если выбрать вершины \(1, 5, 6\), то путь между вершинами \(1\) и \(5\) состоит из ребер \((1, 2), (2, 3), (3, 4), (4, 5)\), путь между \(1\) и \(6\) состоит из ребер \((1, 2), (2, 3), (3, 4), (4, 6)\) и путь между \(5\) и \(6\) состоит из ребер \((4, 5), (4, 6)\). Объединение этих путей — \((1, 2), (2, 3), (3, 4), (4, 5), (4, 6)\), следовательно, ответ — \(5\). Можно показать, что лучшего ответа не существует.

C. Получи строку

дп жадные алгоритмы Строки *1600

Вам заданы две строки \(s\) и \(t\), состоящие из строчных букв латинского алфавита. Также у вас есть строка \(z\), которая изначально пуста. Вы хотите, чтобы строка \(z\) стала равна строке \(t\). Для этого вы можете выполнять следующую операцию: добавить любую подпоследовательность строки \(s\) в конец строки \(z\). Подпоследовательность — это последовательность, которая получается из данной путем удаления нуля или более ее элементов. Например, если \(z = ac\), \(s = abcde\), вы можете превратить \(z\) в следующие строки за одну операцию:

  1. \(z = acace\) (если выберете подпоследовательность \(ace\));
  2. \(z = acbcd\) (если выберете подпоследовательность \(bcd\));
  3. \(z = acbce\) (если выберете подпоследовательность \(bce\)).

Обратите внимание, что строка \(s\) не меняется после операций.

Посчитайте минимальное количество операций, необходимое для того, чтобы превратить строку \(z\) в строку \(t\).

Входные данные

Первая строка содержит единственное число \(T\) (\(1 \le T \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит строку \(s\) (\(1 \le |s| \le 10^5\)), состоящую из строчных букв латинского алфавита.

Вторая строка каждого набора входных данных содержит строку \(t\) (\(1 \le |t| \le 10^5\)), состоящую из строчных букв латинского алфавита.

Гарантируется, что суммарная длина строк \(s\) и \(t\) во входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно число — минимальное количество операций, необходимое для того, чтобы превратить строку \(z\) в строку \(t\). Если это невозможно выведите \(-1\).

F. Хороший контест

дп Комбинаторика Теория вероятностей *2700

На большой платформе по спортивному программированию ForceCoders скоро начнется очередной контест. Авторы подготовили \(n\) задач, и так как платформа очень популярна, аж \(998244351\) программист со всего мира будет принимать участие в контесте.

Для каждой задачи авторы оценили количество участников, которые ее решат: по \(i\)-й задаче точно будет не менее \(l_i\) и не более \(r_i\) успешных решений.

Создатель платформы ForceCoders использует различные критерии, чтобы определить, является ли контест хорошим. Один из этих критериев учитывает количество инверсий в порядке задач. Инверсией называется пара задач \((x, y)\), такая, что \(x\) расположена в контесте раньше (\(x < y\)), но количество успешных решений по задаче \(y\) строго больше.

Очевидно, и создатель платформы, и авторы контеста хотят, чтобы контест получился хорошим. Поэтому сейчас они хотят посчитать вероятность того, что не будет ни одной инверсии в порядке задач. Можно предположить, что для каждой задачи \(i\) любое целочисленное количество решений (между \(l_i\) и \(r_i\)) равновероятно, и все эти значения независимы друг от друга.

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 50\)) — количество задач в контесте.

Затем следуют \(n\) строк, в \(i\)-й из которых заданы два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i \le r_i \le 998244351\)) — минимальное и максимальное количество успешных решений по \(i\)-й задаче, соответственно.

Выходные данные

Вероятность, что в порядке задач не будет инверсий, можно выразить в виде несократимой дроби \(\frac{x}{y}\), где \(y\) взаимно просто с \(998244353\). Выведите одно целое число — значение \(xy^{-1}\), взятое по модулю \(998244353\), где \(y^{-1}\) — такое число, что \(yy^{-1} \equiv 1\) \((mod\) \(998244353)\).

Примечание

Ответ в первом тесте равен \(\frac{1}{2}\).

E1. Покраска строки (простая версия)

графы дп жадные алгоритмы Конструктив сортировки *1800

Это простая версия задачи. Задачи отличаются друг от друга, но простая версия почти является подзадачей сложной версии. Обратите внимание на то, что ограничения и формат вывода различаются.

Дана строка \(s\), состоящая из \(n\) строчных латинских букв.

Вам нужно раскрасить все её символы в один из двух цветов (каждый символ покрашен ровно в один цвет, одинаковые буквы могут быть покрашены как одним цветом, так и разными, т.е. вам нужно выбрать ровно один цвет для каждого индекса в \(s\)).

После покраски вы можете поменять местами два любых соседних символа строки, которые раскрашены в разные цвета. Вы можете применить эту операцию произвольное (возможно, нулевое) количество раз.

Цель — сделать строку отсортированной, т.е. все символы должны быть расположены в алфавитном порядке.

Ваша задача — определить, возможно ли покрасить заданную строку так, что после покраски она может быть отсортирована с помощью какой-либо последовательности шагов. Обратите внимание: вам нужно восстановить только раскраску, но не последовательность шагов.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 200\)) — длина строки \(s\).

Вторая строка входных данных содержит строку \(s\), состоящую ровно из \(n\) строчных латинских букв.

Выходные данные

Если невозможно раскрасить заданную строку так, что после покраски она может быть отсортирована после какой-либо последовательности шагов, выведите «NO» (без кавычек) первой строкой.

В противном случае выведите «YES» первой строкой и любую корректную раскраску второй строкой (раскраской считается строка, состоящая из \(n\) символов, где \(i\)-й символ должен быть '0', если \(i\)-й символ покрашен в первый цвет и '1' иначе).

E2. Покраска строки (сложная версия)

дп Структуры данных *2000

Это сложная версия задачи. Задачи отличаются друг от друга, но простая версия почти является подзадачей сложной версии. Обратите внимание на то, что ограничения и формат вывода различаются.

Дана строка \(s\), состоящая из \(n\) строчных латинских букв.

Вам нужно раскрасить все её символы в минимальное количество цветов (каждый символ покрашен ровно в один цвет, одинаковые буквы могут быть покрашены как одним цветом, так и разными, т.е. вам нужно выбрать ровно один цвет для каждого индекса в \(s\)).

После покраски вы можете поменять местами два любых соседних символа строки, которые раскрашены в разные цвета. Вы можете применить эту операцию произвольное (возможно, нулевое) количество раз.

Цель — сделать строку отсортированной, т.е. все символы должны быть расположены в алфавитном порядке.

Ваша задача – найти минимальное количество цветов, которое нужно, чтобы раскрасить строку так, что после раскраски она может быть отсортирована с помощью какой-либо последовательности шагов. Обратите внимание: вам нужно восстановить только раскраску, но не последовательность шагов.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину строки \(s\).

Вторая строка входных данных содержит строку \(s\), состоящую ровно из \(n\) строчных латинских букв.

Выходные данные

В первой строке выведите одно целое число \(res\) (\(1 \le res \le n\)) — минимальное количество цветов, которое нужно, чтобы раскрасить строку так, что после раскраски она может быть отсортирована с помощью какой-либо последовательности шагов.

Во второй строке выведите любую возможную раскраску, которая может быть использована, чтобы отсортировать строку с помощью какой-либо последовательности шагов, описанных в условии задачи. Раскраской считается массив \(c\) длины \(n\), где \(1 \le c_i \le res\) и \(c_i\) содержит цвет \(i\)-го символа.

G. M-числа

*особая задача дп математика

Для заданного положительного целого \(m\) положительное число называется \(m\)-числом, если произведение его цифр равно \(m\). Например, начало ряда \(24\)-чисел выглядит следующим образом: \(38\), \(46\), \(64\), \(83\), \(138\), \(146\), \(164\), \(183\), \(226\) ...

Вам задано положительно целое \(m\) и \(k\). Выведите \(k\)-е среди \(m\)-чисел, если все \(m\)-числа отсортировать по возрастанию.

Входные данные

В единственной строке входных данных записаны два целых числа \(m\) и \(k\) (\(2 \le m \le 10^9\); \(1 \le k \le 10^9\)).

Выходные данные

Выведите искомое число — \(k\)-е среди всех \(m\)-чисел, если \(m\)-числа отсортировать по возрастанию. Если ответа не существует, то выведите -1.

H. Покраска строки

*особая задача дп Строки

Задана строка \(s\) из строчных букв латинского алфавита. Требуется покрасить каждую букву в один из двух цветов (красный или синий) так, что если выписать все красные буквы слева направо и выписать все синие буквы слева направо, то лексикографически максимальная из двух выписанных строк будет как можно лексикографически меньше. Одинаковые буквы могут быть покрашены в разные цвета, то есть для каждого индекса в строке \(s\) можно выбрать любой из двух цветов.

Формально, выпишем

  • строку \(r\) (может быть пустой) — все красные буквы в порядке слева направо (красная подпоследовательность),
  • строку \(b\) (может быть пустой) — все синие буквы в порядке слева направо (синяя подпоследовательность).

Ваша задача придумать такую покраску, что \(\max(r, b)\) — минимален. Небольшое напоминание: пустая строка является лексикографически наименьшей.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте. Далее записаны сами наборы входных данных по одному в строке.

Каждый набор входных данных является непустой строкой \(s\) длины от \(2\) до \(100\) символов включительно, которая состоит из строчных букв латинского алфавита.

Выходные данные

Выведите \(t\) строк, \(i\)-я из них должна содержать ответ на \(i\)-й набор входных данных. Выведите строку длины \(n\), где \(n\) — длина заданной строки \(s\): \(j\)-й символ строки должен быть равен либо 'R', либо 'B' в зависимости от того в красный или синий цвет покрашен \(j\)-й символ строки в найденном решении. Если ответов несколько, выведите любой из них.

D. Вокруг света

битмаски графы графы Деревья дп Комбинаторика математика поиск в глубину и подобное *3000

Ги-Мануэль и Тома планируют \(144\) кругосветных путешествия.

Вам дан простой взвешенный неориентированный связный граф из \(n\) вершин и \(m\) рёбер со следующим ограничением: не существует простого цикла (т. е. цикла, проходящего через каждую вершину не больше раза) длины больше \(3\), проходящего через вершину \(1\). Стоимостью пути (необязательно простого) в этом графе является XOR весов всех рёбер, входящих в этот путь, причём каждое ребро считается столько, сколько раз через него проходит путь.

Однако, путешествия стоимостью \(0\) их не устраивают.

Вы можете выбрать любое подмножество рёбер, инцидентных вершине \(1\), и удалить их. Сколько существует таких множеств, что при их удалении в полученном графе нет нетривиального цикла (необязательно простого) стоимостью \(0\), проходящего через вершину \(1\)? Цикл называется нетривиальным, если существует ребро, через которое он проходит нечётное количество раз. Так как ответ может быть большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 10^5\)) — количество вершин и рёбер в графе. \(i\)-я из следующих \(m\) строк содержит три целых числа \(a_i\), \(b_i\) и \(w_i\) (\(1 \le a_i, b_i \le n, a_i \neq b_i, 0 \le w_i < 32\)) — концы \(i\)-го ребра и его вес. Гарантируется, что в графе нет мультирёбер, граф является связным, и не существует простого цикла длины больше \(3\), проходящего через вершину \(1\).

Выходные данные

В единственной строке выведите ответ по модулю \(10^9+7\).

Примечание

На рисунках представлены графы из примеров. В первом примере в графе нет нетривиальных циклов со стоимостью \(0\), так что мы можем как удалить единственное ребро, инцидентное вершине \(1\), так и не удалять. Во втором примере если мы не удаляем ребро \(1-2\), то в графе будет цикл \(1-2-4-5-2-1\) со стоимостью \(0\); аналогично, если мы не удаляем ребро \(1-3\), то в графе будет цикл \(1-3-2-4-5-2-3-1\) со стоимостью \(0\). Единственный вариант — удалить оба ребра. В третьем примере подходят все подмножества, кроме тех двух, при которых остаются оба ребра \(1-3\) и \(1-4\).

C. Последовательность

дп сортировки *2200

Маленький Петя очень любит играть. Больше всего он любит играть в такую игру:

В начале выписывается последовательность из N чисел. Далее за один ход разрешается к любому числу прибавить 1 или отнять 1. Цель игры - за наименьшее количество ходов получить неубывающую последовательность. У Пети плохо с математикой, поэтому он попросил Вас ему помочь.

Последовательность a называется неубывающей, если выполняется a1 ≤ a2 ≤ ... ≤ aN, где N — длина последовательности.

Входные данные

Первая строка входного файла содержит число N (1 ≤ N ≤ 5000) — длину начальной последовательности. Следующие N строк содержат элементы последовательности - целые числа, по модулю не превышающие 109.

Выходные данные

На выходе должно быть одно число — искомое наименьшее количество ходов, требуемое для преобразования начальной последовательности в неубывающую.

D. Треугольники

геометрия дп *2600

Маленький Петя очень любит рисовать. Он нарисовал N красных и M синих точек на плоскости, причем так что никакие 3 из них не лежат на 1 прямой. Теперь ему интересно, сколько есть различных треугольников с вершинами в красных точках, не содержащих в себе ни одной синей точки.

Входные данные

Первая строка содержит 2 целых неотрицательных числа N и M (0 ≤ N ≤ 500, 0 ≤ M ≤ 500) - количество красных и синих точек, соответственно. Следующие N строк содержат по 2 целых числа - координаты красных точек. Следующие M строк содержат по 2 целых числа - координаты синих точек. Все координаты по модулю не превосходят 109.

Выходные данные

На выходе должно быть одно число - искомое количество треугольников с вершинами в красных точках, не содержащих в себе ни одной синей точки.

E. Нанософт

Бинарный поиск дп реализация Структуры данных *2500

Вараврех создал великую компанию и назвал ее Нанософт. Единственная вещь, которую Вараврех еще должен сделать это расположить огромное изображение с эмблемой Нанософта на главное здание этой компании.

Эмблема Нанософта может быть описана как четыре квадрата одинакового размера, объединенных вместе в один большой квадрат. Левый верхний квадрат окрашен в красный цвет, правый верхний квадрат окрашен в зеленый цвет, левый нижний окрашен в желтый цвет и правый нижний окрашен в синий цвет.

Примеры некоторых корректных эмблем:

Примеры некоторых некорректных эмблем:

Вараврех пришел в магазин Адхами с целью купить необходимое изображение. Хотя магазин Адхами очень большой у него было ровно одно изображение, описываемое таблицей с \(n\) строками и \(m\) столбцами. Цвет каждой клетки этой таблицы может быть зеленым (символ 'G'), красным (символ 'R'), желтым (символ 'Y') или синим (символ 'B').

Адхами дал Варавреху \(q\) опций, в каждой опции он дал ему подпрямоугольник этого изображения и сказал ему, что он может вырезать для себя подквадрат этого подпрямоугольника. Чтобы выбрать наилучшую опцию, Вараврех хочет узнать максимальную площадь подквадрата внутри данного подпрямоугольника, который является эмблемой Нанософта. Если таких подквадратов не существует, то ответ равен \(0\).

Вараврех так и не смог выбрать наилучшую опцию сам, поэтому просит вас о помощи. Можете ли вы помочь ему?

Входные данные

В первой строке находится три целых числа \(n\), \(m\) и \(q\) \((1 \leq n , m \leq 500, 1 \leq q \leq 3 \cdot 10^{5})\)  — количество строк, столбцов и количество опций.

Каждая из следующих \(n\) строк содержит строку, содержащую \(m\) символов. В \(i\)-й строке \(j\)-й символ будет содержать цвет клетки в \(i\)-й строке и \(j\)-м столбце изображения Адхами. Цвет каждой клетки будет одним из этих: {'G','Y','R','B'}.

В каждой из следующих \(q\) строк содержится четыре целых числа \(r_1\), \(c_1\), \(r_2\) и \(c_2\) \((1 \leq r_1 \leq r_2 \leq n, 1 \leq c_1 \leq c_2 \leq m)\). В этой опции Адхами дает подпрямоугольник изображения с левым верхним углом в клетке \((r_1, c_1)\) и правым нижним углом в клетке \((r_2, c_2)\).

Выходные данные

Для каждой опции выведите максимальную площадь подквадрата внутри данного подпрямоугольника, который может быть эмблемой Нанософта. Если таких подквадратов не существует, то выведите \(0\).

Примечание

Картинка для первого теста:

Картинки слева направа соответствуют опциям. Черным обведена граница подпрямоугольника в соответствующей опции, серым обведена граница подквадрата максимального размера, который можно вырезать.

E. Удаляем подпоследовательности

дп Строки *2200

Вам задана строка \(s\). Вы можете построить новую строку \(p\) из \(s\), используя следующую операцию не более двух раз:

  1. выберем любую подпоследовательность \(s_{i_1}, s_{i_2}, \dots, s_{i_k}\), где \(1 \le i_1 < i_2 < \dots < i_k \le |s|\);
  2. удалим выбранную подпоследовательность из \(s\) (\(s\) может стать пустой);
  3. присоединим выбранную подпоследовательность справа к \(p\) как строку (другими словами, \(p = p + s_{i_1}s_{i_2}\dots s_{i_k}\)).

Конечно, в начале строка \(p\) является пустой.

Например, пусть \(s = \text{ababcd}\). Сначала выберем подпоследовательность \(s_1 s_4 s_5 = \text{abc}\) — в результате мы получим \(s = \text{bad}\) и \(p = \text{abc}\). Потом, выберем \(s_1 s_2 = \text{ba}\) — мы получим \(s = \text{d}\) и \(p = \text{abcba}\). Таким образом, возможно построить \(\text{abcba}\) из \(\text{ababcd}\).

Можно ли построить заданную строку \(t\), используя описанный выше алгоритм?

Входные данные

В первой строке задано единственное число \(T\) (\(1 \le T \le 100\)) — количество наборов входных данных.

В следующих \(2T\) строках заданы сами наборы — по две строки на набор. В первой строке задана строка \(s\), состоящая из строчных букв латинского алфавита (\(1 \le |s| \le 400\)) — первоначальная строка.

Во второй строке задана строка \(t\), состоящая из строчных букв латинского алфавита (\(1 \le |t| \le |s|\)) — строка, которую вам надо построить.

Гарантируется, что суммарная длина строк \(s\) не превосходит \(400\).

Выходные данные

Выведите \(T\) ответов — по одному на набор. Выведите YES (регистр не важен), если возможно построить \(t\), и NO (регистр не важен) иначе.

C. Кондиционер

дп жадные алгоритмы реализация сортировки *1500

Гильдонг — владелец ресторана Пулькоги. Ресторан пользуется большим спросом, и часто посетители хотят забронировать столик до посещения.

Гильдонг так старается угодить всем посетителям, что он даже запомнил предпочитаемые диапазоны температуры всех посетителей! Смотря на список бронирований, он хочет удовлетворить всех посетителей, контролируя температуру ресторана.

В ресторане стоит кондиционер, у которого есть три состояния: выключенное, нагрев, и охлаждение. Когда кондиционер выключен, температура в ресторане не изменяется. Когда включен нагрев, температура увеличивается на 1 каждую минуту. Наконец, когда включено охлаждение, температура уменьшается на 1 каждую минуту. Гильдонг может переключать состояние сколько угодно раз, в любые целочисленные минуты. Кондиционер исходно выключен.

Каждый посетитель характеризуется тремя значениями: \(t_i\) — момент визита (в минутах) \(i\)-го посетителя, \(l_i\) — нижняя граница предпочитаемого диапазона температур, and \(h_i\) — верхняя граница предпочитаемого диапазона температур.

Каждый посетитель удовлетворен, если температура находится в их предпочтительном диапазоне в момент их посещения ресторана. Формально, \(i\)-й посетитель удовлетворён, если и только если в минуту \(t_i\) температура находится в отрезке от \(l_i\) до \(h_i\), включительно.

Вам дана исходная температура, список времен посещения посетителей и их предпочитаемые диапазоны температуры, помогите ему удовлетворить всех посетителей.

Входные данные

Каждый тест состоит из одного или большего числа наборов входных данных. В первой строке записано количество наборов входных данных \(q\) (\(1 \le q \le 500\)). Затем следуют их описания.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 100\), \(-10^9 \le m \le 10^9\)), где \(n\) это число посетителей и \(m\) это изначальная температура ресторана.

Затем следуют \(n\) строк. \(i\)-я из них содержит три целых числа \(t_i\), \(l_i\), и \(h_i\) (\(1 \le t_i \le 10^9\), \(-10^9 \le l_i \le h_i \le 10^9\)), где \(t_i\) это момент визита \(i\)-го посетителя, \(l_i\) это нижняя граница предпочитаемого диапазона температур, а \(h_i\) это верхняя граница предпочитаемого диапазона температур. Все границы диапазонов — включительны.

Посетители даны в порядке неубывания момента посещения, а текущее время — \(0\).

Выходные данные

Для каждого набора входных данных выведите «YES» если возможно удовлетворить потребности всех посетителей. В противном случае, выведите «NO».

Вы можете выводить все буквы в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных примера Гильдонг может контролировать кондиционер, чтобы удовлетворить всех посетителей, следующим образом:

  • В \(0\)-ю минуту, поменяйте состояние на нагрев (температура 0).
  • Во \(2\)-ю мунуту, поменяйте состояние на выключенное (температура 2).
  • В \(5\)-ю минуту, поменяйте состояние на нагрев (температура 2, \(1\)-й посетитель уже удовлетворен).
  • В \(6\)-ю минуту, поменяте состояние на выключенное (температура 3).
  • В \(7\)-ю минуту, поменяйте состояние на охлаждение (температура 3, \(2\)-й посетитель удовлетворен).
  • В \(10\)-ю минуту, температура будет 0, что удовлетворит последнего посетителя.

В третьем наборе входных данных примера поменяйте состояние на выключенное в \(0\)-ю муинуту и оставьте его таким. Тогда все посетители будут удовлетворены. Обратите внимание, что момент посещения \(1\)-го посетителя совпадает с моментом посещения \(2\)-го посетителя.

Во втором и четвертом наборах входных данных примера Гильдонгу придется оставить хотя бы одного посетителя неудовлетворенным.

F1. Наблюдение за животными (упрощенная версия)

дп Структуры данных *2300

Единственное отличие этой версии от усложненной это ограничение на \(k\).

Гильдонг любит наблюдать за животными, так он купил две камеры чтобы снимать на видео диких животных в лесу. Цвет одной камеры красный, а цвет другой камеры синий.

Гильдонг собирается снимать видео на протяжении \(n\) дней, с дня \(1\) по день \(n\). Лес разделен на \(m\) зон, пронумерованных от \(1\) до \(m\). Он будет использовать камеры следующим образом:

  • На каждый нечетный день (\(1\)-й, \(3\)-й, \(5\)-й, ...), принести красную камеру в лес и записывать видео \(2\) дня.
  • На каждый четный день (\(2\)-й, \(4\)-й, \(6\)-й, ...), принести синюю камеру в лес и записывать видео \(2\) дня.
  • Если он начнет записывать на \(n\)-й день на одну из камер, камера будет записывать только один день.

Каждая камера снимает \(k\) последовательных зон леса. Например, если \(m=5\) и \(k=3\), он может поставить камеру чтобы наблюдать за одним из этих трех отрезков два дня: \([1,3]\), \([2,4]\), и \([3,5]\).

Гильдонг получил информацию о том, сколько животных видно в каждой зоне каждый день. Так как он хочет наблюдать за как можно большим числом животных, он хочет попросить вас найти лучший способ расставить эти две камеры в \(n\) дней. Обратите внимание, что если две камеры снимают одну и ту же зону в один и тот же день, все животные этой зоны должны быть учтены только один раз.

Входные данные

В первой строке записаны три целых числа \(n\), \(m\), и \(k\) (\(1 \le n \le 50\), \(1 \le m \le 2 \cdot 10^4\), \(1 \le k \le min(m,20)\)) — количество дней, которые Гильдонг собирается записывать видео, количество зон в лесу, и диапазон камеры, соответственно.

Следующие \(n\) строк содержат по \(m\) целых чисел. \(j\)-е число в \(i+1\)-й строке это количество животных, которое можно увидеть в \(i\)-й день в \(j\)-й зоне. Каждое количество животных от \(0\) и до \(1000\), включительно.

Выходные данные

Выведите одно целое число — максимальное количество животных, за которыми вы можете наблюдать.

Примечание

Оптимальные способы наблюдать за животными в четырех тестовых примерах:

Пример 1:

Пример 2:

Пример 3:

Пример 4:

F2. Наблюдение за животными (усложненная версия)

дп жадные алгоритмы Структуры данных *2400

Единственное отличие усложненной и упрощенной версии это ограничение на \(k\).

Гильдонг любит наблюдать за животными, так он купил две камеры чтобы снимать на видео диких животных в лесу. Цвет одной камеры красный, а цвет другой камеры синий.

Гильдонг собирается снимать видео на протяжении \(n\) дней, с дня \(1\) по день \(n\). Лес разделен на \(m\) зон, пронумерованных от \(1\) до \(m\). Он будет использовать камеры следующим образом:

  • На каждый нечетный день (\(1\)-й, \(3\)-й, \(5\)-й, ...), принести красную камеру в лес и записывать видео \(2\) дня.
  • На каждый четный день (\(2\)-й, \(4\)-й, \(6\)-й, ...), принести синюю камеру в лес и записывать видео \(2\) дня.
  • Если он начнет записывать на \(n\)-й день на одну из камер, камера будет записывать только один день.

Каждая камера снимает \(k\) последовательных зон леса. Например, если \(m=5\) и \(k=3\), он может поставить камеру чтобы наблюдать за одним из этих трех отрезков два дня: \([1,3]\), \([2,4]\), и \([3,5]\).

Гильдонг получил информацию о том, сколько животных видно в каждой зоне каждый день. Так как он хочет наблюдать за как можно большим числом животных, он хочет попросить вас найти лучший способ расставить эти две камеры в \(n\) дней. Обратите внимание, что если две камеры снимают одну и ту же зону в один и тот же день, все животные этой зоны должны быть учтены только один раз.

Входные данные

В первой строке записаны три целых числа \(n\), \(m\), и \(k\) (\(1 \le n \le 50\), \(1 \le m \le 2 \cdot 10^4\), \(1 \le k \le m\)) — количество дней, которые Гильдонг собирается записывать видео, количество зон в лесу, и диапазон камеры, соответственно.

Следующие \(n\) строк содержат по \(m\) целых чисел. \(j\)-е число в \(i+1\)-й строке это количество животных, которое можно увидеть в \(i\)-й день в \(j\)-й зоне. Каждое количество животных от \(0\) и до \(1000\), включительно.

Выходные данные

Выведите одно целое число — максимальное количество животных, за которыми вы можете наблюдать.

Примечание

Оптимальные способы наблюдать за животными в четырех тестовых примерах:

Пример 1:

Пример 2:

Пример 3:

Пример 4:

G. Курони и Антихайп

битмаски графы дп Перебор снм *3500

Курони плохо разбирается в экономике. Поэтому он решил основать новую финансовую пирамиду под названием Антихайп. У него есть следующие правила:

  • Вы можете присоединиться к пирамиде бесплатно и получить \(0\) монет.
  • Если вы уже являетесь участником Антихайпа, вы можете пригласить своего друга, который в настоящее время не является участником Антихайпа, и получить количество монет, равное вашему возрасту (за каждого приглашенного друга).

\(n\) людей недавно услышали об Антихайпе, возраст \(i\)-го человека - \(a_i\). Некоторые из них являются друзьями, но дружба сегодня  — странная вещь: \(i\)-й человек является другом \(j\)-го человека тогда и только тогда, когда \(a_i \text{ AND } a_j = 0\), где \(\text{AND}\) обозначает операцию побитового И.

На данный момент никто из \(n\) людей не является членом Антихайпа. Они хотят сотрудничать, чтобы присоединяться и приглашать друг друга в Антихайп таким образом, чтобы максимизировать их суммарную прибыль. Не могли бы вы помочь им?

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1\le n \le 2\cdot 10^5\))  — количество людей.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0\le a_i \le 2\cdot 10^5\))  — возраста людей.

Выходные данные

Выведите одно целое число  — максимальную возможную суммарную прибыль всех \(n\) людей.

Примечание

Только первый и второй человек дружат. Второй может присоединиться к Антихайпу и пригласить первого, получив за это \(2\) монеты.

C. Корова и сообщение

дп математика Перебор Строки *1500

Корова Бесси только что перехватила сообщение, которое Фермер Джон отправил Бургер Куин! Бесси уверена, что в нем скрыто секретное сообщение.

Сообщение представляет из себя строку \(s\), состоящую из строчных букв латинского алфавита. Бесси считает, что строка \(t\) скрыта в строке \(s\), если \(t\) является подпоследовательностью \(s\), индексы которой формируют арифметическую прогрессию. Например, строка aab скрыта в строке aaabb, потому что она получена в индексах \(1\), \(3\) и \(5\), которые формируют арифметическую прогрессию с шагом \(2\). Бесси считает, что любая скрытая строка, которая имеет наибольшее количество вхождений и является скрытым сообщением. Два вхождения подпоследовательности \(S\) различны, если различаются их множества индексов. Помогите Бесси узнать количество вхождений скрытого сообщения!

Например, в строке aaabb, a скрыта \(3\) раза, b скрыта \(2\) раза, ab скрыта \(6\) раз, aa скрыта \(3\) раза, bb скрыта \(1\) раз, aab скрыта \(2\) раза, aaa скрыта \(1\) раз, abb скрыта \(1\) раз, aaab скрыта \(1\) раз, aabb скрыта \(1\) раз и aaabb скрыта \(1\) раз. Количество вхождений скрытого сообщения равно \(6\).

Входные данные

В первой строке задана строка \(s\), состоящая из строчных букв латинского алфавита (\(1 \le |s| \le 10^5\)) — текст, который перехватила Бесси.

Выходные данные

Выведите единственное число  — количество вхождений секретного сообщения.

Примечание

В первом примере скрыты следующие строки (с соответствующими множествами индексов):

  • a встречается как \((1)\), \((2)\), \((3)\);
  • b встречается как \((4)\), \((5)\);
  • ab встречается как \((1,4)\), \((1,5)\), \((2,4)\), \((2,5)\), \((3,4)\), \((3,5)\);
  • aa встречается как \((1,2)\), \((1,3)\), \((2,3)\);
  • bb встречается как \((4,5)\);
  • aab встречается как \((1,3,5)\), \((2,3,4)\);
  • aaa встречается как at \((1,2,3)\)
  • abb встречается как \((3,4,5)\)
  • aaab встречается как \((1,2,3,4)\);
  • aabb встречается как \((2,3,4,5)\);
  • aaabb встречается как \((1,2,3,4,5)\);
Заметим, что все множества индексов являются арифметическими прогрессиями.

Во втором примере, ни одна скрытая строка не встречается более одного раза.

В третьем примере, скрытым сообщением является одна буква l.

E. Корова и угощения

Бинарный поиск дп жадные алгоритмы Комбинаторика математика реализация *2500

После удачного года по количеству удоя, Фермер Джон решил наградить своих коров их любимым угощением: вкусной травой!

На поле располагается ряд из \(n\) единиц травы, каждая единица соответствующего уровня сладости \(s_i\). У Фермера Джона \(m\) коров, каждая обладает своим любимым уровнем сладости \(f_i\) и уровнем голода \(h_i\). Фермер Джон хочет выбрать непересекающиеся подмножества коров, чтобы разместить их с левой и правой стороны ряда травы. Нет никаких ограничений на количество коров с каждой стороны. Поведение коров описывается следующим образом:

  • Коровы с левой и правой сторон начинают кормиться по очереди в порядке, выбранном Фермером Джоном.
  • Кормежка коровы выглядит следующим образом: корова начинает двигаться к противоположному концу ряда, не меняя своего направления, и поедает траву своего любимого уровня сладости, пока не съест \(h_i\) единиц.
  • В тот момент, как корова съест \(h_i\) травы, она ложится спать прямо там, мешая проходу других коров с обоих сторон.
  • Если же корова встречает на пути другую спящую корову или достигает конца ряда травы, она расстраивается. Фермер Джон ни при каких условиях не хочет расстраивать своих коров.

Заметим, что трава не отрастает обратно. Также, чтобы не расстраивать корову, Фермер Джон может просто не выбрать каких-то коров.

Удивительно, но Фермер Джон решил, что спящие коровы — наиболее удовлетворенные. Если Фермер Джон будет выбирать порядок оптимально, то какое наибольшее количество спящих коров он сможет получить, и сколько способов существует выбрать два подмножества так, чтобы получить данное максимальное количество спящих коров (по модулю \(10^9+7\))? Порядок, в котором Фермер Джон посылает коров кормиться не важен пока ни одна корова не расстроена.

Входные данные

В первой строке задано два целых числа \(n\) и \(m\) (\(1 \le n \le 5000\), \(1 \le m \le 5000\))  — количество единиц травы в ряду и количество коров.

Во второй строке задано \(n\) целых чисел \(s_1, s_2, \ldots, s_n\) (\(1 \le s_i \le n\))  — уровни сладости травы.

В \(i\)-й из следующих \(m\) строк задано два целых числа \(f_i\) и \(h_i\) (\(1 \le f_i, h_i \le n\))  — любимый уровень сладости и уровень голода \(i\)-й коровы. Никакие две коровы не имеют одинаковый любимый уровень сладости и уровень голода одновременно.

Выходные данные

Выведите два числа  — максимальное количество спящих коров и количество способов его получить по модулю \(10^9+7\).

Примечание

В первом примере, Фермер Джон может выстроить коров следующим образом, чтобы получить в итоге \(2\) спящих коров:

  • Корова \(1\) стоит с левой стороны и корова \(2\) стоит справа.
  • Корова \(2\) стоит с левой стороны и корова \(1\) стоит справа.

Во втором примере, Фермер Джон может выстроить коров следующим образом, чтобы получить в итоге \(1\) спящую корову:

  • Корова \(1\) стоит слева.
  • Корова \(2\) стоит слева.
  • Корова \(1\) стоит справа.
  • Корова \(2\) стоит справа.

В третьем примере, Фермер Джон может выстроить коров следующим образом, чтобы получить в итоге \(2\) спящих коров:

  • Коровы \(1\) и \(2\) стоят слева.
  • Коровы \(1\) и \(2\) стоят справа.
  • Корова \(1\) стоит слева и корова \(2\) стоит справа.
  • Корова \(1\) стоит справа и корова \(2\) стоит слева.

В четвертом примере, Фермер Джон не может получить ни одной спящей коровы, а потому не будет ни одной коровы стоящей с какой-либо стороны.

B. Двойное выбывание

дп реализация *2500

Приближается самое главное событие года — финал чемпионата мира The Innernational по игре Cota 2. В нём участвуют \(2^n\) команд, среди которых нужно определить одну лучшую.

Матчи будут проводиться по олимпийской системе до двух поражений (внимательно прочитайте условие, даже если знаете, что это такое). По итогам жеребьевки, команды получили номера от \(1\) до \(2^n\), после чего будут играть друг с другом встречи один-на-один. Все команды начинают турнир в верхней сетке.

В матчах верхней сетки в каждом раунде один раз играют пары соседних (из ещё не потерпевших поражение) команд в порядке жеребьевки. Победитель проходит дальше, а проигравший падает в нижнюю сетку.

Нижняя сетка начинается с \(2^{n-1}\) команд, проигравших первую же игру верхней сетки. Каждый раунд нижней сетки состоит из двух игр. Для каждого раунда, в первой игре раунда, \(2^k\) команд нижней сетки играют друг с другом в порядке жеребьевки. \(2^{k-1}\) проигравших выбывают с турнира, а \(2^{k-1}\) победителей играют с \(2^{k-1}\) командами, потерпевшими поражение в этом раунде верхней сетки (снова в порядке жеребьевки). По итогам каждого раунда и в верхней, и в нижней сетке остается одинаковое число участников — по \(2^{k-1}\). Смотрите на картинку для более точного понимания условия.

Когда в верхней и нижней сетках остается по одной команде, они играют между собой гранд-финал и турнир заканчивается.

Вам интересны команды, получившие по результатам жеребьевки номера \(a_1, a_2, ..., a_k\). Вам хочется увидеть как можно больше матчей, где играет хотя бы одна из интересных вам команд. Вы можете повлиять на результат любого матча так, чтобы в нем выиграла команда на ваше усмотрение. Какое максимально возможное количество матчей с участием хотя бы одной из интересных вам команд может быть сыграно в чемпионате?

Входные данные

В первой строке даны два числа \(n, k\) — размер сетки (\(2^n\) команд играют в чемпионате) и количество интересных вам команд (\(2 \le n \le 17; 0 \le k \le 2^n\)).

Во второй строке даны \(k\) различных целых чисел \(a_1, \ldots, a_k\) — номера этих команд по результатам жеребьевки (\(1 \le a_i \le 2^n\)).

Выходные данные

Выведите одно число — максимально возможное число матчей, в которых будет играть хотя бы одна интересная вам команда.

Примечание

На схеме турнира из примера каждый матч отмечен английской буквой (от \(a\) до \(n\)). Победитель каждого \(i\)-го матча обозначается \(Wi\), проигравший — \(Li\). Интересные команды выделены красным фоном.

В первом примере, интересная команда \(6\) сыграет максимальное количество матчей если в первом же матче верхней сетки (матч \(c\)) проиграет, но выиграет все остальные матчи в нижней сетке (матчи \(h, j, l, m\)) и таким образом попадёт в гранд-финал турнира.

Во втором примере, интересные команды \(7\) и \(8\) должны сыграть друг против друга в первом матче верхней сетки (матч \(d\)). После этого, команда \(8\) может дойти до гранд-финала без поражений, а команды \(1\) и \(7\) будут соревноваться в нижней сетке.

В третьем примере, правильно распределившиеся интересные команды смогут поучаствовать во всех матчах турнира.

C. Красный мост

Бинарный поиск дп Строки *2800

ВКонтакте открыла второй штаб в Санкт-Петербурге! На фасаде здания, в котором он находится, написана строка \(s\). В процессе проектирования офиса часть офиса вдоль всей этой надписи было принято разделить на \(m\) переговорных комнат таким образом, чтобы стены комнат всегда были точно между символами строки на фасаде. Разумеется, переговорные не должны быть нулевого размера, но вполне могут быть шириной в одну букву. Названием каждой комнаты станет подстрока исходной строки \(s\), находящаяся на соответствующей части фасада.

Для того, чтобы протестировать разные варианты дизайна офиса, для каждой возможной конфигурации из \(m\) переговорных комнат напечатали табличку с названием минимальной в лексикографическом порядке комнаты. Для доставки, типография отсортировала эти таблички в обратном лексикографическом порядке напечатанных названий переговорных.

Какое название написано на \(k\)-й табличке?

Входные данные

В первой строке дано три целых числа \(n, m, k\) — длина строки \(s\), количество переговорных комнат, на которые нужно разбить строку \(s\), и номер искомой таблички (\(2 \le n \le 1\,000; 1 \le m \le 1\,000; 1 \le k \le 10^{18}\)).

Во второй строке дана строка \(s\), состоящая из \(n\) маленьких латинских символов.

Гарантируется, что для данных \(n, m, k\) существует не меньше \(k\) разбиений строки \(s\) на \(m\) непустых подстрок.

Выходные данные

Выведите одну строку — надпись на \(k\)-й табличке из доставки.

Примечание

В первом примере посылка из типографии состоит из табличек «aba», «ab», «a».

В втором примере посылка состоит из \(3060\) табличек, первая из которых — «aupontrougevkof», а последняя — «a».

D. Путешествие

графы дп Теория вероятностей *2300

Миша живет в стране, в которой есть \(n\) городов, пронумерованных целыми числами от \(1\) до \(n\). Он живет в городе \(1\).

Между каждой парой городов ходит поезд. Назовем маршрутом проезд по поезду из города \(i\) в город \(j\), где \(i \neq j\). В частности, всего есть \(n(n-1)\) разных маршрутов. У каждого маршрута есть своя стоимость, и стоимость маршрута из города \(i\) в город \(j\) может отличаться от стоимости маршрута из города \(j\) в город \(i\).

Миша хочет начать в городе \(1\), совершить ровно \(k\) переездов из одного города в другой, и в конце снова оказаться в городе \(1\). Миша — любитель экономить, так что он хочет, чтобы его путешествие было как можно более дешевым. Обратите внимание, что Миша может посещать один город и даже проезжать по одному маршруту несколько раз.

Миша считает, что путешествие удалось, если среди маршрутов, которые он использовал в своем путешествии, нельзя найти нечетный цикл. Иначе говоря, если можно начать в каком-то городе \(v\), который посетил Миша, проехать по нечетному числу маршрутов, которые использовал Миша, вернувшись в город \(v\), то путешествие считается неудачным.

Ваша задача помочь Мише, и найти самое дешевое (с минимальной суммой стоимостей маршрутов на нем) путешествие, которое Миша будет считать удачным.

Входные данные

В первой строке записано два целых числа \(n,k\) (\(2 \leq n \leq 80; 2 \leq k \leq 10\)): количество городов в стране и требуемое количество маршрутов в путешествии Миши. Гарантируется, что \(k\) четное.

В следующих \(n\) строках записано описание стоимостей маршрутов, \(j\)-е число в \(i\)-й строке равно стоимости маршрута из города \(i\) в город \(j\), если \(i \neq j\), иначе число равно нулю (маршрутов \(i \to i\) нет). Все стоимости маршрутов — целые числа от \(0\) до \(10^8\).

Выходные данные

Выведите одно целое число: минимальная сумма стоимостей маршрутов в удачном путешествии.

E. Странная функция

дп *2900

Определим функцию \(f\) от мультимножества \(a\), как мультимножество количеств вхождений каждого из чисел, присутствующих в \(a\).

Так, например, \(f(\{5, 5, 1, 2, 5, 2, 3, 3, 9, 5\}) = \{1, 1, 2, 2, 4\}\).

Определим \(f^k(a)\), как применение функции \(f\) к массиву \(a\) \(k\) раз: \(f^k(a) = f(f^{k-1}(a)), f^0(a) = a\).

Так, например, \(f^2(\{5, 5, 1, 2, 5, 2, 3, 3, 9, 5\}) = \{1, 2, 2\}\).

Вам даны числа \(n, k\), и вам нужно определить, сколько возможных значений может принимать функция \(f^k(a)\), где \(a\) — произвольный непустой массив размера не больше, чем \(n\). Выведите остаток этого числа по модулю \(998\,244\,353\).

Входные данные

В первой и единственной строке даны два целых числа \(n, k\) (\(1 \le n, k \le 2020\)).

Выходные данные

Выведите одно число — количество различных значений функции \(f^k(a)\) по всем возможным непустым массивам из не больше, чем \(n\) чисел, по модулю \(998\,244\,353\).

E. Сжатие массива

дп жадные алгоритмы *2100

Вам задан массив \(a_1, a_2, \dots, a_n\). Вы можете выполнять на нем следующую операцию произвольное количество раз:

  • Выбираем два равных соседних элемента \(a_i = a_{i + 1}\) (если такие существуют).
  • Заменяем их на один элемент со значением \(a_i + 1\).

После каждой такой операции длина массива уменьшается на один (и элементы перенумеровываются соответствующим образом). Массив \(a\) какой минимальной длины вы можете получить?

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 500\)) — первоначальная длина массива \(a\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 1000\)) — первоначальный массив \(a\).

Выходные данные

Выведите единственное число — минимально возможную длину массива, которую можно получить после применения операции, описанной выше, произвольное количество раз.

Примечание

В первом примере, одна из оптимальных последовательностей операций такая: \(4\) \(3\) \(2\) \(2\) \(3\) \(\rightarrow\) \(4\) \(3\) \(3\) \(3\) \(\rightarrow\) \(4\) \(4\) \(3\) \(\rightarrow\) \(5\) \(3\).

Во втором примере, одна из оптимальных последовательностей операций такая: \(3\) \(3\) \(4\) \(4\) \(4\) \(3\) \(3\) \(\rightarrow\) \(4\) \(4\) \(4\) \(4\) \(3\) \(3\) \(\rightarrow\) \(4\) \(4\) \(4\) \(4\) \(4\) \(\rightarrow\) \(5\) \(4\) \(4\) \(4\) \(\rightarrow\) \(5\) \(5\) \(4\) \(\rightarrow\) \(6\) \(4\).

В третьем и четвертом примере, не возможно применить операцию ни разу.

G. Автодополнение

дп поиск в глубину и подобное Структуры данных *2600

У вас есть множество строк \(S\). Каждая строка состоит из строчных букв латинского алфавита.

Для каждой строки вы хотите посчитать, сколько секунд потребуется, чтобы набрать ее в вашем текстовом редакторе. Чтобы набрать строку, вам нужно начать с пустой строки и преобразовать ее в ту строку, которую вы хотите набрать, при помощи следующих операций:

  • для текущей строки \(t\) можно выбрать любую строчную латинскую букву \(c\) и приписать ее \(t\), после чего текущая строка станет \(t + c\). Это действие требует \(1\) секунду;
  • использовать автодополнение. При использовании автодополнения с текущей строкой \(t\) вам показывается список всех таких строк \(s \in S\), что \(t\) — префикс \(s\). Этот список включает саму строку \(t\), если \(t\) принадлежит \(S\), и строки в нем расположены в лексикографическом порядке. Вы можете превратить \(t\) в \(i\)-ю строку из этого списка за \(i\) секунд. Обратите внимание, что вы можете выбирать любую строку из списка, это не обязательно должна быть та строка, которую вы хотите набрать.

Чему равно минимальное количество секунд, которое нужно затратить, чтобы набрать каждую строку из \(S\)?

Обратите внимание, что строки множества \(S\) задаются во входных данных необычным образом.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 10^6\)).

Затем следуют \(n\) строк, в \(i\)-й из которых заданы целое число \(p_i\) (\(0 \le p_i < i\)) и одна строчная латинская буква \(c_i\). Эти строки задают множество строк, подмножеством которого является \(S\), следующим образом: всего есть \(n + 1\) строка, пронумерованная от \(0\) до \(n\); \(0\)-я строка — пустая, а \(i\)-я строка (\(i \ge 1\)) — результат приписывания символа \(c_i\) к строке \(p_i\) справа. Гарантируется, что все эти строки различны.

В следующей строке задано одно целое число \(k\) (\(1 \le k \le n\)) — количество строк в \(S\).

В последней строке заданы \(k\) целых чисел \(a_1\), \(a_2\), ..., \(a_k\) (\(1 \le a_i \le n\), все \(a_i\) попарно различны), обозначающих индексы строк, сгенерированных вышеуказанным способом, принадлежащих множеству \(S\) — формально, если обозначить \(i\)-ю сгенерированную строку как \(s_i\), то \(S = {s_{a_1}, s_{a_2}, \dots, s_{a_k}}\).

Выходные данные

Выведите \(k\) целых чисел, \(i\)-е из которых должно быть равно минимальному количеству секунд, требуемому, чтобы набрать строку \(s_{a_i}\).

Примечание

В первом примере \(S\) состоит из следующих строк: ieh, iqgp, i, iqge, ier.

C1. Небоскрёбы (упрощённая версия)

дп жадные алгоритмы Перебор Структуры данных *1500

Это более простая версия задачи. В этой версии \(n \le 1000\)

В Берляндии активно застраивается окраина столицы. Компания «Kernel Panic» руководит постройкой жилого комплекса из небоскрёбов в Новой Берлскве. Все небоскрёбы строятся вдоль шоссе. Известно, что компания уже купила \(n\) участков возле шоссе и готовится возвести \(n\) небоскрёбов, по одному зданию на один участок.

Архитекторы при планировании зданий должны учитывать несколько требований. Во-первых, поскольку земля на каждом участке имеет разные свойства, для каждого небоскрёба есть свое ограничение по количеству этажей, которое он может иметь. Во-вторых, согласно дизайн-коду города, недопустима ситуация, когда для какого-то небоскрёба сразу по обе стороны от него есть небоскрёбы выше него.

Более формально, пронумеруем участки целыми числами от \(1\) до \(n\). Тогда у небоскрёба на участке с номером \(i\) количество этажей \(a_i\) не может быть больше \(m_i\) (\(1 \le a_i \le m_i\)) Также не может быть, что на плане существуют два участка с номерами \(j\) и \(k\), таких что \(j < i < k\) и \(a_j > a_i < a_k\). Участки \(j\) и \(k\) не обязаны быть соседними с \(i\).

Компания хочет, чтобы суммарное количество этажей в построенных небоскрёбах было как можно больше. Помогите ей выбрать количество этажей для каждого небоскрёба оптимальным образом, то есть так, чтобы выполнялись все ограничения, а среди всех таких вариантов выберите один из планов, в котором суммарное количество этажей максимально возможно.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 1000\)) — количество участков.

Вторая строка содержит целые числа \(m_1, m_2, \ldots, m_n\) (\(1 \leq m_i \leq 10^9\)) —максимально возможное количество этажей для небоскрёба на каждом участке.

Выходные данные

Выведите \(n\) чисел \(a_i\) — количества этажей в плане для каждого небоскрёба, такие, что выполняются все ограничения, а суммарное количество этажей во всех небоскрёбах максимально возможное.

Если возможно несколько ответов, выведите любой.

Примечание

В первом примере можно построить все небоскрёбы с максимально возможной высотой.

Во втором примере придать максимальную высоту всем небоскрёбам нельзя, так как это нарушает ограничение дизайн-кода. Ответ \([10, 6, 6]\) является оптимальным. Обратите внимание, что ответ \([6, 6, 8]\) также удовлетворяет всем ограничениям, но оптимальным не является.

C2. Небоскрёбы (усложнённая версия)

дп жадные алгоритмы Структуры данных *1900

Это более сложная версия задачи. В этой версии \(n \le 500\,000\)

В Берляндии активно застраивается окраина столицы. Компания «Kernel Panic» руководит постройкой жилого комплекса из небоскрёбов в Новой Берлскве. Все небоскрёбы строятся вдоль шоссе. Известно, что компания уже купила \(n\) участков возле шоссе и готовится возвести \(n\) небоскрёбов, по одному зданию на один участок.

Архитекторы при планировании зданий должны учитывать несколько требований. Во-первых, поскольку земля на каждом участке имеет разные свойства, для каждого небоскрёба есть свое ограничение по количеству этажей, которое он может иметь. Во-вторых, согласно дизайн-коду города, недопустима ситуация, когда для какого-то небоскрёба сразу по обе стороны от него есть небоскрёбы выше него.

Более формально, пронумеруем участки целыми числами от \(1\) до \(n\). Тогда у небоскрёба на участке с номером \(i\) количество этажей \(a_i\) не может быть больше \(m_i\) (\(1 \le a_i \le m_i\)). Также не может быть, что на плане существуют два участка с номерами \(j\) и \(k\), таких что \(j < i < k\) и \(a_j > a_i < a_k\). Участки \(j\) и \(k\) не обязаны быть соседними с \(i\).

Компания хочет, чтобы суммарное количество этажей в построенных небоскрёбах было как можно больше. Помогите ей выбрать количество этажей для каждого небоскрёба оптимальным образом, то есть так, чтобы выполнялись все ограничения, а среди всех таких вариантов выберите один из планов, в котором суммарное количество этажей максимально возможно.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 500\,000\)) — количество участков.

Вторая строка содержит целые числа \(m_1, m_2, \ldots, m_n\) (\(1 \leq m_i \leq 10^9\)) —максимально возможное количество этажей для небоскрёба на каждом участке.

Выходные данные

Выведите \(n\) чисел \(a_i\) — количества этажей в плане для каждого небоскрёба, такие, что выполняются все ограничения, а суммарное количество этажей во всех небоскрёбах максимально возможное.

Если возможно несколько ответов, выведите любой.

Примечание

В первом примере можно построить все небоскрёбы с максимально возможной высотой.

Во втором примере придать максимальную высоту всем небоскрёбам нельзя, так как это нарушает ограничение дизайн-кода. Ответ \([10, 6, 6]\) является оптимальным. Обратите внимание, что ответ \([6, 6, 8]\) также удовлетворяет всем ограничениям, но оптимальным не является.

D. Новый год

битмаски дп реализация *2500

Быть дедом Морозом очень сложно. Порой приходится сталкиваться с непростыми ситуациями.

Сегодня дед Мороз пришел на праздник и перед ним выстроились \(m\) детей. Пронумеруем их от \(1\) до \(m\). Дед Мороз знает \(n\) заклинаний. Заклинание под номером \(i\) даёт по конфете каждому ребенку, чье место лежит в отрезке \([L_i, R_i]\). Каждое заклинание может быть использовано не более одного раза. Также известно, что если применить все заклинания, то каждый ребёнок получит не более \(k\) конфет.

Детям вредно есть много сладкого, поэтому каждый ребёнок может съесть не более одной конфеты, а остальное отдаст маме и папе в равном количестве. Получается, если конфет малышу не подарить или подарить ему чётное число конфет, то он не съест ни одной конфеты и уйдет печальным. Остальные же дети (которые получили нечётное число конфет) будут счастливыми.

Помогите деду Морозу узнать максимальное число детей, которых он может сделать счастливыми, произнеся некоторые из своих заклинаний.

Входные данные

В первой строке заданы три целых числа \(n\), \(m\), и \(k\) (\(1 \leq n \leq 100\,000, 1 \leq m \leq 10^9, 1 \leq k \leq 8\)) — число заклинаний, количество детей и верхнее ограничение количество конфет, которые может получить ребёнок в случае использования всех заклинаний, соответственно.

Далее следуют \(n\) строк, в каждой из которых заданы два целых числа \(L_i\), \(R_i\) (\(1 \leq L_i \leq R_i \leq m\)) — параметры \(i\)-го заклинания.

Выходные данные

Выведите одно число — максимальное число детей, которых дед Мороз может сделать счастливыми.

Примечание

В первом примере деду Морозу следует применить первое и третье заклинание. В таком случае счастливыми окажутся все дети кроме третьего.

B. Дорога домой

Бинарный поиск дп жадные алгоритмы Строки *1300

После долгой вечеринки Петя захотел поехать домой, но обнаружил себя в другом конце города. В городе есть \(n\) перекрестков, расположенных в ряд, и на каждом перекрестке есть остановка, на которой можно сесть либо на автобус, либо на троллейбус.

Перекрестки можно задать как строку \(s\) длины \(n\), где \(s_i = \texttt{A}\), если на \(i\)-м перекрестке есть автобусная станция, и \(s_i = \texttt{B}\), если на \(i\)-м перекрестке есть троллейбусная станция. Сейчас Петя находится на первом перекрестке (которому соответствует \(s_1\)), и ему нужно попасть на последний перекресток (которому соответствует \(s_n\)).

Если для двух перекрестков \(i\) и \(j\) на всех перекрестках \(i, i+1, \ldots, j-1\) есть автобусная остановка, то можно заплатить \(a\) рублей за билет на автобус, и доехать с \(i\)-й остановки до \(j\)-й (на \(j\)-й остановке не обязательно иметь возможность сесть на автобус). Формально, заплатив \(a\) рублей Петя может добраться из \(i\) до \(j\), если \(s_t = \texttt{A}\) для всех \(i \le t < j\).

Если для двух перекрестков \(i\) и \(j\) на всех перекрестках \(i, i+1, \ldots, j-1\) есть троллейбусная остановка, то можно заплатить \(b\) рублей за билет на троллейбус, и доехать с \(i\)-й остановки до \(j\)-й (на \(j\)-й остановке не обязательно иметь возможность сесть на троллейбус). Формально, заплатив \(b\) рублей Петя может добраться из \(i\) до \(j\), если \(s_t = \texttt{B}\) для всех \(i \le t < j\).

Например, если \(s\)AABBBAB», \(a=4\) и \(b=3\), то Петя может:

  • купить билет на автобус, чтобы добраться от \(1\) до \(3\),
  • купить билет на троллейбус, чтобы добраться от \(3\) до \(6\),
  • купить билет на автобус, чтобы добраться от \(6\) до \(7\).

Так, в общем ему нужно потратить \(4+3+4=11\) рублей. Обратите внимание, что остановка на последнем перекрестке (т.е. символ \(s_n\)) не влияет на итоговую стоимость.

Сейчас Петя находится на первом перекрестке, и он хочет попасть на \(n\)-й перекресток. После вечеринки у него осталось всего \(p\) рублей, и он хочет попасть домой. Он решил пройти несколько перекрестков пешком, а после этого доехать домой на общественном транспорте. Помогите ему выбрать ближайший перекресток \(i\) к первому так, чтобы ему хватило денег добраться с \(i\)-го перекрестка до \(n\)-го, используя лишь поездки на автобусах и троллейбусах.

Входные данные

Каждый тест состоит из одного или более наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)).

В первой строке набора даны три целых числа \(a, b, p\) — стоимость билета на автобус, стоимость билета на троллейбус, и количество денег у Пети соответственно (\(1 \le a, b, p \le 10^5\)).

Во второй строке набора дана строка \(s\), в которой \(s_i = \texttt{A}\), если на \(i\)-м перекрестке можно сесть на автобус, и \(s_i = \texttt{B}\), если на \(i\)-м перекрестке можно сесть на троллейбус (\(2 \le |s| \le 10^5\)).

Гарантируется, что сумма длин строк \(s\) по всем наборам входных данных в тесте не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальный номер перекрестка \(i\), до которого Пете придется идти пешком. Оставшуюся часть пути (т.е. от \(i\) до \(n\)) он должен ехать на общественном транспорте.

E. Выбор команды

битмаски дп жадные алгоритмы сортировки *2300

Алиса, президент клуба FCB, хочет создать команду для участия в новом волейбольном турнире. Команда должна состоять из \(p\) игроков, играющих на \(p\) различных позициях. Она также понимает важность зрительской поддержки, поэтому она также хочет выбрать \(k\) болельщиков.

В Байтляндии живет \(n\) человек. Алиса должна выбрать ровно \(p\) из них, каждый на отдельную позицию, и ровно \(k\) болельщиков из этих \(n\) человек. Она хочет максимизировать суммарную силу команды.

У \(i\)-го из \(n\) человек есть целое число \(a_{i}\)  — сила, которую он добавляет команде, если его выбирают как болельщика.

Для каждого человека \(i\) и каждой позиции \(j\), Алиса знает \(s_{i, j}\)  — силу, которую добавляет \(i\)-й человек команде, если он выбран как игрок на \(j\)-ю позицию.

Каждый человек может быть выбран не более одного раза как игрок или болельщик. На каждую позицию нужно выбрать ровно одного человека.

Так как Алиса занята, вы должны помочь ей выбрать игроков и болельщиков так, чтобы общая сила команды стала максимальной.

Входные данные

Первая строка содержит \(3\) целых числа \(n,p,k\) (\(2 \leq n \leq 10^{5}, 1 \leq p \leq 7, 1 \le k, p+k \le n\)).

Вторая строка содержит \(n\) целых чисел \(a_{1},a_{2},\ldots,a_{n}\). (\(1 \leq a_{i} \leq 10^{9}\)).

\(i\)-я из оставшихся \(n\) строк содержит \(p\) целых чисел \(s_{i, 1}, s_{i, 2}, \dots, s_{i, p}\). (\(1 \leq s_{i,j} \leq 10^{9}\))

Выходные данные

Выведите единственное число \({res}\)  — максимальную возможную силу команды.

Примечание

В первом примере, можно выбрать человека \(1\) игроком на \(1\)-ю позицию, а людей \(2\) и \(3\) болельщиками.

Тогда общая сила команды будет равняться \(a_{2}+a_{3}+s_{1,1}\).

C. Черепашка Logo

дп *1800

У многих язык Logo ассоциируется прежде всего с черепашьей графикой. Черепашка двигается на прямой и управляется командами «T» («развернись на 180 градусов») и «F» («ползи вперед на расстояние 1»).

Задан список команд, которые будут поданы черепашке последовательно. В нем нужно изменить ровно n команд (одну команду можно изменять несколько раз). На какое максимальное расстояние от начального положения может уползти черепашка после выполнения всех команд измененного списка?

Входные данные

В первой строке входных данных содержится строка commands — исходный список команд. Строка commands содержит от 1 до 100 символов, включительно, и состоит только из символов «T» и «F».

Во второй строке содержится целое число n (1 ≤ n ≤ 50) — количество команд, которые нужно изменить в списке.

Выходные данные

Выведите максимальное возможное расстояние между начальным и конечным положением черепашки. Конечное положение черепашки — это ее положением после выполнения всех команд измененного списка.

Примечание

В первом примере стоит изменить вторую команду («T») на «F» — тогда черепашка уползет на расстояние 2.

Во втором примере обязательно изменить две команды. Одним из способов уползти на максимальное расстояние 6 будет изменить четвертую команду и первую либо последнюю.

D. Константы на языке Шекспира

дп жадные алгоритмы Конструктив *2100

Shakespeare — известный эзотерический язык, в котором программы имеют вид пьес Шекспира, а числа задаются комбинациями цветистых эпитетов. В этой задаче мы подробнее рассмотрим механизм задания чисел на этом языке.

Любая константа на Shakespeare формируется из неотрицательных степеней двойки при помощи арифметических действий. Для простоты разрешим использовать только сложение и вычитание и будем искать представление заданного числа, которое потребует минимального количества действий.

Задано натуральное число n. Надо представить его в виде n = a1 + a2 + ... + am, где каждой ai — это степень числа 2, взятая со знаком плюс или минус. Найдите такое преставление, что m — минимально.

Входные данные

Единственная строка содержит целое положительное число n, записанное в двоичной системе счисления. Длина заданного числа не превосходит 106. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите искомое минимальное m. Далее выведите m строк. Каждая строка должны иметь вид «+2^x» или «-2^x», где x — это показатель соответствующей степени двойки. Порядок вывода строк не имеет значения.

D. Реалити-шоу

битмаски дп *2800

Одно известное реалити-шоу набирает участников для третьего сезона! Собеседование прошли \(n\) кандидатов, пронумерованных от \(1\) до \(n\). \(i\)-й кандидат обладает агрессивностью \(l_i\), и для того, чтобы взять этого кандидата, организаторам шоу придется потратить \(s_i\) рублей.

Ведущая реалити-шоу листает досье всех кандидатов от \(i=1\) до \(i=n\) в порядке возрастания номеров, и для каждого из них она принимает решение, стоит ли взять этого кандидата в шоу. Если агрессивность кандидата \(i\) строго выше, чем агрессивность какого-либо из уже взятых кандидатов, то кандидата \(i\) она точно брать откажется. В противном случае ведущая может на свой выбор как взять кандидата в шоу, так и не взять. Ведущая хочет выбрать участников таким образом, чтобы максимизировать прибыль.

Рассматриваемое реалити-шоу получает доход следующим образом. Для каждого значения агрессивности \(v\) указана доходность \(c_v\), которая может быть как положительной, так и отрицательной. Участники, попавшие в проект, поочередно выходят на сцену в порядке возрастания номеров. Как только участник с номером \(i\) выходит на сцену, происходит следующее:

  • Шоу зарабатывает \(c_{l_i}\) рублей, где \(l_i\) — изначальная агрессивность участника \(i\).
  • Если оказывается, что на сцене находятся два участника с одинаковым значением агрессивности, то они немедленно начинают драку. В результате драке происходит следующее:
    • проигравшего участника увозит скорая помощь, и он выбывает из проекта,
    • агрессивность выигравшего участника возрастает на один, а шоу зарабатывает \(c_t\) рублей, где \(t\) — новое значение агрессивности.
  • Драки на сцене продолжаются до тех пор, пока на сцене не останутся участники с различными значениями агрессивности.

Ведущая шоу хочет выбрать команду таким образом, чтобы максимизировать прибыль, которая определяется как суммарный доход от происходящего на сцене, минус суммарные затраты на приглашение участников (которые определяются как сумма \(s_i\) для выбранных участников). Помогите ведущей сделать шоу максимально прибыльным!

Входные данные

В первой строке вводится два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2000\)) — количество кандидатов и максимальное начальное значение агрессивности кандидатов.

Во второй строке вводится \(n\) целых чисел \(l_i\) (\(1 \le l_i \le m\)) — агрессивность каждого из кандидатов.

В третьей строке вводится \(n\) целых чисел \(s_i\) (\(0 \le s_i \le 5000\)) — количество рублей, которое придется заплатить для найма каждого из кандидатов.

В четвертой строке вводится \(n + m\) целых чисел \(c_i\) (\(|c_i| \le 5000\)) — уровень доходности для каждого из значений агрессивности.

Гарантируется, что при данных ограничениях значение агрессивности участников не может превысить \(n + m\).

Выходные данные

Выведите одно целое число — максимальную прибыль шоу.

Примечание

В первом примере выгоднее всего взять кандидатов с номерами \(1, 2, 3, 5\). В таком случае шоу заплатит им за участие \(1 + 2 + 1 + 1 = 5\) рублей. На сцене же будет происходить следующее:

  • на сцене появится участник со значением агрессивности \(4\), шоу заработает \(4\) рубля;
  • на сцене появится участник со значением агрессивности \(3\), шоу заработает \(3\) рубля;
  • на сцене появится участник со значением агрессивности \(1\), шоу заработает \(1\) рубль;
  • на сцене появится еще один участник со значением агрессивности \(1\), шоу заработает еще \(1\) рубль, начнется драка. Один из участников проиграет и покинет проект, а второй повысит свое значение агрессивности до \(2\). Шоу заработает на этом еще \(2\) рубля.

Таким образом, доход шоу составит \(4 + 3 + 1 + 1 + 2=11\) рублей, а суммарная прибыль будет равна \(11 - 5 = 6\) рублям.

Во втором примере мы не можем пригласить обоих кандидатов, так как значение агрессивности второго кандидата больше, поэтому нам выгоднее взять кандидата с номером \(1\).

F. Разработка тарифов

Деревья дп *3500

Мэр города М. решил в 2020 году запустить несколько новых веток метро. Поскольку бюджет города сильно ограничен, он принял решение не копать новые туннели, а воспользоваться уже существующей подземной сетью.

Туннельная система города М. состоит из \(n\) станций метро. Станции соединены между собой двунаправленными туннелями, которых всего \(n - 1\). Между любыми станциями \(v\) и \(u\) есть ровно один простой путь. Каждая ветка метро, которую хочет создать мэр, является простым путём от станции \(a_i\) до станции \(b_i\). Ветки могут пересекаться, то есть иметь общие станции или туннели. Однако, ещё не решено, в какую из двух сторон будут следовать поезда на каждой из веток. А именно, на пути между станциями \(a_i\) и \(b_i\) поезда будут следовать либо от станции \(a_i\) к станции \(b_i\), либо от станции \(b_i\) к станции \(a_i\), но только в одну из сторон.

В городе \(M\) действует особая система тарифов. Каждой станции присваивается целое положительное число \(c_i\) — тарифная зона станции, а стоимость переезда от станции \(v\) до станции \(u\) определяется как \(c_u - c_v\) бурлей. Разумеется, такой переезд разрешен, только если есть ветка метро, по которой поезда идут из \(v\) в \(u\). Мэр города не хочет, чтобы между какими-то двумя станциями на одной ветке стоимость проезда была отрицательной, поэтому было принято решение выбрать направления движения поездов по веткам и изменить тарифные зоны всех станций города таким образом, чтобы на каждой ветке тарифные зоны станций строго возрастали, если рассмотреть её в сторону движения поездов.

Мэр сначала хочет присвоить каждой станции тарифную зону, а потом выбрать направления всех веток метро, чтобы вдоль каждой ветки тарифные зоны строго возрастали. В связи со скорым наступлением дня города, из всех возможных вариантов назначения тарифных зон мэр хочет выбрать то, где максимальное \(c_i\) будет как можно меньше. Помогите мэру составить новое распределение, или скажите, что это невозможно. Обратите внимание, от вас требуется только назначить тарифные зоны оптимальным образом, а направления для веток выводить не требуется. Таким образом, ваше решение считается верным, если существует способ выбрать направление следования поездов на каждой ветке так, чтобы вдоль всех веток тарифные зоны строго возрастали.

Входные данные

Первая строка содержит целые числа \(n\), \(m\) (\(2 \le n, \le 500\,000,\ 1 \le m \le 500\,000\)) — количество станций в городе и количество веток метро.

Каждая из следующих \(n-1\) строк описывает очередной туннель метро. Каждый туннель задаётся целыми числами \(v_i\), \(u_i\) (\(1 \le v_i,\ u_i \le n\), \(v_i \ne u_i\)). Гарантируется, что между любыми двумя станциями есть ровно один простой путь.

Каждая из следующих \(m\) строк описывает очередную ветку метро. Каждая ветка задаётся целыми числами \(a_i\), \(b_i\) (\(1 \le a_i,\ b_i \le n\), \(a_i \neq b_i\)).

Выходные данные

В первой строке выведите целое число \(k\) — максимальный номер тарифной зоны.

В следующей строке выведите числа \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le k\))  — тарифные зоны станций.

Если существует несколько ответов, выведите любой из них. Если же не существует ни одного способа назначить тарифные зоны, выведите «-1».

Примечание

В первом примере ветка \(1 \rightarrow 3\) проходит по станциям в порядке 1, 2, 3. При таком порядке посещения станций их тарифные зоны возрастают. Поскольку на этой ветке 3 станции, то нам потребуется как минимум 3 тарифные зоны. Таким образом, ответ 1, 2, 3 оптимален.

Во втором примере ни одно распределение тарифных зон не согласуется с ветками метро.

A. Задача о подмножестве чётной суммы

дп жадные алгоритмы Перебор реализация *800

Дан массив \(a\), состоящий из \(n\) положительных целых чисел. Найдите непустое подмножество его элементов с чётной (т.е. делящейся на \(2\)) суммой или определите, что такого подмножества нет.

И заданный массив и искомое подмножетсво могут содержать равные значения элементов.

Входные данные

В первой строке задано целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных, для которых требуется решить задачу. Затем следуют описания \(t\) наборов входных данных.

Описание каждого набора входных данных состоит из двух строк. В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 100\)) — количество элементов в массиве \(a\). Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 100\)) — элементы массива \(a\). Массив \(a\) может содержать одинаковые (равные) значения элементов.

Выходные данные

Для каждого набора входных данных выведите \(-1\), если не существует требуемого подмножества элементов. Иначе выведите целое число \(k\) — количество элементов в подмножестве. Затем выведите \(k\) различных чисел (\(1 \leq p_i \leq n\)) — индексы элементов найденного подмножества. Если есть несколько подходящих подмножеств, выведите любое из них.

Примечание

В примере описан тест, состоящий их трёх наборов входных данных.

В первом наборе входных данных можно выбрать подмножество, состоящее из второго элемента массива. Сумма в этом подмножестве равна \(4\), то есть чётна.

Во втором наборе входных данных существует только одно непустое подмножество элементов массива, состоящее из первого элемента. В этом подмножестве сумма нечётна, таким образом ответа не существует.

В третьем наборе входных данных подмножество, состоящее из всех элементов массива, имеет чётную сумму.

E. Режим сна

дп реализация *1700

У Вовы довольно странный режим сна. В сутках \(h\) часов. Вова будет спать ровно \(n\) раз. В \(i\)-й раз он будет спать ровно после \(a_i\) часов после пробуждения. Предположим, что Вова просыпается ровно в начале этой истории (изначальное время равно \(0\)). Каждый раз Вова спит ровно сутки (другими словами, \(h\) часов).

Вова думает, что \(i\)-й раз, когда он спит, — хороший, если он идет спать между \(l\) и \(r\) часами включительно.

Вова может контролировать себя и перед \(i\)-м разом он может выбрать одно из двух: пойти спать после \(a_i\) часов или после \(a_i - 1\) часов.

Ваша задача — назвать максимальное число хороших раз, которые Вова может получить, если будет действовать оптимально.

Входные данные

Первая строка теста содержит четыре целых числа \(n, h, l\) и \(r\) (\(1 \le n \le 2000, 3 \le h \le 2000, 0 \le l \le r < h\)) — количество раз, которое Вова будет спать, количество часов в сутках и отрезок хорошего времени для сна.

Вторая строка теста содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i < h\)), где \(a_i\) — количество часов, после которого Вова пойдет спать в \(i\)-й раз.

Выходные данные

Выведите одно целое число — максимальное количество хороших раз, которое Вова может получить, если будет действовать оптимально.

Примечание

Максимальное количество хороших раз в тестовом примере равно \(3\).

История начинается с \(t=0\). Затем Вова идет спать после \(a_1 - 1\) часов, теперь время равно \(15\). Это время не является хорошим. Затем Вова идет спать после \(a_2 - 1\) часов, теперь время равно \(15 + 16 = 7\). Это время также не является хорошим. Затем Вова идет спать после \(a_3\) часов, теперь время равно \(7 + 14 = 21\). Это время является хорошим. Затем Вова идет спать после \(a_4 - 1\) часов, теперь время равно \(21 + 19 = 16\). Это время не является хорошим. Затем Вова идет спать после \(a_5\) часов, теперь время равно \(16 + 20 = 12\). Это время не является хорошим. Затем Вова идет спать после \(a_6\) часов, Теперь время равно \(12 + 11 = 23\). Это время является хорошим. Затем Вова идет спать после \(a_7\) часов, теперь время равно \(23 + 22 = 21\). Это время также является хорошим.

F. Максимально белое поддерево

графы Деревья дп поиск в глубину и подобное *1800

Вам задано дерево, состоящее из \(n\) вершин. Деревом называется связный неориентированный граф с \(n-1\) ребром. Каждая вершина \(v\) этого дерева имеет свой цвет (\(a_v = 1\), если вершина \(v\) белая, и \(0\), если вершина \(v\) черная).

Вам нужно решить следующую задачу для каждой вершины \(v\): какую максимальную разницу между количеством белых вершин и количеством черных вершин вы можете получить, если выберете некоторое поддерево заданного дерева, которое содержит вершину \(v\)? Поддеревом дерева называется связный подграф заданного дерева. Более формально, если вы выберете поддерево, которое содержит \(cnt_w\) белых вершин и \(cnt_b\) черных вершин, вам нужно максимизировать \(cnt_w - cnt_b\).

Входные данные

Первая строка теста содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Вторая строка теста содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 1\)), где \(a_i\) — это цвет \(i\)-й вершины.

Каждая из последующих \(n-1\) строк описывает ребро в дереве. Ребро \(i\) задается двумя целыми числами \(u_i\) и \(v_i\) — номерами вершин, которые оно соединяет \((1 \le u_i, v_i \le n, u_i \ne v_i\)).

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите \(n\) целых чисел \(res_1, res_2, \dots, res_n\), где \(res_i\) — максимальная возможная разница между количеством белых и количеством черных вершин в некотором поддереве, которое содержит вершину \(i\).

Примечание

Первый тестовый пример представлен ниже:

Черные вершины выделены жирным.

Во втором тестовом примере лучшими поддеревьями для вершин \(2, 3\) и \(4\) являются вершины \(2, 3\) и \(4\) соответственно. И лучшим поддеревом для вершины \(1\) является поддерево, состоящее из вершин \(1\) и \(3\).

F1. Мудрецы (упрощенная версия)

meet-in-the-middle битмаски дп Перебор *2600

Это упрощенная версия задачи. Две версии отличаются ограничением на число мудрецов и ограничением по времени. Вы можете взламывать по этой задаче только если обе версии решены.

\(n\) мудрецов живут в красивом городе. Некоторые из них знают друг друга.

Для всех возможных \(n!\) перестановок \(p_1, p_2, \ldots, p_n\) мудрецов, построим бинарную строку длины \(n-1\): для всех \(1 \leq i < n\) положим \(s_i=1\) если мудрецы \(p_i\) и \(p_{i+1}\) знают друг друга, и \(s_i=0\) иначе.

Для всех \(2^{n-1}\) возможных бинарных строк, найдите число перестановок, при которых получается такая бинарная строка.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \leq n \leq 14)\) — количество мудрецов в городе.

Следующие \(n\) строк содержат бинарные строки, по \(n\) символов в каждой, \(j\)-й символ в \(i\)-й строке равен «1» если мудрец \(i\) знает мудреца \(j\), и равен «0» иначе.

Гарантируется, что если \(i\)-й мудрец знает \(j\)-го мудреца, то \(j\)-й мудрец знает \(i\)-го мудреца, и никакой мудрец не знает сам себя.

Выходные данные

Выведите \(2^{n-1}\) целых чисел, разделенных пробелами. Для каждого \(0 \leq x < 2^{n-1}\):

  • Рассмотрим такую строку \(s\) длины \(n-1\), что \(s_i = \lfloor \frac{x}{2^{i-1}} \rfloor \bmod 2\) для \(1 \leq i \leq n - 1\).
  • \((x+1)\)-е число должно быть необходимому ответу для \(s\).
Примечание

В первом тесте все мудрецы знакомы, соответственно для всех перестановок получается строка \(11\).

Во втором тесте

  • Если \(p = \{1, 2, 3, 4\}\), строка будет равна \(101\), потому что мудрецы \(1\) и \(2\) знакомы, \(2\) и \(3\) не знакомы, \(3\) и \(4\) знакомы;
  • Если \(p = \{4, 1, 2, 3\}\), строка будет равна \(110\), потому что мудрецы \(1\) и \(4\) не знакомы, \(1\) и \(2\) не знакомы, \(2\) и \(3\) не знакомы;
  • Если \(p = \{1, 3, 2, 4\}\), строка будет равна \(000\), потому что мудрецы \(1\) и \(3\) не знакомы, \(3\) и \(2\) не знакомы, \(2\) и \(4\) не знакомы.

F2. Мудрецы (усложненная версия)

битмаски дп математика *3200

Это усложненная версия задачи. Две версии отличаются ограничением на число мудрецов и ограничением по времени. Вы можете взламывать по этой задаче только если обе версии решены.

\(n\) мудрецов живут в красивом городе. Некоторые из них знают друг друга.

Для всех возможных \(n!\) перестановок \(p_1, p_2, \ldots, p_n\) мудрецов, построим бинарную строку длины \(n-1\): для всех \(1 \leq i < n\) положим \(s_i=1\) если мудрецы \(p_i\) и \(p_{i+1}\) знают друг друга, и \(s_i=0\) иначе.

Для всех \(2^{n-1}\) возможных бинарных строк, найдите число перестановок, при которых получается такая бинарная строка.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \leq n \leq 18)\) — количество мудрецов в городе.

Следующие \(n\) строк содержат бинарные строки, по \(n\) символов в каждой, \(j\)-й символ в \(i\)-й строке равен «1» если мудрец \(i\) знает мудреца \(j\), и равен «0» иначе.

Гарантируется, что если \(i\)-й мудрец знает \(j\)-го мудреца, то \(j\)-й мудрец знает \(i\)-го мудреца, и никакой мудрец не знает сам себя.

Выходные данные

Выведите \(2^{n-1}\) целых чисел, разделенных пробелами. Для каждого \(0 \leq x < 2^{n-1}\):

  • Рассмотрим такую строку \(s\) длины \(n-1\), что \(s_i = \lfloor \frac{x}{2^{i-1}} \rfloor \bmod 2\) для \(1 \leq i \leq n - 1\).
  • \((x+1)\)-е число должно быть необходимому ответу для \(s\).
Примечание

В первом тесте все мудрецы знакомы, соответственно для всех перестановок получается строка \(11\).

Во втором тесте

  • Если \(p = \{1, 2, 3, 4\}\), строка будет равна \(101\), потому что мудрецы \(1\) и \(2\) знакомы, \(2\) и \(3\) не знакомы, \(3\) и \(4\) знакомы;
  • Если \(p = \{4, 1, 2, 3\}\), строка будет равна \(110\), потому что мудрецы \(1\) и \(4\) не знакомы, \(1\) и \(2\) не знакомы, \(2\) и \(3\) не знакомы;
  • Если \(p = \{1, 3, 2, 4\}\), строка будет равна \(000\), потому что мудрецы \(1\) и \(3\) не знакомы, \(3\) и \(2\) не знакомы, \(2\) и \(4\) не знакомы.

G. Деревья паутины

геометрия Деревья дп *3500

Назовем граф с \(n\) вершинами, каждой из которых соответствует своя точка \(A_i = (x_i, y_i)\) с целыми координатами, планарным деревом, если:

  • Все точки \(A_1, A_2, \ldots, A_n\) различны и никакие три точки не лежат на одной прямой.
  • Граф является деревом, то есть в графе ровно \(n-1\) ребро и существует путь между любой парой вершин.
  • Для всех пар ребер \((s_1, f_1)\) и \((s_2, f_2)\), таких что \(s_1 \neq s_2, s_1 \neq f_2,\) \(f_1 \neq s_2\) и \(f_1 \neq f_2\), отрезки \(A_{s_1} A_{f_1}\) и \(A_{s_2} A_{f_2}\) не пересекаются.

Представим планарное дерево на \(n\) вершинах. Рассмотрим выпуклую оболочку множества точек \(A_1, A_2, \ldots, A_n\). Давайте назовем это дерево паутиной если для всех \(1 \leq i \leq n\) следующие условия верны:

  • Все листья (вершины со степенью \(\leq 1\)) лежат на выпуклой оболочке.
  • Все вершины на выпуклой оболочке являются листьями.

Пример паутины:

Точки \(A_3, A_6, A_7, A_4\) лежат на выпуклой оболочке и вершины \(3, 6, 7, 4\) это все листья этого дерева.

Обратитесь к примечанию для большего количества примеров.

Давайте назовем подмножество \(S \subset \{1, 2, \ldots, n\}\) вершин поддеревом, если для всех пар вершин из \(S\) существует путь между ними, содержащий только вершины из множества \(S\). Обратите внимание, что любое поддерево планарного дерева также будет являться планарным деревом.

Вам дано планарное дерево, состоящее из \(n\) вершин. Назовем разбиение множества вершин \(\{1, 2, \ldots, n\}\) на непустые подмножества \(A_1, A_2, \ldots, A_k\) (то есть \(A_i \cap A_j = \emptyset\) для всех \(1 \leq i < j \leq k\) и \(A_1 \cup A_2 \cup \ldots \cup A_k = \{1, 2, \ldots, n\}\)) хорошим, если для всех \(1 \leq i \leq k\), множество \(A_i\) является поддеревом и паутиной. Два разбиения различны, если существует некоторое множество, лежащее в одном разбиении, но не лежащее в другом.

Найдите количество хороших разбиений. Поскольку это число может быть очень большим, найдите его по модулю \(998\,244\,353\).

Входные данные

В первой строке находится единственное целое число \(n\) (\(1 \leq n \leq 100\)) — количество вершин в дереве.

В следующих \(n\) строках находится по два целых числа \(x_i, y_i\) (\(-10^9 \leq x_i, y_i \leq 10^9\))  — координаты \(i\)-й вершины, точки \(A_i\).

В следующей \(n-1\) строке находится по два целых числа \(s, f\) (\(1 \leq s, f \leq n\)) — ребра \((s, f)\) данного дерева.

Гарантируется, что все точки различны и никакие три точки не лежат на одной прямой. Также гарантируется, что данные ребра и координаты точек описывают планарное дерево.

Выходные данные

Выведите одно целое число  — количество хороших разбиений множества вершин данного планарного дерева по модулю \(998\,244\,353\).

Примечание
Картинка дерева из первого теста.

В первом тесте, все хорошие разбиения это:

  1. \(\{1\}\), \(\{2\}\), \(\{3\}\), \(\{4\}\);
  2. \(\{1, 2\}\), \(\{3\}\), \(\{4\}\);
  3. \(\{1, 3\}\), \(\{2\}\), \(\{4\}\);
  4. \(\{1, 4\}\), \(\{2\}\), \(\{3\}\);
  5. \(\{1, 2, 3, 4\}\).

Разбиение \(\{1, 2, 3\}\), \(\{4\}\) не является хорошим, потому что поддерево \(\{1, 2, 3\}\) это не паутина, потому что вершина \(1\), не являющаяся листом, лежит на выпуклой оболочке.

Разбиение \(\{2, 3, 4\}\), \(\{1\}\) не является хорошим, потому что подмножество \(\{2, 3, 4\}\) не является поддеревом.

Картинка дерева из второго теста.

Во втором тесте, данное дерево само не является паутиной, потому что вершина \(1\), которая является листом, не лежит на выпуклой оболочке. Однако, поддерево \(\{2, 3, 4, 5\}\) является паутиной.

Картинка дерева из третьего теста.
Картинка дерева из четвертого теста.

В четвертом тесте, разбиение \(\{1, 2, 3, 4\}\), \(\{5, 6, 7, 8\}\) хорошее, потому что оба подмножества являются паутинами.

E. Посчитайте блоки

дп Комбинаторика математика *1800

Вы выписали все целые числа от \(0\) до \(10^n - 1\), добавляя к ним ведущие нули так, чтобы их длины были равны \(n\). Например, если \(n = 3\), то вы выпишете следующие числа: 000, 001, ..., 998, 999.

Назовем блоком в числе \(x\) последовательный отрезок одинаковых цифр, который не может быть расширен ни влево, ни вправо.

Например, в числе \(00027734000\) есть три блока длины \(1\), один блок длины \(2\) и два блока длины \(3\).

Для всех чисел \(i\) от \(1\) до \(n\) посчитайте суммарное количество блоков длины \(i\) среди выписанных вами чисел.

Так как эти числа могут быть слишком большими, выведите их по модулю \(998244353\).

Входные данные

В единственной строке содержится число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Выходные данные

В единственной строке выведите \(n\) чисел. \(i\)-е число равно количеству блоков длины \(i\) среди выписанных вами чисел.

Так как эти числа могут быть слишком большими, выведите их по модулю \(998244353\).

F. Отрезки И

битмаски дп Комбинаторика Структуры данных *2500

Даны три целых числа \(n\), \(k\), \(m\) и \(m\) условий \((l_1, r_1, x_1), (l_2, r_2, x_2), \dots, (l_m, r_m, x_m)\).

Посчитайте количество различных массивов \(a\), состоящих из \(n\) целых чисел, таких что:

  • \(0 \le a_i < 2^k\) для всех \(1 \le i \le n\);
  • побитовое И чисел \(a[l_i] \& a[l_i + 1] \& \dots \& a[r_i] = x_i\) для всех \(1 \le i \le m\).

Два массива \(a\) и \(b\) считаются различными, если существует такая позиция \(i\), что \(a_i \neq b_i\).

Это число может быть довольно велико, поэтому выведите его по модулю \(998244353\).

Входные данные

В первой строке записаны три целых числа \(n\), \(k\) и \(m\) (\(1 \le n \le 5 \cdot 10^5\), \(1 \le k \le 30\), \(0 \le m \le 5 \cdot 10^5\)) — длина массива \(a\), значение такое, что все числа в массиве \(a\) должны быть меньше, чем \(2^k\), и количество условий соответственно.

В каждой из следующих \(m\) строк записано одно условие \(l_i\), \(r_i\) и \(x_i\) (\(1 \le l_i \le r_i \le n\), \(0 \le x_i < 2^k\)) — границы отрезка условия и необходимое значение побитового И на нем.

Выходные данные

Выведите одно целое число — количество различных массивов \(a\), для которых выполняются все приведенные выше условия, по модулю \(998244353\).

Примечание

Можете вспомнить, что такое побитовое И по ссылке.

В первом примере ответом являются следующие массивы: \([3, 3, 7, 6]\), \([3, 7, 7, 6]\) и \([7, 3, 7, 6]\).

G. Буквы и знаки вопроса

битмаски дп строковые суфф. структуры *2800

Вам даны строка \(S\) и массив строк \([t_1, t_2, \dots, t_k]\). Каждая строка \(t_i\) состоит из строчных латинских букв от a до n; \(S\) состоит из строчных латинских букв от a до n и не более \(14\) знаков вопроса.

У каждой строки \(t_i\) есть цена \(c_i\) — целое число. Стоимость некоторой строки \(T\) считается как \(\sum\limits_{i = 1}^{k} F(T, t_i) \cdot c_i\), где \(F(T, t_i)\) — количество вхождений \(t_i\) в \(T\) в качестве подстроки. К примеру, \(F(\text{aaabaaa}, \text{aa}) = 4\).

Вы должны заменить все знаки вопроса в \(S\) на попарно различные строчные латинские буквы от a до n так, чтобы стоимость \(S\) была максимально возможной.

Входные данные

В первой строке задано одно целое число \(k\) (\(1 \le k \le 1000\)) — количество строк в массиве \([t_1, t_2, \dots, t_k]\).

Затем следуют \(k\) строк, каждая из которых содержит строку \(t_i\) (состоящую из строчных латинских букв от a до n) и целое число \(c_i\) (\(1 \le |t_i| \le 1000\), \(-10^6 \le c_i \le 10^6\)). Сумма длин всех \(t_i\) не превосходит \(1000\).

В последней строке задана одна строка \(S\) (\(1 \le |S| \le 4 \cdot 10^5\)) из латинских букв от a до n и знаков вопроса. Количество знаков вопроса в \(S\) не превосходит \(14\).

Выходные данные

Выведите одно целое число — максимальную стоимость \(S\) после замены всех знаков вопроса на попарно различные строчные латинские буквы от a до n.

D. Карусель, карусель — это радость для нас

графы дп жадные алгоритмы Конструктив математика *1800

Круглая карусель состоит из \(n\) фигур различных животных. Фигуры пронумерованы от \(1\) до \(n\) по ходу движения карусели. Таким образом, после \(n\)-й фигуры идёт фигура с номером \(1\). Каждая фигура имеет вид — это животного этой фигуры (лошадка, тигр и др.). Вид животного \(i\)-й фигуры равен \(t_i\).

Пример изображения карусели для \(n=9\) и \(t=[5, 5, 1, 15, 1, 5, 5, 1, 1]\).

Вы хотите покрасить каждую фигуру в один из цветов. Вам кажется скучным, если в каруселе разные фигуры (с разными видами животных) идут подряд и покрашены в одинаковые цвета.

Ваша задача — покрасить фигуры так, чтобы количество различных использованных цветов было минимальным и не существовало двух фигур разного вида, которые идут подряд и покрашены в один цвет одновременно. Если Вы используете ровно \(k\) различных цветов, то цвета фигур должны быть пронумерованы целыми числами от \(1\) до \(k\).

Входные данные

Входные данные состоят из одного или более набора входных данных.

В первой строке записано целое число \(q\) (\(1 \le q \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(q\) наборов входных данных, по две строки на каждый набор.

Первая строка набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество фигур на карусели. Фигуры пронумерованы от \(1\) до \(n\) по ходу вращения карусели. Считайте, что после фигуры \(n\) идёт фигура \(1\).

Вторая строка набора входных данных содержит \(n\) целых чисел \(t_1, t_2, \dots, t_n\) (\(1 \le t_i \le 2 \cdot 10^5\)), где \(t_i\) равно виду животного \(i\)-й фигуры.

Сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2\cdot10^5\).

Выходные данные

Выведите \(q\) ответов — на для каждого набора входных данных выведите две строки.

В первую строку выведите одно целое число \(k\) — минимально возможное количество различных цветов фигур.

Во вторую строку выведите \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le k\)), где \(c_i\) обозначает номер цвета \(i\)-й фигуры. Если существует несколько возможных ответов, вы можете вывести любой из них.

F. Элементарно!

*особая задача дп Перебор Строки

Входные данные

Входные данные состоят из одной строки символов английского алфавита в верхнем регистре A-Z. Длина строки - от 1 до 10 символов, включительно.

Выходные данные

Выведите «YES» или «NO».

F. Независимое множество

Деревья дп поиск в глубину и подобное *2500

Эрик — учитель по теории графов. Сегодня он рассказывает независимое множество и реберно-порожденный подграф.

Для данного графа \(G=(V,E)\) независимым множеством называется такое подмножество вершин \(V' \subset V\), что для каждой пары \(u,v \in V'\), \((u,v) \not \in E\) (то есть в \(E\) нет ребра, соединяющего две вершины из \(V'\)).

Реберно-порожденный подграф состоит из подмножества ребер \(E' \subset E\) и всех вершин оригинального графа, которые инцидентны хотя бы одному ребру подграфа.

Для \(E' \subset E\) обозначим за \(G[E']\) реберно-порожденный подграф такой, что \(E'\) — это множество ребер этого подграфа. Иллюстрации этих определений:

В качестве упражнения на закрепление материала он дал студентам следующую задачу:

Дано дерево \(G=(V,E)\), посчитайте сумму \(w(H)\) по всем реберно-порожденным подграфам \(H\) графа \(G\), кроме пустого, где \(w(H)\) — это количество независимых множеств в \(H\). Формально, посчитайте \(\sum \limits_{\emptyset \not= E' \subset E} w(G[E'])\).

Докажите Эрику, что вы умнее его учеников, предъявив правильный ответ как можно скорее. Обратите внимание, что ответ может быть довольно большой, поэтому выведите его по модулю \(998,244,353\).

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)), обозначающее количество вершин в графе \(G\).

В каждой из следующих \(n-1\) строк записаны два целых числа \(u\) and \(v\) (\(1 \le u,v \le n\), \(u \not= v\)), задающие ребра данного дерева.

Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите одно целое число, обозначающее ответ по модулю \(998,244,353\).

Примечание

Во втором примере все независимые множества изображены на рисунке.

F. Странная функция

Бинарный поиск дп жадные алгоритмы Структуры данных *2500

Введем функцию \(f\) следующим образом. Эта функция принимает массив \(a\) длины \(n\) и возвращает массив. Изначально результат — пустой массив. Для каждого \(i\) от \(1\) до \(n\) мы добавляем \(a_i\) в конец результата, если этот элемент больше всех предыдущих (формально, если \(a_i > \max\limits_{1 \le j < i}a_j\)). Примеры применения функции \(f\):

  1. если \(a = [3, 1, 2, 7, 7, 3, 6, 7, 8]\), то \(f(a) = [3, 7, 8]\);
  2. если \(a = [1]\), то \(f(a) = [1]\);
  3. если \(a = [4, 1, 1, 2, 3]\), то \(f(a) = [4]\);
  4. если \(a = [1, 3, 1, 2, 6, 8, 7, 7, 4, 11, 10]\), то \(f(a) = [1, 3, 6, 8, 11]\).

Вам даны два массива: \(a_1, a_2, \dots , a_n\) и \(b_1, b_2, \dots , b_m\). Вы можете удалить некоторые элементы массива \(a\) (возможно, никакие). Чтобы удалить элемент \(a_i\), вы должны заплатить \(p_i\) монет (значение \(p_i\) может быть отрицательным, тогда за удаление элемента вы получаете \(|p_i|\) монет). Посчитайте минимальное кол-во монет (возможно, отрицательное), которое вы должны потратить, чтобы условие \(f(a) = b\) выполнялось.

Входные данные

В первой строке задано одно целое число \(n\) \((1 \le n \le 5 \cdot 10^5)\) — длина массива \(a\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le n)\) — массив \(a\).

В третьей строке заданы \(n\) целых чисел \(p_1, p_2, \dots, p_n\) \((|p_i| \le 10^9)\) — массив \(p\).

В четвертой строке задано целое число \(m\) \((1 \le m \le n)\) — длина массива \(b\).

В пятой строке заданы \(m\) целых чисел \(b_1, b_2, \dots, b_m\) \((1 \le b_i \le n, b_{i-1} < b_i)\) — массив \(b\).

Выходные данные

Если ответ существует, выведите YES в первой строке, а во второй — минимальное количество монет, которое надо потратить, чтобы условие \(f(a) = b\) выполнилось.

Иначе выведите NO.

E1. Палиндром из трех блоков (простая версия)

Бинарный поиск дп Перебор Структуры данных *1700

Единственное отличие между простой и сложной версиями — ограничения.

Вам дана последовательность \(a\), состоящая из \(n\) положительных чисел.

Определим палиндром из трех блоков как последовательность, которая состоит из не более, чем двух различных элементов (назовем эти элементы \(a\) и \(b\), \(a\) может быть равно \(b\)) и выглядит следующим образом \([\underbrace{a, a, \dots, a}_{x}, \underbrace{b, b, \dots, b}_{y}, \underbrace{a, a, \dots, a}_{x}]\). Здесь \(x, y\) — числа, большие или равные \(0\). Например, последовательности \([]\), \([2]\), \([1, 1]\), \([1, 2, 1]\), \([1, 2, 2, 1]\) и \([1, 1, 2, 1, 1]\)палиндромы из трех блоков, но \([1, 2, 3, 2, 1]\), \([1, 2, 1, 2, 1]\) и \([1, 2]\) — нет.

Ваша задача — выбрать максимальную по длине подпоследовательность \(a\), которая является палиндромом из трех блоков.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Напомним, что последовательность \(t\) является подпоследовательностью последовательности \(s\), если \(t\) может быть получена из \(s\) после удаления нуля или более элементов без изменения порядка оставшихся элементов. Например, если \(s=[1, 2, 1, 3, 1, 2, 1]\), то возможные подпоследовательности: \([1, 1, 1, 1]\), \([3]\) и \([1, 2, 1, 3, 1, 2, 1]\), но не \([3, 2, 3]\) and \([1, 1, 1, 1, 2]\).

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2000\)) — длину \(a\). Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 26\)), где \(a_i\) — это \(i\)-й элемент в \(a\). Заметьте, что максимальное значение \(a_i\) может быть до \(26\).

Гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(2000\) (\(\sum n \le 2000\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — максимально возможную длину некоторой подпоследовательности \(a\), которая является палиндромом из трех блоков.

E2. Палиндром из трех блоков (сложная версия)

дп Перебор Структуры данных *1800

Единственное отличие между простой и сложной версиями — ограничения.

Вам дана последовательность \(a\), состоящая из \(n\) положительных чисел.

Определим палиндром из трех блоков как последовательность, которая состоит из не более, чем двух различных элементов (назовем эти элементы \(a\) и \(b\), \(a\) может быть равно \(b\)) и выглядит следующим образом \([\underbrace{a, a, \dots, a}_{x}, \underbrace{b, b, \dots, b}_{y}, \underbrace{a, a, \dots, a}_{x}]\). Здесь \(x, y\) — числа, большие или равные \(0\). Например, последовательности \([]\), \([2]\), \([1, 1]\), \([1, 2, 1]\), \([1, 2, 2, 1]\) and \([1, 1, 2, 1, 1]\)палиндромы из трех блоков, но \([1, 2, 3, 2, 1]\), \([1, 2, 1, 2, 1]\) и \([1, 2]\) — нет.

Ваша задача — выбрать максимальную по длине подпоследовательность \(a\), которая является палиндромом из трех блоков.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Напомним, что последовательность \(t\) является подпоследовательностью последовательности \(s\), если \(t\) может быть получена из \(s\) после удаления нуля или более элементов без изменения порядка оставшихся элементов. Например, если \(s=[1, 2, 1, 3, 1, 2, 1]\), то возможные подпоследовательности: \([1, 1, 1, 1]\), \([3]\) и \([1, 2, 1, 3, 1, 2, 1]\), но не \([3, 2, 3]\) and \([1, 1, 1, 1, 2]\).

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину \(a\). Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 200\)), где \(a_i\) — это \(i\)-й элемент в \(a\). Заметьте, что максимальное значение \(a_i\) может быть до \(200\).

Гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — максимально возможную длину некоторой подпоследовательности \(a\), которая является палиндромом из трех блоков.

A. Linova и королевство

Деревья дп жадные алгоритмы поиск в глубину и подобное сортировки *1600

Написание легких романов является очень важной частью жизни Linova. Прошлой ночью ей приснилось сказочное королевство. Linova написала легкий роман про это королевство, как только проснулась. Конечно, она стала его королевой.

 

Всего есть \(n\) городов и \(n-1\) двусторонняя дорога, соединяющая некоторые пары городов королевства. Из любого города вы можете попасть в любой другой город, пройдя по некоторым дорогам. Города пронумерованы от \(1\) до \(n\) и город \(1\) является столицей королевства. Таким образом, структура королевства является деревом.

Как королева, Linova планирует выбрать ровно \(k\) городов для развития индустрии, тогда как в остальных городах будет развиваться туризм. Столица также может быть как индустриальным, так и туристическим городом.

Раз в год в столице будет проходить встреча. Для участия во встрече, каждый индустриальный город посылает участника. Все посланники приедут в столицу по кратчайшему пути (который как известно единственный в дереве).

Путешествие по туристическим городам очень приятно. Для каждого посланника, его уровень счастья равен количеству туристических городов на его пути.

Для того, чтобы люди любили королеву, Linova хочет выбрать \(k\) городов так, чтобы максимизировать сумму уровней счастья всех посланников. Можете ли вы посчитать максимальную возможную сумму для нее?

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(2\le n\le 2 \cdot 10^5\), \(1\le k< n\))  — количество городов и индустриальных городов, соответственно.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u\) и \(v\) (\(1\le u,v\le n\)), обозначающих наличие дороги, соединяющей города \(u\) и \(v\).

Гарантируется, что из любого города можно достичь любой другой по дорогам.

Выходные данные

Выведите строку, содержащую единственное целое число  — максимальную возможную сумму уровней счастья всех посланников, которую можно достичь.

Примечание

В первом тесте, Linova может выбрать города \(2\), \(5\), \(6\), \(7\) для развития индустрии, тогда уровень счастья посланника из города \(2\) будет равен \(1\), уровни счастья посланников из городов \(5\), \(6\), \(7\) будут равны \(2\). Таким образом, сумма уровней счастья будет равна \(7\) и можно доказать, что это максимальная возможная сумма, которая может быть.

Во втором тесте, выбрав города \(3\) и \(4\) для развития индустрии можно достичь суммы \(3\), но обратите внимание, что Linova планирует выбрать ровно \(k\) городов для развития индустрии, поэтому максимальная сумма равна \(2\).

C. Kaavi и магическое заклинание

дп Строки *2200

Kaavi, таинственная гадалка, глубоко верит в то, что судьба человека неизбежна и неотвратима. Конечно, она зарабатывает себе на жизнь предсказывая будущее других людей. Занимаясь гаданием, Kaavi верит, что магические заклинания могут дать ей огромную силу видеть будущее.

 

У Kaavi есть строка \(T\) длины \(m\) и все строки, имеющие префикс \(T\) это магические заклинания. У Kaavi также есть строка \(S\) длины \(n\) и пустая строка \(A\).

Во время гадания, Kaavi нужно применить некоторую последовательность операций. Есть две различные операции:

  • Удалить первый символ строки \(S\) и добавить его в начало строки \(A\).
  • Удалить первый символ строки \(S\) и добавить его в конец строки \(A\).

Kaavi может сделать не более, чем \(n\) операций. Для того, чтобы завершить гадание, она хочет узнать количество различных последовательностей операций, для того, чтобы сделать \(A\) магическим заклинанием (то есть эта строка имеет префикс \(T\)). Как ее ассистент, можете ли вы помочь ей? Поскольку ответ может быть очень большим, Kaavi хочет знать его остаток при делении на \(998\,244\,353\).

Две последовательности операций считаются различными, если они различаются по длине или существует такое \(i\), что их \(i\)-е операции различаются.

Подстрокой называется некоторая последовательность последовательных символов строки. Префиксом строки \(S\) называется подстрока \(S\), которая начинается в начале строки \(S\).

Входные данные

В первой строке находится строка \(S\) длины \(n\) (\(1 \leq n \leq 3000\)).

Во второй строке находится строка \(T\) длины \(m\) (\(1 \leq m \leq n\)).

Обе строки состоят только из строчных латинских символов.

Выходные данные

Выведите единственное целое число  — ответ на задачу по модулю \(998\,244\,353\).

Примечание

В первом тесте:

Красные строки это магические заклинания. В первой операции, Kaavi может добавить символ «a» в начало или в конец \(A\). Хотя в обоих случаях результат будет одинаковым, это две разные операции. Поэтому ответ \(6\times2=12\).

D. Вложенные резинки

Деревья дп Конструктив математика поиск в глубину и подобное *2700

У вас есть дерево из \(n\) вершин. Вы собираетесь преобразовать это дерево в \(n\) резинок на бесконечной плоскости. Должно выполняться следующее;

  • Для каждой пары вершин \(a\) и \(b\), резинки \(a\) и \(b\) должны пересекаться тогда и только тогда, когда между \(a\) и \(b\) в дереве существует ребро.
  • Форма резинки должна быть простой петлей. Другими словами, резинка  — это замкнутая кривая без самопересечений.

Теперь давайте дадим следующие определения:

  • Резинка \(a\) включает резинку \(b\), если и только если резинка \(b\) находится полностью внутри резинки \(a\), и они не пересекаются.
  • Последовательность резинок \(a_{1}, a_{2}, \ldots, a_{k}\) (\(k \ge 2\)) называется вложенной, если и только если для всех \(i\) (\(2 \le i \le k\)), \(a_{i-1}\) включает в себя \(a_{i}\).
Это пример преобразования. Обратите внимание, что резинки \(5\) и \(6\) являются вложенными.

Можно доказать, что при заданных ограничениях существует преобразование и последовательность вложенных резинок.

Какую максимальную длину последовательности вложенных резинок можно получить из данного дерева? Найдите и выведите ее.

Входные данные

Первая строка содержит целое число \(n\) (\(3 \le n \le 10^{5}\))  — количество вершин в данном дереве.

\(i\)-я из следующих \(n-1\) строк содержит два целых числа \(a_{i}\) и \(b_{i}\) (\(1 \le a_{i} \lt b_{i} \le n\))  — это означает, что существует ребро между \(a_{i}\) и \(b_{i}\). Гарантируется, что данный граф образует дерево из \(n\) вершин.

Выходные данные

Выведите ответ.

Примечание

В первом примере можно получить вложенную последовательность из \(4\) резинок (\(1\), \(2\), \(5\) и \(6\)) с помощью следующего преобразования, приведенного ниже. Конечно, существуют и другие преобразования для создания вложенной последовательности длины \(4\). Однако вы не можете сделать последовательность из \(5\) или более вложенных резинок для данного дерева.

Одно из возможных преобразований для второго примера приведено ниже.

A. Заполнение ромбами

дп математика Перебор реализация *900

У вас есть целое число \(n\). Сколькими способами можно полностью покрыть поясоподобную область, состоящую из \(4n-2\) треугольников, ромбами?

Ромб состоит из двух треугольников. Вы можете перемещать, вращать или переворачивать ромб, но вы не можете масштабировать его.

\(2\) покрытия называются различными, если некоторые \(2\) треугольника покрыты одним и тем же ромбом в одном из них, и различными в другом.

Пожалуйста, посмотрите на иллюстрации ниже для лучшего понимания.

Слева изображен ромб, которым вы будете заполнять область, а справа  — область, которую вы хотите заполнить.

Выше приведены области, для \(n = 1, 2, 3, 4\).

Вы должны ответить на \(t\) независимых тестовых случаев.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^{4}\))  — количество тестовых случаев.

Каждая из следующих \(t\) строк содержит одно целое число \(n\) (\(1 \le n \le 10^{9}\)).

Выходные данные

Для каждого теста выведите количество способов полностью покрыть поясоподобную область, состоящую из \(4n-2\) треугольников, ромбами. Можно показать, что при данных ограничениях это количество не превышает \(10^{18}\).

Примечание

В первом тестовом примере, есть следующие \(2\) способа заполнить область:

Во втором тестовом примере, существует единственный способ заполнить область:

B. Настя и табло

битмаски графы дп жадные алгоритмы *1700

Денис, справившийся с покупкой цветов и конфет (об этой истории вы узнаете в следующей задаче), поехал на встречу с Настей, чтобы предложить ей стать парой.

И вот, они сидят вместе в кафе, болтают. Решительный Денис наконец-то предлагает быть им вместе, но... Но Настя не даёт никакого ответа.

Как же сильно расстроился бедный парень. Так сильно, что он пнул какое-то табло с цифрами. Цифры отображаются таким же образом, как на электронных часах: каждая позиция для цифры состоит из \(7\) сегментов, которые могут быть включены или выключены, чтобы отображать различные цифры. На картинке показано, как изображаются все \(10\) десятичных цифр:

После пинка некоторые палочки перестали работать, то есть некоторые палочки могли перестать гореть, если горели раньше. Но Денис запомнил, сколько палочек горело и сколько горит сейчас. Пусть сломалось ровно \(k\) палочек и известно, какие палочки горят сейчас. Денис задался вопросом: какое максимальное число может гореть на табло, если включить ровно \(k\) палочек (из тех которые сейчас выключены)?

Разрешается, чтобы в числе были лидирующие нули.

Входные данные

В первой строке дано число \(n\) \((1 \leq n \leq 2000)\)  — количество цифр на табло и \(k\) \((0 \leq k \leq 2000)\)  — количество сломанных палочек.

В следующих \(n\) строках находится по одной бинарной строке длины \(7\), \(i\)-я из которых кодирует \(i\)-ю цифру табло.

Каждая цифра на табло состоит из \(7\) палочек. Пронумеруем их, как на картинке ниже, и пусть на \(i\)-м месте бинарной строки будет \(0\), если \(i\)-я палочка не горит и \(1\), если горит. Тогда бинарная строка длины \(7\) будет задавать то, какие палочки горят.

Таким образом, последовательности «1110111», «0010010», «1011101», «1011011», «0111010», «1101011», «1101111», «1010010», «1111111», «1111011» кодируют по порядку все цифры от \(0\) до \(9\) включительно.

Выходные данные

Выведите единственное число, состоящее из \(n\) разрядов – максимальное число, которое можно получить, если включить ровно \(k\) палочек или \(-1\), если невозможно так включить ровно \(k\) палочек, чтобы на табло получилась какая-то последовательность цифр.

Примечание

В первом тесте мы обязаны включить все \(7\) палочек и получить на табло одну цифру \(8\).

Во втором тесте у нас включены палочки таким образом, что образуются единицы. За \(5\) дополнительно включённых палочек можно получить числа \(07\), \(18\), \(34\), \(43\), \(70\), \(79\), \(81\) и \(97\), из них выбираем максимальное  — \(97\).

В третьем тесте невозможно так включить ровно \(5\) палочек, чтобы на табло получилась какая-то последовательность цифр.

C. Настя и неожиданный гость

графы дп кратчайшие пути поиск в глубину и подобное *2400

Если девушка не идет к Денису, то Денис идет к девушке. Руководствуясь таким принципом, молодой человек вышел из дома, купил цветы и направился к Насте.

По пути от его дома до дома его возлюбленной есть дорога из \(n\) полос, перейти которую за один зеленый свет не всегда возможно. Предвидя это, добрый мэр распорядился поставить в некоторых точках этой дороги островки безопасности. Каждый островок расположен после какой-то полосы, а также в начале и в конце дороги. На них пешеходы могут отдохнуть, набраться сил и дождаться зеленого света.

Денис подошел к левому краю дороги ровно в тот момент, когда загорелся зеленый свет. Мальчик знает, что светофор сначала горит \(g\) секунд зеленым, а потом \(r\) секунд красным, потом опять \(g\) секунд зеленым и так далее.

Формально, дорогу можно представить как отрезок \([0, n]\). Изначально Денис стоит в точке \(0\). Его задача - попасть в точку \(n\) за минимальное возможное время.

Oн знает множество различных целых чисел \(d_1, d_2, \ldots, d_m\), где \(0 \leq d_i \leq n\)  — координаты точек, в которых расположены островки безопасности. Только в одной из этих точек мальчик может находиться в момент, когда горит красный свет.

К сожалению, из-за волнения Денис не всегда может контролировать себя, поэтому сейчас на его передвижения наложены некоторые ограничения:

  • Он обязан двигаться всегда, пока горит зеленый, ведь сложно стоять, когда тебя ждет такая девушка. Денис за \(1\) секунду может изменить свое положение на \(\pm 1\). При этом он должен всегда оставаться внутри отрезка \([0, n]\).
  • Он может менять направление движения только на островках безопасности (ведь это безопасно). Это означает, что если за предыдущую секунду мальчик изменил свое положение на \(+1\), то если он находится на островке безопасности, он может изменить свое положение на \(\pm 1\), иначе он может изменить свое положение вновь только на \(+1\). Аналогично, если за предыдущую секунду он изменил свое положение на \(-1\), на островке безопасности он может изменить свое положение на \(\pm 1\), а в любой другой точке вновь только на \(-1\).
  • В момент, когда загорается красный, мальчик должен оказаться на каком-то островке безопасности. Он сможет продолжить движение в любом направлении, когда вновь загорится зеленый.

Считается, что Денис перешел дорогу как только его координата станет равна \(n\).

Эта задача оказалась не так проста, ведь возможно, таким способом даже невозможно перейти дорогу. Так как у Дениса все мысли о любви, он не справился решить ее и попросил нас помочь ему в этом. Найдите минимальное возможное время, за которое он сможет перейти дорогу по таким правилам, либо установите, что это сделать невозможно.

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) \((1 \leq n \leq 10^6, 2 \leq m \leq min(n + 1, 10^4))\)  — ширина дороги и количество островков безопасности.

Во второй строке находится \(m\) различных целых чисел \(d_1, d_2, \ldots, d_m\) \((0 \leq d_i \leq n)\)  — точки, в которых расположены островки безопасности. Гарантируется, что среди них есть \(0\) и \(n\).

В третьей строке находится два целых числа \(g, r\) \((1 \leq g, r \leq 1000)\)  — время, которое на светофоре горит зеленый свет и время, которое на светофоре горит красный свет.

Выходные данные

Выведите одно целое число  — минимальное время, за которое Денис может перейти дорогу по всем правилам.

Если перейти дорогу по всем правилам невозможно выведите \(-1\).

Примечание

В первом тесте оптимальный маршрут такой:

  • за первый зеленый свет дойти до \(7\) и вернуться на \(3\). В этом случае, мы сменим направление движения в точке \(7\), что разрешено, поскольку в этой точке есть островок безопасности. В конце мы окажемся в точке \(3\), где также есть островок безопасности. Следующие \(11\) секунд мы должны подождать красный свет.
  • за второй зеленый свет дойти до \(14\). Снова подождать красный свет.
  • за \(1\) секунду перейти в \(15\). В итоге Денис оказывается в конце дороги.

Всего получается \(45\) секунд.

Во втором тесте невозможно перейти дорогу по всем правилам.

F. Сделай возрастающим

битмаски дп Перебор *3000

Дан массив \(a\), состоящий из \(n\) целых чисел. Вы можете применить несколько операций к этому массиву (возможно, ни одной).

Во время каждой операции вы выбираете два индекса \(i\) и \(j\) (\(1 \le i, j \le n\); \(i \ne j\)), увеличиваете \(a_j\) на \(a_i\), а затем удаляете \(i\)-й элемент из массива (при этом индексы всех элементов правее удаляемого уменьшаются на \(1\), и размер массива \(n\) также уменьшается на \(1\)).

Ваша цель — сделать массив \(a\) строго возрастающим, то есть должно выполняться условие \(a_1 < a_2 < \dots < a_n\) (где \(n\) — итоговый размер массива).

Посчитайте минимальное количество операций, которое требуется, чтобы массив стал возрастающим.

Входные данные

В первой строке задано одно целое число \(T\) (\(1 \le T \le 10000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит одно целое число \(n\) (\(1 \le n \le 15\)) — количество элементов в исходном массиве \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^6\)).

Гарантируется, что:

  • количество наборов тестовых данных, в которых \(n \ge 5\), не превосходит \(5000\);
  • количество наборов тестовых данных, в которых \(n \ge 8\), не превосходит \(500\);
  • количество наборов тестовых данных, в которых \(n \ge 10\), не превосходит \(100\);
  • количество наборов тестовых данных, в которых \(n \ge 11\), не превосходит \(50\);
  • количество наборов тестовых данных, в которых \(n \ge 12\), не превосходит \(25\);
  • количество наборов тестовых данных, в которых \(n \ge 13\), не превосходит \(10\);
  • количество наборов тестовых данных, в которых \(n \ge 14\), не превосходит \(3\);
  • количество наборов тестовых данных, в которых \(n \ge 15\), не превосходит \(1\).
Выходные данные

На каждый набор тестовых данных выведите ответ следующим образом:

Сначала выведите \(k\) — минимальное количество операций, которые вы должны сделать. Затем выведите \(k\) строк, каждая из которых содержит два индекса \(i\) и \(j\) для соответствующей операции. Обратите внимание, что нумерация элементов меняется после удаления элемента из массива. Если существует несколько оптимальных последовательностей операций, выведите любую из них.

Примечание

В первом наборе тестовых данных \(a\) меняется следующим образом:

\([2, 1, 3, 5, 1, 2, 4, 5] \rightarrow [2, 1, 3, 5, 1, 4, 7] \rightarrow [1, 3, 5, 1, 6, 7] \rightarrow [2, 3, 5, 6, 7]\).

C. Чередующаяся подпоследовательность

дп жадные алгоритмы *1200

Напомним, что последовательность \(b\) является подпоследовательностью последовательности \(a\), если \(b\) может быть получена из \(a\) путем удаления нуля или более элементов без изменения порядка оставшихся элементов. Например, если \(a=[1, 2, 1, 3, 1, 2, 1]\), то возможные подпоследовательности: \([1, 1, 1, 1]\), \([3]\) и \([1, 2, 1, 3, 1, 2, 1]\), но не \([3, 2, 3]\) и \([1, 1, 1, 1, 2]\).

Вам задана последовательность \(a\), состоящая из \(n\) положительных и отрицательных элементов (в последовательности нет нулей).

Ваша задача выбрать максимальную по размеру (длине) чередующуюся подпоследовательность заданной последовательности (то есть знак каждого следующего элемента противоположен знаку текущего элемента, например, положительный-отрицательный-положительный и так далее или отрицательный-положительный-отрицательный и так далее). Из всех таких подпоследовательностей вам нужно выбрать ту, которая имеет максимальную сумму элементов.

Другими словами, если максимальная длина чередующейся подпоследовательности равна \(k\), то ваша задача — найти максимальную сумму элементов какой-то чередующейся подпоследовательности длины \(k\).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в \(a\). Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9, a_i \ne 0\)), где \(a_i\)\(i\)-й элемент в \(a\).

Гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — максимальную сумму максимальной по размеру (длине) чередующейся подпоследовательности \(a\).

Примечание

В первом наборе тестовых данных примера одним из возможных ответов является \([1, 2, \underline{3}, \underline{-1}, -2]\).

Во втором наборе тестовых данных примера одним из возможных ответов является \([-1, -2, \underline{-1}, -3]\).

В третьем наборе тестовых данных примера одним из возможных ответов является \([\underline{-2}, 8, 3, \underline{8}, \underline{-4}, -15, \underline{5}, \underline{-2}, -3, \underline{1}]\).

В четвертом наборе тестовых данных примера одним из возможных ответов является \([\underline{1}, \underline{-1000000000}, \underline{1}, \underline{-1000000000}, \underline{1}, \underline{-1000000000}]\).

C. Задача про кванторы

графы дп математика поиск в глубину и подобное *2600

Логические кванторы — это очень хороший инструмент для создания некоторых утверждений о множестве. В этой задаче мы будем рассматривать множество вещественных чисел. Множество вещественных чисел содержит ноль и отрицательные числа. Есть два вида кванторов: всеобщности (\(\forall\)) и существования (\(\exists\)). Вы можете прочитать больше про них здесь.

Квантор всеобщности используется, чтобы сказать, что утверждение выполнено для всех вещественных чисел. Например:

  • \(\forall x,x<100\) читается как: для всех вещественных чисел \(x\) число \(x\) меньше, чем \(100\). Это утверждение ложно.
  • \(\forall x,x>x-1\) читается как: для всех вещественных чисел \(x\) число \(x\) больше, чем \(x-1\). Это утверждение верно.

Квантор существования используется, чтобы сказать, что существует некоторое вещественное число, для которого утверждение выполнено. Например:

  • \(\exists x,x<100\) читается как: существует вещественное число \(x\) такое, что \(x\) меньше, чем \(100\). Это утверждение верно.
  • \(\exists x,x>x-1\) читается как: существует вещественное число \(x\) такое, что \(x\) больше, чем \(x-1\). Это утверждение верно.

Кроме того, эти кванторы могут быть вложенными. Например:

  • \(\forall x,\exists y,x<y\) читается так: для всех вещественных чисел \(x\) существует вещественное число \(y\) такое, что \(x\) меньше, чем \(y\). Это утверждение верно для всех \(x\), потому что существует \(y=x+1\).
  • \(\exists y,\forall x,x<y\) читается так: существует вещественное число \(y\) такое, что для всех вещественных чисел \(x\) число \(x\) меньше, чем \(y\). Это утверждение ложно, потому что оно утверждает, что существует максимальное вещественное число: число \(y\) больше, чем любое \(x\).

Обратите внимание, что порядок переменных и кванторов важен для значения и верности утверждения.

Всего есть \(n\) переменных \(x_1,x_2,\ldots,x_n\), и вам дана формула вида \(\) f(x_1,\dots,x_n):=(x_{j_1}<x_{k_1})\land (x_{j_2}<x_{k_2})\land \cdots\land (x_{j_m}<x_{k_m}), \(\)

где \(\land\) обозначает логическое И. Это означает, что \(f(x_1,\ldots, x_n)\) истинно, если каждое неравенство \(x_{j_i}<x_{k_i}\) выполнено. Иначе, если хотя бы одно неравенство не выполнено, то \(f(x_1,\ldots,x_n)\) ложно.

Ваша задача — выбрать значения каждого из кванторов \(Q_1,\ldots,Q_n\) либо квантором всеобщности (\(\forall\)), либо квантором существования (\(\exists\)) так, что утверждение \(\) Q_1 x_1, Q_2 x_2, \ldots, Q_n x_n, f(x_1,\ldots, x_n) \(\)

будет верно и количество кванторов всеобщности максимально возможное, или определить, что утверждение ложно для всех возможных выборов кванторов.

Обратите внимание, что порядок переменных, в котором они идут в утверждении фиксирован. Например, если \(f(x_1,x_2):=(x_1<x_2)\), то вам не разрешено сделать переменную \(x_2\) идущей первой, и получить утверждение \(\forall x_2,\exists x_1, x_1<x_2\). Если вы выберете \(Q_1=\exists\) и \(Q_2=\forall\) получившееся утверждение будет однозначно равно \(\exists x_1,\forall x_2,x_1<x_2\).

Входные данные

В первой строке находятся два целых числа \(n\) и \(m\) (\(2\le n\le 2\cdot 10^5\); \(1\le m\le 2\cdot 10^5\)) — количество переменных и неравенств в формуле, соответственно.

Следующие \(m\) строк описывают формулу. \(i\)-я из этих строк содержит два целых числа \(j_i\), \(k_i\) (\(1\le j_i,k_i\le n\), \(j_i\ne k_i\)).

Выходные данные

Если ни одной расстановки кванторов такой, что утверждение будет верно, не существует, выведите единственное целое число \(-1\).

Иначе на первой строке выведите максимальное возможное количество кванторов всеобщности.

На следующей строке выведите строку длины \(n\), в которой \(i\)-й символ это «A», если \(Q_i\) должен быть квантором всеобщности (\(\forall\)), или «E», если \(Q_i\) должен быть квантором существования (\(\exists\)). Все символы должны быть в верхнем регистре. Если существует несколько возможных решений, в которых количество кванторов всеобщности максимально возможное, выведите любое.

Примечание

В первом тесте утверждение \(\forall x_1, \exists x_2, x_1<x_2\) верно. Ответы «EA» и «AA» дают ложные утверждения. Ответ «EE» дает верное утверждение, но количество кванторов всеобщности будет меньше, чем в нашем ответе.

Для второго теста можно показать, что ни одной расстановки кванторов такой, что утверждение будет верно, не существует.

В третьем тесте утверждение \(\forall x_1, \forall x_2, \exists x_3, (x_1<x_3)\land (x_2<x_3)\) верно: мы можем выбрать \(x_3=\max\{x_1,x_2\}+1\).

B. Карточные пирамиды

Бинарный поиск дп математика Перебор *1100

Карточная пирамида высоты \(1\) может быть построена с помощью двух карт, приставленных друг к другу. Для \(h>1\) карточная пирамида высоты \(h\) может быть построена расположением карточной пирамиды высоты \(h-1\) на базе. База состоит из \(h\) пирамидок высоты \(1\), поставленных в ряд, и \(h-1\) карты, лежащей сверху на них. Например, карточные пирамиды с высотами \(1\), \(2\) и \(3\) выглядят следующим образом:

Изначально у вас есть \(n\) карт и вы строите как можно более высокую пирамиду из этих карт. Если остались лишние карты, вы снова строите как можно более высокую пирамиду из оставшихся карт. Вы продолжаете этот процесс до тих пор, пока не станет невозможно построить какую-нибудь пирамиду. Сколько карточных пирамид вы построите?

Входные данные

Каждый тест состоит из нескольких тестовых случаев. Первая строка содержит единственное целое число \(t\) (\(1\le t\le 1000\)) — количество тестовых случаев. Следующие \(t\) строк содержат описания тестовых случаев.

Единственная строка описания каждого тестового случая содержит единственное целое число \(n\) (\(1\le n\le 10^9\)) — количество карт.

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(10^9\).

Выходные данные

Для каждого тестового случая выведите единственное целое число — количество карточных пирамид, которое вы построите в конце процесса.

Примечание

В первом тестовом случае вы построите карточную пирамиду высоты \(1\) из \(2\)-x карт. Останется \(1\) карта, которой недостаточно, чтобы построить какую-нибудь пирамиду.

Во втором тестовом случае вы построите две пирамиды, каждая высоты \(2\), и в конце процесса не останется карт.

В третьем тестовом случае вы построите одну пирамиду высоты \(3\), и ни одной карты не останется.

В четвертом тестовом случае вы сначала построите одну пирамиду высоты \(3\), и \(9\) карт останется. Затем вы построите пирамиду высоты \(2\), и \(2\) карты останется. Наконец, вы построите последнюю пирамиду высоты \(1\), и не останется ни одной карты.

В пятом тестовом случае одной карты недостаточно, чтобы построить какую-нибудь пирамиду.

E. Фокусы

*особая задача графы дп *1700

Маша собирается принять участие в шоу талантов, проводимом университетом, в котором она учится. Она хочет поразить публику множеством разных фокусов!

Для одного из своих фокусов она использует \(n\) шариков, один из которых — особенный. Сначала Маша размещает шарики в ряд таким образом, чтобы особенный шарик находился на позиции \(k\) (позиции пронумерованы от \(1\) до \(n\) слева направо). После этого она выполняет \(m\) обменов: во время \(i\)-го обмена она выбирает шарик на позиции \(x_i\) и шарик на позиции \(y_i\) и меняет их местами.

Чтобы обмануть аудиторию, Маша иногда делает фальшивые действия — имитирует, что начинает обмен, но не выполняет его (но аудитории кажется, что он выполнен). Нет никаких ограничений на то, какие обмены Маша должна имитировать или должна действительно выполнить — например, она может имитировать все обмены или выполнить все из них.

Чтобы фокус работал идеально, особенный шарик должен оказаться в определенной позиции, но Маша еще не определилась, какая из позиций идеальна. Поскольку имитировать обмены сложно, для каждой позиции она хочет знать минимальное количество обменов, которое она должна сымитировать, чтобы особенный шарик оказался там.

К сожалению, Маша — волшебница, а не математик и не программист. Поэтому ей нужна ваша помощь!

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le m \le 2 \cdot 10^5\); \(1 \le k \le n\)) — количество шариков, количество обменов и начальное положение особенного шарика соответственно.

Далее следуют \(m\) строк, в которых \(i\)-я строка содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\)), обозначающие \(i\)-й обмен.

Выходные данные

Выведите \(n\) целых чисел. \(i\)-е число — минимальное количество обменов, которые Маша должна сымитировать, чтобы особенный шарик оказался в позиции \(i\) (или \(-1\), если Маша не может поместить туда особенный шарик).

I. Pac-Man 2.0

*особая задача дп *2900

Поликарп разрабатывает новую версию старой видеоигры «Pac-Man». Хотя ему действительно нравилось играть в оригинальную игру, некоторые ее аспекты ему не нравились, поэтому он решил немного изменить правила.

В версии Поликарпа вы играете за Пакмана, и вам нужно собирать точки, разбросанные по игровому миру, избегая при этом опасных призраков (никаких отличий от оригинала пока нет). Поликарпу не понравилось то, что в оригинале не было спасения от призраков, поэтому в его версии игровой мир разделен на \(n\) безопасных зон с \(m\) односторонними путями между ними. Также гарантируется, что Пакман может достичь любой безопасной зоны из любой другой. Поскольку безопасные зоны безопасны, призраки не могут атаковать Пакмана, пока он там, он находится в опасности только во время прохождения путей. Пакман начинает игру в безопасной зоне \(s\).

Все точки разбросаны по безопасным зонам; первоначально \(i\)-я безопасная зона содержит \(a_i\) точек (и если Пакман находится в безопасной зоне, он может свободно собирать все точки в ней). Точки исчезают после сбора, но после того, как собрана последняя точка в игровом мире, новые точки появляются в безопасных зонах в том же количестве, что и раньше (\(a_i\) новых точек появляется в \(i\)-й зоне). Точки могут быть восстановлены любое количество раз, так что игра по существу бесконечна.

Поликарп уже определил структуру игрового мира и количество точек в каждой безопасной зоне. Теперь он пытается выяснить, достаточно ли сложна игра. В игре есть \(q\) целей, цель \(i\) — собрать по крайней мере \(C_i\) точек с самого начала игры. Поликарп обозначает сложность \(i\)-й цели как минимальное количество раз, которое игрок должен пройти путь между безопасными зонами, чтобы собрать \(C_i\) точек (так как только прохождение пути ставит Пакмана в опасность). Если какой-то путь пройден несколько раз, пока Пакман собирает точки, то он включается в ответ столько же раз.

Помогите Поликарпу рассчитать сложность каждой цели!

Входные данные

Первая строка содержит четыре целых числа \(n\), \(m\), \(q\) и \(s\) (\(2 \le n \le 15\); \(n \le m \le n(n-1)\); \(1 \le q \le 5000\); \(1 \le s \le n\)) — количество безопасных зон, количество путей, количество целей и номер стартовой безопасной зоны соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — начальное количество точек в \(i\)-й безопасной зоне (и количество точек, которые появляются в \(i\)-й безопасной зоне, когда собрана последняя точка в игровом мире).

Далее следуют \(m\) строк, каждая из которых содержит два целых числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\); \(v_i \ne u_i\)), обозначающие односторонний путь от безопасной зоны \(v_i\) до безопасной зоны \(u_i\). Каждая упорядоченная пара \((v_i, u_i)\) появляется в этом разделе не более одного раза (нет нескольких путей от \(v_i\) до \(u_i\)), и с помощью этих путей можно достичь каждой безопасной зоны из любой другой безопасной зоны.

Последняя строка содержит \(q\) целых чисел \(C_1\), \(C_2\), ..., \(C_q\) (\(1 \le C_i \le 10^{15}\)), где \(C_i\) — минимальное количество точек, которые игрок должен собрать для достижения \(i\)-й цели.

Выходные данные

Для каждой цели \(i\) выведите одно целое число — ее сложность (минимальное количество раз, которое игрок должен пройти по некоторому пути, чтобы собрать хотя бы \(C_i\) точек).

Примечание

Рассмотрим первый пример из условия. Чтобы собрать \(5\) точек, игрок должен собрать \(3\) точки в безопасной зоне \(1\) (стартовая безопасная зона), перейти в зону \(3\), собрать \(2\) точки там.

Для того чтобы собрать \(8\) точек, игрок должен собрать \(3\) точки в безопасной зоне \(1\), перейти в зону \(2\), собрать \(1\) точку, перейти в зону \(1\) без получения точек, перейти в зону \(3\), собрать \(2\) точки. Теперь последние точки в мире собраны, так что они восстанавливаются. Игрок может собрать \(2\) точки в безопасной зоне \(3\) и теперь количество собранных точек составляет \(8\).

Рассмотрим второй пример из условия.

Для того чтобы собрать \(7\) точек игрок должен действовать следующим образом: \(2(+3) \rightarrow 3(+2) \rightarrow 4(+2)\). Таким образом будет собрано \(7\) точек.

Для того чтобы собрать \(14\) точек игрок должен действовать следующим образом: \(2(+3) \rightarrow 3(+2) \rightarrow 1(+1) \rightarrow 4(+2) \rightarrow 5(+1)\) восстановление точек \(5(+1) \rightarrow 4 (+2) \rightarrow 2(+3)\). Таким образом будет собрано \(15\) точек.

Для того чтобы собрать \(23\) точки игрок должен действовать следующим образом: \(2(+3) \rightarrow 3(+2) \rightarrow 1(+1) \rightarrow 4(+2) \rightarrow 5(+1)\) восстановление точек \(5(+1) \rightarrow 4(+2) \rightarrow 2(+3) \rightarrow 3(+2) \rightarrow 1(+1)\) восстановление точек \(1(+1) \rightarrow 4(+2) \rightarrow 2(+3)\). Таким образом будет собрано \(24\) точки.

E. Феникс и ягода

дп жадные алгоритмы математика Перебор *2400

Феникс собирает ягоды у себя на заднем дворе. Там растет \(n\) кустов, и на каждом кусте созрело \(a_i\) красных ягод и \(b_i\) синих ягод.

Каждая корзина вмещает \(k\) ягод. Но Феникс решил, что в каждой корзине могут лежать ягоды с одного куста, или же ягоды одного цвета (красные или синие). Другими словами все ягоды в одной корзине должны быть с одного куста и/или одного цвета.

Например, если у Феникса растет два куста с \(5\) красными и \(2\) синими ягодами на первом кусте и \(2\) красными и \(1\) синей на втором, то он сможет полностью заполнить \(2\) корзины объемом \(4\):

  • в первую корзину он положит \(3\) красные и \(1\) синюю ягоду с первого куста;
  • во вторую корзину — \(2\) оставшиеся красные ягоды с первого куста и \(2\) красные ягоды со второго.

Помогите Фениксу определить максимальное количество корзин, которые он сможет заполнить полностью!

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\( 1\le n, k \le 500\))  — количество кустов и вместимость корзин, соответственно.

В \(i\)-й из следующих \(n\) сток задано два целых числа \(a_i\) и \(b_i\) (\(0 \le a_i, b_i \le 10^9\))  — количество красных и синих ягод на \(i\)-м кусте, соответственно.

Выходные данные

Выведите единственное число  — максимальное количество корзин, которые Феникс сможет заполнить полностью.

Примечание

Первый пример описан выше.

Во втором примере, Феникс может полностью заполнить одну корзину, используя все ягоды с первого (и единственного) куста.

В третьем примере, Феникс не сможет полностью заполнить ни одной корзины, потому что на каждом кусте меньше \(5\) ягод, всего красных ягод менее \(5\) и всего синих ягод менее \(5\).

В четвертом примере, Феникс может положить все красные ягоды в корзины, оставив синюю ягоду нетронутой.

E. Слайм и шляпы

дп жадные алгоритмы Конструктив *3500

Слайм и Орак проводят пошаговую игру. В большой комнате на стульях сидят \(n\) человек и смотрят в сторону колонны, у каждого игрока есть номер: игрок \(1\) сидит перед колонной, игрок \(2\) сидит прямо за ним; игрок \(3\) сидит прямо за игроком номер \(2\), и так далее; игрок \(n\) сидит прямо за игроком \(n-1\). Каждый игрок носит шляпу, которая может быть белой или черной. Так как все игроки смотрят вперед, игрок \(i\) знает цвет шляпы игрока \(j\) если и только если \(i\) больше чем \(j\).

В начале каждого хода, Орак скажет, есть ли хотя бы один игрок в комнате, на котором надета черная шляпа.

После речи Орака, если игрок может однозначно определить цвет его шляпы, он положит его шляпу на стул, встанет, и покинет комнату. Все игроки умные, так что если возможно понять цвет шляпы, используя полученную информацию в этом и предыдущих раундах, они поймут.

На каждом ходу все игроки, которые поняли свой цвет, выйдут одновременно. Это означает, что если игрок понял цвет своей шляпы после ухода игроков на этом ходу, он сможет покинуть комнату только на следующем ходу.

Обратите внимание, что когда игрок выходит из комнаты, он оставлят свою шляпу на стуле, так что игроки перед ним не смогут узнать цвет его шляпы.

Таким образом, \(i\)-й игрок узнает, кто покинул комнату среди игроков \(1,2,\ldots,i-1\), и сколько игроков среди \(i+1,i+2,\ldots,n\) покинули комнату.

Слайм стоит за дверью. Он наблюдает за игроками и записывает номера игроков и время, в которое они покинули комнату. К сожалению, Слайм такой неряха, что он записал это только про некоторых игроков и записал он это в формате «игрок \(x\) покинул игру в \(y\)-м раунде».

Слайм попросил вас найти цвет шляпы каждого игрока. Если есть несколько возможных решений, вы можете вывести любое.

Входные данные

В первой строке записано одно целое число \(n\ (1\le n\le 200\,000)\).

Во второй строке записаны \(n\) целых чисел \(t_1,t_2,\dots,t_n\ (0\le t_i\le 10^{15})\). Если \(t_i=0\), то неизвестна никакая информация про игрока с номером \(i\); иначе, игрок \(i\) покинул игру на \(t_i\)-м раунде.

Хотя бы одно решение существует для данного ввода.

Выходные данные

Выведите одну бинарную строку из \(n\) символов. \(i\)-й символ должен быть равен '1' если игрок \(i\) носит черную шляпу, и должен быть равен '0' иначе. Если есть несколько решений, вы можете вывести любое.

Примечание

В первом примере в предложенном решении, все игроки носят белую шляпу. На первом ходу Орак скажет, что нет игроков с черной шляпой, так что все игроки поймут, что они носят белые шляпы, и покинут игру на первом ходу.

Во втором примере игрок \(5\) носит черную шляпу, а остальные игроки носят белые шляпы. Орак скажет, что существует игрок в черной шляпе, и игрок \(5\) знает, что все остальные игроки носят белые шляпы, следовательно он может понять, что он носит черную шляпу, и покинет игру в первом раунде, а остальные игроки покинут игру во втором раунде. Обратите внимание, что все игроки поняли цвет шляпы после того, как игрок \(5\) ушел, но они должны ждать следующего хода, чтобы уйти.

В третьем примере нет никакой информации об игре, так что любой ответ корректен.

F1. Слайм и последовательности (упрощенная версия)

бпф дп математика *3100

Обратите внимание что единственные различия между версиями это \(n\) и ограничения по времени. Вы можете взламывать, только если обе версии решены.

Слайм интересуется последовательностями. Он определил хорошие последовательности \(p\) длины \(n\) из натуральных чисел следующим образом:

  • Для каждого \(k>1\), которое встречается в \(p\), должна существовать хотя бы одна пара индексов \(i,j\), такая что \(1 \leq i < j \leq n\), \(p_i = k - 1\) и \(p_j = k\).

Для данного целого числа \(n\) множество хороших последовательностей длины \(n\) это \(s_n\). Для фиксированного целого числа \(k\) и последовательности \(p\), обозначим за \(f_p(k)\) количество раз, которое \(k\) встречается в \(p\). Для каждого \(k\) от \(1\) до \(n\), Слайм хочет знать следующее значение:

\(\)\left(\sum_{p\in s_n} f_p(k)\right)\ \textrm{mod}\ 998\,244\,353\(\)

Входные данные

В первой строке записано одно целое число \(n\ (1\le n\le 5000)\).

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из них должно быть равно \(\left(\sum_{p\in s_n} f_p(i)\right)\ \textrm{mod}\ 998\,244\,353\).

Примечание

В первом примере \(s=\{[1,1],[1,2]\}\).

Во втором примере \(s=\{[1,1,1],[1,1,2],[1,2,1],[1,2,2],[2,1,2],[1,2,3]\}\).

В третьем примере \(s=\{[1]\}\).

F2. Слайм и последовательности (усложненная версия)

бпф дп математика *3500

Обратите внимание что единственные различия между версиями это \(n\) и ограничения по времени. Вы можете взламывать, только если обе версии решены.

Слайм интересуется последовательностями. Он определил хорошие последовательности \(p\) длины \(n\) из натуральных чисел следующим образом:

  • Для каждого \(k>1\), которое встречается в \(p\), должна существовать хотя бы одна пара индексов \(i,j\), такая что \(1 \leq i < j \leq n\), \(p_i = k - 1\) и \(p_j = k\).

Для данного целого числа \(n\) множество хороших последовательностей длины \(n\) это \(s_n\). Для фиксированного целого числа \(k\) и последовательности \(p\), обозначим за \(f_p(k)\) количество раз, которое \(k\) встречается в \(p\). Для каждого \(k\) от \(1\) до \(n\), Слайм хочет знать следующее значение:

\(\)\left(\sum_{p\in s_n} f_p(k)\right)\ \textrm{mod}\ 998\,244\,353\(\)

Входные данные

В первой строке записано одно целое число \(n\ (1\le n\le 100\,000)\).

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из них должно быть равно \(\left(\sum_{p\in s_n} f_p(i)\right)\ \textrm{mod}\ 998\,244\,353\).

Примечание

В первом примере \(s=\{[1,1],[1,2]\}\).

Во втором примере \(s=\{[1,1,1],[1,1,2],[1,2,1],[1,2,2],[2,1,2],[1,2,3]\}\).

В третьем примере \(s=\{[1]\}\).

B. Орак и модели

дп математика теория чисел *1400

В магазине есть \(n\) моделей, пронумерованных от \(1\) до \(n\), размеры которых равны \(s_1, s_2, \ldots, s_n\).

Орак купит некоторые из этих моделей и упорядочит их по возрастанию номеров (индексов, а не размеров).

Орак считает, что полученная расстановка красивая, если для любых двух соседних моделей с номерами \(i_j\) и \(i_{j+1}\) (обратите внимание, что \(i_j < i_{j+1}\), так как Орак упорядочил их правильно), \(i_{j+1}\) делится на \(i_j\) и \(s_{i_j} < s_{i_{j+1}}\).

Например, для \(6\) моделей с размерами \(\{3, 6, 7, 7, 7, 7\}\), он может купить модели с индексами \(1\), \(2\), и \(6\), и полученная расстановка будет красивой. Обратите внимание, что расстановка из одной модели также считается красивой.

Орак хочет знать, какое наибольше число моделей он может купить, и он может задавать вам эти вопросы по несколько раз.

Входные данные

В первой строке записано одно целое число \(t\ (1 \le t\le 100)\): количество запросов.

Каждый запрос состоит из двух строк, в первой из которых записано одно целое число \(n\ (1\le n\le 100\,000)\): количество моделей в магазине, а во второй записаны \(n\) целых чисел \(s_1,\dots,s_n\ (1\le s_i\le 10^9)\): размеры моделей.

Гарантируется, что сумма величин \(n\) не превосходит \(100\,000\).

Выходные данные

Выведите \(t\) строк, в \(i\)-й из которых должно быть записано максимальное число моделей, которое Орак может купить для \(i\)-го запроса.

Примечание

Для первого запроса, например, Орак может купить модели с индексами \(2\) и \(4\), расстановка которых будет красивой так как \(4\) делится на \(2\) и \(6\) больше, чем \(3\). Рассмотрев остальные варианты, можно легко убедиться, что нет красивой расстановки с более, чем тремя моделями.

Во втором запросе Орак может купить модели с индексами \(1\), \(3\), и \(6\). Рассмотрев остальные варианты, можно легко убедиться, что нет красивой расстановки с более, чем тремя моделями.

В третьем примере не существует красивой расстановки с более, чем одной моделью.

E. К-периодичная гирлянда

дп жадные алгоритмы Перебор *1900

Вам задана гирлянда, состоящая из \(n\) ламп. Состояния ламп описываются строкой \(s\) длины \(n\). \(i\)-й символ строки \(s_i\) равен '0', если \(i\)-я лампа выключена, или '1', если \(i\)-я лампа включена. Вам также задано положительное целое число \(k\).

За один ход вы можете выбрать одну лампу и изменить ее состояние (то есть включить ее, если она выключена, и наоборот).

Гирлянда называется \(k\)-периодичной, если расстояние между каждой парой соседних включенных ламп равно в точности \(k\). Рассмотрим случай \(k=3\). Тогда гирлянды «00010010», «1001001», «00010» и «0» являются хорошими, а гирлянды «00101001», «1000001» и «01001100» не являются хорошими. Заметьте, что гирлянда не является цикличной, то есть первая включенная лампа не идет после последней включенной лампы и наоборот.

Ваша задача — найти минимальное количество ходов, необходимое для того, чтобы получить \(k\)-периодичную гирлянду из заданной.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 25~ 000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^6; 1 \le k \le n\)) — длину \(s\) и необходимый период. Вторая строка набора тестовых данных содержит строку \(s\), состоящую из \(n\) символов '0' и '1'.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превосходит \(10^6\) (\(\sum n \le 10^6\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ — минимальное количество ходов, необходимое для того, чтобы получить \(k\)-периодичную гирлянду из заданной.

F. Уменьшение высот

дп Перебор *2200

Вы играете в одну популярную sandbox-игру с трехмерным миром. Карта мира может быть представлена в виде матрицы размера \(n \times m\), где высота клетки \((i, j)\) равна \(a_{i, j}\).

Сейчас вы находитесь в клетке \((1, 1)\) и хотите попасть в клетку \((n, m)\). Вы можете перемещаться только вниз (из клетки \((i, j)\) в клетку \((i + 1, j)\)) или вправо (из клетки \((i, j)\) в клетку \((i, j + 1)\)). Также есть дополнительное ограничение: если высота текущей клетки равна \(x\), то вы можете переместиться только в клетку с высотой \(x+1\).

Перед первым перемещением вы можете выполнить несколько операций. В течение одной операции вы можете уменьшить высоту любой клетки на единицу. То есть вы выбираете какую-то клетку \((i, j)\) и присваиваете \(a_{i, j} := a_{i, j} - 1\). Заметьте, что вы можете делать высоты меньшими или равными нулю. Также заметьте, что вы можете уменьшать высоту клетки \((1, 1)\).

Ваша задача — найти минимальное количество операций, которое необходимо выполнить, чтобы получить хотя бы один подходящий путь из клетки \((1, 1)\) в клетку \((n, m)\). Гарантируется, что ответ существует.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — Количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100\)) — количество строк и количество столбцов в карте мира. Следующие \(n\) строк содержат по \(m\) целых чисел каждая, где \(j\)-е число в \(i\)-й строке равно \(a_{i, j}\) (\(1 \le a_{i, j} \le 10^{15}\)) — высоте клетки \((i, j)\).

Гарантируется, что сумма \(n\) (также как сумма \(m\)) по всем наборам тестовых данных не превосходит \(100\) (\(\sum n \le 100; \sum m \le 100\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ — минимальное количество операций, которое необходимо выполнить, чтобы получить хотя бы один подходящий путь из клетки \((1, 1)\) в клетку \((n, m)\). Гарантируется, что ответ существует.

B. Троичная строка

Бинарный поиск дп реализация *1200

Вам дана строка \(s\), каждый символ которой — 1, 2 или 3. Вы должны выбрать кратчайшую непрерывную подстроку \(s\), в которой каждый из трех символов встречается хотя бы один раз.

Непрерывная подстрока \(s\) — строка, которую можно получить из \(s\) удалением какого-то количества (возможно, ни одного) символов из начала строки \(s\) и какого-то количества (возможно, ни одного) символов из конца строки \(s\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 20000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки \(s\) (\(1 \le |s| \le 200000\)). Гарантируется, что каждый символ \(s\)1, 2 или 3.

Сумма длин всех строк не превосходит \(200000\).

Выходные данные

Для каждого набора тестовых данных выведите одно число — длину кратчайшей подстроки \(s\), содержащей символы всех трех типов. Если такой подстроки нет, выведите \(0\).

Примечание

Рассмотрим пример из условия:

В первом наборе входных данных можно использовать подстроку 123.

Во втором наборе входных данных можно использовать подстроку 213.

В третьем наборе входных данных можно использовать подстроку 1223.

В четвертом наборе входных данных можно использовать подстроку 3221.

В пятом наборе входных данных в \(s\) нету символа 3.

В шестом наборе входных данных в \(s\) нету символа 1.

В седьмом наборе входных данных можно использовать подстроку 3112.

E. Раскраска графа

графы дп поиск в глубину и подобное *2100

Вам задан неориентированный граф без петель и кратных ребер, состоящий из \(n\) вершин и \(m\) ребер. Также вам задано три числа \(n_1\), \(n_2\) и \(n_3\).

Определите, можно ли расставить в вершины графа цифры 1, 2 и 3 так, чтобы выполнялись следующие условия:

  1. В каждой вершине должно стоять ровно одно из чисел 1, 2, 3;
  2. Суммарно количество чисел 1 во всех вершинах должно равняться \(n_1\);
  3. Суммарно количество чисел 2 во всех вершинах должно равняться \(n_2\);
  4. Суммарно количество чисел 3 во всех вершинах должно равняться \(n_3\);
  5. Для каждого ребра \((u, v)\) должно быть верно \(|col_u - col_v| = 1\), где \(col_x\) — цвет вершины с индексом \(x\).

Если существует несколько раскрасок, удовлетворяющим все описанным выше условиям, разрешено найти любую из них.

Входные данные

В первой строке следуют два целых числа \(n\) и \(m\) (\(1 \le n \le 5000\); \(0 \le m \le 10^5\)) — количество вершин в графе и количество ребер в графе.

Во второй строке следуют три целых числа \(n_1\), \(n_2\) и \(n_3\) (\(0 \le n_1, n_2, n_3 \le n\)) — необходимое количество цифр 1, 2 и 3, соответственно. Гарантируется, что \(n_1 + n_2 + n_3 = n\).

В следующих \(m\) строках следует описание ребер: в \(i\)-й строке следуют два целых числа \(u_i\), \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)) — номера вершин, которые соединяет \(i\)-е ребро. Гарантируется, что граф не содержит петель и кратных ребер.

Выходные данные

Если существует раскраска, удовлетворяющая всем описанным условиям, выведите в первую строку «YES» (без кавычек). Во вторую строку выведите строку длины \(n\), состоящую только из цифр 1, 2 и 3, причем \(i\)-й символ этой строки должен быть равен цифре, которую нужно поставить в \(i\)-ю вершину.

Если подходящей раскраски не существует, выведите «NO» (без кавычек).

F. Призыв существ

дп жадные алгоритмы Конструктив Паросочетания Потоки сортировки *2500

Поликарп играет в компьютерную игру. В этой игре игроки призывают армии магических существ и сражаются с армиями существ других игроков.

Поликарп может призвать \(n\) разных существ, \(i\)-е существо изначально имеет силу \(a_i\); кроме того, когда Поликарп призывает его, оно увеличивает на \(b_i\) силу всех ранее призванных существ (исключая себя). Поликарп может призывать существ в любом порядке.

Однако под контролем Поликарпа может находиться не более \(k\) существ одновременно. Поэтому, помимо призыва существ, он может уничтожать ранее призванных существ. Каждое существо может быть призвано (а, значит, и уничтожено) не более одного раза.

Цель Поликарпа — собрать максимально сильную армию существ. Он хочет, чтобы после всех его действий суммарная сила всех призванных (но не уничтоженных) им существ была максимально возможной.

Помогите Поликарпу составить оптимальную последовательность действий, чтобы собрать максимально сильную армию!

Входные данные

В первой строке задано одно целое число \(T\) (\(1 \le T \le 75\)) — количество наборов тестовых данных.

Каждый набор тестовых данных начинается строкой, содержащей два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 75\)) — количество существ, доступных для призыва, и максимальное количество существ, которые могут одновременно быть под контролем Поликарпа, соответственно.

Затем следуют \(n\) строк, \(i\)-я из которых содержит \(2\) целых числа \(a_i\) и \(b_i\) (\(1 \le a_i \le 10^5\), \(0 \le b_i \le 10^5\)) — параметры \(i\)-го существа.

Выходные данные

Для каждого набора тестовых данных выведите оптимальную последовательность действий в следующем формате:

Сначала выведите \(m\) — количество действий, которые должен совершить Поликарп (\(0 \le m \le 2n\)). После этого выведите \(m\) целых чисел \(o_1\), \(o_2\), ..., \(o_m\), где \(o_i\) описывает \(i\)-е действие следующим образом: если \(i\)-е действие — это «призвать существо \(x\)», то \(o_i = x\), а если \(i\)-е действие — это «уничтожить существо \(x\)», то \(o_i = -x\). Каждое существо может быть призвано не более одного раза и не может быть уничтожено, если оно еще не призвано (или уже уничтожено). После каждого действия под контролем Поликарпа должно быть не более \(k\) существ.

Если оптимальных последовательностей действий несколько, выведите любую из них.

Примечание

Рассмотрим пример из условия.

В первом наборе тестовых данных можно сначала вызвать существо \(2\) с силой \(7\), затем призвать существо \(1\), которое увеличит силу предыдущего существа на \(3\), после этого уничтожить существо \(1\) и поставить существо \(5\). В итоге у Поликарпа будут два существа с силой \(10\).

Во втором наборе тестовых данных у Поликарпа не может быть более одного существа под контролем, поэтому достаточно выбрать самое сильное существо и призвать его.

В третьем наборе тестовых данных Поликарп может призвать всех существ, никого не уничтожая.

B. Юные следопыты

дп жадные алгоритмы сортировки *1200

Отряд юных следопытов отправился в учебную экспедицию навстречу своим первым приключениям. И возглавляет их старший следопыт Рассел. Вот герои зашли в лес, разбили лагерь и дальше решили разделиться на группы, чтобы исследовать как можно больше интересных мест. Рассел должен был выбрать состав групп, но столкнулся с одной проблемой...

Многие юные следопыты неопытны, и отправлять их маленькими группами — не всегда хорошая идея. Даже сам Рассел недавно стал старшим следопытом и нечасто бывал в экспедициях. Каждый следопыт характеризуется своей неопытностью — целым положительным числом \(e_i\). Рассел решил, что юный следопыт с неопытностью \(e\) может идти лишь в группе, количество следопытов в которой не меньше \(e\).

Теперь задача Рассела — определить, какое наибольшее число групп следопытов он сможет организовать. При этом может получиться, что некоторые следопыты не войдут в состав ни одной группы, это не страшно, ведь и в лагере для них найдется работа. Рассел очень переживает за успех экспедиции, и потому попросил вас помочь ему.

Входные данные

В первой строке записано число \(T\) (\(1 \leq T \leq 2 \cdot 10^5\)) — количество независимых тестовых случаев. В следующих \(2T\) строках следует описание тестовых случаев.

В первой строке описания каждого теста задано целое число юных следопытов \(N\) (\(1 \leq N \leq 2 \cdot 10^5\)).

В следующей строке записаны \(N\) целых чисел \(e_1, e_2, \ldots, e_N\) (\(1 \leq e_i \leq N\)), где \(e_i\) — неопытность \(i\)-го следопыта.

Гарантируется, что сумма \(N\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Выходные данные

Выведите \(T\) чисел, каждое на отдельной строке.

В \(i\)-й строке выведите наибольшее число групп, которое можно организовать в \(i\)-м тестовом случае.

Примечание

В первом примере можно сформировать три группы, в каждой из которых будет один следопыт. Это возможно, так как неопытность всех трех следопытов равна \(1\), что не меньше, чем размер их групп.

Во втором примере можно сформировать две группы. В первой группе окажутся следопыты с неопытностью \(1\), \(2\) и \(3\), а во второй группе — два следопыта с неопытностью \(2\).

Этот способ — не единственный возможный. Можно, например, сформировать одну группу из трех следопытов с неопытностью \(2\), а также еще одну группу, в которой будет всего один следопыт с неопытностью \(1\). При таком разбиении на группы следопыт с неопытностью \(3\) не войдет в состав ни одной группы.

B. Новая Театральная площадь

дп жадные алгоритмы Перебор реализация *1000

Возможно, вы помните Театральную площадь из задачи 1A. Сегодня ее покрытие наконец-то заменят.

Площадь все еще является прямоугольником \(n \times m\) метров. Однако, рисунок на ней будет более сложным в этот раз. Пусть \(a_{i,j}\) будет \(j\)-й ячейкой в \(i\)-м ряду покрытия плитками.

Вам задан рисунок покрытия:

  • если \(a_{i,j} = \) «*», то \(j\)-я ячейка в \(i\)-м ряду должна быть черной;
  • если \(a_{i,j} = \) «.», то \(j\)-я ячейка в \(i\)-м ряду должна быть белой.

Черные ячейки уже покрыты. Вам же необходимо покрыть белые ячейки. Существует две опции плиток:

  • \(1 \times 1\) плитки — каждая плитка стоит \(x\) бурлей и покрывает ровно \(1\) ячейку;
  • \(1 \times 2\) плитки — каждая плитка стоит \(y\) бурлей и покрывает ровно \(2\) соседние ячейки в одном ряду. Обратите внимание, что нельзя вращать эти плитки или резать их на плитки \(1 \times 1\).

Вам необходимо покрыть все белые ячейки, никакие две плитки не должны накладываться друг на друга и никакие черные ячейки не должны быть накрыты плитками.

Чему равна наименьшая суммарная цена плиток, которые могут покрыть все белые клетки?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Затем следует описание \(t\) наборов.

В первой строке каждого набора входных данных записаны четыре целых числа \(n\), \(m\), \(x\) и \(y\) (\(1 \le n \le 100\); \(1 \le m \le 1000\); \(1 \le x, y \le 1000\)) — размеры Театральной площади, цена плитки \(1 \times 1\) и цена плитки \(1 \times 2\).

В каждой из следующих \(n\) строк записаны по \(m\) символов. \(j\)-й символ в \(i\)-й строке — это \(a_{i,j}\). Если \(a_{i,j} = \) «*», то \(j\)-я ячейка в \(i\)-м ряду должна быть черной, а если \(a_{i,j} = \) «.», то \(j\)-я ячейка в \(i\)-м ряду должна быть белой.

Гарантируется, что сумма \(n \times m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наименьшая суммарная цена плиток, которые могут покрыть все белые клетки, в бурлях.

Примечание

В первом наборе входных данных необходимо использовать одну плитку \(1 \times 1\), несмотря на то, что плитка \(1 \times 2\) дешевле. Поэтому суммарная цена равна \(10\) бурлей.

Во втором наборе можно использовать либо две плитки \(1 \times 1\) и потратить \(20\) бурлей, либо одну плитку \(1 \times 2\) плитку и потратить \(1\) бурль. Второй вариант дешевле, поэтому ответ равен \(1\).

Третий набор показывает, что нельзя поворачивать плитки \(1 \times 2\). Приходится использовать две плитки \(1 \times 1\) с суммарной ценой \(20\).

В четвертом наборе самый дешевый способ — это использовать \(1 \times 1\) плитки повсюду. Итоговая цена — \(6 \cdot 3 = 18\).

D. Очередная очередная задача

дп реализация Структуры данных *2000

Алиса и Боб играют в очередную игру с карточками. На этот раз правила следующие. Перед ними в ряд лежат \(n\) карточек. У \(i\)-й карточки значение \(a_i\).

Сначала Алиса выбирает непустой последовательный отрезок карточек \([l; r]\) (\(l \le r\)). Затем Боб удаляет одну карточку \(j\) из этого отрезка \((l \le j \le r)\). Счет игры равен сумме значений оставшихся на отрезке карточек \((a_l + a_{l + 1} + \dots + a_{j - 1} + a_{j + 1} + \dots + a_{r - 1} + a_r)\). В частности, если Алиса выбрала отрезок с ровно одним элементом, то после того, как Боб удалит единственную карточку, счет будет равен \(0\).

Алиса хочет сделать счет как можно больше. Боб удаляет такую карточку, чтобы счет стал как можно меньше.

Какой отрезок должна выбрать Алиса, чтобы счет был максимально возможным? Выведите максимальный счет.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество карточек.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-30 \le a_i \le 30\)) — значения на карточках.

Выходные данные

Выведите одно целое число — итоговый счет игры.

Примечание

В первом примере Алиса выбирает отрезок \([1;5]\) — весь ряд карточек. Боб удаляет карточку \(3\) со значением \(10\) из этого отрезка. Поэтому итоговый счет равен \(5 + (-2) + (-1) + 4 = 6\).

Во втором примере Алиса выбирает отрезок \([1;4]\), и так как Боб удаляет либо карточку \(1\), либо \(3\), со значением \(5\), то ответ становится \(5 + 2 + 3 = 10\).

В третьем примере Алиса может выбрать любой из отрезков длины \(1\): \([1;1]\), \([2;2]\) или \([3;3]\). Боб удаляет единственную карточку, поэтому счет равен \(0\). Если Алиса выберет любой другой отрезок, то ответ будет меньше \(0\).

E. Полигон

графы дп кратчайшие пути реализация *1300

Полигон — это не только лучшая платформа для разработки задач, но и квадратная матрица со стороной \(n\), изначально состоящая из нулей.

На полигоне проводятся боевые учения. Поэтому над каждой клеткой в первой строке и слева от каждой клетки первого столбца находится пушка. Таким образом, всего есть \(2n\) пушек.

Изначальный полигон для \(n=4\).

Пушки стреляют единицами. В один момент времени стреляет не больше одной пушки. Когда единица вылетает из пушки, то она летит вперед, по направлению выстрела, до тех пор, пока не столкнется с границей полигона или другой единицей. После этого она занимает клетку, в которой находилась перед столкновением, и остается там. Изучите примеры для лучшего понимания.

Более формально:

  • если пушка, стоящая в строке \(i\) перед первым столбцом, стреляет единицей, то единица начинает свой полет из клетки (\(i, 1\)) и заканчивает в какой-то клетке (\(i, j\));
  • если пушка, стоящая в столбце \(j\) над первой строкой, стреляет единицей, то единица начинает свой полет из клетки (\(1, j\)) и заканчивает в какой-то клетке (\(i, j\)).

Например, рассмотрим следующую последовательность выстрелов:

1. Стреляет пушка в строке \(2\).                         2. Стреляет пушка в строке \(2\).                         3. Стреляет пушка в столбце \(3\).

У вас на столе лежит отчет с проведенных учений. Этот отчет является квадратной матрицей с длиной стороны \(n\), состоящей из нулей и единиц. Вам интересно, действительно ли произошли учения. Другими словами, существует ли такая последовательность выстрелов, что в конце получится заданная матрица?

Каждая пушка может сделать произвольное количество выстрелов. Перед началом учений полигон состоит из нулей.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки, в которой записано целое число \(n\) (\(1 \le n \le 50\)) — размер полигона.

Далее следуют \(n\) строк длины \(n\), состоящих из нулей и единиц — матрица полигона после проведения учений.

Суммарная площадь матриц во всех наборах тестовых данных в одном тесте не превосходит \(10^5\).

Выходные данные

Для каждого набора тестовых данных выведите:

  • YES, если существует последовательность выстрелов, приводящая к заданной матрице;
  • NO, если такой последовательности не существует.

Буквы в словах YES и NO можно выводить в любом регистре.

Примечание

Первый набор тестовых данных примера разобран в условии.

Ответ на второй набор NO, так как, вылетев из любой пушки, единица в клетке (\(1, 1\)) продолжила бы свой полет дальше.

F. Строка-шпион

битмаски дп Конструктив Перебор Строки хэши *1700

Вам даны \(n\) строк \(a_1, a_2, \ldots, a_n\), все они имеют одинаковую длину \(m\). Строки состоят из строчных букв латинского алфавита.

Найдите любую такую строку \(s\) длины \(m\), что каждая из заданных \(n\) строк отличается от \(s\) не более чем в одной позиции. Формально, для каждой заданной строки \(a_i\) должно существовать не более одной позиции \(j\), в которой \(a_i[j] \ne s[j]\).

Заметим, что искомая строка \(s\) может как совпадать с одной из заданных строк \(a_i\), так и отличаться от всех заданных строк.

Например, если вам даны строки abac и zbab, тогда ответом на задачу может быть строка abab, которая отличается от первой только последним символом, а от второй только первым.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных в тесте. Далее записаны \(t\) наборов тестовых данных.

Каждый набор начинается со строки, в которой записаны целые числа \(n\) (\(1 \le n \le 10\)) и \(m\) (\(1 \le m \le 10\)) — количество заданных строк и их длина.

Далее следуют \(n\) строк \(a_i\). Каждая имеет длину \(m\) и состоит из строчных латинских букв.

Выходные данные

Выведите \(t\) ответов на наборы тестовых данных. Каждый ответ (если он существует) — это строка длины \(m\), состоящая из строчных латинских букв. Если существует несколько ответов, то выведите любой из них. Если ответа не существует, выведите «-1» («минус один», без кавычек).

Примечание

Первый набор тестовых данных примера разобран в условии.

Во втором наборе ответа не существует.

E. Перестановка дерева

Деревья дп жадные алгоритмы поиск в глубину и подобное *2000

У Ashish есть дерево, состоящее из \(n\) вершин, пронумерованных от \(1\) до \(n\), с корнем в вершине \(1\). \(i\)-я вершина дерева имеет стоимость \(a_i\), и в ней записана бинарная цифра \(b_i\). Ashish хочет, чтобы в конце в \(i\)-й вершине была записана бинарная цифра \(c_i\).

Для этого, он может выполнить следующую операцию любое количество раз:

  • Выберите любые \(k\) вершин из поддерева любой вершины \(u\) и переставьте цифры в этих вершинах так, как пожелаете, за стоимость \(k \cdot a_u\). Здесь он может выбрать \(k\) в диапазоне от \(1\) до размера поддерева \(u\).

Он хочет выполнить операции так, чтобы у каждой вершины в итоге оказалась цифра, соответствующая желаемой цифре для этой вершины.

Помогите ему найти минимальную общую стоимость, за которую можно сделать так, чтобы после проведения всех операций для каждого \(u\) в вершине \(u\) была записана цифра \(c_u\), или определить, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(n\) \((1 \le n \le 2 \cdot 10^5)\), обозначающее количество вершин в дереве.

\(i\)-я из следующих \(n\) строк содержит 3 разделенных пробелом целых числа \(a_i\), \(b_i\), \(c_i\) \((1 \leq a_i \leq 10^9, 0 \leq b_i, c_i \leq 1)\) — стоимость \(i\)-й вершины, ее начальная цифра и желаемая цифра.

Каждая из следующих строк \(n - 1\) содержит два целых числа \(u\), \(v\) \((1 \leq u, v \leq n, \text{ } u \ne v)\), что означает, что между вершинами \(u\) и \(v\) в дереве есть ребро.

Выходные данные

Выведите минимальную общую стоимость, за которую можно сделать так, чтобы в каждой вершине была записана желаемая цифра для этой вершины, или \(-1\), если сделать это невозможно.

Примечание

Дерево, соответствующие примерам \(1\) и \(2\):

В примере \(1\) мы можем выбрать вершину \(1\) и \(k = 4\) за стоимость \(4 \times 1\) = \(4\) и выбрать вершины \({1, 2, 3, 5}\), переставить их цифры и получить желаемые цифры в каждой позиции.

В примере \(2\) мы можем выбрать вершину \(1\) и \(k = 2\) за стоимость \(10000 \times 2\), выбрать вершины \({1, 5}\), обменять их цифры, после чего аналогичным образом выбрать вершину \(2\) и \(k = 2\) за стоимость \(2000 \times 2\) и вершины \({2, 3}\), обменять их цифры, чтобы получить нужные цифры в каждой позиции.

В примере \(3\) невозможно получить нужные цифры, потому что среди начальных цифр нет цифры \(1\).

F. Вращение подстрок

дп Строки *2600

Вам даны две строки \(s\) и \(t\), каждая из которых имеет длину \(n\) и состоит из строчных букв латинского алфавита. Вы хотите сделать \(s\) равной \(t\).

Вы можете выполнить следующую операцию над \(s\) любое количество раз, чтобы достичь этого  —

       
  • Выберите любую подстроку \(s\) и поверните ее по часовой стрелке один раз, то есть, если выбранная подстрока равна \(s[l,l+1...r]\), то она становится равной \(s[r,l,l + 1 ... r - 1]\). Все остальные символы \(s\) остаются на своих местах.

    Например, при вращении подстроки \([2,4]\) строка «abcde» становится равной «adbce».

Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Найдите минимальное количество операций, необходимых для преобразования \(s\) в \(t\), или определите, что это невозможно.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) \((1\leq t \leq 2000)\) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((1\leq n \leq 2000)\) — длину строк.

Вторая и третья строки содержат строки \(s\) и \(t\) соответственно.

Сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество операций для преобразования \(s\) в \(t\). Если невозможно преобразовать \(s\) в \(t\), вместо этого выведите \(-1\).

Примечание

Для первого набора входных данных, поскольку \(s\) и \(t\) равны, вам не нужно применять какие-либо операции.

Для второго набора входных данных вам нужно применить только одну операцию ко всей строке ab, чтобы преобразовать ее в ba.

Для третьего набора входных данных вам нужно только применить одну операцию ко всей строке abc, чтобы преобразовать ее в cab.

Для четвертого набора входных данных вам нужно применить операцию дважды: сначала для всей строки abc, чтобы преобразовать ее в cab, а затем для подстроки длины \(2\), начинающейся со второго символа для преобразования ее в cba.

Для пятого набора входных данных вам нужно применить только одну операцию ко всей строке abab, чтобы преобразовать ее в baba.

Для шестого набора входных данных превратить строку \(s\) в строку \(t\) не является возможным.

E. Два массива

Бинарный поиск дп Комбинаторика Конструктив Перебор *2100

Вам даны два массива \(a_1, a_2, \dots , a_n\) и \(b_1, b_2, \dots , b_m\). Массив \(b\) отсортирован в порядке возрастания (\(b_i < b_{i + 1}\) верно для любого \(i\) от \(1\) до \(m - 1\)).

Вам нужно разбить массив \(a\) на \(m\) непрерывных подмассивов так, чтобы для всех \(i\) от \(1\) до \(m\) минимум в \(i\)-м подмассиве был равен \(b_i\). Обратите внимание, что каждый элемент должен принадлежать ровно одному подмассиву, и они формируются следующим образом: первые несколько элементов массива \(a\) принадлежат первому подмассиву, следующие несколько элементов массива \(a\) принадлежат второму подмассиву, и так далее.

Например, если \(a = [12, 10, 20, 20, 25, 30]\), а \(b = [10, 20, 30]\), то существует два подходящих разбиения массива \(a\):

  1. \([12, 10, 20], [20, 25], [30]\);
  2. \([12, 10], [20, 20, 25], [30]\).

Вам нужно посчитать количество хороших разбиений массива \(a\). Так как это значение может быть слишком велико — выведите его по модулю 998244353.

Входные данные

Первая строка содержит два числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длины массивов \(a\) и \(b\) соответственно.

Вторая строка содержит \(n\) чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le 10^9\)) — массив \(a\).

Третья строка содержит \(m\) чисел \(b_1, b_2, \dots , b_m\) (\(1 \le b_i \le 10^9; b_i < b_{i+1}\)) — массив \(b\).

Выходные данные

В единственной строке выведите число — количество хороших разбиений массива \(a\) по модулю 998244353.

F. Прогулка по графу

Бинарный поиск геометрия графы дп *2700

Задан простой взвешенный связный неориентированный граф, состоящий из \(n\) вершин и \(m\) ребер.

Путем длины \(k\) в графе назовем последовательность из \(k+1\) вершины \(v_1, v_2, \dots, v_{k+1}\) такую, что для каждого \(i\) \((1 \le i \le k)\) ребро \((v_i, v_{i+1})\) присутствует в графе. У пути из вершины \(v\) вершина \(v_1=v\). Обратите внимание, что вершины и ребра могут входить в путь по несколько раз.

Вес пути — это сумма весов ребер в нем.

Для каждого \(i\) от \(1\) до \(q\) рассмотрим путь из вершины \(1\) длины \(i\) максимального веса. Чему равна сумма весов этих \(q\) путей?

Ответ может быть довольно большим, поэтому выведите его по модулю \(10^9+7\).

Входные данные

В первой строке записаны три целых числа \(n\), \(m\), \(q\) (\(2 \le n \le 2000\); \(n - 1 \le m \le 2000\); \(m \le q \le 10^9\)) — количество вершин в графе, количество ребер в графе и количество длин, которые надо учесть в ответе.

В каждой из следующих \(m\) строк задано описание ребра: три целых числа \(v\), \(u\), \(w\) (\(1 \le v, u \le n\); \(1 \le w \le 10^6\)) — две вершины \(v\) и \(u\) соединены неориентированным ребром веса \(w\). Граф не содержит петель и кратных ребер. Гарантируется, что данные ребра задают связный граф.

Выходные данные

Выведите одно целое число — сумма весов путей максимального веса из вершины \(1\) длин \(1, 2, \dots, q\) по модулю \(10^9+7\).

Примечание

Граф из первого примера:

Некоторые максимальные пути:

  • длина \(1\): ребра \((1, 7)\) — вес \(3\);
  • длина \(2\): ребра \((1, 2), (2, 3)\) — вес \(1+10=11\);
  • длина \(3\): ребра \((1, 5), (5, 6), (6, 4)\) — вес \(2+7+15=24\);
  • длина \(4\): ребра \((1, 5), (5, 6), (6, 4), (6, 4)\) — вес \(2+7+15+15=39\);
  • \(\dots\)

Поэтому ответ — это сумма \(25\) слагаемых: \(3+11+24+39+\dots\)

Во втором примере веса у путей максимального веса равны \(4\), \(8\), \(12\), \(16\) and \(20\).

G. Построй строку

дп Строки Структуры данных *2700

Определим функцию \(f(s)\), которая принимает строку \(s\), состоящую из строчных латинских букв и точек, и возвращает строку, состоящую из строчных латинских букв следующим образом:

  1. пусть \(r\) пустая строка;
  2. будем обрабатывать символы \(s\) слева направо. Для каждого символа \(c\) выполним следующее: если \(c\) является строчной латинской буквой, то добавим \(c\) в конец строки \(r\); в противном случае удалим последний символ из \(r\) (если \(r\) пустая — функция аварийно завершает работу);
  3. вернуть \(r\) как результат функции.

Вам заданы две строки \(s\) и \(t\). Вы должны удалить минимально возможное количество символов из \(s\), чтобы \(f(s) = t\) (и функция не завершалась аварийно). Обратите внимание, что вам не разрешается вставлять новые символы в \(s\) или менять порядок существующих.

Входные данные

Входные данные состоят из двух строк: первая содержит \(s\) — строку, состоящую из строчных латинских букв и точек, вторая содержит \(t\) — строку, состоящую из строчных латинских букв (\(1 \le |t| \le |s| \le 10000\)).

Дополнительное ограничение на входные данные: можно удалить некоторое количество символов из \(s\) так, чтобы \(f(s) = t\).

Выходные данные

Выведите одно целое число — минимально возможное количество символов, которое необходимо удалить из \(s\), чтобы \(f(s)\) не завершалась аварийно и вернула \(t\) в качестве результата выполнения.

E. Сборка ожерелья

графы дп жадные алгоритмы Перебор поиск в глубину и подобное теория чисел *1900

В магазине продаются \(n\) бусинок. Цвет каждой бусинки описывается строчной буквой латинского алфавита («a»–«z»). Вы хотите купить какие-то бусинки, чтобы собрать из них ожерелье.

Ожерелье — набор бусинок, соединенных по кругу.

Например, если в магазине продаются бусинки «a», «b», «c», «a», «c», «c», то вы можете собрать следующие ожерелья (это не все возможные варианты):

А следующие ожерелья нельзя собрать из бусинок, которые продаются в магазине:

Первое ожерелье собрать не получится, потому что в нем есть три бусинки «a» (из двух доступных). Второе ожерелье собрать не получится, потому что в нем есть бусинка «d», которой нет в магазине.

Назовем ожерелье \(k\)-красивым, если при его повороте по часовой стрелке на \(k\) бусинок ожерелье остается неизменным. Например, вот последовательность из трех поворотов некоторого ожерелья.

Так как после трех поворотов по часовой стрелке ожерелье не изменилось, то оно является \(3\)-красивым. Как можно заметить, это ожерелье также является \(6\)-красивым, \(9\)-красивым и так далее, но не является \(1\)-красивым или \(2\)-красивым.

В частности, ожерелье длины \(1\) является \(k\)-красивым для любого целого \(k\). Ожерелье, которое состоит из бусинок одинакового цвета, тоже является красивым для любого \(k\).

Вам даны числа \(n\) и \(k\), а также строка \(s\), содержащая \(n\) строчных букв латинского алфавита — каждая буква задает бусинку в магазине. Вы можете купить любое подмножество бусинок и соединить их в произвольном порядке. Найдите максимальную длину \(k\)-красивого ожерелья, которое вы можете собрать.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 2000\)).

Вторая строка каждого набора содержит строку \(s\), содержащую \(n\) строчных букв латинского алфавита — набор бусинок в магазине.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных в тесте не превосходит \(2000\).

Выходные данные

Выведите \(t\) ответов на наборы тестовых данных. Каждый ответ является целым положительным числом — максимальной длиной \(k\)-красивого ожерелья, которое вы можете собрать.

Примечание

Первый набор тестовых данных разобран в условии.

Во втором наборе тестовых данных \(6\)-красивое ожерелье можно собрать из всех букв.

В третьем наборе тестовых данных \(1000\)-красивое ожерельем можно собрать, например, из бусинок «abzyo».

F1. Летающая сортировка (простая версия)

дп жадные алгоритмы *2100

Это простая версия задачи. В этой версии все числа в заданном массиве различны и ограничения на \(n\) меньше, чем в сложной версии задачи.

Вам дан массив \(a\) из \(n\) целых чисел (в массиве нет одинаковых элементов). Вы можете производить над элементами массива следующие операции:

  1. выбрать любой индекс \(i\) (\(1 \le i \le n\)) и переместить элемент \(a[i]\) в начало массива;
  2. выбрать любой индекс \(i\) (\(1 \le i \le n\)) и переместить элемент \(a[i]\) в конец массива.

Например, если \(n = 5\), \(a = [4, 7, 2, 3, 9]\), то можно применить следующую последовательность операций:

  • после применения операции первого типа ко второму элементу массив \(a\) станет равным \([7, 4, 2, 3, 9]\);
  • после применения операции второго типа ко второму элементу массив \(a\) станет равным \([7, 2, 3, 9, 4]\).

Вы можете проводить операции любого типа произвольное количество раз в любом порядке.

Найдите минимальное суммарное количество операций первого и второго типа, которые сделают массив \(a\) отсортированным по неубыванию. Иными словами, сколько минимум операций надо применить, чтобы массив удовлетворял неравенствам \(a[1] \le a[2] \le \ldots \le a[n]\)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки, в которой записано целое число \(n\) (\(1 \le n \le 3000\)) — размер массива \(a\).

Далее следуют \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — массив, который требуется отсортировать заданными операциями. Все числа в заданном массиве различны.

Сумма \(n\) по всем наборам тестовых данных в одном тесте не превосходит \(3000\).

Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное суммарное количество операций первого и второго типа, которые сделают массив отсортированным по неубыванию.

Примечание

В первом тестовом наборе нужно переместить сначала тройку, а потом двойку в начало массива. Следовательно, искомая последовательность операций может иметь вид: \([4, 7, 2, 3, 9] \rightarrow [3, 4, 7, 2, 9] \rightarrow [2, 3, 4, 7, 9]\).

Во втором тестовом наборе нужно переместить единицу в начало массива, а восьмерку — в конец. Искомая последовательность операций имеет вид: \([3, 5, 8, 1, 7] \rightarrow [1, 3, 5, 8, 7] \rightarrow [1, 3, 5, 7, 8]\).

В третьем тестовом наборе массив уже отсортирован.

F2. Летающая сортировка (сложная версия)

Бинарный поиск дп жадные алгоритмы сортировки Структуры данных *2400

Это сложная версия задачи. В этой версии в заданном массиве могут встречаться одинаковые числа и ограничения на \(n\) больше, чем в простой версии задачи.

Вам дан массив \(a\) из \(n\) целых чисел (в массиве могут быть одинаковые элементы). Вы можете производить над элементами массива следующие операции:

  1. выбрать любой индекс \(i\) (\(1 \le i \le n\)) и переместить элемент \(a[i]\) в начало массива;
  2. выбрать любой индекс \(i\) (\(1 \le i \le n\)) и переместить элемент \(a[i]\) в конец массива.

Например, если \(n = 5\), \(a = [4, 7, 2, 2, 9]\), то можно применить следующую последовательность операций:

  • После применения операции первого типа ко второму элементу массив \(a\) станет равным \([7, 4, 2, 2, 9]\);
  • После применения операции второго типа ко второму элементу массив \(a\) станет равным \([7, 2, 2, 9, 4]\).

Вы можете проводить операции любого типа произвольное количество раз в любом порядке.

Найдите минимальное суммарное количество операций первого и второго типа, которые сделают массив \(a\) отсортированным по неубыванию. Иными словами, сколько минимум операций надо применить, чтобы массив удовлетворял неравенствам \(a[1] \le a[2] \le \ldots \le a[n]\)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки, в которой записано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива \(a\).

Далее следуют \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — массив, который требуется отсортировать заданными операциями. (В массиве могут быть одинаковые элементы).

Сумма \(n\) по всем наборам тестовых данных в одном тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное суммарное количество операций первого и второго типа, которые сделают массив отсортированным по неубыванию.

Примечание

В первом тестовом наборе нужно переместить две двойки в начало массива. Следовательно, искомая последовательность операций может иметь вид: \([4, 7, 2, 2, 9] \rightarrow [2, 4, 7, 2, 9] \rightarrow [2, 2, 4, 7, 9]\).

Во втором тестовом наборе нужно переместить единицу в начало массива, а восьмерку — в конец. Искомая последовательность операций имеет вид: \([3, 5, 8, 1, 7] \rightarrow [1, 3, 5, 8, 7] \rightarrow [1, 3, 5, 7, 8]\).

В третьем тестовом наборе массив уже отсортирован.

H1. Пропускная способность платы (простая версия)

дп жадные алгоритмы Потоки *3300

Это более простая версия задачи H без запросов на изменение.

Лестер и Делберт работают в компании-производителе электроники. Сейчас они трудятся над микроплатой, которая должен соединять две независимые части большого суперкомпьютера.

Плата строится на основе макета в виде сетки. В макете \(n\) рядов и \(m\) столбцов, и на каждом пересечении ряда и столбца находится контакт. Также, на каждой из сторон макета расположены порты, которые можно подсоединять к ближайшему контакту. На левой и правой стороне находится по \(n\) портов, а на верхней и нижней — по \(m\) портов. Каждый из портов снаружи соединён с одной из частей суперкомпьютера, и раскрашен в красный либо синий цвет.

Порты можно соединять проводами внутри платы. Однако, есть несколько требований:

  • Каждый провод должен соединять красный и синий порт, и каждый порт может быть соединён не более чем одним проводом.
  • Каждый участок провода должен быть горизонтальным либо вертикальным, и повороты возможно только в одном из контактов.
  • Чтобы избежать интерференции, провода не должны иметь общих частей ненулевой длины (однако, они могут проходить через общие контакты). Кроме того, провод не может покрывать один участок ненулевой длины дважды.

Пропускной способностью платы называется наибольшее количество соединений между красными и синими портами, которого можно достичь, соблюдая условия выше. Например, плата, изображенная выше, имеет пропускную способность \(7\), и один из способов построить семь соединений изображён ниже.

До этого места условия обеих версий задачи совпадают. Различия начинаются ниже.

Помогите Лестеру и Делберту найти пропускную способность платы с данной конфигурацией.

Входные данные

В первой строке записано три целых числа \(n, m, q\) (\(1 \leq n, m \leq 10^5\), \(\pmb{q = 0}\)). \(n\) и \(m\) задают количество рядов и столбцов в макете соответственно. В этой версии \(q\) всегда равно нулю и присутствует только для совместимости со сложной версией.

Следующие четыре строки описывают исходные цвета портов. Каждый символ в этих строках равен R или B в зависимости от цвета соответствующего порта. Первые две из этих строк содержат по \(n\) символов и описывают сверху вниз порты на левой и правой стороне соответственно. Следующие две строки содержат по \(m\) символов и описывают слева направо порты на верхней и нижней стороне соответственно.

Выходные данные

Выведите одно число — пропускную споособность заданной платы.

D. СоздатеЛи

графы Деревья дп жадные алгоритмы математика *1900

Ли потратил так много времени на создание хорошей div.2 D задачи, чтобы сбалансировать недавний контест, но задача продолжает ощущаться неподходящей. Ли придумывал ее так мучительно долго, что заработал фобию div.2 D задач. И теперь он прячется в кустах...

Назовем Корневым Сухим Кустом (КСК) уровня \(n\) корневое дерево, построенное согласно правилам ниже.

Корневой Сухой Куст уровня \(1\) — это одна вершина. Для построения КСК уровня \(i\), сначала построим КСК уровня \(i-1\) и далее для каждой вершины \(u\):

  • если у \(u\) нет детей, то подвесим к ней одного сына;
  • если у \(u\) есть один сын, то подвесим к ней еще двух детей;
  • если у \(u\) есть более одного сына, то пропустим ее.
Корневые Сухие Кусты уровня \(1\), \(2\) и \(3\).

Назовем лапой корневое дерево из четырех вершин: одна корневая вершина (также называется центром) и три ребенка. Оно напоминает лапу:

Центром лапы является вершина с номером \(1\).

У Ли есть Корневой Сухой Куст уровня \(n\). Первоначально все вершины КСК зеленого цвета.

За один шаг, он может выбрать лапу в КСК и, если все вершины в ней зеленые и все вершины лапы являются детьми ее центра, покрасить вершины лапы в в желтый.

Ли хочет узнать максимальное количество желтых вершин, которое он сможет получить. Так как ответ может быть очень большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке задано одно число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В следующих \(t\) строках заданы сами наборы — по одному в строке.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^6\)) — уровень КСК Ли.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальное количество желтых вершин, которые может получить Ли, по модулю \(10^9 + 7\).

Примечание

Несложно заметить, что ответ для КСК уровня \(1\) или \(2\) равен \(0\).

Ответ для КСК уровня \(3\) равен \(4\), так как есть только одна лапа, которую можно выбрать: \(\{1, 2, 3, 4\}\).

Ответ для КСК уровня \(4\) равен \(4\), так как мы можем выбрать либо одну лапу \(\{1, 3, 2, 4\}\) или одну лапу \(\{2, 7, 5, 6\}\). Других лап в КСК уровня \(4\) нет (например, мы не можем выбрать \(\{2, 1, 7, 6\}\), так как \(1\) не является ребенком вершины-центра \(2\)).

Корневой Сухой Куст уровня 4.

F. ПобедитеЛи

дп игры поиск в глубину и подобное *2700

Ли предпочитает завершать свои истории стильно, но не в этот раз. Благо, Белый Медведь успел придти к нему на помощь. В благодарность, Ли решил показать Белому его новую игру под названием «Critic»...

Данная игра — один на один. Она состоит из \(t\) раундов, каждый раунд определяется двумя целыми числами \(s_i\) и \(e_i\) (которые определены заранее и известны перед началом игры, \(s_i\) и \(e_i\) могут отличаться от раунда к раунду). В начале соответствующего раунда число \(s_i\) написано на доске.

Игроки ходят по очереди. Каждый игрок стирает число на доске (назовем его \(a\)) и выбирает, что написать: \(2 \cdot a\) или \(a + 1\). Тот, кто напишет на доске число строго больше чем \(e_i\), проигрывает.

Сейчас Ли хочет сыграть в «Critic» против Белого, и для каждого раунда он уже выбрал соответствующие \(s_i\) и \(e_i\). Ли начинает первый раунд, и проигравший текущего раунда будет начинать в следующем раунде.

Победитель последнего раунда считается победителем всей игры, а проигравший, соответственно, проигравшим всей игры.

Определите, может ли Ли победить независимо от действий Белого. Также, определите, может ли он проиграть независимо от действий Белого.

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество раундов в игре.

В следующих \(t\) строках заданы по два целых числа \(s_i\) и \(e_i\) (\(1 \le s_i \le e_i \le 10^{18}\)) — информация про \(i\)-й раунд.

Раунды играются в том порядке, как они заданы во входных данных, \(s_i\) и \(e_i\) для всех раундов известны всем до начала игры.

Выходные данные

Выведите два числа.

Первым числом выведите 1, если Ли может победить независимо от действий Белого, иначе выведите 0.

Вторым числом выведите 1, если Ли может проиграть независимо от действий Белого, иначе выведите 0.

Примечание

Напоминаем, проигрывает тот, кто напишет число строго больше чем \(e_i\).

D. Палиндромы

дп Строки *1900

Пятница — любимый день недели Поликарпа. Не потому, что за пятницей идут выходные, а потому что в пятницу по расписанию 2 урока информатики, 2 математики и 2 литературы. Поликарп, конечно, подготовился ко всем урокам, чего не скажешь о его хорошем друге Иннокентие. Иннокентий не успел подготовиться к уроку литературы, поскольку весь вечер четверга провел за игрой в любимую игру Fur2. Чтобы не получить двойку Иннокентий решил выполнить домашнее задание по литературе и прочитать книгу «Буря и затишье» во время уроков информатики и математики (с этими предметами у Иннокентия никогда не было проблем). Увидев это, учитель информатики Валерий Петрович решил дать Иннокентию задание (чтобы тот не скучал и не занимался посторонними вещами).

Валерий Петрович сказал, что палиндромом называется строка, одинаково читающаяся как слева направо, так и справа налево. А конкатенацией строк a, b называется строка ab, получающаяся последовательным приписыванием строки b к строке a. Это все Иннокентий, конечно, знал, но задание было намного сложнее, чем он мог себе представить. Валерий Петрович попросил изменить в книге «Буря и затишье» наименьшее число символов, чтобы текст книги оказался конкатенацией не более k палиндромов. С такой задачей Иннокентий не в силах справиться, поэтому попросил вас помочь ему.

Входные данные

В первой строке входных данных задана непустая строка s — текст книги «Буря и затишье» (без пробелов). Длина строки s не превосходит 500 символов. Строка s состоит из строчных и заглавных латинских букв. Во второй строке находится одно число k (1 ≤ k ≤ |s|, где |s| обозначает длину строки s).

Выходные данные

В первой строке выведите наименьшее число изменений, которые придётся сделать Иннокентию. Во второй строке выведите строку, состоящую из не более чем k палиндромов. Каждый палиндром должен быть непустым и состоять из строчных и заглавных латинских букв. Для разделения палиндромов используйте знак «+» (ASCII-код 43). Если существует несколько решений выведите любое.

Регистр букв имеет значения, то есть большая буква считается не эквивалентной соответствующей маленькой букве.

D. Чет-нечет подпоследовательность

Бинарный поиск дп жадные алгоритмы реализация снм *2000

У Ashish есть массив \(a\) размера \(n\).

Подпоследовательность массива \(a\) определяется, как последовательность, которая может быть получена из \(a\) с помощью удаления некоторых элементов (возможно нуля) без изменения порядка оставшихся элементов.

Рассмотрим подпоследовательность \(s\) массива \(a\). Он определяет цену подпоследовательности \(s\) как минимум между:

  • Максимумом по всем числам, стоящим на нечетных позициях в \(s\).
  • Максимумом по всем числам, стоящим на четных позициях в \(s\).

Обратите внимание, что индекс числа определяется, как его индекс в \(s\), независимо от его индекса в \(a\). Все позиции нумеруются с \(1\). Другими словами, цена \(s\) равна \(min(max(s_1, s_3, s_5, \ldots), max(s_2, s_4, s_6, \ldots))\).

Например, цена последовательности \(\{7, 5, 6\}\) равна \(min( max(7, 6), max(5) ) = min(7, 5) = 5\).

Помогите ему найти минимальную цену какой-то подпоследовательности размера \(k\).

Входные данные

В первой строке находится два целых числа \(n\) и \(k\) (\(2 \leq k \leq n \leq 2 \cdot 10^5\))  — размер массива \(a\) и размер подпоследовательности.

В следующей строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\))  — элементы массива \(a\).

Выходные данные

Выведите единственное целое число  — минимальную цену подпоследовательности размера \(k\).

Примечание

В первом тесте, рассмотрим подпоследовательность \(s\) = \(\{1, 3\}\). Здесь цена подпоследовательности равна \(min(max(1), max(3)) = 1\).

Во втором тесте, рассмотрим подпоследовательность \(s\) = \(\{1, 2, 4\}\). Здесь цена подпоследовательности равна \(min(max(1, 4), max(2)) = 2\).

В четвертом тесте, рассмотрим подпоследовательность \(s\) = \(\{3, 50, 2, 4\}\). Здесь цена подпоследовательности равна \(min(max(3, 2), max(50, 4)) = 3\).

E2. Астеризм (сложная версия)

Бинарный поиск дп Комбинаторика математика сортировки теория чисел *2300

Это сложная версия задачи. Различие между версиями заключается в ограничениях на \(n\) и \(a_i\). Вы можете делать взломы, только если обе версии этой задачи сданы.

Сначала Aoi придумал следующую идею для задачи по программированию:

Yuzu девочка, которая коллекционирует конфеты. Изначально, у нее есть \(x\) конфет. Также есть \(n\) врагов, пронумерованных целыми числами от \(1\) до \(n\). Враг \(i\) имеет \(a_i\) конфет.

Yuzu хочет получить перестановку \(P\). Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\), расположенных в некотором порядке. Например, \(\{2,3,1,5,4\}\) это перестановка, а \(\{1,2,2\}\) это не перестановка (число \(2\) встречается в массиве дважды) и \(\{1,3,4\}\) тоже не является перестановкой (потому что \(n=3\), но в массиве есть число \(4\)).

После этого, она проведет \(n\) дуэлей с врагами по следующим правилам:

  • Если Yuzu сейчас имеет не меньше конфет, чем враг \(P_i\), она побеждает в дуэли и получает \(1\) конфету. Иначе, она проигрывает дуэль и ничего не получает.
  • Конфета, которую получает Yuzu в случае победы, будет использоваться в следующих дуэлях.

Yuzu хочет победить во всех дуэлях. Сколько существует возможных перестановок \(P\), для которых это произойдет?

Эта задача была простой и неинтересной для Akari, друга Aoi. И Akari придумал следующую задачу, на основе описанной идеи:

Давайте определим \(f(x)\) как количество возможных перестановок для целого числа \(x\).

Вам дано число \(n\), массив \(a\) и простое число \(p \le n\). Назовем целое положительное число \(x\) хорошим, если значение \(f(x)\) не делится на \(p\). Найдите все хорошие числа \(x\).

Решите задачу, предложенную Akari.

Входные данные

В первой строке находится два целых числа \(n\), \(p\) \((2 \le p \le n \le 10^5)\). Гарантируется, что число \(p\) является простым (оно имеет ровно два делителя \(1\) и \(p\)).

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \le a_i \le 10^9)\).

Выходные данные

В первой строке выведите количество хороших чисел \(x\).

Во второй строке выведите все хорошие числа \(x\) в возрастающем порядке.

Гарантируется, что количество хороших чисел \(x\) не превосходит \(10^5\).

Примечание

В первом тесте \(p=2\).

  • Если \(x \le 2\) тогда нет ни одной перестановки, подходящей для Yuzu. Поэтому \(f(x)=0\) для \(x \le 2\). Заметим, что \(0\) делится на \(2\), поэтому ни одно число \(x \leq 2\) не хорошее.
  • Если \(x = 3\), то \(\{1,2,3\}\) единственная подходящая для Yuzu перестановка. Тогда, \(f(3)=1\), а значит число \(3\) хорошее.
  • Если \(x = 4\), то \(\{1,2,3\} , \{1,3,2\} , \{2,1,3\} , \{2,3,1\}\) это все перестановки, подходящие для Yuzu. Тогда, \(f(4)=4\), значит число \(4\) не хорошее.
  • Если \(x \ge 5\) , все \(6\) перестановок подходят Yuzu. Тогда, \(f(x)=6\) для всех \(x \ge 5\). Значит ни одно число \(x \ge 5\) не хорошее.

Значит единственное хорошее число это \(3\).

В третьем тесте для всех целых положительных \(x\) значение \(f(x)\) делится на \(p = 3\).

D. Омкар и круг

дп жадные алгоритмы игры Перебор *2100

Дэнни, местный математик-маньяк, очарован кругами, самым последним творением Омкара. Помогите ему решить эту задачу о круге!

Вам даны \(n\) неотрицательных целых чисел \(a_1, a_2, \dots, a_n\), расположенных по кругу, где \(n\) гарантированно будет нечетным (т.е. \(n-1\) делится на \(2\)). Формально для всех \(i\) таких, что \(2 \leq i \leq n\), элементы \(a_{i - 1}\) и \(a_i\) считаются соседними, а \(a_n\) и \(a_1\) также рассматриваются как соседние. За одну операцию вы выбираете число в круге, заменяете его суммой двух соседних элементов, а затем удаляете два соседних элемента из круга. Это повторяется до тех пор, пока в круге не останется только одно число, которое мы называем круговым значением.

Помогите Дэнни найти максимально возможное круговое значение после некоторой последовательности операций.

Входные данные

Первая строка содержит одно нечетное целое число \(n\) (\(1 \leq n < 2 \cdot 10^5\), \(n\) нечетно)  — начальный размер круга.

Вторая строка содержит \(n\) целых чисел \(a_{1},a_{2},\dots,a_{n}\) (\(0 \leq a_{i} \leq 10^9\))  — начальные числа в круге.

Выходные данные

Выведите максимально возможное круговое значение после применения некоторой последовательности операций к данному кругу.

Примечание

Для первого примера круговое значение \(17\) получается так:

Выберите число с индексом \(3\). Сумма соседних элементов равна \(17\). Удалите \(7\) и \(10\) из круга и замените \(2\) на \(17\).

Обратите внимание, что ответ может выйти за пределы \(32\)-разрядного целого числа.

E. Омкар и последний этаж

дп жадные алгоритмы *2900

Омкар строит дом. Он хочет решить, как составить план пола на последнем этаже.

Пол Омкара изначально выглядит как \(n\) строк по \(m\) нолей. (\(1 \le n,m \le 100\)). Каждая строка разделена на отрезки, причем каждый \(0\) в строке находится ровно в \(1\) отрезке. Для каждого отрезка для каждой строки Омкар может заменить ровно один из \(0\), содержащихся в этом отрезке, на \(1\). Омкар определяет качество пола как сумму квадратов сумм значений в каждом столбце, т.е. если сумма значений в \(i\)-м столбце равна \(q_i\), то качество пола равно \(\sum_{i = 1}^m q_i^2\).

Помогите Омкару найти максимальное качество, которое может иметь пол.

Входные данные

Первая строка содержит два целых числа, \(n\) и \(m\) (\(1 \le n,m \le 100\)), которые являются количеством строк и количеством столбцов соответственно.

Затем вы получите описание отрезков в каждой строке. Для каждой строки \(i\) от \(1\) до \(n\): Первая строка содержит одно целое число \(k_i\) (\(1 \le k_i \le m\))  — которое является количеством отрезков в строке \(i\). \(j\)-я из следующих \(k_i\) строк содержит два целых числа \(l_{i,j}\) и \(r_{i,j}\), которые являются левой и правой границей (обе включительно), соответственно, \(j\)-го отрезка \(i\)-й строки. Гарантируется, что \(l_{i,1} = 1\), \(l_{i,j} \leq r_{i,j}\) для всех \(1 \le j \le k_i\), \(r_{i,j-1} + 1 = l_{i,j}\) для всех \(2 \le j \le k_i\), и \(r_{i,k_i} = m\).

Выходные данные

Выведите одно целое число, которое является максимально возможным качеством пола.

Примечание

Данный пример соответствует следующей диаграмме. Ячейки в одном ряду с одинаковым номером являются частью одного и того же отрезка.

Наиболее оптимальным планом является:

Сумма \(1\)-го столбца равна \(4\), сумма \(2\)-го столбца равна \(2\), сумма \(3\)-го и \(4\)-го столбцов равна \(0\), а сумма \(5\)-го столбца равна \(4\).

Качество этого плана этажа составляет \(4^2 + 2^2 + 0^2 + 0^2 + 4^2 = 36\). Можно показать, что нет плана пола с более высоким качеством.

D. Максимальная сумма на четных позициях

дп жадные алгоритмы разделяй и властвуй реализация *1600

Вам задан массив \(a\), состоящий из \(n\) целых чисел. Индексы элементов массива начинаются с нуля (то есть первый элемент — это \(a_0\), второй — \(a_1\), и так далее).

Вы можете развернуть не более одного подмассива (последовательного отрезка) этого массива. Напомним, что подмассив \(a\) с границами \(l\) и \(r\) равен \(a[l; r] = a_l, a_{l + 1}, \dots, a_{r}\).

Ваша задача — развернуть такой подмассив, чтобы сумма элементов на четных позицияx получившегося массива была максимально возможной (то есть сумма элементов \(a_0, a_2, \dots, a_{2k}\) для целого числа \(k = \lfloor\frac{n-1}{2}\rfloor\) должна быть максимально возможной).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину \(a\). Вторая строка набора содержит \(n\) целых чисел \(a_0, a_1, \dots, a_{n-1}\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — это \(i\)-й элемент \(a\).

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на отдельной строке — максимально возможная сумма элементов на четных позициях после разворота не более одного подмассива (последовательного отрезка) \(a\).

E. Сумма цифр

дп жадные алгоритмы Конструктив Перебор *2200

Пусть \(f(x)\) — сумма цифр числа \(x\).

Найдите минимальное неотрицательное целое \(x\), для которого \(f(x) + f(x + 1) + \dots + f(x + k) = n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 150\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух чисел \(n\) и \(k\) (\(1 \le n \le 150\), \(0 \le k \le 9\)).

Выходные данные

Для каждого набора тестовых данных выведите одно число без ведущих нулей. Если такого \(x\), что \(f(x) + f(x + 1) + \dots + f(x + k) = n\), не существует, выведите \(-1\); иначе выведите минимальное \(x\), соответствующее этому условию.

C. Выбор цветов для букета

Бинарный поиск дп жадные алгоритмы Перебор поиск в глубину и подобное сортировки Структуры данных *2000

Володя хочет красиво поздравить свою жену с годовщиной их свадьбы и собирается подарить ей букет из ровно \(n\) цветов.

Придя в цветочный магазин, Володя обнаружил, что букет можно составлять из цветов \(m\) различных видов, причём количество цветов каждого вида не ограничено. Володя знает, что от первого цветка \(i\)-го вида в букете его супруга становится счастливее на \(a_i\), а от каждого следующего цветка такого вида она становится счастливее на \(b_i\). То есть, если в букете \(x_i > 0\) цветов вида \(i\), то за цветы этого вида жена Володи становится счастливее на \(a_i + (x_i - 1) \cdot b_i\) (а в случае, если цветов типа \(i\) в букете не будет, счастье жены Володи из-за цветов этого типа не изменится).

Как любой любящий муж, Володя хочет как можно сильнее порадовать свою супругу. Поэтому ему хочется знать, на какую максимальную величину может увеличиться её счастье от букета из \(n\) цветов, набранного из доступных в магазине цветов.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Затем следует описание \(t\) наборов входных данных, каждый из которых задан следующим образом.

В первой строке набора записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 10^9\), \(1 \le m \le 100\,000\)) — требуемое количество цветов в букете и количество доступных видов цветов.

Каждая из следующих \(m\) строк описывает вид цветов и содержит два целых числа \(a_i\) и \(b_i\) (\(0 \le a_i, b_i \le 10^9\)) — увеличение счастья от первого цветка \(i\)-го вида и увеличение счастья от каждого последующего цветка этого вида.

Наборы разделены одной пустой строкой.

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(100\,000\).

Выходные данные

Для каждого набора входных данных в единственной строке выведите одно число — максимальное увеличение счастья, которое может получить жена Володи от букета из \(n\) цветов.

Примечание

В первом примере если взять 1 цветок первого типа и 3 цветка второго типа, то итоговое увеличение счастья от букета будет равно \(5 + (1 + 2 \cdot 4) = 14\).

В втором примере если взять 2 цветка первого типа, 2 цветка второго типа и 1 цветок третьего типа, то итоговое увеличение счастья от букета будет равно \((5 + 1 \cdot 2) + (4 + 1 \cdot 2) + 3 = 16\).

E. Перевернутые родословные

Деревья дп Конструктив математика разделяй и властвуй *2800

Учёный Иван Иванович изучает перевёрнутые родословные. Перевёрнутая родословная представляет собой набор людей, про каждого из которых известны либо оба его родителя, либо не известен ни один родитель. Кроме того, известно, что у всех людей из родословной есть ровно один ребёнок, кроме одного человека, у которого детей вовсе нет. Поэтому, если пронумеровать людей целыми числами от \(1\) до \(n\), то можно обозначить за \(s_i\) номер ребёнка человека с номером \(i\) и сказать, что \(s_i = 0\) в случае, если у человека с номером \(i\) детей нет.

Назовём человека \(a\) предком человека \(b\), если либо \(a = b\), либо если у \(a\) есть ребёнок, который является предком человека \(b\). Это значит, что человек \(a\) является предком для \(a\), \(s_a\), \(s_{s_a}\) и так далее.

Будем считать, что произошёл перекос родословной с участием некоторого человека, если известны оба его родителя и количество известных предков одного из его родителей хотя бы вдвое больше, чем количество известных предков второго родителя.

Иван Иванович посчитал количество перекосов родословной и получил число \(k\), но, конечно же, он делал это вручную и мог ошибиться. Помогите проверить Ивану Ивановичу его вычисления: скажите, существует ли родословная из \(n\) людей с \(k\) перекосами, и если существует, то приведите пример подобной родословной.

Входные данные

В единственной строке задано два целых числа \(n\) и \(k\) (\(1 \leq n \leq 100\,000\), \(0 \leq k \leq n\)) — количество людей в родословной и количество перекосов в ней.

Выходные данные

В первой строке выведите «YES» (без кавычек), если существует родословная с \(n\) людьми и \(k\) перекосами, и «NO» (без кавычек) в противном случае.

Если требуемая родословная существует, то во второй строке выведите \(n\) целых чисел \(s_1, s_2, \ldots, s_n\) (\(0 \leq s_i \leq n\)), задающих номера детей людей в родословной. Если искомых родословных несколько, выведите любую.

Примечание

В первом примере подойдет единственная родословная, которую можно составить из трёх человек (человек и два его родителя).

Во втором примере подойдет следующая родословная:

В человеке номер один происходит перекос, так как у одного его родителя один предок, а у второго — три.

D. World of Darkraft

дп игры *2500

Недавно Рома стал счастливым обладателем новой игры World of Darkraft. Эта игра сочетает элементы практически всех известных жанров, и на одном из поздних этапов игры Рома столкнулся с трудностями игры-головоломки.

В этой части Рома сражается с хитрым вражеским магом. Сражение происходит на прямоугольном клетчатом поле n × m. В каждой клетке находится один из магических символов: L, R или X. Изначально все клетки поля «активны».

Игроки, Рома и вражеский маг, ходят по очереди. Рома делает первый ход. На очередном ходу игрок выбирает одну из активных клеток, и после этого в зависимости от изображенного в ней символа происходит одно из следующих действий:

  • L — из клетки влево вниз и вправо вверх по диагоналям исходят магические волны. Все клетки, оказавшиеся на пути волн (в том числе и сама выбранная клетка), становятся неактивными. Волны продолжаются до ближайшей неактивной клетки либо до границы поля, если неактивных клеток на пути нет.
  • R — магические волны исходят влево вверх и вправо вниз.
  • X — магические волны исходят во всех четырех диагональных направлениях.

Если очередной игрок не может сделать ход (то есть все клетки неактивны), он проигрывает.

Рома третий день пытается одолеть компьютерного противника, но все время оказывается проигравшим. Он просит Вас помочь ему и определить, может ли он гарантированно обыграть соперника, или же для этого придется взломать игру.

Входные данные

В первой строке находятся два целых числа, разделенных пробелом — n и m (1 ≤ n, m ≤ 20).

В следующих n строках по m символов находится описание игрового поля: j-ый символ i-ой строки равен магическому символу соответствующей клетки поля.

Выходные данные

В первой строке выведите «WIN», если Рома может победить, или «LOSE», если при оптимальной игре соперника победа невозможна.

Примечание

В первом тесте каждый ход делает неактивной одну из диагоналей квадрата, значит, после двух ходов Рома гарантированно проиграет.

Во втором тесте есть три варианта хода: «закрыть» главную диагональ либо одну из оставшихся клеток. Значит, после трех ходов игра закончится, и Рома выиграет.

E. Адские ограничения

дп Перебор *2900

Катя совсем недавно начала придумывать задачи по программированию и делать свои контесты. Что ей не нравится — так это скучные и простые ограничения. «N не больше тысячи» и «сумма ai не больше миллиона» наскучили Кате, и она решила придумать что-нибудь посложнее.

В последней задаче на строки, придуманной Катей, входные данные — одна строка из маленьких латинских букв. Чтобы сделать условие подлиннее и вселить ужас в людей, решающих контест, Катя придумала следующий набор из k однотипных ограничений (символы в ограничениях могут повторяться, а некоторые ограничения могут и противоречить друг другу):

  • Количество символов c1 в строке не меньше l1 и не больше r1.
  • ...
  • Количество символов ci в строке не меньше li и не больше ri.
  • ...
  • Количество символов ck в строке не меньше lk и не больше rk.

Однако, решив, что и это слишком просто и наглядно, Катя дописала следующее условие: из вышеуказанного списка строка удовлетворяет не менее, чем L, и не более, чем R ограничениям.

Составлять сложные и подлые тесты Катя не любит, поэтому она просто взяла большую строку s и хочет добавить в тесты все ее подстроки, которые удовлетворяют ограничениям. Однако, запутавшись в собственных условиях, Катя попросила Вас посчитать, сколько подстрок строки s удовлетворяет этим условиям (каждое вхождение подстроки считается отдельно).

Входные данные

В первой строке записана непустая строка s, состоящая из маленьких латинских букв. Длина строки s не превышает 105.

Во второй строке записаны три целых числа, разделенных пробелами — k, L и R (0 ≤ L ≤ R ≤ k ≤ 500).

В следующих k строках в формате «ci li ri» записаны ограничения, придуманные Катей. Все буквы ci — маленькие латинские буквы, li и ri — целые числа (0 ≤ li ≤ ri ≤ |s|, где |s| — длина строки s). Буквы ci не обязательно различны.

Выходные данные

Выведите одно число — количество подстрок, удовлетворяющих ограничениям.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать поток cout или спецификатор %I64d.

Примечание

В первом тесте требуется посчитать количество строк, не содержащих символов «e» и «o». Вот все такие строки (в порядке вхождения в исходную строку слева направо): «c», «d», «f», «r», «rc», «c», «s».

Во втором тесте нельзя добиться того, чтобы из двух одинаковых ограничений выполнялось ровно одно, поэтому ответ — 0.

C. Собери команды

дп жадные алгоритмы Перебор реализация сортировки *1400

У вас есть \(n\) программистов, которых вы хотите распределить по командам. Навык \(i\)-го программиста равен \(a_i\). Вы хотите собрать из них максимальное количество команд. Для команд есть одно ограничение: количество программистов в команде, умноженное на минимальный навык среди всех программистов этой команды, должно быть как минимум \(x\).

Каждый программист может находиться максимум в одной команде. Некоторые программисты могут остаться без команды.

Посчитайте максимальное количество команд, которое вы можете собрать.

Входные данные

Первая строка содержит одно число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два числа \(n\) и \(x\) (\(1 \le n \le 10^5; 1 \le x \le 10^9\)) — количество программистов и ограничение на навык команды соответственно.

Вторая строка каждого набора входных данных содержит \(n\) чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно навыку \(i\)-го программиста.

Сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите одно число — максимальное количество команд, которое вы можете собрать.

F. Странное сложение

дп матрицы Структуры данных *2600

Пусть \(a\) и \(b\) будут некоторыми неотрицательными целыми числами. Определим странное сложение \(a\) и \(b\) следующим образом:

  1. запишем числа одно под другим и выровняем их по младшему разряду;
  2. сложим числа поразрядно и запишем полученные суммы одну за другой.

Будем считать, что у обоих чисел бесконечное число лидирующих нулей.

Например, взглянем на странное сложение чисел \(3248\) и \(908\):

Вам задана строка \(c\), состоящая из \(n\) цифр от \(0\) до \(9\). Также заданы \(m\) запросов обновления следующего вида:

  • \(x~d\) — заменить цифру на \(x\)-й позиции \(c\) на цифру \(d\).

Обратите внимание, что \(c\) может иметь лидирующие нули в любой момент времени.

После каждого обновления выведите количество пар чисел \((a, b)\) таких, что \(a\) и \(b\) оба являются неотрицательными целыми числами и результат странного сложения \(a\) и \(b\) равен \(c\).

Обратите внимание, что количество пар может быть довольно велико, поэтому требуется вывести его по модулю \(998244353\).

Входные данные

В первой строке записано два целых числа \(n\) и \(m\) (\(1 \le n, m \le 5 \cdot 10^5\)) — длина числа \(c\) и количество запросов обновления.

Во второй строке задана строка \(c\), состоящая из ровно \(n\) цифр от \(0\) до \(9\).

В каждой из следующих \(m\) строк записаны по два целых числа \(x\) и \(d\) (\(1 \le x \le n\), \(0 \le d \le 9\)) — описания запросов обновления.

Выходные данные

Выведите \(m\) целых чисел — \(i\)-е значение должно быть равно количеству пар чисел \((a, b)\) таких, что \(a\) и \(b\) оба являются неотрицательными целыми числами и результат странного сложения \(a\) и \(b\) равен \(c\) после применения \(i\) запросов обновления.

Обратите внимание, что количество пар может быть довольно велико, поэтому требуется вывести его по модулю \(998244353\).

Примечание

После первого запроса \(c\) равно \(14\). Пары, которые складываются в \(14\): \((0, 14)\), \((1, 13)\), \((2, 12)\), \((3, 11)\), \((4, 10)\), \((5, 9)\), \((6, 8)\), \((7, 7)\), \((8, 6)\), \((9, 5)\), \((10, 4)\), \((11, 3)\), \((12, 2)\), \((13, 1)\), \((14, 0)\).

После второго запроса \(c\) равно \(11\).

После третьего запроса \(c\) равно \(01\).

B. Разъединение

дп *1800

Пусть \(a\) и \(b\) это два массива, имеющих длины \(n\) и \(m\), соответственно, такие что ни один элемент первого массива не равен ни одному элементу второго массива. Мы можем определить новый массив \(\mathrm{merge}(a,b)\) длины \(n+m\) по следующему рекурсивному правилу:

  • Если один из массивов пустой, результат равен другому массиву. То есть, \(\mathrm{merge}(\emptyset,b)=b\) и \(\mathrm{merge}(a,\emptyset)=a\). Отметим, что \(\mathrm{merge}(\emptyset,\emptyset)=\emptyset\).
  • Если оба массива непустые и \(a_1<b_1\), тогда \(\mathrm{merge}(a,b)=[a_1]+\mathrm{merge}([a_2,\ldots,a_n],b)\). То есть мы удаляем первый элемент \(a_1\) из \(a\), объединяем новые массивы, затем добавляем \(a_1\) в начало результата.
  • Если оба массива непустые и \(a_1>b_1\), тогда \(\mathrm{merge}(a,b)=[b_1]+\mathrm{merge}(a,[b_2,\ldots,b_m])\). То есть мы удаляем первый элемент \(b_1\) из \(b\), объединяем новые массивы, затем добавляем \(b_1\) в начало результата.

Этот алгоритм имеет замечательное свойство: если \(a\) и \(b\) были отсортированы, тогда \(\mathrm{merge}(a,b)\) тоже будет отсортированным. Например, этот алгоритм используется для сортировки слиянием. Для этой задачи, тем не менее, мы рассматриваем этот алгоритм для неотсортированных массивов тоже. Например, если \(a=[3,1]\) и \(b=[2,4]\), тогда \(\mathrm{merge}(a,b)=[2,3,1,4]\).

Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в некотором порядке. Например, \([2,3,1,5,4]\) это перестановка, но \([1,2,2]\) это не перестановка (\(2\) встречается дважды в массиве) и \([1,3,4]\) это тоже не перестановка (\(n=3\), но число \(4\) встречается в массиве).

У вас есть перестановка \(p\) длины \(2n\). Определите, существуют ли два массива \(a\) и \(b\), каждый из которых имеет длину \(n\), оба массива не имеют общих элементов и выполнено, что \(p=\mathrm{merge}(a,b)\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 1000\))  — количество наборов входных данных. Следующие \(2t\) строк содержат описания наборов входных данных.

В первой строке каждого набора входных данных находится единственное целое число \(n\) (\(1\le n\le 2000\)).

Во второй строке каждого набора входных данных находится \(2n\) целых чисел \(p_1,\ldots,p_{2n}\) (\(1\le p_i\le 2n\)). Гарантируется, что \(p\) является перестановкой.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существуют массивы \(a\), \(b\), каждый длины \(n\), которые не имеют общих элементов, такие что \(p=\mathrm{merge}(a,b)\). Иначе выведите «NO».

Примечание

В первом наборе входных данных \([2,3,1,4]=\mathrm{merge}([3,1],[2,4])\).

Во втором наборе входных данных можно показать, что \([3,1,2,4]\) не является результатом функции merge для двух массивов длины \(2\).

В третьем наборе входных данных \([3,2,6,1,5,7,8,4]=\mathrm{merge}([3,2,8,4],[6,1,5,7])\).

В четвертом наборе входных данных \([1,2,3,4,5,6]=\mathrm{merge}([1,3,6],[2,4,5])\).

D. Величественная коричневая древесная змея

Деревья дп жадные алгоритмы поиск в глубину и подобное *3000

Существует неориентированное дерево, состоящее из \(n\) вершин, соединенных \(n-1\) двусторонним ребром. Также есть змея, находящаяся внутри этого дерева. Ее голова находится в вершине \(a\) и ее хвост находится в вершине \(b\). Тело змеи занимает все вершины на простом пути между вершинами \(a\) и \(b\).

Змея хочет узнать, может ли она развернуться, то есть переместить свою голову в вершину, где начинался хвост и переместить свой хвост в вершину, где начиналась голова. К сожалению, движения змеи ограничены структурой дерева.

За одну операцию змея может переместить свою голову в соседнюю вершину, которая не занята змеей в текущий момент. Когда это происходит, хвост змеи перемещается на одну вершину ближе к голове, то есть длина змеи не изменяется. Аналогично, змея может переместить свой хвост в соседнюю вершину, которая не занята змеей в текущий момент. Когда это происходит, голова змеи перемещается на одну вершину ближе к хвосту.

Будем обозначать позицию змеи, как \((h,t)\), где \(h\)  — это номер вершины дерева, в которой находится голова и \(t\)  — номер вершины дерева, где находится хвост. Змея сможет развернуться с помощью последовательности операций \((4,7)\to (5,1)\to (4,2)\to (1, 3)\to (7,2)\to (8,1)\to (7,4)\).

Определите, сможет ли змея развернуться с помощью некоторой последовательности операций.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 100\))  — количество наборов входных данных. Следующие строки содержат описания наборов входных данных.

В первой строке каждого набора входных данных находится три целых числа \(n,a,b\) (\(2\le n\le 10^5,1\le a,b\le n,a\ne b\)).

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i,v_i\) (\(1\le u_i,v_i\le n,u_i\ne v_i\)), обозначающих ребро между вершинами \(u_i\) и \(v_i\). Гарантируется, что данные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если змея может развернуть себя и «NO», иначе.

Примечание

Первый набор входных данных изображен на картинке в тексте условия задачи.

Во втором наборе входных данных дерево имеет форму пути. Можно показать, что змея не сможет развернуться.

В третьем наборе входных данных, можно показать, что змея не сможет развернуться.

В четвертом наборе входных данных пример последовательности операций:

\((15,12)\to (16,11)\to (15,13)\to (10,14)\to (8,13)\to (4,11)\to (1,10)\)

\(\to (2,8)\to (3,4)\to (2,5)\to (1,6)\to (4,7)\to (8,6)\to (10,5)\)

\(\to (11,4)\to (13,8)\to (14,10)\to (13,15)\to (11,16)\to (12,15)\).

B. Последовательный ним

дп игры *1100

Есть \(n\) кучек камней, \(i\)-я из них содержит \(a_i\) камней. Два игрока играют в игру, поочередно забирая камни из кучек.

За один ход игрок может забрать целое положительное количество камней из первой непустой кучки (кучки с минимальным индексом, которая содержит хотя бы один камень). Первый игрок, который не может сделать ход (потому что все кучки пустые) проигрывает игру. Определите победителя игры при условии, что оба игрока играют оптимально.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 1000\))  — количество наборов входных данных. Следующие \(2t\) строк содержат описания наборов входных данных.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) (\(1\le n\le 10^5\))  — количество кучек.

Во второй строке каждого набора входных данных содержится \(n\) целых чисел \(a_1,\ldots,a_n\) (\(1\le a_i\le 10^9\))  — \(a_i\) равно количеству камней в \(i\)-й кучке.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если игрок, делающий первый ход победит, выведите «First». Иначе выведите «Second».

Примечание

В первом наборе входных данных первый игрок выиграет игру. Его выигрышная стратегия:

  1. Первый игрок должен забирать камни из первой кучки. Он возьмет \(1\) камень. Количества камней в кучках будут \([1, 5, 4]\).
  2. Второй игрок должен забирать камни из первой кучки. Он возьмет \(1\) камень, потому что он не может взять никакое другое количество камней. Количества камней в кучках будут \([0, 5, 4]\).
  3. Первый игрок должен забирать камни из второй кучки, потому что первая кучка пустая. Он возьмет \(4\) камня. Количества камней в кучках будут \([0, 1, 4]\).
  4. Второй игрок должен забирать камни из второй кучки, потому что первая кучка пустая. Он возьмет \(1\) камень, потому что он не может взять никакое другое количество камней. Количества камней в кучках будут \([0, 0, 4]\).
  5. Первый игрок должен забирать камни из третьей кучки, потому что первая и вторая кучка пустые. Он возьмет \(4\) камня. Количества камней в кучках будут \([0, 0, 0]\).
  6. Второй игрок проигрывает игру, потому что все кучки пустые.

B. GameGame

битмаски дп жадные алгоритмы игры Конструктив математика *1900

Коала Коа и ее лучшая подруга хотят поиграть в игру.

Игра начинается с массива \(a\) длины \(n\), состоящего из неотрицательных целых чисел. Коа и ее лучшая подруга ходят по очереди, и у каждой из них есть счет, изначально равный \(0\). Коа начинает.

Ход в игре происходит следующим образом:

  • Во время своего хода игрок выбирает любой элемент массива и удаляет его из этого массива, ксоря его с текущим счетом игрока.

    Более формально: если текущий счет игрока равен \(x\), а выбранный элемент равен \(y\), его новый счет будет равен \(x \oplus y\). Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ..

    Обратите внимание, что после хода элемент \(y\) удаляется из \(a\).

  • Игра заканчивается, когда массив пуст.

В конце игры победителем становится игрок с максимальным счетом. Если оба игрока имеют одинаковый счет, то это ничья.

Если оба игрока играют оптимально, выясните, выиграет ли Коа, проиграет или сыграет вничью.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • WIN, если Коа выиграет.
  • LOSE, если Коа проиграет.
  • DRAW, если игра закончится вничью.
Примечание

В \(1\)-м наборе входных данных первого примера:

\(a = [1, 2, 2]\). Здесь Коа выбирает \(1\), другой игрок должен выбрать \(2\), Коа выбирает оставшуюся \(2\). Счет для Коа составляет \(1 \oplus 2 = 3\), а для другого игрока  — \(2\), поэтому Коа выигрывает.

C. Трансформация строки 2

битмаски графы Деревья дп *3100

Обратите внимание, что единственная разница между Трансформация строки 1 и Трансформация строки 2 заключается в операции, которую делает Коа. В этой версии буква \(y\), которую выбирает Koa, может быть любой из первых \(20\) букв английского алфавита (для лучшего понимания прочитайте условие). Вы можете делать взломы по этим задачам независимо.

Коала Коа имеет две строки \(A\) и \(B\) одинаковой длины \(n\) (\(|A|=|B|=n\)), состоящие из первых \(20\) строчных букв английского алфавита (то есть от a до t).

В один ход Коа:

  1. выбирает некоторое подмножество позиций \(p_1, p_2, \ldots, p_k\) (\(k \ge 1; 1 \le p_i \le n; p_i \neq p_j\) если \(i \neq j\)) из \(A\), такое что \(A_{p_1} = A_{p_2} = \ldots = A_{p_k} = x\) (т. е. все буквы на этой позиции равны некоторой букве \(x\)).

  2. выбирает любую букву \(y\) (из первых \(20\) строчных букв английского алфавита).

  3. делает все буквы в позициях \(p_1, p_2, \ldots, p_k\) равными \(y\). Более формально: для каждого \(i\) (\(1 \le i \le k\)) Коа устанавливает \(A_{p_i} = y\).

    Обратите внимание, что вы можете изменять только буквы в строке \(A\).

Коа хочет знать наименьшее число ходов, которые она должна сделать, чтобы сделать строки равными друг другу (\(A = B\)) или определить, что нет никакого способа сделать их равными. Помогите ей!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину строк \(A\) и \(B\).

Вторая строка каждого набора входных данных содержит строку \(A\) (\(|A|=n\)).

Третья строка каждого набора входных данных содержит строку \(B\) (\(|B|=n\)).

Обе строки состоят из первых строчных букв английского алфавита \(20\) (т.е. от a до t).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных:

Выведите в единственной строке минимальное количество ходов, которое Koa должна сделать, чтобы строки стали равны друг другу (\(A = B\)) или \(-1\), если нет никакого способа сделать их равными.

Примечание
  • В \(1\)-м наборе входных данных Koa:
    1. выбирает позиции \(1\) и \(2\) и устанавливает \(A_1 = A_2 = \) b (\(\color{red}{aa}b \rightarrow \color{blue}{bb}b\)).
    2. выбирает позиции \(2\) и \(3\) и устанавливает \(A_2 = A_3 = \) c (\(b\color{red}{bb} \rightarrow b\color{blue}{cc}\)).

  • В \(2\)-м наборе входных данных Koa:
    1. выбирает позиции \(1\) и \(4\) и устанавливает \(A_1 = A_4 = \) a (\(\color{red}{c}ab\color{red}{c} \rightarrow \color{blue}{a}ab\color{blue}{a}\)).
    2. выбирает позиции \(2\) и \(4\) и устанавливает \(A_2 = A_4 = \) b (\(a\color{red}{a}b\color{red}{a} \rightarrow a\color{blue}{b}b\color{blue}{b}\)).
    3. выбирает позицию \(3\) и устанавливает \(A_3 = \) c (\(ab\color{red}{b}b \rightarrow ab\color{blue}{c}b\)).

  • В \(3\)-м наборе входных данных Koa:
    1. выбирает позицию \(1\) и устанавливает \(A_1 = \) t (\(\color{red}{a}bc \rightarrow \color{blue}{t}bc\)).
    2. выбирает позицию \(2\) и устанавливает \(A_2 = \) s (\(t\color{red}{b}c \rightarrow t\color{blue}{s}c\)).
    3. выбирает позицию \(3\) и устанавливает \(A_3 = \) r (\(ts\color{red}{c} \rightarrow ts\color{blue}{r}\)).

E. Странная операция

дп Комбинаторика Структуры данных *2800

Коала Коа имеет бинарную строку \(s\) длины \(n\). Коа может выполнить не более \(n-1\) (возможно, ноль) операций следующего вида:

За одну операцию Коа выбирает позиции \(i\) и \(i+1\) для некоторого \(i\) с \(1 \le i < |s|\) и делает \(s_i\) равным \(max(s_i, s_{i+1})\). Затем Коа удаляет позицию \(i+1\) из \(s\) (после удаления оставшиеся части склеиваются).

Обратите внимание, что после каждой операции длина \(s\) уменьшается на \(1\).

Сколько разных бинарных строк может получить Коа, выполнив не более \(n-1\) (возможно, ноль) операций по модулю \(10^9+7\) (\(1000000007\))?

Входные данные

Единственная строка ввода содержит бинарную строку \(s\) (\(1 \le |s| \le 10^6\)). Для всех \(i\) (\(1 \le i \le |s|\)) \(s_i = 0\) или \(s_i = 1\).

Выходные данные

В единственной строке выведите ответ на задачу по модулю \(10^9+7\) (\(1000000007\)).

Примечание

В первом примере Koa может получить следующие бинарные строки: \(0\), \(00\) и \(000\).

Во втором примере Коа может получить следующие бинарные строки: \(1\), \(01\), \(11\), \(011\), \(101\) и \(0101\). Например:

  • для получения \(01\) из \(0101\) Коа может действовать следующим образом: \(0101 \rightarrow 0(10)1 \rightarrow 011 \rightarrow 0(11) \rightarrow 01\).
  • для получения \(11\) от \(0101\) Коа может действовать следующим образом: \(0101 \rightarrow (01)01 \rightarrow 101 \rightarrow 1(01) \rightarrow 11\).

Круглые скобки обозначают две позиции, выбранные Коа в каждой операции.

B1. Коа и пляж (простая версия)

дп жадные алгоритмы Перебор *1900

Единственная разница между простой и сложной версиями заключается в ограничениях. В этой версии ограничения ниже. Вы можете делать взломы только если обе версии задачи сданы.

Коала Коа на пляже!

Пляж состоит из (слева направо) берега, \(n+1\) метров моря, и острова в \(n+1\) метрах от берега.

Она измерила глубину моря на расстоянии \(1, 2, \dots, n\) метров от берега и сохранила эту информацию в массиве \(d\). \(d_i\) обозначает глубину моря в \(i\) метрах от берега для \(1 \le i \le n\).

Как и на любом пляже, на этом есть прилив, интенсивность прилива измеряется параметром \(k\) и влияет на все глубины с начала в момент времени \(t=0\) следующим образом:

  • На протяжении \(k\) секунд каждую секунду прилив увеличивает все глубины на \(1\).

  • На протяжении следующих \(k\) секунд каждую секунду прилив уменьшает все глубины на \(1\).

  • Этот процесс повторяется снова и снова (т.е. глубина увеличивается на протяжении \(k\) секунд, затем уменьшается на протяжении \(k\) секунд и так далее ...).

    Формально, давайте определим \(0\)-индексированный массив \(p = [0, 1, 2, \ldots, k - 2, k - 1, k, k - 1, k - 2, \ldots, 2, 1]\) длины \(2k\). В момент времени \(t\) (\(0 \le t\)) глубина на расстоянии \(i\) метров от берега равна \(d_i + p[t \bmod 2k]\) (\(t \bmod 2k\) обозначает остаток от деления \(t\) на \(2k\)). Обратите внимание, что изменения происходят мгновенно каждую секунду, см. примеры для лучшего понимания.

В момент времени \(t=0\) Коа стоит на берегу, и хочет добраться до острова. Пусть во время \(t\) (\(0 \le t\)) она находится в \(x\) (\(0 \le x \le n\)) метрах от берега:

  • За одну секунду Коа может проплыть на \(1\) метр дальше от берега (\(x\) меняется на \(x+1\)) или вообще не плыть (\(x\) остается неизменным), в обоих случаях \(t\) меняется на \(t+1\).

  • Поскольку Коа  — плохой пловец, глубина моря в точке, где она находится, не может превышать \(l\) во все целые точки времени (или она утонет). Более формально, если Коа находится в \(x\) (\(1 \le x \le n\)) метрах от берега в момент \(t\) (для некоторого целого \(t\ge 0\)), то глубина моря в этой точке  — \(d_x + p[t \bmod 2k]\) — не может превышать \(l\). Другими словами, \(d_x + p[t \bmod 2k] \le l\) должно выполняться всегда.

  • Когда Коа достигает острова в \(n+1\) метров от берега, она останавливается и может отдохнуть.

    Обратите внимание, что пока Коа плывет, прилив не влияет на нее (то есть она не может утонуть во время плавания). Обратите внимание, что Коа может оставаться на берегу, сколько ей нужно, и ни берег, ни остров не подвержены влиянию прилива (это твердая земля, и она там не утонет).

Коа хочет знать, сможет ли она добраться с берега на остров. Помогите ей!

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 100\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит три целых числа: \(n\), \(k\) and \(l\) (\(1 \le n \le 100; 1 \le k \le 100; 1 \le l \le 100\)) — количество метров моря и параметры \(k\) и \(l\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(d_1, d_2, \ldots, d_n\) (\(0 \le d_i \le 100\)) — глубины каждого метра моря.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(100\).

Выходные данные

Для каждого набора входных данных:

Выведите Yes, если Коа сможет добраться от берега до острова, и No в обратном случае.

Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

Ниже \(s\) обозначает берег, \(i\) обозначает остров, \(x\) обозначает расстояние от Коа до берега, нижнее подчеркивание обозначает позицию Коа, а значения в массиве ниже обозначают текущие глубины, измененные под влиянием прилива, на расстояниях \(1, 2, \dots, n\) от берега.

В наборе входных данных \(1\) мы имеем \(n = 2, k = 1, l = 1, p = [ 0, 1 ]\).

Коа хочет добраться с берега (c \(x = 0\)) на остров (c \(x = 3\)). Опишем возможное решение:

  • Первоначально в \(t = 0\) пляж выглядит так: \([\underline{s}, 1, 0, i]\).
  • В \(t = 0\), если бы Коа решила доплыть до \(x = 1\), пляж выглядел бы так: \([s, \underline{2}, 1, i]\) в \(t = 1\), и так как \(2 > 1\) она бы утонула. Таким образом, Коа вместо этого ждет \(1\) секунду, а пляж выглядит как \([\underline{s}, 2, 1, i]\) в \(t = 1\).
  • В \(t = 1\) Коа плывет до \(x = 1\), пляж выглядит как \([s, \underline{1}, 0, i]\) в \(t = 2\). Коа не тонет, потому что \(1 \le 1\).
  • В \(t = 2\) Коа плывет до \(x = 2\), пляж выглядит как \([s, 2, \underline{1}, i]\) в \(t = 3\). Коа не тонет, потому что \(1 \le 1\).
  • В \(t = 3\) Коа плывет до \(x = 3\), пляж выглядит как \([s, 1, 0, \underline{i}]\) в \(t = 4\).
  • В \(t = 4\) Коа находится в \(x = 3\), и она сделала это!

Можно показать, что наборе входных данных \(2\) Коа не сможет доплыть до острова.

B2. Коа и пляж (сложная версия)

дп жадные алгоритмы Конструктив реализация *2200

Единственная разница между простой и сложной версиями заключается в ограничениях. В этой версии ограничения выше. Вы можете делать взломы только если обе версии задачи сданы.

Коала Коа на пляже!

Пляж состоит из (слева направо) берега, \(n+1\) метров моря, и острова в \(n+1\) метрах от берега.

Она измерила глубину моря на расстоянии \(1, 2, \dots, n\) метров от берега и сохранила эту информацию в массиве \(d\). \(d_i\) обозначает глубину моря в \(i\) метрах от берега для \(1 \le i \le n\).

Как и на любом пляже, на этом есть прилив, интенсивность прилива измеряется параметром \(k\) и влияет на все глубины с начала в момент времени \(t=0\) следующим образом:

  • На протяжении \(k\) секунд каждую секунду прилив увеличивает все глубины на \(1\).

  • На протяжении следующих \(k\) секунд каждую секунду прилив уменьшает все глубины на \(1\).

  • Этот процесс повторяется снова и снова (т.е. глубина увеличивается на протяжении \(k\) секунд, затем уменьшается на протяжении \(k\) секунд и так далее ...).

    Формально, давайте определим \(0\)-индексированный массив \(p = [0, 1, 2, \ldots, k - 2, k - 1, k, k - 1, k - 2, \ldots, 2, 1]\) длины \(2k\). В момент времени \(t\) (\(0 \le t\)) глубина на расстоянии \(i\) метров от берега равна \(d_i + p[t \bmod 2k]\) (\(t \bmod 2k\) обозначает остаток от деления \(t\) на \(2k\)). Обратите внимание, что изменения происходят мгновенно каждую секунду, см. примеры для лучшего понимания.

В момент времени \(t=0\) Коа стоит на берегу, и хочет добраться до острова. Пусть во время \(t\) (\(0 \le t\)) она находится в \(x\) (\(0 \le x \le n\)) метрах от берега:

  • За одну секунду Коа может проплыть на \(1\) метр дальше от берега (\(x\) меняется на \(x+1\)) или вообще не плыть (\(x\) остается неизменным), в обоих случаях \(t\) меняется на \(t+1\).

  • Поскольку Коа  — плохой пловец, глубина моря в точке, где она находится, не может превышать \(l\) во все целые точки времени (или она утонет). Более формально, если Коа находится в \(x\) (\(1 \le x \le n\)) метрах от берега в момент \(t\) (для некоторого целого \(t\ge 0\)), то глубина моря в этой точке  — \(d_x + p[t \bmod 2k]\) — не может превышать \(l\). Другими словами, \(d_x + p[t \bmod 2k] \le l\) должно выполняться всегда.

  • Когда Коа достигает острова в \(n+1\) метров от берега, она останавливается и может отдохнуть.

    Обратите внимание, что пока Коа плывет, прилив не влияет на нее (то есть она не может утонуть во время плавания). Обратите внимание, что Коа может оставаться на берегу, сколько ей нужно, и ни берег, ни остров не подвержены влиянию прилива (это твердая земля, и она там не утонет).

Коа хочет знать, сможет ли она добраться с берега на остров. Помогите ей!

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит три целых числа: \(n\), \(k\) and \(l\) (\(1 \le n \le 3 \cdot 10^5; 1 \le k \le 10^9; 1 \le l \le 10^9\)) — количество метров моря и параметры \(k\) и \(l\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(d_1, d_2, \ldots, d_n\) (\(0 \le d_i \le 10^9\)) — глубины каждого метра моря.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

Выведите Yes, если Коа сможет добраться от берега до острова, и No в обратном случае.

Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

Ниже \(s\) обозначает берег, \(i\) обозначает остров, \(x\) обозначает расстояние от Коа до берега, нижнее подчеркивание обозначает позицию Коа, а значения в массиве ниже обозначают текущие глубины, измененные под влиянием прилива, на расстояниях \(1, 2, \dots, n\) от берега.

В наборе входных данных \(1\) мы имеем \(n = 2, k = 1, l = 1, p = [ 0, 1 ]\).

Коа хочет добраться с берега (c \(x = 0\)) на остров (c \(x = 3\)). Опишем возможное решение:

  • Первоначально в \(t = 0\) пляж выглядит так: \([\underline{s}, 1, 0, i]\).
  • В \(t = 0\), если бы Коа решила доплыть до \(x = 1\), пляж выглядел бы так: \([s, \underline{2}, 1, i]\) в \(t = 1\), и так как \(2 > 1\) она бы утонула. Таким образом, Коа вместо этого ждет \(1\) секунду, а пляж выглядит как \([\underline{s}, 2, 1, i]\) в \(t = 1\).
  • В \(t = 1\) Коа плывет до \(x = 1\), пляж выглядит как \([s, \underline{1}, 0, i]\) в \(t = 2\). Коа не тонет, потому что \(1 \le 1\).
  • В \(t = 2\) Коа плывет до \(x = 2\), пляж выглядит как \([s, 2, \underline{1}, i]\) в \(t = 3\). Коа не тонет, потому что \(1 \le 1\).
  • В \(t = 3\) Коа плывет до \(x = 3\), пляж выглядит как \([s, 1, 0, \underline{i}]\) в \(t = 4\).
  • В \(t = 4\) Коа находится в \(x = 3\), и она сделала это!

Можно показать, что наборе входных данных \(2\) Коа не сможет доплыть до острова.

D. а-хорошая строка

битмаски дп Перебор разделяй и властвуй реализация *1500

Вам дана строка \(s[1 \dots n]\), состоящая из строчных латинских букв. Гарантируется, что \(n = 2^k\) для некоторого целого числа \(k \ge 0\).

Строка \(s[1 \dots n]\) называется \(c\)-хорошей, если выполняется как минимум одно из следующих условий:

  • Длина строки \(s\) равна \(1\) и она состоит из единственного символа \(c\) (то есть \(s_1=c\));
  • Длина строки \(s\) больше \(1\), первая половина строки состоит только из символа \(c\) (то есть \(s_1=s_2=\dots=s_{\frac{n}{2}}=c\)), а вторая половина строки (то есть строка \(s_{\frac{n}{2} + 1}s_{\frac{n}{2} + 2} \dots s_n\)) является \((c+1)\)-хорошей строкой;
  • Длина строки \(s\) больше \(1\), вторая половина строки состоит только из символа \(c\) (то есть \(s_{\frac{n}{2} + 1}=s_{\frac{n}{2} + 2}=\dots=s_n=c\)), а первая половина строки (то есть строка \(s_1s_2 \dots s_{\frac{n}{2}}\)) является \((c+1)\)-хорошей строкой.

Например: «aabc» является 'a'-хорошей, «ffgheeee» является 'e'-хорошей.

За один ход вы можете выбрать один индекс \(i\) от \(1\) до \(n\) и заменить \(s_i\) на любую строчную латинскую букву (любой символ от 'a' до 'z').

Ваша задача — найти минимальное количество ходов, необходимое, чтобы получить 'a'-хорошую строку из \(s\) (т.е. \(c\)-хорошую строку для \(c=\) 'a'). Гарантируется, что ответ всегда существует.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Еще один пример 'a'-хорошей строки является следующим. Например, рассмотрим строку \(s = \)«cdbbaaaa». Это 'a'-хорошая строка, потому что:

  • вторая половина строки («aaaa») состоит только из символов 'a';
  • первая половина строки («cdbb») — 'b'-хорошая строка, потому что:
    • вторая половина строки («bb») состоит только из символов 'b';
    • первая половина строки («cd») — 'c'-хорошая строка, потому что:
      • первая половина строки («c») состоит из единственного символа 'c';
      • вторая половина строки («d») — 'd'-хорошая строка.
Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 131~072\)) — длину \(s\). Гарантируется, что \(n = 2^k\) для некоторого целого числа \(k \ge 0\). Вторая строка набора тестовых данных содержит строку \(s\), состоящую из \(n\) строчных латинских букв.

Гарантируется, что сумма всех \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — наименьшее количество ходов, необходимое, чтобы получить 'a'-хорошую строку \(s\) (т.е. \(c\)-хорошую строку для \(c =\) 'a'). Гарантируется, что ответ существует.

A. Граф

*особая задача Бинарный поиск дп математика поиск в глубину и подобное Тернарный поиск *2100

Дан неориентированный граф, в котором каждое ребро покрашено либо в чёрный цвет, либо в красный цвет.

Ваша задача присвоить каждой вершине по вещественному числу таким образом, что:

  • сумма чисел на обеих концах каждого чёрного ребра равна \(1\);
  • сумма чисел на обеих концах каждого красного ребра равна \(2\);
  • сумма модулей всех присвоенных чисел наименьшая возможная.

Если это не возможно, выведите, что не существует такого комплекта чисел.

Входные данные

Первая строка содержит два целых числа \(N\) (\(1 \leq N \leq 100\,000\)) и \(M\) (\(0 \leq M \leq 200\,000\)): количество вершин и рёбер, соответственно. Вершины пронумерованы последовательными числами \(1, 2, \ldots, N\).

Следующие \(M\) строк содержат описание рёбер. Каждая строка содержит три целых числа \(a\), \(b\) и \(c\), которые обозначают, что между вершинами \(a\) и \(b\) (\(1 \leq a, b \leq N\)) есть ребро цвета \(c\) (\(1\) обозначает чёрное, \(2\) обозначает красное).

Выходные данные

Если решение существует, выведите в первой строке слово «YES» и во второй строке выведите \(N\) чисел. Для каждого \(i\) (\(1 \le i \le N\)), \(i\)-е из этих чисел должно равняться числу, присвоенному вершине с номером \(i\).

Вывод должен соответствовать следующим ограничениям точности:

  • сумма чисел на концах каждого ребра должна отличаться от нужной суммы для этого ребра меньше, чем на \(10^{-6}\);
  • сумма модулей всех присвоенных чисел отличается от наименьшего возможного меньше, чем на \(10^{-6}\).

Если существует несколько решений, выведите любое из них.

Если решения не существует, выведите одно слово «NO».

Система оценки

Подзадачи:

  1. (5 баллов) \(N \leq 5\), \(M \leq 14\)
  2. (12 баллов) \(N \leq 100\)
  3. (17 баллов) \(N \leq 1000\)
  4. (24 баллов) \(N \leq 10\,000\)
  5. (42 баллов) Без дополнительных ограничений.
Примечание

Примите во внимание, что во втором примере решение не уникальное.

B1. Посёлок (Минимум)

*особая задача Деревья дп жадные алгоритмы *2100

Эта задача разбита на две. В данной задаче, вам нужно найти минимальный ответ. В задаче же Посёлок (Максимум) вам нужно найти максимальный возможный ответ. За каждую из этих задач можно получить по \(50\) баллов.

В одном посёлке люди живут в \(N\) домах. В каждом доме живёт ровно один житель. Дома соединены дорогами. Каждая дорога соединяет два дома и имеет длину \(1\) км. Из каждого дома можно достичь любой другой дом, идя по одной или нескольким дорогам. В общем в посёлке ровно \(N-1\) дорог.

Однажды все жители решили переехать в другие дома. После переезда всех жителей в каждом доме снова должен жить ровно один житель, но ни один житель не должен остаться в том же доме, в котором жил до этого. Наша цель — узнать наименьшую возможную сумму кратчайших путей (в км) перемещения всех жителей из старых мест жительства на новые.

Пример посёлка с семью домами

Например, если всего есть семь домов, соединённых дорогами так, как показано на рисунке, то наименьшая общая длина равняется \(8\) км (этого можно достичь, перемещая жителей \(1 \to 6\), \(2 \to 4\), \(3 \to 1\), \(4 \to 2\), \(5 \to 7\), \(6 \to 3\), \(7 \to 5\)).

Напишите программу, которая находит наименьшую возможную сумму кратчайших путей (в км), а также распределение жителей по новым домам.

Входные данные

Первая строка содержит одно целое число \(N\) (\(1 < N \le 10^5\)). Дома пронумерованы последовательными целыми числами \(1, 2, \ldots, N\).

Затем следуют \(N-1\) строк, которые описывают дороги. Каждая строка содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le N\), \(a \neq b\)), что означает, что дома с номерами \(a\) и \(b\) соединены дорогой.

Выходные данные

В первой строке выведите одно целое число, наименьшую возможную общую длину кратчайших путей жителей в километрах.

Во второй строке опишите одно правильное распределение жителей по новым домам с наименьшей возможной общей длиной: \(N\) различных целых чисел \(v_1, v_2, \ldots, v_N\). Для каждого \(i\), \(v_i\) обозначает номер дома, в который должен переехать житель из дома с номером \(i\) (\(v_i \neq i\)). Если существует несколько распределений, выведите любое из них.

Система оценки

Подзадачи:

  1. (6 баллов) \(N \leq 10\)
  2. (19 баллов) \(N \leq 1\,000\)
  3. (25 баллов) Без дополнительных ограничений.

C. Вирусы

*особая задача дп кратчайшие пути строковые суфф. структуры *2900

Комитет по Исследованию Двоичных Вирусов открыл способ репродукции широкой семьи вирусов, генетический код которых состоит из нулей и единиц. Каждый вирус возникает из одного гена; для простоты, гены обозначены целыми числами от \(0\) до \(G - 1\). В любой момент времени вирус представляет собой цепочку генов. Когда происходит мутация, один из генов в цепочке заменяется на одну из цепочек генов в соответствии с таблицой мутаций. Вирус прекращает мутировать, когда он состоит только из генов \(0\) и \(1\).

Например, при следующей таблице мутации: \(\) 2 \to \langle 0\ 1 \rangle \\ 3 \to \langle 2\ 0\ 0\rangle\\ 3 \to \langle 1\ 3\rangle\\ 4 \to \langle 0\ 3\ 1\ 2\rangle\\ 5 \to \langle 2\ 1\rangle\\ 5 \to \langle 5\rangle \(\) вирус, который изначально состоял из одного гена \(4\), мог мутировать так: \(\) \langle 4 \rangle \to \langle \underline{0\ 3\ 1\ 2} \rangle \to \langle 0\ \underline{2\ 0\ 0}\ 1\ 2 \rangle \to \langle 0\ \underline{0\ 1}\ 0\ 0\ 1\ 2 \rangle \to \langle 0\ 0\ 1\ 0\ 0\ 1\ \underline{0\ 1} \rangle \(\) или же другим образом: \(\) \langle 4 \rangle \to \langle \underline{0\ 3\ 1\ 2} \rangle \to \langle 0\ \underline{1\ 3}\ 1\ 2 \rangle \to \langle 0\ 1\ 3\ 1\ \underline{0\ 1} \rangle \to \langle 0\ 1\ \underline{2\ 0\ 0}\ 1\ 0\ 1 \rangle \to \langle 0\ 1\ \underline{0\ 1}\ 0\ 0\ 1\ 0\ 1 \rangle \(\)

Вирусы выявляются антителами, которые обнаруживают присутствие конкретных последовательностей нулей и единиц в коде вирусов. Например, антитело, которое реагирует на последовательность \(\langle 0\ 0\ 1\ 0\ 0 \rangle\), обнаружит вирус \(\langle 0\ 0\ 1\ 0\ 0\ 1\ 0\ 1 \rangle\), но не обнаружит вирус \(\langle 0\ 1\ 0\ 1\ 0\ 0\ 1\ 0\ 1 \rangle\).

Для каждого гена от \(2\) до \(G-1\), учёные хотят знать, достаточно ли данного множества антител, чтобы обнаружить все вирусы, которые могут мутировать из этого гена. Если нет, то они хотят знать длину кратчайшего вируса, который невозможно обнаружить.

Возможна также ситуация, когда у учёных нет никаких антител. Тогда, естественно, никакой вирус нельзя обнаружить, поэтому в таком случае учёные просто хотят знать длину кратчайшего вируса, который может появиться в результате генетических мутаций.

Входные данные

В первой строке ввода даны три целых числа \(G\), \(N\) и \(M\) (\(G > 2\), \(N \geq G - 2\), \(M \geq 0\)), количество генов, количество строк в таблице мутаций и количество антител, соответсвенно.

Следующие \(N\) строк содержат описания строк в таблице мутаций; в начале каждой строки даны два целых числа \(a\) и \(k\) (\(2 \leq a < G\), \(k \geq 1\)), за которыми следуют \(k\) целых чисел \(b_1, b_2, \ldots, b_k\) (\(0 \leq b_i < G\)), которые описывают строку \(\) a \to \langle b_1\ b_2\ \ldots\ b_k \rangle \(\)

Сумма всех значений \(k\) не превышает \(100\). Каждое целое число от \(2\) до \(G - 1\) появляется в таблице как \(a\) по крайней мере один раз.

Следующие \(M\) строк содержат описание антител; каждая из этих строк содержит целое число \(\ell\) (\(\ell \geq 1\)), за которым следуют \(\ell\) целых чисел \(c_1, c_2, \ldots, c_\ell\) (\(0 \leq c_i \leq 1\)), которые описывают антитело. Сумма всех значений \(\ell\) не превышает \(50\).

Выходные данные

Ваша программа должна вывести ровно \(G - 2\) строк с ответами для каждого гена от \(2\) до \(G - 1\) в такой последовательности.

Если с помощью данных антител возможно обнаружить все вирусы, которые могут появиться в результате мутаций из конкретного гена, выведите слово «YES». Это нужно вывести также и тогда, если из данного гена не может появиться ни один вирус (такое может случиться также и тогда, если цепочка никогда не перестаёт мутировать).

Иначе выведите слово «NO», за которым выведите длину кратчайшего вируса, который невозможно обнаружить. Гарантируется, что это значение во всех тестовых примерах меньше, чем \(2^{63}\).

Система оценки

Подзадачи:

  1. (11 баллов) Без антител (\(M = 0\))
  2. (14 баллов) \(N = G - 2\)
  3. (25 баллов) Одно антитело (\(M = 1\))
  4. (32 баллов) Сумма всех значений \(\ell\) не превышает \(10\)
  5. (18 баллов) Без дополнительных ограничений.

B. Прогулка по массиву

дп жадные алгоритмы Перебор *1600

Задан массив \(a_1, a_2, \dots, a_n\), состоящий из \(n\) положительных целых чисел.

Изначально вы находитесь в позиции \(1\), и ваше количество очков равно \(a_1\). Можно совершать два типа шагов:

  1. шаг вправо — перейти из текущей позиции \(x\) в \(x+1\) и получить \(a_{x+1}\) очков. Этот шаг можно делать только если \(x<n\).
  2. шаг влево — перейти из текущей позиции \(x\) в \(x-1\) и получить \(a_{x-1}\) очков. Этот шаг можно делать только если \(x>1\). Также нельзя совершать два или более шагов влево подряд.

Вам требуется совершить ровно \(k\) шагов. Не более \(z\) из них могут быть шагами влево.

Какое наибольшее количество очков можно получить?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны три целых числа \(n, k\) и \(z\) (\(2 \le n \le 10^5\), \(1 \le k \le n - 1\), \(0 \le z \le min(5, k)\)) — количество элементов в массиве, суммарное количество шагов, которое вы должны сделать, и максимальное количество шагов влево, которое вы можете сделать.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^4\)) — данный массив.

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Выведите \(t\) целых чисел — для каждого набора входных данных выведите наибольшее количество очков, которое можно получить, если требуется сделать ровно \(k\) шагов, не более \(z\) из них могут быть шагами влево и не должно быть двух шагов влево подряд.

Примечание

В первом наборе входных данных не разрешается ходить влево вообще. Поэтому делаем четыре шага вправо и получаем \(a_1 + a_2 + a_3 + a_4 + a_5\) очков.

Во втором наборе входных данных можно сделать один ход влево. Тогда сделаем такие шаги: вправо, вправо, влево, вправо. Получится \(a_1 + a_2 + a_3 + a_2 + a_3\) очков.

В третьем наборе входных данных можно ходить влево до четырех раз, но это все равно не оптимально, можем просто сделать четыре шага вправо и получить \(a_1 + a_2 + a_3 + a_4 + a_5\) очков.

C. Хорошая строка

дп жадные алгоритмы Перебор *1500

Назовем левым циклическим сдвигом некоторой строки \(t_1 t_2 t_3 \dots t_{n - 1} t_n\) следующую строку: \(t_2 t_3 \dots t_{n - 1} t_n t_1\).

Аналогично, назовем правым циклическим сдвигом строки \(t\) строку \(t_n t_1 t_2 t_3 \dots t_{n - 1}\).

Скажем, что строка \(t\) является хорошей, если ее левый циклический сдвиг равен правому циклическому сдвигу.

Вам дана строка \(s\), состоящая из цифр 09.

Какое минимальное количество символов необходимо удалить из строки \(s\), чтобы она стала хорошей?

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Следующие \(t\) строк содержат описание наборов входных данных. Первая и единственная строка каждого набора содержит строку \(s\) (\(2 \le |s| \le 2 \cdot 10^5\)). Каждый символ \(s_i\) является цифрой 09.

Гарантируется, что суммарная длина строк не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество символов, которое необходимо удалить из строки \(s\), чтобы она стала хорошей.

Примечание

В первом примере можно стереть любые \(3\) символа, например \(1\)-й, \(3\)-й и \(4\)-й. Вы получите строку 51, и это хорошая строка.

Во втором примере можно стереть все символы, кроме 0: оставшаяся строка 0000 — хорошая.

В третьем примере заданная строка \(s\) уже является хорошей.

F. Двухцветные отрезки

дп Паросочетания сортировки Структуры данных *2600

Вам задано \(n\) отрезков \([l_1, r_1], [l_2, r_2], \dots, [l_n, r_n]\). Каждый отрезок одного из двух цветов: \(i\)-й отрезок покрашен в цвет \(t_i\).

Назовем пару отрезков \(i\) и \(j\) плохой, если выполняются два условия:

  • \(t_i \ne t_j\);
  • отрезки \([l_i, r_i]\) и \([l_j, r_j]\) пересекаются, касаются или вкладываются, т. е. существует целое число \(x\), такое, что \(x \in [l_i, r_i]\) и \(x \in [l_j, r_j]\).

Определите, какое максимальное количество отрезков из заданных можно выбрать так, чтобы среди выбранных не было ни одной плохой пары.

Входные данные

В первой строке задано единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество отрезков.

В последующих \(n\) строках задано по три целых числа \(l_i, r_i, t_i\) (\(1 \le l_i \le r_i \le 10^9; t_i \in \{1, 2\}\)) — описание \(i\)-го отрезка.

Выходные данные

Выведите максимальное количество отрезков, которые можно выбрать так, чтобы среди выбранных отрезков не было ни одной плохой пары.

G. Выбираем направления

графы Деревья дп поиск в глубину и подобное *2800

Дан неориентированный связный граф, состоящий из \(n\) вершин и \(m\) ребер. \(k\) вершин этого графа — особенные.

Вы должны ориентировать каждое ребро графа (или оставить некоторые ребра неориентированными за дополнительную плату). Вы можете оставить \(i\)-е ребро неориентированным, заплатив \(w_i\) монет, или бесплатно ориентировать его.

Назовем вершину насыщенной, если она достижима из всех особенных вершин по ребрам графа (если ребро осталось неориентированным, по нему можно ходить в любом направлении). После того, как вы выберете направления для ребер графа (возможно, оставив некоторые неориентированными), вы получите \(c_i\) монет за каждую насыщенную вершину \(i\). То есть вашу итоговую прибыль можно посчитать по формуле \(\sum \limits_{i \in S} c_i - \sum \limits_{j \in U} w_j\), где \(S\) — множество насыщенных вершин, а \(U\) — множество ребер, оставшихся неориентированными.

Для каждой вершины \(i\) посчитайте максимальную прибыль, которую вы можете получить, если вы обязательно должны сделать вершину \(i\) насыщенной.

Входные данные

В первой строке заданы три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 3 \cdot 10^5\), \(n - 1 \le m \le \min(3 \cdot 10^5, \frac{n(n-1)}{2})\), \(1 \le k \le n\)).

Во второй строке заданы \(k\) попарно различных целых чисел \(v_1\), \(v_2\), ..., \(v_k\) (\(1 \le v_i \le n\)) — индексы специальных вершин.

В третьей строке заданы \(n\) целых чисел \(c_1\), \(c_2\), ..., \(c_n\) (\(0 \le c_i \le 10^9\)).

В четвертой строке заданы \(m\) целых чисел \(w_1\), \(w_2\), ..., \(w_m\) (\(0 \le w_i \le 10^9\)).

Затем следуют \(m\) строк, в \(i\)-й из которых заданы два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\)) — концы \(i\)-го ребра.

Между каждой парой вершин существует не более одного ребра.

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из которых должно быть равно максимальной прибыли, которую вы можете получить, если необходимо сделать вершину \(i\) насыщенной.

Примечание

Рассмотрим первый пример:

  • лучший способ насытить вершину \(1\) — направить ребра следующим образом: \(2 \to 1\), \(3 \to 2\); \(1\) — единственная насыщенная вершина, поэтому ответ равен \(11\);
  • лучший способ насытить вершину \(2\) — оставить ребро \(1-2\) неориентированным, а другое ребро направить так: \(3 \to 2\); \(1\) и \(2\) — насыщенные вершины, стоимость ребра \(1-2\) равна \(10\), поэтому ответ равен \(2\);
  • лучший способ насытить вершину \(3\) — направить ребра следующим образом: \(2 \to 3\), \(1 \to 2\); \(3\) — единственная насыщенная вершина, поэтому ответ равен \(5\).

Лучший план действий во втором примере — направить все ребра по циклу: \(1 \to 2\), \(2 \to 3\), \(3 \to 4\) и \(4 \to 1\). Таким образом, все вершины будут насыщенными.

C. Циклические перестановки

графы дп Комбинаторика математика *1500

Перестановка длины \(n\)  — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\)  — это перестановка, но \([1,2,2]\)  — это не перестановка (\(2\) встречается дважды в массиве), а \([1,3,4]\) также не является перестановкой (\(n=3\), но в массиве встречается \(4\)).

Рассмотрим перестановку \(p\) длины \(n\). Построим граф на \(n\) вершинах, используя перестановку следующим образом:

  • Для каждого \(1 \leq i \leq n\) найдите наибольшее значение \(j\), для которого \(1 \leq j < i\) и \(p_j > p_i\), и добавьте неориентированное ребро между вершинами \(i\) и \(j\).
  • Для каждого \(1 \leq i \leq n\) найдите наименьшее значение \(j\), для которого \(i < j \leq n\) и \(p_j > p_i\), и добавьте неориентированное ребро между вершинами \(i\) и \(j\)

В тех случаях, когда таких \(j\) не существует, мы не добавляем ребер. Также обратите внимание, что мы проводим ребра между соответствующими индексами, а не значениями в этих индексах.

Например, рассмотрим случай \(n = 4\) и \(p = [3,1,4,2]\); здесь ребрами графа являются \((1,3),(2,1),(2,3),(4,3)\).

Перестановка \(p\) является циклической, если граф, построенный с использованием \(p\), имеет хотя бы один простой цикл.

Для данного \(n\), найдите число циклических перестановок длины \(n\). Поскольку число может быть очень большим, выведите его по модулю \(10^9+7\).

Пожалуйста, обратитесь к разделу Примечания для формального определения простого цикла.

Входные данные

Первая и единственная строка содержит одно целое число \(n\) (\(3 \le n \le 10^6\)).

Выходные данные

Выведите единственное целое число \(0 \leq x < 10^9+7\), количество циклических перестановок длины \(n\) по модулю \(10^9+7\).

Примечание

Для \(n = 4\) существует \(16\) циклических перестановок. \([4,2,1,3]\)  — одна из таких перестановок, она содержит цикл длины четыре: \(4 \rightarrow 3 \rightarrow 2 \rightarrow 1 \rightarrow 4\).

Вершины \(v_1\), \(v_2\), \(\ldots\), \(v_k\) образуют простой цикл, если выполняются следующие условия:

  • \(k \geq 3\).
  • \(v_i \neq v_j\) для любой пары индексов \(i\) и \(j\). (\(1 \leq i < j \leq k\))
  • Между \(v_i\) и \(v_{i+1}\) есть ребро для всех \(i\) (\(1 \leq i < k\)), как и между \(v_1\) и \(v_k\)

D. 505

битмаски дп жадные алгоритмы Конструктив Перебор реализация *2000

Бинарная матрица называется хорошей, если каждая квадратная подматрица c четной длиной стороны содержит нечетное число единиц.

Для данной бинарной матрицы \(a\), состоящей из \(n\) строк и \(m\) столбцов, определите минимальное количество ячеек, которые нужно изменить, чтобы сделать ее хорошей, или сообщите, что ее вообще нельзя сделать хорошей.

Все вышеприведенные термины имеют свои обычные значения  — обратитесь к разделу Примечания для их формальных определений.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq m \leq 10^6\) и \(n\cdot m \leq 10^6\)) — число строк и столбцов в \(a\) соответственно.

Каждая из следующих \(n\) строк содержит \(m\) символов, каждый из которых равен 0 или 1. Если \(j\)-й символ в \(i\)-й строке равен 1, то \(a_{i,j} = 1\). Аналогично, если \(j\)-й символ в \(i\)-й строке равен 0, то \(a_{i,j} = 0\)

Выходные данные

Выведите минимальное количество ячеек, которое нужно изменить, чтобы сделать \(a\) хорошей, или выведите \(-1\), если это вообще невозможно.

Примечание

В первом случае достаточно заменить \(a_{1,1}\) на \(0\) и \(a_{2,2}\) на \(1\).

Вы можете проверить, что нет никакой возможности сделать матрицу во втором случае хорошей.

Некоторые определения  —

  • Бинарная матрица  — это матрица, в которой каждый элемент равен \(1\) или \(0\).
  • Подматрица описывается \(4\) параметрами  — \(r_1\), \(r_2\), \(c_1\) и \(c_2\); здесь \(1 \leq r_1 \leq r_2 \leq n\) и \(1 \leq c_1 \leq c_2 \leq m\).
  • Эта подматрица содержит все элементы \(a_{i,j}\), которые удовлетворяют как \(r_1 \leq i \leq r_2\) так и \(c_1 \leq j \leq c_2\).
  • Подматрица называется квадратом четной длины, если\(r_2-r_1 = c_2-c_1\) и \(r_2-r_1+1\) делится на \(2\).

D. Омкар и Война кроватей

дп жадные алгоритмы *1700

Омкар играет в свою любимую видеоигру Война кроватей! В Войне кроватей \(n\) игроков располагаются по кругу, так что для всех \(j\) таких, что \(2 \leq j \leq n\), игрок \(j - 1\) находится слева от игрока \(j\), а игрок \(j\)  — справа от игрока \(j - 1\). Кроме того, слева от игрока \(1\) находится игрок \(n\), а справа от игрока \(n\)  — игрок \(1\).

В настоящее время каждый игрок атакует либо левого, либо правого игрока. Это означает, что каждого игрока в настоящее время атакует либо \(0\), \(1\) либо \(2\) других игроков. Ключевым элементом стратегии Войны кроватей является то, что если на игрока нападает ровно \(1\) другой игрок, то в ответ он, логически, должен атаковать этого игрока. Если же на игрока нападают либо \(0\) либо \(2\) других игроков, то стратегия Войны кроватей гласит, что игрок может атаковать любого из соседних игроков.

К сожалению, может случиться так, что некоторые игроки в этой игре не следуют правильной стратегии Войны кроватей нужным образом. Омкар знает, на кого в настоящее время нападает каждый игрок, и он может поговорить с любым количеством из \(n\) игроков в игре, чтобы заставить их вместо этого атаковать другого игрока  — то есть, если игрок в настоящее время атаковал игрока слева от него, Омкар может убедить его вместо этого атаковать игрока справа от него; если он в настоящее время атаковал игрока справа от него, Омкар может убедить его вместо этого атаковать игрока слева от него.

Омкар хотел бы, чтобы все игроки действовали логично. Найдите минимальное количество игроков, с которыми Омкар должен поговорить, чтобы после того, как все игроки, с которыми он поговорил (если таковые имеются), изменили игрока, которого они атакуют, все игроки действовали логически в соответствии со стратегией Войны кроватей.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Ниже приведены описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \leq n \leq 2 \cdot 10^5\))  — количество игроков (а значит и кроватей) в этой игре Bed Wars.

Вторая строка каждого набора входных данных содержит строку \(s\) длиной \(n\). \(j\)-й символ \(s\) равен L, если \(j\)-й игрок атакует игрока слева от него, и R, если \(j\)-й игрок атакует игрока справа от него.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное количество игроков, с которыми Омкар должен поговорить, чтобы сделать так, чтобы все игроки действовали логично в соответствии со стратегией Войны кроватей.

Можно доказать, что Омкар всегда может достичь этого при заданных ограничениях.

Примечание

В первом наборе входных данных игроки \(1\) и \(2\) атакуют друг друга, а игроки \(3\) и \(4\)  — друг друга. Каждый игрок атакует ровно \(1\) другого игрока, и каждый игрок атакует игрока, который атакует их, так что все игроки уже действуют логично в соответствии со стратегией Войны кроватей, и Омкару не нужно разговаривать ни с одним из них, следовательно, ответ \(0\).

Во втором наборе входных данных, не каждый игрок действует логически: например, игрока \(3\) атакует только игрок \(2\), но он не атакует его в ответ. Омкару достаточно поговорить с игроком \(3\) для изменения схемы атаки на LRLRRL, в которой все игроки действуют логично в соответствии со стратегией Войны кроватей, делая ответ \(1\).

G. Омкар и пироги

битмаски дп кратчайшие пути математика поиск в глубину и подобное *2900

У Омкара есть поднос для пирогов с \(k\) местами (\(2 \leq k \leq 20\)). Каждое место на подносе содержит либо шоколадный пирог, либо тыквенный пирог. Омкару не нравится, как пироги расположены в настоящее время, и у него есть другое идеальное расположение, которое он предпочел бы этому.

Чтобы помочь Омкару, \(n\) эльфов построились в очередь на замену пирогов на подносе. \(j\)-й слева эльф способен поменять пироги на позициях \(a_j\) и \(b_j\) местами.

Чтобы максимально приблизиться к своему идеальному расположению, Omkar может выбрать последовательный подотрезок эльфов и затем пропустить свой поднос через этот подотрезок, начиная слева. Однако, поскольку эльфы приложили столько усилий, чтобы собраться в строку, они просят, чтобы выбранный Омкаром подотрезок содержал как минимум \(m\) (\(1 \leq m \leq n\)) эльфов.

Формально, Omkar может выбрать два целых числа \(l\) и \(r\), удовлетворяющих \(1 \leq l \leq r \leq n\) и \(r - l + 1 \geq m\), после чего сначала будут поменяны пироги в позициях \(a_l\) и \(b_l\), затем пироги в позициях \(a_{l + 1}\) и \(b_{l + 1}\) и т.д. пока, наконец, не будут поменяны местами пироги \(a_r\) и \(b_r\).

Помогите Омкару выбрать подотрезок эльфов таким образом, чтобы количество позиций в итоговой расстановке Омкара, содержащих тот же тип пирога, что и в его идеальной расстановке, было максимально возможным. Обратите внимание, что поскольку Омкар обладает большим воображением, может случиться так, что количество пирогов каждого типа в его первоначальном расположении и в его идеальном расположении не совпадают.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \leq m \leq n \leq 10^6\) и \(2 \leq k \leq 20\)) — число эльфов, минимальную длину подотрезка и число мест в подносе Омкара соответственно.

Вторая и третья строки содержат по строке длиной \(k\), состоящей из \(0\) и \(1\), которые представляют собой начальное расположение пирогов и идеальное расположение пирогов; \(j\)-й символ в каждой строке равен \(0\), если \(j\)-е место в расположении содержит шоколадный пирог, и равен \(1\), если \(j\)-е место в расположении содержит тыквенный пирог. Не гарантируется, что две строки имеют одинаковое количество \(0\) или одинаковое количество \(1\).

Ниже следуют \(n\) строк. \(j\)-я из этих строк содержит два целых числа \(a_j\) и \(b_j\), (\(1 \leq a_j, b_j \leq k\), \(a_j \neq b_j\)), которые указывают на то, что \(j\)-й эльф слева может поменять местами пироги в подносе на позициях \(a_j\) и \(b_j\).

Выходные данные

Выводите две строки.

Первая строка должна содержать одно целое \(s\) (\(0 \leq s \leq k\)), равное количеству позиций, которые содержат один и тот же тип пирога в окончательном расположении Омкара и в идеальном расположении Омкара; \(s\) должно быть максимально возможным.

Вторая строка должна содержать два целых числа \(l\) и \(r\), удовлетворяющих \(1 \leq l \leq r \leq n\) и \(r - l + 1 \geq m\), обозначающих, что Омкар должен пропустить свой поднос через подотрезок \(l, l + 1, \dots, r\), чтобы добиться конечного расположения в котором есть \(s\) позиций, в которых тот же тип пирога, что и в идеальном расположении.

Если ответов несколько, то можно вывести любой из них.

Примечание

В первом примере, изменения будут проходить вот так:

  • Поменяйте \(1\) и \(3\): 11000 становится 01100
  • Поменяйте \(3\) и \(5\): 01100 становится 01001
  • Поменяйте \(4\) и \(2\): 01001 становится 00011
Окончательная расстановка такая же, как и у идеального пирога 00011, поэтому есть \(5\) позиций с тем же типом пирога, что и в оптимальной.

Во втором примере, изменения будут идти вот так:

  • Поменяйте \(1\) и \(3\): 11000 становится 01100
  • Поменяйте \(1\) и \(5\): 01100 становится 01100
  • Поменяйте \(4\) и \(2\): 01100 становится 00110
  • Поменяйте \(1\) и \(5\): 00110 становится 00110
Окончательная расстановка имеет \(3\) позиции с тем же типом пирога, что и идеальная расстановка 00011, это позиции \(1\), \(2\) и \(4\). В этом случае подотрезок эльфов \((l, r) = (2, 3)\) более оптимален, но этот подотрезок имеет только длину \(2\) и поэтому не удовлетворяет ограничению, заключающемуся в том, что подотрезок должен иметь длину не менее \(m = 3\).

H. ZS тасует карты

дп Комбинаторика математика Теория вероятностей *3000

У zscoder есть колода из \(n+m\) карт, изготовленная по индивидуальному заказу, которая состоит из \(n\) карт пронумерованных от \(1\) до \(n\) и \(m\) джокеров. Так как zscoder одинок, он хочет поиграть с сам с собой, используя эти карты.

Изначально колода перетасовывается в случайном порядке и кладется на стол. У zscoder есть изначально пустое множество \(S\).

Каждую секунду zscoder вытягивает верхнюю карту из колоды.

  • Если на карте написано число \(x\), zscoder снимает карту и добавляет \(x\) в множество \(S\).
  • Если извлеченная карта является джокером, zscoder помещает все карты обратно в колоду и перетасовывает (равномерно случайным образом) все \(n+m\) карт, получая новую колоду (следовательно, новая колода также содержит все карты от \(1\) до \(n\) и \(m\) джокеров). Затем, если \(S\) в настоящее время содержит все элементы от \(1\) до \(n\), игра заканчивается. Перетасовка колоды не занимает времени.

Какое матожидание количества секунд до окончания игры? Можно показать, что ответ можно записать в виде \(\frac{P}{Q}\), где \(P, Q\)  — взаимно простые целые числа, где \(Q \neq 0 \bmod 998244353\). Выведите значение \((P \cdot Q^{-1})\) по модулю \(998244353\).

Входные данные

Единственная строка содержит два целых числа, \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^{6}\)).

Выходные данные

Выведите единственное целое число, значение \((P \cdot Q^{-1})\) по модулю \(998244353\).

Примечание

Для первого примера можно доказать, что ожидаемое время до окончания игры составляет \(5\) секунд.

Для второго примера можно доказать, что ожидаемое время до окончания игры составляет \(\frac{28}{3}\)секунды.

D. Рарити и новое платье

дп кратчайшие пути поиск в глубину и подобное реализация *2100

В бутике Карусель вновь кипит работа! Рарити решила посетить бал пони и для этого ей, конечно, необходимо новое платье, ведь выходить в свет в одном и том же платье несколько раз является признаком дурного тона. Для того чтобы сшить платье, ей прежде всего нужна выкройка, которую она вырежет из прямоугольного куска разноцветной ткани.

Кусок разноцветной ткани состоит из \(n \times m\) отдельных квадратных лоскутков. Так как Рарити любит платья со вкусом, выкройка должна быть целиком составлена из лоскутков одного цвета. Выкройка должна быть квадратной и, так как Рарити обожает ромбы, его стороны должны находиться под углом \(45^{\circ}\) к сторонам куска ткани (так он больше всего похож на классическое представление ромба).

Примеры подходящих выкроек: Примеры неподходящих выкроек: Первая состоит из лоскутков разного цвета, вторая выходит за границы куска ткани, третья не является квадратом со сторонами под углом \(45^{\circ}\) к сторонам куска ткани.

Рарити интересно, сколько существует вариантов вырезать выкройку, которая удовлетворяет всем нужным условиям. Помогите ей удовлетворить свое любопытство, чтобы она могла продолжать работу над своим новым шедевром!

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2000\)). Каждая из следующих \(n\) строк содержит \(m\) символов — строчных латинских букв, \(j\)-я из которых соответствует лоскутку в текущей строке и \(j\)-м столбце. Лоскутки с одинаковыми буквами имеют одинаковые цвета, с различными — различные.

Выходные данные

Выведите единственное число — количество способов вырезать выкройку, чтобы удовлетворить условия Рарити.

Примечание

В первом тесте из условия подходят все выкройки размера \(1\) и одна размера \(2\).

Во втором тесте из условия подходят только выкройки размера \(1\).

E1. Искорка и древний свиток (упрощенная версия)

дп реализация Строки строковые суфф. структуры хэши *2800

Это более простая версия задачи E с меньшими ограничениями.

Сумеречная Искорка получила новое задание от принцессы Селестии. В этот раз Искорке нужно расшифровать древний свиток, содержащий важные знания о происхождении пони.

Чтобы скрыть важнейшую информацию от злых глаз, старейшины пони заколдовали свиток. Заклинание вставляет ровно одну букву в любое место каждого словa, к которому оно применено. Чтобы сделать путь к знанию более запутанным, старейшины выбрали некоторые из слов свитка и применили к ним заклинание.

Сумеречная Искорка знает, что старейшины во всем почитали порядок, поэтому изначально свиток содержал слова в лексикографически неубывающем порядке. Искорке нужно удалить по одной букве из некоторых слов в свитке (чтобы отменить заклинание), для того чтобы получить какую-то версию изначального свитка.

К сожалению, Искорка не всегда может однозначно восстановить древний свиток. Чтобы не упустить важные знания, ей придется перебрать все варианты изначального свитка и найти нужный. Чтобы оценить максимальное время, которое Искорка потратит на работу, ей нужно знать количество вариантов, которые ей нужно перебрать. Она просит вас найти это количество! Так как это количество может быть слишком большим, Искорке достаточно лишь знать его по модулю \(10^9+7\), остальную часть она сможет оценить сама.

Могло случиться так, что принцесса Селестия отправила неверный свиток, и Искорка не сможет получить никакую версию изначального свитка.

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — количество слов в свитке. \(i\)-я из следующих \(n\) строк содержит строку, состоящую из строчных букв латинского алфавита — \(i\)-е слово свитка. Длина каждого слова больше либо равна \(1\). Суммарная длина всех слов не превосходит \(20000\).

Выходные данные

Выведите одно целое число — количество вариантов получить версию оригинала из свитка по модулю \(10^9+7\).

Примечание

Заметьте, что старейшины могли написать пустое слово (но тогда они точно применили к нему заклинание, и таким образом это слово теперь имеет длину \(1\)).

E2. Искорка и древний свиток (усложненная версия)

дп реализация Строки строковые суфф. структуры хэши *3200

Это более сложная версия задачи E с большими ограничениями.

Сумеречная Искорка получила новое задание от принцессы Селестии. В этот раз Искорке нужно расшифровать древний свиток, содержащий важные знания о происхождении пони.

Чтобы скрыть важнейшую информацию от злых глаз, старейшины пони заколдовали свиток. Заклинание вставляет ровно одну букву в любое место каждого словa, к которому оно применено. Чтобы сделать путь к знанию более запутанным, старейшины выбрали некоторые из слов свитка и применили к ним заклинание.

Сумеречная Искорка знает, что старейшины во всем почитали порядок, поэтому изначально свиток содержал слова в лексикографически неубывающем порядке. Искорке нужно удалить по одной букве из некоторых слов в свитке (чтобы отменить заклинание), для того чтобы получить какую-то версию изначального свитка.

К сожалению, Искорка не всегда может однозначно восстановить древний свиток. Чтобы не упустить важные знания, ей придется перебрать все варианты изначального свитка и найти нужный. Чтобы оценить максимальное время, которое Искорка потратит на работу, ей нужно знать количество вариантов, которые ей нужно перебрать. Она просит вас найти это количество! Так как это количество может быть слишком большим, Искорке достаточно лишь знать его по модулю \(10^9+7\), остальную часть она сможет оценить сама.

Могло случиться так, что принцесса Селестия отправила неверный свиток, и Искорка не сможет получить никакую версию изначального свитка.

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество слов в свитке. \(i\)-я из следующих \(n\) строк содержит строку, состоящую из строчных букв латинского алфавита — \(i\)-е слово свитка. Длина каждого слова хотя бы один. Суммарная длина всех слов не превосходит \(10^6\).

Выходные данные

Выведите одно целое число — количество вариантов получить версию оригинала из свитка по модулю \(10^9+7\).

Примечание

Заметьте, что старейшины могли написать пустое слово (но тогда они точно применили к нему заклинание, и таким образом это слово теперь имеет длину \(1\)).

A. Boboniu общается с Du

дп жадные алгоритмы сортировки *1800

Слышали ли вы когда-нибудь о мессенджере QQ? В групповых чатах QQ администратор может заглушить пользователя на несколько дней.

В групповом чате Boboniu, есть человек, которого зовут Du Yi, который любит подшучивать над Boboniu каждый день.

Du будет общаться в чате на протяжении \(n\) дней. В \(i\)-й день:

  • Если Du может разговаривать, он подшутит над Boboniu с фактором веселья \(a_i\). Но, после этого, он может быть заглушен, в зависимости от настроения Boboniu.
  • Иначе, Du не будет ничего делать.

Настроение Boboniu это константа \(m\). В \(i\)-й день:

  • Если Du может разговаривать и \(a_i>m\), тогда Boboniu разозлится и заглушит его на \(d\) дней, это означает, что Du не сможет говорить в дни \(i+1, i+2, \cdots, \min(i+d,n)\).
  • Иначе, Boboniu не будет ничего делать.

Итоговой фактор веселья это сумма факторов веселья в дни, когда Du мог разговаривать.

Du попросил вас найти наибольший возможный фактор веселья по всем перестановкам \(a\).

Входные данные

В первой строке записаны три целых числа \(n\), \(d\) и \(m\) (\(1\le d\le n\le 10^5,0\le m\le 10^9\)).

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \ldots,a_n\) (\(0\le a_i\le 10^9\)).

Выходные данные

Выведите одно целое число: максимальный итоговый фактор веселья по всем перестановкам \(a\).

Примечание

В первом примере, вы можете переставить \(a'=[15, 5, 8, 10, 23]\). Тогда история общения Du будет выглядеть следующим образом:

  1. Подшутить над Boboniu с фактором веселья \(15\).
  2. Быть заглушенным.
  3. Быть заглушенным.
  4. Подшутить над Boboniu с фактором веселья \(10\).
  5. Подшутить над Boboniu с фактором веселья \(23\).

Таким образом, итоговый фактор веселья равен \(48\).

D. Boboniu и Jianghu

Деревья дп жадные алгоритмы сортировки *2800

После того как Boboniu закончил строительство своего Jianghu, он занимался кунг-фу на этих горах каждый день.

Boboniu разработал карту для своих \(n\) гор. Он использовал \(n-1\) дорогу чтобы соединить все \(n\) гор. Все горы связны с помощью дорог.

Для \(i\)-й горы, Boboniu оценил скучность кунг-фу на ней как \(t_i\). Он также оценил высоту каждой горы как \(h_i\).

Путь это такая последовательность гор \(M\), что для всех \(i\) (\(1 \le i < |M|\)), существует дорога между \(M_i\) и \(M_{i+1}\). Boboniu считает путь испытанием если для всех \(i\) (\(1\le i<|M|\)), \(h_{M_i}\le h_{M_{i+1}}\).

Boboniu хочет разделить все \(n-1\) дорог на несколько испытаний. Обратите внимание, что каждая дорога должна встречаться ровно в одном испытании, но гора может встречаться в нескольких испытаниях.

Boboniu хочет минимизировать суммарную скучность всех испытаний. Скучность испытания \(M\) это сумма скучностей всех гор в ней, т.е. \(\sum_{i=1}^{|M|}t_{M_i}\).

Он попросил вас найти минимальную возможную суммарную скучность всех испытаний. В награду за вашу работу, вы станете охранником в его Jianghu.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)), обозначающее число гор.

Во второй строке записано \(n\) целых чисел \(t_1, t_2, \ldots, t_n\) (\(1 \le t_i \le 10^6\)), обозначающих скучность исполнения кунг-фу для Boboniu на каждой из гор.

В третьей строке записаны \(n\) целых чисел \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le 10^6\)), описывающих высоты всех гор.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u_i\), \(v_i\) (\(1 \le u_i, v_i \le n, u_i \neq v_i\)), обозначающих концы дороги. Гарантируется, что все горы связны по дорогам.

Выходные данные

Выведите одно целое число: минимальную возможную суммарную скучность всех испытаний.

Примечание

В первом примере:

На картинке, чем светлее точка, тем выше гора, которую она представляет. Одно из лучших разделений это:

  • Испытание \(1\): \(3 \to 1 \to 2\)
  • Испытание \(2\): \(5 \to 2 \to 4\)

Суммарно скучность для Boboniu равна \((30 + 40 + 10) + (20 + 10 + 50) = 160\). Можно показать, что это является минимальной возможной скучностью.

C. Boboniu и битовые операции

битмаски дп жадные алгоритмы Перебор *1600

Boboniu нравятся битовые операции, он решил поиграть с вами в игру.

Boboniu дает вам две последовательности неотрицателных целых чисел \(a_1,a_2,\ldots,a_n\) and \(b_1,b_2,\ldots,b_m\).

Для каждого \(i\) (\(1\le i\le n\)), вам нужно выбрать \(j\) (\(1\le j\le m\)) и определить \(c_i=a_i\& b_j\), где \(\&\) обозначает операцию побитовое И. Обратите внимание, что вы можете выбрать одинаковые \(j\) для разных \(i\).

Найдите минимальное возможное \(c_1 | c_2 | \ldots | c_n\), где \(|\) обозначает операцию побитовое ИЛИ.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1\le n,m\le 200\)).

Во второй строке записаны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0\le a_i < 2^9\)).

В третьей строке записаны \(m\) целых чисел \(b_1,b_2,\ldots,b_m\) (\(0\le b_i < 2^9\)).

Выходные данные

Выведите одно целое число: минимальное возможное значение \(c_1 | c_2 | \ldots | c_n\).

Примечание

Для первого примера, рассмотрим \(c_1=a_1\& b_2=0\), \(c_2=a_2\& b_1=2\), \(c_3=a_3\& b_1=0\), \(c_4 = a_4\& b_1=0\). Следовательно, \(c_1 | c_2 | c_3 |c_4 =2\), и это минимальный возможный ответ.

C. Monster Invaders

дп жадные алгоритмы реализация *2300

Ziota нашел игру, которая назыается «Monster Invaders».

Аналогично другим RPG стрелялкам, в «Monster Invaders» требуется уничтожать монстров и боссов с помощью оружия.

Для простоты, мы рассмотрим только два вида монстров и три вида оружия.

А именно, два вида монстров это:

  • обычный монстр с \(1\) hp.
  • босс с \(2\) hp.

И три вида оружия:

  • Пистолет, наносит \(1\) hp урона одному монстру, время перезарядки равно \(r_1\)
  • Лазерная пушка, наносит \(1\) hp урона всем монстрам в данном уровне (включая босса), время перезарядки равно \(r_2\)
  • AWP, мгновенно убивает любого монстра, время перезарядки равно \(r_3\)

Исходно оружия незаряжены, и Ziota не может перезаряжать несколько оружий одновременно.

Этапы в игре могут быть описаны массивом \(a_1, a_2, \ldots, a_n\), в котором \(i\)-й этап содержит \(a_i\) обычных монстров и одного босса. Из-за натуры игры, Ziota не может использовать пистолет (оружие первого типа) или AWP (оружие третьего типа) чтобы выстрелить в босса, до того как будут убиты все \(a_i\) обычных монстров.

Если Ziota ранит босса, но не убивает его полностью, он обязан уйти с текущего этапа на любой соседний этап (соседние к этапу \(i\) \((1 < i < n)\) это этапы \(i - 1\) и \(i + 1\), единственный сосед этапа \(1\) это этап \(2\), единственный этап соседний к этапу \(n\) это \(n - 1\)). Ziota также может уйти в любом соседний уровень в любой момент времени. Каждый переход между соседними уровнями выполняется с помощью портала, с временем телепортации \(d\).

Чтобы не повредить пространственно-временной континуум внутри игры, запрещено перезаряжаться или стрелять в монстров во время телепортации.

Ziota начинает игру на этапе 1. Его задача довольно проста, убить всех монстров на всех этапах. Он хочет узнать минимальное время, которое ему нужно, чтобы этого добиться (вы можете считать, что выстрел в монстров происходит мгновенно и у него есть бесконечное количество патронов для каждого оружия). Пожалуйста, помогите ему найти это значение.

Входные данные

В первой строке записаны пять целых чисел, разделенных пробелами: \(n\) \((2 \le n \le 10^6)\) — количество этапов, \(r_1, r_2, r_3\) \((1 \le r_1 \le r_2 \le r_3 \le 10^9)\) — времена перезарядки трех оружий, \(d\) \((1 \le d \le 10^9)\) — время перехода между соседними уровнями.

Во второй строке записаны \(n\) разделенных пробелами целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 10^6, 1 \le i \le n)\).

Выходные данные

Выведите одно целое число, минимальное время, которое требуется для прохождения игры.

Примечание

В первом примере, оптимальная стратегия это:

  • Используйте пистолет чтобы убить трех обычных монстров и AWP, чтобы убить босса (Итоговое время равно \(1\cdot3+4=7\))
  • Переместитесь на этап два (Итоговое время \(7+3=10\))
  • Используйте пистолет дважды и AWP чтобы убить босса (Итоговое время \(10+1\cdot2+4=16\))
  • Переместитесь на этап три (Итоговое время \(16+3=19\))
  • Используйте лазерную пушку, теперь мы обязаны переместиться на этап два или четыре, мы движемся на этап четыре (Итоговое время \(19+3+3=25\))
  • Используйте пистолет один раз, используйте AWP, чтобы убить босса (Итоговое время \(25+1\cdot1+4=30\))
  • Двигайтесь обратно на этап три (Итоговое время \(30+3=33\))
  • Убейте босса на третьем этапе пистолетом (Итоговое время \(33+1=34\))

Обратите внимание, что здесь мы останавливаемся не на этапе \(n\), а когда все боссы убиты.

C. Хорошие подотрезки

дп математика Структуры данных *1600

Вам задан массив \(a_1, a_2, \dots , a_n\), состоящий из чисел от \(0\) до \(9\). Подотрезок этого массива \(a_l, a_{l+1}, a_{l+2}, \dots , a_{r-1}, a_r\) хороший, если сумма чисел на этом подотрезке равна длине этого подотрезка (\(\sum\limits_{i=l}^{r} a_i = r - l + 1\)).

Например, если \(a = [1, 2, 0]\), то есть \(3\) хороших подотрезка: \(a_{1 \dots 1} = [1], a_{2 \dots 3} = [2, 0]\) и \(a_{1 \dots 3} = [1, 2, 0]\).

Посчитайте количество хороших подотрезков массива \(a\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) десятичных цифр, где \(i\)-я цифра равна значению \(a_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите ответ — количество хороших подотрезков массива \(a\).

Примечание

Первый набор входных данных рассмотрен в условии.

Во втором наборе входных данных есть \(6\) хороших подотрезков: \(a_{1 \dots 1}\), \(a_{2 \dots 2}\), \(a_{1 \dots 2}\), \(a_{4 \dots 4}\), \(a_{5 \dots 5}\) и \(a_{4 \dots 5}\).

В третьем наборе входных данных есть только один хороший подотрезок: \(a_{2 \dots 6}\).

D. Цветные прямоугольники

дп жадные алгоритмы сортировки *1800

Даны три мультимножества пар цветных палок:

  • \(R\) пар красных палок, у первой пары длины равны \(r_1\), у второй пары длины равны \(r_2\), \(\dots\), у \(R\)-й пары длины равны \(r_R\);
  • \(G\) пар зеленых палок, у первой пары длины равны \(g_1\), у второй пары длины равны \(g_2\), \(\dots\), у \(G\)-й пары длины равны \(g_G\);
  • \(B\) пар синих палок, у первой пары длины равны \(b_1\), у второй пары длины равны \(b_2\), \(\dots\), у \(B\)-й пары длины равны \(b_B\).

Вы собираете прямоугольники из этих пар палок следующим образом:

  1. взять пару палок одного цвета;
  2. взять пару палок другого цвета, отличного от первого;
  3. прибавить площадь полученного прямоугольника к суммарной площади.

В итоге получатся такие прямоугольники, что противоположные стороны у них одного цвета, а соседние стороны различных цветов.

Каждая пара палок может быть использована не более одного раза, некоторые пары можно не использовать. Не разрешается разбивать пару палок на отдельные палки.

Какую максимальную суммарную площадь можно получить?

Входные данные

В первой строке записаны три целых числа \(R\), \(G\), \(B\) (\(1 \le R, G, B \le 200\)) — количество пар красных палок, количество пар зеленых палок и количество пар синих палок.

Во второй строке записаны \(R\) целых чисел \(r_1, r_2, \dots, r_R\) (\(1 \le r_i \le 2000\)) — длины палок в каждой паре красных палок.

В третьей строке записаны \(G\) целых чисел \(g_1, g_2, \dots, g_G\) (\(1 \le g_i \le 2000\)) — длины палок в каждой паре зеленых палок.

В четвертой строке записаны \(B\) целых чисел \(b_1, b_2, \dots, b_B\) (\(1 \le b_i \le 2000\)) — длины палок в каждой паре синих палок.

Выходные данные

Выведите максимально возможную суммарную площадь построенных прямоугольников.

Примечание

В первом примере можно построить один из следующих прямоугольников: красный и зеленый со сторонами \(3\) и \(5\), красный и синий со сторонами \(3\) и \(4\) и зеленый и синий со сторонами \(5\) и \(4\). Лучшая площадь из них равна \(4 \times 5 = 20\).

Во втором примере лучшие прямоугольники: красный/синий \(9 \times 8\), красный/синий \(5 \times 5\), зеленый/синий \(2 \times 1\). Суммарная площадь равна \(72 + 25 + 2 = 99\).

В третьем примере лучшие прямоугольники: красный/зеленый \(19 \times 8\) и красный/синий \(20 \times 11\). Суммарная площадь равна \(152 + 220 = 372\). Обратите внимание, что больше прямоугольников нельзя построить, потому что не разрешается иметь обе взятые пары одного цвета.

F. Спорные раунды

Бинарный поиск дп жадные алгоритмы Структуры данных *2500

Алиса и Боб играют в игру. Игра состоит из нескольких сетов, и каждый сет состоит из нескольких раундов. Каждый раунд выиграл либо Боб, либо Алиса, и сет считается завершенным, когда один из игроков выиграл \(x\) раундов подряд. Например, если Боб выиграл пять раундов подряд и \(x = 2\), то завершилось два сета.

Вы знаете, что Алиса и Боб уже сыграли \(n\) раундов и вы знаете результаты нескольких раундов. Для каждого \(x\) от \(1\) до \(n\), посчитайте максимальное количество сетов, которое могло быть завершено, если сет считается завершенным, когда один из игроков выиграл \(x\) раундов подряд. Если последний сет не завершен — то учитывать его не нужно.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 10^6\)) — количество раундов.

Вторая строка содержит строку \(s\) длины \(n\) — описание раундов. Если \(i\)-й элемент строки равен 0, то Алиса выиграла \(i\)-й раунд; если равен 1 — то Боб выиграл \(i\)-й раунд, а если равен ? — то вы не знаете, кто выиграл \(i\)-й раунд.

Выходные данные

В единственной строке выведите \(n\) чисел. \(i\)-е должно быть равно максимальному количество сетов, которое могло быть завершено, если сет считается завершенным когда один из игроков выиграл \(i\) раундов подряд.

Примечание

Рассмотрим первый набор входных данных:

  • если \(x = 1\) и \(s = 110000\) или \(s = 111000\) то есть шесть завершенных сетов;
  • если \(x = 2\) и \(s = 110000\) то есть три завершенных сета;
  • если \(x = 3\) и \(s = 111000\) то есть два завершенных сета;
  • если \(x = 4\) и \(s = 110000\) то есть один завершенный сет;
  • если \(x = 5\) то завершенных сетов нет;
  • если \(x = 6\) то завершенных сетов нет.

F. Очередное подмножество отрезков

графы дп сортировки Структуры данных *2300

Вам даны \(n\) отрезков на координатной оси \(OX\). \(i\)-й отрезок имеет границы \([l_i; r_i]\). Все точки \(x\), для которых выполняется условие \(l_i \le x \le r_i\), принадлежат \(i\)-му отрезку.

Ваша задача — выбрать такое максимальное по размеру (количеству отрезков) подмножество заданного множества отрезков, что каждая пара отрезков в этом подмножестве либо не пересекается либо же один из них лежит внутри другого.

Два отрезка \([l_i; r_i]\) и \([l_j; r_j]\) не пересекаются, если у них нет общих точек. Например, отрезки \([1; 2]\) и \([3; 4]\), \([1; 3]\) и \([5; 5]\) не пересекаются, а отрезки \([1; 2]\) и \([2; 3]\), \([1; 2]\) и \([2; 2]\) пересекаются.

Отрезок \([l_i; r_i]\) лежит внутри отрезка \([l_j; r_j]\), если \(l_j \le l_i\) и \(r_i \le r_j\). Например, отрезки \([2; 2]\), \([2, 3]\), \([3; 4]\) и \([2; 4]\) лежат внутри отрезка \([2; 4]\), а \([2; 5]\) и \([1; 4]\) — нет.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 3000\)) — количество отрезков. Следующие \(n\) строк описывают отрезки. \(i\)-й отрезок задан двумя целыми числами \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le 2 \cdot 10^5\)), где \(l_i\) — левая граница \(i\)-го отрезка, а \(r_i\) — правая граница \(i\)-го отрезка.

Дополнительное ограничение на входные данные: в заданном списке отрезков нет дубликатов.

Гарантируется, что сумма \(n\) не превосходит \(3000\) (\(\sum n \le 3000\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ: максимально возможный размер такого подмножества заданного множества отрезков, что каждая пара отрезков в этом подмножестве либо не пересекается, либо же один из них лежит внутри другого.

D. Два пути

графы Деревья дп кратчайшие пути поиск в глубину и подобное *1900

Как вы знаете, Васин брат живет во Флатландии. Во Флатландии n городов, соединенных n - 1 двусторонней дорогой. Города пронумерованы от 1 до n. Из любого города можно добраться до любого другого двигаясь по дорогам.

Компания «Два пути», в которой работает Васин брат, выиграла тендер на ремонт двух путей во Флатландии. Путем называется последовательность различных городов, последовательно соединенных дорогами. Пути, которые надо отремонтировать, компания может выбрать самостоятельно. Единственное условие, накладываемое тендером — они не должны пересекаться (то есть иметь общих городов).

Известно, что прибыль, которую получит компания «Два пути», равна произведению длин выбранных двух путей. Считая длину каждой дороги равной 1, а длину пути равной количеству дорог в ней, найдите максимальную возможную прибыль компании.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 200), где n — количество городов в стране. Далее в n - 1 строке записаны сами дороги. Каждая строка содержит пару номеров соединяемых городов ai, bi (1 ≤ ai, bi ≤ n).

Выходные данные

Выведите максимальную возможную прибыль.

E. Верблюды

дп *1900

Вася очень любит рисовать верблюдов: одногорбых, двугорбых, трехгорбых и так далее. Верблюда он рисует соединяя точки на координатной плоскости. Сейчас он рисует t-горбых верблюдов, изображая их ломанными на плоскости. Каждая ломанная состоит из n вершин с координатами (x1, y1), (x2, y2), ..., (xn, yn). Первая вершина имеет координату x1 = 1, вторая x2 = 2 и т.д. Координаты yi могут быть любыми, но должны удовлетворять следующим условиям:

  • должно существовать ровно t горбов, то есть таких индексов j (2 ≤ j ≤ n - 1), что yj - 1 < yj > yj + 1,
  • должно существовать ровно t - 1 таких индексов j (2 ≤ j ≤ n - 1), что yj - 1 > yj < yj + 1,
  • никакой отрезок ломанной не должен быть параллелен оси Ox,
  • все yi — целые числа от 1 до 4.

Для серии рисунков с изображением t-горбых верблюдов Вася хочет купить блокнот, но не знает сколько страниц ему понадобится. Выведите количество различных ломанных для изображения t-горбых верблюдов для заданного числа n.

Входные данные

Первая строка содержит пару целых чисел n и t (3 ≤ n ≤ 20, 1 ≤ t ≤ 10).

Выходные данные

Выведите искомое количество t-горбых верблюдов.

Примечание

В первом тесте последовательности y-координат у шести верблюдов равны: 123421, 123431, 123432, 124321, 134321 и 234321 (каждая цифра соответствует одному значению yi).

E. Новогодняя гирлянда

дп Комбинаторика *2600

В то время как Геральд, Александр, Сергей и Геннадий уже занимаются привычными новогодними делами, Эдвард второпях наряжает новогоднюю елку. А какая елка без гирлянды? У Эдварда есть лампочки m цветов, и он хочет составить из них гирлянду — последовательность длины L. Елка Эдварда состоит из n ярусов, и Эдвард планирует расположить гирлянду таким образом, чтобы первые l1 лампочек гирлянды украшали первый ярус, следующие l2 лампочек — второй ярус и так далее, на последнем n-ом ярусе окажутся последние ln лампочек, Эдвард — любитель математических головоломок, поэтому его неожиданно заинтересовал вопрос: сколько у него различных вариантов собрать гирлянду, чтобы выполнялись оба условия:

  1. Любые две подряд идущие лампочки на каждом ярусе должны иметь разные цвета.
  2. Множества цветов лампочек на каждых двух соседних ярусах должны быть различны. Здесь рассматриваются неупорядоченные множества (не мультимножества), в которых каждый цвет встречается не более одного раза. То есть количество лампочек значения не имеет.

Помогите Эдварду получить ответ на мучающий его вопрос, иначе он не успеет нарядить елку до Нового года. Считайте, что у Эдварда бесконечное количество лампочек каждого из m цветов, причем использовать все m цветов необязательно. Гирлянды считаются различными, если они как последовательности различаются хотя бы в одной позиции. Вычислите ответ на задачу по заданному модулю p.

Входные данные

В первой строке заданы три целых числа n, m и p (1 ≤ n, m ≤ 106, 2 ≤ p ≤ 109) — количество ярусов елки, количество цветов лампочек и модуль, соответственно. Следующая строка содержит n целых чисел li (1 ≤ li ≤ 5000, ).

Выходные данные

Выведите одно число — количество гирлянд по модулю p.

Примечание

В первом примере возможны следующие варианты: 121|1|12, 121|1|21, 121|2|12, 121|2|21, 212|1|12, 212|1|21, 212|2|12, 212|2|21. Во втором примере возможны варианты: 12|13, 12|23, 12|31, 12|32 и т.д.

Рисунок к первому примеру:

E. Очистите мультимножество

дп жадные алгоритмы разделяй и властвуй Структуры данных *2200

У вас есть мультимножество, содержащее несколько чисел. Изначально оно содержит \(a_1\) элементов равных \(1\), \(a_2\) элементов равных \(2\), ..., \(a_n\) элементов равных \(n\).

Вы можете применять два типа операций:

  • выбрать два числа \(l\) и \(r\) (\(l \le r\)), а затем удалить один элемент, равный \(l\), один элемент, равный \(l + 1\), ..., и один элемент, равный \(r\) из мультимножества. Эта операция может быть применена, только если каждый элемент от \(l\) до \(r\) встречается хотя бы раз в мультимножестве;
  • выбрать два числа \(i\) и \(x\) (\(x \ge 1\)), а затем удалить \(x\) элементов равных \(i\) из мультимножества. Эта операция может быть применена, только если в мультимножестве есть как минимум \(x\) элементов, равных \(i\).

За какое наименьшее количество операций можно удалить все элементы из мультимножества?

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 5000\)).

Вторая строка содержит \(n\) чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_i \le 10^9\)).

Выходные данные

Выведите одно число — наименьшее количество операций, за которое можно удалить все элементы из мультимножества.

F. x-простые подстроки

дп Перебор поиск в глубину и подобное Строки строковые суфф. структуры *2800

Дано целое число \(x\) и строка \(s\), состоящая из цифр от \(1\) до \(9\) включительно.

Подстрокой строки называется последовательная подпоследовательность этой строки.

Пусть \(f(l, r)\) будет равно сумме цифр в подстроке \(s[l..r]\).

Назовем подстроку \(s[l_1..r_1]\) \(x\)-простой, если

  • \(f(l_1, r_1) = x\);
  • не существует таких значений \(l_2, r_2\), что
    • \(l_1 \le l_2 \le r_2 \le r_1\);
    • \(f(l_2, r_2) \neq x\);
    • \(x\) делится на \(f(l_2, r_2)\).

Разрешено удалять любые символы из строки. Если вы удаляете символ, то две полученные части строки склеиваются, не меняя порядок.

Какое минимальное количество символов надо удалить из строки, чтобы она не содержала \(x\)-простых подстрок? Если \(x\)-простых подстрок нет в данной строке \(s\), то выведите \(0\).

Входные данные

В первой строке записана строка \(s\) (\(1 \le |s| \le 1000\)). \(s\) содержит только цифры от \(1\) до \(9\) включительно.

Во второй строке записано одно целое число \(x\) (\(1 \le x \le 20\)).

Выходные данные

Выведите одно целое число — минимальное количество символов, которые надо удалить из строки, чтобы она не содержала \(x\)-простых подстрок? Если \(x\)-простых подстрок нет в данной строке \(s\), то выведите \(0\).

Примечание

В первом примере в строке две \(8\)-простых подстроки «8» и «53». Можно удалить данные символы, чтобы избавиться от обеих: «116285317». Полученная строка «1162317» не содержит \(8\)-простых подстрок. Также можно удалить такие символы: «116285317».

Во втором примере необходимо просто удалить обе единицы.

В третьем примере нет \(13\)-простых подстрок. В нем вообще нет подстрок с суммой цифр равной \(13\).

В четвертом примере в строке не должно быть ни «34», ни «43». Поэтому необходимо удалить либо все тройки, либо все четверки. Их по \(5\) штук, поэтому можно удалить любые из них.

G. Наемники

битмаски дп Комбинаторика математика Перебор снм *2600

Поликарп играет в (очередную) стратегическую компьютерную игру. В этой игре он управляет армией наемников.

Поликарп хочет собрать свою армию для выполнения задания. Для найма доступны \(n\) наемников, и армия Поликарпа должна состоять из некоторого подмножества множества доступных наемников.

\(i\)-го наемника можно выбрать только в том случае, если итоговое количество выбранных наемников не менее \(l_i\) (иначе этот наемник считает задание слишком опасным) и не более \(r_i\) (он не хочет делить добычу со слишком большим количеством других наемников). Кроме того, \(m\) пар наемников ненавидят друг друга, и из каждой такой пары можно взять на задание не более одного наемника.

Сколько непустых подмножеств наемников Поликарп должен рассмотреть? Другими словами, посчитайте количество подмножеств наемников, которые не содержат пар наемников, ненавидящих друг друга, и размер которых принадлежит отрезку \([l_i, r_i]\) для каждого наемника из подмножества.

Ответ может быть очень большим, поэтому посчитайте его по модулю \(998244353\).

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 3 \cdot 10^5\), \(0 \le m \le \min(20, \dfrac{n(n-1)}{2})\)) — количество наемников и количество пар наемников, ненавидящих друг друга, соответственно.

Далее следуют \(n\) строк, в \(i\)-й из которых заданы два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)).

Далее следуют \(m\) строк, в \(i\)-й из которых заданы два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i < b_i \le n\)), обозначающих, что наемники \(a_i\) и \(b_i\) ненавидят друг друга. Все заданные пары различны.

Выходные данные

Выведите одно целое число — количество подмножеств, удовлетворяющих условию задачи, взятое по модулю \(998244353\).

D. Максимально распределенное дерево

Деревья дп жадные алгоритмы математика поиск в глубину и подобное реализация сортировки теория чисел *1800

Вам задано дерево, состоящее из \(n\) вершин. Вы должны сопоставить каждому из \(n-1\) ребер этого дерева целое число таким образом, чтобы выполнялись следующие условия:

  • каждое число должно быть целым и строго больше \(0\);
  • произведение всех \(n-1\) чисел должно быть равно \(k\);
  • количество \(1\)-ц среди всех \(n-1\) чисел должно быть минимально возможным.

Назовем \(f(u,v)\) сумму чисел на простом пути из вершины \(u\) в вершину \(v\). Также, назовем \(\sum\limits_{i=1}^{n-1} \sum\limits_{j=i+1}^n f(i,j)\) как индекс распределения дерева.

Определите максимально возможный индекс распределения, который можно получить. Так как ответ может быть слишком большим, выведите его по модулю \(10^9 + 7\).

В данной задаче, так как число \(k\) может быть слишком большим, задана факторизация \(k\) на простые числа.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в дереве.

В каждой из следующих \(n-1\) строк заданы ребра: в \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \ne v_i\)) — номера вершин, соединенных \(i\)-м ребром.

В следующей строке задано одно число \(m\) (\(1 \le m \le 6 \cdot 10^4\)) — количество простых в факторизации \(k\).

В следующей строке заданы \(m\) простых чисел \(p_1, p_2, \ldots, p_m\) (\(2 \le p_i < 6 \cdot 10^4\)) такие, что \(k = p_1 \cdot p_2 \cdot \ldots \cdot p_m\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\), сумма \(m\) по всем наборам не превосходит \(6 \cdot 10^4\), и что заданные ребра в каждом наборе образуют дерево.

Выходные данные

Выведите максимально возможный индекс распределения. Так как ответ может быть слишком большим, выведите его по модулю \(10^9+7\).

Примечание

В первом наборе входных данных, один из возможных ответов изображен на рисунке ниже:

В данном случае, \(f(1,2)=1\), \(f(1,3)=3\), \(f(1,4)=5\), \(f(2,3)=2\), \(f(2,4)=4\), \(f(3,4)=2\), и сумма этих \(6\) чисел равна \(17\).

Во втором наборе входных данных, один из возможных ответов изображен ниже:

В этом случае, \(f(1,2)=3\), \(f(1,3)=1\), \(f(1,4)=4\), \(f(2,3)=2\), \(f(2,4)=5\), \(f(3,4)=3\), и сумма этих \(6\) чисел равна \(18\).

C. Star Trek

*особая задача графы Деревья дп игры Комбинаторика матрицы поиск в глубину и подобное *2600

The United Federation of Planets is an alliance of \(N\) planets, they are indexed from \(1\) to \(N\). Some planets are connected by space tunnels. In a space tunnel, a starship can fly both ways really fast. There are exactly \(N-1\) space tunnels, and we can travel from any planet to any other planet in the Federation using these tunnels.

It's well known that there are \(D\) additional parallel universes. These are exact copies of our universe, they have the same planets and space tunnels. They are indexed from \(1\) to \(D\) (our universe has index \(0\)). We denote the planet \(x\) in universe \(i\) by \(P_x^i\). We can travel from one universe to another using dimension portals. For every \(i\) (\(0\leq i \leq D-1\)), we will place exactly one portal that allows us to fly from \(P_{A_i}^i\) to \(P_{B_i}^{i+1}\), for some planet indices \(A_i\) and \(B_i\) (i.e. \(1 \leq A_i, B_i \leq N\)).

Once all the portals are placed, Starship Batthyány will embark on its maiden voyage. It is currently orbiting around \(P_1^0\). Captain Ágnes and Lieutenant Gábor have decided to play the following game: they choose alternately a destination (a planet) to fly to. This planet can be in the same universe, if a space tunnel goes there, or it can be in another universe, if a portal goes there. Their aim is to visit places where no one has gone before. That's why, once they have visited a planet \(P_x^i\), they never go back there (but they can visit the planet \(x\) in another universe). Captain Ágnes chooses the first destination (then Gábor, then Ágnes etc.). If somebody can't choose a planet where they have not been before in his/her turn, he/she loses.

Captain Ágnes and Lieutenant Gábor are both very clever: they know the locations of all tunnels and portals, and they both play optimally. For how many different placements of portals does Captain Ágnes win the game? Two placements are different if there is an index \(i\) (\(0\leq i \leq D-1\)), where the \(i\)th portal connects different pairs of planets in the two placements (i.e \(A_i\) or \(B_i\) differs).

This number can be very big, so we are interested in it modulo \(10^9+7\).

Input

The first line contains two space-separated integers, \(N\) (\(1\leq N \leq 10^{5}\)) – the number of planets and \(D\) (\(1 \leq D \leq 10^{18}\)) – the number of additional parallel universes. Each of the next \(N-1\) lines contains two space-separated integers \(u\) and \(v\) (\(1 \leq u, v \leq N\)), denoting that \(P_u^i\) and \(P_v^i\) are connected by a space tunnel for all \(i\) (\(0 \leq i \leq D\)).

Output

You should print a single integer, the number of possible placements of portals where Captain Ágnes wins modulo \(10^9+7\).

Scoring
\( \begin{array}{|c|c|c|} \hline \text{Subtask} & \text{Points} & \text{Constraints} \\ \hline 1 & 0 & \text{samples}\\ \hline 2 & 7 & N=2 \\ \hline 3 & 8 & N \leq 100 \: \text{and} \: D = 1 \\ \hline 4 & 15 & N \leq 1000 \: \text{and} \: D = 1\\ \hline 5 & 15 & D=1 \\ \hline 6 & 20 & N \leq 1000 \: \text{and} \: D \leq 10^5\\ \hline 7 & 20 & D \leq 10^5\\ \hline 8 & 15 & \text{no additional constraints}\\ \hline \end{array} \)
Note

There is only 1 portal and \(3 \cdot 3 = 9\) different placements. The following 4 placements are when the Captain wins.

C. Chess Rush

*особая задача дп Комбинаторика математика реализация *3200

The mythic world of Chess Land is a rectangular grid of squares with \(R\) rows and \(C\) columns, \(R\) being greater than or equal to \(C\). Its rows and columns are numbered from \(1\) to \(R\) and \(1\) to \(C\), respectively.

The inhabitants of Chess Land are usually mentioned as pieces in everyday language, and there are \(5\) specific types of them roaming the land: pawns, rooks, bishops, queens and kings. Contrary to popular belief, chivalry is long dead in Chess Land, so there are no knights to be found.

Each piece is unique in the way it moves around from square to square: in one step,

  • a pawn can move one row forward (i.e. from row \(r\) to \(r+1\)), without changing columns;
  • a rook can move any number of columns left/right without changing rows OR move any number of rows forward/backward without changing columns;
  • a bishop can move to any square of the two diagonals intersecting at its currently occupied square;
  • a queen can move to any square where a rook or a bishop could move to from her position;
  • and a king can move to any of the \(8\) adjacent squares.
In the following figure, we marked by X the squares each piece can move to in a single step (here, the rows are numbered from bottom to top, and the columns from left to right).

Recently, Chess Land has become a dangerous place: pieces that are passing through the land can get captured unexpectedly by unknown forces and simply disappear. As a consequence, they would like to reach their destinations as fast (i.e. in as few moves) as possible, and they are also interested in the number of different ways it is possible for them to reach it, using the minimal number of steps – because more paths being available could mean lower chances of getting captured. Two paths are considered different if they differ in at least one visited square.

For this problem, let us assume that pieces are entering Chess Land in a given column of row \(1\), and exit the land in a given column of row \(R\). Your task is to answer \(Q\) questions: given the type of a piece, the column it enters row \(1\) and the column it must reach in row \(R\) in order to exit, compute the minimal number of moves it has to make in Chess Land, and the number of different ways it is able to do so.

Input

The first line contains three space-separated integers \(R\), \(C\), and \(Q\) \((1 \leq Q \leq 1000\), \(2 \leq C \leq 1000\) and \(C \leq R \leq 10^9)\) – the number of rows and columns of Chess Land, and the number of questions, respectively. Then \(Q\) lines follow.

Each line consists of

  • a character \(T\), corresponding to the type of the piece in question ('P' for pawn, 'R' for rook, 'B' for bishop, 'Q' for queen and 'K' for king);
  • two integers \(c_1\) and \(c_R\), \(1\leq c_1,c_R\leq C\), denoting that the piece starts from the \(c_1\)-th column of row \(1\), and has to reach the \(c_R\)-th column of row \(R\).
Output

You have to print \(Q\) lines, the \(i\)-th one containing two space separated integers, the answer to the \(i\)-th question: the first one is the minimal number of steps needed, the second is the number of different paths available using this number of steps. Since the answer can be quite large, you have to compute it modulo \(10^9+7\).

If it is impossible to reach the target square, output the line "0 0".

Scoring
\( \begin{array}{|c|c|l|} \hline \text{Subtask} & \text{Points} & \text{Constraints} \\ \hline 1 & 0 & \text{samples}\\ \hline 2 & 8 & T\in\{\text{'P','R','Q'}\}\text{, i.e. all pieces are pawns, rooks or queens} \\ \hline 3 & 15 & T=\text{'B' and } \: C,R\leq 100 \\ \hline 4 & 22 & T=\text{'B'} \\ \hline 5 & 5 & T=\text{'K' and }\:C,R\leq 100\:\text{and}\:Q\leq 50 \\ \hline 6 & 8 & T=\text{'K' and }\:C,R\leq 100\\ \hline 7 & 15 & T=\text{'K' and }\:C\leq 100\\ \hline 8 & 20 & T=\text{'K'}\\ \hline 9 & 7 & \text{no additional constraints}\\ \hline \end{array} \)
Note

You can download the above example and an additional (bigger) sample input here: https://gofile.io/d/GDzwfC

B. Догонялки на дереве

Деревья дп игры поиск в глубину и подобное *1900

Алиса и Боб играют в забавную игру — догонялки на дереве.

В эту игру играют на дереве из \(n\) вершин, пронумерованных от \(1\) до \(n\). Напомним, что дерево на \(n\) вершинах — это неориентированный, связный граф с \(n-1\) ребрами.

Изначально Алиса располагается в вершине \(a\), а Боб — в вершине \(b\). Они ходят по очереди, и Алиса делает первый ход. За свой ход Алиса может перепрыгнуть в вершину с расстоянием не более \(da\) от текущей вершины. Боб же за свой ход может перепрыгнуть в вершину с расстоянием не более \(db\) от текущей вершины. Расстояние между двумя вершинами определяется как количество рёбер на уникальном простом пути между ними. В частности, любому из игроков разрешается остаться на одной и той же вершине в свой ход. Заметим, что при выполнении хода игрок занимает только начальную и конечную вершины своего хода, а не вершины между ними.

Если после не более чем \(10^{100}\) ходов Алиса и Боб занимают одну и ту же вершину, то победителем объявляется Алиса. В противном случае побеждает Боб.

Определите победителя, если оба игрока играют оптимально.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит пять целых чисел \(n,a,b,da,db\) (\(2\le n\le 10^5\), \(1\le a,b\le n\), \(a\ne b\), \(1\le da,db\le n-1\)) — количество вершин, вершину Алисы, вершину Боба, максимальное расстояние прыжка Алисы и максимальное расстояние прыжка Боба, соответственно.

Следующие \(n-1\) строк описывают ребра дерева. \(i\)-я из этих строк содержит два целых числа \(u\), \(v\) (\(1\le u, v\le n, u\ne v\)), обозначающие ребро между вершинами \(u\) и \(v\). Гарантируется, что данный граф является деревом.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую победителя игры: «Alice» или «Bob».

Примечание

В первом наборе входных данных Алиса может выиграть, перейдя к вершине \(1\). Тогда куда бы Боб не двигался дальше, Алиса сможет перейти к той же самой вершине на следующем шаге.

Во втором наборе входных данных у Боба есть следующая победная стратегия. Куда бы Алиса ни двигалась, Боб всегда будет двигаться к той из вершин \(1\) или \(6\), которая более удалена от Алисы.

B. Максимальное произведение

дп жадные алгоритмы Перебор реализация сортировки *1200

Вам дан массив целых чисел \(a_1,a_2,\ldots,a_n\). Найдите максимум \(a_ia_ja_ka_la_t\) по всем пятеркам индексов \((i, j, k, l, t)\) (\(i<j<k<l<t\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1\le t\le 2 \cdot 10^4\)) — количество наборов входных данных. Описание наборов входных данных следует.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(5\le n\le 10^5\)) — размер массива.

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-3\times 10^3\le a_i\le 3\times 10^3\)) — данный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — ответ на задачу.

Примечание

В первом наборе входных данных выбор \(a_1,a_2,a_3,a_4,a_5\) является наилучшим: \((-1)\cdot (-2) \cdot (-3)\cdot (-4)\cdot (-5)=-120\).

Во втором наборе входных данных выбор \(a_1,a_2,a_3,a_5,a_6\) является наилучшим: \((-1)\cdot (-2) \cdot (-3)\cdot 2\cdot (-1)=12\).

В третьем наборе входных данных выбор \(a_1,a_2,a_3,a_4,a_5\) является наилучшим: \((-1)\cdot 0\cdot 0\cdot 0\cdot (-1)=0\).

В четвертом наборе входных данных выбор \(a_1,a_2,a_3,a_4,a_6\) является наилучшим: \((-9)\cdot (-7) \cdot (-5)\cdot (-3)\cdot 1=945\).

D. Дискретные Центробежные Прыжки

графы дп Структуры данных *2200

В Нью-Йорке есть \(n\) красивых небоскребов, высота \(i\)-го равна \(h_i\). Cегодня какие-то негодяи подожгли первые \(n - 1\), и теперь единственное безопасное здание — небоскреб с индексом \(n\).

Назовем прыжок с небоскреба \(i\) на небоскреб \(j\) (\(i < j\)) дискретным, если все небоскребы между ними либо строго меньше по высоте, либо строго больше по высоте. Формально: прыжок дискретный, если \(i < j\) и выполнено одно из условий:

  • \(i + 1 = j\),
  • \(\max(h_{i + 1}, \ldots, h_{j - 1}) < \min(h_i, h_j)\),
  • \(\max(h_i, h_j) < \min(h_{i + 1}, \ldots, h_{j - 1})\).

Вася сейчас стоит на первом небоскребе и хочет еще немножко пожить, поэтому хочет добраться до небоскреба с индексом \(n\) за наименьшее число дискретных прыжков. Помогите ему посчитать это число.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — число небоскребов.

Вторая строка содержит \(n\) целых чисел \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le 10^9\)) — высоты небоскребов.

Выходные данные

Выведите одно число \(k\) — минимальное число дискретных прыжков. Можно показать, что ответ всегда существует.

Примечание

В первом тесте Вася может посещать небоскребы в такой последовательности: \(1 \rightarrow 2 \rightarrow 4 \rightarrow 5\).

Во втором и третьем тестах мы можем достичь последнего небоскреба за один прыжок.

Последовательность прыжков в четвертом тесте: \(1 \rightarrow 3 \rightarrow 5\).

E. Егор в республике Дагестан

графы дп жадные алгоритмы Конструктив кратчайшие пути поиск в глубину и подобное *2500

Егор — известный российский певец, рэпер, актёр и блогер, и наконец-то он решил дать концерт в солнечной республике Дагестан.

В республике есть \(n\) городов, некоторые пары которых соединены \(m\) односторонними дорогами без дополнительных условий. Иными словами, дорожная сеть Дагестана представляет собой произвольный ориентированный граф. Егор собирается прилететь в город \(1\), проехать из него по дорогам вдоль некоторого пути до города \(n\), дать в нём концерт и улететь.

Как и у любого артиста, у Егора есть множество недоброжелателей и слишком назойливых фанатов, поэтому ездить Егор и его команда будут только по безопасным дорогам. В Дагестане есть два типа дорог, чёрные и белые: по чёрным можно безопасно проехать только ночью, а по белым — только утром. Перед началом поездки менеджер Егора составляет расписание: он выбирает для каждого города его тип, чёрный или белый, и если команда посещает какой-то город, то уехать из него она сможет только по одной из дорог соответствующего типа. После определения расписания Егор выбирает любой маршрут из города \(1\) в город \(n\), причём из соображений безопасности этот путь должен быть кратчайшим. Менеджер Егора очень любит Дагестан и хочет задержаться здесь подольше, поэтому он попросил Вас составить такое расписание, чтобы из города \(1\) в город \(n\) не существовало пути вообще, или кратчайший путь был максимально возможной длины.

Путём является один город или последовательность дорог такая что начало каждой дороги в последовательности (кроме первой) является концом предыдущей. Егор может перемещаться вдоль пути, только если все его дороги безопасны.

Длиной пути называется количество дорог в нём. Кратчайшим путём называется путь минимальной длины.

Входные данные

Первая строка содержит числа \(n\), \(m\) (\(1 \leq n \leq 500000\), \(0 \leq m \leq 500000\)) — количество городов и дорог, соответственно.

В \(i\)-й из следующих \(m\) строк даны три целых числа — \(u_i\), \(v_i\) и \(t_i\) (\(1 \leq u_i, v_i \leq n\), \(t_i \in \{0, 1\}\)) — номера городов, соединяемых дорогой, и тип дороги (\(0\) — ночная, \(1\) — утренняя).

Выходные данные

В первой строке выведите длину искомого пути (или \(-1\), если можно подобрать расписание так, чтобы пути из \(1\) в \(n\) не существовало).

Во второй строке выведите искомое расписание — строку из \(n\) целых чисел, где \(i\)-е число равно \(0\), если из \(i\)-го города можно уехать только по ночным дорогам, и \(1\), если только по утренним.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере, если покрасить город \(1\) в белый цвет, кратчайший путь будет состоять из одной дороги, \(1 \rightarrow 3\). Иначе, независимо от цветов остальных городов кратчайший путь будет \(1 \rightarrow 2 \rightarrow 3\).

Во втором примере город \(3\) следует покрасить в чёрный цвет, а из города \(2\) существуют дороги обоих цветов в город \(4\). Обратите внимание: может существовать дорога, соединяющая город с самим собой.

C. Дискретное ускорение

Бинарный поиск дп математика реализация *1500

Рассмотрим дорогу длиной \(l\) метров. Начало дороги имеет координату \(0\), конец дороги имеет координату \(l\).

Есть две машины, первая стоит в начале дороги, вторая стоит в конце дороги. Они начинают ехать одновременно. Первая машина будет ехать от начала дороги к концу, вторая машина будет ехать от конца дороги к началу.

Изначально они будут ехать со скоростью \(1\) метр в секунду. Есть \(n\) флажков, расположенных в различных координатах \(a_1, a_2, \ldots, a_n\). Каждый раз, когда любая из двух машин проезжает мимо флажка, скорость этой машины увеличивается на \(1\) метр в секунду.

Найдите, через какое время машины встретятся (их координаты совпадут).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^4\)): количество наборов входных данных.

В первой строке описания каждого набора входных данных находятся два целых числа \(n\), \(l\) (\(1 \leq n \leq 10^5\), \(1 \leq l \leq 10^9\)): количество флажков и длина дороги.

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) в возрастающем порядке (\(1 \leq a_1 < a_2 < \ldots < a_n < l\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное вещественное число: время, через которое машины встретятся.

Ваш ответ будет признан правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\). Более формально, если ваш ответ \(a\) и ответ жюри \(b\), ваш ответ будет признан правильным, если \(\frac{|a-b|}{\max{(1, b)}} \leq 10^{-6}\).

Примечание

В первом наборе входных данных машины встретятся в координате \(5\).

Первая машина будет в координате \(1\) через \(1\) секунду, и после этого ее скорость увеличится на \(1\) и станет равной \(2\)-м метрам в секунду. Через \(2\) секунды машина окажется в координате \(5\). Итак, первая машина будет в координате \(5\) через \(3\) секунды.

Вторая машина будет в координате \(9\) через \(1\) секунду, и после этого ее скорость увеличится на \(1\) и станет равной \(2\)-м метрам в секунду. Через \(2\) секунды машина окажется в координате \(5\). Итак, вторая машина будет в координате \(5\) через \(3\) секунды.

Во втором наборе входных данных через \(1\) секунду первая машина будет в координате \(1\) и будет иметь скорость, равную \(2\)-м метрам в секунду; вторая машина будет в координате \(9\) и будет иметь скорость \(1\) метр в секунду. Поэтому после этого они встретятся через \(\frac{9-1}{2+1} = \frac{8}{3}\) секунд. Итак, ответ равен \(1 + \frac{8}{3} = \frac{11}{3}\).

D. Прожекторы

Бинарный поиск дп Перебор реализация сортировки Структуры данных *2000

Есть \(n\) грабителей в координатах \((a_1, b_1)\), \((a_2, b_2)\), ..., \((a_n, b_n)\) и \(m\) прожекторов в координатах \((c_1, d_1)\), \((c_2, d_2)\), ..., \((c_m, d_m)\).

За один ход вы можете подвинуть всех грабителей направо (увеличить \(a_i\) всех грабителей на единицу) или подвинуть всех грабителей вверх (увеличить \(b_i\) всех грабителей на единицу). Обратите внимание, что вы должны либо увеличить все \(a_i\), либо все \(b_i\), вы не можете увеличить \(a_i\) некоторых грабителей и \(b_i\) некоторых других грабителей за одну операцию.

Прожектор \(j\) освещает грабителя \(i\), если \(a_i \leq c_j\) и \(b_i \leq d_j\).

Конфигурация грабителей называется безопасной, если ни один прожектор не освещает ни одного грабителя (то есть нет такой пары \(i,j\), что прожектор \(j\) освещает грабителя \(i\)).

Какое минимальное количество ходов нужно сделать, чтобы грабители оказались в безопасной конфигурации?

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 2000\)): количество грабителей и количество прожекторов.

Каждая из следующих \(n\) строк содержит два целых числа \(a_i\), \(b_i\) (\(0 \leq a_i, b_i \leq 10^6\)), координаты грабителей.

Каждая из следующих \(m\) строк содержит два целых числа \(c_i\), \(d_i\) (\(0 \leq c_i, d_i \leq 10^6\)), координаты прожекторов.

Выходные данные

Выведите единственное целое число: минимальное количество ходов, необходимое, чтобы грабители оказались в безопасной конфигурации.

Примечание

В первом тесте вы можете подвинуть всех грабителей направо три раза. После этого будет один грабитель в координатах \((3, 0)\).

Конфигурация грабителей будет безопасной, потому что единственный прожектор не освещает грабителя, так как он в координатах \((2, 3)\), а \(3 > 2\).

Во втором тесте вы можете подвинуть всех грабителей направо два раза и вверх два раза. После этого грабители будут в координатах \((3, 8)\), \((8, 3)\).

Легко увидеть, что такая конфигурация безопасна.

Можно доказать, что невозможно получить безопасную конфигурацию, используя не больше, чем \(3\) хода.

G. Подсчет кластеризаций

бпф графы Деревья дп Комбинаторика снм *2700

В сети компании есть \(n\) компьютеров. Они пронумерованы от \(1\) до \(n\).

Для каждой пары компьютеров \(1 \leq i < j \leq n\) вы знаете значение \(a_{i,j}\): сложность отправки сообщения между компьютерами \(i\) и \(j\). Значения \(a_{i,j}\) для \(i<j\) различны.

Вы хотите разделить компьютеры на \(k\) множеств \(A_1, A_2, \ldots, A_k\), чтобы следующие условия выполнялись:

  • для каждого компьютера \(1 \leq i \leq n\) есть ровно одно множество \(A_j\) такое, что \(i \in A_j\);
  • для каждых двух пар компьютеров \((s, f)\) и \((x, y)\) (\(s \neq f\), \(x \neq y\)) таких, что \(s\), \(f\), \(x\) из одного множества, а \(x\) и \(y\) из разных, выполняется \(a_{s,f} < a_{x,y}\).

Для каждого \(1 \leq k \leq n\) найдите число способов разделить компьютеры на \(k\) групп так, чтобы все упомянутые условия соблюдались. Эти значения могут быть большими, так что вам нужно найти их по модулю \(998\,244\,353\).

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 1500\)): количество компьютеров.

В \(i\)-й из следующих \(n\) строк записаны \(n\) целых чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,n}\) (\(0 \leq a_{i,j} \leq \frac{n (n-1)}{2}\)).

Гарантируется, что:

  • для всех \(1 \leq i \leq n\) выполняется \(a_{i,i} = 0\);
  • для всех \(1 \leq i < j \leq n\) выполняется \(a_{i,j} > 0\);
  • для всех \(1 \leq i < j \leq n\) выполняется \(a_{i,j} = a_{j,i}\);
  • все \(a_{i,j}\) для \(i <j\) различны.
Выходные данные

Выведите \(n\) целых чисел: \(k\)-е из них должно быть равно числу способов разбить компьютеры на \(k\) групп, соблюдая все описанные условия, по модулю \(998\,244\,353\).

Примечание

Ниже приведены все возможные разбиения компьютеров на \(4\) группы для второго примера:

  • \(\{1, 2\}, \{3, 4\}, \{5\}, \{6, 7\}\);
  • \(\{1\}, \{2\}, \{3, 4\}, \{5, 6, 7\}\);
  • \(\{1, 2\}, \{3\}, \{4\}, \{5, 6, 7\}\).

I. Битовая магия

дп математика *3200

Вам дано положительное целое число \(k\) и массив \(a_1, a_2, \ldots, a_n\) неотрицательных различных чисел от \(k\) до \(2^c-1\).

В каждую из следующих \(k\) секунд один элемент выбирается случайно равновероятно из всех \(n\) элементов и уменьшается на \(1\).

Для каждого целого числа \(x\), \(0 \leq x \leq 2^c - 1\), вам нужно найти вероятность, что в конце побитовый XOR всех чисел в массиве равен \(x\).

Каждое из этих значений может быть представлено в виде несократимой дроби \(\frac{p}{q}\), и вам нужно найти \(p \cdot q^{-1}\) по модулю \(998\,244\,353\).

Входные данные

В первой строке находятся три целых числа \(n, k, c\) (\(1 \leq n \leq (2^c - k)\), \(1 \leq k \leq 16\), \(1 \leq c \leq 16\)).

Во второй строке находятся \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(k \leq a_i \leq 2^c-1\)).

Выходные данные

Выведите \(2^c\) целых чисел: вероятность, что побитовой XOR в конце равен \(x\), для всех \(x\) среди \(\{0, 1, \ldots, 2^c-1\}\) по модулю \(998\,244\,353\).

E. Две платформы

Бинарный поиск дп сортировки *1800

На плоскости находится \(n\) точек. Точка \(i\) имеет координаты \((x_i, y_i)\). У вас есть две горизонтальные платформы, обе длины \(k\). Каждая платформа может быть размещена в любом месте на плоскости, но она должна быть размещена горизонтально (на одной и той же \(y\)-координате) и иметь целочисленные границы. Если левая граница платформы равна \((x, y)\), то правая граница равна \((x + k, y)\), и все точки между границами (включая границы) принадлежат платформе.

Обратите внимание, что платформы могут иметь общие точки (пересекаться), а также не обязательно размещать обе платформы на одной \(y\)-координате.

После размещения обеих платформ на плоскости все точки начинают падать вниз, уменьшая \(y\)-координату. Если в какой-то момент точка сталкивается с какой-либо платформой, то она останавливается и считается сохраненной. Точки, которые никогда не сталкиваются ни с какой платформой, теряются.

Ваша задача — найти максимальное количество точек, которые вы можете сохранить, если вы разместите обе платформы оптимально.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Для лучшего понимания, пожалуйста, ознакомьтесь с разделом Примечание ниже, чтобы увидеть картинку для первого набора тестовых данных примера.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следует \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^9\)) — количество точек и длину каждой платформы, соответственно. Вторая строка набора тестовых данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^9\)), где \(x_i\) — это \(x\)-координата \(i\)-й точки. Третья строка набора тестовых данных содержит \(n\) целых чисел \(y_1, y_2, \dots, y_n\) (\(1 \le y_i \le 10^9\)), где \(y_i\) — это \(y\)-координата \(i\)-й точки. Все точки различны (не существует такой пары \(1 \le i < j \le n\), что \(x_i = x_j\) и \(y_i = y_j\)).

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных: максимальное количество точек, которые вы можете сохранить, если вы разместите обе платформы оптимально.

Примечание

Картинка, соответствующая первому набору тестовых данных примера:

Синие точки представляют собой точки из входных данных, красные отрезки — платформы. Одним из возможных способов является размещение первой платформы между точками \((1, -1)\) и \((2, -1)\), а второй платформы — между точками \((4, 3)\) и \((5, 3)\). Векторы обозначают, как будут падать точки. Можно заметить, что единственная точка, которую мы не можем сохранить — это точка \((3, 7)\), поэтому она будет падать бесконечно и в итоге будет потеряна. Можно доказать, что мы не можем добиться лучшего ответа. Также обратите внимание, что точка \((5, 3)\) вообще не падает, потому что она уже находится на платформе.

F. Подпоследовательности длины два

дп Строки *2100

Вам задано две строки \(s\) и \(t\), состоящие из строчных букв латинского алфавита. Длина \(t\) равна \(2\) (то есть эта строка состоит ровно из двух символов).

За один ход вы можете выбрать любой символ \(s\) и заменить его на любую строчную букву латинского алфавита. Более формально, вы выбираете какое-то \(i\) и заменяете \(s_i\) (символ на позиции \(i\)) на какой-то символ от 'a' до 'z'.

Вы хотите сделать не более \(k\) замен таким образом, чтобы максимизировать количество вхождений \(t\) в \(s\) в качестве подпоследовательности.

Напомним, что подпоследовательность — это последовательность, которая может быть получена из заданной последовательности путем удаления нуля или более элементов без изменения порядка остальных элементов.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 200\); \(0 \le k \le n\)) — длина \(s\) и максимальное количество ходов, которое можно сделать. Вторая строка входных данных содержит строку \(s\), состоящую из \(n\) строчных букв латинского алфавита. Третья строка входных данных содержит строку \(t\), состоящую из двух строчных букв латинского алфавита.

Выходные данные

Выведите одно целое число — максимально возможное количество вхождений \(t\) в \(s\) в качестве подпоследовательности при оптимальной замене не более \(k\) символов в \(s\).

Примечание

В первом примере можно получить строку «abab», заменив \(s_1\) на 'a' и \(s_4\) на 'b'. Тогда ответ будет равен \(3\).

Во втором примере можно получить строку «ssddsdd» и получить ответ \(10\).

В четвертом примере можно получить строку «aaacaaa» и получить ответ \(15\).

E. Большая чистка

графы дп Конструктив снм *2300

Дед Мороз со Снегурочкой после того, как раздали все подарки и исполнили все желания, вернулись в свою резиденцию и обнаружили, что она вся занесена снегом. Герои очень устали, и решили расчистить лишь дорожки между домиками. В резиденции n домиков, соединенных m дорожками. По дорожкам можно ходить в обоих направлениях.

Снегурочка предложила разделить работу: Дед Мороз будет чистить широкие дорожки, а она будет протаптывать узенькие. Для каждой дорожки герои определили, кто ее может чистить: либо Дед Мороз, либо Снегурочка. Для экономии усилий было решено расчистить дорожки так, чтобы выполнялись оба условия:

  • между любыми двумя домиками должен существовать ровно один простой путь по расчищенным дорожкам;
  • Дед Мороз должен расчистить столько же дорожек, сколько и Снегурочка.

И тут герои задумались: какие же дорожки им надо расчистить?

Входные данные

В первой строке входных данных записаны два целых положительных числа n и m (1 ≤ n ≤ 103, 1 ≤ m ≤ 105) — количество домиков и количество дорожек. Далее следует m строк, в каждой из которых задано описание одной дорожки: номера домиков, которые она соединяет, — x и y (1 ≤ x, y ≤ n), и кто ее собирается чистить («S» — Снегурочка, или «M» — Дед Мороз). По каждой дорожке можно ходить в обоих направлениях. Обратите внимание, что между двумя домиками может быть больше одной дорожки, и дорожка может вести из домика в него же.

Выходные данные

Выведите «-1» без кавычек, если невозможно выбрать дорожки, которые будут расчищены по заданным правилам. В противном случае выведите в первую строку количество расчищенных дорожек, а во вторую — номера этих дорожек (дорожки нумеруются с 1 в том порядке, в котором они заданы во входных данных). Номера дорожек разрешается выводить в любом порядке. Каждый номер следует вывести ровно один раз. Числа при выводе разделяйте пробелами.

Примечание

Путь называется простым, если все домики на пути попарно различны.

C. Простота исполнения

Бинарный поиск дп Перебор реализация сортировки *1900

После боя с Шикамару Таюя решила, что ее флейта слишком предсказуемая, и поменяла ее на гитару. У гитары Таюи \(6\) струн и бесконечное количество ладов, пронумерованных с \(1\). Если зажать лад номер \(j\) на \(i\)-й струне, то получится нота \(a_{i} + j\).

Таюя хочет сыграть мелодию из \(n\) нот. Ноты можно сыграть, используя различные комбинации струны и лада. Простота исполнения зависит от разности максимального и минимального номера используемых ладов. Чем эта величина меньше, тем проще исполнить технику. Требуется определить минимальную возможную разность.

Например, если \(a = [1, 1, 2, 2, 3, 3]\), а последовательность нот — \(4, 11, 11, 12, 12, 13, 13\) (что соответствует второму примеру), то можно сыграть первую ноту на первой струне, а все остальные ноты на шестой струне. Тогда максимальный лад будет \(10\), минимальный \(3\), и разница составит \(10 - 3 = 7\), как показано на рисунке.

Входные данные

В первой строке через пробел заданы \(6\) чисел \(a_{1}\), \(a_{2}\), ..., \(a_{6}\) (\(1 \leq a_{i} \leq 10^{9}\)) — описания струн гитары Таюи.

Во второй строке задано число \(n\) (\(1 \leq n \leq 100\,000\)) — количество нот, которое хочет сыграть Таюя.

В следующей строке через пробел заданы \(n\) чисел \(b_{1}\), \(b_{2}\), ..., \(b_{n}\) (\(1 \leq b_{i} \leq 10^{9}\)) — описание нот. Гарантируется, что \(b_i > a_j\) для всех \(1\leq i\leq n\) и \(1\leq j\leq 6\). Иными словами, каждую ноту можно сыграть на любой струне.

Выходные данные

Необходимо вывести минимальную возможную разность номеров используемых ладов.

Примечание

В первом примере оптимальным будет сыграть первую ноту на первой струне, вторую ноту на второй струне, третью ноту на шестой струне, четвертую ноту на четвертой струне, пятую ноту на пятой струне, шестую ноту на третьей струне. Тогда для исполнения каждой ноты будет использоваться лад \(100\), а разница составит \(100 - 100 = 0\).

Во втором примере оптимальным будет, например, сыграть вторую ноту на первой струне, а все остальные ноты на шестой струне. Тогда максимальный лад будет \(10\), минимальный \(3\), и разница составит \(10 - 3 = 7\).

C. Попрыгунчик

дп Перебор реализация *1400

Вы создаете уровень для некоторой мобильной игры. Уровень состоит из нескольких клеточек, выстроенных в ряд слева направо и пронумерованных последовательными натуральными числами, начиная с \(1\). Каждую клеточку вы можете оставить пустой или расположить там платформу.

Чтобы пройти уровень, игрок должен бросить мяч слева так, чтобы он сначала упал на платформу в некоторой клеточке \(p\), отскочил от нее, затем отскочил от платформы в клеточке \((p + k)\), затем от платформы в клеточке \((p + 2k)\), и так далее от платформы в каждой \(k\)-й клеточке до тех пор, пока он не перепрыгнет правее последней клеточки. Если хотя бы одна из этих клеточек не содержит платформы, то уровень с такими значениями \(p\) и \(k\) пройти нельзя.

У вас уже есть некоторый шаблон уровня, описываемый числами \(a_1\), \(a_2\), \(a_3\), ..., \(a_n\), где \(a_i = 0\) означает, что в клеточке \(i\) нет платформы, а \(a_i = 1\) означает, что платформа там есть. Вы хотите модифицировать этот шаблон так, чтобы уровень можно было пройти с заданными \(p\) и \(k\). За \(x\) секунд вы можете добавить платформу в любую пустую клеточку. За \(y\) секунд вы можете полностью убрать первую клеточку, при этом количество клеточек уменьшится на один, а оставшиеся клетки пронумеруются заново, сохраняя порядок. Других изменений вы вносить не можете. Вы не можете уменьшить число клеток до меньше \(p\).

Иллюстрация к третьему тестовому случаю. Крестами отмечены удаленные клеточки. Синим показана добавленная платформа.

Какое минимальное количество секунд вам требуется, чтобы сделать возможным прохождение уровня с заданными значениями \(p\) и \(k\)?

Входные данные

Первая строка содержит количество тестовых случаев \(t\) (\(1 \le t \le 100\)). Далее следуют описания тестовых случаев.

Первая строка каждого тестового случая содержит три целых числа \(n\), \(p\) и \(k\) (\(1 \le p \le n \le 10^5\), \(1 \le k \le n\)) — начальное количество клеточек, номер первой клеточки, которая должна содержать платформу, и требуемый период прыжков мяча.

Вторая строка каждого тестового случая содержит строку \(a_1 a_2 a_3 \ldots a_n\) (\(a_i = 0\) или \(a_i = 1\)) — начальный шаблон уровня, записанный без пробелов.

Последняя строка каждого тестового случая содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le 10^4\)) — время, необходимое для добавления платформы и время, необходимое для удаления первой клеточки, соответственно.

Сумма \(n\) по всем тестовым случаям не превосходит \(10^5\).

Выходные данные

Для каждого тестового случая выведите одно целое число — минимальное количество секунд, необходимое вам, чтобы изменить уровень соответствующим образом.

Можно показать, что всегда возможно изменить уровень так, чтобы его можно было пройти.

Примечание

В первом тестовом случае лучше всего просто убрать первую клеточку, после чего все необходимые платформы будут на своих местах: 0101010101. Зачеркнутая цифра удалена, цифры, выделенные жирным — места, где должны быть платформы. Необходимое время равно \(y = 2\).

Во втором тестовом случае лучше всего добавить платформы в клетки \(4\) и \(5\): 00000 \(\to\) 00011. Необходимое время равно \(x \cdot 2 = 4\).

В третьем тестовом случае лучше всего удалить первую клеточку дважды и затем добавить платформу в клеточку, которая изначально была \(10\)-й: 10110011000 \(\to\) 10110011010. Необходимое время равно \(y \cdot 2 + x = 10\).

F. Тортики для клонов

дп *2900

Вы живете на числовой прямой и изначально (в момент времени \(t = 0\)) находитесь в точке \(x = 0\). На прямой происходит \(n\) событий следующего вида: в момент времени \(t_i\) в координате \(x_i\) появляется небольшой тортик. Чтобы получить этот тортик, нужно в этот момент времени находиться в этой координате, иначе тортик сразу портится. Никакие два тортика не появляются в одной и той же точке.

Вы можете перемещаться на \(1\) единицу длины за единицу времени. Также вы обладаете возможностью мгновенно создавать своего клона в той же позиции, в которой вы сейчас находитесь. Клон не может двигаться, но он будет за вас собирать все тортики, появляющиеся в этой позиции. Клон исчезнет, когда вы создадите нового клона. Если новый клон создается в момент времени \(t\), то старый клон может собирать тортики до момента \(t\) включительно, а новый — начиная с момента времени \(t\) включительно.

Можете ли вы собрать все тортики (сами или с помощью клонов)?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — количество тортиков.

Следующие \(n\) строк содержат по два целых числа \(t_i\) и \(x_i\) (\(1 \le t_i \le 10^9\), \(-10^9 \le x_i \le 10^9\)) — время и координату появления очередного тортика.

Все времена появления тортиков различны и даны в порядке возрастания, а все координаты появления тортиков различны.

Выходные данные

Выведите «YES», если можно собрать все тортики, и «NO» иначе.

Примечание

В первом примере нужно с самого начала двигаться в сторону координаты \(5\), оставив клона в позиции \(1\) в момент времени \(1\), и собрав тортик в позиции \(2\) в момент времени \(2\). В момент времени \(5\) вы окажетесь в позиции \(5\) и соберете там тортик, а клон соберет последний тортик в момент времени \(6\).

Во втором примере нужно оставить клона в позиции \(0\) и начать двигаться в сторону координаты \(5\). В момент времени \(1\) клон соберет тортик. В момент времени \(2\) нужно создать нового клона в текущей позиции \(2\), в будущем он соберет последний тортик. Вы сами же как раз успеете собрать второй тортик в позиции \(5\).

В третьем примере никак не получается успеть собрать все тортики.

C. XOR-инверсии

битмаски Деревья дп жадные алгоритмы математика разделяй и властвуй сортировки Строки Структуры данных *2000

Вам задан массив \(a\), состоящий из \(n\) неотрицательных целых чисел. Вы должны выбрать неотрицательное целое число \(x\) и сформировать массив \(b\) из \(n\) элементов по следующему правилу: для всех \(i\) от \(1\) до \(n\), \(b_i = a_i \oplus x\) (\(\oplus\) обозначает операцию побитового исключающего ИЛИ).

Назовем инверсией в массиве \(b\) такую пару целых чисел \(i\) и \(j\), что \(1 \le i < j \le n\) и \(b_i > b_j\).

Вы должны выбрать \(x\) таким образом, чтобы количество инверсий в массиве \(b\) было минимально возможным. Если таких \(x\) несколько — выведите минимальное из них.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество элементов в массиве \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_i \le 10^9\)), где \(a_i\)\(i\)-й элемент \(a\).

Выходные данные

Выведите два целых числа: минимально возможное количество инверсией в массиве \(b\), и минимальное значение \(x\), при котором достигается такое количество инверсий.

Примечание

В первом примере из условия оптимально оставить массив без изменений, выбрав \(x = 0\).

Во втором примере из условия при выборе \(x = 14\) получается следующий массив \(b\): \([4, 9, 7, 4, 9, 11, 11, 13, 11]\). В нем \(4\) инверсии:

  • \(i = 2\), \(j = 3\);
  • \(i = 2\), \(j = 4\);
  • \(i = 3\), \(j = 4\);
  • \(i = 8\), \(j = 9\).

В третьем примере из условия при выборе \(x = 8\) получается следующий массив \(b\): \([0, 2, 11]\). В нем нет ни одной инверсии.

E. Разложи

Бинарный поиск дп жадные алгоритмы Структуры данных *3200

В один день BThero решил поиграться с массивами и придумал следующую задачу:

Вам дан массив \(a\), состоящий из \(n\) положительных целых чисел. Массив нумеруется с \(1\) до \(n\). Вы выполняете следующую процедуру ровно один раз:

  • Вы создаете новый массив \(b\), состоящий из \(2n\) положительных целых чисел, где для каждого \(1 \le i \le n\) выполнено условие \(b_{2i-1}+b_{2i} = a_i\). Например, для \(a = [6, 8, 2]\) можно создать \(b = [2, 4, 4, 4, 1, 1]\).
  • Вы склеиваете подряд идущие одинаковые числа в \(b\). Например, \(b = [2, 4, 4, 4, 1, 1]\) станет \(b = [2, 4, 1]\).

Найдите и выведите минимальное возможное значение \(|b|\) (размер массива \(b\)), которое вы можете получить в конце процедуры. Можно показать, что с заданными ограничениями всегда есть хотя бы один способ построить массив \(b\).

Входные данные

В первой строке входного файла задано одно целое число \(T\) (\(1 \le T \le 5 \cdot 10^5\)) — кол-во наборов входных данных. Далее следуют \(T\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(2 \le a_i \le 10^9\)).

Гарантируется, что \(\sum{n}\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в новой строке одно положительное целое число — минимальное возможное значение \(|b|\).

C. Mortal Kombat Tower

графы дп жадные алгоритмы кратчайшие пути *1500

Вы и ваш друг играете в Mortal Kombat XI. Вы пытаетесь пройти башню испытаний. Всего в башне есть \(n\) боссов, пронумерованных от \(1\) до \(n\). Тип \(i\)-го босса равен \(a_i\). Если \(i\)-й босс является легким, то его тип равен \(a_i = 0\), иначе этот босс является сложным и его тип равен \(a_i = 1\).

В течение одной игровой сессии вы или ваш друг можете убить одного или двух боссов (ни вы, ни ваш друг не можете пропускать сессию, поэтому минимальное количество боссов, убитых в течение сессии, равно хотя бы одному). После сессии вашего друга начинается ваша сессия, затем опять сессия вашего друга, затем опять ваша, и так далее. Первая сессия — сессия вашего друга.

Вашему другу надо научиться играть лучше, потому что на самом деле он не может убивать сложных боссов. Чтобы убивать их, он использует очки пропуска. Одно очко пропуска может быть использовано для того, чтобы убить одного сложного босса.

Ваша задача — найти минимальное количество очков пропуска, которое ваш друг должен использовать для того, чтобы вы с вашим другом убили всех \(n\) боссов в заданном порядке.

Например: предположим, что \(n = 8\), \(a = [1, 0, 1, 1, 0, 1, 1, 1]\). Тогда лучшей последовательностью действий является следующая:

  • ваш друг убивает первых двух боссов, используя одно очко пропуска для первого босса;
  • вы убиваете третьего и четвертого боссов;
  • ваш друг убивает пятого босса;
  • вы убиваете шестого и седьмого боссов;
  • ваш друг убивает последнего босса, используя одно очко пропуска, таким образом, башня проходится с использованием двух очков пропуска.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество боссов. Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 1\)), где \(a_i\) равно типу \(i\)-го босса.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных: минимальное количество очков пропуска, которое ваш друг должен использовать для того, чтобы вы с вашим другом убили всех \(n\) боссов в заданном порядке.

C. Помогите складовщику

дп Перебор *2300

В Тридевятом царстве наступила поздняя осень, убран небывалый урожай, и настало время готовиться к зиме. В то время как большинство жителей отмечает праздник урожая, складовщик Семен пытается решить довольно нетривиальную задачу размещения на складах сельскохозяйственного оборудования.

Проблемы у него возникли с самой крупной техникой, которой, разумеется, являются турбоплуги. Проблема в том, что турбоплуг при хранении занимает на складе не обычную прямоугольную форму, а T-образную, как на одной из четырех картинок ниже (где символом «#» обозначено место, занимаемое турбоплугом, символом «.» — свободное пространство):

###      ..#      .#.      #..
.#. ### .#. ###
.#. ..# ### #..

Перед Семеном встала довольно естественная задача: разместить на заданном складе размерами n × m максимальное количество турбоплугов. При хранении турбоплуги можно поворачивать как угодно (так чтобы они занимали область как на одной из четырех картинок выше), однако нельзя, чтобы два турбоплуга «накладывались», то есть занимали общую область склада.

Семен чувствует, что один не сможет найти оптимальное размещение турбоплугов на складе, максимизирующее их общее количество. Поможете ему?

Входные данные

В единственной строке записаны через пробел два целых числа n и m — размеры склада (1 ≤ n, m ≤ 9).

Выходные данные

В первой строке выведите максимальное количество турбоплугов, которое можно разместить на складе. В следующих n строках выведите по m символов. Символом «.» (точка) обозначайте пустое место, последовательными заглавными буквами латинского алфавита («A» — для первого турбоплуга, «B» — для второго, и так далее до количества турбоплугов в вашей схеме) — места для соответствующих турбоплугов при их оптимальном расположении на складе. Порядок нумерации мест для турбоплугов на складе значения не имеет. Если существует несколько оптимальных решений для склада данных размеров — выведите любое.

C1. Армия покемонов (простая версия)

дп жадные алгоритмы Конструктив *1300

Это простая версия задачи. Различия между версиями заключаются в том, что в простой версии нет запросов обмена. Вы можете делать взломы, только если обе версии задачи сданы.

Пикачу — милый и дружелюбный покемон, живущий в стае диких пикачу.

Однако недавно стало известно, что команда R хочет украсть всех этих покемонов! Тренер покемонов Андрей решил помочь Пикачу собрать армию для борьбы с командой R.

В первую очередь Андрей посчитал всех покемонов: их оказалось ровно \(n\) штук. Затем он установил силу каждого покемона, и так получилось, что \(i\)-й покемон имеет силу, равную \(a_i\), и силы всех покемонов различны.

В качестве армии Андрей может выбрать любую непустую подпоследовательность покемонов. Иными словами, Андрей выбирает какой-то массив \(b\) из \(k\) индексов таких, что \(1 \le b_1 < b_2 < \dots < b_k \le n\), и его армия будет состоять из покемонов с силами \(a_{b_1}, a_{b_2}, \dots, a_{b_k}\).

Сила армии вычисляется как знакопеременная сумма элементов подпоследовательности, то есть \(a_{b_1} - a_{b_2} + a_{b_3} - a_{b_4} + \dots\).

Андрей экспериментирует с построением покемонов. Он \(q\) раз меняет двух покемонов местами, а именно, в \(i\)-й раз он менял местами покемонов с номерами \(l_i\) и \(r_i\).

Обратите внимание, в этой версии задачи \(q=0\).

Андрею надо знать: какую максимальную силу армии он мог получить при начальной расстановке покемонов, а также после каждого изменения строя?

Помогите Андрею и покемонам, иначе команде R удастся воплотить в жизнь свой коварный план!

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находятся два целых числа \(n\) и \(q\) (\(1 \le n \le 3 \cdot 10^5, q = 0\)) — количество покемонов и количество обменов соответственно.

Во второй строке находятся \(n\) различных целых положительных чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — силы покемонов.

\(i\)-я из следующих \(q\) строк содержит два целых положительных числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — номера обмениваемых покемонов в \(i\)-й операции.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), а также сумма \(q\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) число — максимально возможную силу армии до изменений и после каждого изменения.

Примечание

В третьем наборе входных данных мы можем выбрать армию следующим образом: [1 2 5 4 3 6 7], при этом ее итоговая сила будет \(5−3+7=9\).

C2. Армия покемонов (сложная версия)

дп жадные алгоритмы разделяй и властвуй реализация Структуры данных *2100

Это сложная версия задачи. Различия между версиями заключаются в том, что в простой версии нет запросов обмена. Вы можете делать взломы только если обе версии задачи сданы.

Пикачу — милый и дружелюбный покемон, живущий в стае диких пикачу.

Однако недавно стало известно, что команда R хочет украсть всех этих покемонов! Тренер покемонов Андрей решил помочь Пикачу собрать армию для борьбы с командой R.

В первую очередь Андрей посчитал всех покемонов: их оказалось ровно \(n\) штук. Затем он установил силу каждого покемона и так получилось, что \(i\)-й покемон имеет силу, равную \(a_i\), и силы всех покемонов различны.

В качестве армии Андрей может выбрать любую непустую подпоследовательность покемонов. Иными словами, Андрей выбирает какой-то массив \(b\) из \(k\) индексов таких, что \(1 \le b_1 < b_2 < \dots < b_k \le n\), и его армия будет состоять из покемонов с силами \(a_{b_1}, a_{b_2}, \dots, a_{b_k}\).

Сила армии вычисляется как знакопеременная сумма элементов подпоследовательности, то есть \(a_{b_1} - a_{b_2} + a_{b_3} - a_{b_4} + \dots\).

Андрей экспериментирует с построением покемонов. Он \(q\) раз меняет двух покемонов местами, а именно, в \(i\)-й раз он менял местами покемонов с номерами \(l_i\) и \(r_i\).

Андрею надо знать: какую максимальную силу армии он мог получить при начальной расстановке покемонов, а также после каждого изменения строя?

Помогите Андрею и покемонам, иначе команде R удастся воплотить в жизнь свой коварный план!

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находятся два целых числа \(n\) и \(q\) (\(1 \le n \le 3 \cdot 10^5, 0 \le q \le 3 \cdot 10^5\)) — количество покемонов и количество обменов соответственно.

Во второй строке находятся \(n\) различных целых положительных чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — силы покемонов.

\(i\)-я из следующих \(q\) строк содержит два целых положительных числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — номера обмениваемых покемонов в \(i\)-й операции.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), а также сумма \(q\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) число — максимально возможную силу армии до изменений и после каждого изменения.

Примечание

Рассмотрим третий набор входных данных:

Изначально мы можем выбрать армию следующим образом: [1 2 5 4 3 6 7], при этом ее итоговая сила будет \(5-3+7=9\).

После первого изменения выбор армии будет таким: [2 1 5 4 3 6 7], при этом ее итоговая сила будет \(2-1+5-3+7=10\).

Далее выбор армии будет таким: [2 1 5 4 3 7 6], при этом ее итоговая сила будет \(2-1+5-3+7=10\).

После третьего изменения армию можно выбрать так: [2 1 4 5 3 7 6], при этом ее итоговая сила будет \(2-1+5-3+7=10\).

Далее выбор армии будет таким: [1 2 4 5 3 7 6], при этом ее итоговая сила будет \(5-3+7=9\).

После всех запросов выбор армии будет таким: [1 4 2 5 3 7 6], при этом ее итоговая сила будет \(4-2+5-3+7=11\).

E. Боевые лемминги

дп жадные алгоритмы *2500

Смотритель маяка Петр командует отрядом из \(n\) боевых леммингов. Он выстроил свою армию в шеренгу и пронумеровал леммингов целыми числами от \(1\) до \(n\) слева направо. Некоторые из леммингов держат щиты, причем каждый лемминг не может держать более одного щита.

Чем более защищенными будут войска Петра, тем лучше. Чтобы вычислить защищенность отряда, он вычисляет количество защищенных пар леммингов, т. е. таких, что они оба не держат щиты, а между ними стоит хотя бы один лемминг со щитом.

Сейчас необходимо подготовиться к обороне и увеличить защиту войск. Для этого Петр может отдавать приказы. Он может выбрать лемминга со щитом и отдать ему один из двух приказов:

  • передать щит соседу слева, если такой существует, и у него еще нет щита;
  • передать щит соседу справа, если такой существует, и у него еще нет щита.
За одну секунду Петр отдает ровно один приказ.

Пока неизвестно, как скоро придется обороняться. Поэтому Петр хочет для каждого \(k\) от \(0\) до \(\frac{n(n-1)}2\) определить максимально возможную защищенность армии, если он отдаст не более \(k\) приказов. Помогите Петру!

Входные данные

В первой строке входных данных расположено целое число \(n\) (\(1 \le n \le 80\)) — количество леммингов в отряде Петра.

Во второй строке входных данных расположено \(n\) целых чисел \(a_i\) (\(0 \le a_i \le 1\)). Если \(a_i = 1\), то \(i\)-й лемминг держит щит, в противном случае \(a_i = 0\).

Выходные данные

В единственной строке выведите \(\frac{n(n-1)}2 + 1\) число — максимально возможную защищенность армии после не более чем \(0, 1, \dots, \frac{n(n-1)}2\) приказов.

Примечание

В первом примере защищенность армии равна нулю, поскольку между каждой парой леммингов, которые не держат щиты, нет ни одного лемминга, который бы держал щит.

За одну секунду Петр может попросить первого лемминга передать щит второму. Тогда защищенность будет равна двум, поскольку есть две защищенные пары леммингов — \((1, 3)\) и \((1, 4)\).

За две секунды Петр может поступить следующим образом: сначала приказать пятому леммингу передать щит соседу слева, а затем — первому леммингу передать щит соседу справа. Тогда найдется три защищенные пары — \((1, 3)\), \((1, 5)\) и \((3, 5)\).

Можно убедиться, что защищенности лучше, чем три, добиться никак нельзя.

E. Шведские герои

дп Перебор реализация *2700

Играя в очередную стратегическую игру, Мэнс набрал \(n\) Шведских героев, силы которых можно представить в виде массива \(a\).

К сожалению, не все эти могущественные герои были созданы настолько способными, насколько он хотел, так что он решил что-то с этим сделать. Для достижения своей цели он может выбрать двух последовательных героев, с силами \(a_i\) и \(a_{i+1}\), удалить их и вставить обратно в ту же позицию героя с силой \(-(a_i+a_{i+1})\).

Например, если элементы нашего массива — \([5, 6, 7, 8]\), то мы можем выбрать \(6\) и \(7\) и получить \([5, -(6+7), 8] = [5, -13, 8]\).

После того, как он выполнит эту операцию \(n-1\) раз, у него останется только один герой. Мэнс хочет, чтобы его сила была как можно больше. Какой наибольшей силы этого героя он может достичь?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 200000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива.

Выходные данные

Выведите наибольшую возможную силу, которую он может получить после \(n-1\) операций.

Примечание

Оптимальный список операций для первого примера:

\([5, 6, 7, 8] \rightarrow [-11, 7, 8] \rightarrow [-11, -15] \rightarrow [26]\).

C. Торг

дп Комбинаторика математика *1700

Порой сложно прийти к конечной цене в торге. Вот и Саша с Вовой никак не могут прийти к соглашению – Саша стремится назвать цену как можно больше, а Вова — вычеркнуть из нее как можно больше цифр. Т. е. получается так, что Саша называет какое-то целое число \(n\), Вова вычеркивает из него непустую последовательность подряд идущих цифр, а оставшиеся цифры схлопываются в одно число.

Например, если из числа \(1213121\) вычеркнуть подстроку \(1312\), то получится число \(121\).

Допустима, что итоговая цена содержит ведущие нули. Если Вова вычеркнет все цифры, то считается, что получился \(0\).

Саша хочет как-то ограничить Вову, чтобы тот не вычеркнул все число, но, чтобы у него был правильные аргументы для убеждения, ему нужно знать сумму всех чисел, которые могут получиться после того, как Вова сделает вычеркивание.

Помогите Саше посчитать. А так как число может получиться достаточно большим, то считайте его по модулю \(10^9 + 7\).

Входные данные

В первой и единственной строке задается целое число \(n\) (\(1 \le n < 10^{10^5}\)).

Выходные данные

В единственной строке выведите искомую сумму по модулю \(10^9 + 7\).

Примечание

Рассмотрим первый пример.

Вова может вычеркнуть \(1\), \(0\), \(7\), \(10\), \(07\) или \(107\). Получившиеся числа равны \(07\), \(17\), \(10\), \(7\), \(1\), \(0\). Их сумма равна \(42\).

E. Минлексы

дп жадные алгоритмы реализация Строки *2700

Недавно в поле зрения Лёши попала одна занимательная строка \(s\), состоящая из маленьких латинских букв. Лёша сразу же разработал уникальный алгоритм с этой строкой и поспешил поделиться им с вами. Суть алгоритма заключалась в следующем.

Лёша выбирал любое количество пар символов на позициях \((i, i + 1)\) так, чтобы выполнялись следующие условия:

  • для любой пары \((i, i + 1)\) выполняется \(0 \le i < |s| - 1\);
  • для любой пары \((i, i + 1)\) выполняется \(s_i = s_{i + 1}\);
  • не существует индекса, который находится в нескольких парах одновременно.

Далее Лёша удалял все символы строки по индексам, содержащимся в выбранных парах, и завершал алгоритм.

Теперь Лёшу интересует, какую лексикографически минимальную строку можно получить после выполнения алгоритма на каждом суффиксе заданной строки.

Входные данные

Единственная строка ввода содержит строку \(s\) (\(1 \le |s| \le 10^5\)) — исходную строку, состоящую из маленьких латинских букв.

Выходные данные

В \(|s|\) строках выведите длины искомых строк и сами искомые строки для всех суффиксов, начиная с наибольшего по длине. Вывод может получится слишком большим, и поэтому, если длина ответа больше \(10\) символов, то вместо самого ответа выведите только первые \(5\) символов, далее «...», и далее последние \(2\) символа ответа.

Примечание

Рассмотрим первый пример.

  • Наибольший по длине суффикс — вся строка «abcdd». Выбирая одну пару \((4, 5)\), Лёша может получить строку «abc».
  • Следующий по длине суффикс — строка «bcdd». Выбирая одну пару \((3, 4)\), получаем «bc».
  • Следующий по длине суффикс — строка «cdd». Выбирая одну пару \((2, 3)\), получаем «c».
  • Следующий по длине суффикс — строка «dd». Выбирая одну пару \((1, 2)\), получаем «» (пустую строку).
  • Последний суффикс — строка «d». Нельзя выбрать ни одну пару, поэтому ответ «d».

Во втором примере для наибольшего по длине суффикса «abbcdddeaaffdfouurtytwoo» выбираем три пары \((11, 12)\), \((16, 17)\), \((23, 24)\) и получаем «abbcdddeaadfortytw»

J. Bubble Cup hypothesis

битмаски дп Конструктив математика *2400

The Bubble Cup hypothesis stood unsolved for \(130\) years. Who ever proves the hypothesis will be regarded as one of the greatest mathematicians of our time! A famous mathematician Jerry Mao managed to reduce the hypothesis to this problem:

Given a number \(m\), how many polynomials \(P\) with coefficients in set \({\{0,1,2,3,4,5,6,7\}}\) have: \(P(2)=m\)?

Help Jerry Mao solve the long standing problem!

Input

The first line contains a single integer \(t\) \((1 \leq t \leq 5\cdot 10^5)\) - number of test cases.

On next line there are \(t\) numbers, \(m_i\) \((1 \leq m_i \leq 10^{18})\) - meaning that in case \(i\) you should solve for number \(m_i\).

Output

For each test case \(i\), print the answer on separate lines: number of polynomials \(P\) as described in statement such that \(P(2)=m_i\), modulo \(10^9 + 7\).

Note

In first case, for \(m=2\), polynomials that satisfy the constraint are \(x\) and \(2\).

In second case, for \(m=4\), polynomials that satisfy the constraint are \(x^2\), \(x + 2\), \(2x\) and \(4\).

B. Blue and Red of Our Faculty!

дп разделяй и властвуй *2600

It's our faculty's 34th anniversary! To celebrate this great event, the Faculty of Computer Science, University of Indonesia (Fasilkom), held CPC - Coloring Pavements Competition. The gist of CPC is two players color the predetermined routes of Fasilkom in Blue and Red. There are \(N\) Checkpoints and \(M\) undirected predetermined routes. Routes \(i\) connects checkpoint \(U_i\) and \(V_i\), for \((1 \le i \le M)\). It is guaranteed that any pair of checkpoints are connected by using one or more routes.

The rules of CPC is as follows:

  • Two players play in each round. One player plays as blue, the other plays as red. For simplicity, let's call these players \(Blue\) and \(Red\).
  • \(Blue\) will color every route in he walks on blue, \(Red\) will color the route he walks on red. Both players start at checkpoint number \(1\). Initially, all routes are gray.
  • Each phase, from their current checkpoint, \(Blue\) and \(Red\) select a different gray route and moves to the checkpoint on the other end of the route simultaneously.
  • The game ends when \(Blue\) or \(Red\) can no longer move. That is, there is no two distinct gray routes they can choose to continue moving.

Chaneka is interested in participating. However, she does not want to waste much energy. So, She is only interested in the number of final configurations of the routes after each round. Turns out, counting this is also exhausting, so Chaneka asks you to figure this out!

Two final configurations are considered different if there is a route \(U\) in a different color in the two configurations.

Input

The first line contains two integers \(N\) and \(M\). \(N\) \((2 \le N \le 2 \cdot 10^3)\) denotes the number of checkpoints, \(M\) \((1 \le M \le 2 \cdot N)\) denotes the number of routes. It is guaranteed that every checkpoint except checkpoint \(1\) has exactly two routes connecting it.

The next \(M\) lines each contains two integers \(U_i\) and \(V_i\) \((1 \le U_i, V_i \le N, U_i \ne V_i)\), which denotes the checkpoint that route \(i\) connects.

It is guaranteed that for every pair of checkpoints, there exists a path connecting them directly or indirectly using the routes.

Output

Output a single integer which denotes the number of final configurations after each round of CPC modulo \(10^9 + 7\)

Note

Every possible final configuration for the example is listed below:

The blue-colored numbers give the series of moves \(Blue\) took, and the red-colored numbers give the series of moves \(Red\) took.

D. Danger of Mad Snakes

дп Комбинаторика математика *2300

Mr. Chanek The Ninja is one day tasked with a mission to handle mad snakes that are attacking a site. Now, Mr. Chanek already arrived at the hills where the destination is right below these hills. The mission area can be divided into a grid of size \(1000 \times 1000\) squares. There are \(N\) mad snakes on the site, the i'th mad snake is located on square \((X_i, Y_i)\) and has a danger level \(B_i\).

Mr. Chanek is going to use the Shadow Clone Jutsu and Rasengan that he learned from Lord Seventh to complete this mission. His attack strategy is as follows:

  1. Mr. Chanek is going to make \(M\) clones.
  2. Each clone will choose a mad snake as the attack target. Each clone must pick a different mad snake to attack.
  3. All clones jump off the hills and attack their respective chosen target at once with Rasengan of radius \(R\). If the mad snake at square \((X, Y)\) is attacked with a direct Rasengan, it and all mad snakes at squares \((X', Y')\) where \(max(|X' - X|, |Y' - Y|) \le R\) will die.
  4. The real Mr. Chanek will calculate the score of this attack. The score is defined as the square of the sum of the danger levels of all the killed snakes.

Now Mr. Chanek is curious, what is the sum of scores for every possible attack strategy? Because this number can be huge, Mr. Chanek only needs the output modulo \(10^9 + 7\).

Input

The first line contains three integers \(N\) \(M\) \(R\) \((1 \le M \le N \le 2 \cdot 10^3, 0 \le R < 10^3)\), the number of mad snakes, the number of clones, and the radius of the Rasengan.

The next \(N\) lines each contains three integers, \(X_i\), \(Y_i\), dan \(B_i\) \((1 \le X_i, Y_i \le 10^3, 1 \le B_i \le 10^6)\). It is guaranteed that no two mad snakes occupy the same square.

Output

A line with an integer that denotes the sum of scores for every possible attack strategy.

Note

Here is the illustration of all six possible attack strategies. The circles denote the chosen mad snakes, and the blue squares denote the region of the Rasengan:

So, the total score of all attacks is: \(3.600 + 3.600 + 4.900 + 3.600 + 10.000 + 8.100 = 33.800\).

F. Количество подпоследовательностей

дп Комбинаторика Строки *2000

Вам задана строка \(s\), состоящая из строчных букв «a», «b» и «c», а также из знаков вопроса «?».

Пусть количество знаков вопроса в строке \(s\) равно \(k\). Заменим каждый знак вопроса на одну из букв «a», «b» и «c». Таким образом, мы получим \(3^{k}\) всевозможных строк, состоящих только из букв «a», «b» и «c». Например, если \(s = \)«ac?b?c» после замены знаков вопроса мы получим строки \([\)«acabac», «acabbc», «acabcc», «acbbac», «acbbbc», «acbbcc», «accbac», «accbbc», «accbcc»\(]\).

Перед вами стоит задача определить количество подпоследовательностей «abc» во всех получившихся строках. Так как ответ может быть достаточно большим, выведите его по модулю числа \(10^{9} + 7\).

Подпоследовательность строки \(t\) — это такая последовательность, которую можно получить из строки \(t\) путем удаления некоторого (возможно нулевого) количества букв, при этом порядок оставшихся букв должен быть неизменным. Например, в строке «baacbc» есть две подпоследовательности «abc». Это подпоследовательность, состоящая из букв в позициях \((2, 5, 6)\), и подпоследовательность, состоящая из букв в позициях \((3, 5, 6)\).

Входные данные

В первой строке следует целое число \(n\) \((3 \le n \le 200\,000)\) — длина строки \(s\).

Во второй строке следует строка \(s\) длины \(n\), состоящая из строчных букв «a», «b» и «c», а также из знаков вопроса «?».

Выходные данные

Выведите суммарное количество подпоследовательностей вида «abc» во всех строках, которые можно получить путем замены знаков вопроса на буквы «a», «b» и «c», по модулю \(10^{9} + 7\).

Примечание

В первом примере после замены знаков вопроса получим \(9\) строк:

  • «acabac» — в этой строке \(2\) подпоследовательности «abc»,
  • «acabbc» — в этой строке \(4\) подпоследовательности «abc»,
  • «acabcc» — в этой строке \(4\) подпоследовательности «abc»,
  • «acbbac» — в этой строке \(2\) подпоследовательности «abc»,
  • «acbbbc» — в этой строке \(3\) подпоследовательности «abc»,
  • «acbbcc» — в этой строке \(4\) подпоследовательности «abc»,
  • «accbac» — в этой строке \(1\) подпоследовательность «abc»,
  • «accbbc» — в этой строке \(2\) подпоследовательности «abc»,
  • «accbcc» — в этой строке \(2\) подпоследовательности «abc».

Таким образом, во всех строках содержатся \(2 + 4 + 4 + 2 + 3 + 4 + 1 + 2 + 2 = 24\) подпоследовательности «abc».

C. Тяжелая работа папарацци

дп *2000

Вы папарацци, работающий на Манхэттене.

На Манхэттене есть \(r\) юго-северных улиц, обозначенных числами \(1, 2,\ldots, r\) по порядку с запада на восток и \(r\) западно-восточных, обозначенных числами \(1,2,\ldots,r\) по порядку с юга на север. Каждая из \(r\) юго-северных улиц пересекает каждую из \(r\) западно-восточных улиц; пересечение между \(x\)-й юго-северной улицей и \(y\)-й западно-восточной улицей обозначается как \((x, y)\). Чтобы добраться от перекрестка \((x,y)\) до перекрестка \((x', y')\) , вам нужны \(|x-x'|+|y-y'|\) минут.

Вы знаете о наличии \(n\) знаменитостей в городе и хотите сфотографировать как можно больше из них. Более точно, для каждого \(i=1,\dots, n\), вы знаете, что \(i\)-я знаменитость будет на перекрестке \((x_i, y_i)\) ровно через \(t_i\) минут (и она останется там на очень короткое время, так что вы можете сфотографировать ее только в том случае, если на \(t_i\)-й минуте вы находитесь на перекрестке \((x_i, y_i)\)). Вы очень хорошо справляетесь со своей работой, поэтому можете делать снимки мгновенно. Известно, что \(t_i < t_{i+1}\) для любого \(i=1,2,\ldots, n-1\).

В настоящее время вы находитесь в своем офисе, который находится на перекрестке \((1, 1)\). Если Вы оптимально планируете свой рабочий день, какое максимальное количество знаменитостей вы можете сфотографировать?

Входные данные

Первая строка ввода содержит два положительных целых числа \(r, n\) (\(1\le r\le 500\), \(1\le n\le 100,000\))  — количество юго-северных/западно-восточных улиц и количество знаменитостей.

Затем следуют \(n\) строк, каждая из которых описывает появление знаменитости. \(i\)-я из этих строк содержит \(3\) положительные целые числа \(t_i, x_i, y_i\) (\(1\le t_i\le 1,000,000\), \(1\le x_i, y_i\le r\))  — обозначающие, что \(i\)-я знаменитость появится на перекрестке \((x_i, y_i)\) через \(t_i\) минут.

Гарантируется, что \(t_i<t_{i+1}\) для каждого \(i=1,2,\ldots, n-1\).

Выходные данные

Выведите одно целое число  — максимальное количество знаменитостей, которые вы сможете сфотографировать.

Примечание

Пояснение первого примера: В городе есть только одна знаменитость, и она будет на перекрестке \((6,8)\) ровно через \(11\) минут после начала рабочего дня. Так как вы изначально находитесь на перекрестке \((1,1)\) и вам нужно \(|1-6|+|1-8|=5+7=12\) минут, чтобы добраться до \((6,8)\), вы не сможете сфотографировать знаменитость. Таким образом, вы не можете сфотографировать ни одну из знаменитостей, и ответ  — \(0\).

Пояснение второго примера: Один из способов сделать \(4\) фотографии (больше нельзя)  — это сфотографировать знаменитостей с номерами \(3, 5, 7, 9\) (см. изображение для визуализации стратегии):

  • Чтобы добраться из офиса на \((1,1)\) до перекрестка \((5,5)\), вам нужно \(|1-5|+|1-5|=4+4=8\) минут, поэтому вы приезжаете к \(8\)-й минуте  — как раз вовремя, чтобы сфотографировать знаменитость \(3\).
  • Затем, сразу после того, как вы сфотографировали знаменитость \(3\), вы двигаетесь к перекрестку \((4,4)\). Вам нужно \(|5-4|+|5-4|=1+1=2\) минуты, чтобы добраться туда, поэтому вы приезжаете к \(8+2=10\)-й минуте и ждете минуты \(12\), когда появится знаменитость \(5\).
  • Затем, сразу после того, как вы сфотографировали знаменитость \(5\), вы двигаетесь к перекрестку \((6,6)\). Вам нужно \(|4-6|+|4-6|=2+2=4\) минуты, чтобы добраться туда, поэтому вы приезжаете к \(12+4=16\)-й минуте и ждете минуты \(17\), когда появится знаменитость \(7\).
  • Затем, сразу после того, как вы сфотографировали знаменитость \(7\), вы двигаетесь к перекрестку \((5,4)\). Вам нужно \(|6-5|+|6-4|=1+2=3\) минуты, чтобы добраться туда, поэтому вы приезжаете к \(17+3=20\)-й минуте и ждете минуты \(21\), чтобы сфотографировать знаменитость \(9\).

Пояснение третьего примера: Единственный способ сделать \(1\) фото (больше нельзя)  — это сфотографировать знаменитость с номером \(1\) (поскольку \(|2-1|+|1-1|=1\), вы можете быть на перекрестке \((2,1)\) ровно через одну минуту, следовательно, вы как раз вовремя, чтобы сфотографировать знаменитость \(1\)).

Пояснение четвертого примера: Один из способов сделать \(3\) фото (больше нельзя)  — это сфотографировать знаменитостей с номерами \(3, 8, 10\):

  • Чтобы добраться из офиса на \((1,1)\) до перекрестка \((101,145)\) вам понадобится \(|1-101|+|1-145|=100+144=244\) минут, чтобы вы смогли быть там, когда появится знаменитость \(3\) (на минуте \(341\)).
  • Затем, сразу после того, как вы сфотографировали знаменитость \(3\), вы двигаетесь к перекрестку \((149,379)\). Вам нужно \(|101-149|+|145-379|=282\) минут, чтобы добраться туда, поэтому вы прибываете к \(341+282=623\)-й минуте и ждете минуты \(682\), когда появится знаменитость \(8\).
  • Затем, сразу после того, как вы сфотографировали знаменитость \(8\), вы двигаетесь к перекрестку \((157,386)\). Вам нужно \(|149-157|+|379-386|=8+7=15\) минут, чтобы добраться туда, поэтому вы приезжаете к \(682+15=697\)-й минуте и ждете минуты \(855\), чтобы сфотографировать знаменитость \(10\).

F. Фруктовые последовательности

Бинарный поиск дп разделяй и властвуй Структуры данных *2400

Смотритель зоопарка покупает коробку фруктов чтобы накормить своего любимца кролика. Фрукты в коробке — это последовательность яблок и апельсинов, которая представляется бинарной строкой \(s_1s_2\ldots s_n\) длины \(n\). В ней \(1\) обозначает яблоко, а \(0\) обозначает апельсин.

Поскольку у кролика аллергия на апельсины, смотритель зоопарка хочет найти наидлиннейшую подряд идующую подпоследовательность яблок. Пусть \(f(l,r)\) — это наибольшая длина подряд идущей подпоследовательности яблок в подстроке \(s_{l}s_{l+1}\ldots s_{r}\).

Помогите смотрителю зоопарка найти \(\sum_{l=1}^{n} \sum_{r=l}^{n} f(l,r)\). Другими словами, найдите сумму \(f\) по всем подстрокам.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \leq n \leq 5 \cdot 10^5)\).

В следующей строке находится бинарная строка \(s\) длины \(n\) \((s_i \in \{0,1\})\).

Выходные данные

Выведите единственное целое число: \(\sum_{l=1}^{n} \sum_{r=l}^{n} f(l,r)\).

Примечание

В первом тесте всего есть десять подстрок. Список этих подстрок (мы обозначаем \([l,r]\) как подстроку \(s_l s_{l+1} \ldots s_r\)):

  • \([1,1]\): 0
  • \([1,2]\): 01
  • \([1,3]\): 011
  • \([1,4]\): 0110
  • \([2,2]\): 1
  • \([2,3]\): 11
  • \([2,4]\): 110
  • \([3,3]\): 1
  • \([3,4]\): 10
  • \([4,4]\): 0

Длины наибольших подряд идущих подпоследовательностей из единиц в этих подстроках \(0,1,2,2,1,2,2,1,1,0\) соответственно. Поэтому ответ \(0+1+2+2+1+2+2+1+1+0 = 12\).

G1. Счастливые числа (простая версия)

дп жадные алгоритмы *2900

Это простая версия задачи. Единственное отличие состоит в том, что в этой версии \(q=1\). Вы можете делать взломы, только если обе версии задачи сданы.

Смотритель зоопарка учил \(q\) своих овечек писать и складывать. \(i\)-я овечка должна написать ровно \(k\) неотрицательных чисел, сумма которых равна \(n_i\).

Как ни странно, у овечек есть свои суеверия насчет цифр, и они верят, что цифры \(3\), \(6\) и \(9\) счастливые. Для них удача числа зависит от его десятичного представления; удача всего числа является суммой удачи каждой из его цифр, а удача каждой цифры зависит от величины и позиции согласно следующей таблице. Например, удача числа \(319\) равна \(F_{2} + 3F_{0}\).

Каждая овечка хочет максимизировать сумму удач выписанных \(k\) чисел. Можете ли вы помочь овечкам?

Входные данные

В первой строке находится единственное целое число \(k\) (\(1 \leq k \leq 999999\)): количество чисел, которое должна написать каждая овечка.

В следующей строке находится шесть целых чисел \(F_0\), \(F_1\), \(F_2\), \(F_3\), \(F_4\), \(F_5\) (\(1 \leq F_i \leq 10^9\)): удача, соответствующая каждой позиции.

В следующей строке находится единственное целое число \(q\) (\(q = 1\)): количество овечек.

Каждая из следующих \(q\) строк содержит единственное целое число \(n_i\) (\(1 \leq n_i \leq 999999\)): сумма чисел, которые должна написать \(i\)-я овечка. В этой версии задачи будет только одна такая строка.

Выходные данные

Выведите \(q\) строк, где \(i\)-я строка содержит максимальную сумму удач всех чисел, которые напишет \(i\)-я овечка. В этой версии задачи вы должны вывести только одну строку.

Примечание

В первом тесте \(57 = 9 + 9 + 39\). Три цифры \(9\) дают вклад \(1 \cdot 3\), а \(3\) в позиции десятков дает вклад \(2 \cdot 1\). Таким образом, сумма удач равна \(11\).

Во втором тесте \(63 = 35 + 19 + 9\). Сумма удач равна \(8\).

G2. Счастливые числа (сложная версия)

дп жадные алгоритмы *3000

Это сложная версия задачи. Единственное отличие состоит в ограничениях на \(q\). Вы можете делать взломы, только если обе версии задачи сданы.

Смотритель зоопарка учил \(q\) своих овечек как писать и как складывать. \(i\)-я овечка должна написать ровно \(k\) неотрицательных чисел, сумма которых равна \(n_i\).

Как ни странно, у овечек есть свои суеверия насчет цифр, и они верят, что цифры \(3\), \(6\) и \(9\) счастливые. Для них удача числа зависит от его десятичного представления; удача всего числа является суммой удачи каждой из его цифр, а удача каждой цифры зависит от величины и позиции согласно следующей таблице. Например, удача числа \(319\) равна \(F_{2} + 3F_{0}\).

Каждая овечка хочет максимизировать сумму удач выписанных \(k\) чисел. Можете ли вы помочь овечкам?

Входные данные

В первой строке находится единственное целое число \(k\) (\(1 \leq k \leq 999999\)): количество чисел, которое должна написать каждая овечка.

В следующей строке находится шесть целых чисел \(F_0\), \(F_1\), \(F_2\), \(F_3\), \(F_4\), \(F_5\) (\(1 \leq F_i \leq 10^9\)): удача, соответствующая каждой цифре.

В следующей строке находится единственное целое число \(q\) (\(1 \leq q \leq 100\,000\)): количество овечек.

Каждая из следующих \(q\) строк содержит единственное целое число \(n_i\) (\(1 \leq n_i \leq 999999\)): сумма чисел, которые должна написать \(i\)-я овечка.

Выходные данные

Выведите \(q\) строк, где \(i\)-я строка содержит максимальную сумму удач всех чисел, которые написала \(i\)-я овечка.

Примечание

В первом тесте \(57 = 9 + 9 + 39\). Три цифры \(9\) дают вклад \(1 \cdot 3\), а \(3\) в позиции десятков дает вклад \(2 \cdot 1\). Таким образом, сумма удач равна \(11\).

Во втором тесте \(63 = 35 + 19 + 9\). Сумма удач равна \(8\).

F. Реалистичный геймплей

дп жадные алгоритмы *2600

Недавно вам попался на глаза новый шутер. Говорят, данный шутер обладает реалистичными игровыми механиками.

У вашего персонажа есть пистолет с магазином в \(k\) патронов и ему нужно уничтожить \(n\) волн монстров. Волна \(i\) состоит из \(a_i\) монстров и происходит с момента времени \(l_i\) по момент \(r_i\). Все \(a_i\) появляются в момент \(l_i\) и вы должны уничтожить их всех вплоть до момента \(r_i\) (вы можете убивать монстров ровно в момент \(r_i\)). Для каждой пары последовательных волн верно, что вторая волна начинается не раньше того момента, в который заканчивается первая волна — формально, выполняется условие \(r_i \le l_{i + 1}\). Прочтите примечания к примерам из условия для более хорошего понимания процесса.

Вы уверены в своих навыках и навыках своего персонажа, а потому можете считать, что прицеливание и стрельба моментальны и что вам нужен ровно один выстрел, чтобы убить одного монстра. Однако перезарядка пистолета занимает ровно \(1\) единицу времени.

Одна из реалистичных механик — это механика перезарядки: когда вы перезаряжаетесь, вы выбрасываете старый магазин вместе с оставшимися патронами. А потому постоянные перезарядки могут привести к трате огромного количества патронов.

Вам понравилась данная механика, и вам стало интересно: какое наименьшее количество патронов необходимо потратить (используя или выбрасывая), чтобы уничтожить все волны.

Заметим, что вы не выбрасываете патроны, оставшиеся после уничтожения всех волн монстров, а также начинаете игру с полным магазином.

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 2000\); \(1 \le k \le 10^9\)) — количество волн и размер магазина.

В следующих \(n\) строках заданы описания волн. В \(i\)-й строке заданы три целых числа \(l_i\), \(r_i\) и \(a_i\) (\(1 \le l_i \le r_i \le 10^9\); \(1 \le a_i \le 10^9\)) — отрезок времени, когда происходит \(i\)-я волна и количество монстров в ней.

Гарантируется, что волны не пересекаются по времени (но могут касаться) и заданы в порядке появления, то есть \(r_i \le l_{i + 1}\).

Выходные данные

Если не существует способа зачистить все волны, выведите \(-1\). Иначе, выведите наименьшее количество патронов, которое необходимо потратить (используя или выбрасывая), чтобы уничтожить все волны врагов.

Примечание

В первом примере:

  • В момент \(2\) начинается первая волна и появляются \(6\) монстров. Вы убиваете \(3\)-х монстров и начинаете перезаряжаться.
  • В момент \(3\) начинается вторая волна и появляются еще \(3\) монстра. Вы убиваете оставшихся \(3\)-х монстров первой волны и начинаете перезаряжаться.
  • В момент \(4\) вы убиваете оставшихся \(3\)-х монстров второй волны.
В результате, вы потратите \(9\) патронов.

Во втором примере:

  • В момент \(3\) начинается первая волна и появляются \(11\) монстров. Вы убиваете \(5\) монстров и начинаете перезаряжаться.
  • В момент \(4\) вы убиваете еще \(5\) монстров и начинаете перезаряжаться.
  • В момент \(5\) вы убиваете оставшегося монстра и начинаете перезаряжаться, выбросив старый магазин с \(4\) патронами.
  • В момент \(10\) начинается вторая волна и появляются \(15\) монстров. Вы убиваете \(5\) монстров и начинаете перезаряжаться.
  • В момент \(11\) вы убиваете еще \(5\) монстров и начинаете перезаряжаться.
  • В момент \(12\) вы убиваете последние \(5\) монстров.
В результате, вы потратите \(30\) патронов.

G. Очередное взвешивание графа

битмаски графы дп математика поиск в глубину и подобное Потоки *2600

Дан ориентированный ацикличный граф (ориентированный граф, не содержащий циклов) из \(n\) вершин и \(m\) дуг. \(i\)-я дуга ведет из вершины \(x_i\) в вершину \(y_i\) и имеет вес \(w_i\).

Ваша задача — для каждой вершины \(v\) выбрать некоторое целое число \(a_v\), после чего на каждой дуге \(i\) записать такое число \(b_i\), что \(b_i = a_{x_i} - a_{y_i}\). Вы должны выбрать числа таким образом, чтобы:

  • все \(b_i\) были положительны;
  • значение выражения \(\sum \limits_{i = 1}^{m} w_i b_i\) было минимально возможным.

Можно показать, что для любого ориентированного ацикличного графа с неотрицательными \(w_i\) такой способ выбрать числа существует.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 18\); \(0 \le m \le \dfrac{n(n - 1)}{2}\)).

Далее следуют \(m\) строк, \(i\)-я из них содержит три целых числа \(x_i\), \(y_i\) и \(w_i\) (\(1 \le x_i, y_i \le n\), \(1 \le w_i \le 10^5\), \(x_i \ne y_i\)) — описание \(i\)-й дуги.

Гарантируется, что строки задают описание \(m\) дуг ориентированного ацикличного графа без кратных дуг.

Выходные данные

Выведите \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_v \le 10^9\)), которые необходимо записать на вершинах, чтобы все \(b_i\) были положительны, и значение выражения \(\sum \limits_{i = 1}^{m} w_i b_i\) было минимально возможным. Если ответов несколько — выведите любой. Можно показать, что ответ всегда существует, и хотя бы один из оптимальных ответов удовлетворяет ограничениям \(0 \le a_v \le 10^9\).

G. Игра с удалением чисел

*особая задача дп жадные алгоритмы игры *2100

Алиса и Боб играют в игру. У них есть множество, который изначально состоит из \(n\) целых чисел. Игра длится \(k\) ходов. Во время каждого хода происходит следующее:

  1. сначала Алиса выбирает целое число из множества. Она может выбрать любое целое число кроме максимального. Пусть целое число, выбранное Алисой, равно \(a\);
  2. затем Боб выбирает целое число из множества. Он может выбрать любое целое число которое больше \(a\). Пусть целое число, выбранное Бобом, равно \(b\);
  3. наконец, и \(a\), и \(b\) удаляются из множества, а значение \(b - a\) добавляется к счету игры.

Изначально счет игры равен \(0\). Алиса хочет максимизировать итоговый счет, а Боб хочет минимизировать его. Предположив, что и Алиса, и Боб играют оптимально, вычислите итоговый счет игры.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 400\), \(1 \le k \le \lfloor\frac{n}{2}\rfloor\)) — начальный размер множества и количество ходов в игре.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — стартовое содержимое множества. Это попарно различные целые числа.

Выходные данные

Выведите одно целое число — итоговый счет игры (при условии, что и Алиса, и Боб играют оптимально).

J. Массив с нулевым XOR

*особая задача дп *3400

Вам задан массив целых чисел \(a\) размера \(n\). Данный массив не убывающий, т.е. \(a_1 \le a_2 \le \dots \le a_n\).

Вам необходимо найти массивы целых чисел \(b\) размера \(2n - 1\), таких что:

  • \(b_{2i-1} = a_i\) (\(1 \le i \le n\));
  • массив \(b\) не убывающий;
  • \(b_1 \oplus b_2 \oplus \dots \oplus b_{2n-1} = 0\) (\(\oplus\) обозначает операцию побитового исключающего ИЛИ: https://ru.wikipedia.org/wiki/Исключающее_«или». В языке Kotlin — функция xor).

Посчитайте количество массивов, удовлетворяющих всем вышеописанным условиям, взятое по модулю \(998244353\).

Входные данные

В первой строке задано единственное целое число \(n\) (\(2 \le n \le 17\)) — размер массива \(a\).

Вторая строка содержит \(n\) целых чисел (\(0 \le a_i \le 2^{60} - 1; a_i \le a_{i+1}\)) — элементы массива \(a\).

Выходные данные

Выведите одно целое число — количество массивов, удовлетворяющих всем вышеописанным условиям, взятое по модулю \(998244353\).

F. Сумма с нулевым остатком

дп *2100

Вам задана матрица \(a\) размера \(n \times m\), состоящая из целых чисел.

Вы можете выбрать не более \(\left\lfloor\frac{m}{2}\right\rfloor\) элементов в каждой строке. Ваша задача — выбрать эти элементы таким образом, что их сумма делится на \(k\) и эта сумма является максимальной.

Другими словами, вы можете выбрать не более половины (округленной вниз) элементов в каждой строке, вам необходимо найти максимальную сумму этих элементов, которая делится на \(k\).

Заметьте, что вы можете выбрать ноль элементов (и сумма такого множества равна \(0\)).

Входные данные

Первая строка входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m, k \le 70\)) — количество строк в матрице, количество столбцов в матрице и значение \(k\). Следующие \(n\) строк содержат \(m\) элементов каждая, где \(j\)-й элемент \(i\)-й строки равен \(a_{i, j}\) (\(1 \le a_{i, j} \le 70\)).

Выходные данные

Выведите одно целое число — максимальная сумма, делящаяся на \(k\), которую вы можете получить.

Примечание

В первом тестовом примере оптимальным ответом является взять \(2\) и \(4\) в первой строке, \(5\) и \(2\) во второй строке и \(7\) и \(4\) в третьей строке. Общая сумма равна \(2 + 4 + 5 + 2 + 7 + 4 = 24\).

C. Шеф Монокарп

дп жадные алгоритмы математика Паросочетания Потоки сортировки *1800

Шеф Монокарп только что поставил \(n\) блюд на плиту. Он знает, что оптимальное время готовки \(i\)-го блюда равно \(t_i\) минут.

В любую положительную целую минуту \(T\) Монокарп может снять не более одного блюда с плиты. Если достать \(i\)-е блюдо в некоторую минуту \(T\), то его испорченность будет равна \(|T - t_i|\) — модуль значения разности между \(T\) и \(t_i\). Как только блюдо снято с плиты, его уже нельзя поставить обратно.

Монокарп должен снять все блюда с плиты. Какую минимальную суммарную испорченность он может получить?

Входные данные

В первой строке записано одно целое число \(q\) (\(1 \le q \le 200\)) — количество наборов входных данных.

Затем идут \(q\) наборов входных данных.

В первой строке набора входных данных записано одно целое число \(n\) (\(1 \le n \le 200\)) — количество блюд на плите.

Во второй строке набора входных данных записаны \(n\) целых чисел \(t_1, t_2, \dots, t_n\) (\(1 \le t_i \le n\)) — оптимальное время готовки каждого блюда.

Сумма \(n\) по всем \(q\) наборам входных данных не превосходит \(200\).

Выходные данные

На каждый набор входных данных выведите одно целое число — минимальную суммарную испорченность блюд, которую может получить Монокарп, когда снимет все блюда с плиты. Помните, что Монокарп может снимать блюда только в положительные целые минуты и не более одного в минуту.

Примечание

В первом наборе входных данных Монокарп может снять блюда в минуты \(3, 1, 5, 4, 6, 2\). Тогда суммарная испорченность будет равна \(|4 - 3| + |2 - 1| + |4 - 5| + |4 - 4| + |6 - 5| + |2 - 2| = 4\).

Во втором наборе входных данных Монокарп может снять блюда в минуты \(4, 5, 6, 7, 8, 9, 10\).

В третьем наборе входных данных Монокарп может снять блюдо в минут \(1\).

В четвертом наборе входных данных Монокарп может снять блюда в минуты \(5, 1, 2, 4, 3\).

В пятом наборе входных данных Монокарп может снять блюда в минуты \(1, 3, 4, 5\).

E. Сделай возрастающим

Бинарный поиск дп Конструктив реализация Структуры данных *2200

Задан массив из \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) и набор \(b\) из \(k\) различных целых чисел от \(1\) до \(n\).

За одну операцию вы можете выбрать два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(x\) может быть любым целым числом) и присвоить \(a_i := x\). Эта операция может быть выполнена только в том случае, если \(i\) не принадлежит множеству \(b\).

Найдите минимальное количество операций, которые необходимо выполнить, чтобы массив \(a\) строго возрастал (то есть \(a_1 < a_2 < a_3 < \dots < a_n\)), или сообщите, что это невозможно.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 5 \cdot 10^5\), \(0 \le k \le n\)) — размер массива \(a\) и множества \(b\) соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^9\)).

Затем, если \(k \ne 0\), следует третья строка, содержащая \(k\) целых чисел \(b_1\), \(b_2\), ..., \(b_k\) (\(1 \le b_1 < b_2 < \dots < b_k \le n\)). Если \(k = 0\), то эта строка отсутствует.

Выходные данные

Если невозможно сделать массив \(a\) строго возрастающим с помощью заданных операций, выведите \(-1\).

В противном случае выведите одно целое число — минимальное количество операций, которые необходимо выполнить.

F. Эмоциональные рыбаки

дп Комбинаторика математика *2600

\(n\) рыбаков только что вернулись с рыбалки. \(i\)-й рыбак поймал рыбу веса \(a_i\).

Рыбаки собираются похвастаться пойманной рыбой друг перед другом. Для этого они сначала выбирают порядок, в котором они показывают пойманную рыбу (каждый рыбак показывает свою рыбу ровно один раз, то есть, формально, порядок является перестановкой целых чисел от \(1\) до \(n\)). Затем они показывают свою рыбу в соответствии с выбранным порядком. Когда рыбак показывает свою рыбу, он может стать радостным, грустным, или остаться спокойным.

Предположим, что рыбак показывает рыбу веса \(x\), и максимальный вес среди ранее показанных рыб равен \(y\) (\(y = 0\), если этот рыбак показывает свою рыбу первым). Тогда:

  • если \(x \ge 2y\), рыбак становится радостным;
  • если \(2x \le y\), рыбак становится грустным;
  • если ни одно из этих условий не выполняется, рыбак остается спокойным.

Назовем порядок, в котором рыбаки показывают свою рыбу, эмоциональным, если после того, как все рыбаки покажут свою рыбу, ни один из них не останется спокойным. Посчитайте количество эмоциональных порядков по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 5000\)).

Во второй строке заданы \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Выведите одно число — количество эмоциональных порядков, взятое по модулю \(998244353\).

D. Финал INOI

бпф дп Комбинаторика *3100

Сегодня финал INOI (Иранская национальная олимпиада по информатике). Зал для контеста представляет собой ряд из \(n\) компьютеров. Все компьютеры пронумерованы целыми числами от \(1\) до \(n\) слева направо. Всего будет \(m\) участников, пронумерованных целыми числами от \(1\) до \(m\).

У нас есть массив \(a\) длины \(m\), где \(a_{i}\) (\(1 \leq a_i \leq n\)) — это компьютер, около которого \(i\)-й участник хочет сесть.

Также у нас есть другой массив \(b\) длины \(m\), состоящий из символов «L» и «R». \(b_i\) — это сторона, с которой \(i\)-й участник заходит в зал. «L» обозначает, что участник заходит в зал левее \(1\)-го компьютера, и идет слева направо, а «R» обозначает, что участник заходит в зал правее \(n\)-го компьютера, и идет справа налево.

Участники в порядке от \(1\) до \(m\) заходят в зал один за другим. \(i\)-й из них заходит в зал со стороны \(b_i\) и идет до компьютера \(a_i\). Если этот компьютер уже занят, он продолжает идти в том же направлении до первого не занятого компьютера. После этого он садится за этот компьютер. Если участник не встречает ни одного свободного компьютера, он расстраивается и покидает соревнование.

Расстроенность \(i\)-о участника — это расстояние между его желаемым компьютером (\(a_i\)) и компьютером, за который он в итоге сел. Расстояние между компьютерами \(i\) и \(j\) равно \(|i - j|\).

Числа в массиве \(a\) могут быть равны. Существует \(n^m \cdot 2^m\) возможных пар массивов \((a, b)\).

Рассмотрим все пары массивов \((a, b)\) такие, что ни один участник не расстроится. Для каждой из них посчитаем сумму расстроенностей всех участников. Найдите сумму этих чисел.

Вам будет дан некоторый простой модуль \(p\). Найдите эту сумму по модулю \(p\).

Входные данные

В единственной строке находится три целых числа \(n\), \(m\), \(p\) (\(1 \leq m \leq n \leq 500, 10^8 \leq p \leq 10 ^ 9 + 9\)).

Гарантируется, что число \(p\) простое.

Выходные данные

Выведите единственное целое число — необходимую сумму по модулю \(p\).

Примечание

В первом тесте есть три возможных массива \(a\): \(\{1\}\), \(\{2\}\) и \( \{3\}\) и два возможных массива \(b\): \(\{\mathtt{L}\}\) и \(\{\mathtt{R}\}\). Для всех шести возможных пар массивов \((a, b)\) единственный участник сядет за компьютером \(a_1\) (потому что он точно окажется не занят), поэтому его расстроенность будет равна \(0\). Поэтому сумма всех расстоенностей будет равна \(0\).

Во втором тесте все возможные пары массивов \((a, b)\) такие, что ни один участник не будет расстроен:

  • \((\{1, 1\}, \{\mathtt{L}, \mathtt{L}\})\), сумма расстроенностей \(1\);
  • \((\{1, 1\}, \{\mathtt{R}, \mathtt{L}\})\), сумма расстроенностей \(1\);
  • \((\{2, 2\}, \{\mathtt{R}, \mathtt{R}\})\), сумма расстроенностей \(1\);
  • \((\{2, 2\}, \{\mathtt{L}, \mathtt{R}\})\), сумма расстроенностей \(1\);
  • все возможные пары массивов \(a \in \{\{1, 2\}, \{2, 1\}\}\) и \(b \in \{\{\mathtt{L}, \mathtt{L}\}, \{\mathtt{R}, \mathtt{L}\}, \{\mathtt{L}, \mathtt{R}\}, \{\mathtt{R}, \mathtt{R}\}\}\), сумма расстроенностей \(0\).

Поэтому ответ равен \(1 + 1 + 1 + 1 + 0 \ldots = 4\).

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

B. Спасение города

дп жадные алгоритмы математика сортировки *1300

Бертаун это город, в котором находятся \(n\) зданий, расположенных вдоль одной прямой.

Служба безопасности города обнаружила, что некоторые здания заминированы. Была составлена карта, представляющая из себя строку длиной \(n\), где \(i\)-й символ равен «1», если под зданием номер \(i\) находится мина и «0» в противном случае.

Лучший сапер Бертауна умеет активировать мины так, чтобы здания над ними не пострадали. Когда мина под зданием с номером \(x\) активируется, она взрывается и активирует две соседние мины под зданиями с номерами \(x-1\) и \(x+1\) (если мины под зданием не было, то ничего не происходит). Таким образом, достаточно активировать одну любую мину на непрерывном отрезке из мин, чтобы активировать все мины этого отрезка. За ручную активацию одной мины сапер берет \(a\) монет. Он может повторять эту операцию сколько угодно раз.

Также сапер может сам поместить мину под здание, где ее не было. За такую операцию он берет \(b\) монет. Он также может повторять эту операцию сколько угодно раз.

Операции сапер может проводить в любом порядке.

Вы хотите взорвать все мины в городе, чтобы сделать его безопасным. Найдите минимальное количество монет, которое придется заплатить саперу, чтобы после его действий в городе не осталось мин.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^5\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записаны два целых числа \(a\) и \(b\) (\(1 \le a, b \le 1000\)) — стоимость активации и размещения одной мины соответственно.

В следующей строке записана карта мин в городе — строка, состоящая из нулей и единиц.

Сумма длин строк по всем наборам тестовых данных не превосходит \(10^5\).

Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное количество монет, которое придется заплатить саперу.

Примечание

Во втором наборе тестовых данных, если мы поместим мину под четвертое здание и после этого активируем ее, то активируются все мины на поле. Стоимость таких операций равна шести, \(b=1\) монета за помещение мины и \(a=5\) монет за активацию.

D. Прямоугольная ломаная

геометрия дп Конструктив *2900

На координатной плоскости была нарисована замкнутая ломаная, состоящая из вертикальных и горизонтальных отрезков (параллельных осям координат). Горизонтальные и вертикальные отрезки этой ломаной чередовались (за горизонтальным отрезком шёл вертикальный, и наоборот). В этой ломаной не было пересечений отрезков по внутренним точкам, то есть если какие-то два отрезка пересекались, то точка их пересечения являлась одним из концом каждого из них (обратите внимание на примеры в пояснении к условию).

К сожалению, ломаную стёрли, а про неё осталось совсем немного информации: известны лишь длины всех вертикальных и всех горизонтальных отрезков. Вам требуется восстановить любую ломаную, удовлетворяющую условию, или определить, что такой ломаной не существует.

Входные данные

В первой строке задано целое число \(t\) (\(1 \leq t \leq 200\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(h\) (\(1 \leq h \leq 1000\)) — количество горизонтальных отрезков.

Во второй строке каждого набора заданы \(h\) целых чисел \(l_1, l_2, \dots, l_h\) (\(1 \leq l_i \leq 1000\)) — длины горизонтальных отрезков ломаной, в произвольном порядке.

В третьей строке задано одно целое число \(v\) (\(1 \leq v \leq 1000\)) — количество вертикальных отрезков.

В четвёртой строке заданы \(v\) целых чисел \(p_1, p_2, \dots, p_v\) (\(1 \leq p_i \leq 1000\)) — длины вертикальных отрезков ломаной, в произвольном порядке.

Все наборы входных данных разделяются пустой строкой.

Сумма \(h + v\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите слово Yes, если требуемая ломаная существует или No в противном случае. Если ломаная существует, в следующих \(n\) строках выведите последовательно вершины этой ломаной. В \(i\)-й строке выведите два целых числа \(x_i\), \(y_i\) — координаты \(i\)-й вершины.

Обратите внимание, что все отрезки этой ломаной должны быть параллельны осям координат, при этом после горизонтального отрезка должен идти вертикальный, и наоборот. Все координаты не должны превосходить \(10^9\) по абсолютной величине.

Примечание

В первом наборе первого примера ответ Yes — в качестве примера можно привести квадрат:

В первом наборе второго примера искомая ломаная существует. Обратите внимание, что ломаная пересекается по вершинам-концам отрезков:

Во втором наборе второго примера искомая ломаная может выглядеть, как на рисунке ниже:

Обратите внимание, что пример ниже не будет корректным для этого набора входных данных, так как содержит самопересечения:

E. Найти вершину

Деревья дп интерактив Перебор поиск в глубину и подобное *3500

Это интерактивная задача.

Вам задано дерево — связный неориентированный граф без циклов. В нём загадали одну из вершин. Вы можете задавать вопросы интерактору: за один вопрос вы можете выбрать ребро и узнать, какой из двух концов ребра находится ближе к загаданной вершине, то есть, до какого из двух концов меньше кратчайшее расстояние от загаданной вершины. Вам требуется определить загаданную вершину за минимальное для данного дерева число запросов в худшем случае.

Обратите внимание, что загаданная вершина может быть не фиксирована интерактором заранее: в зависимости от ваших запросов он может менять её на любую другую, с условием, что это не противоречит ответам на предыдущие запросы.

Входные данные

В первой строке входных данных содержится целое число \(n\) (\(2 \le n \le 100\)) — количество вершин в дереве.

В каждой из следующих \(n-1\) строк записаны два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)), обозначающих ребро между вершинами \(u\) и \(v\). Гарантируется, что данные ребра образуют дерево.

Протокол взаимодействия

После считывания выходных данных вы можете отправлять интерактору запросы двух типов:

  1. «\(u\) \(v\)» — узнать для ребра дерева \((u, v)\) (\(1 \le u, v \le n\)), какой из его концов ближе к загаданной вершине. В ответ вы получите одно число: номер одной из двух вершин. Обратите внимание, что \(u\) и \(v\) должны быть соединены ребром в дереве, поэтому они не могут находиться на равном расстоянии от загаданной вершины.
  2. «\(u\)» — сообщить интерактору о том, что вы выяснили номер загаданной вершины. После вывода этой команды ваша программа должна немедленно завершиться.

После каждого вопроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Idleness Limit Exceeded или Превышено реальное время работы. Для сброса буфера вы можете использовать:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • sys.stdout.flush() в Python;
  • смотрите документацию для других языков.

В случае, если вы сделаете большее число запросов, чем может быть необходимо для данного дерева в худшем случае, вы получите вердикт Неправильный ответ.

Примечание

Взломы в данной задаче запрещены.

B. Ловя мошенников

дп Строки *1800

Вам даны две строки \(A\) и \(B\), представляющие эссе двух учеников, которые подозреваются в мошенничестве. Для любых двух строк \(C\), \(D\) мы определяем оценку их сходства \(S(C,D)\) как \(4\cdot LCS(C,D) - |C| - |D|\), где \(LCS(C,D)\) обозначает длину наибольшей общей подпоследовательности строк \(C\) и \(D\).

Вы считаете, что могла быть скопирована только часть эссе, поэтому вас интересуют их подстроки.

Вычислите максимальную оценку сходства по всем парам подстрок. Более формально, выведите максимальное значение \(S(C, D)\), по всем парам \((C, D)\), где \(C\) — некоторая подстрока \(A\), а \(D\) — некоторая подстрока \(B\).

Если \(X\) — строка, то \(|X|\) обозначает ее длину.

Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Строка \(a\) является подпоследовательностью строки \(b\), если \(a\) можно получить из \(b\) путем удаления нескольких (возможно, нуля или всех) символов.

Обратите внимание на разницу между подстрокой и подпоследовательностью, так как оба термина встречаются в условии задачи.

Возможно, вам будет интересно прочитать страницу Википедии о наибольшей общей подпоследовательности.

Входные данные

Первая строка содержит два положительных целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 5000\)) — длины двух строк \(A\) и \(B\).

Вторая строка содержит строку, состоящую из \(n\) строчных латинских букв — строку \(A\).

В третьей строке находится строка, состоящая из \(m\) строчных латинских букв  — строку \(B\).

Выходные данные

Выведите максимальное значение \(S(C, D)\), по всем парам \((C, D)\), где \(C\) — некоторая подстрока \(A\), а \(D\) — некоторая подстрока \(B\).

Примечание

В первом примере:

abb из первой строки и abab из второй строки имеют LCS равный abb.

Результат равен \(S(abb, abab) = (4 \cdot |abb|\)) - \(|abb|\) - \(|abab|\) = \(4 \cdot 3 - 3 - 4 = 5\).

C. Ксор дерево

Бинарный поиск битмаски Деревья дп разделяй и властвуй Структуры данных *2100

Для заданной последовательности попарно различных неотрицательных целых чисел \((b_1, b_2, \dots, b_k)\) мы определяем, является ли она хорошей следующим образом:

  • Рассмотрим граф на \(k\) вершинах, на которых написаны числа от \(b_1\) до \(b_k\).
  • Для каждого \(i\) от \(1\) до \(k\) мы находим такое \(j\) (\(1 \le j \le k\), \(j\neq i\)), для которого значение \((b_i \oplus b_j)\) минимально среди всех таких \(j\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. После этого мы проводим неориентированное ребро между вершинами с числами \(b_i\) и \(b_j\).
  • Последовательность называется хорошей, если и только если получившийся граф является деревом (то есть он связан и не имеет простых циклов).

Возможно, что для некоторых чисел \(b_i\) и \(b_j\) вы попробуете добавить ребро между ними дважды. Тем не менее вы добавите это ребро только один раз.

Ниже приведен пример (рисунок, соответствующий первому примеру).

Последовательность \((0, 1, 5, 2, 6)\) не хорошая, так как мы не можем достичь \(1\) из \(5\).

Однако, последовательность \((0, 1, 5, 2)\) является хорошей.

Вам дана последовательность \((a_1, a_2, \dots, a_n)\) из попарно различных неотрицательных целых чисел. Вы хотите удалить из нее некоторые элементы (возможно, ни одного), чтобы сделать оставшуюся последовательность хорошей. Какое минимально возможное количество удалений необходимо для достижения этой цели?

Можно показать, что для любой последовательности можно удалить некоторое количество элементов, оставив как минимум \(2\), так, что оставшаяся последовательность будет хорошей.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 200,000\)) — длину последовательности.

Во второй строке находится \(n\) попарно различных неотрицательных целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы последовательности.

Выходные данные

Необходимо вывести ровно одно целое число — минимально возможное количество элементов, которые нужно удалить, чтобы сделать оставшуюся последовательность хорошей.

Примечание

Обратите внимание, что числа, которые вы удаляете, не влияют на процедуру проверки, является ли хорошей оставшаяся последовательность.

Возможно, что для некоторых чисел \(b_i\) и \(b_j\) вы попробуете добавить ребро между ними дважды. Тем не менее вы добавите это ребро только один раз.

C. Счастливая подпоследовательность

дп Комбинаторика математика *2100

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

У Пети есть последовательность a из n целых чисел.

Подпоследовательность последовательности a — это последовательность, которая получается из a путем удаления нуля или более ее элементов.

Две подпоследовательности считаются различными, если множества индексов входящих в них чисел различны, то есть значения элементов не учитываются при сравнении подпоследовательностей. В частности, любая последовательность длины n имеет ровно 2n различных подпоследовательностей (считая пустую).

Подпоследовательность называется счастливой, если она имеет длину ровно k, и не содержит двух одинаковых счастливых чисел (несчастливые числа могут повторяться сколько угодно раз).

Помогите Пете найти количество различных счастливых подпоследовательностей последовательности a. Так как родители не разрешают Пете играть с большими числами, результат нужно вывести по модулю простого числа 1000000007 (109 + 7).

Входные данные

В первой строке через пробел задано два целых числа n и k (1 ≤ k ≤ n ≤ 105). В следующей строке задано n целых чисел ai (1 ≤ ai ≤ 109) — последовательность a.

Выходные данные

В единственной строке выведите одно число — ответ на задачу по модулю простого числа 1000000007 (109 + 7).

Примечание

В первом примере все 3 подпоследовательности нужной длины являются счастливыми.

Во втором примере есть 4 счастливые подпоследовательности, множества индексов для которых равны (индексация с 1): {1, 3}, {1, 4}, {2, 3} и {2, 4}.

G. Коммунизм

битмаски Деревья дп *3500

Обратите внимание на нестандартное ограничение по памяти в этой задаче.

В параллельной вселенной сатану звали «Trygub». По этой причине символы из его имени были удалены из алфавита еще в древние времена.

В правительстве есть \(n\) работников, стоящих в ряд и пронумерованных целыми числами от \(1\) до \(n\) слева направо. Категории их работы могут быть описаны строкой \(s\) длины \(n\), в которой символ \(s_i\) обозначает категорию работы \(i\)-о работника.

Новый закон был принят для того, чтобы увеличить равенство между всеми работниками. Правительство решило сделать так, чтобы все работники имели одинаковую категорию работы, делая следующую операцию любое количество раз (возможно ноль).

Есть зафиксированный рациональный параметр \(k=\frac ab\), обозначающий то, насколько просто убедить общественность. Он будет использоваться для того, чтобы определить успешность операции.

За одну операцию правительство сначала выбирает категорию работы \(x\), такую что существует хотя бы один работник этой категории в текущий момент. Обозначим за \(i_1,\ldots, i_m\) (\(i_1<\ldots<i_m\)) позиции всех работников с категорией работы \(x\). Если \(k\cdot (i_m-i_1+1)\le m\), то правительство может выбрать любую категорию работы \(y\), для которой существует хотя бы один работник этой категории в текущий момент и поменять категорию всех работников с категорией работы \(x\) на \(y\).

Если можно сделать так, чтобы все работники имели категорию работы \(x\), мы называем категорию работы \(x\) достижимой. Можете ли вы сказать правительству множество достижимых категорий работы?

Входные данные

В первой строке находится три целых числа \(n, a, b\) (\(1 \le n \le 5000\), \(1\le a\le b\le 10^5\)) — количество работников, числитель и знаменатель параметра \(k\), соответственно.

Во второй строке находится строка \(s\) длины \(n\), состоящая из прописных символов латинского алфавита — категории работы всех работников. Символы 't', 'r', 'y', 'g', 'u' и 'b' не встречаются в строке \(s\).

Выходные данные

Выведите целое число \(c\), равное количеству достижимых категорий работы и затем \(c\) символов, разделенных пробелами  — достижимые категории работы в лексикографическом порядке.

Примечание

Первая операция обязана выбрать категорию работы 'i', потому что все другие категории работы не удовлетворяют условию. Поэтому 'i' не будет достижимой.

Ниже показано, как достичь 'c', 'm' и 'o'. Квадратные скобки обозначают отрезок, содержащий всех работников выбранной категории. Красный цвет выделяет эту категорию, синий цвет выделяет новую категорию после операции.

  • Получение 'c':
    1. (\(\texttt{com}\color{red}{\texttt{[i]}}\texttt{com} \rightarrow \texttt{com}\color{#1E90FF}{\texttt{[o]}}\texttt{com}\))
    2. (\(\texttt{c}\color{red}{\texttt{[o}}\texttt{m}\color{red}{\texttt{o}}\texttt{c}\color{red}{\texttt{o]}}\texttt{m} \rightarrow \texttt{c}\color{#1E90FF}{\texttt{[m}}\texttt{m}\color{#1E90FF}{\texttt{m}}\texttt{c}\color{#1E90FF}{\texttt{m]}}\texttt{m}\))
    3. (\(\texttt{c}\color{red}{\texttt{[mmm}}\texttt{c}\color{red}{\texttt{mm]}} \rightarrow \texttt{c}\color{#1E90FF}{\texttt{[ccc}}\texttt{c}\color{#1E90FF}{\texttt{cc]}}\))
  • Получение 'm':
    1. (\(\texttt{com}\color{red}{\texttt{[i]}}\texttt{com} \rightarrow \texttt{com}\color{#1E90FF}{\texttt{[o]}}\texttt{com}\))
    2. (\(\texttt{c}\color{red}{\texttt{[o}}\texttt{m}\color{red}{\texttt{o}}\texttt{c}\color{red}{\texttt{o]}}\texttt{m} \rightarrow \texttt{c}\color{#1E90FF}{\texttt{[c}}\texttt{m}\color{#1E90FF}{\texttt{c}}\texttt{c}\color{#1E90FF}{\texttt{c]}}\texttt{m}\))
    3. (\(\color{red}{\texttt{[cc}}\texttt{m}\color{red}{\texttt{ccc]}}\texttt{m} \rightarrow \color{#1E90FF}{\texttt{[mm}}\texttt{m}\color{#1E90FF}{\texttt{mmm]}}\texttt{m}\))
  • Получение 'o':
    1. (\(\texttt{com}\color{red}{\texttt{[i]}}\texttt{com} \rightarrow \texttt{com}\color{#1E90FF}{\texttt{[c]}}\texttt{com}\))
    2. (\(\color{red}{\texttt{[c}}\texttt{om}\color{red}{\texttt{cc]}}\texttt{om} \rightarrow \color{#1E90FF}{\texttt{[m}}\texttt{om}\color{#1E90FF}{\texttt{mm]}}\texttt{om}\))
    3. (\(\color{red}{\texttt{[m}}\texttt{o}\color{red}{\texttt{mmm}}\texttt{o}\color{red}{\texttt{m]}} \rightarrow \color{#1E90FF}{\texttt{[o}}\texttt{o}\color{#1E90FF}{\texttt{ooo}}\texttt{o}\color{#1E90FF}{\texttt{o]}}\))

B. Неподстрочные подпоследовательности

дп жадные алгоритмы реализация Строки *900

У Hr0d1y есть \(q\) запросов на бинарной строке \(s\) длины \(n\). Бинарная строка это строка, содержащая только символы «0» и «1».

Запрос задается парой целых чисел \(l_i\), \(r_i\) \((1 \leq l_i \lt r_i \leq n)\).

Для каждого запроса ему необходимо определить, есть ли хорошая подпоследовательность в строке \(s\), которая равна подстроке \(s[l_i\ldots r_i]\).

  • Подстрока \(s[i\ldots j]\) строки \(s\) — это строка из символов \(s_i s_{i+1} \ldots s_j\).
  • Строка \(a\) называются подпоследовательностью строки \(b\), если \(a\) может быть получена из \(b\) удалением некоторых символов, не меняя порядка оставшихся.
  • Подпоследовательность называется хорошей, если она не последовательная и имеет длину \(\ge 2\). Например, если \(s\) равна «1100110», то подпоследовательности \(s_1s_2s_4\)1100110») и \(s_1s_5s_7\)1100110») являются хорошими, а \(s_1s_2s_3\)1100110») не является.

Можете ли вы помочь Hr0d1y ответить на каждый запрос?

Входные данные

В первой строке записано одно целое число \(t\) (\(1\leq t \leq 100\)) — количество наборов входных данных.

Далее идут описания наборов входных данных.

В первой строке записаны два целых числа \(n\) (\(2 \leq n \leq 100\)) и \(q\) (\(1\leq q \leq 100\)) — длина строки и число запросов.

Во второй строке записана строка \(s\).

В \(i\)-й из следующих \(q\) строк записаны два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \lt r_i \leq n\)).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк. В \(i\)-й строке ответа на каждый набор входных данных должно быть записано «YES», если есть хорошая подпоследовательность, равная подстроке \(s[l_i...r_i]\), и «NO» иначе.

Вы можете выводить каждый символ в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных:

  • \(s[2\ldots 4] = \) «010». В этом случае \(s_1s_3s_5\)001000») и \(s_2s_3s_6\)001000») являются подходящими хорошими подпоследовательностями, а \(s_2s_3s_4\)001000») — нет.
  • \(s[1\ldots 3] = \) «001». Нет подходящей хорошей подпоследовательности.
  • \(s[3\ldots 5] = \) «100». В этом случае \(s_3s_5s_6\)001000») — это подходящая хорошая подпоследовательность.

C. Равенство строк

дп жадные алгоритмы реализация Строки хэши *1400

У Ashish есть две строки \(a\) и \(b\) длины \(n\) и целое число \(k\). Строки содержат только строчные буквы латинского алфавита.

Он хочет превратить строку \(a\) в строку \(b\), исполнив несколько (возможно, ноль) операций над \(a\).

За одну операцию он может сделать одно из двух возможных действий:

  • выбрать индекс \(i\) (\(1 \leq i\leq n-1\)) и поменять местами \(a_i\) и \(a_{i+1}\), или
  • выбрать индекс \(i\) (\(1 \leq i \leq n-k+1\)) и, если все символы среди \(a_i, a_{i+1}, \ldots, a_{i+k-1}\) равны какому-то символу \(c\) (\(c \neq\) «z»), заменить каждый из них на символ \((c+1)\), таким образом, «a» заменяется на «b», «b» заменяется на «c» и так далее.

Обратите внимание, что он может исполнить любое число операций, и операции можно выполнять только на строке \(a\).

Помогите Ashish определить, возможно ли превратить \(a\) в \(b\), сделав несколько (возможно, ноль) операций на ней.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) (\(2 \leq n \leq 10^6\)) и \(k\) (\(1 \leq k \leq n\)).

Во второй строке записана одна строка \(a\) длины \(n\), состоящая только из строчных букв латинского алфавита.

В третьей строке записана одна строка \(b\) длины \(n\), состоящая только из строчных букв латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «Yes», если Ashish может превратить \(a\) в \(b\) после некоторого числа операций, иначе выведите «No».

Вы можете выводить каждый символ в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных можно доказать, что невозможно превратить \(a\) в \(b\).

Во втором наборе входных данных

«abba» \(\xrightarrow{\text{inc}}\) «acca» \(\xrightarrow{\text{inc}}\) \(\ldots\) \(\xrightarrow{\text{inc}}\) «azza».

Здесь «swap» обозначает операцию первого типа, а «inc» обозначает операцию второго типа.

В третьем наборе входных данных

«aaabba» \(\xrightarrow{\text{swap}}\) «aaabab» \(\xrightarrow{\text{swap}}\) «aaaabb» \(\xrightarrow{\text{inc}}\) \(\ldots\) \(\xrightarrow{\text{inc}}\) «ddaabb» \(\xrightarrow{\text{inc}}\) \(\ldots\) \(\xrightarrow{\text{inc}}\) «ddddbb» \(\xrightarrow{\text{inc}}\) \(\ldots\) \(\xrightarrow{\text{inc}}\) «ddddcc».

D. Радиовышки

дп Комбинаторика математика *1600

На координатной прямой расположено \(n + 2\) города, с номерами от \(0\) до \(n + 1\). \(i\)-й город расположен в точке \(i\).

В каждом из городов \(1, 2, \dots, n\) с вероятностью \(\frac{1}{2}\) строится радиовышка (эти события независимы). После этого вы хотите установить мощность сигнала каждой вышки равной целому числу от \(1\) до \(n\) (мощность сигнала не обязательно одинакова для всех вышек, но и не обязательно отличается). Сигнал с вышки, расположенной в городе \(i\) с мощностью сигнала \(p\), достигает каждого города \(c\), что \(|c - i| < p\).

После постройки вышек вы хотите выбрать мощность сигнала таким образом, чтобы:

  • города \(0\) и \(n + 1\) не получали сигнал от радиовышек;
  • города \(1, 2, \dots, n\) получали сигнал ровно от одной радиовышки каждый.

Например, если \(n = 5\), и вышки построены в городах \(2\), \(4\) и \(5\), вы можете установить мощность сигнала вышки в городе \(2\) равной \(2\), а мощность сигнала вышек в городах \(4\) и \(5\) равной \(1\). Таким образом, города \(0\) и \(n + 1\) не получат сигнал ни от одной вышки, города \(1\), \(2\) и \(3\) получат сигнал от вышки в городе \(2\), город \(4\) получит сигнал от вышки в городе \(4\), а город \(5\) получит сигнал от вышки в городе \(5\).

Посчитайте вероятность того, что после постройки вышек у вас будет возможность установить мощность сигнала каждой из них, чтобы удовлетворить всем ограничениям.

Входные данные

Первая (и единственная) строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — вероятность того, что найдется способ установить мощность сигнала так, чтобы все ограничения были выполнены, взятая по модулю \(998244353\).

Вероятность можно выразить в виде несократимой дроби \(\frac{x}{y}\). Вы должны вывести значение \(x \cdot y^{-1} \bmod 998244353\), где \(y^{-1}\) — целое число, такое, что \(y \cdot y^{-1} \bmod 998244353 = 1\).

Примечание

Настоящий ответ для первого примера — \(\frac{1}{4}\):

  • с вероятностью \(\frac{1}{4}\) вышки построены в обоих городах \(1\) и \(2\), поэтому мы можем установить их мощность сигнала равной \(1\).

Настоящий ответ для второго примера — \(\frac{1}{4}\):

  • с вероятностью \(\frac{1}{8}\) вышки построены в городах \(1\), \(2\) и \(3\), поэтому мы можем установить их мощность сигнала равной \(1\);
  • с вероятностью \(\frac{1}{8}\) построена только одна башня в городе \(2\), и мы можем установить ее мощность сигнала равной \(2\).

Настоящий ответ для третьего примера — \(\frac{5}{32}\). Обратите внимание, что даже если предыдущие пояснения использовали равные мощности сигнала для всех башен, это не обязательно так. Например, если \(n = 5\) и башни построены в городах \(2\), \(4\) и \(5\), вы можете установить мощность сигнала башни в городе \(2\) равной \(2\), а мощность сигнала башен в городах \(4\) и \(5\) равной \(1\).

E. Два разбора

дп жадные алгоритмы Перебор сортировки *2500

Только что завершился Берляндский региональный отбор к ICPC. Было \(m\) участников, пронумерованных от \(1\) до \(m\), которые решали \(n\) задач, пронумерованных от \(1\) до \(n\).

Сейчас будет проходить разбор. Два автора задач готовы разобрать по \(k\) последовательных задач каждый. Авторы выбирают отрезки из \(k\) последовательных задач независимо друг от друга. Отрезки могут совпадать, пересекаться или не пересекаться вообще.

\(i\)-й участник хочет послушать разбор всех последовательных задач с \(l_i\) по \(r_i\). Каждый участник всегда выбирает слушать разбор только того автора, который расскажет большее количество интересных ему задач. Пусть это количество будет равно \(a_i\). Никто не может слушать разбор обоих авторов, даже если их отрезки не пересекаются.

Авторы задач хотят выбрать отрезки из \(k\) последовательных задач для себя так, чтобы сумма \(a_i\) по всем участникам была как можно больше.

Входные данные

В первой строке записаны три целых числа \(n, m\) и \(k\) (\(1 \le n, m \le 2000\), \(1 \le k \le n\)) — количество задач, количество участников и длина отрезка задач, разбор на которые планирует рассказать каждый из авторов.

В \(i\)-й из следующих \(m\) строк записаны по два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — отрезок задач, разбор на которые хочет послушать \(i\)-й участник.

Выходные данные

Выведите одно целое число — наибольшую возможную сумму \(a_i\) по всем участникам.

Примечание

В первом примере первый автор может рассказать разбор по задачам с \(1\) по \(3\), а второй — с \(6\) по \(8\). Тогда последовательность \(a_i\) будет \([3, 2, 3, 3, 3]\). Обратите внимание, что последний участник не может послушать обоих авторов, он выбирает только того, кто расскажет ему больше интересующих его задач.

Во втором примере первый может рассказать задачи с \(2\) по \(4\), а второй — с \(4\) по \(6\).

В третьем примере первый может рассказать задачи с \(1\) по \(1\), а второй — с \(2\) по \(2\). Или с \(4\) по \(4\) и с \(3\) по \(3\). Любая пара различных задач даст одинаковую сумму \(2\).

В четвертом примере первый может рассказать задачи с \(1\) по \(5\) и второй тоже с \(1\) по \(5\).

E. Собачьи закуски

Бинарный поиск Деревья дп жадные алгоритмы поиск в глубину и подобное *2300

Gildong играет в игру со своей собакой, Badugi. Они находятся в парке, в котором есть \(n\) перекрестков и \(n-1\) двусторонних дорог, длиной в \(1\) и соединяющих два перекрестка. Пересечения пронумерованы от \(1\) до \(n\), и для каждой пары \(a\) и \(b\) (\(1 \le a, b \le n\)), возможно пройти от \(b\)-го перекрестка до \(a\)-го передвигаясь по дорогам.

Gildong поставил одну закуску на каждый перекресток. Gildong поставил Badugi задачу — съесть все закуски. Badugi начинает на \(1\)-м перекрестке, и он передвигается по следующим правилам:

  • Badugi ищет закуски, которые находятся к нему как можно ближе. Расстояние это длина кратчайшего пути от текущей позиции Badugi до перекрестка с закуской. Однако, обоняние Badugi ограничено до \(k\) метров, так что он может находить только закуски на расстоянии не больше чем \(k\) метров от текущей позиции. Если он не может найти ни одной закуски, задание считается проваленным.
  • Среди всех закусок, которые Badugi чувствует на его текущей позиции, он выбирает закуску с минимальным расстоянием до текущей позиции. Если есть несколько возможных закусок, он выбирает одну любую из них.
  • Он повторяет этот процесс пока он не съест все \(n\) закусок. После этого, он должен снова найти \(1\)-й перекресток, который должен быть на расстоянии не больше чем \(k\) метров от последней съеденной закуски. Если он может найти его, он проходит задание. Иначе, задание считается проваленным.

К сожалению, Gildong не знает значение \(k\). Таким образом, он просит вас найти минимальное значение \(k\), при котором Badugi сможет выполнить задание, если будет действовать оптимально.

Входные данные

Тест состоит из одного или нескольких наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)).

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество перекрестков в парке.

В каждой из следующих \(n-1\) строк записаны два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\), \(u \ne v\)) , которые описывают двунаправленную дорогу между перекрестками \(u\) и \(v\). Все дороги двухсторонние и различны.

Гарантируется, что:

  • Для каждого набора входных данных, для каждой пары \(a\) и \(b\) (\(1 \le a, b \le n\)), возможно пройти от \(b\)-го перекрестка до \(a\)-го передвигаясь по дорогам.
  • Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное возможное значение \(k\), при котором Badugi может выполнить свое задание.

Примечание

В первом наборе входных данных, Badugi может выполнить задание для \(k=2\), передвигаясь следующим образом:

  1. Исходно, Badugi находится на \(1\)-м перекрестке. Ближайшая закуска, очевидно, находится на \(1\)-м перекрестке, поэтому он съедает ее.
  2. Затем, он ищет ближайшую закуску, которая может быть либо на \(2\)-м или на \(3\)-м перекрестке. Предположим, что он выбирает \(2\)-й перекресток. Он переходит на \(2\)-й перекресток, который находится на расстоянии \(1\) метр, и ест закуску.
  3. Единственная закуска находится на \(3\)-м перекрестке, и ему нужно пройти по \(2\) дорогам, чтобы дойти до нее.
  4. После съедения закуски на \(3\)-м перекрестке, ему снова нужно найти \(1\)-й перекресток, который находится на расстоянии \(1\) метр. После того как он возвращается на него, он выполнил свое задание.

Во втором наборе входных данных, единственная возможная последовательность действий это \(1\)\(2\)\(3\)\(4\)\(1\). Так как расстояние между \(4\)-м и \(1\)-м перекрестком равно \(3\), \(k\) должно быть хотя бы \(3\) для того, чтобы Badugi смог выполнить задание.

В третьем наборе входных данных, Badugi может двигаться следующим образом: \(1\)\(5\)\(6\)\(7\)\(8\)\(2\)\(3\)\(4\)\(1\). Можно показать, что это единственный вариант для Badugi выполнить миссию с \(k=3\).

F. Еще сложнее

дп *2700

Gildong разрабатывает новую головоломку. Головоломка состоит из \(n\) платформ, пронумерованных от \(1\) до \(n\). Игрок играет за персонажа, который может стоять на платформах и цель игры это передвинуть персонажа с \(1\)-й платформы на \(n\)-ю. На \(i\)-й платформе записано число \(a_i\) (\(0 \le a_i \le n-i\)). Когда персонаж стоит на \(i\)-й платформе, игрок может передвинуть его на \(j\)-ю платформу, для \(i+1 \le j \le i+a_i\). Если игрок находится на \(i\)-й платформе, что \(a_i=0\) и \(i \ne n\), игрок проигрывает.

Так как Gildong думает, что текущая игра слишком простая, он хочет сделать ее еще сложнее. Он хочет поменять несколько (возможно, ноль) чисел на платформах на \(0\), чтобы остался ровно один способ выиграть. Он хочет вносить как можно меньше изменений в игру, так что он просит вас найти минимальное количество платформ, у которых нужно изменить числа. Два способа выиграть считаются различными, если существует платформа, на которой был персонаж в одном способе, но не был в другом.

Входные данные

Каждый тест содержит один или несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 500\)).

Каждый набор входных данных содержит две строки. В первой строке записано одно целое число \(n\) (\(2 \le n \le 3000\)) — количество платформ в игре.

Во второй строке записаны \(n\) целых чисел. \(i\)-е из них это \(a_i\) (\(0 \le a_i \le n-i\)) — целое число на \(i\)-й платформе.

Гарантируется, что:

  • Для каждого набора входных данных, есть хотя бы один способ исходно выиграть.
  • Сумма \(n\) по всем наборам входных данных не превосходит \(3000\).
Выходные данные

Для каждого набора входных данных, выведите одно целое число — минимальное количество номеров, которое нужно поменять на \(0\), чтобы существовал ровно один способ выиграть.

Примечание

В первом наборе входных данных, игрок может двигать только на следующую платформу, пока он не доберется до \(4\)-й платформы. Так как исходно есть ровно один способ выиграть, ответ равен нулю.

Во втором наборе входных данных, Gildong может поменять \(a_2\), \(a_3\), и \(a_4\) на \(0\), чтобы игра стала \(4\) \(0\) \(0\) \(0\) \(0\). Теперь единственный способ выиграть, это прыгнуть с \(1\)-й платформы на \(5\)-ю платформу.

В третьем наборе входных данных, Gildong может поменять \(a_2\) и \(a_8\) на \(0\), тогда единственный способ выиграть это: \(1\)\(3\)\(7\)\(9\).

D. Последовательность и обмены

дп жадные алгоритмы сортировки *1600

Вам задана последовательность \(a\), состоящая из \(n\) целых чисел \(a_1, a_2, \dots, a_n\), а также целое число \(x\). Ваша задача заключается в том, чтобы сделать последовательность \(a\) отсортированной (последовательность отсортирована, если выполняется условие \(a_1 \le a_2 \le a_3 \le \dots \le a_n\)).

Чтобы отсортировать последовательность, вы можете выполнять следующую операцию любое количество раз (возможно, ноль): выбрать целое число \(i\) такое, что \(1 \le i \le n\) и \(a_i > x\), поменять местами значения \(a_i\) и \(x\).

Например, если \(a = [0, 2, 3, 5, 4]\), \(x = 1\), возможна следующая последовательность операций:

  1. выбрать \(i = 2\) (это возможно, так как \(a_2 > x\)), получим \(a = [0, 1, 3, 5, 4]\), \(x = 2\);
  2. выбрать \(i = 3\) (это возможно, так как \(a_3 > x\)), получим \(a = [0, 1, 2, 5, 4]\), \(x = 3\);
  3. выбрать \(i = 4\) (это возможно, так как \(a_4 > x\)), получим \(a = [0, 1, 2, 3, 4]\), \(x = 5\).

Вычислите минимальное количество операций, которые необходимо выполнить, чтобы \(a\) стала отсортированной, или сообщите, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 500\), \(0 \le x \le 500\)) — количество элементов в последовательности и начальное значение \(x\).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0 \le a_i \le 500\)).

Сумма значений \(n\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, которые необходимо выполнить, чтобы сделать \(a\) отсортированной, или \(-1\), если это невозможно.

F. Строка и операции

дп жадные алгоритмы *2800

Задана строка \(s\), состоящая из \(n\) символов. Эти символы являются первыми \(k\) строчными буквами латинского алфавита. Вам необходимо выполнить \(n\) операций со строкой.

Во время \(i\)-й операции вы берете символ, который первоначально занимал \(i\)-ю позицию, и выполняете с ним одно из следующих действий:

  • поменять его местами с предыдущим символом в строке (если он существует). Эта операция записывается как L;
  • поменять его местами со следующим символом в строке (если он существует). Эта операция записывается как R;
  • циклически заменить его на предыдущий символ в алфавите (b становится a, c становится b и т. д.; a становится \(k\)-й буквой латинского алфавита). Эта операция записывается как D;
  • циклически заменить его на следующий символ в алфавите (a становится b, b становится c и т. д.; \(k\)-я буква латинского алфавита становится a). Эта операция записывается как U;
  • ничего не делать. Эта операция записывается как 0.

Пусть начальная строка — test, \(k = 20\), а последовательность операций — URLD. Тогда строка изменяется следующим образом:

  1. первая операция U, поэтому мы меняем подчеркнутую букву в test на следующую из первых \(20\) латинских букв, т. е. на a. Теперь строка равна aest;
  2. вторая операция R, поэтому мы меняем местами подчеркнутую букву со следующей в строке aest. Теперь строка равна aset;
  3. третья операция L, поэтому мы меняем местами подчеркнутую букву с предыдущей в строке aset (обратите внимание, что теперь это \(2\)-й символ строки, но изначально он был \(3\)-м, поэтому к нему применяется \(3\)-я операция). Теперь строка равна saet;
  4. четвертая операция D, поэтому мы меняем подчеркнутую букву в saet на предыдущую из первых \(20\) латинских букв, т. е. на s. Теперь строка равна saes.

Результатом выполнения последовательности операций является saes.

Для заданной строки \(s\) и значения \(k\) найдите лексикографически минимальную строку, которая может быть получена после применения последовательности операций к \(s\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор состоит из двух строк. Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 500\); \(2 \le k \le 26\)).

Вторая строка содержит строку \(s\), состоящую из \(n\) символов. Каждый символ — это одна из первых \(k\) букв латинского алфавита (в нижнем регистре).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую лексикографически минимальную строку, которая может быть получена из \(s\) с помощью одной последовательности операций.

G. Запрещенное значение

дп Структуры данных *2900

Поликарп редактирует очень сложную программу. Сначала определяется переменная \(x\), ей присваивается значение \(0\). Затем следуют инструкции двух типов:

  1. set \(y\) \(v\) — присвоить переменной \(x\) значение \(y\) или потратить \(v\) бурлей, чтобы удалить эту инструкцию (и, соответственно, не изменять \(x\));
  2. блок if \(y\) \(\dots\) end — выполнить инструкции внутри блока if, если значение \(x\) равно \(y\), и пропустить блок иначе.

Внутри блоков if могут содержаться set инструкции и другие блоки if.

Однако, когда значение \(x\) становится равно \(s\), компьютер ломается и тут же возгорается. Поликарп не хочет этого допустить, и в то же время потратить как можно меньше бурлей.

Какую минимальную сумму бурлей можно потратить на удаление set инструкций, чтобы никогда не присвоить \(x\) значение \(s\)?

Входные данные

В первой строке записано два целы числа \(n\) и \(s\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le s \le 2 \cdot 10^5\)) — количество строк в программе и запрещенное значение \(x\).

Следующие \(n\) строк задают программу. Каждая строка одного из трех типов:

  1. set \(y\) \(v\) \((0 \le y \le 2 \cdot 10^5, 1 \le v \le 10^9)\);
  2. if \(y\) \((0 \le y \le 2 \cdot 10^5)\);
  3. end.

Каждая if инструкция имеет парную end инструкцию. Каждая end инструкция имеет парную if инструкцию.

Выходные данные

Выведите одно целое число — минимальную сумму бурлей, которую Поликарп может потратить на удаление set инструкций, чтобы никогда не присвоить \(x\) значение \(s\).

E. XOR-интервалы

дп жадные алгоритмы *3500

Даны целые числа \(c_{0}, c_{1}, \ldots, c_{k-1}\). Определим цену числа \(0 \le x < 2^{k}\) как \(p(x) = \sum_{i=0}^{k-1} \left( \left\lfloor \frac{x}{2^{i}} \right\rfloor \bmod 2 \right) \cdot c_{i}\). Иными словами, цена числа \(x\) — это сумма \(c_{i}\) по тем битам \(x\), которые равны 1.

Определим стоимость массива \(a\) длины \(n \ge 2\), состоящего из целых чисел из полуинтервала \([0, 2^{k})\) следующим образом: \(cost(a) = \sum_{i=1}^{n - 1} p(a_{i} \oplus a_{i+1})\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Вам нужно построить массив длины \(n\) минимальной стоимости, в котором каждый элемент должен принадлежать определенному отрезку: \(l_{i} \le a_{i} \le r_{i}\).

Входные данные

В первой строке находятся два целых числа \(n\) и \(k\) (\(2 \le n \le 50\), \(1 \le k \le 50\)) — длина массива и битовая длина рассматриваемых чисел.

В следующих \(n\) строках перечислены ограничения на элементы массива: в \(i\)-й строке находятся целые числа \(l_{i}\) и \(r_{i}\) (\(0 \le l_{i} \le r_{i} < 2^{k}\)).

В последней строке находятся целые числа \(c_{0}, c_{1}, \ldots, c_{k-1}\) (\(0 \le c_{i} \le 10^{12}\)).

Выходные данные

Выведите одно целое число — минимальную стоимость массива, удовлетворяющего всем ограничениям.

Примечание

В первом примере есть только один подходящий массив — \([3, 5, 6, 1]\), — и его стоимость равна \(cost([3, 5, 6, 1]) = p(3 \oplus 5) + p(5 \oplus 6) + p(6 \oplus 1) = p(6) + p(3) + p(7) = (c_{1} + c_{2}) + (c_{0} + c_{1}) + (c_{0} + c_{1} + c_{2}) = (2 + 7) + (5 + 2) + (5 + 2 + 7) = 30\).

Во втором примере единственный оптимальный массив — \([2, 3, 6]\).

B. Стакан наполовину разлит

дп *2000

На столе стоит \(n\) стаканов, пронумерованных \(1, \ldots, n\). В стакан \(i\) может поместиться до \(a_i\) единиц объёма воды, и сейчас этот стакан содержит \(b_i\) единиц воды.

Вы хотите выбрать \(k\) стаканов и собрать в них как можно больше воды. Для этого вы можете сколько угодно раз переливать воду из одного стакана в другой. Однако, из-за очень неудобной формы стаканов (а вовсе не из-за вашей неуклюжести), каждый раз, когда вы пытаетесь перелить любой объём воды, половина этого объёма проливается на пол.

Формально, пусть стакан \(i\) сейчас содержит \(c_i\) единиц воды, а стакан \(j\) содержит \(c_j\) единиц воды. Пускай вы пытаетесь переместить \(x\) единиц из стакана \(i\) в стакан \(j\) (разумеется, \(x\) не может превосходить \(c_i\)). Тогда \(x / 2\) единиц воды проливается на пол. После переливания стакан \(i\) будет содержать \(c_i - x\) единиц воды, а стакан \(j\) будет содержать \(\min(a_j, c_j + x / 2)\) единиц (лишняя вода, которая не помещается в стакан, также проливается).

Для каждого переливания вы можете произвольно выбрать, из какого стакана \(i\) в какой стакан \(j\) надо переливать, а также переливаемый объём \(x\) может быть произвольным вещественным числом.

Для каждого \(k = 1, \ldots, n\) определите максимально возможный объём воды, который можно собрать в \(k\) произвольно выбранных стаканах после нуля или более переливаний между стаканами.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 100\)) — количество стаканов.

Следующие \(n\) строк описывают стаканы. В \(i\)-й из этих строк записано два целых числа \(a_i\) и \(b_i\) (\(0 \leq b_i \leq a_i \leq 100\), \(a_i > 0\)) — вместимость и текущее количество воды в стакане \(i\) соответственно.

Выходные данные

Выведите \(n\) вещественных чисел — наибольший объём воды, который можно собрать в \(1, \ldots, n\) стаканах соответственно. Ваш ответ будет принят, если каждое число находится в пределах \(10^{-9}\) абсолютной или относительной погрешности от точного ответа.

Примечание

В примере можно действовать так:

  • Для \(k = 1\) перельём всю воду из первых двух стаканов в третий. Мы прольём \((5 + 5) / 2 = 5\) единиц воды и соберём \(2 + (5 + 5) / 2 = 7\) единиц.
  • Для \(k = 2\) перельём всю воду из третьего стакана в любой из первых двух. Мы прольём \(2 / 2 = 1\) единиц воды и соберём \(5 + 5 + 2 / 2 = 11\) единиц.
  • Для \(k = 3\) ничего не нужно делать. Все \(5 + 5 + 2 = 12\) единиц воды уже собраны.

B. Ходы и повороты

дп математика *1300

В начале координат бесконечной двумерной плоскости находится робот. Каждую секунду робот перещается ровно на \(1\) метр в одном из четырёх направлений: на север, юг, запад или восток. Робот может выбрать произвольное направление для первого шага, но после этого в конце каждой секунды он обязан повернуть на 90 градусов влево или вправо относительно направления, в котором только что двигался. Например, если робот только что переместился на север или юг, его следующий шаг должен быть на запад или восток, и наоборот.

Робот совершает ровно \(n\) шагов из начального положения в соответствиями с правилами выше. В скольких различных точках робот может оказаться в итоге? Финальное направление робота можно игнорировать.

Входные данные

В единственной строке записано одно целое число \(n\) (\(1 \leq n \leq 1000\)) — количество шагов робота.

Выходные данные

Выведите одно целое число — количество различных возможных положений робота после ровно \(n\) шагов.

Примечание

В первом примере робот переместится на 1 метр на север, юг, запад или восток в зависимости от исходного направления.

Во втором примере робот всегда окажется в \(\sqrt{2}\) метрах на северо-западе, северо-востоке, юго-западе или юго-востоке.

B. Найди ель

дп Перебор реализация *1400

Вот-вот наступит новый год. Рик понял, что ему пора задуматься о покупке традиционных новогодних елок. Но Рику жалко покупать настоящие елки, поэтому он решил найти их в матрице размером \(n \times m\), состоящей из символов «*» и «.».

Для того, чтобы найти все ели, сперва дадим определение ели в матрице. Набор ячеек из матрицы называется елью с высотой \(k\) и вершиной в точке \((x, y)\), если:

  • Все ячейки из набора являются символами «*».
  • Для всех \(1 \le i \le k\) все ячейки с номером строки \(x+i-1\) и с номерами столбцов в диапазоне \([y - i + 1, y + i - 1]\) должны принадлежать набору. Все остальные ячейки не могут принадлежать набору.

Примеры корректных и некорректных елок:

Теперь Рику стало интересно, сколько елей существует в его матрице \(n \times m\). Помогите ему ответить на этот вопрос.

Входные данные

Каждый тест содержит один или несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 10\)).

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 500\)) — размер матрицы.

Следующие \(n\) строк каждого из наборов содержат по \(m\) символов \(c_{i, j}\) — описание матрицы. Гарантируется, что \(c_{i, j}\) является либо символом «.», либо символом «*».

Гарантируется, что сумма \(n \cdot m\) по всем тестовым наборам не превосходит \(500^2\) (\(\sum n \cdot m \le 500^2\)).

Выходные данные

Выведите единственное целое число — количество елок в матрице.

Примечание

В первом тестовом примере первая ель имеет вершину в точке \((1, 2)\) и высоту \(2\), вторая ель имеет вершину в точке \((1, 2)\) и высоту \(1\), третья ель имеет вершину в точке \((2, 1)\) и высоту \(1\), четвертая ель имеет вершину в точке \((2, 2)\) и высоту \(1\), пятая ель имеет вершину в точке \((2, 3)\) и высоту \(1\).

Во втором тестовом примере первая ель имеет вершину в точке \((1, 2)\) и высоту \(1\), вторая ель имеет вершину в точке \((2, 1)\) и высоту \(1\), третья ель имеет вершину в точке \((2, 2)\) и высоту \(1\).

C. Случайные события

дп математика Теория вероятностей *1500

Рон — счастливый обладатель перестановки \(a\) длины \(n\).

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) — не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Над перестановкой Рона ставится \(m\) экспериментов следующего вида: (\(r_i\), \(p_i\)). Это обозначает, что элементы в диапазоне \([1, r_i]\) (другими словами, префикс длины \(r_i\)) будут отсортированы в возрастающем порядке с вероятностью \(p_i\). Все эксперименты проводятся в том же порядке, в котором задаются во входных данных.

Для примера рассмотрим перестановку \([4, 2, 1, 5, 3]\) и эксперимент (\(3, 0.6\)). После такого эксперимента с вероятностью \(60\%\) перестановка примет вид \([1, 2, 4, 5, 3]\), а с вероятностью \(40\%\) останется без изменений.

Вам требуется определить, с какой вероятностью перестановка станет полностью отсортированной по возрастанию после \(m\) экспериментов.

Входные данные

Каждый тест содержит один или несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 100\)).

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) \((1 \le n, m \le 10^5)\) — количество элементов в перестановке и количество экспериментов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \le a_i \le n)\) — описание перестановки.

Каждая из следующих \(m\) входных данных содержат целое число \(r_i\) и вещественное число \(p_i\) \((1 \le r_i \le n, 0 \le p_i \le 1)\) — длина префикса массива и вероятность, с которой он отсортируется. Все вероятности даны с точностью не более \(6\) знаков после запятой.

Гарантируется, что сумма \(n\) и сумма \(m\) не превосходят \(10^5\) (\(\sum n, \sum m \le 10^5\)).

Выходные данные

Для каждого набора входных данных выведите единственное число — вероятность, что после всех экспериментов перестановка окажется отсортированной. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

Примечание

Для первого набора входных данных можно показать, что только от того, выполнится ли сортировка с помощью правила \((4, 0.6)\), зависит, будет ли итоговая перестановка отсортированной.

F. Математическое выражение

дп жадные алгоритмы Конструктив *2700

Барбара опоздала на урок математики, поэтому учитель сразу же заставил ее решить пример на листке. Барбара посмотрела на листок и увидела на нем лишь \(n\) чисел \(a_1, a_2, \ldots, a_n\), без каких-либо арифметических знаков. Учитель объяснил Барбаре, что ей требуется лишь расставить разрешенные знаки между числами так, чтобы получившееся выражение имело максимально возможное значение. Для того чтобы узнать разрешенные знаки, учитель дал Барбаре строку \(s\), которая содержит данную информацию.

Легко заметить, что Барбаре требуется поставить \(n - 1\) знак между соседними числами. Выражение должно начинаться с числа и все знаки должны быть разрешены (содержаться в строке \(s\)). Обратите внимание, что умножение имеет приоритет выше, чем сложение или вычитание, а сложение и вычитание имеют одинаковый приоритет и выполняются слева направо. Помогите Барбаре и составьте требуемое выражение!

Входные данные

Первая строка входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество чисел на листке.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 9\)), где \(a_i\) равно \(i\)-му элементу \(a\).

Третья строка входных данных содержит строку \(s\) (\(1 \le |s| \le 3\)) — разрешенные в выражении знаки. Гарантируется, что строка может состоять только из символов «-», «+» и «*». Также гарантируется, что все символы строки различны.

Выходные данные

Выведите \(n\) чисел, разделённых \(n - 1\) знаком — выражение, имеющее максимальный результат. Если вариантов ответа несколько — выведите любой из них.

Примечание

В первом тестовом примере также подходят ответы: «2+2+0», «2+2-0», «2*2+0».

B. Прошлогодняя подстрока

дп реализация Строки *800

У Поликарпа есть строка \(s[1 \dots n]\) длины \(n\), состоящая из десятичных цифр. Поликарп делает следующую операцию со строкой \(s\) не более одного раза (то есть делает операцию \(0\) или \(1\) раз):

  • Поликарп выбирает два числа \(i\) и \(j\) (\(1 \leq i \leq j \leq n\)) и удаляет из строки \(s\) символы на позициях \(i, i+1, i+2, \ldots, j\) (то есть удаляет подстроку \(s[i \dots j]\)). Более формально, Поликарп превращает строку \(s\) в строку \(s_1 s_2 \ldots s_{i-1} s_{j+1} s_{j+2} \ldots s_{n}\).

Например, строку \(s = \)«20192020» Поликарп может превратить в строки:

  • «2020» (в таком случае \((i, j)=(3, 6)\) или \((i, j)=(1, 4)\));
  • «2019220» (в таком случае \((i, j)=(6, 6)\));
  • «020» (в таком случае \((i, j)=(1, 5)\));
  • возможны и другие ходы, выше перечислены лишь только некоторые из них.

Поликарпу очень нравится строка «2020», поэтому ему интересно, можно ли превратить строку \(s\) в строку «2020» не более чем за одну операцию? Заметьте, что проводить ноль операций допустимо.

Входные данные

В первой строке находится целое число \(t\) (\(1 \leq t \leq 1000 \)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора содержится целое число \(n\) (\(4 \leq n \leq 200\)) — длина строки \(s\). В следующей строке находится строка \(s\) длины \(n\), состоящая из десятичных цифр. Допустимо, что строка \(s\) начинается с цифры 0.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если Поликарп может превратить строку \(s\) в строку «2020» не более чем за одну операцию (то есть за \(0\) или \(1\) операцию);
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных Поликарп мог выбрать \(i=3\) и \(j=6\).

Во втором наборе входных данных Поликарп мог выбрать \(i=2\) и \(j=5\).

В третьем наборе входных данных Поликарп не делал ни одну операцию со строкой.

F. Максимальное правильное множество

битмаски дп математика *3100

Назовем множество положительных целых чисел \(S\) правильным, если выполняются следующие два условия:

  • \(S \subseteq \{1, 2, \dots, n\}\);
  • если \(a \in S\) и \(b \in S\), то \(|a-b| \neq x\) и \(|a-b| \neq y\).

Для заданных значений \(n\), \(x\) и \(y\) вам необходимо найти размер максимального правильного множества.

Входные данные

Единственная строка входных данных содержит три целых числа \(n\), \(x\) и \(y\) (\(1 \le n \le 10^9\); \(1 \le x, y \le 22\)).

Выходные данные

Выведите одно целое число — размер максимального правильного множества.

B. Улучшения в последнюю минуту

дп жадные алгоритмы *800

Афиней только что закончил создание своего последнего музыкального произведения и собирается представить его завтра людям Афин. К сожалению, мелодия получилась довольно унылой и, скорее всего, не будет встречена тепло.

Его песня состоит из \(n\) нот, которые мы будем рассматривать как натуральные числа. Разнообразием песни назовем количество различных нот, которые она содержит. Как покровитель музыки, Эвтерпа присматривает за композиторами и направляет их в процессе создания новых мелодий. Она решила помочь Афинею изменить его песню, чтобы сделать ее более разнообразной.

Будучи младшей богиней, она не может произвольно изменить песню. Вместо этого, для каждой из \(n\) нот в песне она может либо оставить ее как есть, либо увеличить ее на \(1\).

Вам дана песня как последовательность чисел, описывающих ноты. Найдите максимальное разнообразие песни, которого можно достичь.

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов. Затем даны \(t\) наборов входных данных, описание каждого занимает две строки.

В первой строке каждого набора входных данных дано одно целое число \(n\) (\(1 \leq n \leq 10^5\)), обозначающее длину песни. Следующая строка содержит последовательность из \(n\) целых чисел \(x_1, x_2, \ldots, x_n\) \((1 \leq x_1 \leq x_2 \leq \ldots \leq x_n \leq 2 \cdot n)\), описывающих песню.

Сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите на новой строке одно целое число — максимальное разнообразие песни, которое можно получить. То есть, максимальное количество различных элементов, которые могут быть в итоговой последовательности.

Примечание

В первом наборе входных данных Эвтерпа может увеличить вторую, пятую и шестую ноты, чтобы получить последовательность \(1, \underline{3}, 2, 2, \underline{6}, \underline{7}\), в которой есть \(5\) различных элементов (увеличенные ноты подчеркнуты).

Во втором наборе входных данных Эвтерпа может увеличить первый элемент, чтобы получить последовательность \(\underline{5}, 4\), в котором есть \(2\) различных элемента.

В третьем наборе входных данных Эвтерпа может увеличить второй, пятый и шестой элементы, чтобы получить последовательность \(1, \underline{2}, 3, 4, \underline{5}, \underline{6}\), в которой есть \(6\) различных элементов.

C. Псиная поэзия

дп жадные алгоритмы Строки *1300

После трагической смерти его жены, Эвридики, Орфей решил спуститься в царство мертвых, чтобы увидеть её. Достичь врат царства было непросто, однако пройти через них будет еще сложнее. В основном, из-за Цербера — трёхглавого пса Аида.

Орфей, известный поэт и музыкант, планирует усыпить Цербера своей поэзией и спокойно пройти мимо него. Он создал очень своеобразную поэму специально для Цербера. Она состоит только из строчных английских букв.

Подстрока поэмы является палиндромом, если она читается одинаково слева направо и справа налево. Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, нуля или всех) символов из начала и нескольких (возможно, нуля или всех) символов из конца.

К сожалению, Цербер не любит палиндромы длины больше \(1\). Например, в поэме abaa псу Аида не понравились бы подстроки aba и aa.

Орфей сможет успокоить Цербера только если псу понравится его поэзия. Поэтому, он хочет изменить свою поэму так, чтобы она не содержала ни одной подстроки палиндрома с длиной строго больше \(1\).

Орфей может изменять поэму, заменяя букву на любой позиции любой строчной английской буквой. Он может применять эту операцию произвольное количество раз (возможно, ноль). Так как в его поэме могут быть палиндромы, ему придется сделать несколько изменений. Но сколько именно? Вам дана поэма, определите минимальное количество букв, которые нужно изменить, чтобы поэма перестала содержать подстроки палиндромы длины больше \(1\).

Входные данные

Во входных данных находятся несколько (не меньше одного) наборов входных данных. В первой строке дано одно целое число \(t\) (\(1 \leq t \leq 10^5\)), обозначающее количество наборов входных данных. Затем даны \(t\) наборов входных данных.

Единственная строка каждого набора входных данных содержит непустую строку, состоящую из строчных английских букв — поэму Орфея.

Сумма длин поэм во всех наборах входных данных не превышает \(10^5\).

Выходные данные

Вы должны вывести \(t\) строк, \(i\)-я из них должна содержать одно целое число — ответ на \(i\)-й набор входных данных.

Примечание

В первом наборе входных данных можно заменить третий символ на c и получить поэму bacba, не содержащую палиндромных подстрок.

Во втором наборе входных данных можно заменить третий символ на d и получить поэму abdac, не содержащую палиндромных подстрок.

В третьем наборе входных данных исходная поэма уже не содержит палиндромных подстрок, поэтому Орфею не нужно больше ничего делать.

H. Поиск удовлетворяющих решений

графы дп жадные алгоритмы Комбинаторика математика *3300

Добраться до сюда в контесте было непросто. Решив все предыдущие задачи, вы произвели большое впечатление на богов. Поэтому, они решили избавить вас от истории в этой задаче и вместо этого дать вам формальное условие.

Рассмотрим \(n\) агентов. У каждого из них изначально есть ровно один предмет, у \(i\)-го агента есть предмет номер \(i\). Мы хотим переназначить предметы между агентами. Назначение будет валидным, если каждый предмет назначен ровно одному агенту, и у каждого агента есть ровно один предмет.

У каждого агента есть предпочтения одних предметов перед другими, которое может быть выражено перестановкой \(p\) элементов, отсортированных от наиболее желанных до наименее желанных. Другими словами, агент предпочитает предмет \(i\) предмету \(j\), если \(i\) появляется раньше в его перестановке \(p\). Профиль предпочтений это список из \(n\) перестановок длины \(n\) каждая, \(i\)-я перестановка описывает предпочтения \(i\)-го агента.

Возможно, что некоторые агенты недовольны назначенными им предметами. Множество недовольных агентов может выбрать не кооперироваться с другими агентами. В таком случае, они обменяются теми предметами, которые у них были изначально (\(i\)-му агенту принадлежал \(i\)-й предмет), только между собой. Агенты из группы не волнуются об удовлетворенности агентов вне группы. Однако, они должны обменяться предметами так, чтобы как минимум один из них стал счастливее, и никто не стал менее счастливым (по сравнению с назначением, которое было сделано).

Формально, рассмотрим валидное назначение элементов — \(A\). Скажем, что \(A(i)\) обозначает предмет, назначенный \(i\)-му агенту. Также, рассмотрим подмножество агентов. Пусть \(S\) будет множеством их индексов. Скажем, что это подмножество агентов недовольно, если существует такое валидное назначение элементов \(B(i)\), что:

  • Для всех \(i \in S\), \(B(i) \in S\).
  • Ни один агент \(i \in S\) не предпочитает предмет \(A(i)\) предмету \(B(i)\) (ни один агент из \(S\) не менее счастлив).
  • Как минимум один агент \(i \in S\) предпочитает предмет \(B(i)\) предмету \(A(i)\) (как минимум один агент из \(S\) более счастлив).

Назначение оптимально, если ни одно подмножество агентов не недовольно. Обратите внимание, что пустое подмножество не может быть недовольно. Можно доказать, что для каждого профиля предпочтений существует ровно одно оптимальное назначение.

Пример: Рассмотрим \(3\) агентов со следующими профилями предпочтений:

  1. \([2, 1, 3]\)
  2. \([1, 2, 3]\)
  3. \([1, 3, 2]\)

И следующее назначение:

  • Первый агент получает предмет \(2\)
  • Второй агент получает предмет \(3\).
  • Третий агент получает предмет \(1\).

Заметьте, что множество агентов \(\{1, 2\}\) является недовольным, потому что они могут переупорядочить их (исходные) предметы следующим образом:

  • Первый агент получает предмет \(2\).
  • Второй агент получает предмет \(1\).
  • Третий агент получает предмет \(3\).

Это назначение сделает второго агента более счастливым, и не имеет разницы для первого агента. В результате, третий агент получит предмет, который хуже для него, но это не влияет на то, что множество \(\{1,2\}\) будет недовольно (он не лежит в этом множестве).

Следующее назначение будет оптимальным:

  • Первый агент получает предмет \(2\).
  • Второй агент получает предмет \(1\).
  • Третий агент получает предмет \(3\).

Дано назначение \(A\), вычислите количество различных профилей предпочтений, для которых это назначение \(A\) является оптимальным. Так как ответ может быть большим, выведите его по модулю \(10^9+7\).

Два профиля предпочтений считаются различными, если есть агент, у которого различается перестановка предпочтений.

Входные данные

В первой строке дано одно целое число \(n\) (\(1 \leq n \leq 40\)). В следующей строке дано \(n\) целых чисел, перестановка чисел от \(1\) до \(n\). Число на \(i\)-й позиции обозначает предмет, назначенный \(i\)-му агенту.

Выходные данные

Выведите одно целое число — количество профилей предпочтений, для который данное назначение является оптимальным, по модулю \(10^9+7\).

Примечание

Назначение в первом примере является оптимальным только для следующего профиля предпочтений:

\(2, 1\)

\(1, 2\)

Если бы какой-то агент больше всего хотел получить не тот предмет, который ему дали, он мог бы сам по себе сформировать недовольное подмножество. Поэтому, для любого другого профиля предпочтений это назначение было бы не оптимально.

D. Сумма путей

дп Комбинаторика математика *2200

Рассмотрим \(n\) клеток, пронумерованных числами \(1,2,\dots, n\) слева направо. Вы можете изначально в любую из этих клеток поставить робота, который затем должен сделать ровно \(k\) шагов.

За один шаг робот перемещается в соседнюю клетку слева или справа, при этом он не может выходить за границы заданных клеток. Иными словами, если робот был в клетке \(i\), он должен переместиться либо в клетку \(i-1\), либо в клетку \(i+1\), при этом клетка, в которую он перемещается, должна иметь номер от \(1\) до \(n\) (включительно). Клетки в том порядке, в котором робот их посещает (включая стартовую клетку), вместе составляют хороший путь.

В каждой клетке записано целое число — в клетке \(i\) записано число \(a_i\). Пусть \(c_0, c_1, \dots, c_k\) — последовательность клеток в хорошем пути в том порядке, в котором они были посещены (\(c_0\) — клетка, где был робот изначально, \(c_1\) — клетка, в которой он оказался после первого шага, и так далее; более формально, \(c_i\) — клетка, в которой оказался робот после \(i\) шагов). Тогда стоимость пути вычисляется по следующей формуле: \(a_{c_0} + a_{c_1} + \dots + a_{c_k}\).

Ваша задача — посчитать суммарную стоимость всех хороших путей. Так как это число может быть очень большим, его надо выводить по модулю \(10^9 + 7\). Два хороших пути различны, если либо различается стартовая клетка, либо существует такое \(i \in [1, k]\), что местоположение робота после \(i\) шагов различается в этих путях.

Также вам нужно обрабатывать \(q\) обновлений значений \(a\) и после каждого обновления вычислять требуемую суммарную стоимость. Каждое обновление меняет число, записанное ровно в одной клетке.

Входные данные

В первой строке заданы три целых числа \(n\), \(k\) и \(q\) (\(2 \le n \le 5000\); \(1 \le k \le 5000\); \(1 \le q \le 2 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Затем следуют \(q\) строк. Каждая строка содержит два числа \(i\) и \(x\) (\(1 \le i \le n\); \(1 \le x \le 10^9\)), обозначающих, что значение \(a_i\) становится равным \(x\).

Выходные данные

Выведите \(q\) целых чисел, \(i\)-е из которых должно быть равно суммарной стоимости хороших путей после первых \(i\) обновлений. Так как эти числа могут быть большими, выводите их по модулю \(10^9 + 7\).

Примечание

Все хорошие пути в первом примере: \((1, 2), (2, 1), (2, 3), (3, 2), (3, 4), (4, 3), (4, 5), (5, 4)\).

Изначально значения \(a\) равны \([3, 5, 1, 4, 2]\). После первого обновления — \([9, 5, 1, 4, 2]\). После второго обновления — \([9, 4, 1, 4, 2]\), и так далее.

E. Различающие корни

Деревья дп поиск в глубину и подобное Структуры данных *2500

Дано дерево из \(n\) вершин. На каждой вершине записано число; на вершине \(i\) записано число \(a_i\).

Предположим, мы подвесили дерево за вершину \(v\) (сделали эту вершину корнем). Назовем \(v\) различающим корнем, если выполняется следующее условие: в каждом пути из \(v\) до некоторого листа дерева все значения, записанные на вершинах, различны. Значения, встречающихся на различных путях, могут совпадать, но значения на каждом пути, рассматриваемом в отдельности, должны быть различны.

Посчитайте количество различающих корней заданного дерева.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2\cdot10^5\)) — количество вершин в дереве.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Далее следуют \(n-1\) строк, в каждой из которых заданы два целых числа \(u\) и \(v\) (\(1 \le u\), \(v \le n\)), обозначающих ребро, соединяющее вершины \(u\) и \(v\).

Гарантируется, что данные ребра задают дерево.

Выходные данные

Выведите одно целое число — количество различающих корней в дереве.

Примечание

В первом примере из условия вершины \(1\), \(2\) и \(5\)различающие корни.

A. LaIS

дп жадные алгоритмы Структуры данных *2200

Let's call a sequence \(b_1, b_2, b_3 \dots, b_{k - 1}, b_k\) almost increasing if \(\)\min(b_1, b_2) \le \min(b_2, b_3) \le \dots \le \min(b_{k - 1}, b_k).\(\) In particular, any sequence with no more than two elements is almost increasing.

You are given a sequence of integers \(a_1, a_2, \dots, a_n\). Calculate the length of its longest almost increasing subsequence.

You'll be given \(t\) test cases. Solve each test case independently.

Reminder: a subsequence is a sequence that can be derived from another sequence by deleting some elements without changing the order of the remaining elements.

Input

The first line contains a single integer \(t\) (\(1 \le t \le 1000\)) — the number of independent test cases.

The first line of each test case contains a single integer \(n\) (\(2 \le n \le 5 \cdot 10^5\)) — the length of the sequence \(a\).

The second line of each test case contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — the sequence itself.

It's guaranteed that the total sum of \(n\) over all test cases doesn't exceed \(5 \cdot 10^5\).

Output

For each test case, print one integer — the length of the longest almost increasing subsequence.

Note

In the first test case, one of the optimal answers is subsequence \(1, 2, 7, 2, 2, 3\).

In the second and third test cases, the whole sequence \(a\) is already almost increasing.

B. Красные и синие

дп жадные алгоритмы *1000

У Монокарпа была последовательность \(a\), состоящая из \(n + m\) целых чисел \(a_1, a_2, \dots, a_{n + m}\). Он раскрасил элементы в два цвета: красный и синий; \(n\) элементов были окрашены в красный цвет, все остальные \(m\) элементов были окрашены в синий.

После покраски элементов он выписал две последовательности \(r_1, r_2, \dots, r_n\) и \(b_1, b_2, \dots, b_m\). Последовательность \(r\) состояла из всех красных элементов \(a\) в порядке их появления в \(a\); аналогично, последовательность \(b\) состояла из всех синих элементов \(a\) также в порядке их появления в \(a\).

К сожалению, исходная последовательность была утеряна, и у Монокарпа остались только последовательности \(r\) и \(b\). Он хочет восстановить исходную последовательность. В случае, если существует несколько способов его восстановления, он хочет выбрать способ восстановления, который максимизирует значение

\(\)f(a) = \max(0, a_1, (a_1 + a_2), (a_1 + a_2 + a_3), \dots, (a_1 + a_2 + a_3 + \dots + a_{n + m}))\(\)

Помогите Монокарпу вычислить максимально возможное значение \(f(a)\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Затем следуют наборы входных данных. Каждый набор состоит из четырех строк.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 100\)).

Вторая строка содержит \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(-100 \le r_i \le 100\)).

Третья строка содержит одно целое число \(m\) (\(1 \le m \le 100\)).

Четвертая строка содержит \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(-100 \le b_i \le 100\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное значение \(f(a)\).

Примечание

В пояснениях к примерам красные элементы выделены жирным шрифтом.

В первом примере одной из возможных последовательностей \(a\) является \([\mathbf{6}, 2, \mathbf{-5}, 3, \mathbf{7}, \mathbf{-3}, -4]\).

Во втором примере одна из возможных последовательностей \(a\) равна \([10, \mathbf{1}, -3, \mathbf{1}, 2, 2]\).

В третьем примере одной из возможных последовательностей \(a\) является \([\mathbf{-1}, -1, -2, -3, \mathbf{-2}, -4, -5, \mathbf{-3}, \mathbf{-4}, \mathbf{-5}]\).

В четвертом примере одной из возможных последовательностей \(a\) является \([0, \mathbf{0}]\).

C. Построение забора

дп жадные алгоритмы реализация *1600

Вы хотите построить забор, который будет состоять из \(n\) равных секций. Все секции имеют ширину \(1\) и высоту \(k\). Вы поставите все секции в ряд бок о бок.

К сожалению, земля под забором далеко не плоская. Для простоты, вы можете считать что уровень земли под \(i\)-й секцией равен \(h_i\).

Для постройки забора вам нужно следовать нескольким правилам:

  1. последовательные секции должны касаться сторонами и иметь ширину касания не менее \(1\);
  2. первая и последняя секции должны стоять на своем уровне земли;
  3. секции между ними могут либо стоять на земле, либо находиться в воздухе, но не выше чем на \(k - 1\) от уровня земли \(h_i\) (высота над уровнем должна быть целым числом);
Один из возможных заборов (синего цвета) для первого набора входных данных

Можно ли построить забор, удовлетворяющий всем правилам?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(2 \le k \le 10^8\)) — количество секций в заборе и высота каждой секции.

Во второй строке каждого наборе заданы \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(0 \le h_i \le 10^8\)), где \(h_i\) — уровень земли под \(i\)-й секцией.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите YES, если возможно построить забор, удовлетворяющий всем правилам. Иначе, выведите NO.

Вы можете выводить каждый символ в любом регистре (например, YES, Yes, yes, yEs будут определяться как положительный ответ).

Примечание

В первом наборе входных данных, один из возможных заборов изображен выше.

Во втором наборе, согласно второму правилу, вы должны построить обе секции на высоте земли, и, так как \(k = 3\), \(h_1 = 0\) и \(h_2 = 2\), первое правило также выполняется.

В третьем наборе, согласно второму правилу, вы должны построить первую секцию на высоте \(3\) и третью на высоте \(2\). Согласно первому правилу, вторая секция должна быть на высоте не менее \(2\) (чтобы иметь общую часть с первой секцией), но согласно третьему правилу, вторая секция должна быть на высоте не более \(h_2 + k - 1 = 1\).

A. Странный день рождения

Бинарный поиск дп жадные алгоритмы сортировки *1300

На свой день рождения Петя пригласил \(n\) друзей, у \(i\)-го друга есть параметр \(k_i\). Каждому из приглашенных друзей Петя хочет подарить ровно один подарок. В магазине есть \(m\) различных подарков, которые Петя может купить, каждый подарок можно купить не более одного раза. Подарок номер \(j\) стоит \(c_j\) рублей (\(1 \le c_1 \le c_2 \le \ldots \le c_m\)).

Для \(i\)-го друга Петя может либо купить ему подарок \(j \le k_i\), что будет стоить Пете \(c_j\) рублей, либо заплатить другу \(c_{k_i}\) рублей вместо подарка. Помогите Пете определить наименьшую возможную стоимость проведения праздника.

Входные данные

В первой строке входных данных дано целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Каждый набор входных данных начинается с целых чисел \(n\) и \(m\) (\(1 \leq n, m \leq 3 \cdot 10^5\)) — количество друзей у Пети и количество подарков.

Во второй строке набора даны \(n\) целых чисел \(k_1, k_2, \ldots, k_n\) (\(1 \leq k_i \leq m\)) — параметры друзей Пети.

В третьей строке набора входных данных даны \(m\) целых чисел \(c_1, c_2, \ldots, c_m\) (\(1 \le c_1 \le c_2 \le \ldots \le c_m \le 10^9\)) — стоимости подарков.

Гарантируется, что сумма \(n\) по всем тестам не превосходит \(3 \cdot 10^5\), и что сумма \(m\) по всем тестам не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное число рублей, которое понадобится Пете для приобретения всех подарков.

Примечание

В примере есть два набора входных данных. В первом у Пети есть \(5\) друзей и \(4\) возможных подарка. Ответ \(30\) достигается, если подарить:

  • \(5\) рублей первому другу.
  • подарок стоимости \(12\) рублей второму другу.
  • подарок стоимости \(5\) рублей третьему другу.
  • подарок стоимости \(3\) рубля четвертому другу.
  • \(5\) рублей пятому другу.

Во втором у Пети есть \(5\) друзей и \(5\) возможных подарков. Ответ \(190\) достигается, если подарить:

  • подарок стоимости \(10\) рублей первому другу.
  • подарок стоимости \(40\) рублей второму другу.
  • \(90\) рублей третьему другу.
  • \(40\) рублей четвертому другу.
  • \(10\) рублей пятому другу.

E. Странная перестановка

Бинарный поиск графы дп Комбинаторика реализация Структуры данных *3200

У Игоря была перестановка \(p_1, p_2, \ldots, p_n\). К сожалению, перестановка выглядела достаточно скучно, так что он решил выбрать несколько непересекающихся подотрезков перестановки и развернуть каждый из них. Стоимость разворота одного отрезка \([l, r]\) (то есть элементов на позициях с \(l\) по \(r\) включительно) равна \(r - l\), а общая стоимость одной операции равна сумме стоимостей разворота для соответствующих отрезков. Игорю на Новый Год подарили целое число \(c\), поэтому его интересуют лишь те операции, стоимость которых не превосходит \(c\).

Затем Игорю стало совсем скучно, и он решил выписать на листочек все перестановки, которые он может получить из исходной, проделав ровно одну операцию. Каждую перестановку он выписал ровно один раз, даже если какую-то перестановку можно было получить несколькими способами. Полученный список Игорь отсортировал лексикографически.

Теперь Денис решил задать Игорю несколько вопросов про его список. Каждый вопрос выглядит следующим образом: чему равно \(i\)-е число в \(j\)-й перестановке в списке Игоря? Разумеется, Игорю слишком скучно заниматься ответами на эти вопросы, так что он обратился к вам за помощью.

Входные данные

В первой строке дано целое число \(t\) (\(1 \leq t \leq 30\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(c\), \(q\) (\(1 \leq n \leq 3 \cdot 10^4\), \(1 \leq c \leq 4\), \(1 \leq q \leq 3 \cdot 10^5\)) — размер перестановки, максимальная стоимость операции и число вопросов.

В следующей строке содержатся \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \leq p_i \leq n\), \(p_i \neq p_j\) если \(i \neq j\)) — элементы исходной перестановки.

В каждой из следующих \(q\) содержатся описания вопросов, каждое описание состоит из двух целых чисел \(i\) и \(j\) (\(1 \leq i \leq n\), \(1 \leq j \leq 10^{18}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), и что сумма \(q\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого вопроса в отдельной строке выведите ответ на этот вопрос или \(-1\), если Игорь ошибся и \(j\)-й перестановки не существует на листочке Игоря.

Примечание

В первом примере Игорь выписал на листочек следующие перестановки: \([1, 2, 3]\), \([1, 3, 2]\), \([2, 1, 3]\).

Обратите внимание, что для получения перестановки \([3, 2, 1]\) Игорю пришлось бы развернуть весь массив, а стоимость такой операции равна \(2\), что больше указанного значения \(c=1\). Другие две перестановки не могут быть получены из исходной путем применением операции из условия задачи.

B. Честное разделение

дп жадные алгоритмы математика *800

Алиса и Боб получили в подарок от родителей \(n\) конфет. Каждая конфета имеет вес либо 1 грамм, либо 2 грамма. Теперь они хотят честно разделить все конфеты между собой так, чтобы суммарный вес конфет у Алисы был равен суммарному весу конфет у Боба.

Проверьте, могут ли они так сделать.

Обратите внимание, что конфеты запрещено разрезать пополам.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находится целое число \(n\) (\(1 \le n \le 100\)) — количество конфет, которые получили Алиса и Боб.

В следующей строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — веса конфет. Вес каждой конфеты равен либо \(1\), либо \(2\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если все конфеты можно разделить на два множества с одинаковой суммой;
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных Алиса и Боб могут взять себе по одной конфете, тогда у обоих будет вес \(1\).

Во втором наборе входных данных любое разделение будет нечестным.

В третьем наборе входных данных и Алиса и Боб могут взять себе по две конфеты, одну веса \(1\) и одну веса \(2\).

В четвертом наборе входных данных невозможно поделить три одинаковых конфеты между двумя людьми.

В пятом наборе входных данных любое разделение также будет нечестным.

C. Длинные прыжки

графы дп *1100

Поликарп нашёл под ёлкой массив \(a\) из \(n\) элементов и инструкцию для игры с ним:

  • Выбери число \(i\) (\(1 \leq i \leq n\)) — стартовую позицию в массиве. Помести фишку на позицию \(i\) (на элемент \(a_i\));
  • Пока \(i \leq n\), прибавь к своему результату значение \(a_i\) и переместись на \(a_i\) вправо (т.е. замени \(i\) на \(i + a_i\));
  • Если \(i > n\), то Поликарп заканчивает игру.

Например, если \(n = 5\) и \(a = [7, 3, 1, 2, 3]\), тогда следующие варианты игр возможны:

  • Поликарп выбирает \(i = 1\). Процесс игры: \(i = 1 \overset{+7}{\longrightarrow} 8\). Результат игры: \(a_1 = 7\).
  • Поликарп выбирает \(i = 2\). Процесс игры: \(i = 2 \overset{+3}{\longrightarrow} 5 \overset{+3}{\longrightarrow} 8\). Результат игры: \(a_2 + a_5 = 6\).
  • Поликарп выбирает \(i = 3\). Процесс игры: \(i = 3 \overset{+1}{\longrightarrow} 4 \overset{+2}{\longrightarrow} 6\). Результат игры: \(a_3 + a_4 = 3\).
  • Поликарп выбирает \(i = 4\). Процесс игры: \(i = 4 \overset{+2}{\longrightarrow} 6\). Результат игры: \(a_4 = 2\).
  • Поликарп выбирает \(i = 5\). Процесс игры: \(i = 5 \overset{+3}{\longrightarrow} 8\). Результат игры: \(a_5 = 3\).

Помогите Поликарпу узнать, какой максимальный результат он может получить, если он выбирает стартовую позицию оптимально.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина массива \(a\).

В следующей строке находятся \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно число — максимальный результат, который Поликарп может получить, сыграв в игру на соответствующем массиве по инструкции из условия. Обратите внимание, что Поликарп выбирает любую стартовую позицию от \(1\) до \(n\) таким образом, чтобы максимизировать свой результат.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных максимальный результат достигается при выборе \(i = 1\).

В третьем наборе входных данных максимальный результат достигается при выборе \(i = 2\).

В четвёртом наборе входных данных максимальный результат достигается при выборе \(i = 1\).

D. Четно-нечётная игра

дп жадные алгоритмы игры сортировки *1200

Во время своих новогодних каникул Алиса и Боб играют в следующую игру, используя массив \(a\) из \(n\) целых чисел:

  • Игроки ходят по очереди, первой ходит Алиса.
  • Каждый ход игрок выбирает любой элемент и удаляет его из массива.
  • Если Алиса выбрала четное число, то она прибавляет его в свой результат. Если же число было нечетным, результат Алисы не меняется.
  • Аналогично, если Боб выбрал нечетное число, то он прибавляет его в свой результат. Если же число было четным, то результат Боба не меняется.

Если в массиве не осталось чисел, то игра заканчивается. Побеждает тот игрок, результат которого больше. Если результаты игроков равны, то объявляется ничья.

Например, если \(n = 4\) и \(a = [5, 2, 7, 3]\), то игра могла пройти следующим образом (существуют и другие варианты):

  • Первым ходом Алиса выбрала число \(2\) и получила два очка. Ее результат теперь равен \(2\). Массив \(a\) становится равным \([5, 7, 3]\).
  • Вторым ходом Боб выбрал число \(5\) и получил пять очков. Его результат теперь равен \(5\). Массив \(a\) становится равным \([7, 3]\).
  • Третьим ходом Алиса выбрала число \(7\) и не получила очков. Ее результат теперь равен \(2\). Массив \(a\) становится равным \([3]\).
  • Последним ходом Боб выбрал число \(3\) и получил три очка. Его результат теперь равен \(8\). Массив \(a\) становится пустым.
  • Так как у Боба на конец игры больше очков, он объявлется победителем.

Вам интересно, кто победит если оба игрока будут играть оптимально. Обратите внимание, что в массиве могут быть повторяющиеся числа.

Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора содержится целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве \(a\).

В следующей строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — массив \(a\), с помощью которого проводится игра.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «Alice», если при оптимальной игре выиграет Алиса;
  • «Bob», если при оптимальной игре выиграет Боб;
  • «Tie», если при оптимальной игре будет объявлена ничья.

E. Правильная расстановка

Бинарный поиск дп сортировки Структуры данных *1700

Поликарп пригласил \(n\) друзей на встречу Нового года. Во время торжества он решил сделать общую фотографию всех своих друзей. Каждый друг может стоять или лечь на бок.

Каждый друг характеризуется двумя значениями \(h_i\) (его рост) и \(w_i\) (его ширина). На фото \(i\)-й друг будет занимать прямоугольник \(h_i \times w_i\) (если он стоит) или \(w_i \times h_i\) (если он лежит).

Друга с номером \(j\) можно разместить перед \(i\)-м другом на фотографии, если его прямоугольник ниже и уже, чем прямоугольник \(i\)-го друга. Формально должно быть выполнено хотя бы одно из следующих условий:

  • \(h_j < h_i\) и \(w_j < w_i\) (оба друга стоят или оба лежат);
  • \(w_j < h_i\) и \(h_j < w_i\) (один из друзей стоит, а другой лежит).

Например, если \(n = 3\), \(h=[3,5,3]\) и \(w=[4,4,3]\), то:

  • первого друга можно поставить перед вторым: \(w_1 < h_2\) и \(h_1 < w_2\) (один из них стоит, а другой лежит);
  • третьего друга можно поставить перед вторым: \(h_3 < h_2\) и \(w_3 < w_2\) (оба друга стоят или оба лежат).

В других случаях человек на переднем плане будет перекрывать человека на заднем плане.

Помогите Поликарпу для каждого \(i\) найти любой \(j\), такой, что перед \(i\)-м другом может быть расположен \(j\)-й друг (т.е. хотя бы одно из условий выше было выполнено).

Обратите внимание, что вам не нужно находить расположение всех людей для общей фотографии. Вам нужно, чтобы каждый друг \(i\) нашел любого другого друга \(j\), который может оказаться перед ним. Думайте об этом, как о решении \(n\) независимых подзадач.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора находится одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество друзей.

Далее следуют \(n\) строк, каждая из которых содержит описание соответствующего друга. Каждый друг описывается двумя целыми числами \(h_i\) и \(w_i\) (\(1 \leq h_i, w_i \leq 10^9\)) — рост и ширина \(i\)-го друга, соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(n\) целых чисел, где \(i\)-е число является номером друга, которого можно поставить перед \(i\)-м. Если такого друга не существует, то выведите -1.

Если существует несколько ответов, выведите любой.

Примечание

Первый набор входных данных разобран в условии.

Во третьем наборе входных данных следующие варианты ответы тоже являются верными:

  • \([-1, -1, 1, 2]\);
  • \([-1, -1, 1, 1]\);
  • \([-1, -1, 2, 1]\).

F. Новогодняя головоломка

дп жадные алгоритмы Паросочетания Перебор сортировки *2100

Каждый год Дед Мороз дарит подарки всем детям. Однако в каждой стране есть свои традиции, и этот процесс происходит по разному. Например в Берляндии нужно решить новогоднюю головоломку.

Поликарпу досталась следующая задача: дана клетчатая полоска размером \(2 \times n\), некоторые клетки на ней заблокированы. Нужно проверить, можно ли замостить все незаблокированные клетки с помощью дощечек \(2 \times 1\) и \(1 \times 2\).

Например, если \(n = 5\) и полоска имеет следующий вид (черные клетки заблокированы):

То ее можно замостить, например, используя две вертикальных и две горизонтальных, как на картинке ниже (разные дощечки обозначаются разным цветом).

А если \(n = 3\) и полоска имеет следующий вид:

То замостить свободные клетки невозможно.

Поликарп легко справился с этой задачей и получил свой новогодний подарок. А сможете ли вы решить ее?

Входные данные

В первой строке находится целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Перед каждым набором входных данных расположена пустая строка.

В первой строке каждого набора содержится два целых числа \(n\) и \(m\) (\(1 \le n \le 10^9\), \(1 \le m \le 2 \cdot 10^5\)) — длина полоски и количество заблокированных клеток на ней.

В следующих \(m\) строках находится по два целых числа \(r_i, c_i\) (\(1 \le r_i \le 2, 1 \le c_i \le n\)) — номера строк и столбцов заблокированных клеток. Гарантируется, что все заблокированные клетки различные, т.е. \((r_i, c_i) \ne (r_j, c_j), i \ne j\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если можно ли замостить все незаблокированные клетки с помощью дощечек \(2 \times 1\) и \(1 \times 2\);
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первые два набора входных данных разобраны в условии.

В третьем наборе входных данных полоска выглядит следующим образом

Несложно убедиться, что свободные клетки на ней нельзя замостить

G. Переезд в столицу

графы дп кратчайшие пути поиск в глубину и подобное *2100

В Берляндии находятся \(n\) городов. Город с номером \(1\) является столицей. Некоторые пары городов соединены односторонней дорогой длины 1.

Перед поездкой Поликарп для каждого города узнал величину \(d_i\) — расстояние от столицы (города с номером \(1\)) до города с номером \(i\). Поликарп начинает своё путешествие в городе с номером \(s\) и, находясь в \(i\)-м городе, выбирает одно из следующих действий:

  1. Поехать из \(i\)-го города в \(j\)-й, если существует дорога из \(i\)-го города в \(j\)-й и \(d_i < d_j\);
  2. Поехать из \(i\)-го города в \(j\)-й, если существует дорога из \(i\)-го города в \(j\)-й и \(d_i \geq d_j\);
  3. Прекратить путешествие.

Так как правительство Берляндии не хочет, чтобы все люди съезжались в столицу, поэтому Поликарп может не более одного раза совершить действие из пункта два. Иными словами, второе действие он может совершить \(0\) или \(1\) раз. Поликарп же, наоборот, хочет оказаться как можно ближе к столице.

Например, если \(n = 6\) и города соединены, как на картинке выше, то Поликарп мог совершить следующие путешествия (не все возможные варианты):

  • \(2 \rightarrow 5 \rightarrow 1 \rightarrow 2 \rightarrow 5\);
  • \(3 \rightarrow 6 \rightarrow 2\);
  • \(1 \rightarrow 3 \rightarrow 6 \rightarrow 2 \rightarrow 5\).

Поликарп хочет узнать для каждого стартового города \(i\) узнать, на какое ближайшее расстояние он может подобраться к столице. Более формально: он хочет узнать минимальное значение \(d_j\), такое что Поликарп может добраться из города \(i\) в город \(j\) по выше описанным правилам.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Перед каждым набором входных данных расположена пустая строка.

Первая строка каждого набора содержит два целых числа \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) и \(m\) (\(1 \leq m \leq 2 \cdot 10^5\)) — количество городов и дорог соответственно.

Далее следуют \(m\) строк, описывающих дороги. Каждая дорога характеризуется двумя целыми числами \(u\) и \(v\) (\(1 \leq u, v \leq n, u \ne v\)) — номера городов, соединённых односторонней дорогой.

Гарантируется, что суммы \(n\) и \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Гарантируется, что для каждой пары различных городов \((u, v)\) существует не более одной дороги из \(u\) в \(v\) (но пара встречных дорог из \(u\) в \(v\) и из \(v\) в \(u\) — допустима).

Гарантируется, что из столицы существует путь до всех городов.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(n\) чисел, \(i\)-е из которых равно минимально возможному расстоянию от столицы до города, в котором Поликарп закончил своё путешествие.

D. Программа

дп реализация Строки Структуры данных *1700

Задана программа, состоящая из \(n\) инструкций. Изначально единственная переменная \(x\) присваивается \(0\). После этого следуют инструкции двух типов:

  • увеличить \(x\) на \(1\);
  • уменьшить \(x\) на \(1\).

Даны \(m\) запросов следующего типа:

  • запрос \(l\) \(r\) — сколько различных значений принимает переменная \(x\), если все инструкции между \(l\)-й и \(r\)-й включительно пропускаются, а остальные исполняются без изменения порядка?
Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следует описание \(t\) наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество инструкций в программе и количество запросов.

Во второй строке каждого набора входных данных записана программа — последовательность из \(n\) символов: каждый символ равен либо '+', либо '-' — инструкция увеличения и уменьшения, соответственно.

В каждой из следующих \(m\) строк записаны по два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — описание запроса.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите \(m\) целых чисел — для каждого запроса \(l\), \(r\) выведите количество различных значений, которые принимает переменная \(x\), если все инструкции между \(l\)-й и \(r\)-й включительно пропускаются, а остальные исполняются без изменения порядка.

Примечание

Инструкции, которые остаются в каждом запросе первого набора входных данных:

  1. пустая программа — \(x\) был равен только \(0\);
  2. «-» — \(x\) принимал значения \(0\) и \(-1\);
  3. «---+» — \(x\) принимал значения \(0\), \(-1\), \(-2\), \(-3\), \(-2\) — среди них \(4\) различных значения;
  4. «+--+--+» — различные значения — это \(1\), \(0\), \(-1\), \(-2\).

G. Плитки

бпф дп Комбинаторика математика *2800

Рассмотрим дорогу, состоящую из нескольких рядов. Каждый ряд разделен на несколько прямоугольных плиток, и все плитки в одном ряду одинаковы. Первый ряд содержит ровно одну прямоугольную плитку. Посмотрите на рисунок ниже, который показывает, как расположены плитки.

Дорога построена следующим образом:

  • первый ряд состоит из \(1\) плитки;
  • затем следует \(a_1\) рядов; каждый из этих рядов содержит на \(1\) плитку больше, чем предыдущий ряд;
  • затем следует \(b_1\) рядов; каждый из этих рядов содержит на \(1\) плитку меньше, чем предыдущий ряд;
  • затем следует \(a_2\) рядов; каждый из этих рядов содержит на \(1\) плитку больше, чем предыдущий ряд;
  • затем следует \(b_2\) рядов; каждый из этих рядов содержит на \(1\) плитку меньше, чем предыдущий ряд;
  • ...
  • затем следует \(a_n\) рядов; каждый из этих рядов содержит на \(1\) плитку больше, чем предыдущий ряд;
  • затем следует \(b_n\) рядов; каждый из этих рядов содержит на \(1\) плитку меньше, чем предыдущий ряд;
Пример дороги с \(n = 2\), \(a_1 = 4\), \(b_1 = 2\), \(a_2 = 2\), \(b_2 = 3\). Ряды расположены слева направо.

Вы начинаете с единственной плитки в первом ряду и хотите добраться до последнего ряда (любой плитки из нее). От вашей текущей плитки вы можете перейти к любой плитке в следующем ряду, которая касается с вашей текущей плиткой.

Вычислите количество различных путей от первого ряда до последнего. Поскольку оно может быть большим, выведите его по модулю \(998244353\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)).

Затем следует \(n\) строк. \(i\)-я из них содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^5\); \(|a_i - b_i| \le 5\)).

Дополнительное ограничение: последовательность \(a_i\) и \(b_i\) никогда не приводит к ряду с неположительным числом плиток.

Выходные данные

Выведите одно целое число — количество путей от первого ряда до последнего, взятое по модулю \(998244353\).

D. Уборка

дп жадные алгоритмы математика Структуры данных *2200

Во время уборки побережья Алиса нашла \(n\) кучек камней. В \(i\)-й кучке было \(a_i\) камней.

Кучки \(i\) и \(i + 1\) являются соседними для всех \(1 \leq i \leq n - 1\). Если кучка \(i\) стала пустой, кучки \(i - 1\) и \(i + 1\) не становятся соседними.

Алиса не хочет сама убирать эти кучки, поэтому она поручила задачу Вам. Она разрешила убирать камни только выполняя следующую операцию:

  • Выбрать две соседних кучки с ненулевым количеством камней, и удалить по одному камню из каждой из них.

Так как это не всегда возможно, Алиса разрешила Вам применить следующую суперспособность:

  • До начала уборки выбрать две соседние кучки и поменять их местами.

Определите, возможно ли убрать все камни, использовав суперспособность не более одного раза.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют описания самих наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество кучек камней.

Во второй строке каждого набора задано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — количество камней в кучках.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите YES или NO — возможно ли убрать все камни, использовав суперспособность не более одного раза.

Примечание

В первом наборе входных данных, можно убрать все камни, не применяя суперспособность: \([1, 2, 1] \rightarrow [1, 1, 0] \rightarrow [0, 0, 0]\).

Во втором наборе можно применить суперспособность ко второй и третьей кучкам, получив первый тестовый случай.

В третьем наборе можно применить суперспособность ко четвёртой и пятой кучкам, получив \(a = [2, 2, 2, 3, 1]\).

В четвёртом наборе можно применить суперспособность к первой и второй кучкам, получив \(a = [1900, 2100, 1600, 3000, 1600]\)

F. 1 2 3 4 ...

дп математика матрицы *3000

У Игоря была последовательность \(d_1, d_2, \dots, d_n\). Когда Игорь зашёл в класс, на доске было записано число \(x\).

Игорь создал последовательность \(p\) по следующему алгоритму:

  1. сначала, \(p = [x]\);
  2. для каждого \(1 \leq i \leq n\) он сделал следующую операцию \(|d_i|\) раз:
    • если \(d_i \geq 0\), он посмотрел на последний элемент \(p\) (назовём его \(y\)) и записал \(y + 1\) в конец \(p\);
    • если \(d_i < 0\), он посмотрел на последний элемент \(p\) (назовём его \(y\)) и записал \(y - 1\) в конец \(p\).

Например, если \(x = 3\), \(d = [1, -1, 2]\), последовательность \(p\) будет равна \([3, 4, 3, 4, 5]\).

Игорь решил посчитать длину наибольшей возрастающей подпоследовательности \(p\) и их количество.

Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов.

Последовательность \(a\) является возрастающей, если каждый элемент \(a\) (кроме первого) строго больше предыдущего.

При \(p = [3, 4, 3, 4, 5]\) длина наибольшей возрастающей подпоследовательности равна \(3\), а их количество равно \(3\): \([\underline{3}, \underline{4}, 3, 4, \underline{5}]\), \([\underline{3}, 4, 3, \underline{4}, \underline{5}]\), \([3, 4, \underline{3}, \underline{4}, \underline{5}]\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \leq n \leq 50\)) — количество элементов в \(d\).

Во второй строке задано одно целое число \(x\) (\(-10^9 \leq x \leq 10^9\)) — число на доске.

В третьей строке заданы \(n\) целых чисел \(d_1, d_2, \ldots, d_n\) (\(-10^9 \leq d_i \leq 10^9\)).

Выходные данные

Выведите два целых числа:

  • первое должно быть равно длине наибольшей возрастающей подпоследовательности \(p\), полученной Игорем в этом случае;
  • второе число должно быть равно их количеству по модулю \(998244353\).

По модулю \(998244353\) надо выводить только второе число.

Примечание

Первый пример разобран в условии.

Во втором примере \(p = [100, 101, 102, 103, 104, 105, 104, 103, 102, 103, 104, 105, 106, 107, 108]\).

В третьем примере \(p = [1, 2, \ldots, 2000000000]\).

B. Новогоднее число

дп математика Перебор *900

Поликарпу запомнился \(2020\)-й год, и он рад приходу нового \(2021\)-го года. Чтобы запомнить такой замечательный момент, Поликарп хочет представить число \(n\) в виде суммы некоторого количества чисел \(2020\) и некоторого количества чисел \(2021\).

Например, если:

  • \(n=4041\), то число \(n\) представимо в виде суммы \(2020 + 2021\);
  • \(n=4042\), то число \(n\) представимо в виде суммы \(2021 + 2021\)
  • \(n=8081\), то число \(n\) представимо в виде суммы \(2020 + 2020 + 2020 + 2021\)
  • \(n=8079\), то число \(n\) нельзя представить в виде суммы чисел \(2020\) и \(2021\).

Помогите Поликарпу понять, может ли число \(n\) быть представлено в виде суммы некоторого количества чисел \(2020\) и некоторого количества чисел \(2021\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — число, которое Поликарп хочет представить в виде суммы чисел \(2020\) и \(2021\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если число \(n\) представимо в виде суммы некоторого количества чисел \(2020\) и некоторого количества чисел \(2021\);
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

D. Очистка телефона

Бинарный поиск дп сортировки *1800

Поликарп часто пользуется своим смартфоном. Он уже установил на него \(n\) приложений. Приложение с номером \(i\) занимает \(a_i\) единиц памяти.

Недавно Поликарпу потребовалось установить новое приложение на свой смартфон. Однако, для установки требуется освободить хотя бы \(m\) единиц памяти (удаляя некоторые приложения).

Конечно же, некоторые приложения для Поликарпа важнее, чем другие. Он придумал следующую систему оценки — каждому приложению он сопоставил целое число \(b_i\):

  • \(b_i = 1\) — обычное приложение;
  • \(b_i = 2\) — важное приложение.

По такой системе оценки, его телефон имеет \(b_1 + b_2 + \ldots + b_n\) очков удобства.

Поликарп считает, что если он удалит приложения с номерами \(i_1, i_2, \ldots, i_k\), то он освободит \(a_{i_1} + a_{i_2} + \ldots + a_{i_k}\) единиц памяти и потеряет \(b_{i_1} + b_{i_2} + \ldots + b_{i_k}\) очков удобства.

Например, если \(n=5\), \(m=7\), \(a=[5, 3, 2, 1, 4]\), \(b=[2, 1, 1, 2, 1]\), то Поликарп может удалить следующие наборы приложений (ниже перечислены не все варианты):

  • приложения с номерами \(1, 4\) и \(5\). В таком случае он освободит \(a_1+a_4+a_5=10\) единиц памяти и потеряет \(b_1+b_4+b_5=5\) очков удобства;
  • приложения с номерами \(1\) и \(3\). В таком случае он освободит \(a_1+a_3=7\) единиц памяти и потеряет \(b_1+b_3=3\) очков удобства.
  • приложения с номерами \(2\) и \(5\). В таком случае он освободит \(a_2+a_5=7\) единиц памяти и потеряет \(b_2+b_5=2\) очков удобства.

Помогите Поликарпу, выберите набор приложений, удалив которые он освободит хотя бы \(m\) единиц памяти и потеряет минимальное количество очков удобства или укажите, что не существует такого набора.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le 10^9\)) — количество приложений на телефоне Поликарпа и количество единиц памяти, которые требуется освободить.

Во второй строке каждого набора входных данных содержится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — количество единиц памяти, занимаемое приложениями.

В третьей строке каждого набора входных данных содержится \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 2\)) — оценка каждого приложения по системе Поликарпа.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • -1, если не существует набора приложений, удаление которых освободит хотя бы \(m\) единиц памяти;
  • минимальное количество очков удобства, которые Поликарп потеряет, если такой набор существует.
Примечание

В первом наборе входных данных оптимально удалить приложения с номерами \(2\) и \(5\), освободив \(7\) единиц памяти. \(b_2+b_5=2\).

Во втором наборе входных данных удалив единственное приложение Поликарп сможет очистить только \(2\) единицы памяти из \(3\) необходимых.

В третьем наборе входных данных оптимально удалить приложения с номерами \(1\), \(2\), \(3\) и \(4\), освободив \(10\) единиц памяти. \(b_1+b_2+b_3+b_4=6\).

В четвертом наборе входных данных оптимально удалить приложения с номерами \(1\), \(3\) и \(4\), освободив \(12\) единиц памяти. \(b_1+b_3+b_4=4\).

В пятом наборе входных данных оптимально удалить приложения с номерами \(1\) и \(2\), освободив \(5\) единиц памяти. \(b_1+b_2=3\).

G. Странная красота

дп математика сортировки теория чисел *1900

Поликарп нашёл на улице массив \(a\) из \(n\) элементов.

Поликарп изобрёл свой критерий красоты массива. Он называет массив \(a\) красивым, если для каждой пары различных индексов \(i \ne j\) должно быть выполнено хотя бы одно из следующих условий:

  • \(a_i\) делится на \(a_j\);
  • \(a_j\) делится на \(a_i\).

Например, если:

  • \(n=5\) и \(a=[7, 9, 3, 14, 63]\), то массив \(a\) не является красивым (при \(i=4\) и \(j=2\) не выполняется ни одно из условий выше);
  • \(n=3\) и \(a=[2, 14, 42]\), то массив \(a\) является красивым;
  • \(n=4\) и \(a=[45, 9, 3, 18]\), то массив \(a\) не является красивым (при \(i=1\) и \(j=4\) не выполняется ни одно из условий выше);

Некрасивые массивы расстраивают Поликарпа, поэтому он хочет удалить некоторые элементы из массива \(a\) так, чтобы он стал красивым. Помогите Поликарпу определить, какое наименьшее число элементов массива необходимо удалить, чтобы массив \(a\) стал красивым.

Входные данные

В первой строке содержит одно целое число \(t\) (\(1 \leq t \leq 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное число элементов массива, которые необходимо удалить, чтобы массив \(a\) стал красивым.

Примечание

В первом наборе входных данных удаление элементов \(7\) и \(14\) сделает массив \(a\) красивым.

Во втором наборе входных данных массив \(a\) уже является красивым.

В третьем наборе входных данных удаление одного из элементов \(45\) или \(18\) сделает массив \(a\) красивым.

В четвертом наборе входных данных массив \(a\) уже является красивым.

C. Наидлиннейший простой цикл

графы дп жадные алгоритмы *1600

У вас есть \(n\) цепей, и \(i\)-я цепь состоит из \(c_i\) вершин. Вершины в каждой цепи пронумерованы независимо от \(1\) по \(c_i\) вдоль этой цепи. Другими словами, \(i\)-я цепь — это неориентированный граф из \(c_i\) вершин и \((c_i - 1)\) ребер, соединяющих \(j\)-ю и \((j + 1)\)-ю вершины для всех \(1 \le j < c_i\).

Вы решили объединить эти цепи в один граф следующим образом:

  1. первая цепь пропускается;
  2. \(1\)-я вершина \(i\)-й цепи соединяется ребром с \(a_i\)-й вершиной \((i - 1)\)-й цепи;
  3. последняя (\(c_i\)-я) вершина \(i\)-й цепи соединяется ребром с \(b_i\)-й вершиной \((i - 1)\)-й цепи.
Изображение первого набора входных данных. Пунктирные линии означают ребра, добавленные во время объединения

Посчитайте длину наидлиннейшего простого цикла в полученном графе.

Простой цикл — это, фактически, цепь, в которой первая и последняя вершины также соединены ребром. Если двигаться вдоль простого цикла, то мы посетим каждую вершину этого цикла ровно по одному разу.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество цепей.

Во второй строке каждого набора заданы \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(2 \le c_i \le 10^9\)) — количество вершин в соответствующих цепях.

В третьей строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(a_1 = -1\); \(1 \le a_i \le c_{i - 1}\)).

В четвертой строке каждого наборе заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(b_1 = -1\); \(1 \le b_i \le c_{i - 1}\)).

Оба числа \(a_1\) и \(b_1\) равны \(-1\), они не используются в построении графа и заданы лишь для соответствия нумерации. Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, выведите длину наибольшего простого цикла.

Примечание

В первом наборе входных данных, наидлиннейший простой цикл изображен ниже:

Мы не можем увеличить этот цикл с помощью первой цепи, так как в этом случае цикл уже не будет простым — вершина \(2\) на второй цепи нарушит простоту цикла.

D. Путешествие

дп поиск в глубину и подобное реализация снм *1700

В некоторой стране \(n + 1\) городов, пронумерованных от \(0\) до \(n\). \(n\) дорог соединяют эти города, \(i\)-я дорога соединяет города \(i - 1\) и \(i\) (\(i \in [1, n]\)).

У каждой дороги есть направление. Направления задаются строкой из \(n\) символов, каждый символ — либо L, либо R. Если \(i\)-й символ — L, то \(i\)-я дорога сначала направлена из города \(i\) в город \(i - 1\); иначе она направлена из города \(i - 1\) в город \(i\).

Путешественник хочет посетить как можно больше городов этой страны. Сначала он выбирает город, из которого начнет свое путешествие. Каждый день путешественник должен перейти из текущего города в соседний город по дороге, и он может перейти по дороге только в соответствии с ее направлением; то есть, если дорога направлена из города \(i\) в город \(i + 1\), он может перейти из города \(i\) в город \(i + 1\), но не из \(i + 1\) в \(i\). После того как путешественник перемещается в соседний город, все дороги меняют свое направление на противоположное. Если путешественник не может перейти в соседний город, он обязан закончить свое путешествие; также он может закончить путешествие в любой момент, в который захочет.

Цель путешественника — посетить как можно больше городов за одно путешествие (каждый город можно посетить любое количество раз, но только первое посещение считается). Для каждого города \(i\) посчитайте максимальное количество городов, которое путешественник может посетить за одно путешествие, если оно начинается в городе \(i\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке задано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)). Во второй строке — последовательность \(s\), состоящая из ровно \(n\) символов, каждый из которых — L или R.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n + 1\) целое число. \(i\)-е число должно быть равно максимальному количеству городов, которое можно посетить за одно путешествие, если это путешествие начинается в \(i\)-м городе.

F. Фонари

Бинарный поиск дп Структуры данных *3000

На прямой расположено \(n\) фонарей. Фонарь с номером \(i\) находится в позиции \(i\) и имеет мощность \(p_i\).

Каждый фонарь может быть направлен так, чтобы осветить либо несколько фонарей слева, либо несколько фонарей справа. Если \(i\)-й фонарь повернут влево, то он освещает все такие фонари \(j\), что \(j \in [i - p_i, i - 1]\). Аналогично, если он повернут вправо, то он освещает все такие фонари \(j\), что \(j \in [i + 1, i + p_i]\).

Вам предстоит выбрать направление для каждого фонаря так, чтобы каждый фонарь освещался хотя бы одним другим фонарем, или сообщить, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных данных.

Каждый набор состоит из двух строк. Первая строка содержит одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество фонарей.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(0 \le p_i \le n\)) — мощность \(i\)-го фонаря.

Сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

Если можно направить все фонари так, чтобы каждый фонарь был освещен, выведите YES в первой строке и строку из \(n\) символов L и/или R (\(i\)-й символ равен L, если \(i\)-й фонарь повернут влево, в противном случае этот символ - R) во второй строке. Если ответов несколько, вы можете вывести любой из них.

Если ответа нет, просто выведите NO для этого набора входных данных.

B. Nezzar и счастливые числа

дп жадные алгоритмы математика Перебор *1100

Любимая цифра Nezzar среди \(1,\ldots,9\) — это цифра \(d\). Он называет положительное целое число счастливым, если \(d\) встречается хотя бы раз в его десятичном представлении.

Дано \(q\) целых чисел \(a_1,a_2,\ldots,a_q\). Для каждого \(1 \le i \le q\) Nezzar хочет узнать, может ли \(a_i\) быть равно сумме (одного или более) счастливых чисел.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 9\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(q\) и \(d\) (\(1 \le q \le 10^4\), \(1 \le d \le 9\)).

Во второй строке описания каждого набора входных данных находится \(q\) целых чисел \(a_1,a_2,\ldots,a_q\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Для каждого числа в каждом наборе входных данных выведите «YES», если \(a_i\) может быть равно сумме счастливых чисел. Иначе выведите «NO».

Вы можете выводить символы в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных \(24 = 17 + 7\), \(27\) само является счастливым числом, \(25\) не может быть равно сумме счастливых чисел.

B1. Покраска массива I

дп жадные алгоритмы Конструктив реализация Структуры данных *1900

Единственное различие между двумя версиями задачи заключается в том, что в этой версии вам нужно найти максимальный возможный ответ.

Гомеру очень нравятся массивы. Сегодня он красит массив \(a_1, a_2, \dots, a_n\) двумя видами цветов, белым и черным. Покраска массива \(a_1, a_2, \dots, a_n\) описывается массивом \(b_1, b_2, \dots, b_n\), где \(b_i\) обозначает цвет \(a_i\) (\(0\) для белого и \(1\) для черного).

Согласно покраске \(b_1, b_2, \dots, b_n\) массив \(a\) разделяется на два новых массива \(a^{(0)}\) и \(a^{(1)}\), где \(a^{(0)}\) — это подпоследовательность всех белых элементов в \(a\), а \(a^{(1)}\) — это подпоследовательность всех черных элементов в \(a\). Например, если \(a = [1,2,3,4,5,6]\) и \(b = [0,1,0,1,0,0]\), то \(a^{(0)} = [1,3,5,6]\) и \(a^{(1)} = [2,4]\).

Количество отрезков в массиве \(c_1, c_2, \dots, c_k\), обозначаемое \(\mathit{seg}(c)\), — это количество элементов, которое останется, если объединить все соседние элементы с одинаковым значением в \(c\). Например, количество отрезков в \([1,1,2,2,3,3,3,2]\) равно \(4\), так как массив станет равным \([1,2,3,2]\) после объединения соседних элементов с одинаковым значением. В частности, количество отрезков в пустом массиве равно \(0\).

Гомер хочет найти покраску \(b\), согласно которой суммарное количество отрезков в \(a^{(0)}\) и \(a^{(1)}\), т. е. \(\mathit{seg}(a^{(0)})+\mathit{seg}(a^{(1)})\), максимально. Найдите, чему равно это значение.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

Выходные данные

Выведите единственное число — максимально возможное суммарное количество отрезков.

Примечание

В первом примере можно выбрать \(a^{(0)} = [1,2,3,3]\), \(a^{(1)} = [1,2,3]\) и \(\mathit{seg}(a^{(0)}) = \mathit{seg}(a^{(1)}) = 3\). Таким образом, ответ \(3+3 = 6\).

Во втором примере можно выбрать \(a^{(0)} = [1,2,3,4,5,6,7]\) и \(a^{(1)}\) пустое. Мы видим, что \(\mathit{seg}(a^{(0)}) = 7\) и \(\mathit{seg}(a^{(1)}) = 0\). Таким образом, ответ \(7+0 = 7\).

B2. Покраска массива II

дп жадные алгоритмы Конструктив реализация Структуры данных *2100

Единственное различие между двумя версиями задачи заключается в том, что в этой версии вам нужно найти минимальный возможный ответ.

Гомеру очень нравятся массивы. Сегодня он красит массив \(a_1, a_2, \dots, a_n\) двумя видами цветов, белым и черным. Покраска массива \(a_1, a_2, \dots, a_n\) описывается массивом \(b_1, b_2, \dots, b_n\), где \(b_i\) обозначает цвет \(a_i\) (\(0\) для белого и \(1\) для черного).

Согласно покраске \(b_1, b_2, \dots, b_n\) массив \(a\) разделяется на два новых массива \(a^{(0)}\) и \(a^{(1)}\), где \(a^{(0)}\) — это подпоследовательность всех белых элементов в \(a\), а \(a^{(1)}\) — это подпоследовательность всех черных элементов в \(a\). Например, если \(a = [1,2,3,4,5,6]\) и \(b = [0,1,0,1,0,0]\), то \(a^{(0)} = [1,3,5,6]\) и \(a^{(1)} = [2,4]\).

Количество отрезков в массиве \(c_1, c_2, \dots, c_k\), обозначаемое \(\mathit{seg}(c)\),  — это количество элементов, которое останется, если объединить все соседние элементы с одинаковым значением в \(c\). Например, количество отрезков в \([1,1,2,2,3,3,3,2]\) равно \(4\), так как массив станет равным \([1,2,3,2]\) после объединения соседних элементов с одинаковым значением. В частности, количество отрезков в пустом массиве равно \(0\).

Гомер хочет найти покраску \(b\), согласно которой суммарное количество отрезков в \(a^{(0)}\) и \(a^{(1)}\), т. е. \(\mathit{seg}(a^{(0)})+\mathit{seg}(a^{(1)})\), минимально. Найдите, чему равно это значение.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

Выходные данные

Выведите единственное число — минимально возможное суммарное количество отрезков.

Примечание

В первом примере можно выбрать \(a^{(0)} = [1,1,2,2]\), \(a^{(1)} = [2,3]\) и \(\mathit{seg}(a^{(0)}) = \mathit{seg}(a^{(1)}) = 2\). Таким образом, ответ \(2+2 = 4\).

Во втором примере можно выбрать \(a^{(0)} = [1,1,1,1]\), \(a^{(1)} = [2,2,2]\) и \(\mathit{seg}(a^{(0)}) = \mathit{seg}(a^{(1)}) = 1\). Таким образом, ответ \(1+1 = 2\).

E. Школьные клубы

бпф дп математика Теория вероятностей теория чисел *3500

В школе Гомера есть \(n\) студентов, которые любят клубы.

Изначально есть \(m\) клубов, и каждый из \(n\) студентов находится ровно в одном клубе. Другими словами, в \(i\)-м клубе \(a_i\) студентов для \(1 \leq i \leq m\), причем \(a_1+a_2+\dots+a_m = n\).

\(n\) студентов настолько недружелюбны, что каждый день один (выбранный равновероятно среди всех \(n\) студентов) из них злится. Разозлившийся студент сделает одну из следующих вещей.

  • С вероятностью \(\frac 1 2\) он покидает свой нынешний клуб, затем сам создает новый клуб и присоединяется к нему. В новом клубе, который он создает, есть только один ученик (он сам).
  • С вероятностью \(\frac 1 2\) он не создает новый клуб. В этом случае он меняет свой клуб на некоторый (возможно, на тот же клуб, в котором он находится в настоящее время) с вероятностью, пропорциональной количеству студентов в нем. Формально, пусть есть \(k\) клубов, и в \(i\)-м клубе есть \(b_i\) студентов для \(1 \leq i \leq k\) (до того, как студент разозлится). Он покидает свой текущий клуб, а затем присоединяется к \(i\)-му клубу с вероятностью \(\frac {b_i} {n}\).

Отметим, что когда клуб становится пустым, студенты никогда не присоединятся к нему, потому что любой ученик, который разозлится, присоединится к пустому клубу с вероятностью \(0\) в соответствии с приведенным выше утверждением.

Гомер интересуется ожидаемым количеством дней до того момента, когда все студенты окажутся в одном и том же клубе впервые.

Мы можем доказать, что ответ может быть представлен в виде рационального числа \(\frac p q\) с \(\gcd(p, q) = 1\). Вы должны найти значение \(pq^{-1} \bmod 998\,244\,353\). Можно показать, что \(q \bmod 998\,244\,353 \neq 0\) при заданных ограничениях задачи.

Входные данные

Первая строка содержит одно целое положительное число \(m\) (\(1 \leq m \leq 1000\)) — начальное количество клубов.

Вторая строка содержит \(m\) положительных целых чисел \(a_1, a_2, \dots, a_m\) (\(1 \leq a_i \leq 4 \cdot 10^8\)) с \(1 \leq a_1+a_2+\dots+a_m \leq 4 \cdot 10^8\), где \(a_i\) обозначает количество учеников в \(i\)-м клубе изначально.

Выходные данные

Выведите одно целое число — ожидаемое количество дней, пока все студенты не окажутся в одном клубе впервые, по модулю \(998\,244\,353\).

Примечание

В первом примере независимо от того, какой студент разозлится, два студента с вероятностью \(\frac 1 4\) попадут в один и тот же клуб. Таким образом, ожидаемое количество дней, пока каждый ученик не окажется в одном клубе, должно составлять \(4\).

Во втором примере мы отмечаем, что в первый день:

  • Единственный студент в первом клубе разозлится с вероятностью \(\frac 1 3\). Если он разозлится, то создаст новый клуб и присоединится к нему с вероятностью \(\frac 1 2\) (в этом случае будет три клуба, в которых будут состоять \(0, 1, 2\) студента, соответственно); покинет свой текущий клуб и присоединится ко второму с вероятностью \(\frac 1 2 \cdot \frac 2 3 = \frac 1 3\), или останется с вероятностью \(\frac 1 2 \cdot \frac 1 3 = \frac 1 6\);
  • Каждый из двух студентов во втором клубе разозлится с вероятностью \(\frac 1 3\). Если один из них разозлится, то создаст новый клуб и присоединится к нему с вероятностью \(\frac 1 2\), покинет свой текущий клуб и присоединится ко второму с вероятностью \(\frac 1 2 \cdot \frac 1 3 = \frac 1 6\), или останется с вероятностью \(\frac 1 2 \cdot \frac 2 3 = \frac 1 3\).

В четвертом примере изначально есть только один клуб. То есть каждый студент уже в одном клубе. Так что ответ — \(0\).

D. Мешок мышек

дп игры математика Теория вероятностей *1800

Дракон и принцесса решают, что делать в новогоднюю ночь: дракон предлагает лететь в горы любоваться танцами фей под луной, а принцесса — лечь спать пораньше. Договориться полюбовно они отчаялись и решили отдаться на волю случая.

Они по очереди тянут мышек из мешка, в котором изначально w белых и b черных мышек, и выигрывает тот, кто первым достает белую мышь. После каждой вытянутой драконом мыши оставшиеся впадают в панику, и одна из них выпрыгивает из мешка сама (принцесса вытаскивает мышей из мешка аккуратно и не пугает их). Принцесса тянет первой. Какова вероятность ее победы?

Если мыши в мешке закончились, а белую так никто и не вытащил, победителем считается дракон. Мыши, которые выпрыгнули сами, не считаются вытащенными (не определяют победителя). Единожды покинув мешок, мыши в него не возвращаются. Любая мышь вытаскивается из мешка с одинаковой вероятностью, и любая мышь выпрыгивает из мешка с одинаковой вероятностью.

Входные данные

В единственной строке входных данных записано два целых числа w и b (0 ≤ w, b ≤ 1000).

Выходные данные

Выведите вероятность победы принцессы. Ответ считается правильным, если абсолютная или относительная погрешность не превосходит 10 - 9.

Примечание

Рассмотрим подробнее первый тест. С вероятностью 1/4 принцесса вытащит белую мышь сразу же и выиграет. С вероятностью 3/4 * 2/3 = 1/2 после этого дракон вытащит черную мышь и не выиграет; затем в мешке останется одна белая и одна черная мышь, одна из которых выпрыгнет, а вторая достанется принцессе в ее второй ход. Если оставшаяся мышь белая, выигрывает принцесса (вероятность 1/2 * 1/2 = 1/4), иначе мыши заканчиваются, и по правилам выигрывает дракон.

E. Фарфор

дп *1900

Во время истерик принцесса обычно бьет коллекционный фарфор. На один гневный вопль уходит один предмет.

Фарфор находится на n полках. На каждой полке предметы расставлены в один ряд так, что с полки можно брать только крайние предметы — либо крайний левый, либо крайний правый, но не предметы между ними. Когда предмет взят, открывается доступ к следующему предмету с этого края (см. пример). Если предмет взят, его уже нельзя вернуть на полки.

Задана ценность каждого предмета. Определите, во сколько обойдется хозяину коллекции принцессина истерика из m гневных воплей в худшем для него случае.

Входные данные

В первой строке входных данных записано два целых числа n (1 ≤ n ≤ 100) и m (1 ≤ m ≤ 10000). В следующих n строках заданы стоимости предметов на полках: первое число в строке — количество предметов на этой полке (целое число от 1 до 100, включительно), затем стоимости предметов (целые числа от 1 до 100, включительно) в том порядке, в каком они выставлены на полке (первый предмет ближе всего к левому краю полки, а последний предмет — к правому). Гарантируется, что общее количество предметов будет не менее m.

Выходные данные

Выведите максимальную стоимость истерики из m воплей.

Примечание

В первом примере фарфор расставлен на двух полках, по три предмета на каждой. Чтобы получить наибольшую сумму стоимостей, можно взять два предмета с левого края первой полки и один с правого края второй.

Во втором примере полка всего одна, и выбора нет: все три предмета берутся с нее — два с левого края и один с правого.

E. Сортируем книги

дп жадные алгоритмы Структуры данных *2500

Однажды вы решили почитать какую-нибудь книгу на книжной полке в соседней комнате. Но когда вы увидели, какой беспорядок творится на полке, то захотели сначала на ней разобраться.

У вас есть \(n\) книг, стоящих в ряд на полке, обложка \(i\)-й книги имеет цвет \(a_i\).

Вы хотите переставить книги так, чтобы сделать полку красивой. Полка считается красивой, если все книги одного цвета стоят подряд.

За одну операцию, вы можете взять одну любую книгу на полке и переставить ее в правый конец полки.

Какое наименьшее количество операций вам понадобится, чтобы сделать полку красивой?

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество книг.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — цвета книг.

Выходные данные

Выведите наименьшее количество операций, чтобы сделать полку красивой.

Примечание

В первом примере у нас есть полка с книгами \([1, 2, 2, 1, 3]\) и мы можем, например:

  1. взять книгу на позиции \(4\) и переместить ее в правый конец: мы получим \([1, 2, 2, 3, 1]\);
  2. взять книгу на позиции \(1\) и переместить ее в правый конец: мы получим \([2, 2, 3, 1, 1]\).

Во втором примере, мы можем переместить первую книгу в конец полки и получить \([2,2,1,1,1]\).

F. AB дерево

Деревья дп жадные алгоритмы *3100

Kilani и Abd — соседи уже на протяжении 3000 лет, но пришел день и Kilani решил переехать. На прощание, Kilani решил дать Abd задачу, придуманную их общим соседом с таким же именем Abd.

Задача следующая:

Вам задано связное дерево с корнем в вершине \(1\).

Вам нужно назначить каждой вершине букву a или b таким образом, чтобы суммарное количество a было равно \(x\) и суммарное количество b было равно \(n - x\).

Определим строку для каждой вершины \(v\) дерева следующим образом:

  • если \(v\) — это корень, то строка — это одна буква, назначенная \(v\):
  • в противном случае, возьмем строку, полученную для родителя \(p_v\) вершины \(v\) и допишем к ней символ, назначенный \(v\).

Расставьте буквы на вершинах таким образом, чтобы минимизировать количество различных строк среди строк для всех вершин.

Входные данные

В первой строке заданы два целых числа \(n\) и \(x\) (\(1 \leq n \leq 10^5\); \(0 \leq x \leq n\)) — количество вершин в дереве и количество букв a.

Во второй строке заданы \(n - 1\) целых чисел \(p_2, p_3, \dots, p_{n}\) (\(1 \leq p_i \leq n\); \(p_i \neq i\)), где \(p_i\) — родитель вершины \(i\).

Гарантируется, что входные данные описывают связное дерево.

Выходные данные

В первой строке, выведите минимально возможное количество различных строк.

Во второй строке, выведите \(n\) символов, каждый из которых — либо a, либо b и \(i\)-й символ — это символ, назначенный \(i\)-й вершине.

Удостоверьтесь, что букв a ровно \(x\), а букв b ровно \(n - x\).

Если существует несколько ответов, выведите любой из них.

Примечание

Дерево из примера изображено ниже:

После назначения букв каждой вершине (в соответствии с выходными данными), дерево выглядит следующим образом:

Строки для каждой вершины:

  • строка вершины \(1\): a
  • строка вершины \(2\): aa
  • строка вершины \(3\): aab
  • строка вершины \(4\): aab
  • строка вершины \(5\): aabb
  • строка вершины \(6\): aabb
  • строка вершины \(7\): aabb
  • строка вершины \(8\): aabb
  • строка вершины \(9\): aa

Множество различных строк равно \(\{\text{a}, \text{aa}, \text{aab}, \text{aabb}\}\), то есть количество различных строк равно \(4\).

E. Панорама города

дп разделяй и властвуй Структуры данных *2100

Алиса в Нью-Йорке! Она хочет сделать несколько снимков знаменитых небоскребов и отправить набор фотографий Бобу. Алиса хочет составить наиболее красивый набор фотографий, и в этом ей требуется ваша помощь.

В городе \(n\) зданий, расположенных в линию слева направо, \(i\)-е из них имеет положительную высоту \(h_i\). Высоты всех \(n\) зданий в городе различны. Кроме того, у каждого здания есть параметр красоты \(b_i\). Красота зданий может быть положительна или отрицательна (или равна нулю), потому что некоторые здания портят вид.

Набор фотографий состоит из одной или более фотографий зданий. На каждом фото должно быть изображено одно или несколько зданий, расположенных подряд. Каждое здание должно попасть на ровно одно фото. Другими словами, если есть здание, которое не попало ни на одно фото, или присутствует более чем на одном фото, то такой набор фотографий считается некорректным.

Красота одной фотографии равняется красоте \(b_i\) самого низкого здания на фотографии. Общая красота набора фотографий равна сумме красот всех фотографий в наборе. Помогите Алисе определить максимально возможную красоту корректного набора фотографий.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество зданий.

Вторая строка содержит \(n\) различных целых чисел \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le n\)), где \(i\)-е число равно высоте \(i\)-го здания.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-10^9 \le b_i \le 10^9\)), где \(i\)-е число равно красоте \(i\)-го здания.

Выходные данные

Выведите одно число — максимальную красоту, которую может иметь корректный набор фотографий.

Примечание

В первом примере максимальная красота достигается, если Алиса сделает пять фотографий, каждая из которых содержит одно здание.

Во втором примере Алиса может достичь максимальной красоты набора, равной \(10\), если сделает четыре фотографии: три содержат одно здание каждая (здания \(1\), \(2\) и \(5\)), их красоты равны \(-3\), \(4\) и \(7\) соответственно, и еще одна фотография содержит здания \(3\) и \(4\), ее красота равна \(2\).

В третьем примере Алиса может просто сделать одно фото всего города.

В четвертом примере Алиса может сделать следующие фотографии для достижения максимальной красоты набора: отдельно фотографии зданий \(1\), \(2\), \(8\), \(9\) и \(10\), а также одно фото зданий \(3\), \(4\), \(5\), \(6\) и \(7\) вместе.

B. Замена и возрастание

дп математика реализация *1200

Дано положительное целое число \(k\). Два массива называются \(k\)-похожими, если:

  • они строго возрастающие;
  • они имеют одинаковую длину;
  • все их элементы — это положительные целые числа между \(1\) и \(k\) (включительно);
  • они различаются в ровно одной позиции.

Вам дано число \(k\), строго возрастающий массив \(a\) и \(q\) запросов. Для каждого запроса вам даны два целых числа \(l_i \leq r_i\). Ваша задача найти, сколько массивов \(b\) существует таких, что \(b\) \(k\)-похож на массив \([a_{l_i},a_{l_i+1}\ldots,a_{r_i}]\).

Входные данные

В первой строке находятся три целых числа \(n\), \(q\) и \(k\) (\(1\leq n, q \leq 10^5\), \(n\leq k \leq 10^9\)) — длина массива \(a\), количество запросов и число \(k\).

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots,a_n\) (\(1 \leq a_i \leq k\)). Этот массив строго возрастающий: \(a_1 < a_2 < \ldots < a_n\).

Каждая из следующих \(q\) строк содержит два целых числа \(l_i\), \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)).

Выходные данные

Выведите \(q\) строк. \(i\)-я из них должна содержать ответ на \(i\)-й запрос.

Примечание

В первом примере:

В первом запросе есть \(4\) массива, которые \(5\)-похожи на \([2,4]\): \([1,4],[3,4],[2,3],[2,5]\).

Во втором запросе есть \(3\) массива, которые \(5\)-похожи на \([4,5]\): \([1,5],[2,5],[3,5]\).

E. Передвижения и замены

Деревья дп жадные алгоритмы поиск в глубину и подобное *2500

Вам дано \(n - 1\) целое число \(a_2, \dots, a_n\) и корневое дерево с \(n\) вершинами, подвешенное в вершине \(1\). Все листья находятся на одинаковом расстоянии \(d\) от корня.

Деревом называется связный неориентированный граф без циклов. Расстоянием между парой вершин называется количество ребер на простом пути между ними. Все некорневые вершины, имеющие степень \(1\), называются листьями. Если вершины \(s\) и \(f\) соединены ребром, и \(f\) находится на расстоянии от корня большем, чем \(s\), то \(f\) называется сыном \(s\).

Изначально в вершине \(1\) находятся красная и синяя фишки. Давайте обозначим за \(r\) вершину, в которой находится красная фишка, и за \(b\) вершину, в которой находится синяя фишка. Вы должны сделать \(d\) ходов. Ход состоит из трех шагов:

  • Переместить красную фишку в любого сына \(r\).
  • Переместить синюю фишку в любую вершину \(b'\) такую, что \(dist(1, b') = dist(1, b) + 1\). Здесь \(dist(x, y)\) обозначает длину кратчайшего пути между \(x\) и \(y\). Обратите внимание, что \(b\) и \(b'\) не обязательно соединены ребром.
  • Вы можете, если хотите, поменять две фишки местами (или пропустить этот шаг).

Обратите внимание, что \(r\) и \(b\) могут быть равны в любой момент времени, а в корне дерева не записано никакое число.

После каждого хода вы получаете \(|a_r - a_b|\) очков. Какое максимальное количество очков вы можете получить после \(d\) ходов?

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество вершин в дереве.

Во второй строке описания каждого набора входных данных находится \(n-1\) целое число \(v_2, v_3, \dots, v_n\) (\(1 \leq v_i \leq n\), \(v_i \neq i\)) — \(i\)-е из них означает, что есть ребро между вершинами \(i\) и \(v_i\). Гарантируется, что эти ребра образуют дерево.

В третьей строке описания каждого набора входных данных находится \(n-1\) целое число \(a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — числа, записанные в вершинах.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число: максимальное количество очков, которое вы можете получить после \(d\) ходов.

Примечание

В первом наборе входных данных оптимальное решение — это:

  • ход \(1\): \(r = 4\), \(b = 2\); нет замены;
  • ход \(2\): \(r = 7\), \(b = 6\); замена (после нее \(r = 6\), \(b = 7\));
  • ход \(3\): \(r = 11\), \(b = 9\); нет замен.

Общее количество очков равно \(|7 - 2| + |6 - 9| + |3 - 9| = 14\).

Во втором наборе входных данных оптимальное решение — это:

  • ход \(1\): \(r = 2\), \(b = 2\); нет замены;
  • ход \(2\): \(r = 3\), \(b = 4\); нет замены;
  • ход \(3\): \(r = 5\), \(b = 6\); нет замены.

Общее количество очков равно \(|32 - 32| + |78 - 69| + |5 - 41| = 45\).

F. Копия или префиксная сумма

дп Комбинаторика сортировки Структуры данных *2400

Вам дан массив целых чисел \(b_1, b_2, \ldots, b_n\).

Массив \(a_1, a_2, \ldots, a_n\) целых чисел смешанный, если для всех \(i\) (\(1 \leq i \leq n\)) хотя бы одно из этих двух условий выполнено:

  • \(b_i = a_i\), или
  • \(b_i = \sum_{j=1}^{i} a_j\).

Найдите количество смешанных массивов \(a_1, a_2, \ldots, a_n\). Поскольку ответ может быть очень большим, найдите его по модулю \(10^9 + 7\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке описания каждого набора входных данных находятся \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-10^9 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число: количество смешанных массивов \(a_1, a_2, \ldots, a_n\) по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных смешанные массивы — это \([1, -2, 1]\), \([1, -2, 2]\), \([1, -1, 1]\).

Во втором наборе входных данных смешанные массивы — это \([1, 1, 1, 1]\), \([1, 1, 1, 4]\), \([1, 1, 3, -1]\), \([1, 1, 3, 4]\), \([1, 2, 0, 1]\), \([1, 2, 0, 4]\), \([1, 2, 3, -2]\), \([1, 2, 3, 4]\).

В четвертом наборе входных данных единственный смешанный массив — это \([0, 0, 0, 1]\).

D. Максимальная медиана

Бинарный поиск дп Структуры данных *2100

У вас есть массив \(a\) длины \(n\). Найдите такой подмассив \(a[l..r]\) длиной хотя бы \(k\), что у него максимально возможная медиана.

Медианой в массиве длины \(n\) называется элемент, стоящий на позиции \(\lfloor \frac{n + 1}{2} \rfloor\) после сортировки всех элементов в неубывающем порядке. Например: \(median([1, 2, 3, 4]) = 2\), \(median([3, 2, 1]) = 2\), \(median([2, 1, 2, 1]) = 1\).

Подмассив \(a[l..r]\) — это последовательная часть массива \(a\), то есть массив \(a_l,a_{l+1},\ldots,a_r\) для каких-то \(1 \leq l \leq r \leq n\), он имеет длину \(r - l + 1\).

Входные данные

В первой строке находятся два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 2 \cdot 10^5\)).

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)).

Выходные данные

Выведите одно целое число \(m\) — максимальную медиану, которую можно получить.

Примечание

В первом примере все возможные массивы: \([1..3]\), \([1..4]\), \([1..5]\), \([2..4]\), \([2..5]\) и \([3..5]\), и во всех них медиана равна \(2\), соответственно, максимальная медиана также равна \(2\).

Во втором примере \(median([3..4]) = 3\).

E. Парный платёж

Бинарный поиск графы дп Конструктив кратчайшие пути Перебор Потоки *2200

В стране \(n\) городов и \(m\) двунаправленных дорог. Дороги в стране формируют неориентированный взвешенный граф. Граф может быть несвязным. У каждой дороги есть свой параметр \(w\). Вы можете ездить по дорогам, но правительство издало новый закон: вы можете проезжать только по двум дорогам сразу (проехать из города \(a\) в город \(b\), и из города \(b\) в город \(c\)) и вы должны будете заплатить \((w_{ab} + w_{bc})^2\) денег, чтобы проехать по этим дорогам. Для каждого города \(t\) найдите, можно ли добраться до него из города \(1\), и какое наименьшее количество денег необходимо потратить, чтобы добраться из \(1\) в \(t\).

Входные данные

В первой строке находятся два целых числа \(n\), \(m\) (\(2 \leq n \leq 10^5\), \(1 \leq m \leq min(\frac{n \cdot (n - 1)}{2}, 2 \cdot 10^5)\)).

В следующих \(m\) строках находятся по три целых числа \(v_i\), \(u_i\), \(w_i\) (\(1 \leq v_i, u_i \leq n\), \(1 \leq w_i \leq 50\), \(u_i \neq v_i\)). Гарантируется, что в графе нет кратных рёбер, то есть для любого ребра \((u_i, v_i)\) не существует других рёбер \((u_i, v_i)\) или \((v_i, u_i)\).

Выходные данные

Для каждого города \(t\) выведите одно целое число. Если нет корректного пути из \(1\) в \(t\) выведите \(-1\). Иначе выведите минимальное необходимое количество денег, чтобы добраться из \(1\) в \(t\).

Примечание

Граф в первом примере выглядит так.

Во втором примере путь из \(1\) в \(3\) проходит через \(2\), так что результирующая стоимость поездки будет \((1 + 2)^2 = 9\).

F. Пары путей

Деревья дп Комбинаторика поиск в глубину и подобное Структуры данных *2600

У вас есть дерево из \(n\) вершин, а также \(m\) простых вершинных путей. Ваша задача — найти, сколько пар этих путей пересекаются по ровно одной вершине. Более формально, вам нужно найти число пар \((i, j)\) \((1 \leq i < j \leq m)\) таких, что \(path_i\) и \(path_j\) имеют ровно одну общую вершину.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \leq n \leq 3 \cdot 10^5)\).

Следующие \(n - 1\) строк описывают дерево. На каждой строке находится два целых числа \(u\) и \(v\) \((1 \leq u, v \leq n)\) описывающие ребро между вершинами \(u\) и \(v\).

В следующей строке находится единственное целое число \(m\) \((1 \leq m \leq 3 \cdot 10^5)\).

Следующие \(m\) строк описывают пути. Каждая строка описывает путь своими крайними точками \(u\) и \(v\) \((1 \leq u, v \leq n)\). Путь задается всеми вершинами на кратчайшем пути из \(u\) в \(v\) (включая \(u\) и \(v\)).

Выходные данные

Выведите единственное целое число — количество пар путей, которые пересекаются по ровно одной вершине.

Примечание

Дерево и пути в первом примере выглядят так. Пары \((1,4)\) и \((3,4)\) пересекаются по ровно одной вершине.

Во втором примере все пути состоят из единственной одинаковой вершины, так что все пары \((1, 2)\), \((1, 3)\) и \((2, 3)\) пересекаются по одной вершине.

Третий пример, такой же как первый, но с двумя дополнительными путями. Пары \((1,4)\), \((1,5)\), \((2,5)\), \((3,4)\), \((3,5)\), \((3,6)\) и \((5,6)\) пересекаются по ровно одной вершине.

F. Единицы

дп жадные алгоритмы кратчайшие пути *2900

Вам задано положительное (больше нуля) целое число \(n\).

Вам необходимо представить \(n\) как сумму целых чисел (возможно, отрицательных), состоящих только из единиц (цифр '1'). Например, \(24 = 11 + 11 + 1 + 1\) и \(102 = 111 - 11 + 1 + 1\).

Среди всех возможных представлений вы должны найти то, которое использует минимальное количество единиц в общей сложности.

Входные данные

Единственная строка содержит одно целое число \(n\) (\(1 \le n < 10^{50}\)).

Выходные данные

Выведите одно целое число \(x\) — минимальное число единиц, такое, что существует представление \(n\) как суммы целых чисел (возможно, отрицательных), которое использует \(x\) единиц в общей сложности.

G. Подсчет строк

бпф дп Комбинаторика математика *2700

У вас есть \(c_1\) букв 'a', \(c_2\) букв 'b', ..., \(c_{26}\) букв 'z'. Вы хотите построить красивую строку длины \(n\) из них (очевидно, \(i\)-я буква может быть использована не более \(c_i\) раз). Каждое значение \(c_i\) больше \(\frac{n}{3}\).

Назовем строку красивой, если у нее нет ни одной палидромной непрерывной подстроки, длина которой нечетна и больше \(1\). Например, строка «abacaba» не является красивой, у нее есть несколько палиндромных подстрок, длина которых нечетна и больше \(1\) (одна из таких подстрок — «aca»). Другой пример: строка «abcaa» —- красивая.

Посчитайте количество различных строк, которые можно построить, и выведите его по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(3 \le n \le 400\)).

Во второй строке заданы \(26\) целых чисел \(c_1\), \(c_2\), ..., \(c_{26}\) (\(\frac{n}{3} < c_i \le n\)).

Выходные данные

Выведите одно целое число — количество различных строк, которые можно построить, взятое по модулю \(998244353\).

E. Палиндромные пары

*особая задача дп Структуры данных *2200

Подпоследовательность — это последовательность, которую можно получить из другой последовательности путем удаления некоторых элементов, не меняя порядок оставшихся элементов.

Палиндромная последовательность — это последовательность, которая равна перевернутой себе.

Задана последовательность из \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Любое целое значение встречается в \(a\) не более двух раз.

Какова длина самой длинной палиндромной подпоследовательности последовательности \(a\)?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 250\,000\)) — количество элементов последовательности.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Любое целое значение встречается в \(a\) не более двух раз. Сумма \(n\) по всем наборам входных данных не превосходит \(250\,000\).

Выходные данные

На каждый набор входных данных выведите одно целое число — длину самой длинной палиндромной подпоследовательности последовательности \(a\).

Примечание

Вот самые длинные палиндромные подпоследовательности для наборов входных данных из примера:

  • 2 1 3 1 5 2
  • 1 3 3 4 4 1 или 1 3 3 4 4 1
  • 1
  • 1 1
  • 4 4 2 5 7 2 3 или 4 4 2 5 7 2 3

D. Раскрашивание скобок

дп *1900

Как-то раз Петя прочитал задачу про скобочную последовательность. Он долго думал над ней, но так и не нашел решение. Сегодня с этой задачей предстоит столкнуться вам.

Дана строка s, представляющая собой правильную скобочную последовательность. Правильная скобочная последовательность — это последовательность открывающихся («(») и закрывающихся («)») скобок такая, что из нее можно получить корректное математическое выражение, вставляя между скобок числа и операторы. Например, последовательности «(())()» и «()» правильные скобочные, а последовательности «)()» и «(()» нет.

В правильной скобочной последовательности каждой скобке соответствует парная скобка (открывающейся скобке соответствует парная закрывающаяся и наоборот). Например, в скобочной последовательности, изображенной на рисунке, третьей скобке соответствует парная шестая, а пятой скобке соответствует четвертая.

Вам разрешается раскрасить некоторые скобки в скобочной последовательности, так чтобы выполнялись все три условия:

  • Каждая скобка либо не раскрашена, либо раскрашена в красный цвет, либо раскрашена в синий цвет.
  • Для любых двух парных скобок раскрашена ровно одна скобка из этой пары. Другими словами, для каждой скобки верно следующее: раскрашена либо она сама, либо соответствующая парная к ней.
  • Никакие две соседние раскрашенные скобки не имеют один и тот же цвет.

Найдите количество различных раскрасок скобочной последовательности удовлетворяющих описанным выше условиям. Две раскраски считаются различными, если они отличаются цветом хотя бы одной скобки. Так как ответ может быть достаточно большим, выведите его по модулю 1000000007 (109 + 7).

Входные данные

В первой строке содержится единственная строка s (2 ≤ |s| ≤ 700), представляющая собой правильную скобочную последовательность.

Выходные данные

Выведите единственное число — количество раскрасок скобочной последовательности удовлетворяющих описанным выше условиям по модулю 1000000007 (109 + 7).

Примечание

Рассмотрим первый тестовый пример. Скобочную последовательность из этого примера можно раскрасить, например, как показано на двух рисунках ниже.

Две раскраски, показанные ниже, являются некорректными.

C. Pekora и батуты

дп жадные алгоритмы Перебор реализация Структуры данных *1700

Есть парк батутов с \(n\) батутами, расположенными в ряд. \(i\)-й из них имеет силу \(S_i\).

Pekora может прыгать по батутам в несколько проходов. Она начинает проход, прыгая на любой батут по своему выбору.

Если сейчас Pekora прыгает на батут \(i\), то батут подбросит ее в позицию \(i + S_i\), а \(S_i\) станет равно \(\max(S_i-1,1)\). Иначе говоря, \(S_i\) уменьшится на \(1\), кроме случая \(S_i=1\), когда \(S_i\) останется равно \(1\).

Если в позиции \(i + S_i\) нет батута, то этот проход завершен. В противном случае Pekora продолжит проход прыжком с батута в позиции \(i + S_i\) по принципу, описанному выше.

Pekora не может перестать прыгать во время прохода, пока не приземлится на позицию больше \(n\) (в которой нет батута). Бедная Pekora!

Pekora — непослушный кролик, и хочет разрушить парк батутов, уменьшив все \(S_i\) до \(1\). Какое минимальное количество проходов ей нужно, чтобы уменьшить все \(S_i\) до \(1\)?

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 5000\)) — количество батутов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(S_1, S_2, \dots, S_n\) (\(1 \le S_i \le 10^9\)), где \(S_i\) — это сила \(i\)-го батута.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество проходов, за которое Pekora может уменьшить все \(S_i\) до \(1\).

Примечание

Для первого набора входных данных, ниже приведена оптимальная последовательность проходов, которые Pekora может использовать. (Жирным выделены позиции батутов, куда прыгает Pekora в очередной проход).

  • \([1,4,\textbf{2},2,\textbf{2},2,\textbf{2}]\)
  • \([1,\textbf{4},1,2,1,\textbf{2},1]\)
  • \([1,\textbf{3},1,2,\textbf{1},\textbf{1},\textbf{1}]\)
  • \([1,\textbf{2},1,\textbf{2},1,\textbf{1},\textbf{1}]\)

Для второго набора входных данных оптимальная последовательность проходов приведена ниже.

  • \([\textbf{2},3]\)
  • \([1,\textbf{3}]\)
  • \([1,\textbf{2}]\)

Для третьего набора входных данных, все \(S_i\) уже равны \(1\).

D. Хранительница Бесконечного Зоопарка

битмаски дп жадные алгоритмы Конструктив математика *1800

В Сингапурском зоопарке появилась новая достопримечательность: Бесконечный Зоопарк.

Бесконечный Зоопарк может быть представлен графом с бесконечным числом вершин, обозначенных \(1,2,3,\ldots\). От вершины \(u\) до вершины \(u+v\) существует ориентированное ребро, если и только если \(u\&v=v\), где \(\&\) обозначает операцию побитового И. Других ребер в графе нет.

Хранительница Зоопарка получила \(q\) запросов. В \(i\)-м запросе она спросит вас, может ли она добраться от вершины \(u_i\) до вершины \(v_i\) по ориентированным ребрам.

Входные данные

Первая строка содержит целое число \(q\) (\(1 \leq q \leq 10^5\)) — количество запросов.

\(i\)-я из следующих \(q\) строк будет содержать два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i < 2^{30}\)) — запрос, сделанный Хранительницей Зоопарка.

Выходные данные

Для \(i\)-го из \(q\) запросов выведите «YES» в единственной строке, если Хранительница Зоопарка может добраться от вершины \(u_i\) до вершины \(v_i\). В противном случае выведите «NO».

Ответ можно вывести в любом регистре. Например, если ответ «YES», то вывод «Yes» или «yeS» также будет считаться правильным ответом.

Примечание

Ниже показан подграф на вершинах \(1,2,3,4,5,6\).

C. Максимальная ширина

Бинарный поиск дп жадные алгоритмы Структуры данных *1500

У вашего одноклассника, которого вы не очень любите за его занудство, но уважаете за его ум, были обнаружены две строки: строка \(s\) длины \(n\) и строка \(t\) длины \(m\).

Последовательность индексов \(p_1, p_2, \ldots, p_m\), где \(1 \leq p_1 < p_2 < \ldots < p_m \leq n\), называется хорошей, если \(s_{p_i} = t_i\) для всех \(i\) от \(1\) до \(m\). Шириной последовательности называется величина \(\max\limits_{1 \le i < m} \left(p_{i + 1} - p_i\right)\).

Помогите однокласснику найти хорошую последовательность индексов с максимальной шириной. Одноклассник обещал вам, что строки \(s\) и \(t\) таковы, что хотя бы одна хорошая последовательность точно существует.

Входные данные

Первая строка входных данных содержит два числа \(n\) и \(m\) (\(2 \leq m \leq n \leq 2 \cdot 10^5\)) — длины строк \(s\) и \(t\) соответственно.

Во второй строке входных данных задана строка \(s\), состоящая из \(n\) строчных букв латинского алфавита.

В третьей строке задана строка \(t\), состоящая из \(m\) строчных букв латинского алфавита.

Гарантируется, что существует хотя бы одна хорошая последовательность индексов.

Выходные данные

Выведите одно число — максимальную ширину хорошей последовательности.

Примечание

В первом примере существует две хороших последовательности с шириной \(3\): это \(\{1, 2, 5\}\) и \(\{1, 4, 5\}\).

Во втором примере хорошая последовательность максимальной ширины — это \(\{1, 5\}\).

В третьем примере есть лишь одна хорошая последовательность — это \(\{1, 2, 3, 4, 5\}\).

В четвёртом примере есть лишь одна хорошая последовательность — это \(\{1, 2\}\).

C. 1D Сокобан

Бинарный поиск дп жадные алгоритмы реализация *1900

Вы играете в игру, похожую на Сокобан, на бесконечной числовой прямой. Игра дискретна, поэтому вы рассматриваете только целочисленные позиции на прямой.

Вы начинаете в позиции \(0\). Есть \(n\) коробок, \(i\)-я коробка находится на позиции \(a_i\). Все позиции коробок различны. Также есть \(m\) специальных позиций, \(j\)-я позиция — это \(b_j\). Все специальные позиции также различны.

За один ход можно пройти на одну позицию влево или вправо. Если в направлении вашего движения стоит коробка, то вы толкаете коробку на следующую позицию в этом направлении. Если следующая позиция занята другой коробкой, то эта коробка также двигается на следующую позицию, и так далее. Нельзя ходить сквозь коробки. Нельзя тащить коробки на себя.

Разрешается совершить произвольное количество ходов (возможно, ноль). Ваша цель — поместить как можно больше коробок на специальные позиции. Обратите внимание, что некоторые коробки могут уже находиться на специальных позициях.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следует описание \(t\) наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество коробок и количество специальных позиций, соответственно.

Во второй строке каждого набора входных данных записаны \(n\) различных целых чисел в возрастающем порядке \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_1 < a_2 < \dots < a_n \le 10^9\); \(a_i \neq 0\)) — начальные позиции коробок.

В третьей строке каждого набора входных данных записаны \(m\) различных целых чисел в возрастающем порядке \(b_1, b_2, \dots, b_m\) (\(-10^9 \le b_1 < b_2 < \dots < b_m \le 10^9\); \(b_i \neq 0\)) — специальные позиции.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — максимальное количество коробок, которые можно поставить на специальные позиции.

Примечание

В первом наборе входных данных можно пойти на \(5\) направо: коробка на позиции \(1\) окажется на позиции \(6\), а коробка на позиции \(5\) — на позиции \(7\). Затем можно пойти на \(6\) налево и встать в позицию \(-1\), сдвинув коробку в \(-2\). В конце коробки стоят на позициях \([-2, 6, 7, 11, 15]\), соответственно. Среди них позиции \([-2, 6, 7, 15]\) специальные, поэтому ответ равен \(4\).

Во втором наборе входных данных можно дотолкать коробку из \(-1\) в \(-10^9\), а затем коробку из \(1\) в \(10^9\), и получить ответ \(2\).

Третий набор входных данных показывает, что не разрешается тащить коробки на себя, поэтому нельзя их притащить на специальные позиции.

В четвертом наборе входных данных все коробки уже находятся на специальных позициях, поэтому можно ничего не делать и все равно получить ответ \(3\).

В пятом наборе входных данных особенных позиций меньше, чем коробок. Можно пойти на \(8\) или на \(9\) направо, чтобы какая-нибудь коробка встала в \(10\).

F. Квадраты

графы Деревья дп Конструктив Структуры данных *3300

\(n\) квадратов нарисованы на полу слева направо. На \(i\)-м квадрате записаны три целых числа \(p_i,a_i,b_i\). Последовательность \(p_1,p_2,\dots,p_n\) образует перестановку.

Во время каждого раунда вы будете стартовать с самого левого квадрата \(1\) и прыгать вправо. Если вы сейчас на \(i\)-м квадрате, вы можете сделать одну из следующих двух операций:

  1. Перепрыгнуть на \(i+1\)-й квадрат и заплатить за это \(a_i\). Если \(i=n\), тогда вы можете закончить раунд, заплатив \(a_i\).
  2. Перепрыгнуть на \(j\)-й квадрат и заплатить за это \(b_i\), где \(j\) — это самый левый квадрат, который удовлетворяет условиям \(j > i, p_j > p_i\). Если таких \(j\) не существует, вы можете закончить раунд, заплатив \(b_i\).

В игре будет \(q\) раундов. Чтобы сделать ее сложнее, вы должны поддерживать множество квадратов \(S\) (изначально пустое). Вы обязаны оказаться на этих квадратах во время раунда (вы можете также побывать и в других квадратах). Множество квадратов \(S\) для \(i\)-го раунда получается добавлением или удалением одного квадрата из множества квадратов для \((i-1)\)-го раунда.

Для каждого раунда найдите минимальную цену, которую вы должны заплатить, чтобы его закончить.

Входные данные

В первой строке находятся два целых числа \(n\), \(q\) (\(1\le n,q\le 2 \cdot 10^5\)) — количество квадратов и количество раундов.

Во второй строке находятся \(n\) различных целых чисел \(p_1,p_2,\dots,p_n\) (\(1\le p_i\le n\)). Гарантируется, что последовательность \(p_1,p_2,\dots,p_n\) образует перестановку.

В третьей строке находятся \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^9\le a_i\le 10^9\)).

В четвертой строке находятся \(n\) целых чисел \(b_1,b_2,\dots,b_n\) (\(-10^9\le b_i\le 10^9\)).

Затем следуют \(q\) строк, \(i\)-я из них содержит единственное целое число \(x_i\) (\(1\le x_i\le n\)). Если \(x_i\) было в множестве \(S\) для \((i-1)\)-го раунда, то вы должны удалить его, иначе вы должны добавить его.

Выходные данные

Выведите \(q\) строк, каждая из них должна содержать единственное целое число — минимальную цену, которую вы должны заплатить, чтобы закончить соответствующий раунд.

Примечание

Давайте обозначим символом \(T\) конец раунда. Тогда мы можем нарисовать два графа, соответствующих первому и второму примерам.

В первом раунде первого примера множество квадратов, через которое вы должны пройти, это \(\{1\}\). Путь, который вы можете использовать, это \(1\to 3\to T\). Его стоимость равна \(6\).

Во втором раунде первого примера множество квадратов, через которое вы должны пройти, это \(\{1,2\}\). Путь, который вы можете использовать, это \(1\to 2\to 3\to T\). Его стоимость равна \(8\).

D. Гений

битмаски графы дп теория чисел *2500

Обратите внимание на нестандартное ограничение по памяти.

Есть \(n\) задач, пронумерованных целыми числами от \(1\) до \(n\). У \(i\)-й задачи есть сложность \(c_i = 2^i\), тэг \(tag_i\) и счёт \(s_i\).

После задачи с номером \(i\) можно решить задачу с номером \(j\) только в том случае, если \(\text{IQ} < |c_i - c_j|\) и \(tag_i \neq tag_j\). После этого \(\text{IQ}\) меняется и становится равным \(\text{IQ} = |c_i - c_j|\) и вы набираете \(|s_i - s_j|\) очков.

Первой можно решить любую задачу. Задачи можно решать в любом порядке, каждую сколько угодно раз.

Изначально \(\text{IQ} = 0\). Найдите максимальное количество очков, которое можно набрать.

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 100)\)  — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) \((1 \le n \le 5000)\)  — количество задач.

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(tag_1, tag_2, \ldots, tag_n\) \((1 \le tag_i \le n)\)  — тэги задач.

В третьей строке описания каждого набора входных данных находятся \(n\) целых чисел \(s_1, s_2, \ldots, s_n\) \((1 \le s_i \le 10^9)\)  — счёт задач.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно число  — максимальное количество очков, которое можно набрать.

Примечание

В первом наборе входных данных оптимальная последовательность решения задач такая:

  1. \(1 \rightarrow 2\), после этого суммарный счёт равен \(5\) и \(\text{IQ} = 2\)
  2. \(2 \rightarrow 3\), после этого суммарный счёт равен \(10\) и \(\text{IQ} = 4\)
  3. \(3 \rightarrow 1\), после этого суммарный счёт равен \(20\) и \(\text{IQ} = 6\)
  4. \(1 \rightarrow 4\), после этого суммарный счёт равен \(35\) и \(\text{IQ} = 14\)

Во втором наборе входных данных оптимальная последовательность решения задач такая:

  1. \(1 \rightarrow 2\), после этого суммарный счёт равен \(5\) и \(\text{IQ} = 2\)
  2. \(2 \rightarrow 3\), после этого суммарный счёт равен \(10\) и \(\text{IQ} = 4\)
  3. \(3 \rightarrow 4\), после этого суммарный счёт равен \(15\) и \(\text{IQ} = 8\)
  4. \(4 \rightarrow 1\), после этого суммарный счёт равен \(35\) и \(\text{IQ} = 14\)

В третьем наборе входных данных оптимальная последовательность решения задач такая:

  1. \(1 \rightarrow 3\), после этого суммарный счёт равен \(17\) и \(\text{IQ} = 6\)
  2. \(3 \rightarrow 4\), после этого суммарный счёт равен \(35\) и \(\text{IQ} = 8\)
  3. \(4 \rightarrow 2\), после этого суммарный счёт равен \(42\) и \(\text{IQ} = 12\)

E1. Бесквадратное разбиение (простая версия)

дп жадные алгоритмы математика Структуры данных теория чисел *1700

Это простая версия задачи. Единственное отличие  — в этой версии задачи \(k = 0\).

Дан массив \(a_1, a_2, \ldots, a_n\) из \(n\) положительных целых чисел. Необходимо разбить его на наименьшее количество непрерывных отрезков так, чтобы ни на каком отрезке не было двух чисел (на разных позициях), произведение которых является полным квадратом.

При этом до разбиения разрешается сделать не более \(k\) раз следующую операцию: выбрать любое число в массиве и заменить его значение на произвольное целое положительное число. Но в этой версии задачи \(k = 0\), поэтому это не важно.

Какое наименьшее количество непрерывных отрезков нужно использовать, если сделать изменения оптимально?

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 1000)\)  — количество наборов входных данных.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(k = 0\)).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^7\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число  — ответ на задачу.

Примечание

В первом наборе входных можно сделать такое разбиение:

  • \([18, 6]\)
  • \([2, 4]\)
  • \([1]\)

E2. Бесквадратное разбиение (сложная версия)

дп жадные алгоритмы математика Структуры данных теория чисел *2500

Это сложная версия задачи. Единственное отличие  — в этой версии задачи \(0 \leq k \leq 20\).

Дан массив \(a_1, a_2, \ldots, a_n\) из \(n\) положительных целых чисел. Необходимо разбить его на наименьшее количество непрерывных отрезков так, чтобы ни на каком отрезке не было двух чисел (на разных позициях), произведение которых является полным квадратом.

При этом до разбиения разрешается сделать не более \(k\) раз следующую операцию: выбрать любое число в массиве и заменить его значение на произвольное целое положительное число.

Какое наименьшее количество непрерывных отрезков нужно использовать, если сделать изменения оптимально?

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 1000)\)  — количество наборов входных данных.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \leq k \leq 20\)).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^7\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число  — ответ на задачу.

Примечание

В первом наборе входных данных можно сначала изменить массив следующим образом: \([\underline{3}, 6, 2, 4, \underline{5}]\) (изменённые числа подчёркнуты). После этого его не нужно разделять, поэтому ответ \(1\).

Во втором наборе входных данных можно сначала изменить массив следующим образом: \([6, 2, \underline{3}, 8, 9, \underline{5}, 3, 6, \underline{10}, \underline{11}, 7]\). После этого такое разбиение будет оптимальным:

  • \([6, 2, 3]\)
  • \([8, 9, 5, 3, 6, 10, 11, 7]\)

C. Отражения от плоскостей

дп Перебор Структуры данных *1600

Гауранг вырос в таинственной вселенной. Перед ним стоят \(n\) 2D плоскостей одна за другой. Он пускает частицу с периодом распада \(k\) в направлении плоскостей.

Частица может пройти через плоскость напрямую, однако, каждая плоскость создает идентичную копию этой частицы, направленную в противоположном направлении с периодом распада равным \(k-1\). Если период распада частицы равен \(1\), то она НЕ создаст копию.

Например, если есть две плоскости, и выпущена частица с периодом распада \(3\) (направлена вправо), то происходит следующий процесс: (здесь \(D(x)\) означает одну частицу с периодом распада \(x\))

  1. первая плоскость создает \(D(2)\) влево и пропускает \(D(3)\) дальше вправо;
  2. вторая плоскость создает \(D(2)\) влево и пропускает \(D(3)\) дальше вправо;
  3. первая плоскость пропускает \(D(2)\) дальше влево и создает \(D(1)\) вправо;
  4. вторая плоскость пропускает \(D(1)\) дальше вправо (\(D(1)\) не может создавать копии).

В конце мультимножество \(S\) всех частиц — это \(\{D(3), D(2), D(2), D(1)\}\). (Смотрите примеры для визуального отображения этого теста.)

Гауранг не справляется со сложностью этого процесса, когда количество плоскостей слишком велико. Помогите Гаурангу узнать размер мультимножества \(S\) по заданным \(n\) и \(k\).

Так как размер мультимножества может быть очень большим, выведите его по модулю \(10^9+7\).

Обратите внимание, что частицы могут перемещаться между плоскостями, не сталкиваясь друг с другом.

Входные данные

В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Затем следуют \(t\) строк, в каждой записаны два целых числа \(n\) и \(k\) (\(1 \le n, k \le 1000\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(1000\). Сумма \(k\) по всем наборам входных данных не превосходит \(1000\). Все наборы входных данных в одном тесте различны.

Выходные данные

Выведите \(t\) целых чисел. \(i\)-е число должно являться ответом на \(i\)-й набор входных данных.

Примечание

Здесь следует объяснение первого примера, состоящего из четырех наборов входных данных.

Набор входных данных 1: (\(n = 2\), \(k = 3\)) уже объяснен в условии задачи.

На картинке ниже изображена симуляция. Каждая цветная прямая показывает путь одной из частиц. Как можно видеть, всего есть четыре различных частицы в мультимножестве. Обратите внимание, что вертикальные промежутки между отраженными частицами введены только для визуальной ясности (как ранее описывалось, частицы не сталкиваются друг с другом)

Набор входных данных 2: (\(n = 2\), \(k = 2\)) выглядит так:

  1. первая плоскость создает \(D(1)\) влево и пропускает \(D(2)\) дальше вправо;
  2. вторая плоскость создает \(D(1)\) влево и пропускает \(D(2)\) дальше вправо;
  3. первая плоскость пропускает \(D(1)\) дальше влево (\(D(1)\) не может создавать копии).

Итоговый размер мультимножества \(\{D(1), D(1), D(2)\}\) равен трем.

Набор входных данных 3: (\(n = 3\), \(k = 1\)) — здесь есть три плоскости, но период распада всего один. Поэтому новые копии не создаются, когда одна частица пролетает через плоскости. Поэтому ответ один.

Набор входных данных 4: (\(n = 1\), \(k = 3\)) — здесь только одна плоскость. Частица создает новую копию влево. Мультимножество \(\{D(2), D(3)\}\) имеет размер два.

D. Бананы в микроволновке

графы дп поиск в глубину и подобное реализация *2200

У вас есть сломанная микроволновка, в которую вы хотите положить несколько бананов. У вас есть \(n\) моментов времени, пока микроволновка не сломается окончательно. В каждый момент времени она показывает новую операцию.

Пусть \(k\) будет равно текущему количеству бананов в микроволновке. Изначально \(k = 0\). В \(i\)-й операции на вход подаются три параметра \(t_i\), \(x_i\), \(y_i\). В зависимости от значения \(t_i\) необходимо сделать одно из следующий действий:

Тип 1: (\(t_i=1\), \(x_i\), \(y_i\)) — выберите \(a_i\) такое, что \(0 \le a_i \le y_i\), и произведите следующую замену \(a_i\) раз: \(k:=\lceil (k + x_i) \rceil\).

Тип 2: (\(t_i=2\), \(x_i\), \(y_i\)) — выберите \(a_i\) такое, что \(0 \le a_i \le y_i\), и произведите следующую замену \(a_i\) раз: \(k:=\lceil (k \cdot x_i) \rceil\).

Обратите внимание, что \(x_i\) может быть дробным значением. Смотрите формат входных данных для пояснения. Также \(\lceil x \rceil\) — это наименьшее целое число \(\ge x\).

В \(i\)-й момент времени необходимо произвести \(i\)-ю операцию ровно один раз.

Для каждого \(j\) такого, что \(1 \le j \le m\), выведите самый ранний момент времени такой, что вы можете получить ровно \(j\) бананов. Если нельзя получить ровно \(j\) бананов, то выведите \(-1\).

Входные данные

В первой строке записаны два целых числа \(n\) \((1 \le n \le 200)\) и \(m\) \((2 \le m \le 10^5)\).

Затем следуют \(n\) строк, где \(i\)-я строка описывает операцию в \(i\)-й момент времени. Каждая строка содержит три целых числа \(t_i\), \(x'_i\) и \(y_i\) (\(1 \le t_i \le 2\), \(1\le y_i\le m\)).

Обратите внимание, что задается \(x'_i\), которое равно \(10^5 \cdot x_i\). Чтобы получить \(x_i\), используйте формулу \(x_i= \dfrac{x'_i} {10^5}\).

Для операций типа 1 \(1 \le x'_i \le 10^5 \cdot m\), а для операций типа 2 \(10^5 < x'_i \le 10^5 \cdot m\).

Выходные данные

Выведите \(m\) целых чисел, где \(i\)-е число равно самому раннему моменту времени, в который можно получить ровно \(i\) бананов (или \(-1\), если это невозможно).

Примечание

В первом примере мы хотим показать, как получить \(16\) бананов за три момента времени. Изначально \(k=0\).

  • В момент времени 1 мы выбираем \(a_1=2\), поэтому мы применяем обновление типа 1 — \(k := \lceil(k+3)\rceil\) — два раза. Поэтому \(k\) теперь 6.
  • В момент времени 2 мы выбираем \(a_2=0\), поэтому \(k\) не изменяется.
  • В момент времени 3 мы выбираем \(a_3=1\), поэтому мы применяем обновление типа 1 \(k:= \lceil(k+10)\rceil\) один раз. Поэтому \(k\) теперь 16.

Можно показать, что \(k=16\) нельзя получить быстрее, чем за три момента времени, используя данные операции.

Во втором примере мы хотим показать, как получить \(17\) бананов за два момента времени. Изначально \(k=0\).

  • В момент времени 1 мы выбираем \(a_1=1\), поэтому мы применяем обновление типа 1 — \(k := \lceil(k+3.99999)\rceil\) — один раз. Поэтому \(k\) теперь 4.
  • В момент времени 2 мы выбираем \(a_2=1\), поэтому мы применяем обновление типа 2 — \(k := \lceil(k\cdot 4.12345)\rceil\) — один раз. Поэтому \(k\) теперь 17.

Можно показать, что \(k=17\) нельзя получить быстрее, чем за два момента времени, используя данные операции.

F. Рождественская игра

битмаски Деревья дп игры математика поиск в глубину и подобное Структуры данных *2500

Алиса и Боб собираются отмечать Рождество, играя в игру с деревом подарков. Дерево состоит из \(n\) вершин (пронумерованных от \(1\) до \(n\), вершина \(r\) является корнем). На \(i\)-й вершине висят \(a_i\) подарков.

Перед началом игры выбирается некоторое целое число \(k\). Затем игра проходит следующим образом:

  • Алиса начинает игру, затем ходы совершаются обоими игроками по очереди;
  • на каждом ходу текущий игрок выбирает некоторую вершину (например, \(i\)), которая находится на глубине хотя бы \(k\). Затем игрок снимает некоторое положительное целое число подарков, которые висят на этой вершине, — назовем его \(m\) \((1 \le m \le a_i)\);
  • затем игрок вешает эти \(m\) подарков на \(k\)-го предка (назовем его \(j\)) \(i\)-й вершины (\(k\)-м предком вершины \(i\) назовем такую вершину \(j\), что \(i\) — потомок \(j\), а глубина \(j\) ровно на \(k\) меньше глубины \(i\)). Теперь количество подарков на \(i\)-й вершине \((a_i)\) уменьшилось на \(m\), а \(a_j\), соответственно, увеличилось на \(m\);
  • Алиса и Боб играют оптимально. Тот, кто не может совершить ход, проигрывает.

Для каждого возможного корня дерева сообщите, кто выиграет игру — Алиса или Боб.

Глубина вершины \(i\) в дереве с корнем \(r\) определяется, как количество ребер на простом пути из вершины \(r\) до вершины \(i\). Глубина корня \(r\) равна нулю.

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) \((3 \le n \le 10^5, 1 \le k \le 20)\).

В каждой из следующих \(n-1\) строк записаны два целых числа \(x\) и \(y\) \((1 \le x, y \le n, x \neq y)\), описывающие неориентированное ребро между двумя вершинами \(x\) и \(y\). Эти ребра образуют дерево из \(n\) вершин.

В следующей строке записаны \(n\) целых чисел, задающих массив \(a\) \((0 \le a_i \le 10^9)\).

Выходные данные

Выведите \(n\) целых чисел, где \(i\)-е число равно \(1\), если Алиса выиграет игру, если дерево подвешено за вершину \(i\), и \(0\) в противном случае.

Примечание

Посчитаем ответ для примера с корнем в 1 и в 2.

Корень 1

Алиса всегда выигрывает в данном случае. Возможная игра между Алисой и Бобом выглядит так:

  • Алиса перемещает один подарок из вершины 4 в вершину 3.
  • Боб перемещает четыре подарка из вершины 5 в вершину 2.
  • Алиса перемещает четыре подарка из вершины 2 в вершину 1.
  • Боб перемещает три подарка из вершины 2 в вершину 1.
  • Алиса перемещает три подарка из вершины 3 в вершину 1.
  • Боб перемещает три подарка из вершины 4 в вершину 3.
  • Алиса перемещает три подарка из вершины 3 в вершину 1.

Боб не может сделать ход, а потому проигрывает.

Корень 2

Боб всегда выигрывает в данном случае. Пример игры:

  • Алиса перемещает четыре подарка из вершины 4 в вершину 3.
  • Боб перемещает четыре подарка из вершины 5 в вершину 2.
  • Алиса перемещает шесть подарков из вершины 3 в вершину 1.
  • Боб перемещает шесть подарков из вершины 1 в вершину 2.

Алиса не может сделать ход, а потому проигрывает.

B. Двоичные удаления

дп жадные алгоритмы Перебор реализация *1000

Задана строка \(s\), состоящая только из символов '0' или '1'. Пусть \(|s|\) будет длиной строки \(s\).

Требуется выбрать некоторое целое число \(k\) (\(k > 0\)) и последовательность \(a\) длины \(k\) такую что:

  • \(1 \le a_1 < a_2 < \dots < a_k \le |s|\);
  • \(a_{i-1} + 1 < a_i\) для всех \(i\) от \(2\) до \(k\).

Символы на позициях \(a_1, a_2, \dots, a_k\) удаляются, оставшиеся символы склеиваются без изменения порядка. То есть, другими словами, позиции в выбранной последовательности \(a\) не должны быть соседними.

Пусть полученная строка будет \(s'\). \(s'\) называется отсортированной, если для всех \(i\) от \(2\) до \(|s'|\) \(s'_{i-1} \le s'_i\).

Существует ли такая последовательность \(a\), что \(s'\) отсортирована?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следует описание \(t\) наборов входных данных.

В единственной строке каждого набора входных данных содержится строка \(s\) (\(2 \le |s| \le 100\)). Каждый символ равен либо '0', либо '1'.

Выходные данные

На каждый набор входных данных выведите «YES», если существует такая последовательность \(a\), что при удалении символов на позициях \(a_1, a_2, \dots, a_k\) и склеивании оставшихся частей без изменения порядка получится отсортированная строка.

В противном случае выведите «NO».

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных можно выбрать последовательность \(a=[1,3,6,9]\). При удалении подчеркнутых букв из «10101011011» получится строка «0011111», которая отсортирована.

Во втором и в третьем наборах входных данных последовательность уже отсортирована.

В четвертом наборе входных данных можно выбрать последовательность \(a=[3]\). \(s'=\) «11», которая отсортирована.

В пятом наборе входных данных нет способа выбрать последовательность \(a\) так, чтобы \(s'\) была отсортирована.

D. Количество пар

дп математика теория чисел *2100

Вам даны три положительных (больше нуля) целых числа \(c\), \(d\) и \(x\).

Вы должны найти количество пар положительных целых чисел \((a, b)\) таких, что выполняется равенство \(c \cdot lcm(a, b) - d \cdot gcd(a, b) = x\). Где \(lcm(a, b)\) — наименьшее общее кратное \(a\) и \(b\), а \(gcd(a, b)\) — наибольший общий делитель \(a\) и \(b\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор состоит из одной строки, содержащей три целых числа \(c\), \(d\) и \(x\) (\(1 \le c, d, x \le 10^7\)).

Выходные данные

Для каждого тестового случая выведите одно целое число — количество пар (\(a, b\)), таких, что выполняется вышеописанное равенство.

Примечание

В первом примере корректные пары: (\(1, 4\)), (\(4,1\)), (\(3, 6\)), (\(6, 3\)).

Во втором примере корректные пары: (\(1, 2\)), (\(2, 1\)), (\(3, 3\)).

E. Хаотичное слияние

дп Комбинаторика математика Строки *2400

Заданы две строки \(x\) и \(y\), обе состоят из строчных латинских букв. Пусть \(|s|\) будет длиной строки \(s\).

Назовем последовательность \(a\) последовательностью слияния, если она состоит из ровно \(|x|\) нулей и ровно \(|y|\) единиц в некотором порядке.

Слияние \(z\) получается из последовательности \(a\) по следующим правилам:

  • если \(a_i=0\), то удалить букву из начала \(x\) и приписать ее в конец \(z\);
  • если \(a_i=1\), то удалить букву из начала \(y\) и приписать ее в конец \(z\).

Две последовательности слияния \(a\) и \(b\) считаются различными, если существует такая позиция \(i\), что \(a_i \neq b_i\).

Назовем строку \(z\) хаотичной, если для всех \(i\) от \(2\) до \(|z|\) \(z_{i-1} \neq z_i\).

Пусть \(s[l,r]\) для некоторых \(1 \le l \le r \le |s|\) будет подстрокой последовательных букв \(s\), начинающейся с позиции \(l\) и заканчивающейся в позиции \(r\) включительно.

Пусть \(f(l_1, r_1, l_2, r_2)\) будет количеством различных последовательностей слияния \(x[l_1,r_1]\) и \(y[l_2,r_2]\), которые производят хаотичные слияния. Обратите внимание, что рассматриваются только непустые подстроки \(x\) и \(y\).

Посчитайте \(\sum \limits_{1 \le l_1 \le r_1 \le |x| \\ 1 \le l_2 \le r_2 \le |y|} f(l_1, r_1, l_2, r_2)\). Выведите ответ по модулю \(998\,244\,353\).

Входные данные

В первой строке записана строка \(x\) (\(1 \le |x| \le 1000\)).

Во второй строке записана строка \(y\) (\(1 \le |y| \le 1000\)).

Обе строки состоят только из строчных латинских букв.

Выходные данные

Выведите одно число — сумму \(f(l_1, r_1, l_2, r_2)\) по \(1 \le l_1 \le r_1 \le |x|\) и \(1 \le l_2 \le r_2 \le |y|\) по модулю \(998\,244\,353\).

Примечание

В первом примере:

  • \(6\) пар подстрок «a» and «b», каждая с корректными последовательностями слияния «01» and «10»;
  • \(3\) пары подстрок «a» and «bb», каждая с корректной последовательностью слияния «101»;
  • \(4\) пары подстрок «aa» and «b», каждая с корректной последовательностью слияния «010»;
  • \(2\) пары подстрок «aa» and «bb», каждая с корректными последовательностями слияния «0101» and «1010»;
  • \(2\) пары подстрок «aaa» and «b», каждая без корректных последовательностей слияния;
  • \(1\) пара подстрок «aaa» and «bb» с корректной последовательностью слияния «01010».

Поэтому ответ равен \(6 \cdot 2 + 3 \cdot 1 + 4 \cdot 1 + 2 \cdot 2 + 2 \cdot 0 + 1 \cdot 1 = 24\).

F. Разрезы диаметров

Деревья дп Комбинаторика поиск в глубину и подобное *2400

Задано целое число \(k\) и неориентированное дерево, состоящее из \(n\) вершин.

Длина простого пути (пути, в котором каждая вершина встречается не более одного раза) между некоторой парой вершин равна количеству ребер в данном пути. Диаметр дерева равен максимальной длине пути между всеми парами вершин в дереве.

Вы планируете удалить множество ребер из дерева. Когда ребра удаляются, дерево распадается на несколько меньших деревьев. Множество ребер считается корректным, если у всех полученных деревьев диаметр меньше либо равен \(k\).

Два множества ребер считаются различными, если существует такое ребро, что оно встречается только в одном из множеств.

Посчитайте количество корректных множеств ребер по модулю \(998\,244\,353\).

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(2 \le n \le 5000\), \(0 \le k \le n - 1\)) — количество вершин в дереве и максимальный разрешенный диаметр, соответственно.

В каждой из следующих \(n-1\) строк содержится описание ребра: два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\), \(v \neq u\)).

Заданные ребра образуют дерево.

Выходные данные

Выведите одно целое число — количество корректных множеств ребер по модулю \(998\,244\,353\).

Примечание

В первом примере диаметр заданного дерева уже меньше либо равен \(k\). Поэтому можно выбрать любое множество ребер, и в полученных деревьях диаметры будут меньше либо равны \(k\). Всего есть \(2^3\) множеств, включая пустое.

Во втором примере нужно удалить единственное ребро. Иначе диаметр будет \(1\), что больше \(0\).

Деревья для третьего и четвертого примеров:

E. Треугольники

дп Комбинаторика *2600

Летом Петя отдыхал у бабушки в селе, когда неподалеку на овец напал волк. Теперь Петя боится ходить через лес, боится обходить лес, боится даже выходить из дому. Объясняет свой страх Петя отнюдь не боязнью волка, а непонятным, на его взгляд, строением леса, который имеет n уровней, где n — четное число.

В местном муниципалитете Вам предоставили карту местности, на которой бабушкин домик отмечен точкой H, а участки леса выделены заливкой серого цвета (см. рисунок для понимания того, как устроена местность).

Но все же, после долгого сидения дома, Петя решил поддаться на уговоры бабушки и пойти подышать свежим воздухом. Как человек предусмотрительный, Петя заранее планирует прогулку, и ему необходимо выбрать маршрут. Маршрут, который Петя считает приемлемым для себя, обладает следующими свойствами:

  • маршрут замкнут, он начинается и заканчивается в домике у бабушки;
  • маршрут проходит только по дорожкам леса (отрезки, выделенные черным на рисунке);
  • маршрут имеет ненулевую длину (для того чтобы подышать свежим воздухом, Пете все же нужно выйти из дому);
  • маршрут не может сам себя пересекать;
  • участок земли, очерченный таким замкнутым маршрутом, не должен содержать внутри ни одного участка леса.

Необходимо посчитать количество таких приемлемых ориентированных маршрутов по модулю 1000000009.

На рисунке представлен пример карты местности для n = 12. Так как карта имеет регулярную структуру, для других значений n ее можно построить самостоятельно по аналогии.

Входные данные

Входные данные содержат единственное целое четное число n (2 ≤ n ≤ 106).

Выходные данные

Выведите единственное число — количество путей Пети по модулю 1000000009.

D. Миссия непроходима

дп Строки *2600

На прилавках магазинов появилась долгожданная игра The Colder Scrools V: XXXvodsk. Игра оказалась дьявольски сложна, и большинство студентов не могут пройти последнюю миссию («Мы не ходим в XXXводск...»), в связи с чем зимняя сессия оказалась под угрозой. Ректор уже подумывал о переносе сессии на апрель (ему и самому хотелось пройти эту миссию), когда на пороге его кабинета возник незнакомец. «Здравствуйте. Меня зовут Петрович, и я решаю любые проблемы», — сказал он.

Теперь они уже сидят вместе и все равно не могут пройти эту миссию. Ведь чтобы одолеть финального босса, требуется показать все свое мастерство в искусстве управления буквами. Нужно быть настоящими волшебниками, а уж что говорить, когда волшебники начинают соревноваться...

Но, давайте более формально: дана строка и набор целых чисел ai. Разрешается выбрать любую подстроку, являющуюся палиндромом, и удалить ее. При этом мы получаем количество очков равное ak, где k — длина удаляемого палиндрома. Для некоторых k ak = -1, что означает, что удалять подстроки-палиндромы такой длины запрещено. После удаления подстроки оставшаяся часть «сдвигается», то есть строка ни в какой момент времени не содержит пропусков. Этот процесс повторяется, пока строка содержит хотя бы одну подстроку-палиндром, которую можно удалить. Все полученные очки суммируются.

Определите, какое максимальное количество очков можно получить.

«Эх», — сказал, вставая из-за стола, Петрович, — «когда-то я тоже любил удалять палиндромы, как и вы, но потом мне прострелили колено».

Входные данные

Первая строка содержит целое число l (1 ≤ l ≤ 150) — длину строки .

Вторая строка содержит ровно l целых чисел ak ( - 1 ≤ ak ≤ 105) — бонусы за удаления.

Третья строка содержит ровно l строчных букв латинского алфавита — исходную строку, из которой нужно удалять палиндромы. Никаких других символов (кроме символа перевода строки в конце) данная строка не содержит.

Выходные данные

Выведите одно целое число — максимальное количество очков, которое можно получить, играя на данной строке.

Примечание

В первом примере у нас нет возможности удалить ни одной подстроки, поэтому лучший результат 0. Во втором примере нам разрешено удалять палиндромы длины только 1, таким образом, удалив всю строку, мы получим 7 очков. В третьем примере следующая оптимальная стратегия: сначала удаляем символ c, затем строку aa, затем bb, и последнюю aa. При этом получаем 1 + 3 * 5 = 16 очков.

F. Прыжки по шкафам

дп *3500

В доме Кроша стояло \(n\) шкафов в линию, \(i\)-й шкаф имел высоту \(h_i\). Недавно Крош переехал, но не смог перевезти с собой те самые шкафы. Ему хочется купить \(n\) новых шкафов, чтобы те были как можно больше похожи на старые.

Крош не помнит конкретные высоты шкафов, но для каждой тройки подряд идущих шкафов он знает разность высот между самым высоким и самым низким из тройки. Иначе говоря, если последовательность высот шкафов была \(h_1, h_2, \ldots, h_n\), то Крош помнит величины \(w_i = \max(h_{i}, h_{i + 1}, h_{i + 2}) - \min(h_{i}, h_{i + 1}, h_{i + 2})\) для \(1 \leq i \leq n - 2\).

В новый дом Крош хочет купить \(n\) шкафов, так чтобы всё было как прежде: все значения \(w_i\) должны сохраниться. Помогите Крошу понять, какие шкафы ему следует купить и в какой последовательности поставить, или определите, что он что-то перепутал, и такой последовательности шкафов не может быть.

Входные данные

В первой строке даны два целых числа \(n\) и \(C\) (\(3 \leq n \leq 10^6\), \(0 \leq C \leq 10^{12}\)) — количество шкафов и ограничение на \(w_i\).

Вторая строка содержит \(n - 2\) целых числа \(w_1, w_2, \ldots, w_{n - 2}\) (\(0 \leq w_i \leq C\)) — высоты шкафов слева направо.

Выходные данные

Если не существует возможности купить \(n\) шкафов, удовлетворяющих условиям, в единственной строке выведите «No».

Иначе в первой строке выведите «Yes», после чего во второй строке выведите \(n\) целых чисел \(h'_1, h'_2, \ldots, h'_n\) (\(0 \le h'_i \le 10^{18}\)) — высоты шкафов для покупки.

Можно показать, что если существует какое-то решение, то оно существует и при заданных ограничениях на высоты.

Если корректных решений несколько, выведите любое из них.

Примечание

Рассмотрим первый пример:

  • \(w_1 = \max(4, 8, 8) - \min(4, 8, 8) = 8 - 4 = 4\)
  • \(w_2 = \max(8, 8, 16) - \min(8, 8, 16) = 16 - 8 = 8\)
  • \(w_3 = \max(8, 16, 20) - \min(8, 16, 20) = 20 - 8 = 12\)
  • \(w_4 = \max(16, 20, 4) - \min(16, 20, 4) = 20 - 4 = 16\)
  • \(w_5 = \max(20, 4, 0) - \min(20, 4, 0) = 20 - 0 = 20\)

Также корректным был бы, например, ответ с высотами: \(0, 1, 4, 9, 16, 25, 36\)

B. Торт Наполеон

дп реализация сортировки *900

На этой неделе Аркадий хотел последовать традициям, испечь стопку блинов и придумать про это задачу. Однако он вспомнил, что чтобы придумать задачу про стопки блинов, нужно работать в одной известной IT-компании, поэтому вместо этого Аркадий решил испечь торт «Наполеон».

Чтобы испечь торт «Наполеон», нужно сначала выпечь \(n\) сухих коржей (слоев), а затем сложить их друг на друга, пропитывая кремом. Аркадий начал с пустого блюда, и повторил следующие шаги \(n\) раз:

  • положил новый сухой слой на верх стопки;
  • после того, как он положил \(i\)-й слой, он добавил на верх стопки \(a_i\) ложек крема.

Когда Аркадий добавляет \(x\) ложек крема на верх стопки, \(x\) верхних слоев торта пропитываются кремом. Если с торте в этот момент меньше \(x\) слоев, то пропитываются все эти слои, а оставшийся крем пропадает. Если \(x = 0\), то не пропитывается ни один слой.

Рисунок иллюстрирует первый набор входных данных из примера.

Помогите Аркадию определить, какие слои окажутся пропитаны кремом, когда он закончит собирать торт, а какие нет.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 20\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество слоев в торте.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n\)) — объем крема, добавленного после добавления каждого слоя.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку с \(n\) целыми числами. \(i\)-е из этих чисел должно быть равно \(1\), если \(i\)-й слой снизу окажется пропитанным, и \(0\) иначе.

C. Задача коммивояжёра

Бинарный поиск дп жадные алгоритмы кратчайшие пути сортировки Структуры данных *2200

Есть \(n\) городов, пронумерованных от \(1\) до \(n\), красота города \(i\) равна \(a_i\).

Коммивояжёр хочет начать с города \(1\), посетить каждый город ровно один раз и вернуться в город \(1\).

Для всех \(i\ne j\), перелет из города \(i\) в город \(j\) стоит \(\max(c_i,a_j-a_i)\) долларов, где \(c_i\) — это нижний порог цены, наложенный на перелет городом \(i\). Обратите внимание, что здесь не берется абсолютное значение. Найдите минимальную общую стоимость поездки для коммивояжёра.

Входные данные

В первой строке содержится одно целое \(n\) (\(2\le n\le 10^5\)) — количество городов.

В \(i\)-й из следующих \(n\) строк содержится по два целых числа \(a_i\), \(c_i\) (\(0\le a_i,c_i\le 10^9\)) — красота и нижний порог цены города \(i\).

Выходные данные

Выведите единственное целое число — минимальную суммарную стоимость.

Примечание

В первом примере мы можем путешествовать в порядке \(1\to 3\to 2\to 1\).

  • Рейс \(1\to 3\) стоит \(\max(c_1,a_3-a_1)=\max(9,4-1)=9\).
  • Рейс \(3\to 2\) стоит \(\max(c_3, a_2-a_3)=\max(1,2-4)=1\).
  • Рейс \(2\to 1\) стоит \(\max(c_2,a_1-a_2)=\max(1,1-2)=1\).

Общая стоимость составляет \(11\), и мы не можем обойтись меньшим числом долларов.

E. 2-раскраска

дп Комбинаторика математика *3100

Дана сетка с \(n\) строками и \(m\) столбцами. Каждая ячейка сетки должна быть окрашена в синий или желтый цвет.

Раскраска сетки называется глупой, если в каждой строке есть ровно один отрезок синих ячеек, а в каждом столбце — ровно один отрезок желтых ячеек.

Другими словами, каждая строка должна иметь хотя бы одну синюю ячейку, и все синие ячейки в строке должны быть последовательными. Точно так же каждый столбец должен иметь хотя бы одну желтую ячейку, а все желтые ячейки в столбце должны быть последовательными.

Пример глупой раскраски.
Примеры умных раскрасок. В первой раскраске отсутствует синяя ячейка во втором ряду, а во второй раскраске есть два желтых отрезка во втором столбце.

Сколько всего существует глупых раскрасок сетки? Две раскраски считаются различными, если есть какая-то ячейка, которая раскрашена в них в разные цвета.

Входные данные

Единственная строка содержит два целых числа \(n\), \(m\) (\(1\le n, m\le 2021\)).

Выходные данные

Выведите единственное целое число — количество глупых раскрасок по модулю \(998244353\).

Примечание

Для первого примера единственные две глупые раскраски \(2\times 2\) изображены ниже.

G. Максимизируй оставшуюся строку

дп жадные алгоритмы Перебор Строки Структуры данных *2000

Вам задана строка \(s\), состоящая из строчных букв латинского алфавита. Пока в строке \(s\) есть хотя бы один символ, повторяющийся хотя бы дважды, вы выполняете следующую операцию:

  • вы выбираете индекс \(i\) (\(1 \le i \le |s|\)), такой что символ на позиции \(i\) встречается хотя бы два раза в строке \(s\), и удаляете символ на позиции \(i\), то есть заменяете \(s\) на \(s_1 s_2 \ldots s_{i-1} s_{i+1} s_{i+2} \ldots s_n\).

Например, если \(s=\)«codeforces», то вы можете применить следующую последовательность операций:

  • \(i=6 \Rightarrow s=\)«codefrces»;
  • \(i=1 \Rightarrow s=\)«odefrces»;
  • \(i=7 \Rightarrow s=\)«odefrcs»;

По заданной строке \(s\) найдите лексикографически максимальную строку, которая может быть получена после применения некоторой последовательности операций, оставляющей в строке только уникальные символы.

Строка \(a\) длины \(n\) лексикографически меньше строки \(b\) длины \(m\), если:

  • существует индекс \(i\) (\(1 \le i \le \min(n, m)\)), такой что первые \(i-1\) символов у строк \(a\) и \(b\) совпадают, а \(i\)-й символ строки \(a\) меньше, чем \(i\)-й символ строки \(b\);
  • или первые \(\min(n, m)\) символов у строк \(a\) и \(b\) совпадают и \(n < m\).

Например строка \(a=\)«aezakmi» лексикографически меньше строки \(b=\)«aezus».

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следую \(t\) наборов входных данных.

Каждый набор входных данных характеризуется строкой \(s\), состоящей из строчных букв латинского алфавита (\(1 \le |s| \le 2 \cdot 10^5\)).

Гарантируется, что сумма длин строк во всех наборах входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически максимальную строку, которая может быть получена после применения некоторой последовательности операций, оставляющей в строке только уникальные символы.

C. Спортивный фестиваль

дп жадные алгоритмы *1800

Студенческий совет готовится к эстафете на спортивном фестивале.

Совет состоит из \(n\) членов. Они будут бегать один за другим в забеге, скорость члена \(i\) равна \(s_i\). Расхождение \(d_i\) \(i\)-го этапа — разница между максимальной и минимальной скоростью бега среди первых \(i\) членов, которые участвовали в забеге. Формально, если \(a_i\) обозначает скорость \(i\)-го участника, участвовавшего в забеге, то \(d_i = \max(a_1, a_2, \dots, a_i) - \min(a_1, a_2, \dots, a_i)\).

Вы хотите минимизировать сумму расхождений \(d_1 + d_2 + \dots + d_n\). Для этого можно изменить порядок, в котором будут бежать участники. Какова минимально возможная сумма?

Входные данные

В первой строке содержится единственное целое число \(n\) (\(1 \le n \le 2000\))  — количество членов студенческого совета.

Вторая строка содержит \(n\) целых чисел \(s_1, s_2, \dots, s_n\) (\(1 \le s_i \le 10^9\))  — скорости членов совета.

Выходные данные

Выведите единственное целое число  — минимально возможное значение \(d_1 + d_2 + \dots + d_n\) после выбора порядка, в котором будут бежать члены совета.

Примечание

В первом примере, мы можем выбрать, чтобы третий член бежал первым, затем первый, и, наконец, второй. Таким образом, \(a_1 = 2\), \(a_2 = 3\), а \(a_3 = 1\). Тогда получаем:

  • \(d_1 = \max(2) - \min(2) = 2 - 2 = 0\).
  • \(d_2 = \max(2, 3) - \min(2, 3) = 3 - 2 = 1\).
  • \(d_3 = \max(2, 3, 1) - \min(2, 3, 1) = 3 - 1 = 2\).

Полученная сумма равна \(d_1 + d_2 + d_3 = 0 + 1 + 2 = 3\). Можно показать, что меньшего значения добиться невозможно.

Во втором примере единственная возможная перестановка дает \(d_1 = 0\), поэтому минимально возможный результат равен \(0\).

E. Раскраски и домино

дп жадные алгоритмы Комбинаторика математика *2100

У вас есть большая прямоугольная доска, разделенная на \(n \times m\) клетка (у доски \(n\) строк и \(m\) столбцов). Каждая клетка — либо белая, либо черная.

Вы красите каждую белую клетку либо в красный цвет, либо в синий. Очевидно, количество различных вариантов раскраски доски равно \(2^w\), где \(w\) — количество белых клеток.

После перекрашивания всех белых клеток вы начинаете класть на доску доминошки по следующим правилам:

  • каждая доминошка накрывает две соседние клетки;
  • каждая клетка накрыта не более чем одной доминошкой;
  • если доминошка расположена горизонтально (она накрывает две соседние клетки в строке), обе накрытые ею клетки должны быть красными;
  • если доминошка расположена вертикально (она накрывает две соседние клетки в столбце), обе накрытые ею клетки должны быть синими.

Пусть ценность раскраски доски — максимальное количество доминошек, которое можно расположить. Посчитайте сумму ценностей по всем \(2^w\) способам раскрасить доску. Так как сумма может быть очень большой, выведите ее по модулю \(998\,244\,353\).

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\); \(nm \le 3 \cdot 10^5\)) — количество строк и столбцов, соответственно.

Затем следуют \(n\) строк, в каждой из которых задана последовательность из \(m\) символов. Символ под номером \(j\) в \(i\)-й последовательности — *, если \(j\)-я клетка \(i\)-й строки черная; иначе этот символ — o.

Выходные данные

Выведите одно целое число — сумму ценностей по всем \(2^w\) способам раскрасить доску, взятую по модулю \(998\,244\,353\).

F. Чайнворд

дп матрицы Перебор Строки строковые суфф. структуры Структуры данных *2700

Чайнворд — это особый тип кроссворда. Как и в большинстве кроссвордов, в нем есть клетки, в которые надо вписать буквы, и некоторые подсказки, которые указывают на то, какие буквы должны быть.

В чайнворде клетки для букв расположены в одну строку. В этой задаче мы будем рассматривать чайнворды длины \(m\).

Подсказка к чайнворду — это последовательность отрезков такая, что отрезки не пересекаются между собой и покрывают все \(m\) клеток. Каждый отрезок содержит описание слова в соответствующих клетках.

Особенность в том, что подсказки на самом деле две: одна последовательность находится в строке над клетками для букв, а другая — под ней. Когда эти последовательности разные, они помогают разрешить неоднозначность в ответах.

Дан словарь из \(n\) слов, каждое слово состоит из строчных латинских букв. Все слова попарно различны.

Экземпляр чайнворда — это следующая тройка:

  • строка из \(m\) строчных латинских букв;
  • первая подсказка: последовательность отрезков такая, что буквы, соответствующие каждому отрезку, составляют некоторое слово из словаря;
  • вторая подсказка: еще одна последовательность отрезков такая, что буквы, соответствующие каждому отрезку, составляют некоторое слово из словаря.

Обратите внимание, что последовательности отрезков не обязаны различаться.

Два экземпляра чайнвордов считаются различными, если различаются их строки, первые подсказки или вторые подсказки.

Посчитайте количество различных экземпляров чайнвордов. Так как их число может быть достаточно велико, выведите его остаток от деления на \(998\,244\,353\).

Входные данные

В первой строке записаны два целых числа \(n\) and \(m\) (\(1 \le n \le 8\), \(1 \le m \le 10^9\)) — количество слов в словаре и количество клеток с буквами.

В каждой из следующих \(n\) строк записано одно слово — непустая строка из не более \(5\) строчных латинских букв. Все слова попарно различные.

Выходные данные

Выведите одно целое число — количество различных экземпляров чайнвордов длины \(m\) для данного словаря по модулю \(998\,244\,353\).

Примечание

Здесь приведены все примеры различных чайнвордов для первого примера:

Красные полоски над буквами означают отрезки первой подсказки, синие полоски под буквами означают отрезки второй подсказки.

Во втором примере возможные строки: «abab», «abcd», «cdab» и «cdcd». Все подсказки — это отрезки, которые покрывают первые две буквы и последние две буквы.

G. Фишки на доске

битмаски дп игры Перебор Структуры данных *2700

У Алисы и Боба есть доска из \(n\) строк и \(m\) столбцов. В каждой строке есть ровно одна фишка.

Алиса и Боб играют в следующую игру. Они выбирают два целых числа \(l\) и \(r\), такие, что \(1 \le l \le r \le m\), и разрезают доску таким образом, что только столбцы с \(l\) по \(r\) (включительно) принадлежат доски. То есть все столбцы левее столбца \(l\) и все столбцы правее столбца \(r\) больше не являются частью доски.

После разрезания доски они начинают свою игру на оставшейся части доски (от столбца \(l\) до столбца \(r\)). Они ходят по очереди, и первый игрок, который не может сделать ход, проигрывает. Первый ход делает Алиса, второй — Боб, третий — снова Алиса, и так далее. Во время своего хода игрок должен выбрать одну из фишек и сдвинуть ее на любое количество столбцов влево (то есть, если фишка была в столбце \(i\), ее можно переместить в любой столбец \(j < i\), а фишки в самом левом столбце двигать нельзя). Фишки не должны покидать выбранную часть доски.

У Алисы и Боба есть \(q\) пар чисел \(L_i\) и \(R_i\). Для каждой такой пары они хотят определить, кто выиграет, если \(l = L_i\) и \(r = R_i\). Обратите внимание, что эти игры рассматриваются независимо (они не влияют на положение на доске в последующих играх), и оба игрока играют оптимально.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество строк и столбцов, соответственно.

Во второй строке заданы \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le m\)), где \(c_i\) — номер столбца, в котором расположена фишка в \(i\)-м ряду (то есть, такое число обозначает фишку в клетке на пересечении \(i\)-й строки и \(c_i\)-го столбца).

В третьей строке задано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)).

Затем следуют \(q\) строк, в \(i\)-й строке заданы два целых числа \(L_i\) и \(R_i\) (\(1 \le L_i \le R_i \le m\)).

Выходные данные

Выведите строку из \(q\) символов. \(i\)-й символ должен быть A, если Алиса выигрывает при \(l = L_i\) и \(r = R_i\), или B, если выигрывает Боб.

F. Образование

дп жадные алгоритмы Перебор реализация *1900

Поликарп мечтает о покупке нового компьютера, который стоит \(c\) тугриков. Для этого он хочет устроиться программистом в большую компанию.

В компании Поликарпа есть \(n\) должностей, пронумерованных начиная с единицы. Сотрудник на должности \(i\) каждый день зарабатывает \(a[i]\) тугриков. Чем выше номер должности, тем больше тугриков получает сотрудник. Изначально Поликарп устраивается на должность с номером \(1\) и имеет \(0\) тугриков.

Каждый день Поликарп может сделать одно из двух действий:

  • Если Поликарп находится на должности \(x\), то он может заработать \(a[x]\) тугриков;
  • Если Поликарп находится на должности \(x\) (\(x < n\)) и имеет хотя бы \(b[x]\) тугриков, то он может потратить \(b[x]\) тугриков на онлайн-курс и перейти на должность \(x+1\).

Например, если \(n=4\), \(c=15\), \(a=[1, 3, 10, 11]\), \(b=[1, 2, 7]\), то Поликарп может действовать так:

  • В первый день Поликарп находится на должности \(1\) и зарабатывает \(1\) тугрик. Теперь у него есть \(1\) тугрик;
  • Во второй день Поликарп находится на должности \(1\) и переходит на должность \(2\). Теперь у него есть \(0\) тугриков;
  • В третий день Поликарп находится на должности \(2\) и зарабатывает \(3\) тугрика. Теперь у него есть \(3\) тугрика;
  • В четвертый день Поликарп находится на должности \(2\) и переходит на должность \(3\). Теперь у него есть \(1\) тугрик;
  • В пятый день Поликарп находится на должности \(3\) и зарабатывает \(10\) тугриков. Теперь у него есть \(11\) тугриков;
  • В шестой день Поликарп находится на должности \(3\) и зарабатывает \(10\) тугриков. Теперь у него есть \(21\) тугриков;
  • Спустя шесть дней, Поликарп может купить себе новый компьютер.

Найдите минимальное количество дней, через которое Поликарп сможет купить себе новый компьютер.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(c\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le c \le 10^9\)) — количество должностей в компании и стоимость нового компьютера.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1 \le a_2 \le \ldots \le a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка каждого набора входных данных содержит \(n - 1\) целое число \(b_1, b_2, \ldots, b_{n-1}\) (\(1 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышаем \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество дней, через которое Поликарп сможет купить себе новый компьютер.

G. Короткая задача

дп математика Перебор теория чисел *1700

Обозначим за \(d(n)\) сумму всех делителей числа \(n\), т.е. \(d(n) = \sum\limits_{k | n} k\).

Например, \(d(1) = 1\), \(d(4) = 1+2+4=7\), \(d(6) = 1+2+3+6=12\).

Для заданного числа \(c\), найдите минимальное \(n\) такое, что \(d(n) = c\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных характеризуется одним целым числом \(c\) (\(1 \le c \le 10^7\)).

Выходные данные

Для каждого набора входных данных выведите:

  • «-1», если не существует \(n\), такого что \(d(n) = c\);
  • \(n\), иначе.

C. Добавь единицу

дп матрицы *1600

Вам дано целое число \(n\). Вы должны сделать с ним \(m\) операций.

В каждой операции вы должны заменить все цифры числа \(d\) десятичной записью числа \(d + 1\). Например, число \(1912\) становится числом \(21023\) после одной операции.

Вам нужно найти длину числа \(n\) после применения \(m\) операций. Так как ответ может быть большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) (\(1 \le n \le 10^9\)) и \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — начальное число и количество операций.

Выходные данные

Для каждого набора входных данных выведите длину получившегося числа по модулю \(10^9+7\).

Примечание

В первом наборе входных данных \(1912\) превращается в \(21023\) после \(1\) операции. Длина числа равна \(5\).

Во втором наборе входных данных \(5\) превращается в \(21\) после \(6\) операций. Длина числа равна \(2\).

В третьем наборе входных данных \(999\) превращается в \(101010\) после \(1\) операции. Длина числа равна \(6\).

В четвертом наборе входных данных \(88\) превращается в \(1010\) после \(2\) операций. Длина числа равна \(4\).

E. Феникс и компьютеры

дп Комбинаторика математика *2200

В один ряд стоят \(n\) компьютеров, первоначально все выключены, и Феникс хочет всех их включить. Он будет лично включать их по одному. Однако в любой момент времени, если компьютеры \(i-1\) и \(i+1\) оказались включены, то компьютер \(i\) \((2 \le i \le n-1)\) включится сам автоматически (если он еще не включен). Заметим, что Феникс не может включить компьютер, который уже включился автоматически.

Рассмотрим только последовательности компьютеров, включенных непосредственно Фениксом, сколько существует таких последовательностей, включающих все компьютеры? Две последовательности различны, если либо множество компьютеров, включенных лично Фениксом, различается, либо порядок их включения различен. Так как ответ может быть слишком большим, выведите его по модулю \(M\).

Входные данные

В первой строке заданы два целых числа \(n\) и \(M\) (\(3 \le n \le 400\); \(10^8 \le M \le 10^9\)) — количество компьютеров и модуль. Гарантируется, что \(M\) — простое.

Выходные данные

Выведите одно число — количество способов включить все компьютеры по модулю \(M\).

Примечание

В первом примере, для Феникса есть \(6\) последовательностей, при которых он включит все компьютеры:

  • \([1,3]\). Включить компьютер \(1\), потом \(3\). Заметим, что компьютер \(2\) включится автоматически после того, как компьютер \(3\) будет включен Фениксом, но мы учитываем только компьютеры, включенные непосредственно Фениксом.
  • \([3,1]\). Включить компьютер \(3\), потом \(1\).
  • \([1,2,3]\). Включить компьютеры \(1\), потом \(2\), затем \(3\).
  • \([2,1,3]\)
  • \([2,3,1]\)
  • \([3,2,1]\)

B. AGAGA XOOORRR

битмаски дп жадные алгоритмы Перебор *1500

Ехаб известен своей любовью к определенным операциям. Сейчас у него есть массив \(a\) длины \(n\), и он может делать на нем следующую операцию:

  • Он выбирает \(2\) соседних элемента; Ехаб удаляет их из массива и вставляет на их место одно число: их исключающее ИЛИ. Обратите внимание, длина массива уменьшается на один.

Теперь он спрашивает вас: возможно ли сделать все элементы массива равными? Так как он хочет сделать вашу жизнь сложнее, то вводит дополнительное ограничение: в массиве должно остаться хотя бы \(2\) элемента.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 15\)) — количество наборов входных данных

В первой строке каждого набора входных данных записано целое число \(n\) (\(2 \le n \le 2000\)) — размер массива \(a\).

Во второй строке каждого набора входных данных записано \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_{n}\) (\(0 \le a_i < 2^{30}\)) — элементы массива \(a\).

Выходные данные

Если Ехаб может сделать все элементы массива равными, применяя описанную операцию, так, чтобы в массиве осталось хотя бы \(2\) элемента, выведите «YES». Иначе выведите «NO».

Примечание

В первом примере мы можем удалить первые \(2\) элемента, \(0\) и \(2\), и вставить вместо них \(0 \oplus 2=2\). Получится массив \([2,2]\), в котором все элементы равны.

Во втором примере ответа не существует.

C. Ехаб снова делит массив

битмаски дп Конструктив математика *1700

Ехаб снова решил развлечься. У него есть массив \(a\) длины \(n\). Он называет массив хорошим, если его нельзя разбить на \(2\) непересекающихся подпоследовательности такие, что сумма элементов первой равна сумме элементов второй. Сейчас он хочет удалить минимальное количество элементов из \(a\) так, что оставшийся массив будет хорошим. Вы можете ему в этом помочь?

Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов. Разбить массив это разделить его на \(2\) подпоследовательности так, чтобы каждый элемент входил ровно в одну из них. Вы должны использовать все элементы по одному разу.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 100\)) — размер массива \(a\).

Во второй строке записаны \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_{n}\) (\(1 \le a_i \le 2000\)) — элементы массива \(a\).

Выходные данные

Первая строка должна содержать минимальное количество элементов, которое нужно удалить.

Вторая строка должна содержать индексы этих элементов, записанные через пробел.

Если существует несколько решений, выведите любое из них. Можно показать, что решение всегда существует.

Примечание

В первом примере вы можете разбить массив на \([6,9]\) и \([3,12]\), так что необходимо удалить хотя бы \(1\) элемент. Удаление \(3\) подходит.

Во втором примере массив уже хороший.

D. Ехаб разрезает массив

Бинарный поиск графы дп Структуры данных теория чисел *2100

В этот раз Ехаб решил только разрезать массив. Он начинает с массива \(a\) длины \(n\), записанного на полоске бумаги, и делает следующее:

  • Ехаб выбирает отрезок \((l, r)\) и вырезает отрезок с элементами \(a_l, a_{l + 1}, \ldots, a_r\), выбрасывая остальные элементы.
  • Затем он разрезает его на несколько подотрезков.
  • Чтобы добавить интереса в это занятие, он требует, чтобы произведение элементов на каждом подотрезке было равно их наименьшему общему кратному (НОК).

Формально, он разбивает элементы \(a_l, a_{l + 1}, \ldots, a_r\) на подотрезки так, чтобы произведение элементов каждого подотрезка было равно НОК элементов этого подотрезка. У Ехаба есть \(q\) независимых отрезков \((l, r)\), для которых он хочет узнать, на какое минимальное число подотрезков их необходимо разрезать, чтобы условие выполнялось.

Входные данные

В первой строке записано \(2\) целых числа \(n\) и \(q\) (\(1 \le n,q \le 10^5\)) — длина массива \(a\) и количество запросов.

Во второй строке записано \(n\) целых чисел, \(a_1\), \(a_2\), \(\ldots\), \(a_n\) (\(1 \le a_i \le 10^5\)) — элементы массива \(a\).

В каждой из следующих \(q\) строк записано \(2\) целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — границы каждого запроса.

Выходные данные

Для каждого запроса выведите ответ на него.

Примечание

Первый запрос спрашивает про весь массив. Вы можете разделить его так: \([2]\), \([3,10,7]\), и \([5,14]\). Произведение и НОК первого подотрезка равны \(2\). Произведение и НОК второго подотрезка равны \(210\). И произведение и НОК третьего подотрезка равны \(70\). Существует другое возможное разделение: \([2,3]\), \([10,7]\), и \([5,14]\).

Второй запрос спрашивает про отрезок \((2,4)\). Его произведение уже равно его НОК, следовательно, не нужно делить его ни разу.

Последний запрос про отрезок \((3,5)\). Вы можете разделить его на \([10,7]\) и \([5]\).

E. Ехаб играет с перестановками

дп Комбинаторика математика *2500

На этот раз Ехаб будет играть с перестановками. У него есть \(n\) кубиков, расположенных в ряд, с числами от \(1\) до \(n\), написанными на них. Он сделает ровно \(j\) операций. В ходе каждой из операций он выбирает \(2\) кубика и меняет их местами.

Ехаб задался вопросом: сколько различных последовательностей кубиков я могу получить в конце? Так как Ехаб непостоянный человек, он не уверен, сколько операций хочет совершить. Поэтому он просит вас узнать ответ на его вопрос для всех \(j\) от \(1\) до \(k\).

Входные данные

В первой строке записано \(2\) целых числа \(n\) и \(k\) (\(2 \le n \le 10^9\), \(1 \le k \le 200\)) — количество кубиков, что есть у Ехаба, и параметр \(k\) из условия.

Выходные данные

Выведите \(k\) целых чисел. \(i\)-е из них — это количество возможных последовательностей, которые можно получить после ровно \(i\) операций. Так как это число может быть очень большим, выведите его остаток от деления на \(10^9+7\).

Примечание

Во втором примере есть \(3\) последовательности, которые можно получить после \(1\) операции, потому что вы можете поменять местами \(3\) различные пары индексов. Также, есть ровно \(3\) последовательности, которые можно получить после \(2\) операций:

  • \([1,2,3]\),
  • \([3,1,2]\),
  • \([2,3,1]\).

D. Исследовательская выставка

графы дп кратчайшие пути *1800

Вы бродите по исследовательской выставке на конференции 2050.

Выставка может быть представлена как неориентированный взвешенный граф в виде сетки размера \(n\times m\). Множество вершин графа это \(\{(i, j)|1\le i\le n, 1\le j\le m\}\). Две вершины \((i_1,j_1)\) и \((i_2, j_2)\) соединены ребром, если и только если \(|i_1-i_2|+|j_1-j_2|=1\).

На каждом ходу вы можете перейти из вершины в любую другую вершину, соединенную ребром с текущей. На каждом ребре расположено несколько экспонатов. Так как вы их все уже видели, то при проходе по ребру, на котором расположено \(x\) экспонатов, ваша скукота увеличивается на \(x\).

Для каждой стартовой вершины \((i, j)\) найдите ответ на следующий вопрос: чему равна минимальная возможная скукота, если вы начнете в вершине \((i, j)\) и вернетесь обратно, сделав ровно \(k\) ходов.

Вы можете использовать каждое ребро несколько раз, но и скукота будет увеличиваться это же количество раз. Вы не можете остаться в той же вершине вместо того, чтобы делать ход. Вы также не можете менять направление, когда идете по ребру. Прежде чем вернуться в стартовую вершину \((i, j)\) после \(k\) ходов, вы можете посещать (или нет) вершину \((i, j)\) любое количество раз.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(2\leq n, m\leq 500, 1\leq k\leq 20\)).

\(j\)-е число (\(1\le j \le m - 1\)) в \(i\)-й из следующих \(n\) строк равно количеству экспонатов, расположенных на ребре между вершинами \((i, j)\) и \((i, j+1)\).

\(j\)-е число (\(1\le j\le m\)) в \(i\)-й из следующих \(n-1\) строк равно количеству экспонатов, расположенных на ребре между вершинами \((i, j)\) и \((i+1, j)\).

На каждом ребре находится от \(1\) до \(10^6\) экспонатов.

Выходные данные

Выведите \(n\) строк по \(m\) чисел в каждой. \(j\)-е число в \(i\)-й строке, \(answer_{ij}\), должно равняться минимальной возможной скукоте, если вы начнете в вершине \((i, j)\) и вернетесь обратно, сделав ровно \(k\) ходов.

Если вы не можете вернуться обратно в вершину \((i, j)\), сделав ровно \(k\) ходов, \(answer_{ij}\) должен равняться \(-1\).

Примечание

В первом примере ответ всегда равен \(10\) вне зависимости от того, как вы пойдете.

Во втором примере \(answer_{21} = 10\), путь может быть таким: \((2,1) \to (1,1) \to (1,2) \to (2,2) \to (2,1)\), скукота равна \(4 + 1 + 2 + 3 = 10\).

F. Воссоединение

Деревья дп Комбинаторика *3200

Сообщается, что конференция 2050 пройдет в городе Юньци в Ханчжоу с 23 по 25 апреля. На ней будут тематические форумы, утренние пробежки, походы, и так далее.

Отношения между \(n\) волонтерами конференции 2050 могут быть представлены как дерево (связный неориентированный граф с \(n\) вершинами и \(n-1\) ребром). \(n\) вершин дерева соответствуют \(n\) волонтерам и пронумерованы \(1,2,\ldots, n\).

Определим расстояние между двумя волонтерами \(i\) и \(j\), dis\((i,j)\), как количество ребер на кратчайшем пути из вершины \(i\) в вершину \(j\) в дереве. dis\((i,j)=0\), если \(i=j\).

Некоторые волонтеры смогут принять участие в очном воссоединении, а некоторые — нет. Если для некоторого волонтера \(x\) и неотрицательного целого числа \(r\), все волонтеры, чье расстояние до \(x\) не больше \(r\), смогут принять участие в очном воссоединении, то форум с радиусом \(r\) может состояться. Уровень очного воссоединения определяется как максимальный возможный радиус форума, который может состояться.

Предположим, что каждый волонтер сможет принять участие в воссоединении с вероятностью \(\frac{1}{2}\), и все эти события независимы. Найдите математическое ожидание уровня очного воссоединения. Если ни один волонтер не сможет принять участие, уровень равен \(-1\). Если все волонтеры смогут принять участие, уровень равен \(n\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2\le n\le 300\)), обозначающее количество волонтеров.

Каждая из следующих \(n-1\) строк содержит два целых числа \(a\) и \(b\), обозначающих ребро между вершинами \(a\) и \(b\).

Выходные данные

Выведите математическое ожидание уровня очного воссоединения по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен как несократимая вещественная дробь \(\frac{p}{q}\), где \(p\) и \(q\) целые числа и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом примере следующая таблица показывает возможные варианты. \(yes\) означает, что волонтер сможет принять участие, а \(no\) — что не сможет. \(\)\begin{array}{cccc} 1 & 2 & 3 & level\\ yes & yes & yes & 3\\ yes & yes & no & 1\\ yes & no & yes & 0\\ yes & no & no & 0\\ no & yes & yes & 1\\ no & yes & no & 0\\ no & no & yes & 0\\ no & no & no & -1\\ \end{array}\(\) Математическое ожидание уровня равно \(\frac{3+1+1+(-1)}{2^3}=\frac{1}{2}\).

H. Полет вокруг света

геометрия дп *3500

После того, как Уово услышал историю доктора Чжан, он решил спланировать свой собственный полет вокруг света.

Он уже выбрал \(n\) контрольных точек на карте мира. Из-за формы рельефа и облаков, он не может лететь слишком высоко или слишком низко. Формально, пусть \(b_i\) будет высота самолета Уово на контрольной точке \(i\). Для всех целых \(i\) между \(1\) и \(n\) должно выполняться \(x_i^-\le b_i\le x_i^+\), где \(x_i^-\) и \(x_i^+\) — данные вам целые числа.

Угол полета самолета Уово тоже ограничен. Например, он не может лететь вертикально вверх под \(90\) градусов. Формально, \(y_i^-\le b_i-b_{i-1}\le y_i^+\) должно выполняться для всех целых \(i\) между \(2\) и \(n\), где \(y_i^-\) и \(y_i^+\) — данные вам целые числа.

Последнее ограничение связано со скоростью изменения угла. Самолет должен делать это плавно из соображений безопасности. Формально, \(z_i^- \le (b_i - b_{i-1}) - (b_{i-1} - b_{i-2}) \le z_i^+\) должно выполняться для всех целых \(i\) между \(3\) и \(n\), где \(z_i^-\) и \(z_i^+\) — данные вам целые числа.

Принимая во внимание все эти ограничения, Уово обнаружил, что выбрать высоты для контрольных точек слишком сложно. Помогите Уово определить, существует ли последовательность вещественных чисел \(b_1, \ldots, b_n\), удовлетворяющая всем ограничениям выше.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 66\,666\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 100\,000\)).

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i^-\), \(x_i^+\) (\(-10^8\le x_i^-\le x_i^+\le 10^8\)), обозначающих нижнее и верхнее ограничение на \(b_i\).

\(i\)-я из следующих \(n-1\) строк содержит два целых числа \(y_{i+1}^-\), \(y_{i+1}^+\) (\(-10^8\le y_{i+1}^-\le y_{i+1}^+\le 10^8\)), обозначающих нижнее и верхнее ограничение на \(b_{i+1}-b_i\).

\(i\)-я из следующих \(n-2\) строк содержит два целых числа \(z_{i+2}^-\), \(z_{i+2}^+\) (\(-10^8\le z_{i+2}^-\le z_{i+2}^+\le 10^8\)), обозначающих нижнее и верхнее ограничение на \((b_{i+2}-b_{i+1}) - (b_{i+1}-b_i)\).

Гарантируется, что сумма \(n\) по всем наборах входных данных не превышает \(200\,000\).

Гарантируется, что ослабление каждого ограничения на \(10^{-6}\) (т.е. уменьшение \(x_i^-, y_i^-, z_i^-\) на \(10^{-6}\) и увеличение \(x_i^+, y_i^+, z_i^+\) на \(10^{-6}\)) не изменит ответ.

Выходные данные

Для каждого набора входных данных, выведите YES, если существует последовательность \(b_1,\ldots, b_n\), удовлетворяющая всем ограничениям. И NO иначе. Выводить саму последовательность \(b_1,\ldots, b_n\) не требуется.

Примечание

В первом наборе входных данных все \(b_i\) принадлежат отрезку \([0,1]\). Из-за ограничения \(1=y_2^-\le b_2-b_1\le y_2^+=1\), \(b_2-b_1\) должно равняться \(1\). Поэтому, должно выполняться \(b_2=1\) и \(b_1=0\). Потом, по \(1=y_3^-\le b_3-b_2\le y_3^+=1\), \(b_3\) равно \(2\). Это приводит к противоречию с ограничением \(b_3\le 1\). Поэтому, решения не существует.

Во втором наборе входных данных мы можем сделать все \(b_i\) равными \(0\).

В третьем наборе входных данных одно из возможных решений это \(b_1=0\), \(b_2=1/3\), \(b_3=2/3\), \(b_4=1\).

B. Торт - это ложь

дп математика *800

Есть клеточное поле размера \(n \times m\). Вы стоите в клетке \((1, 1)\) и хотите попасть в клетку \((n, m)\).

Вы можете перемещаться в соседние клетки вправо или вниз. Другими словами, предположим вы находитесь в клетке \((x, y)\). Вы можете:

  • сдвинуться вправо в клетку \((x, y + 1)\) — это перемещение стоит \(x\) бурлей;
  • сдвинуться вниз в клетку \((x + 1, y)\) — это перемещение стоит \(y\) бурлей.

Можете ли вы достигнуть клетки \((n, m)\), потратив ровно \(k\) бурлей?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 100\); \(0 \le k \le 10^4\)) — размеры поля и точное количество денег, которое вы должны потратить.

Выходные данные

Для каждого набора входных данных, если вы можете попасть в клетку \((n, m)\), потратив ровно \(k\) бурлей, выведите YES. В противном случае выведите NO.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом наборе, вы уже в нужной клетке, потратив \(0\) бурлей.

Во втором, третьем и четвертом наборах, есть только два пути из \((1, 1)\) в \((2, 2)\): \((1, 1)\) \(\rightarrow\) \((1, 2)\) \(\rightarrow\) \((2, 2)\) или \((1, 1)\) \(\rightarrow\) \((2, 1)\) \(\rightarrow\) \((2, 2)\). Оба способа стоят \(1 + 2 = 3\) бурлей, то есть это единственно возможное количество денег, которое вы можете потратить.

В пятом наборе, есть единственный путь из \((1, 1)\) в \((1, 4)\) и его стоимость равна \(1 + 1 + 1 = 3\) бурлей.

D. Максимальная сумма произведений

дп математика Перебор реализация *1600

Вам заданы два массива целых чисел \(a\) и \(b\) длины \(n\).

Вы можете развернуть не более одного подмассива (последовательного отрезка) массива \(a\).

Ваша задача состоит в том, чтобы перевернуть такой подмассив, чтобы сумма \(\sum\limits_{i=1}^n a_i \cdot b_i\) была максимально возможной.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 5000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^7\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^7\)).

Выходные данные

Выведите одно целое число — максимально возможную сумма после разворота не более одного подмассива (последовательного отрезка) \(a\).

Примечание

В первом примере можно перевернуть подмассив \([4, 5]\). Тогда \(a = [2, 3, 2, 3, 1]\) и \(2 \cdot 1 + 3 \cdot 3 + 2 \cdot 2 + 3 \cdot 4 + 1 \cdot 2 = 29\).

Во втором примере не нужно использовать операцию. \(13 \cdot 2 + 37 \cdot 4 = 174\).

В третьем примере можно перевернуть подмассив \([3, 5]\). Тогда \(a = [1, 8, 3, 6, 7, 6]\) и \(1 \cdot 5 + 8 \cdot 9 + 3 \cdot 6 + 6 \cdot 8 + 7 \cdot 8 + 6 \cdot 6 = 235\).

F. Сундуки и ключи

битмаски дп Перебор поиск в глубину и подобное Потоки *3200

Алиса и Боб играют в игру. У Алисы есть \(n\) сундуков с сокровищами (в \(i\)-м лежит \(a_i\) монет) и \(m\) ключей (\(j\)-й из которых она может продать Бобу за \(b_j\) монет).

Сначала Алиса вешает некоторые замки на сундуки. Есть \(m\) типов замков, замок \(j\)-го типа можно открыть только \(j\)-м ключом. Чтобы повесить замок типа \(j\) на \(i\)-й сундук, Алиса должна заплатить \(c_{i,j}\) долларов. Алиса может повесить произвольное количество различных замков на каждый сундук (возможно, ноль).

Затем Боб покупает у Алисы несколько ключей (возможно, ноль или все) и открывает все сундуки, которые он может открыть (он может открыть сундук, если у него есть ключи от всех замков на этом сундуке). Прибыль Боба — это разность между суммарным количеством монет в открытых сундуках и суммарным количеством монет, которые он тратит на покупку ключей у Алисы. Если прибыль Боба строго положительная (больше ноля), то он выигрывает игру. Иначе Алиса выигрывает игру.

Алиса хочет повесить замки на некоторые сундуки так, чтобы она выиграла игру вне зависимости от ключей, которые Боб купит (Боб не может получить положительную прибыль). Разумеется, она хочет потратить как можно меньше долларов на покупку замков. Помогите ей определить, может ли она выиграть игру, а если может, то сколько долларов ей придется потратить на замки.

Входные данные

В первой строке записаны два целых числа \(n\) and \(m\) (\(1 \le n, m \le 6\)) — количество сундуков и количество ключей, соответственно.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 4\)), где \(a_i\) — это количество монет в \(i\)-м сундуке.

В третьей строке записаны \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_j \le 4\)), где \(b_j\) — это количество монет, которые Боб тратит на покупку \(j\)-го ключа у Алисы.

Затем следуют \(n\) строк. В \(i\)-й строке записаны \(m\) целых чисел \(c_{i,1}, c_{i,2}, \dots, c_{i,m}\) (\(1 \le c_{i,j} \le 10^7\)), где \(c_{i,j}\) — это количество долларов, которые Алиса тратит на покупку замка \(j\)-го типа на \(i\)-й сундук.

Выходные данные

Если Алиса не может гарантированно выиграть (как бы она ни выбирала замки, Боб всегда сможет получить положительную прибыль), то выведите \(-1\).

Иначе выведите одно целое число — минимальное количество долларов, которые необходимо потратить Алисе, чтобы выиграть вне зависимости от действий Боба.

Примечание

В первом примере Алиса должна повесить замки \(1\) и \(3\) типов на первый сундук и замки \(2\) и \(3\) типов на второй сундук.

Во втором примере Алиса должна повесить замки \(1\) и \(2\) типов на первый сундук и замок \(3\) типа на второй сундук.

E. Сад

битмаски графы Деревья дп *2500

У Васи есть очень красивый загородный сад, который представляет собой прямоугольное поле размером n × m, разделенное на n·m квадратных клеток. В один прекрасный день Вася вспомнил, что ему нужно проложить дорожки между k важными клетками с постройками — для этого он может залить бетоном некоторые из клеток своего сада.

Про каждую клетку сада известно число aij, которое означает количество цветов, растущих в клетке с координатами (i, j). При заливании бетоном все цветы, растущие в клетке, погибают.

Вася хочет залить бетоном некоторые клетки так, чтобы выполнялись условия:

  • все k важных клеток обязательно должны быть залиты бетоном
  • из каждой важной клетки до любой другой важной клетки существовал путь по залитым бетоном клеткам при условии, что соседними считаются клетки, имеющие общую сторону
  • общее количество погибших растений должно быть минимально

Так как у Васи достаточно большой сад, то он просит Вас ему помочь.

Входные данные

В первой строке входных данных даны три целых числа n, m и k (1 ≤ n, m ≤ 100, n·m ≤ 200, 1 ≤ k ≤ min(n·m, 7)) — размеры сада и количество важных клеток. Далее в n строках по m чисел в каждой даны числа aij (1 ≤ aij ≤ 1000) — количество цветов в клетках. Далее в k строках даны координаты важных клеток в формате «x y» (без кавычек) (1 ≤ x ≤ n, 1 ≤ y ≤ m). Числа, расположенные в одной строке, разделены пробелами. Гарантируется, что все k важных клеток имеют различные координаты.

Выходные данные

В первую строку выведите единственное целое число — минимальное количество погибших при строительстве растений. Далее выведите n строк по m символов в каждой — план сада, где символом «X» (заглавная латинская буква X) обозначайте залитую бетоном клеточку, а символом «.» (точка) — незалитую. Если решений несколько, выведите любое.

D. Настя играет с деревом

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное реализация снм Структуры данных *2500

У Насти есть невзвешенное дерево из \(n\) вершин, с которым ей не терпится поиграть!

Девочка будет выполнять следующую операцию с деревом столько раз, сколько ей потребуется:

  1. удалить любое существующее ребро, затем
  2. добавить неориентированное ребро между любой парой вершин.

Какое минимальное количество операций требуется девочке, чтобы получить из дерева бамбук? Бамбуком называется дерево, степень вершин в котором не превосходит \(2\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

В первой строке каждого набора задано число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в дереве.

Следующая \(n - 1\) строка каждого набора входных данных описывают ребро дерево в формате \(a_i\), \(b_i\) (\(1 \le a_i, b_i \le n\), \(a_i \neq b_i\)).

Гарантируется, что заданный граф является деревом и сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого из наборов входных данных в первой строке выведите одно целое число \(k\) — минимальное количество операций, необходимых, чтобы получить из дерева бамбук.

В последующих \(k\) строках выведите \(4\) целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) (\(1 \le x_1, y_1, x_2, y_{2} \le n\), \(x_1 \neq y_1\), \(x_2 \neq y_2\)) — таким образом вы удаляете ребро \((x_1, y_1)\) и добавляете неориентированное ребро \((x_2, y_2)\).

Обратите внимание, что ребро \((x_1, y_1)\) обязано содержаться в графе до его удаления.

Примечание

Обратите внимание, что граф может быть несвязным после какого-то количества операций.

Рассмотрим первый набор входных данных:

Красным обозначены удаленные ребра, а зеленым – добавленные.

E. Настя и красивая матрица

Бинарный поиск дп жадные алгоритмы Конструктив *2700

Вы обожаете числа, не так ли?) У Насти их много, и она решила поделиться ими с вами! Ну не прелесть?)

Пусть \(a_i\) — это количество чисел, равных \(i\) (\(1 \le i \le k\)), которые у вас есть.

Матрица \(n \times n\) называется красивой, если она содержит все числа, которые у вас есть, а также для каждой подматрицы \(2 \times 2\) исходной матрицы, выполняется:

  1. Количество занятых ячеек не превышает \(3\);
  2. Диагонали не содержат одинаковых чисел.

Составьте красивую матрицу минимального размера.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

В первой строке каждого набора заданы \(2\) числa \(m\) и \(k\) (\(1 \le m, k \le 10^5\)) — количество чисел полученных от Насти и длина массива \(a\) соответственно.

Во второй строке каждого набора заданы \(k\) целых чисел \(a_1, a_2, \ldots, a_{k}\) (\(0 \le a_i \le m\), \(a_1 + a_2 + \ldots + a_{k} = m\)), где \(a_i\) — это количество чисел \(i\), которое у вас есть.

Гарантируется, что суммы \(m\) и \(k\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого из \(t\) наборов входных данных в первой строке выведите одно целое число \(n\) — размер составленной вами красивой матрицы.

В последующий \(n\) строках выведите по \(n\) целых чисел \(b_{i, j}\) (\(0 \le b_{i, j} \le k\), если позиция пуста, выведите \(b_{i, j} = 0\)) — составленная вами красивая матрица \(b\).

Примечание

Обратите внимание, что \(0\) в этой задаче считается пустой позицией, а не числом.

Возможные ответы для первого набора входных данных:

\(\begin{array}{cc} 1 & 1 \\ 4 & 0 \\ \end{array} \hspace{0,5cm} \begin{array}{cc} 1 & 4 \\ 1 & 0 \\ \end{array} \hspace{0,5cm} \begin{array}{cc} 4 & 0 \\ 1 & 1 \\ \end{array}\)

Примеры некрасивых матриц для первого набора входных данных:

\(\begin{array}{cc} 1 & 0 \\ 4 & 1 \\ \end{array} \hspace{0,5cm} \begin{array}{cc} 4 & 1 \\ 7 & 1 \\ \end{array} \hspace{0,5cm} \begin{array}{cc} 1 & 0 \\ 4 & 0 \\ \end{array}\)

Пример некрасивой матрицы для второго набора входных данных:

\(\begin{array}{cc} 3 & 4 & 0 & 2 & 2 \\ 3 & 2 & 3 & 3 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 3 & 0 & 0 & 0 & 0 \\ 2 & 1 & 3 & 3 & 3 \\ \end{array}\)

В данном случае левая верхняя матрица содержит \(4\) числа.

D. Нравится - не нравится

битмаски дп Перебор Теория вероятностей *2400

К Василию в гости пришло \(n\) друзей-трейдеров. Они начали обсуждать разные валюты, которыми торговали, но вот незадача: далеко не всем его друзьям нравится каждая валюта, некоторые валюты они любят, а некоторые — нет.

Для каждого друга Василия \(i\) известно, нравится ли ему валюта \(j\). Всего валют \(m\). Известно, что трейдерам не может нравится больше, чем \(p\) валют.

Так как друзьям нужно найти что-то общее для обсуждения, им нужно найти максимальное по мощности (возможно пустое) подмножество валют такое, что найдется как минимум \(\lceil \frac{n}{2} \rceil\) друзей (округление в большую сторону), каждому из которых будут нравиться все валюты этого множества.

Входные данные

В первой строке заданы три числа \(n, m\) и \(p\) \((1 \le n \le 2 \cdot 10^5, 1 \le p \le m \le 60, 1 \le p \le 15)\) — количество друзей-трейдеров, количество валют и максимальное количество валют, которые нравятся каждому другу.

Далее следует \(n\) строк по \(m\) символов в каждой. \(j\)-й символ в \(i\)-й строке равен \(1\), если другу \(i\) нравится валюта \(j\), и \(0\) — если не нравится. Гарантируется, что количество единиц в каждой строке не превышает \(p\).

Выходные данные

Выведите строку длины \(m\), задающую максимальное по размеру подмножество валют, которые нравятся хотя бы половине друзей. Символом \(1\) должны быть обозначены валюты, которые принадлежат этому подмножеству.

Если ответов несколько, то вы можете вывести любой подходящий.

Примечание

В первом тестовом примере только первая валюта нравится как минимум \(\lceil \frac{3}{2} \rceil = 2\) друзьям, поэтому легко показать, что ответ лучше составить нельзя.

Во втором тестовом примере максимальный ответ содержит \(2\) валюты и будет нравится друзьям под номерами \(1\), \(2\) и \(5\). В этом тесте есть и другие валюты, которые нравятся хотя бы половине друзей, но с их помощью нельзя добиться большего размера множества.

E. Криптовалютные лампочки

дп Комбинаторика математика Теория вероятностей *2600

Для отслеживания курса криптовалют трейдер Василий изобрел удивительный прибор, состоящий из \(n\) лампочек, расположенных в ряд. Прибор работает следующим образом:

Изначально все лампочки в приборе Василия выключены. На очередной итерации прибор Василия равновероятно выбирает выключенную лампочку и включает её, подсказывая Василию, в какую криптовалюту ему стоит вложиться. Если после этой итерации среди каких-то \(k\) подряд идущих лампочек находится более одной включенной, то прибор Василия завершает свою работу.

Василий не любит неопределенности, поэтому просит вас посчитать матожидание количества включенных лампочек в приборе после завершения его работы.

Входные данные

Во входных данных находится несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Единственная строка набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 10^5\)) — количество лампочек и длина проверяемых подотрезков лампочек соответственно.

Выходные данные

Для каждого тестового примера выведите ответ по модулю \(10^9+7\). Формально, пусть \(M = 10^9+7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

Объяснение первого тестового примера:

Выпишем все возможные последовательности включений лампочек, которые завершают работу прибора:

  1. \((1, 2)\) — включены \(2\) лампочки
  2. \((1, 3, 2)\) — включены \(3\) лампочки
  3. \((2, 1)\) — включены \(2\) лампочки
  4. \((2, 3)\) — включены \(2\) лампочки
  5. \((3, 2)\) — включены \(2\) лампочки
  6. \((3, 1, 2)\) — включены \(3\) лампочки

Тогда итоговое матожидание будет равняться \(\frac{2}{6}\) + \(\frac{3}{6}\) + \(\frac{2}{6}\) + \(\frac{2}{6}\) + \(\frac{2}{6}\) + \(\frac{3}{6}\) = \(\frac{14}{6}\) = \(\frac{7}{3}\).

Тогда требуемый для вывода ответ это \(333333338\), так как \(333333338 \cdot 3 \equiv 7 \pmod{10^9+7}\).

F. Любимая игра

битмаски дп *3300

Василий любит после завершения рабочего дня поиграть в свою любимую компьютерную игру.

Игра происходит в двумерном мире, начиная с момента времени \(0\). Василий может выбрать любую клетку мира и появиться в ней. Далее каждую единицу времени Василий может остаться на своем прежнем месте или переместиться из текущей клетки (x, y) в одну из следующих: (x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1).

Чтобы ускорить передвижение по миру в игре существует \(n\) вышек для перемещения, \(i\)-я вышка расположена в клетке (\(xa_i, ya_i\)). Чтобы иметь возможность мгновенно переместиться к вышке из любой точки мира, необходимо ее активировать. Активация вышки \(i\) происходит в момент, когда игрок находится в клетке (\(xa_i, ya_i\)), после этого вышка остается активной на протяжении всей игры.

Также Василию известно, что в игре есть \(m\) квестов, \(i\)-й из которых можно выполнить мгновенно, находясь в момент времени \(t_i\) в клетке (\(xb_i, yb_i\)).

Василий хочет узнать, какое максимальное количество квестов он сможет выполнить, если будет оптимально перемещаться по игровому миру.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(0 \le n \le 14, 1 \le m \le 100\)) — количество вышек и квестов.

Следующие \(n\) строк содержат по два целых числа \(xa_i, ya_i\) (\(1 \le xa_i, ya_i \le 10^6\)) — координаты вышек.

Следующие \(m\) строк содержат по три целых числа \(xb_i\), \(yb_i\) и \(t_i\) (\(1 \le xb_i, yb_i \le 10^6\), \(1 \le t_i \le 10^9\)) — координаты квеста и время, в которое его можно выполнить.

Гарантируется, что все координаты во входных данных различны.

Выходные данные

Выведите одно целое число — максимальное количество квестов, которое сможет выполнить Василий.

Примечание

В первом тестовом примере одной из возможных последовательностей действий Василия может быть следующая:

  • Начать в клетке \((3, 2)\)
  • В момент времени \(1\) перемещается в клетку \((4, 2)\)
  • В момент времени \(2\) перемещается в клетку \((5, 2)\). Посетив эту клетку, Василий активирует вышку номер \(3\).
  • В момент времени \(3\) перемещается в клетку \((5, 1)\), где ему остается подождать еще \(1\) момент времени, чтобы выполнить \(2\) квест
  • В момент времени \(5\) перемещается в клетку \((5, 2)\)
  • В момент времени \(6\) перемещается в клетку \((5, 3)\)
  • В момент времени \(7\) перемещается в клетку \((5, 4)\)
  • В момент времени \(8\) перемещается в клетку \((5, 5)\)
  • В момент времени \(9\) перемещается в клетку \((4, 5)\)
  • В момент времени \(10\) перемещается в клетку \((3, 5)\). Переместившись в эту клетку Василий выполнит \(4\) квест
  • В момент времени \(10\) мгновенно переместиться в ранее активированную вышку в клетке \((5, 2)\)
  • В момент времени \(11\) перемещается в клетку \((6, 2)\). Переместившись в эту клетку Василий выполнит \(3\) квест
  • Квест под номером \(1\) Василий не успеет выполнить, потому что вышка в клетке \((2, 3)\) не была активирована

H. Прыжки по массиву

дп Структуры данных *3500

Василий очень хочет завести себе питомца. Еще с детства он мечтал иметь домашнего кузнечика. Василий подходит к выбору питомца очень ответственно, поэтому он хочет устроить кузнечику испытание!

Испытание Василия проходит на массиве \(a\) длины \(n\), который задает длины прыжков для каждой из \(n\) клеток. Кузнечик может прыгать по клеткам по следующим правилам: с клетки с индексом \(i\) он может прыгнуть в любую клетку с индексом от \(i\) до \(i+a_i\) включительно.

Назовем \(k\)-кузнечным числом некоторого массива минимальное количество прыжков, которое потребуется кузнечику, чтобы пропрыгать от первой клетки массива до последней, при этом до начала прыжков вы можете выбрать не более \(k\) клеток и удалить их из массива. Когда клетка удаляется, остальные клетки перенумеровываются, однако величина \(a_i\) для каждой клетки остается неизменной. При этом нельзя удалять первую и последнюю клетки массива.

Требуется обработать \(q\) запросов следующего вида: даны три числа \(l\), \(r\), \(k\), необходимо найти \(k\)-кузнечное число для массива, являющегося подотрезком массива \(a\) с клетками от \(l\) до \(r\) включительно.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 20000\)) — длину массива и количество запросов соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — описание элементов массива.

Следующие \(q\) строк содержат запросы: в каждой строке содержатся три целых числа \(l\), \(r\), \(k\) (\(1 \le l \le r \le n\), \(0 \le k \le min(30, r-l)\)) — границы подотрезков массива и номер кузнечного числа соответственно.

Выходные данные

Для каждого запроса в отдельной строке выведите одно целое число — ответ на запрос.

Примечание

Для второго запроса процесс происходит так:

Для третьего запроса процесс происходит так:

D. Кресла

дп жадные алгоритмы Паросочетания Потоки *1800

В ряд стоят \(n\) кресел, пронумерованных от \(1\) до \(n\) слева направо. Некоторые кресла заняты людьми (не более одного человека на кресло), остальные свободны. Количество занятых мест не превосходит \(\frac{n}{2}\).

По некоторым причинам вы хотите пересадить людей. Если \(i\)-е кресло занято, а \(j\)-е — нет, вы можете попросить человека, сидящего в \(i\)-м кресле, пересесть в \(j\)-е кресло. Время, которое потребуется на перемещение из \(i\)-го кресла в \(j\)-е, равно \(|i - j|\) минутам. Эту операцию можно проводить любое количество раз, но операции должны выполняться последовательно, то есть вы не можете попросить человека пересесть, пока человек, которого вы попросили в предыдущей операции, еще не закончил перемещение.

Вы бы хотели добиться следующей ситуации: все кресла, которые были заняты в самом начале, должны оказаться свободными. За какое минимальное время вы сможете это сделать?

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 5000\)) — количество кресел.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 1\)). \(a_i = 1\) означает, что \(i\)-е кресло изначально занято, \(a_i = 0\) означает, что это кресло свободно. Количество занятых кресел не превосходит \(\frac{n}{2}\).

Выходные данные

Выведите одно целое число — минимальное количество минут, за которое вы можете добиться следующей ситуации: все кресла, которые были заняты в самом начале, должны оказаться свободными.

Примечание

В первом примере возможна следующая последовательность действий:

  1. попросить человека пересесть из кресла \(1\) в кресло \(2\) за \(1\) минуту;
  2. попросить человека пересесть из кресла \(7\) в кресло \(6\) за \(1\) минуту;
  3. попросить человека пересесть из кресла \(4\) в кресло \(5\) за \(1\) минуту.

Во втором примере возможна следующая последовательность действий:

  1. попросить человека пересесть из кресла \(1\) в кресло \(4\) за \(3\) минуты;
  2. попросить человека пересесть из кресла \(2\) в кресло \(6\) за \(4\) минуты;
  3. попросить человека пересесть из кресла \(4\) в кресло \(5\) за \(1\) минуту;
  4. попросить человека пересесть из кресла \(3\) в кресло \(4\) за \(1\) минуту.

В третьем примере ни одно место не занято, поэтому вам не надо тратить время.

E. Assimilation IV

дп Комбинаторика математика Теория вероятностей *2100

Монокарп играет в компьютерную игру Assimilation IV. В этой игре он управляет огромной империей: основывает города, отстраивает их и захватывает новые земли.

Сейчас в империи Монокарпа \(n\) городов, и Монокарп планирует их развивать. Он собирается в каждом из этих городов построить по одному Монументу, и это поможет ему захватить новые территории. Игра пошаговая и, так как Монокарп еще не очень хорошо разбирается в игре, на каждом ходу он строит ровно один Монумент.

Монокарпа интересуют \(m\) точек на карте, которые он хотел бы контролировать при помощи Монументов. Для каждой точки он знает расстояние от нее до каждого из своих городов. Монументы позволяют захватывать территорию следующим образом: в ход, в который Монокарп строит Монумент в некотором городе, строение позволяет ему контролировать все точки на расстоянии \(1\) до этого города. На следующий ход Монумент будет контролировать все точки на расстоянии не более \(2\), еще через ход — все точки на расстоянии \(3\), и так далее. Монокарп собирается построить \(n\) Монументов за \(n\) ходов, и после этого его империи будут принадлежать каждая интересующая его точка, которая контролируется хотя бы одним Монументом.

Монокарп никак не может придумать оптимальную стратегию, и поэтому на каждом шагу он будет просто выбирать город случайно среди тех, в которых еще нет Монументов. Монокарп интересуется, сколько из \(m\) точек он сможет контролировать к концу хода под номером \(n\). Помогите Монокарпу посчитать математическое ожидание количества точек, которые он сможет контролировать!

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 20\); \(1 \le m \le 5 \cdot 10^4\)) — количество городов в империи Монокарпа и количество интересующих его точек, соответственно.

Далее следуют \(n\) строк по \(m\) чисел: \(j\)-е число в \(i\)-й строке \(d_{i, j}\) (\(1 \le d_{i, j} \le n + 1\)) — это расстояние от \(i\)-го города до \(j\)-й интересующей Монокарпа точки.

Выходные данные

Можно показать, что математическое ожидание количества интересных точек, которые Монокарп сможет контролировать к концу хода \(n\), представимо в виде несократимой дроби \(\frac{x}{y}\). Выведите эту дробь по модулю \(998\,244\,353\) (значение \(x \cdot y^{-1} \bmod 998244353\), где \(y^{-1}\) — такое число, что \(y \cdot y^{-1} \bmod 998244353 = 1\)).

Примечание

Рассмотрим все возможные порядки городов постройки Монументов:

  • \([1, 2, 3]\):
    • первый город контролирует все точки на расстоянии не более \(3\), другими словами, точки \(1\) и \(4\);
    • второй город контролирует все точки на расстоянии не более \(2\), или же точки \(1\), \(3\) и \(5\);
    • третий город контролирует все точки на расстоянии не более \(1\), или же точку \(1\).
    В результате, \(4\) точки контролируются.
  • \([1, 3, 2]\): первый город контролирует точки \(1\) и \(4\); второй — точки \(1\) и \(3\); третий — точку \(1\). Суммарно, \(3\) точки.
  • \([2, 1, 3]\): первый город контролирует точку \(1\); второй — точки \(1\), \(3\) и \(5\); третий — точку \(1\). Суммарно, \(3\) точки.
  • \([2, 3, 1]\): первый город контролирует точку \(1\); второй — точки \(1\), \(3\) и \(5\); третий — точку \(1\). Суммарно, \(3\) точки.
  • \([3, 1, 2]\): первый город контролирует точку \(1\); второй — точки \(1\) и \(3\); третий — точки \(1\) и \(5\). Суммарно, \(3\) точки.
  • \([3, 2, 1]\): первый город контролирует точку \(1\); второй — точки \(1\), \(3\) и \(5\); третий — точки \(1\) и \(5\). Суммарно, \(3\) точки.
Матожидание количества контролируемых точек равно \(\frac{4 + 3 + 3 + 3 + 3 + 3}{6}\) \(=\) \(\frac{19}{6}\) или \(19 \cdot 6^{-1}\) \(\equiv\) \(19 \cdot 166374059\) \(\equiv\) \(166374062\) \(\pmod{998244353}\)

F. Гоблины и гномы

дп Паросочетания Перебор Потоки *2800

Монокарп играет в компьютерную игру «Гоблины и гномы». В этой игре он управляет подземным городом гномов, защищающимся от орд гоблинов.

Подземный город состоит из \(n\) залов и \(m\) односторонних туннелей, соединяющих некоторые пары залов. Структура туннелей такова, что, выйдя из какого-то зала, нельзя вернуться в него обратно по тоннелям.

На город готовится \(k\) атак гоблинов, в \(i\)-й атаке город атакуют \(i\) гоблинов. Цель Монокарпа — выдержать все \(k\) атак.

\(i\)-я атака происходит следующим образом: сначала \(i\) гоблинов появляются в каких-то залах города и грабят их, при этом в каждом зале появляется не более одного гоблина. После этого гоблины начинают перемещаться из зала в зал по туннелям, попутно грабя каждый зал на своем пути.

Гоблины очень жадные и хитрые, а поэтому планируют выбирать свои стартовые залы и пути так, что никакие два гоблина не пройдут через один и тот же зал. При этом, среди всех возможных планов атаки они выбирают такой, что позволяет в сумме разграбить максимальное количество залов. После того как гоблины разграбили максимальное количество залов, они покидают город.

Если в результате атаки все залы оказались разграблены — Монокарп проигрывает. Иначе гномам удается восстановить город. Если какой-то зал оказался разграблен в ходе атаки, то в ходе следующих атак он все равно представляет интерес для гоблинов (гномы успевают восстановить его).

Перед каждой атакой у Монокарпа есть время для подготовки. Монокарп может готовиться бесконечно долго (он сам решает, когда вызвать каждую атаку), но чем дольше он готовится к атаке, тем меньше очков он получает. Если Монокарп готовился к \(i\)-й атаке \(t_i\) минут, то после нее он получает \(\max(0, x_i - t_i \cdot y_i)\) очков (естественно, если он не проигрывает).

Во время подготовки к атаке Монокарп может блокировать туннели. За одну минуту он может заблокировать либо все туннели, ведущие в некоторый зал, либо все туннели, ведущие из некоторого зала. Если Монокарп заблокировал какой-то туннель во время подготовки к атаке, то этот туннель остается заблокированным и во время следующих атак.

Помогите Монокарпу выдержать все \(k\) атак гоблинов и набрать максимальное количество очков!

Входные данные

В первой строке задано три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 50\); \(0 \le m \le \frac{n(n - 1)}{2}\); \(1 \le k \le n - 1\)) — количество залов в городе, количество туннелей, и количество атак гоблинов, соответственно.

Далее следуют \(m\) строк, описывающих туннели. В \(i\)-й из этих строк заданы два числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \ne v_i\)), соответствующих туннелю из зала \(u_i\) в зал \(v_i\). Структура туннелей такова, что, выйдя из какого-то зала, гоблин не может вернуться в него обратно по тоннелям. Между каждой парой залов существует не более одного туннеля.

Далее следуют \(k\) строк, описывающих, как Монокарп получает очки за атаки. В \(i\)-й строке заданы два числа \(x_i\) и \(y_i\) (\(1 \le x_i \le 10^9\); \(1 \le y_i \le 10^9\)). Если Монокарп готовился к \(i\)-й атаке \(t_i\) минут, то после нее он получает \(\max(0, x_i - t_i \cdot y_i)\) очков.

Выходные данные

Выведите оптимальную последовательность действий Монокарпа в следующем формате:

В первой строке выведите целое число \(a\) (\(k \le a \le 2n + k\)) — количество действий, которые совершает Монокарп. Во второй строке выведите сами эти действия в том порядке, в котором Монокарп их выполняет. \(i\)-е действие описывается целым числом \(b_i\) (\(-n \le b_i \le n\)) в следующем формате:

  • если \(b_i > 0\), то Монокарп блокирует все туннели, ведущие из зала \(b_i\);
  • если \(b_i < 0\), то Монокарп блокирует все туннели, ведущие в зал \(|b_i|\);
  • если \(b_i = 0\), то Монокарп вызывает очередную атаку гоблинов.

Нельзя повторять одно и то же действие по блокировке \(b_i\) несколько раз. Каждый раз, когда Монокарп вызывает очередную атаку гоблинов, он должен выдержать ее (у гоблинов не должно быть возможности разграбить все залы города). Монокарп должен выдержать ровно \(k\) атак и получить максимально возможное количество очков.

Если существует несколько оптимальных последовательностей действий — выведите любую из них.

Примечание

В первом примере Монокарп сначала блокирует все туннели, ведущие в зал \(2\), а потом — все туннели, ведущие в зал \(3\), после чего вызывает все атаки. Он готовился к атаке \(1\) две минуты, поэтому он получает за нее \(98\) очков. К остальным атакам он не готовился, поэтому получает максимально возможные очки за них (\(200\), \(10\) и \(100\)). Суммарно он набирает \(408\) очков.

Во втором примере Монокарп сразу вызывает первую атаку и получает за нее \(100\) очков. Перед второй атакой он блокирует все туннели, ведущие в зал \(3\). Это означает, что он готовится к ней одну минуту и получает \(195\) очков за нее. К третьей атаке Монокарп не готовится и получает \(10\) очков. Перед четвертой атакой он блокирует туннели, ведущие из зала \(1\), это означает, что он готовится к атаке одну минуту и получает за нее \(99\) очков. Суммарно он набирает \(404\) очка.

В третьем примере Монокарпу не важно, сделает он одно действие или несколько перед единственной атакой, так как он в любом случае не получит за нее очков. А потому блокирует все туннели в городе, потратив на это целых \(5\) минут и переживает атаку, не получив за нее очков.

B. Я ненавижу 1111

дп математика теория чисел *1400

Вам дано целое число \(x\). Можете ли вы получить \(x\), просуммировав некоторое количество \(11, 111, 1111, 11111, \ldots\)? (Вы можете использовать любое число среди них любое количество раз).

Например,

  • \(33=11+11+11\)
  • \(144=111+11+11+11\)
Входные данные

Первая строка ввода содержит одно целое число \(t\) \((1 \leq t \leq 10000)\) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(x\) \((1 \leq x \leq 10^9)\) — число, которое вы должны получить.

Выходные данные

Для каждого набора входных данных вы должны вывести одну строку. Если вы можете получить \(x\), выведите «YES» (без кавычек). В противном случае выведите «NO».

Вы можете вывести каждую букву из «YES» и «NO» в любом регистре (верхнем или нижнем).

Примечание

Cпособы получения \(33\) и \(144\) были представлены в условии. Можно показать, что мы не можем представить \(69\) таким образом.

C1. Настойки (простая версия)

дп жадные алгоритмы Перебор Структуры данных *1500

Это простая версия задачи. Единственное отличие в том, что в этой версии \(n \leq 2000\). Вы можете делать взломы, только если решены обе версии задачи.

В линию выстроены \(n\) настоек, причем настойка \(1\) находится слева, а настойка \(n\) — справа. Каждая настойка увеличит ваше здоровье на \(a_i\), если ее выпить. \(a_i\) может быть отрицательным, что означает, что настойка уменьшит ваше здоровье.

Вы начинаете с \(0\) здоровья и будете идти слева направо, от первой настойки до последней. Для каждой настойки вы можете выбрать, выпить ли ее. Вы должны следить за тем, чтобы ваше здоровье всегда было неотрицательным.

Какое наибольшее количество настоек вы можете выпить?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2000\)) — количество настоек.

Следующая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ... ,\(a_n\) (\(-10^9 \leq a_i \leq 10^9\)), которые обозначают изменения здоровья после употребления данных настоек.

Выходные данные

Выведите одно целое число — максимальное количество настоек, которое вы можете выпить, чтобы ваше здоровье всегда было неотрицательным.

Примечание

В примере, вы можете выпить \(5\) настоек, приняв настойки \(1\), \(3\), \(4\), \(5\) и \(6\). Невозможно выпить все \(6\) настоек, потому что в какой-то момент ваше здоровье станет отрицательным.

E. Игра в разделения

Бинарный поиск дп разделяй и властвуй Структуры данных *2500

Дан массив \(a\) из \(n\) целых чисел. Стоимость массива \(t\) вычисляется следующим образом:

\(\)cost(t) = \sum_{x \in set(t) } last(x) - first(x),\(\)

где \(set(t)\) есть множество всех различных значений в \(t\) без повторений, \(first(x)\), и \(last(x)\) индексы первого и последнего вхождения \(x\) в \(t\), соответственно. Другими словами, мы считаем сумму расстояний между первым и последним вхождением каждого значения.

Вам нужно разделить \(a\) на \(k\) последовательных отрезков так, что каждый элемент \(a\) принадлежит ровно одному отрезку, а сумма стоимостей отрезков минимальна.

Входные данные

Первая строка содержит целые числа \(n\), \(k\) (\(1 \le n \le 35\,000\), \(1 \le k \le \min(n,100)\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Выходные данные

Выведите минимальную возможную сумму стоимостей.

Примечание

В первом примере мы можем разделить массив на \([1,6,6,4]\) и \([6,6,6]\). Стоимость \([1,6,6,4]\) будет \((1-1) + (3 - 2) + (4-4) = 1\), а стоимость \([6,6,6]\) будет \(3-1 = 2\). Суммарная стоимость будет \(1 + 2 = 3\).

Во втором примере разделим массив на \([5,5],[5],[5,2,3]\) и \([3]\). Суммарная стоимость будет \(1 + 0 + 0 + 0 = 1\).

A. Огромное дерево Parsa

Деревья дп жадные алгоритмы поиск в глубину и подобное разделяй и властвуй *1600

У Parsa есть огромное дерево на \(n\) вершинах.

На каждой вершине \(v\) он записал два целых числа \(l_v\) и \(r_v\).

Чтобы дерево Parsa выглядело еще более величественным, Nima хочет назначить число \(a_v\) (\(l_v \le a_v \le r_v\)) для каждой вершины \(v\) таким образом, чтобы красота дерева Parsa была максимальной.

Восприятие красоты Nima довольно причудливо. Он определяет красоту дерева как сумму \(|a_u - a_v|\) по всем ребрам \((u, v)\) дерева.

Поскольку дерево Parsa слишком велико, Nima не может самостоятельно максимизировать его красоту. Ваша задача — найти максимальную возможную красоту для дерева Parsa.

Входные данные

Первая строка содержит целое число \(t\) \((1\le t\le 250)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((2\le n\le 10^5)\) — количество вершин в дереве Parsa.

В \(i\)-й из следующих \(n\) строк содержится два целых числа \(l_i\) и \(r_i\) \((1 \le l_i \le r_i \le 10^9)\).

Каждая из следующих \(n-1\) строк содержит по два целых числа \(u\) и \(v\) \((1 \le u , v \le n, u\neq v)\), что обозначает наличие ребра между вершинами \(u\) и \(v\) в дереве Parsa.

Гарантируется, что данный граф является деревом.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальную возможную красоту для дерева Парса.

Примечание

Деревья в примере:

В первом наборе входных данных одно из возможных назначений — \(a = \{1, 8\}\), что приводит к \(|1 - 8| = 7\).

Во втором наборе входных данных одно из возможных назначений — \(a = \{1, 5, 9\}\), что приводит к красоте \(|1 - 5| + |5 - 9| = 8\).

B. Kavi разбивает на пары

дп Комбинаторика математика *1700

У Kavi есть \(2n\) точек, лежащих на оси \(OX\), \(i\)-я из которых расположена в точке \(x = i\).

Kavi рассматривает все способы разбить эти \(2n\) точек на \(n\) пар. Среди этих способов его интересуют хорошие способы, которые определяются следующим образом:

Рассмотрим \(n\) отрезков с концами в точках в соответствующих парах. Пара называется хорошей, если для каждых \(2\) различных отрезков \(A\) и \(B\) из этих, для них выполняется хотя бы одно из следующих условий:

  • Один из отрезков \(A\) и \(B\) полностью содержится внутри другого.
  • \(A\) и \(B\) имеют одинаковую длину.

Рассмотрим следующий пример:

\(A\) — хорошее разбиение на пары, так как красный отрезок полностью лежит внутри синего отрезка.

\(B\) — хорошее разбиение, так как красный и синий отрезки имеют одинаковую длину.

\(C\) не является хорошим разбиением, так как ни один из красного и синего отрезков не лежит внутри другого, и они имеют разную длину.

Kavi интересует количество хороших разбиений на пары, поэтому он хочет, чтобы вы нашли его для него. Поскольку результат может быть большим, найдите это число по модулю \(998244353\).

Два разбиения на пары называются различными, если в одном из них какие-то две точки находятся в одной паре, а в другом — в разных парах.

Входные данные

Единственная строка ввода содержит единственное целое число \(n\) \((1\le n \le 10^6)\).

Выходные данные

Выведите количество хороших пар по модулю \(998244353\).

Примечание

Хорошими разбиениями на пары для второго примера являются:

Хорошими разбиениями на пары для третьего примера являются:

E. Mashtali и деревья Hagh

Деревья дп Комбинаторика *2900

Сегодня у Mashtali день рождения! Он получил в подарок от Haj Davood дерево Hagh!

Ориентированное дерево называется деревом Hagh, если:

  • Длина самого длинного ориентированного пути в нем равна ровно \(n\).
  • Каждая вершина имеет не более трех ребер, присоединенных к ней (исходящих и входящих вместе).
  • Назовем вершины \(u\) и \(v\) друзьями, если из одной из них есть ориентированный путь к другой. Для каждой пары вершин \(u\) и \(v\), которые не являются друзьями, должна существовать вершина \(w\), которая дружит и с \(u\), и с \(v\) (общий друг).

Открыв свой подарок, Mashtali обнаружил, что номера вершин с вершин исчезли.

Тогда он спросил себя: сколько существует различных непомеченных деревьев Hagh? Другими словами, сколько возможных деревьев он мог получить в подарок на день рождения?

На первый взгляд, число таких деревьев кажется бесконечным, поскольку нет никакого ограничения на количество вершин; но затем он решил задачу и доказал, что непомеченых деревьев Hagh есть всего конечное число!

Пораженный этим фактом, он поделился задачей с вами, чтобы вы тоже могли насладиться ее решением. Поскольку ответ может быть довольно большим, он попросил вас найти количество различных деревьев Hagh по модулю \(998244353\).

Здесь два дерева считаются различными, если они не изоморфны: если нет способа поставить в соответствие вершины одного дерева вершинам второго дерева так, чтобы ребрам первого ставились в соответствие ребра второго, с сохранением ориентации.

Некоторые примеры для \(n = 2\):

Ориентированные деревья \(D\) и \(E\) являются деревьями Hagh. \(C\) не является Hagh, потому что имеет вершину с \(4\) ребрами, присоединенными к ней. Деревья \(A\) и \(B\) не являются Hagh, потому что их самые длинные ориентированные пути не имеют длину \(n\). Также в \(B\) крайние левая и правая вершины не являются друзьями и не имеют общих друзей.
Входные данные

Первая строка ввода содержит единственное целое число \(n\) \((1 \le n \le 10^6)\).

Выходные данные

Выведите одно целое число, ответ на задачу Mashtali по модулю \(998244353\).

Примечание

Вот все пять деревьев Hagh для \(n = 1\):

F. Бинго

битмаски дп Комбинаторика математика Теория вероятностей *2600

В предвкушении VK Fest 2021 вы составили себе табличку из \(n\) строк и \(n\) столбцов, и в каждую ячейку этой таблички записали некоторое событие, связанное с фестивалем, которое может произойти или нет — например, удастся ли вам выиграть на фестивале приз, или пойдёт ли дождь.

Алгоритмы предсказания ВКонтакте уже оценили для каждого события вероятность того, что оно произойдёт. Событие в строке \(i\) и столбце \(j\) произойдёт с вероятностью \(a_{i, j} \cdot 10^{-4}\). При этом все события совместно независимы друг от друга.

Назовём табличку с событиями выигрышной, если найдётся такая линия, на которой произойдут все \(n\) событий. Линией считается любая горизонталь (ячейки \((i, 1), (i, 2), \ldots, (i, n)\) для некоторого \(i\)), любая вертикаль (ячейки \((1, j), (2, j), \ldots, (n, j)\) для некоторого \(j\)), главная диагональ (ячейки \((1, 1), (2, 2), \ldots, (n, n)\)) и побочная диагональ (ячейки \((1, n), (2, n - 1), \ldots, (n, 1)\)).

Определите вероятность того, что ваша табличка окажется выигрышной, и выведите её по модулю \(31\,607\) (см. формат вывода).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 21\)) — длина стороны таблички.

В \(i\)-й из следующих \(n\) строк задано \(n\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, n}\) (\(0 < a_{i, j} < 10^4\)). Вероятность того, что событие в ячейке таблицы \((i, j)\) произойдёт, равна \(a_{i, j} \cdot 10^{-4}\).

Выходные данные

Выведите вероятность того, что табличка окажется выигрышной, по модулю \(31\,607\).

Формально, пусть \(M = 31\,607\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом примере любые два события образуют линию, поэтому табличка будет выигрышной, если произойдут любые два события. Вероятность этого равна \(\frac{11}{16}\), а \(5927 \cdot 16 \equiv 11 \pmod{31\,607}\).

H. Премия Тьюринга

дп Структуры данных *3400

Алан Тьюринг стоит на бесконечной в обе стороны ленте, разделённой на ячейки.

Ячейки пронумерованы слева направо подряд идущими целыми числами, а Алан изначально стоит в ячейке \(0\). Слева от любой ячейки \(x\) находится ячейка \(x - 1\), а справа — ячейка \(x + 1\).

Каждая ячейка может либо содержать целое число, либо быть пустой. Изначально все ячейки пусты.

Алану выдали перестановку \(a_1, a_2, \ldots, a_n\) чисел от \(1\) до \(n\), выбранную случайно равновероятно среди всех перестановок длины \(n\).

В момент времени \(1\) в ячейку \(0\), в которой находится Алан, записывается число \(a_1\).

В каждый момент времени \(i\) до \(2\) до \(n\) включительно происходит следующее. Сначала Алан принимает решение, остаться ли ему в той же ячейке, где он сейчас находится, сдвинуться на соседнюю ячейку слева, или же сдвинуться на соседнюю ячейку справа. После этого в ту ячейку, где находится Алан, записывается число \(a_i\). Если ячейка уже содержала некоторое число, старое число перезаписывается и больше не играет роли.

После того, как в момент времени \(n\) в некоторую ячейку будет записано число \(a_n\), сформируется последовательность \(b\) из всех чисел, записанных в ячейках, слева направо. Пустые ячейки игнорируются.

Премия Тьюринга будет равна длине наибольшей возрастающей подпоследовательности последовательности \(b\).

Помогите Алану и определите, каков максимальный возможный размер его премии, если он будет действовать оптимально.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждый набор входных данных задан на двух строках. Первая строка набора входных данных содержит целое число \(n\) (\(2 \le n \le 15\,000\)) — длину перестановки, предоставленной Алану.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы перестановки.

Гарантируется, что перестановка была выбрана случайно равновероятно среди всех перестановок соответствующей длины.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(15\,000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальный возможный размер премии Тьюринга.

Взломы в этой задаче запрещены.

Примечание

Наибольшая возрастающая подпоследовательность последовательности \(b\) — это самая длинная возрастающая последовательность, которую можно получить удалением нескольких (возможно, ни одного или всех) элементов из \(b\).

В первом наборе входных данных Алан может принять решение только в момент времени \(2\). Если Алан останется в ячейке \(0\), последовательность \(b\) будет равна \([2]\). Если Алан сдвинется влево, в ячейку \(-1\), последовательность \(b\) будет равна \([2, 1]\). Если Алан сдвинется вправо, в ячейку \(1\), последовательность \(b\) будет равна \([1, 2]\). Только в последнем случае длина наибольшей возрастающей подпоследовательности в \(b\) равна \(2\), следовательно, ответ равен \(2\).

Во втором наборе входных данных одна из оптимальных последовательностей действий такова: сдвинуться влево в моменты времени \(2\) и \(3\), и сдвинуться вправо в момент времени \(4\). Тогда последовательность \(b\) будет равна \([2, 3, 4]\), длина её наибольшей возрастающей подпоследовательности — \(3\).

В третьем наборе входных данных один из оптимальных способов — всё время сдвигаться влево. Тогда последовательность \(b\) будет равна \([2, 1, 4, 7, 5, 6, 3]\), длина её наибольшей возрастающей подпоследовательности — \(4\).

В четвёртом наборе входных данных один из оптимальных способов — четырежды сдвинуться вправо, далее один раз сдвинуться влево, и один раз остаться на месте. Последовательность \(b\) будет равна \([5, 2, 3, 4, 6]\).

C. Симметричный амфитеатр

*особая задача дп Конструктив

Все готовятся к VK Fest 2021! Для того, чтобы зрителям была лучше видна главная сцена, планируется построить амфитеатр. В этой задаче мы будем рассматривать его сбоку — схематично он будет иметь форму лестницы из \(n\) одинаковых квадратов. Лестница — это одна или более башен квадратов, выстроенных в ряд, где высоты башен невозрастают слева направо.

На следующем рисунке можно видеть три разные фигуры из \(12\) квадратов. Первые две фигуры — лестницы, а третья — нет.

Из эстетических соображений было решено, что амфитеатр должен быть симметричным. Формально, амфитеатр называется симметричным, если при отражении его схемы относительно прямой \(x = y\) получается тот же самый рисунок (где ось \(x\) направлена слева направо, а ось \(y\) — снизу вверх). Например, первая лестница на рисунке выше — симметричная, а вторая — нет.

Кроме того, амфитеатр должен быть максимально компактным — а именно, сторона минимального квадрата, внутрь которого можно его поместить, должна быть как можно меньше.

По заданному числу \(n\) нарисуйте схему амфитеатра из ровно \(n\) квадратов, удовлетворяющую всем условиям.

Входные данные

В единственной строке задано одно целое число \(n\) (\(1 \le n \le 100\)) — число квадратов, из которых нужно составить схему амфитеатра.

Выходные данные

Если не существует схемы амфитеатра из \(n\) квадратов, выведите единственное число \(-1\).

Иначе в первой строке выведите целое число \(m\) — минимальное возможное число строк и столбцов в схеме амфитеатра. Далее выведите \(m\) строк, описывающих схему. Каждая строка должна содержать ровно \(m\) символов 'o' (строчная латинская буква) или '.', где 'o' описывает построенный квадрат, а '.' — пустое место. Схема амфитеатра должна состоять ровно из \(n\) символов 'o'. Ячейка в левом нижнем углу должна содержать квадрат. Если возможных ответов с минимальным \(m\) несколько, выведите любой из них.

H. Подматрицы

*особая задача битмаски дп Структуры данных

Вам дана матрица \(s\), содержащая \(n\) строк и \(m\) столбцов. Каждый элемент матрицы представляет собой одну из первых \(5\) латинских букв (в верхнем регистре).

Для каждого \(k\) (\(1 \le k \le 5\)) посчитайте количество подматриц, содержащих ровно \(k\) различных букв. Напомним, что подматрица матрицы \(s\) — это матрица, которую можно получить из \(s\) после удаления нескольких (возможно, нуля) первых строк, нескольких (возможно, нуля) последних строк, нескольких (возможно, нуля) первых столбцов и нескольких (возможно, нуля) последних столбцов. Если некоторая подматрица может быть получена из \(s\) двумя или более способами, вы должны учесть эту подматрицу соответствующее количество раз.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 800\)).

Затем следует \(n\) строк, каждая из которых содержит строку \(s_i\) (\(|s_i| = m\)) — \(i\)-я строка матрицы.

Выходные данные

Для каждого \(k\) (\(1 \le k \le 5\)) выведите одно целое число — количество подматриц, содержащих ровно \(k\) различных букв.

C. Головоломка маленького Алана

графы дп Комбинаторика математика снм *1300

Во время перерывов в подготовке к Международной олимпиаде школьников по информатике маленький Алан любит решать различные головоломки, чтобы развивать мозги. Сегодня он решает головоломку, которая выглядит как таблица \(2 \times n\), где в каждом ряду записана перестановка чисел \(1,2,3,\ldots,n\).

Задача головоломки — сделать так, чтобы ни в каком ряду и ни в каком столбце не было двух одинаковых чисел (назовем такие состояния решенными), а единственная разрешенная операция — поменять местами два числа в одном столбце. Когда маленький Алан решил головоломку много раз, он заскучал и начал размышлять, а сколько вообще существует различных решенных состояний в данной головоломке, которые он может получить из некоторого начального решенного состояния, применяя только разрешенные операции?

Маленький Алан не справился с этой сложной задачей, поэтому он попросил вас помочь ему. Найдите ответ по модулю \(10^9+7\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(2 \le n \le 4 \cdot 10^5\)).

Следующие две строки описывают начальное состояние головоломки. Каждая строка содержит перестановку чисел \(1,2,3,\ldots,n\), и числа в каждом столбце и в каждой строке различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество решенных состояний головоломки, которые можно получить из данного, меняя местами числа в столбцах. Так как ответ может быть большим, выведите его по модулю \(10^9+7\).

Примечание

Два возможных решенный состояния в примере \(1\):

  • \([1,4,2,3]\) в первой строке, и \([3,2,1,4]\) во второй,
  • \([3,2,1,4]\) в первой строке, и \([1,4,2,3]\) во второй.

F2. Падающий песок (сложная версия)

графы дп жадные алгоритмы поиск в глубину и подобное *3000

Это сложная версия задачи. Разница в версиях заключается в ограничениях на \(a_i\). Вы можете делать взломы, только если обе версии задачи решены.

Маленький Дорми недавно получил головоломку от своего друга, и ему требуется ваша помощь для ее решения.

Головоломка состоит из вертикальной доски с \(n\) строками и \(m\) столбцами, некоторые ячейки на доске пустые, а некоторые заполнены песком. Также даны \(m\) неотрицательных целых чисел \(a_1,a_2,\ldots,a_m\) (\(0 \leq a_i \leq n\)). В этой версии задачи \(a_i\) всегда не превышает количества ячеек с песком в столбце \(i\).

Если стукнуть по ячейке, заполненной песком, то весь песок из ячейки упадет вниз на счетчик песка своего столбца (в каждом столбце есть счетчик песка). Когда песок падает, весь песок, в какой-либо момент находящийся в соседней ячейке с падающим песком, тоже начинает падать. А именно, если песок начинает падать из ячейки \((i,j)\), то он будет падать через все ячейки ниже в этом столбце, включая саму ячейку \((i,j)\), вызывая падения во всех ячейках, соседних к какой-либо ячейке на пути. Соседними к ячейке \((i,j)\) являются ячейки \((i-1,j)\), \((i,j-1)\), \((i+1,j)\) и \((i,j+1)\) (если такие существуют). Обратите внимание, что новые падающие ячейки песка тоже вызывают падение соседних ячеек.

За одну операцию вы можете стукнуть по одной ячейке с песком. Головоломка решена, если на счетчике песка в \(i\)-м столбце находится не менее \(a_i\) ячеек с песком для всех столбцов от \(1\) до \(m\).

Вам нужно определить минимальное количество операций, необходимое, чтобы решить головоломку, или сказать, что это невозможно. Маленький Дорми никогда не даст вам головоломку, которую нельзя решить.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \cdot m \leq 400\,000\)).

Каждая из следующих \(n\) строк содержит \(m\) символов, описывающих очередную строку таблицы сверху вниз. Символ «.» обозначает пустую ячейку, а «#» обозначает ячейку с песком.

Последняя строка содержит \(m\) неотрицательных целых чисел \(a_1,a_2,\ldots,a_m\) (\(0 \leq a_i \leq n\)) — минимальное количество ячеек с песком, которые должны упасть на счетчик песка в каждом столбце. В этой версии задачи \(a_i\) всегда не превышает количества ячеек с песком в столбце \(i\).

Выходные данные

Выведите одно целое число — минимальное количество операций, необходимое, чтобы решить головоломку.

Примечание

В примере \(1\) можно стукнуть по ячейке в левом верхнем углу, и по ячейке в третьей строке сверху в шестом столбце слева. Тогда на счетчики песка упадет необходимый объем песка в каждом столбце. Можно показать, что нельзя решить головоломку менее чем за \(3\) операции, и поэтому ответ равен \(3\). Ниже приведен рисунок к первому примеру.

В примере \(2\) можно стукнуть по ячейке в верхнем ряду в правом столбце, и весь песок в таблице упадет вниз. Поэтому ответ равен \(1\). Ниже приведен рисунок ко второму примеру.

В примере \(3\) можно стукнуть по ячейке в верхнем ряду в правом столбце, и в каждом столбце упадет достаточно песка. Можно показать, что невозможно решить головоломку за менее, чем \(1\) операцию, поэтому ответ \(1\). Ниже приведен рисунок ко второму примеру.

G. Новое начало

геометрия дп сортировки Структуры данных *3300

Анни устала выигрывать все контесты и получать бесконечный рейтинг, поэтому сегодня вместо контеста она поехала сажать картошку.

Участок Анни можно представить в виде бесконечной плоскости. Анни должна посадить \(n\) кустов картошки, \(i\)-й куст должен быть посажен в точке \((x_i,y_i)\). Анни начнет в точке \((0, 0)\), и за один шаг будет перемещаться на одну единицу длины вправо или вверх (т. е. увеличивать свою координату \(x\) или \(y\) на \(1\)). Из любой точки \((X,Y)\) в процессе движения она может посадить любое количество кустов в любых точках плоскости, используя свою картофельную пушку. Для посадки одного куста в точку \((x,y)\) требуется \(\max(|X-x|,|Y-y|)\) единиц энергии. Найдите минимальное количество энергии, необходимое для посадки всех кустов картошки.

Обратите внимание, что Анни может посадить любое количество кустов из любой точки.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 800\,000\)).

Следующие \(n\) строк содержат по два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i,y_i \le 10^9\)), определяющие требуемое положение \(i\)-го куста картошки. Возможно, некоторые кусты картошки требуется посадить в одно и то же место.

Выходные данные

Выведите минимальное количество энергии, необходимое для посадки всей картошки.

Примечание

В примере \(1\) Анни может посетить все необходимые точки, поэтому энергия не требуется.

В примере \(2\) Анни сначала может пойти в \((1,0)\), посадить оттуда второй куст, используя \(1\) единицу энергии. Затем она пойдет в \((1,1)\) и посадит первый куст, используя \(0\) единиц энергии.

H. Потерянные вершины

графы Деревья дп интерактив Конструктив сортировки *3500

Это интерактивная задача.

Так как маленький Эрики прошел на Международную олимпиаду школьников по информатике в этом году, он получил подарок от своих друзей: дерево с \(n\) вершинами!

По пути к месту проведения Эрики было скучно, поэтому он решил сыграть в игру с маленьким Ивонном с использованием нового дерева. Сначала Ивонн загадывает две (не обязательно различные) вершины \(a\) и \(b\) в этом дереве (не сообщая их Эрики), а затем сообщает ему подсказку \(f\) — одну из вершин на простом пути от \(a\) до \(b\).

Затем маленький Эрики может спрашивать следующие вопросы:

Задача маленького Эрики — найти вершины \(a\) и \(b\).

Маленький Ивонн считает игру слишком простой, поэтому в начале игры, перед тем, как дать подсказку \(f\), он просит Эрики найти максимальное количество запросов, необходимых для нахождения \(a\) и \(b\) для всех возможных значений \(a\), \(b\) и \(f\) в предположении, что Эрики действует оптимально. Под оптимальными действиями подразумевается стратегия, делающая наименьшее число запросов. Конечно, после того, как маленький Эрики скажет это максимальное количество запросов, Ивонн не разрешит сделать больше запросов в самой игре.

Дерево, \(a\), \(b\) и \(f\) фиксированы до начала игры и не меняются в зависимости от запросов.

Протокол взаимодействия

Сначала считайте строку, содержащую одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество вершин в дереве.

Сделающие \(n−1\) строк описывают дерево маленького Дорми. Каждая из этих строк содержит два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), обозначающие ребро между вершинами \(u\) и \(v\) (\(u \neq v\)). Гарантируется, что эти ребра образуют дерево.

После этого вы должны вывести \(k\) — максимальное число запросов, необходимое для определения \(a\) и \(b\) по всем возможным значениям \(a\), \(b\) и \(f\) в предположении оптимальной игры. Вы должны вывести перевод строки и сбросить буфер вывода после вывода \(k\).

Затем считайте одно целое число \(f\) (\(1 \le f \le n\)) — подсказку: вершину на пути от \(a\) до \(b\) включительно.

После этого вы можете делать запросы. Вам будет разрешено сделать не более \(k\) запросов, где \(k\) — число, которое вы вывели.

Для того, чтобы сделать запрос, выведите «? r», где \(r\) — целое число, \(1 \le r \le n\), обозначающее, за какую вершину вы хотите подвесить дерево.

В ответ вы получите целое число \(x\) (\(1 \le x \le n\)) — наименьший общий предок вершин \(a\) и \(b\), если дерево подвесить за \(r\).

Когда ваша программа определит \(a\) и \(b\), выведите их в следующем формате: «! a b», где \(a\) и \(b\) — две загаданные вершины, и завершите программу сразу после сброса буфера вывода. Вы можете вывести \(a\) и \(b\) в любом порядке.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если вы сделаете некорректный вывод, или сделаете более \(k\) запросов, взаимодействие прекратится и вы получите вердикт «Неправильный ответ». Вывод считается некорректным, если это некорректный запрос, или вы вывели \(k\), меньшее \(0\) или большее \(n\).

Взломы

Чтобы взломать решение, используйте следующий формат:

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Следующие \(n−1\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), обозначающие ребро между вершинами \(u\) и \(v\) (\(u \neq v\)). Эти \(n-1\) ребра должны образовывать дерево.

Следующая строка содержит два целых числа \(a\) и \(b\) (\(1 \le a,b \le n\)).

Последняя строка должна содержать одно целое число \(f\) (\(1 \le f \le n\)). Вершина \(f\) должна лежать на простом пути от \(a\) до \(b\) включительно.

Примечание

Дерево из первого примера показано ниже. Вершины \(a\) и \(b\) выделены жирным.

Обратите внимание, что вы можете вывести \(a\) и \(b\) в любом порядке.

Ниже приведены ответы на все возможные запросы \(1,2,\ldots,n\):

  • \(1\): \(1\)
  • \(2\): \(2\)
  • \(3\): \(2\)
  • \(4\): \(4\)

__________________________________________

Дерево из второго примера показано ниже. Вершины \(a\) и \(b\) выделены жирным.

Ниже приведены ответы на все возможные запросы \(1,2,\ldots,n\) в примере \(2\):

  • \(1\): \(1\)
  • \(2\): \(4\)
  • \(3\): \(1\)
  • \(4\): \(4\)
  • \(5\): \(4\)

C. Нестабильная строка

Бинарный поиск дп жадные алгоритмы реализация Строки *1400

Вам задана строка \(s\), состоящая из символов 0, 1 и ?.

Назовем строку нестабильной, если она состоит из символов 0 и 1 и любые два соседних символа различаются (т. е. имеет вид 010101... или 101010...).

Назовем строку красивой, если она состоит из символов 0, 1 и ?, и в ней можно заменить символы ? на 0 или 1 (для каждого символа выбор происходит независимо), чтобы строка стала нестабильной.

Например, строки 0??10, 0 и ??? являются красивыми, а строки 00 и ?1??1 — нет.

Посчитайте количество красивых непрерывных подстрок строки \(s\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)), состоящую из символов 0, 1 и ?.

Гарантируется, что сумма длин строк по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выходных данных выведите одно целое число — количество красивых подстрок строки \(s\).

D. Плей-офф турнир

Деревья дп поиск в глубину и подобное реализация Структуры данных *1800

\(2^k\) команд участвуют в плей-офф турнире. Турнир состоит из \(2^k - 1\) игры. Они проводятся следующим образом: во-первых, команды делятся на пары: команда \(1\) играет против команды \(2\), команда \(3\) играет против команды \(4\) (именно в таком порядке) и так далее (таким образом, в этой фазе будет сыграно \(2^{k-1}\) игры). Когда команда проигрывает игру, она выбывает, и каждая игра приводит к выбыванию одной команды (нет ничьих). После этого остается \(2^{k-1}\) команд. Если остается только одна команда, она объявляется чемпионом; в противном случае играется еще \(2^{k-2}\) игр: в первой из них победитель игры «\(1\) против \(2\)» играет против победителя игры «\(3\) против \(4\)», затем победитель игры «\(5\) против \(6\)» играет против победителя игры «\(7\) против \(8\)» и так далее. Этот процесс повторяется до тех пор, пока не останется только одна команда.

Например, на этом рисунке описан хронологический порядок игр с \(k = 3\):

Пусть строка \(s\), состоящая из \(2^k - 1\) символов, описывает результаты игр в хронологическом порядке следующим образом:

  • если \(s_i\) равно 0, то команда с меньшим индексом выигрывает \(i\)-ю игру;
  • если \(s_i\) равно 1, то команда с большим индексом выигрывает \(i\)-ю игру;
  • если \(s_i\) равно ?, то результат \(i\)-й игры неизвестен (любая команда может выиграть эту игру).

Пусть \(f(s)\) — число возможных победителей турнира, описываемого строкой \(s\). Команда \(i\) является возможным победителем турнира, если можно заменить каждый ? на 1 или 0 таким образом, что команда \(i\) является чемпионом.

Вам дается начальное состояние строки \(s\). Вы должны обработать \(q\) запросов следующей формы:

  • \(p\) \(c\) — заменить \(s_p\) символом \(c\) и вывести \(f(s)\) в результате запроса.
Входные данные

Первая строка содержит одно целое число \(k\) (\(1 \le k \le 18\)).

Вторая строка содержит строку, состоящую из \(2^k - 1\) символов — начальное состояние строки \(s\). Каждый символ либо ?, 0, либо 1.

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Затем следует \(q\) строк, строка \(i\) содержит целое число \(p\) и символ \(c\) (\(1 \le p \le 2^k - 1\); \(c\) - это либо ?, 0, либо 1), описывающие запрос \(i\).

Выходные данные

Для каждого запроса выведите одно целое число — \(f(s)\).

E. Поставки золота

Бинарный поиск Деревья дп жадные алгоритмы интерактив Структуры данных *2200

Вам задано корневое дерево. Каждая вершина дерева содержит \(a_i\) тонн золота, стоящее \(c_i\) за тонну. Первоначально, дерево состоит только из корня с номером \(0\), в котором \(a_0\) тонн золота с ценой \(c_0\) за тонну.

Всего есть \(q\) запросов. Каждый запрос одного из двух видов:

  1. Подвесить вершину \(i\) (где \(i\) — это номер запроса) за некоторую вершину \(p_i\); вершина \(i\) будет содержать \(a_i\) тонн золота с ценой \(c_i\) за тонну. Гарантируется, что \(c_i > c_{p_i}\).
  2. Для заданной вершины \(v_i\) рассмотрим простой путь от \(v_i\) к корню. Нам нужно приобрести \(w_i\) тонн золота из вершин на этом пути, потратив наименьшее количество денег. Если на этом пути недостаточно золота, мы покупаем все что можно.

Если мы покупаем \(x\) тон золота в некоторой вершине \(v\), то оставшееся количество золота в ней уменьшается на \(x\) (очевидно, мы не можем купить больше золота, чем есть в вершине на данный момент). Для каждого запроса второго вида посчитайте, сколько тонн золота мы купим в результате и сколько мы на это потратим.

Заметим, что вы должны решить данную задачу в онлайне. То есть вы не можете считать все входные данные заранее. Вы можете считать очередной запрос только после того как выведете ответ на предыдущий, поэтому не забывайте сбрасывать поток вывода после вывода ответа. Вы можете использовать такие функции как fflush(stdout) в C++, BufferedWriter.flush в Java или похожие после каждого вывода в программе. По стандарту (если вы не модифицировали I/O), endl сбрасывает cout в C++, а System.out.println в Java (или println в Kotlin) сбрасывают поток вывода автоматически.

Входные данные

В первой строке заданы три целых числа \(q\), \(a_0\) и \(c_0\) (\(1 \le q \le 3 \cdot 10^5\); \(1 \le a_0, c_0 < 10^6\)) — количество запросов, количество золота в корне и его цена за тонну.

В следующих \(q\) строках заданы описания запросов: \(i\)-й запрос имеет один из следующих видов:

  • «\(1\) \(p_i\) \(a_i\) \(c_i\)» (\(0 \le p_i < i\); \(1 \le a_i, c_i < 10^6\)): подвесить вершину \(i\) за вершину \(p_i\). Вершина \(i\) будет содержать \(a_i\) тонн золота по цене \(c_i\) за тонну. Гарантируется, что вершина \(p_i\) существует и \(c_i > c_{p_i}\).
  • «\(2\) \(v_i\) \(w_i\)» (\(0 \le v_i < i\); \(1 \le w_i < 10^6\)): приобрести \(w_i\) тонн золота из вершин на пути из \(v_i\) в \(0\), потратив минимальное количество денег. Если на пути золота недостаточно, мы покупаем все что есть. Гарантируется, что вершина \(v_i\) существует.

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Для каждого запроса второго вида, выведите сколько тонн золота мы смогли купить и сколько на это потратили.

Примечание

Рассмотрим пример:

В первом запросе, дерево состоит только из корня, поэтому мы приобретаем \(2\) тонны золота и платим \(2 \cdot 2 = 4\). В корне осталось \(3\) тонны.

Во втором запросе, вы подвешиваем вершину \(2\) за вершину \(0\). В вершине \(2\) сейчас \(3\) тонны золота по цене \(4\) за тонну.

В третьем запросе, простой путь из \(2\) в \(0\) содержит только вершины \(0\) и \(2\), а так как \(c_0 < c_2\), мы покупаем оставшиеся \(3\) тонны золота в вершине \(0\) и \(1\) тонну в вершине \(2\). Таким образом, мы приобрели \(3 + 1 = 4\) тонны и заплатили \(3 \cdot 2 + 1 \cdot 4 = 10\). Теперь, вершина \(0\) осталась без золота, а вершине \(2\) осталось \(2\) тонны золота.

В четвертом запросе, мы подвешиваем вершину \(4\) за вершину \(0\). В вершине \(4\) сейчас \(1\) тонна золота по цене \(3\).

В пятом запросе, простой путь из \(4\) в \(0\) состоит только из вершин \(0\) и \(4\). Но так как в вершине \(0\) уже нет золота, а в вершине \(4\) только \(1\) тонна, то мы покупаем \(1\) тонну из вершины \(4\) и тратим \(1 \cdot 3 = 3\). Теперь в вершине \(4\) больше не осталось золота.

C. Diluc и Kaeya

дп Структуры данных теория чисел хэши *1500

Магнат винодельческой империи в Мондштадте, непревзойденный во всех отношениях. Мыслитель из рыцарей Фавониуса с экзотической внешностью}.

На этот раз братья имеют дело со странным куском дерева, помеченного их именами. Этот кусок дерева можно представить в виде строки из \(n\) символов. Каждый символ — это либо 'D', либо 'K'. Вы хотите сделать некоторое количество разрезов (возможно, \(0\)) в этой строке, разделив ее на несколько последовательных частей, каждая из которых имеет длину не менее \(1\). Оба брата ведут себя достойно, поэтому они хотят разделить дерево как можно более равномерно. Они хотят знать, на какое максимальное число кусков можно разделить дерево, чтобы отношение числа символов 'D' и числа символов 'K' в каждом куске было одинаковым.

Kaeya, любознательный мыслитель, хотел бы знать решение сразу для нескольких сценариев. Он хочет узнать ответ для каждого префикса данной строки. Помогите ему решить эту задачу!

Для строки мы определяем отношение как \(a:b\), где 'D' встречается в ней \(a\) раз, а 'K' встречается \(b\) раз. Обратите внимание, что \(a\) или \(b\) могут быть равны \(0\), но не оба. Отношения \(a:b\) и \(c:d\) считаются равными тогда и только тогда, когда \(a\cdot d = b\cdot c\).

Например, для строки 'DDD' отношение будет \(3:0\), для 'DKD'\(2:1\), для 'DKK'\(1:2\), а для 'KKKKDD'\(2:4\). Обратите внимание, что отношения двух последних строк равны между собой, но не равны отношениям первых двух строк.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 1000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)) — длина дерева.

Вторая строка каждого набора входных данных содержит строку \(s\) длиной \(n\). Каждый символ \(s\) будет либо 'D', либо 'K'.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел через пробел. \(i\)-е из этих чисел должно быть равно ответу для префикса \(s_{1},s_{2},\dots,s_{i}\).

Примечание

Для первого набора входных данных нет способа разбить 'D' или 'DDK' на более чем один блок с равным отношением количеств 'D' и 'K', в то время как 'DD' можно разбить на 'D' и 'D'.

Для второго набора входных данных, каждый префикс длины \(i\) вы можете разделить на \(i\) блоков 'D'.

E1. Удаляй и удлиняй (простая версия)

Бинарный поиск дп жадные алгоритмы Перебор реализация Строки строковые суфф. структуры хэши *1600

Это простая версия задачи. Единственное отличие — это ограничения на \(n\) и \(k\). Вы можете делать взломы, только если все версии задачи решены.

У вас есть строка \(s\), и вы можете выполнять над ней два типа операций:

  • Удалить последний символ строки.
  • Дублировать строку: \(s:=s+s\), где \(+\) обозначает конкатенацию.

Вы можете использовать каждую операцию любое количество раз (возможно, ни одного).

Ваша задача — найти лексикографически наименьшую строку длины ровно \(k\), которую можно получить, выполнив эти операции над строкой \(s\).

Строка \(a\) лексикографически меньше строки \(b\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(a\) является префиксом \(b\), но \(a\ne b\);
  • В первой позиции, где \(a\) и \(b\) отличаются, строка \(a\) имеет букву, которая появляется раньше в алфавите, чем соответствующая буква в \(b\).
Входные данные

Первая строка содержит два целых числа \(n\), \(k\) (\(1 \leq n, k \leq 5000\)) — длину исходной строки \(s\) и длину желаемой строки.

Вторая строка содержит строку \(s\), состоящую из \(n\) строчных английских букв.

Выходные данные

Выведите лексикографически наименьшую строку длины \(k\), которая может быть получена путем выполнения операций над строкой \(s\).

Примечание

В первом тесте оптимально сделать одно дублирование: «dbcadabc» \(\to\) «dbcadabcdbcadabc».

Во втором тесте оптимально удалить последние \(3\) символа, затем продублировать строку \(3\) раза, затем удалить последние \(3\) символов, чтобы строка имела длину \(k\).

«abcd» \(\to\) «abc» \(\to\) «ab» \(\to\) «a» \(\to\) «aa» \(\to\) «aaaa» \(\to\) «aaaa» \(\to\) «aaaa» \(\to\) «aaaa» \(\to\) «aaaa».

A. Каменная игра

дп жадные алгоритмы Перебор *800

Поликарп играет в новую компьютерную игру. В этой игре есть \(n\) камней, выстроенных в ряд и пронумерованных слева направо. Камень с номером \(i\) обладает целочисленной силой \(a_i\). Силы всех камней различны.

Каждый ход Поликарп может уничтожить либо камень с наименьшим номером, либо камень с наибольшим номером (другими словами, либо самый левый, либо самый правый) из еще не уничтоженных камней.

Сейчас Поликарп хочет получить два достижения. Он получит их, если уничтожит камень с наименьшей силой и камень с наибольшей силой. Помогите Поликарпу узнать, какое минимальное количество ходов он должен сделать, чтобы добиться своей цели.

Например, если \(n = 5\) и \(a = [1, 5, 4, 3, 2]\), то Поликарп мог делать следующие ходы:

  • Уничтожить самый левый камень. После этого хода \(a = [5, 4, 3, 2]\).
  • Уничтожить самый правый камень. После этого хода \(a = [5, 4, 3]\).
  • Уничтожить самый левый камень. После этого хода \(a = [4, 3]\). Поликарп уничтожил камни с наибольшей и наименьшей силой, поэтому может заканчивать игру.

Обратите внимание, что в примере выше можно закончить игру и за два шага. Например:

  • Уничтожить самый левый камень. После этого хода \(a = [5, 4, 3, 2]\).
  • Уничтожить самый левый камень. После этого хода \(a = [4, 3, 2]\). Поликарп уничтожил камни с наибольшей и наименьшей силой, поэтому может заканчивать игру.

Найдите минимальное количество ходов, необходимое для уничтожения камней с наибольшей и наименьшей силой.

Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 100\)). Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(2 \le n \le 100\)) — количество камней.

Во второй строке находится \(n\) целых различных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — силы камней.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество ходов, необходимое для уничтожения камней с наибольшей и наименьшей силой.

F. Интересная функция

Бинарный поиск дп математика теория чисел *1500

Вам заданы два целых числа \(l\) и \(r\), где \(l < r\). Будем прибавлять \(1\) к \(l\) до тех пор, пока результат не окажется равным \(r\). Таким образом, будет сделано ровно \(r-l\) прибавлений единицы. Для каждого такого прибавления посмотрим на количество цифр, которые будут изменены при этом прибавлении. Например:

  • если \(l=909\), то прибавление единицы приведёт к результату \(910\) и будут изменены \(2\) цифры;
  • если к \(l=9\) прибавить единицу, то результат будет равен \(10\) и будут изменены тоже \(2\) цифры;
  • если к \(l=489999\) прибавить единицу, то результат будет равен \(490000\) и будут изменены \(5\) цифр.

Изменённые цифры всегда образуют некоторый суффикс десятичной записи результата.

Выведите суммарное количество изменённых цифр, если требуется из \(l\) получить \(r\), прибавляя каждый раз \(1\).

Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Каждый дабор входных данных характеризуется двумя целыми числами \(l\) и \(r\) (\(1 \le l < r \le 10^9\)).

Выходные данные

Для каждого набора входных данных вычислите суммарное количество изменённых цифр, если требуется из \(l\) получить \(r\), прибавляя каждый раз единицу.

B. Песня о любви

дп реализация Строки *800

Однажды Петя в очередной раз написал грустную песню про любовь и поспешил показать ее Васе. Песня представляет собой строку из маленьких букв английского алфавита. У Васи сразу возникло \(q\) вопросов про эту песню. Каждый вопрос представляет собой некоторый отрезок песни с позиции \(l\) до позиции \(r\). Вася рассматривает подстроку, образованную символами на этом отрезке, а затем повторяет каждую букву в этой подстроке \(k\) раз, где \(k\) — порядковый номер буквы в алфавите. Например, если Вася выбрал подстроку «abbcb», то он повторит букву «a» один раз, каждую из букв «b» — по два раза, букву «c» — три раза, и полученная строка будет равна «abbbbcccbb», ее длина равна \(10\). Вася интересуется именно длиной полученной строки.

Помогите Пете ответить Васе на его вопросы, а именно, для каждого из заданных вопросов определите длину строки, которую выпишет Вася.

Входные данные

В первой строке вводятся числа \(n\) и \(q\) (\(1\leq n\leq 100\,000\), \(1\leq q \leq 100\,000\)) — длина песни и количество вопросов.

Во второй строке дана строка \(s\) — сама песня, представляющая собой строку длины \(n\) из маленьких букв английского алфавита.

В следующих \(q\) строках даны описания вопросов. Каждое описание состоит из двух чисел \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)) — границы каждого из вопросов.

Выходные данные

Выведите \(q\) строк — для каждого вопроса выведите длину строки, которую выпишет Вася.

Примечание

В первом примере Васю интересуют три вопроса. В первом вопросе Вася рассматривает подстроку «aba», которая превратится в «abba», а значит, ответ на этот вопрос равен \(4\). Во втором вопросе Вася рассматривает подстроку «baca», которая превратится в «bbaccca», а значит, ответ на этот вопрос будет равен \(7\). В третьем вопросе Вася рассматривает всю строку «abacaba», которая превратится в «abbacccabba» — строку длины \(11\).

E. Игра с картами

Бинарный поиск дп жадные алгоритмы Конструктив реализация Структуры данных *2500

У Алисы сломался компьютер и теперь она не может играть в свою любимую карточную игру. Чтобы помочь Алисе, Боб решил помочь ей и ответить на \(n\) запросов.

Изначально в левой и правой руке Боб держит по одной карте с числом \(0\), записанным на этих картах. Во время выполнения \(i\)-го запроса Алиса предлагает Бобу заменить карту в правой или левой руке на карту с числом \(k_i\) (Боб выбирает, какую из карт заменить, Боб обязан заменить ровно одну карту).

После замены карты Алиса хочет, чтобы число на левой и правой картах принадлежали каким-то заданным отрезкам (отрезки для левой и правой карты могут быть различны). Формально, пусть число записанное на левой карте — \(x\), а на правой — \(y\). Тогда после замены карты на \(i\)-м запросе должно выполняться, что \(a_{l, i} \le x \le b_{l, i}\) и \(a_{r, i} \le y \le b_{r,i}\).

Скажите, сможет ли Боб ответить на все запросы, чтобы все условия удовлетворялись. Если ответить на все запросы возможно, то приведите способ это сделать.

Входные данные

В первой строке вводятся два целых числа \(n\) и \(m\) (\(2 \le n \le 100\,000\), \(2 \le m \le 10^9\)) — количество запросов и максимально возможное значение на карте.

Далее следует описание \(n\) запросов. Описание каждого запроса состоит из трех строк.

В первой строке описания \(i\)-го запроса вводится целое число \(k_i\) (\(0 \le k_i \le m\)) — число, записанное на новой карте.

Во второй строке описания \(i\)-го запроса вводятся два целых числа \(a_{l, i}\) и \(b_{l, i}\) (\(0 \le a_{l, i} \le b_{l, i} \le m\)) — минимальное и максимальное допустимые значения, записанные на карте в левой руке после замены.

Во третьей строке описания \(i\)-го запроса вводятся два целых числа \(a_{r, i}\) и \(b_{r,i}\) (\(0 \le a_{r, i} \le b_{r,i} \le m\)) — минимальное и максимальное допустимые значения, записанные на карте в правой руке после замены.

Выходные данные

В первой строке выведите «Yes», если Боб может ответить на все запросы, и «No» иначе.

Если Боб может ответить на все \(n\) запросов, то во второй строке выходных данных должны содержаться \(n\) чисел, соответствующих корректному способу ответить на все запросы. Если в ответ на \(i\)-й запрос Бобу нужно взять карту в левую руку, выведите \(0\), иначе выведите \(1\). Если существует несколько корректных способов ответить на запросы, то любой из них будет засчитан.

B. Древесный массив

графы Деревья дп Комбинаторика математика Перебор Теория вероятностей *2300

Вам задано дерево, состоящее из \(n\) вершин. По заданному дереву вы строите массив, отмечая вершины по одной.

Первоначально, когда еще не помечено ни одной вершины, вы выбираете вершину равновероятно по всем вершинам дерева и отмечаете ее.

После этого, пока еще остаются непомеченные вершины, вы выбираете и помечаете вершину равновероятно среди всех еще непомеченных, но связанных по ребру хотя бы с одной помеченной вершиной.

Можно доказать, что данный процесс пометит все вершины в дереве.

Финальный массив \(a\) — это список номеров вершин в порядке, в котором они были помечены.

Определите математическое ожидание количества инверсий в массиве, полученном на основе заданного дереве с помощью описанного выше алгоритма.

Количество инверсий в массиве \(a\) — это количество пар индексов \((i, j)\) таких, что \(i < j\) и \(a_i > a_j\). Например, в массиве \([4, 1, 3, 2]\) количество инверсий равно \(4\): \((1, 2)\), \((1, 3)\), \((1, 4)\), \((3, 4)\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 200\)) — количество вершин в дереве.

В следующих \(n - 1\) строках заданы по два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\); \(x \neq y\)), означающие ребро между вершинами \(x\) и \(y\).

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите математическое ожидание количества инверсий в построенном массиве по модулю \(10^9+7\).

Формально, пусть \(M = 10^9+7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

Изображение дерева из первого примера:

В первом примере получающиеся массивы почти фиксированы. Если первоначально выбрана вершина \(2\), то единственный возможный массив — это \([2, 1, 3]\) (\(1\) инверсия). Если первоначально выбрана вершина \(3\), то единственный возможный массив — это \([3, 1, 2]\) (\(2\) инверсии). Если первоначально выбрана вершина \(1\), то массивы \([1, 2, 3]\) (\(0\) инверсий) и \([1, 3, 2]\) (\(1\) инверсия) — это единственные варианты и они равновероятны. В результате математическое ожидание количества инверсий равно \(\frac{1}{3}\cdot 1 + \frac{1}{3} \cdot 2 + \frac{1}{3} \cdot (\frac{1}{2} \cdot 0 + \frac{1}{2} \cdot 1) = \frac{7}{6}\).

\(166666669 \cdot 6 = 7 \pmod {10^9 + 7}\), то есть ответ равен \(166666669\).

Изображение дерева из второго примера:

Изображение дерева из третьего примера:

C1. Сходящийся массив (простая версия)

дп математика *2700

Это — упрощенная версия задачи. Единственное различие в том, что в данной версии \(q = 1\). Вы можете взламывать другие решения, только если решены обе версии задачи.

Рассмотрим процесс, проходящий на массивах \(a\) и \(b\) длины \(n\) и \(n-1\) соответственно.

Процесс — это бесконечная последовательность действий. Каждое действие имеет следующий вид:

  • Сначала выберем случайное целое число \(i\) (\(1 \le i \le n-1\)).
  • Теперь одновременно присвоим \(a_i = \min\left(a_i, \frac{a_i+a_{i+1}-b_i}{2}\right)\) и \(a_{i+1} = \max\left(a_{i+1}, \frac{a_i+a_{i+1}+b_i}{2}\right)\) без округлений (то есть значения могут перестать быть целыми).
Пример такой операции представлен в заметках.

Можно доказать, что массив \(a\) сходится, т. е. для каждого \(i\) существует предел, к которому \(a_i\) сходится. Пусть функция \(F(a, b)\) возвращает значение, к которому сходится \(a_1\), в результате процесса на массивах \(a\) и \(b\).

Вам задан массив \(b\), но не массив \(a\). Однако вам задан третий массив \(c\). Назовем массив \(a\) хорошим, если он состоит из целых чисел и удовлетворяет неравенству \(0 \leq a_i \leq c_i\) для всех \(1 \leq i \leq n\).

Ваша задача — посчитать количество хороших массивов \(a\), для которых \(F(a, b) \geq x\), для \(q\) значений \(x\). Так как ответ может быть слишком большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 100\)).

Во второй строке заданы \(n\) целых чисел \(c_1, c_2 \ldots, c_n\) (\(0 \le c_i \le 100\)).

В третьей строке заданы \(n-1\) целых чисел \(b_1, b_2, \ldots, b_{n-1}\) (\(0 \le b_i \le 100\)).

В четвертой строке задано одно целое число \(q\) (\(q=1\)).

В пятой строке заданы \(q\) целых чисел \(x_1, x_2, \ldots, x_q\) (\(-10^5 \le x_i \le 10^5\)).

Выходные данные

Выведите \(q\) целых чисел, где \(i\)-е число — ответ на \(i\)-й запрос, т. е. количество хороших массивов \(a\) с \(F(a, b) \geq x_i\) по модулю \(10^9+7\).

Примечание

Объяснение далее предполагает, что \(b = [2, 1]\) и \(c=[2, 3, 4]\) (как в примере).

Примеры массивов \(a\), которые не являются хорошими:

  • \(a = [3, 2, 3]\) не является хорошим, потому что \(a_1 > c_1\);
  • \(a = [0, -1, 3]\) не является хорошим, потому что \(a_2 < 0\).

Один из возможных хороших массивов \(a\) — это \([0, 2, 4]\). Можно показать, что ни одна операция его не изменит, а потому \(F(a, b) = a_1 = 0\).

Другой возможных хороший массив \(a\) — это \([0, 1, 4]\). За одну операцию с \(i = 1\) мы присваиваем \(a_1 = \min(\frac{0+1-2}{2}, 0)\) и \(a_2 = \max(\frac{0+1+2}{2}, 1)\). То есть, после одной операции с \(i = 1\), \(a\) становится равен \([-\frac{1}{2}, \frac{3}{2}, 4]\). Можно показать, что далее ни одна операция не изменит массив, а потому \(F(a, b) = -\frac{1}{2}\).

C2. Сходящийся массив (сложная версия)

дп математика *2900

Это — усложненная версия задачи. Единственное различие в том, что в данной версии \(1 \le q \le 10^5\). Вы можете взламывать другие решения, только если решены обе версии задачи.

Рассмотрим процесс, проходящий на массивах \(a\) и \(b\) длины \(n\) и \(n-1\) соответственно.

Процесс — это бесконечная последовательность действий. Каждое действие имеет следующий вид:

  • Сначала, выберем случайное целое число \(i\) (\(1 \le i \le n-1\)).
  • Теперь, одновременно присвоим \(a_i = \min\left(a_i, \frac{a_i+a_{i+1}-b_i}{2}\right)\) и \(a_{i+1} = \max\left(a_{i+1}, \frac{a_i+a_{i+1}+b_i}{2}\right)\) без округлений (то есть значения могут перестать быть целыми).
Пример такой операции представлен в заметках.

Можно доказать, что массив \(a\) сходится, т. е. для каждого \(i\) существует предел, к которому \(a_i\) сходится. Пусть функция \(F(a, b)\) возвращает значение, к которому сходится \(a_1\), в результате процесса на массивах \(a\) и \(b\).

Вам задан массив \(b\), но не массив \(a\). Однако вам задан третий массив \(c\). Назовем массив \(a\) хорошим, если он состоит из целых чисел и удовлетворяет неравенству \(0 \leq a_i \leq c_i\) для всех \(1 \leq i \leq n\).

Ваша задача — посчитать количество хороших массивов \(a\), для которых \(F(a, b) \geq x\), для \(q\) значений \(x\). Так как ответ может быть слишком большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 100\)).

Во второй строке заданы \(n\) целых чисел \(c_1, c_2 \ldots, c_n\) (\(0 \le c_i \le 100\)).

В третьей строке заданы \(n-1\) целых чисел \(b_1, b_2, \ldots, b_{n-1}\) (\(0 \le b_i \le 100\)).

В четвертой строке задано одно целое число \(q\) (\(1 \le q \le 10^5\)).

В пятой строке заданы \(q\) целых чисел \(x_1, x_2, \ldots, x_q\) (\(-10^5 \le x_i \le 10^5\)).

Выходные данные

Выведите \(q\) целых чисел, где \(i\)-е число — ответ на \(i\)-й запрос, т. е. количество хороших массивов \(a\) с \(F(a, b) \geq x_i\) по модулю \(10^9+7\).

Примечание

Объяснение далее предполагает, что \(b = [2, 1]\) и \(c=[2, 3, 4]\) (как в примере).

Примеры массивов \(a\), которые не являются хорошими:

  • \(a = [3, 2, 3]\) не является хорошим, потому что \(a_1 > c_1\);
  • \(a = [0, -1, 3]\) не является хорошим, потому что \(a_2 < 0\).

Один из возможных хороших массивов \(a\) — это \([0, 2, 4]\). Можно показать, что ни одна операция его не изменит, а потому \(F(a, b) = a_1 = 0\).

Другой возможных хороший массив \(a\) — это \([0, 1, 4]\). За одну операцию с \(i = 1\) мы присваиваем \(a_1 = \min(\frac{0+1-2}{2}, 0)\) и \(a_2 = \max(\frac{0+1+2}{2}, 1)\). То есть, после одной операции с \(i = 1\), \(a\) становится равен \([-\frac{1}{2}, \frac{3}{2}, 4]\). Можно показать, что далее ни одна операция не изменит массив, а потому \(F(a, b) = -\frac{1}{2}\).

D. Очередь с приоритетом

дп Комбинаторика математика реализация Тернарный поиск *2200

Дана последовательность \(A\), в которой каждый элемент записан в формате + x или -, где \(x\) — целое число.

Для последовательности \(S\), в которой каждый элемент записан в формате + x или -, определим \(f(S)\) следующим образом:

  • Проходим по \(S\) от первого элемента до последнего и поддерживаем мультимножество \(T\), изначально пустое.
  • Если элемент последовательности имеет вид + x, добавим \(x\) в \(T\). Иначе удалим наименьший элемент из \(T\) (если \(T\) пусто, ничего делать не нужно).
  • После прохода по \(S\) посчитаем сумму всех элементов в \(T\). \(f(S)\) полагается равным этой сумме.

Последовательность \(b\) является подпоследовательностью последовательности \(a\), если \(b\) может быть получена из \(a\) удалением нуля или больше элементов без изменения порядка оставшихся элементов. Для всех подпоследовательностей \(B\) последовательности \(A\) посчитайте сумму \(f(B)\) по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит целое число \(n\) (\(1\leq n\leq 500\)) – длину \(A\).

Каждая из следующих \(n\) строк начинается с символа операции + или -. Если символ равен +, то за ним следует целое число \(x\) (\(1\le x<998\,244\,353\)). \(i\)-я строка из этих \(n\) строк описывает \(i\)-й элемент \(A\).

Выходные данные

Выведите одно целое число, равное ответу на задачу по модулю \(998\,244\,353\).

Примечание

В первом примере все возможные пары \(B\) и \(f(B)\) выглядят так:

  • \(B=\) {}, \(f(B)=0\).
  • \(B=\) {-}, \(f(B)=0\).
  • \(B=\) {+ 1, -}, \(f(B)=0\).
  • \(B=\) {-, + 1, -}, \(f(B)=0\).
  • \(B=\) {+ 2, -}, \(f(B)=0\).
  • \(B=\) {-, + 2, -}, \(f(B)=0\).
  • \(B=\) {-}, \(f(B)=0\).
  • \(B=\) {-, -}, \(f(B)=0\).
  • \(B=\) {+ 1, + 2}, \(f(B)=3\).
  • \(B=\) {+ 1, + 2, -}, \(f(B)=2\).
  • \(B=\) {-, + 1, + 2}, \(f(B)=3\).
  • \(B=\) {-, + 1, + 2, -}, \(f(B)=2\).
  • \(B=\) {-, + 1}, \(f(B)=1\).
  • \(B=\) {+ 1}, \(f(B)=1\).
  • \(B=\) {-, + 2}, \(f(B)=2\).
  • \(B=\) {+ 2}, \(f(B)=2\).

Сумма этих значений равна \(16\).

E1. Аномальные пары перестановок (простая версия)

бпф дп Комбинаторика математика *2400

Это простая версия задачи. Единственное различие между простой и сложной версиями заключается в ограничениях на \(n\). Вы можете делать взломы, только если решили обе версии этой задачи.

Перестановка чисел \(1, 2, \ldots, n\) – это последовательность из \(n\) целых чисел, в которой каждое число от \(1\) до \(n\) встречается ровно один раз. Например, \([2,3,1,4]\) является перестановкой \(1, 2, 3, 4\), но \([1,4,2,2]\) – не перестановка, поскольку \(2\) встречается здесь дважды.

Напомним, что количеством инверсий в перестановке \(a_1, a_2, \ldots, a_n\) называется число пар индексов \((i, j)\) таких, что \(i < j\) и \(a_i > a_j\).

Пусть \(p\) и \(q\) – две перестановки чисел \(1, 2, \ldots, n\). Найдите количество пар перестановок \((p,q)\), удовлетворяющих следующим условиям:

  • \(p\) лексикографически меньше \(q\).
  • Количество инверсий в \(p\) больше, чем в \(q\).

Выведите это количество пар по модулю \(mod\). Обратите внимание, что \(mod\) – не обязательно простое число.

Входные данные

В единственной строке содержатся два целых числа \(n\) и \(mod\) (\(1\le n\le 50\), \(1\le mod\le 10^9\)).

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(mod\).

Примечание

Все возможные пары перестановок \((p,q)\) при \(n=4\):

  • \(p=[1,3,4,2]\), \(q=[2,1,3,4]\),
  • \(p=[1,4,2,3]\), \(q=[2,1,3,4]\),
  • \(p=[1,4,3,2]\), \(q=[2,1,3,4]\),
  • \(p=[1,4,3,2]\), \(q=[2,1,4,3]\),
  • \(p=[1,4,3,2]\), \(q=[2,3,1,4]\),
  • \(p=[1,4,3,2]\), \(q=[3,1,2,4]\),
  • \(p=[2,3,4,1]\), \(q=[3,1,2,4]\),
  • \(p=[2,4,1,3]\), \(q=[3,1,2,4]\),
  • \(p=[2,4,3,1]\), \(q=[3,1,2,4]\),
  • \(p=[2,4,3,1]\), \(q=[3,1,4,2]\),
  • \(p=[2,4,3,1]\), \(q=[3,2,1,4]\),
  • \(p=[2,4,3,1]\), \(q=[4,1,2,3]\),
  • \(p=[3,2,4,1]\), \(q=[4,1,2,3]\),
  • \(p=[3,4,1,2]\), \(q=[4,1,2,3]\),
  • \(p=[3,4,2,1]\), \(q=[4,1,2,3]\),
  • \(p=[3,4,2,1]\), \(q=[4,1,3,2]\),
  • \(p=[3,4,2,1]\), \(q=[4,2,1,3]\).

E2. Аномальные пары перестановок (сложная версия)

бпф дп Комбинаторика математика *2700

Это сложная версия задачи. Единственное различие между простой и сложной версиями заключается в ограничениях на \(n\). Вы можете делать взломы, только если решили обе версии этой задачи.

Перестановка чисел \(1, 2, \ldots, n\) – это последовательность из \(n\) целых чисел, в которой каждое число от \(1\) до \(n\) встречается ровно один раз. Например, \([2,3,1,4]\) является перестановкой \(1, 2, 3, 4\), но \([1,4,2,2]\) – не перестановка, поскольку \(2\) встречается здесь дважды.

Напомним, что количеством инверсий в перестановке \(a_1, a_2, \ldots, a_n\) называется число пар индексов \((i, j)\) таких, что \(i < j\) и \(a_i > a_j\).

Пусть \(p\) и \(q\) – две перестановки чисел \(1, 2, \ldots, n\). Найдите количество пар перестановок \((p,q)\), удовлетворяющих следующим условиям:

  • \(p\) лексикографически меньше \(q\).
  • Количество инверсий в \(p\) больше, чем в \(q\).

Выведите это количество пар по модулю \(mod\). Обратите внимание, что \(mod\) – не обязательно простое число.

Входные данные

В единственной строке содержатся два целых числа \(n\) и \(mod\) (\(1\le n\le 500\), \(1\le mod\le 10^9\)).

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(mod\).

Примечание

Все возможные пары перестановок \((p,q)\) при \(n=4\):

  • \(p=[1,3,4,2]\), \(q=[2,1,3,4]\),
  • \(p=[1,4,2,3]\), \(q=[2,1,3,4]\),
  • \(p=[1,4,3,2]\), \(q=[2,1,3,4]\),
  • \(p=[1,4,3,2]\), \(q=[2,1,4,3]\),
  • \(p=[1,4,3,2]\), \(q=[2,3,1,4]\),
  • \(p=[1,4,3,2]\), \(q=[3,1,2,4]\),
  • \(p=[2,3,4,1]\), \(q=[3,1,2,4]\),
  • \(p=[2,4,1,3]\), \(q=[3,1,2,4]\),
  • \(p=[2,4,3,1]\), \(q=[3,1,2,4]\),
  • \(p=[2,4,3,1]\), \(q=[3,1,4,2]\),
  • \(p=[2,4,3,1]\), \(q=[3,2,1,4]\),
  • \(p=[2,4,3,1]\), \(q=[4,1,2,3]\),
  • \(p=[3,2,4,1]\), \(q=[4,1,2,3]\),
  • \(p=[3,4,1,2]\), \(q=[4,1,2,3]\),
  • \(p=[3,4,2,1]\), \(q=[4,1,2,3]\),
  • \(p=[3,4,2,1]\), \(q=[4,1,3,2]\),
  • \(p=[3,4,2,1]\), \(q=[4,2,1,3]\).

E1. AquaMoon и остановка времени (простая версия)

дп Структуры данных *3500

Обратите внимание, что различия между простой и сложной версиями заключаются в ограничении на \(n\) и в ограничении по времени. Вы можете делать взломы только если обе версии задачи решены.

AquaMoon узнала, что призраки собираются нападать на туристов на пешеходной улице. К сожалению, в этот раз призракам удается скрываться за невидимым барьером, поэтому она не может уничтожить их. Все что она может сделать это спасти от призраков любого человека оказавшегося на улице.

Пешеходная улица может быть представлена как координатная прямая. Есть один человек, который передвигается по ней. В момент времени \(0\) он находится в координате \(x\), двигаясь со скоростью \(1\) координата в секунду. В частности, в момент времени \(i\) человек будет в координате \(x+i\).

Призраки собираются совершить \(n\) нападений на улицу. \(i\)-е нападение будет длиться с момента времени \(tl_i-1+10^{-18}\) до момента времени \(tr_i+1-10^{-18}\) (не включительно) и будет убивать людей с координатами от \(l_i-1+10^{-18}\) до \(r_i+1-10^{-18}\) (не включительно). Формально это означает, что человек, чья координата находится в интервале \((l_i-1+10^{-18},r_i+1-10^{-18})\) в любой из моментов времени из интервала \((tl_i-1+10^{-18},tr_i+1-10^{-18})\) умрет.

Чтобы спасти человека на улице, AquaMoon может остановить время в любой момент времени \(t\) и затем переместить человека из его текущей координаты \(x\) в любую координату \(y\) (\(t\), \(x\) и \(y\) не обязательно целые числа). Это перемещение будет стоить для AquaMoon \(|x-y|\) энергии. Перемещение является непрерывным, поэтому если существует координата под нападением между координатами \(x\) и \(y\) в момент времени \(t\), человек также умрет.

AquaMoon хочет узнать какое минимальное количество энергии она должна потратить, чтобы спасти человека на улице от всех \(n\) нападений. Она не очень хороша в программировании. Как ее друг, можете ли вы помочь ей?

Входные данные

В первой строке находится единственное целое число \(n\) (\(1\le n\le 2000\)) — количество нападений.

В следующей строке находится единственное целое число \(x\) (\(1\le x\le 10^6\)) — изначальная координата человека.

В следующих \(n\) строках содержится по четыре целых числа \(tl_i\), \(tr_i\), \(l_i\), \(r_i\) (\(1\le tl_i\le tr_i\le 10^6\), \(1\le l_i\le r_i\le 10^6\)).

Выходные данные

Выведите единственное целое число — минимальное количество энергии, которое AquaMoon должна потратить, округленное до ближайшего целого числа (если есть два ближайших целых числа вы должны округлить ответ до наибольшего из них).

E2. AquaMoon и остановка времени (сложная версия)

дп Структуры данных *3500

Обратите внимание, что различия между простой и сложной версиями заключаются в ограничении на \(n\) и в ограничении по времени. Вы можете делать взломы только если обе версии задачи решены.

AquaMoon узнала, что призраки собираются нападать на туристов на пешеходной улице. К сожалению, в этот раз призракам удается скрываться за невидимым барьером, поэтому она не может уничтожить их. Все что она может сделать это спасти от призраков любого человека оказавшегося на улице.

Пешеходная улица может быть представлена как координатная прямая. Есть один человек, который передвигается по ней. В момент времени \(0\) он находится в координате \(x\), двигаясь со скоростью \(1\) координата в секунду. В частности, в момент времени \(i\) человек будет в координате \(x+i\).

Призраки собираются совершить \(n\) нападений на улицу. \(i\)-е нападение будет длиться с момента времени \(tl_i-1+10^{-18}\) до момента времени \(tr_i+1-10^{-18}\) (не включительно) и будет убивать людей с координатами от \(l_i-1+10^{-18}\) до \(r_i+1-10^{-18}\) (не включительно). Формально это означает, что человек, чья координата находится в интервале \((l_i-1+10^{-18},r_i+1-10^{-18})\) в любой из моментов времени из интервала \((tl_i-1+10^{-18},tr_i+1-10^{-18})\) умрет.

Чтобы спасти человека на улице, AquaMoon может остановить время в любой момент времени \(t\) и затем переместить человека из его текущей координаты \(x\) в любую координату \(y\) (\(t\), \(x\) и \(y\) не обязательно целые числа). Это перемещение будет стоить для AquaMoon \(|x-y|\) энергии. Перемещение является непрерывным, поэтому если существует координата под нападением между координатами \(x\) и \(y\) в момент времени \(t\), человек также умрет.

AquaMoon хочет узнать какое минимальное количество энергии она должна потратить, чтобы спасти человека на улице от всех \(n\) нападений. Она не очень хороша в программировании. Как ее друг, можете ли вы помочь ей?

Входные данные

В первой строке находится единственное целое число \(n\) (\(1\le n\le 2 \cdot 10^5\)) — количество нападений.

В следующей строке находится единственное целое число \(x\) (\(1\le x\le 10^6\)) — изначальная координата человека.

В следующих \(n\) строках содержится по четыре целых числа \(tl_i\), \(tr_i\), \(l_i\), \(r_i\) (\(1\le tl_i\le tr_i\le 10^6\), \(1\le l_i\le r_i\le 10^6\)).

Выходные данные

Выведите единственное целое число — минимальное количество энергии, которое AquaMoon должна потратить, округленное до ближайшего целого числа (если есть два ближайших целых числа вы должны округлить ответ до наибольшего из них).

F. AquaMoon и картофель

дп Перебор Структуры данных *3500

У AquaMoon есть три массива \(a\), \(b\), \(c\) длины \(n\), состоящие из целых чисел. Выполнено, что \(1 \leq a_i, b_i, c_i \leq n\) для всех \(i\).

Чтобы ускорить выращивание картофеля, она организует свою ферму, основываясь на этих трех массивах. Сейчас она хочет выполнить \(m\) операций, чтобы посчитать сколько картофелин она получит. Каждая операция будет иметь один из двух типов:

  1. AquaMoon реорганизует ферму и делает \(k\)-й элемент массива \(a\) равным \(x\). Другими словами, она выполняет присваивание \(a_k := x\).
  2. Дано положительное целое число \(r\). AquaMoon получает картофелину за каждую тройку \((i,j,k)\), такую что \(1\le i<j<k\le r\) и \(b_{a_i}=a_j=c_{a_k}\). Посчитайте количество таких троек.

Поскольку AquaMoon очень занята поиском библиотеки, помогите ей выполнить все операции.

Входные данные

В первой строке находится два целых числа \(n\), \(m\) (\(1\le n\le 2\cdot10^5\), \(1\le m\le 5\cdot10^4\)).

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \dots,a_n\) (\(1\le a_i\le n\)).

В третьей строке находится \(n\) целых чисел \(b_1, b_2, \dots,b_n\) (\(1\le b_i\le n\)).

В четвертой строке находится \(n\) целых чисел \(c_1, c_2, \dots,c_n\) (\(1\le c_i\le n\)).

Следующие \(m\) строк описывают операции, \(i\)-я строка описывает \(i\)-ю операцию в одном из двух форматов:

  • "\(1\ k\ x\)" (\(1\le k,x\le n\)) для операции первого типа.
  • "\(2\ r\)" (\(1\le r\le n\)) для операции второго типа.

Гарантируется, что существует хотя бы одна операция второго типа.

Выходные данные

Для каждой операции второго типа выведите ответ.

Примечание

Для первой операции все подходящие тройки:

  • \(i=1\), \(j=2\), \(k=3\)
  • \(i=2\), \(j=3\), \(k=4\)
  • \(i=3\), \(j=4\), \(k=5\)

Не существует подходящих троек для третьей операции.

Для четвертой операции все подходящие тройки:

  • \(i=2\), \(j=4\), \(k=5\)
  • \(i=3\), \(j=4\), \(k=5\)

E. Кондиционеры

дп кратчайшие пути реализация сортировки Структуры данных *1500

На клетчатой полоске длины \(n\) расположены \(k\) кондиционеров: \(i\)-й кондиционер расположен в клетке \(a_i\) (\(1 \le a_i \le n\)). Два или более кондиционера не могут находиться в одной клетке (то есть все \(a_i\) различны).

Каждый кондиционер характеризуется еще одним параметром — температурой: \(i\)-й кондиционер включен на температуру \(t_i\).

Пример полосы длины \(n=6\), где \(k=2\), \(a=[2,5]\) и \(t=[14,16]\).

Для каждой клетки \(i\) (\(1 \le i \le n\)) найдите температуру воздуха в ней, которая равна \(\)\min_{1 \le j \le k}(t_j + |a_j - i|),\(\)

где \(|a_j - i|\) обозначает абсолютную величину (модуль) значения разности \(a_j - i\).

Иными словами, температура в клетке \(i\) равна минимуму среди температур кондиционеров, увеличенных на расстояние от кондиционера до клетки \(i\).

Рассмотрим пример. Пусть \(n=6, k=2\), первый кондиционер стоит в клетке \(a_1=2\) включен на температуру \(t_1=14\), а второй стоит в клетке \(a_2=5\) и включен на температуру \(t_2=16\). В таком случае температуры воздуха в клетках будут следующими:

  1. температура в \(1\)-й клетке равна: \(\min(14 + |2 - 1|, 16 + |5 - 1|)=\min(14 + 1, 16 + 4)=\min(15, 20)=15\);
  2. температура во \(2\)-й клетке равна: \(\min(14 + |2 - 2|, 16 + |5 - 2|)=\min(14 + 0, 16 + 3)=\min(14, 19)=14\);
  3. температура в \(3\)-й клетке равна: \(\min(14 + |2 - 3|, 16 + |5 - 3|)=\min(14 + 1, 16 + 2)=\min(15, 18)=15\);
  4. температура в \(4\)-й клетке равна: \(\min(14 + |2 - 4|, 16 + |5 - 4|)=\min(14 + 2, 16 + 1)=\min(16, 17)=16\);
  5. температура в \(5\)-й клетке равна: \(\min(14 + |2 - 5|, 16 + |5 - 5|)=\min(14 + 3, 16 + 0)=\min(17, 16)=16\);
  6. температура в \(6\)-й клетке равна: \(\min(14 + |2 - 6|, 16 + |5 - 6|)=\min(14 + 4, 16 + 1)=\min(18, 17)=17\).

Для каждой клетки от \(1\) до \(n\) найдите температуру воздуха в ней.

Входные данные

В первой строке задано целое число \(q\) (\(1 \le q \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют наборы входных данных. Перед каждым набором входных данных записана пустая строка.

Каждый набор входных данный состоит из трех строк. В первой строке заданы два целых числа \(n\) (\(1 \le n \le 3 \cdot 10^5\)) и \(k\) (\(1 \le k \le n\)) — длина клетчатой полоски и количество кондиционеров соответственно.

Вторая строка содержит \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) (\(1 \le a_i \le n\)) — позиции кондиционеров на клетчатой полоске.

Третья строка содержит \(k\) целых чисел \(t_1, t_2, \ldots, t_k\) (\(1 \le t_i \le 10^9\)) — температуры кондиционеров.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите через пробел \(n\) целых чисел — температуры воздуха в клетках.

G. Сколько путей?

графы Деревья дп поиск в глубину и подобное *2100

Задан ориентированный граф \(G\), в котором допустимы петли (то есть рёбра из вершины в себя). В \(G\) отсутствуют кратные рёбра, то есть для каждой упорядоченной пары вершин \((u, v)\) существует не более одного ребра из \(u\) в \(v\). Вершины пронумерованы от \(1\) до \(n\).

Назовём путем из \(u\) в \(v\) такую последовательность рёбер, что:

  • вершина \(u\) является началом первого ребра пути;
  • вершина \(v\) является концом последнего ребра пути;
  • для любой пары соседних рёбер следующее ребро начинается с вершины, на которую заканчивается предыдущее ребро.

Дополнительно будем считать, что пустая последовательность рёбер — это путь из \(u\) в \(u\).

Для каждой вершины \(v\) выведите одно из четырёх значений:

  • \(0\), если не существует пути из \(1\) в \(v\);
  • \(1\), если существует ровно один путь из \(1\) в \(v\);
  • \(2\), если существует более одного пути из \(1\) в \(v\) и это число является конечной величиной;
  • \(-1\), если существует бесконечно много путей из \(1\) в \(v\).

Рассмотрим пример, изображённый на рисунке.

Тогда:

  • ответ для вершины \(1\) равен \(1\): существует ровно один путь из \(1\) в \(1\) (путь длины \(0\));
  • ответ для вершины \(2\) равен \(0\): не существует пути из \(1\) в \(2\);
  • ответ для вершины \(3\) равен \(1\): существует ровно один путь из \(1\) в \(3\) (это ребро \((1, 3)\));
  • ответ для вершины \(4\) равен \(2\): существует более одного, но конечное число путей из \(1\) в \(4\) (два пути: \([(1, 3), (3, 4)]\) и \([(1, 4)]\));
  • ответ для вершины \(5\) равен \(-1\): существует бесконечно много путей из \(1\) в \(5\) (петля может быть использована в пути сколько угодно раз);
  • ответ для вершины \(6\) равен \(-1\): существует бесконечно много путей из \(1\) в \(6\) (петля может быть использована в пути сколько угодно раз).
Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее заданы описания \(t\) наборов входных данных. Перед каждым из них в тесте содержится пустая строка.

В первой строке набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 4 \cdot 10^5, 0 \le m \le 4 \cdot 10^5\)) — количество вершин и рёбер в графе, соответственно. Далее входные данные содержат \(m\) строк с описаниями рёбер. Каждая строка состоит из двух целых чисел \(a_i\), \(b_i\) (\(1 \le a_i, b_i \le n\)) — начало и конец \(i\)-го ребра. Вершины графа пронумерованы от \(1\) до \(n\). Заданный граф может содержать петли (допустимо \(a_i = b_i\)), но не может содержать кратных рёбер (недопустимо \(a_i = a_j\) и \(b_i = b_j\) для \(i \ne j\)).

Сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(4 \cdot 10^5\). Аналогично, сумма значений \(m\) по всем наборам входных данных в тесте не превосходит \(4 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк. \(i\)-я строка должна содержать ответ на \(i\)-й набор входных данных — последовательность \(n\) целых чисел от \(-1\) до \(2\).

C. Три поросенка

бпф дп Комбинаторика математика *2500

Делегации трех поросят со всего мира едут на конференцию! Каждую минуту новая тройка поросят прибывает в конференц-зал. После \(n\)-й минуты конференция завершается.

Большой злой волк узнал об этой конференции и запланировал атаку. В определенную минуту конференции он ворвется в зал, съест ровно \(x\) поросят и убежит.

Волк попросил Грегора помочь ему найти количество возможных планов для атаки, в которых он съест ровно \(x\) поросят, для различных значений \(x\) (\(1 \le x \le 3n\)). Два плана для атаки считаются различными, если атака происходит в различное время, или съедаются различные подмножества поросят.

Обратите внимание, что все запросы независимы, то есть в действительности волк не ест поросят, а только строит планы!

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n \le 10^6\), \(1 \le q \le 2\cdot 10^5\)) — количество минут, которые продлится конференция, и количество запросов, которые сделает волк.

Следующие \(q\) строк содержат по одному целому числу \(x_i\) (\(1 \le x_i \le 3n\)) – количество поросят, которых съест волк в \(i\)-м запросе.

Выходные данные

Вы должны вывести \(q\) строк. В \(i\)-й строке должно содержаться количество планов для атаки, если волк хочет съесть \(x_i\) поросят. Выведите каждый ответ по модулю \(10^9+7\).

Примечание

В приведенном примере \(n=2\). Таким образом, на минуте \(1\) в конференц-зале присутствуют \(3\) поросенка, на минуте \(2\)\(6\) поросят. Даны три запроса: \(x=1\), \(x=5\) и \(x=6\).

Если волк хочет съесть \(1\) поросенка, он может сделать это, используя \(3+6=9\) возможных планов для атаки в зависимости от того, на какой минуте (\(1\) или \(2\)) он прибудет.

Если волк хочет съесть \(5\) поросят, он не может прибыть на минуте \(1\), поскольку в это время в зале недостаточно поросят. Поэтому волк должен прибыть на минуте \(2\) — тогда существует \(6\) возможных планов для атаки.

Если волк хочет съесть \(6\) поросят, то его единственным планом является прибыть к концу конференции и поглотить всех.

Не забудьте выводить ответы по модулю \(10^9+7\)!

B. Грегор и игра в пешки

графы дп жадные алгоритмы Паросочетания поиск в глубину и подобное Потоки реализация *800

Дана шахматная доска размера \(n\) на \(n\). Клетка на пересечении \(i\)-й сверху ряду и \(j\)-го слева столбца обозначается как \((i,j)\).

На данный момент у Грегора есть несколько пешек в \(n\)-м ряду. Также в \(1\)-м ряду стоят вражеские пешки. За один шаг Грегор перемещает одну из своих пешек. Пешка может ходить на одну клетку вверх (из \((i,j)\) в \((i-1,j)\)), если клетка назначения не занята другой пешкой. В дополнение, пешка может переместиться на одну клетку вверх по диагонали (из \((i,j)\) в \((i-1,j-1)\) или в \((i-1,j+1)\)), если и только если в этой клетке стоит вражеская пешка. Вражеская пешка в таком случае убирается с доски.

Грегор хочет узнать, какое максимальное количество его пешек может достичь \(1\)-го ряда.

Заметьте, что в этой игре ходит только Грегор, вражеские пешки никогда не перемещаются. Также, когда пешка Грегора достигает \(1\)-го ряда, она останавливается и больше не может перемещаться.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1\le t\le 2\cdot 10^4\)) — количество наборов входных данных. Далее следует описание этих \(t\) наборов.

Каждый набор входных данных состоит из трех строк. Первая строка содержит одно целое число \(n\) (\(2\le n\le 2\cdot{10}^{5}\)) — размер доски.

Вторая строка содержит бинарную строку длины \(n\), в которой \(1\) на \(i\)-й позиции соответствует вражеской пешке в \(i\)-й слева клетке в первом ряду, а \(0\) соответствует пустой клетке.

Третья строка содержит бинарную строку длины \(n\), в которой \(1\) на \(i\)-й позиции соответствует пешке Грегора в \(i\)-й слева клетке в последнем ряду, а \(0\) соответствует пустой клетке.

Гарантируется, что сумма \(n\) по всем наборам входных данных меньше \(2\cdot{10}^{5}\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальное количество пешек Грегора, которые могут достичь \(1\)-го ряда.

Примечание

В первом примере Грегор может просто переместить вперед все его \(3\) пешки. Таким образом, ответ равен \(3\).

Во втором примере Грегор может гарантировать, что все его \(4\) пешки достигнут вражеского ряда, следуя раскрашенным путям как показано ниже. Помните — только Грегор делает ходы в этой «игре»!

В третьем примере единственная пешка Грегора застряла перед вражеской пешкой и не может достигнуть желаемого ряда.

В четвертом примере у Грегора нет пешек, поэтому ответ равен \(0\).

E. Stringforces

Бинарный поиск битмаски дп Перебор Строки *2500

Задана строка \(s\) длины \(n\). Каждый символ — это либо одна из первых \(k\) строчных латинских букв, либо знак вопроса.

Требуется заменить каждый знак вопрос на одну из первых \(k\) строчных латинских букв таким образом, чтобы максимизировать следующее значение.

Пусть \(f_i\) будет максимальной длиной подстроки строки \(s\), которая состоит целиком из \(i\)-й латинской буквы. Подстрока строки — это некоторый ее непрерывный подотрезок. Если \(i\)-я буква не встречается в строке, то \(f_i\) равно \(0\).

Значение строки \(s\) — это минимальное значение среди \(f_i\) для всех \(i\) от \(1\) до \(k\).

Какое наибольшее значение может иметь строка?

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 17\)) — длина строки и количество использованных первых латинских букв.

Во второй строке записана строка \(s\), состоящая из \(n\) символов. Каждый символ — это либо одна из первых \(k\) строчных латинских букв, либо знак вопроса.

Выходные данные

Выведите одно целое число — наибольшее значение, которое может иметь строка, если заменить каждый знак вопроса на одну из первых \(k\) строчных латинских букв.

Примечание

В первом примере знаки вопроса можно заменить следующим образом: «aaaababbbb». \(f_1 = 4\), \(f_2 = 4\), поэтому ответ равен \(4\). Можно заменить и таким образом: «aaaabbbbbb». Тогда \(f_1 = 4\), \(f_2 = 6\), однако, минимум из них все еще равен \(4\).

Во втором примере одна из возможных строк такая: «aabbccdda».

В третьем примере хотя бы одна буква не встретится в строке, поэтому минимум из значений \(f_i\) всегда равен \(0\).

F. Попрыгунчик

Бинарный поиск графы дп кратчайшие пути разделяй и властвуй снм Структуры данных *2700

Представьте себе бесконечный пруд, спроецированный на числовую прямую. В пруду есть \(n\) камней, пронумерованных от \(1\) до \(n\). \(i\)-й камень находится в целой координате \(a_i\). Координаты камней попарно различны. Камни пронумерованы в порядке увеличения координаты, поэтому \(a_1 < a_2 < \dots < a_n\).

Лягушка-робот сидит на камне номер \(s\). Лягушку можно запрограммировать. У нее есть встроенный параметр базовой длины прыжка \(d\). Также есть настройка для интервала длины прыжка. Если интервал длины прыжка выставляется на некоторое целое значение \(k\), то лягушка может прыгать с некоторого камня на любой другой камень на расстоянии от \(d - k\) до \(d + k\) включительно в любом направлении. Расстояние между двумя камнями — это модуль разности между их координатами.

Вам поручили задачу реализовать новую функцию для лягушки. По двум заданным целым числам \(i\) и \(k\) определить, может ли лягушка достичь камня номер \(i\) с камня номер \(s\), осуществив последовательность прыжков с интервалом длины прыжка установленным на \(k\). Последовательность может быть сколь угодно длинной или пустой.

Вам будет предоставлено \(q\) тестов для данной функции, \(j\)-й набор состоит из двух целых чисел \(i\) и \(k\). Выведите «Yes», если \(i\)-й камень достижим и «No» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Входные данные

В первой строке записаны четыре целых числа \(n\), \(q\), \(s\) и \(d\) (\(1 \le n, q \le 2 \cdot 10^5\); \(1 \le s \le n\); \(1 \le d \le 10^6\)) — количество камней, количество тестов, начальный камень и базовая длина прыжка.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — координаты камней. Координаты камней попарно различны. Камни пронумерованы в порядке увеличения координаты, поэтому \(a_1 < a_2 < \dots < a_n\).

В каждой из следующих \(q\) строк записаны два целых числа \(i\) и \(k\) (\(1 \le i \le n\); \(1 \le k \le 10^6\)) — параметры теста.

Выходные данные

На каждый тест выведите ответ. Если существует такая последовательность прыжков с камня номер \(s\) до камня номер \(i\) с интервалом длины прыжка установленным на \(k\), то выведите «Yes». В противном случае выведите «No».

Примечание

Пояснение к первому примеру:

В первом тесте финальный камень тот же, что и начальный, поэтому не надо прыгать, чтобы его достичь.

Во втором тесте лягушка может прыгать на любую длину в отрезке \([5 - 2; 5 + 2]\). Поэтому она может достичь камня номер \(5\) (прыжком на \(7\) направо) и камня номер \(3\) (прыжком на \(3\) налево). С камня номер \(3\) она может достичь камня номер \(2\) (прыжком на \(5\) налево). С камня номер \(2\) она может достичь камня номер \(1\) (прыжком на \(4\) налево). Однако, нет способа достичь камня номер \(7\).

В третьем тесте лягушка может прыгать на любую длину в отрезке \([5 - 3; 5 + 3]\). Поэтому она может достичь камня номер \(7\), прыгнув сначала на камень номер \(5\), а с него на \(7\).

Четвертый тест показан в описании ко второму тесту.

E. Неподвижные точки

Бинарный поиск дп Перебор *2000

Задана последовательность целых чисел \(a_1, a_2, \ldots, a_n\). За один ход можно выбрать любой элемент последовательности и удалить его. Все элементы справа от удаленного сдвигаются на \(1\) позицию влево, чтобы в последовательности не было пустых мест. Таким образом, за один ход длина последовательности всегда сокращается на \(1\). Индексы элементов после хода пересчитываются.

Например, пусть последовательность имеет вид \(a=[3, 2, 2, 1, 5]\). Допустим во время хода был выбран элемент \(a_3=2\). Тогда после хода последовательность будет равна \(a=[3, 2, 1, 5]\), причём теперь её \(3\)-м элементом будет считаться \(a_3=1\), а \(4\)-м будет \(a_4=5\).

Вам дана последовательность \(a_1, a_2, \ldots, a_n\) и число \(k\). Требуется найти минимальное количество ходов, которое нужно совершить, чтобы в последовательности не менее \(k\) элементов были равны своим индексам, т. е. в полученной последовательности \(b_1, b_2, \ldots, b_m\) существовало не менее \(k\) индексов \(i\) таких, что \(b_i = i\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор данных состоит из двух подряд идущих строк. Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2000\)). Вторая строка содержит последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)). Числа в последовательности не обязательно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке:

  • \(-1\), если не существует искомой последовательности ходов;
  • в противном случае целое число \(x\) (\(0 \le x \le n\)) — минимальное количество ходов, которое требуется, для того чтобы не менее \(k\) элементов последовательности стали равны своим индексам.
Примечание

В первом наборе входных данных последовательность изначально не удовлетворяет виду, к которому её необходимо привести, однако, удалив первый элемент последовательности, можно добиться того, что последовательность примет вид \([1, 2, 3, 4, 5, 6]\), т. е. \(6\) элементов будут равны своим индексам.

Во втором тестовом примере есть два способа достичь желаемого результата за \(2\) хода: удалить \(1\)-й и \(3\)-й элементы, при этом последовательность будет иметь вид \([1, 2, 3]\), в которой будет \(3\) равных своим индексам элемента; второй способ — удалить \(2\)-й и \(3\)-й элементы, тогда получится последовательность \([5, 2, 3]\), в которой будет \(2\) искомых элемента.

F. Равноудалённые вершины

Деревья дп Комбинаторика Перебор поиск в глубину и подобное *2200

Дерево — это неориентированный связный граф, в котором отсутствуют циклы.

Задано дерево из \(n\) вершин. Необходимо посчитать количество способов выбрать в этом дереве ровно \(k\) вершин (т.е. \(k\)-элементное подмножество вершин), так чтобы все попарные расстояния между выбранными вершинами были равны. Иными словами, чтобы существовало такое число \(c\), что для всех \(u, v\) (\(u \ne v\), \(u, v\) — выбранные вершины) было верно \(d_{u,v}=c\), где \(d_{u,v}\) — расстояние от \(u\) до \(v\).

Поскольку ответ может быть очень большим, необходимо вывести его по модулю \(10^9 + 7\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Перед каждым набором входных данных расположена пустая строка.

Каждый набор данных состоит из нескольких строк. Первая строка набора данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 100\)) — количество вершин в дереве и количество выбираемых вершин соответственно. Далее идут \(n - 1\) строк, каждая содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — две вершины, которые соединены ребром. Гарантируется, что заданный граф является деревом, отсутствуют петли и кратные рёбра.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — количество способов выбрать в дереве ровно \(k\) вершин, так чтобы для любых двух пар вершин расстояние между вершинами в паре было одинаковым, по модулю \(10^9 + 7\) (иными словами, выведите остаток при делении на \(1000000007\)).

D. Массив как разность

битмаски графы дп Конструктив математика Перебор поиск в глубину и подобное *1800

Вам дана последовательность из \(n\) целых чисел \(a_1, \, a_2, \, \dots, \, a_n\).

Существует ли последовательность из \(n\) целых чисел \(b_1, \, b_2, \, \dots, \, b_n\) такая, что выполняется следующее свойство?

  • Для каждого \(1 \le i \le n\) существуют два (не обязательно различных) индекса \(j\) и \(k\) (\(1 \le j, \, k \le n\)) такие, что \(a_i = b_j - b_k\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 20\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, \, \dots, \, a_n\) (\(-10^5 \le a_i \le 10^5\)).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую YES, если существует последовательность \(b_1, \, \dots, \, b_n\), удовлетворяющая требуемому свойству, и NO в противном случае.

Примечание

В первом наборе входных данных, последовательность \(b = [-9, \, 2, \, 1, \, 3, \, -2]\) удовлетворяет свойству. Действительно, имеет место следующее:

  • \(a_1 = 4 = 2 - (-2) = b_2 - b_5\);
  • \(a_2 = -7 = -9 - (-2) = b_1 - b_5\);
  • \(a_3 = -1 = 1 - 2 = b_3 - b_2\);
  • \(a_4 = 5 = 3 - (-2) = b_4 - b_5\);
  • \(a_5 = 10 = 1 - (-9) = b_3 - b_1\).

Во втором наборе входных данных достаточно выбрать \(b = [0]\), так как \(a_1 = 0 = 0 - 0 = b_1 - b_1\).

В третьем наборе входных данных можно показать, что никакая последовательность \(b\) длины \(3\) не удовлетворяет свойству.

F. Муравьепортация

Бинарный поиск дп сортировки Структуры данных *2200

Муравей движется по действительной прямой с постоянной скоростью в \(1\) единицу в секунду. Он начинает движение в точке \(0\) и всегда движется вправо (поэтому его позиция увеличивается на \(1\) каждую секунду).

Существует \(n\) порталов, \(i\)-й из которых находится в позиции \(x_i\) и телепортирует в позицию \(y_i < x_i\). Каждый портал может быть либо активным, либо неактивным. Начальное состояние \(i\)-го портала определяется \(s_i\): если \(s_i=0\), то \(i\)-й портал изначально неактивен, если \(s_i=1\), то \(i\)-й портал изначально активен. Когда муравей проходит через портал (т.е., когда его положение совпадает с положением портала):

  • если портал неактивен, он становится активным (в этом случае путь муравья не затрагивается);
  • если портал активен, то он становится неактивным, а муравей мгновенно телепортируется в позицию \(y_i\), где продолжает двигаться как обычно.

Сколько времени (с момента начала движения) потребуется муравью, чтобы достичь позиции \(x_n + 1\)? Можно показать, что это произойдет за конечное время. Поскольку ответ может быть очень большим, вычислите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество порталов.

В \(i\)-й из следующих \(n\) строк содержится три целых числа \(x_i\), \(y_i\) и \(s_i\) (\(1\le y_i < x_i\le 10^9\), \(s_i\in\{0,1\}\)) — положение \(i\)-го портала, положение, куда телепортируется муравей, когда он проходит через \(i\)-й портал (если он активен), и начальное состояние \(i\)-го портала.

Позиции порталов строго возрастают, то есть \(x_1<x_2<\cdots<x_n\). Гарантируется, что \(2n\) целых чисел \(x_1, \, x_2, \, \dots, \, x_n, \, y_1, \, y_2, \, \dots, \, y_n\) попарно различны.

Выходные данные

Выведите количество времени в секундах, которое пройдет с момента начала движения муравья до момента достижения им позиции \(x_n+1\). Поскольку ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

Примечание

Объяснение первого примера: Муравей перемещается следующим образом (кривая стрелка обозначает телепортацию, прямая стрелка обозначает обычное движение со скоростью \(1\), а время, затраченное на движение, написано над стрелкой). \(\) 0 \stackrel{6}{\longrightarrow} 6 \leadsto 5 \stackrel{3}{\longrightarrow} 8 \leadsto 1 \stackrel{2}{\longrightarrow} 3 \leadsto 2 \stackrel{4}{\longrightarrow} 6 \leadsto 5 \stackrel{2}{\longrightarrow} 7 \leadsto 4 \stackrel{2}{\longrightarrow} 6 \leadsto 5 \stackrel{4}{\longrightarrow} 9 \(\) Обратите внимание, что общее время составляет \(6+3+2+4+2+2+4=23\).

Пояснение второго примера: Муравей перемещается следующим образом (кривая стрелка обозначает телепортацию, прямая стрелка обозначает обычное движение со скоростью \(1\), а время, затраченное на движение, написано над стрелкой). \(\) 0 \stackrel{454971987}{\longrightarrow} 454971987 \leadsto 406874902 \stackrel{48097086}{\longrightarrow} 454971988 \(\) Обратите внимание, что общее время составляет \(454971987+48097086=503069073\).

Объяснение третьего примера: Поскольку все порталы изначально неактивны, муравей не будет телепортирован и попадет прямо из \(0\) в \(x_n+1=899754846+1=899754847\).

B. Переворот строки

дп Перебор реализация Строки хэши *1300

У вас есть строка \(s\) и фишка, которую вы можете поставить на любой символ этой строки.

После того, как вы поставите фишку, вы можете подвинуть ее вправо несколько (возможно, ноль) раз, то есть сделать следующее действие несколько раз: если текущая позиция фишки обозначена как \(i\), фишка перемещается в позицию \(i + 1\). Конечно же, это действие невозможно, если фишка находится в последней позиции строки.

После того, как вы закончите двигать фишку вправо, вы можете подвинуть ее влево несколько (возможно, ноль) раз, то есть сделать следующее действие несколько раз: если текущая позиция фишки обозначена как \(i\), фишка перемещается в позицию \(i - 1\). Конечно же, это действие невозможно, если фишка находится в первой позиции строки.

Когда вы ставите фишку или перемещаете ее, вы выписываете символ, на котором оказалась фишка. Например, если строка \(s\)abcdef, вы ставите фишку на \(3\)-й символ, двигаете ее вправо \(2\) раза, а затем двигаете ее влево \(3\) раза, вы выпишете строку cdedcb.

Вам даны две строки \(s\) и \(t\). Ваше задание — определить, можно ли так выполнить описанные операции со строкой \(s\), что в результате вы выпишете строку \(t\).

Входные данные

В первой строке задано одно целое число \(q\) (\(1 \le q \le 500\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке задана строка \(s\) (\(1 \le |s| \le 500\)), во второй строке — строка \(t\) (\(1 \le |t| \le 2 \cdot |s| - 1\)). Обе строки состоят из строчных букв латинского алфавита.

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора выходных данных выведите «YES», если можно выписать строку \(t\), проводя описанные в условии действия со строкой \(s\), или «NO» в противном случае.

Каждую букву можно выводить в любом регистре (YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

Примечание

Рассмотрим примеры из условия.

Первый набор входных данных разобран в условии.

Во втором наборе входных данных можно поместить фишку на \(1\)-ю позицию, подвинуть ее дважды вправо, а затем дважды влево.

В четвертом наборе входных данных можно поместить фишку на \(2\)-ю позицию, а потом не двигать ее вообще.

В пятом наборе входных данных можно поставить фишку на \(1\)-ю позицию, подвинуть ее \(5\) раз вправо и завершить процесс.

C. Пенальти

битмаски дп жадные алгоритмы Перебор *1200

Рассмотрим упрощенную фазу пенальти в конце футбольного матча.

Фаза пенальти состоит из не более чем \(10\) ударов: первый удар выполняет первая команда, второй удар выполняет вторая команда, третий удар выполняет первая команда, и так далее. Команда, забившая больше голов, выигрывает; если обе команды забили одинаковое количество голов, объявляется ничья (обратите внимание, что это противоречит официальным правилам футбола). Фазу пенальти останавливают, если одна команда забила больше мячей, чем другая команда может забить с учетом всех оставшихся ударов. Например, если после \(7\)-го удара возникла следующая ситуация: первая команда забила \(1\) мяч, а вторая команда забила \(3\) мяча, то фазу пенальти останавливают: первая команда уже не сможет забить \(3\) мяча за всю фазу пенальти.

Вы знаете, кто выполняет какой удар, поэтому можете спрогнозировать результаты всех \(10\) ударов. Этот прогноз представлены строкой \(s\), состоящей из \(10\) символов. Каждый символ — 1, 0, или ?. Строка задает ваш прогноз следующим образом:

  • если \(s_i\)1, то игрок, выполняющий \(i\)-й удар, обязательно забьет гол;
  • если \(s_i\)0, то игрок, выполняющий \(i\)-й удар, обязательно не забьет гол;
  • если \(s_i\)?, то результат \(i\)-го удара может быть любым.

Основываясь на этом прогнозе, посчитайте минимально возможное количество ударов в фазе пенальти (то есть самый ранний момент, когда фаза пенальти может быть остановлена, если рассмотреть все возможные варианты, как она может проходить). Обратите внимание, что при остановке фазы пенальти ваши прогнозы на следующие удары не учитываются.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1\,000\)) — количество наборов входных данных.

Каждый набор входных данных задается одной строкой \(s\), состоящей из ровно \(10\) символов. Каждый символ — 1, 0 или ?.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможное количество ударов в фазе пенальти.

Примечание

Рассмотрим примеры:

В первом примере, рассмотрим ситуацию, когда \(1\)-й, \(5\)-й и \(7\)-й забивают, а \(2\), \(3\), \(4\) и \(6\) не забивают. Тогда текущее количество голов для первой команды это \(3\), а для второй команды это \(0\), при этом рефери понимает, что вторая команда забьет не более \(2\) голов в оставшихся ударах. Таким образом, серия пенальти закончится после \(7\)-го удара.

Во втором примере, серия пенальти не закончится, пока не будут совершены все \(10\) ударов.

В третьем примере, если первая команда не забьет три своих первых удара, а вторая команда забьет три своих первых удара, то после \(6\)-го удара, первая команда забила \(0\) голов и вторая команда забила \(3\) гола. Рефери понимает, что первая команда может забить не более \(2\) голов в оставшихся ударах. Таким образом, серия пенальти закончится после \(6\)-го удара.

В четвертом примере, несмотря на то, что вы можете предсказать всю серию пенальти, ее результат будет точно известен только после \(9\)-го удара.

D. Backspace

дп жадные алгоритмы Строки *1500

Вам заданы две строки \(s\) и \(t\), каждая из которых состоит из строчных букв латинского алфавита. Вы собираетесь посимвольно напечатать строку \(s\), начиная с первого символа и заканчивая последним.

Когда вы собираетесь напечатать какой-то символ, вместо того, чтобы нажать на кнопку, печатающую этот символ, вы можете нажать кнопку «Backspace». Нажатие на эту кнопку удаляет последний напечатанный символ, который еще не был удален (или ничего не делает, если все напечатанные символы уже удалены или вы еще не напечатали ни одного символа). Например, если строка \(s\) — «abcbd», и вы нажимаете на кнопку Backspace вместо печати первого и четвертого символа, в результате получится строка «bd» (первое нажатие Backspace не удалит ни одного символа, а второе нажатие этой кнопки удалит символ «c»). Другой пример: если \(s\) равна «abcaa», и вы нажимаете Backspace вместо двух последних букв, получается «a».

Вы должны определить, можно ли получить строку \(t\), если вы попробуете набрать строку \(s\), нажимая Backspace вместо нажатия кнопок, соответствующих некоторым (возможно, ни одному) буквам строки \(s\).

Входные данные

В первой строке задано одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит строку \(s\) (\(1 \le |s| \le 10^5\)). Каждый символ строки \(s\) — строчная буква латинского алфавита.

Вторая строка каждого набора входных данных содержит строку \(t\) (\(1 \le |t| \le 10^5\)). Каждый символ строки \(t\) — строчная буква латинского алфавита.

Гарантируется, что суммарное по всем наборам входных данных количество символов во всех строках не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выходных данных выведите «YES», если можно получить строку \(t\), набирая строку \(s\) и заменяя некоторые символы нажатиями клавиши Backspace, или «NO» в противном случае.

Каждую букву можно выводить в любом регистре (YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

Примечание

Рассмотрим пример из условия.

Чтобы получить «ba» из «ababa», можно нажать Backspace вместо первого и четвертого символа.

Нет способа получить «bb» при попытке напечатать «ababa».

Нет способа получить «aaaa» при попытке напечатать «aaa».

Чтобы получить «ababa» при попытке напечатать «aababa», можно нажать Backspace вместо печати первого символа, а затем напечатать все оставшиеся символы.

I. Лестницы

бпф дп Комбинаторика математика разделяй и властвуй *3400

Для перестановки \(p\) чисел от \(1\) до \(n\) мы можем задать лестничный массив \(a\) следующим образом: \(a_i\) равняется длине наибольшего подотрезка перестановки, который содержит позицию \(i\) и состоит из последовательных чисел в отсортированном порядке: \([x, x+1, \ldots, y-1, y]\) или \([y, y-1, \ldots, x+1, x]\) для некоторых \(x \leq y\). Например, для перестановки \(p = [4, 1, 2, 3, 7, 6, 5]\) получается лестничный массив \(a = [1, 3, 3, 3, 3, 3, 3]\).

Вам дан массив \(a\). Ваша задача — посчитать количество перестановок, лестничный массив которых равен \(a\). Так как это количество может быть достаточно большим, посчитайте его по модулю \(998\,244\,353\). Обратите внимание, что количество может быть равно нулю.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину лестничного массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Выходные данные

Выведите количество перестановок, лестничный массив которых равен \(a\). Так как это число может быть довольно большим, выведите его по модулю \(998\,244\,353\).

E. Вы

дп математика поиск в глубину и подобное теория чисел *2600

Вам дано дерево с \(n\) вершинами. Напомним, что дерево — это связный неориентированный граф без циклов.

Пусть \(a_1, a_2, \ldots, a_n\) — последовательность целых чисел. Выполним следующую операцию ровно \(n\) раз:

  • Выберем неудаленную вершину \(u\). Присвоим \(a_u :=\) количество неудаленных вершин, соседних с \(u\). Затем удалим вершину \(u\) вместе со всеми ребрами, концом которых она является.

Для каждого целого числа \(k\) от \(1\) до \(n\) найдите по модулю \(998\,244\,353\) количество различных последовательностей \(a_1, a_2, \ldots, a_n\), удовлетворяющих следующим условиям:

  • можно получить \(a\), выполнив вышеупомянутую операцию ровно \(n\) раз в некотором порядке.
  • \(\operatorname{gcd}(a_1, a_2, \ldots, a_n) = k\). Здесь \(\operatorname{gcd}\) означает наибольший общий делитель элементов в \(a\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\))  — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^5\)).

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)), указывающих на наличие ребра между вершинами \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в одной строке \(n\) целых чисел, где для каждого \(k\) от \(1\) до \(n\) \(k\)-е целое число обозначает ответ, когда \(\operatorname{gcd}\) равен \(k\).

Примечание

В первом наборе входных данных дерево изображено на рисунке.

  • Если мы удалим вершины в порядке \(1 \rightarrow 2 \rightarrow 3\) или \(1 \rightarrow 3 \rightarrow 2\), то полученная последовательность будет \(a = [2, 0, 0]\), которая имеет \(\operatorname{gcd}\), равный \(2\).
  • Если удалить узлы в порядке \(2 \rightarrow 1 \rightarrow 3\), то полученная последовательность будет \(a = [1, 1, 0]\), \(\operatorname{gcd}\) которой равен \(1\).
  • Если удалить узлы в порядке \(3 \rightarrow 1 \rightarrow 2\), то полученная последовательность будет \(a = [1, 0, 1]\), \(\operatorname{gcd}\) которой равен \(1\).
  • Если удалить узлы в порядке \(2 \rightarrow 3 \rightarrow 1\) или \(3 \rightarrow 2 \rightarrow 1\), то полученная последовательность будет \(a = [0, 1, 1]\), \(\operatorname{gcd}\) которой равен \(1\).

Обратите внимание, что здесь мы считаем количество различных последовательностей, а не количество различных порядков удаления узлов.

C. Ряды монет

дп Конструктив Перебор реализация *1300

Алиса и Боб играют в игру на матрице, состоящей из \(2\) строк и \(m\) столбцов. В ячейке в \(i\)-й строке в \(j\)-м столбце лежит \(a_{i, j}\) монет.

Изначально Алиса и Боб стоят в ячейке \((1, 1)\). Они собираются пройти какой-то последовательностью ходов в ячейку \((2, m)\).

Возможные ходы следующие:

  • Пойти направо — из некоторой ячейки \((x, y)\) в \((x, y + 1)\);
  • Пойти вниз — из некоторой ячейки \((x, y)\) в \((x + 1, y)\).

Сначала Алиса делает все свои ходы, пока не достигнет \((2, m)\). Она собирает монеты во всех клетках, которые они посещает (включая стартовую).

Когда Алиса заканчивает, Боб начинает свой путь. Он также делает ходы, чтобы достичь \((2, m)\), и собирает монеты во всех клетках, которые он посетил, а Алиса нет.

Счет в игре равен суммарному количеству монет, которые собрал Боб.

Алиса хочет минимизировать счет. Боб хочет максимизировать счет. Какой будет счет в игре, если оба игрока играют оптимально?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В первой строке каждого набора записано одно целое число \(m\) (\(1 \le m \le 10^5\)) — количество столбцов в матрице.

В \(i\)-й из следующих \(2\) строк записаны \(m\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,m}\) (\(1 \le a_{i,j} \le 10^4\)) — количество монет в ячейке в \(i\)-м ряду в \(j\)-м столбце матрицы.

Сумма \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — счет игры, если оба игрока играют оптимально.

Примечание

Пути для наборов входных данных из примеров изображены ниже. Путь Алисы раскрашен красным, а путь Боба — синим.

D. Скажите палиндромам - нет!

дп Конструктив Перебор Строки *1600

Назовем строку красивой, если в ней нет подстроки длины хотя бы \(2\), которая является палиндромом. Напомним, что палиндром — это строка, читающаяся одинаково от первого символа к последнему и от последнего символа к первому. Например, строки a, bab, acca, bcabcbacb являются палиндромами, а строки ab, abbbaa, cccb — нет.

Определим стоимость строки, как минимальное количество операций, чтобы строка стала красивой, если за одну операцию разрешено изменить любой символ строки на одну из первых \(3\) букв латинского алфавита (в нижнем регистре).

Вам задана строка \(s\) длины \(n\), каждый символ строки — одна из первых \(3\) букв латинского алфавита (в нижнем регистре).

Вам предстоит ответить на \(m\) запросов — вычислите стоимость подстроки строки \(s\) с \(l_i\)-й по \(r_i\)-ю позицию включительно.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длина строки \(s\) и количество запросов.

Вторая строка содержит строку \(s\), она состоит из \(n\) символов, каждый из которых является одной из первых \(3\) латинских букв.

Следующие \(m\) строк содержат два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — параметры \(i\)-го запроса.

Выходные данные

Для каждого запроса выведите одно целое число — стоимость подстроки строки \(s\) с \(l_i\)-й по \(r_i\)-ю позицию включительно.

Примечание

Рассмотрим запросы в примере из условия.

  • в первом запросе интересующая нас подстрока — baa, ее можно превратить в bac за одну операцию;
  • во втором запросе интересующая нас подстрока — baacb, ее можно превратить в cbacb за две операции;
  • в третьем запросе интересующая нас подстрока — cb, ее можно оставить без изменений;
  • в четвертом запросе интересующая нас подстрока — aa, ее можно превратить в ba за одну операцию.

E. Равновесие

дп жадные алгоритмы Структуры данных *2200

У Василия есть два массива \(a\) и \(b\), состоящие из \(n\) элементов.

Для некоторых отрезков \(l..r\) этих массивов Василий хочет узнать, можно ли уравнять значения массивов на этих отрезках, используя операцию балансировки. Формально говоря, значения на отрезке уравнены, если для всех \(i\) от \(l\) до \(r\) выполняется \(a_i = b_i\).

Для того, чтобы выполнить операцию балансировки, необходимо выбрать четное количество индексов массива \(l \le pos_1 < pos_2 < \dots < pos_k \le r\). Далее к элементам массива a на позициях \(pos_1, pos_3, pos_5, \dots\) прибавляется единица и к элементам массива b на позициях \(pos_2, pos_4, pos_6, \dots\) прибавляется единица.

Василия интересует, можно ли уравнять значения элементов двух массивов для каждого отрезка, используя некоторое количество операций балансировки, и какое минимальное количество операций для этого потребуется. Обратите внимание, что для каждого отрезка операции проводятся независимо.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 10^5\), \(1 \le q \le 10^5\)) — размер массива \(a\) и \(b\), а также количество отрезков.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((0 \le a_i \le 10^9)\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) \((0 \le b_i \le 10^9)\).

Следующие \(q\) строк содержат по два целых числа \(l_i\) и \(r_i\) \((1 \le l_i < r_i \le n)\) — границы отрезков.

Выходные данные

Для каждого отрезка выведите одно целое число — минимальное количество операций либо «-1», если сделать отрезки массива одинаковыми не получится.

Примечание

Для первого отрезка от \(2\) до \(6\) можно сделать одну операцию с \(pos = [2, 3, 5, 6]\), после операции массивы буду выглядеть следующим образом: \(a = [0, 2, 2, 9, 4, 2, 7, 5]\), \(b = [2, 2, 2, 9, 4, 2, 5, 8]\). Массивы на отрезке от \(2\) до \(6\) после этой операции совпадают.

Для второго отрезка от \(1\) до \(7\) можно сделать три следующие операции:

  1. \(pos = [1, 3, 5, 6]\)
  2. \(pos = [1, 7]\)
  3. \(pos = [2, 7]\)

После операций массивы станут выглядеть следующим образом: \(a = [2, 2, 2, 9, 4, 2, 7, 5]\), \(b = [2, 2, 2, 9, 4, 2, 7, 8]\). Массивы на отрезке от \(1\) до \(7\) после этих операций совпадают.

Для третьего отрезка от \(2\) до \(4\) можно сделать одну операцию с \(pos = [2, 3]\), после операции массивы буду выглядеть следующим образом: \(a = [0, 2, 2, 9, 3, 2, 7, 5]\), \(b = [2, 2, 2, 9, 4, 1, 5, 8]\). Массивы на отрезке от \(2\) до \(4\) после этой операции совпадают.

Для четвертого и пятого отрезков добиться равенства невозможно.

F. Ставки на матчи

битмаски графы дп Комбинаторика математика Теория вероятностей *2500

Василий увлекается не только трейдингом, но и ставками на спортивные матчи. В матче участвует \(n\) спортивных команд. Каждая команда характеризуется силой \(a_i\). Каждые две команды \(i < j\) играют друг с другом ровно один раз. С вероятностью \(\frac{a_i}{a_i + a_j}\) побеждает команда \(i\), с вероятностью \(\frac{a_j}{a_i + a_j}\) побеждает команда \(j\).

Команда называется победителем, если она прямо или косвенно победила все остальные команды. Команда \(a\) победила (прямо или косвенно) команду \(b\), если существует последовательность команд \(c_1\), \(c_2\), ... \(c_k\) такая, что \(c_1 = a\), \(c_k = b\) и команда \(c_i\) выиграла матч у команды \(c_{i + 1}\) для всех \(i\) от \(1\) до \(k - 1\). Обратите внимание, что возможно, что команда \(a\) победила команду \(b\), и в то же время команда \(b\) победила команду \(a\).

Василий хочет, чтобы вы помогли ему определить математическое ожидание количества победителей.

Входные данные

В первой строке находится целое число \(n\) (\(1 \leq n \leq 14\)) — количество команд, участвующих в матче.

В следующей строке находится \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^6\)) — силы команд, участвующих в матче.

Выходные данные

Выведите единственное целое число — математическое ожидание количества победителей турнира по модулю \(10^9 + 7\).

Формально, пусть \(M = 10^9+7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

Чтобы лучше понять, в каких ситуациях возможно несколько победителей, рассмотрим второй тест:

Одним из возможных результатов сыгранных матчей является следующий (\(a \rightarrow b\) означает, что \(a\) выиграла матч у \(b\)):

  • \(1 \rightarrow 2\)
  • \(2 \rightarrow 3\)
  • \(3 \rightarrow 1\)
  • \(1 \rightarrow 4\)
  • \(1 \rightarrow 5\)
  • \(2 \rightarrow 4\)
  • \(2 \rightarrow 5\)
  • \(3 \rightarrow 4\)
  • \(3 \rightarrow 5\)
  • \(4 \rightarrow 5\)

Или более наглядно на рисунке:

В данном варианте каждая команда из множества \(\{ 1, 2, 3 \}\) прямо или косвенно победила всех. То есть:

  • \(1\)-я победила всех, так как до остальных можно добраться следующим образом \(1 \rightarrow 2\), \(1 \rightarrow 2 \rightarrow 3\), \(1 \rightarrow 4\), \(1 \rightarrow 5\).
  • \(2\)-я победила всех, так как до остальных можно добраться следующим образом \(2 \rightarrow 3\), \(2 \rightarrow 3 \rightarrow 1\), \(2 \rightarrow 4\), \(2 \rightarrow 5\).
  • \(3\)-я победила всех, так как до остальных можно добраться следующим образом \(3 \rightarrow 1\), \(3 \rightarrow 1 \rightarrow 2\), \(3 \rightarrow 4\), \(3 \rightarrow 5\).

Следовательно, количество победителей равно \(3\).

C. Moamen и XOR

битмаски дп Комбинаторика математика матрицы *1700

Moamen и Ezzat играют в игру. Они создают массив \(a\) длины \(n\), состоящий из неотрицательных целых чисел, где каждый элемент меньше \(2^k\).

Moamen победит, если \(a_1 \,\&\, a_2 \,\&\, a_3 \,\&\, \ldots \,\&\, a_n \ge a_1 \oplus a_2 \oplus a_3 \oplus \ldots \oplus a_n\).

Здесь \(\&\) обозначает операцию битового И, а \(\oplus\) обозначает операцию битового исключающего ИЛИ.

Теперь Moamen хочет узнать, сколько существует таких массивов \(a\), где он побеждает?

Так как ответ может быть очень большим, выведите его по модулю \(1\,000\,000\,007\) (\(10^9 + 7\)).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 5\))— количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(1 \le n\le 2\cdot 10^5\), \(0 \le k \le 2\cdot 10^5\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных массивов, в которых Moamen победит.

Выведите результат по модулю \(1\,000\,000\,007\) (\(10^9 + 7\)).

Примечание

В первом примере \(n = 3\), \(k = 1\). В результате все возможные массивы — это \([0,0,0]\), \([0,0,1]\), \([0,1,0]\), \([1,0,0]\), \([1,1,0]\), \([0,1,1]\), \([1,0,1]\) и \([1,1,1]\).

Moamen победит только в \(5\) из них: \([0,0,0]\), \([1,1,0]\), \([0,1,1]\), \([1,0,1]\), \([1,1,1]\).

D. Ezzat и таблица

дп жадные алгоритмы Структуры данных *2200

Moamen нарисовал таблицу из \(n\) строк и \(10^9\) столбцов, состоящую из цифр \(0\) и \(1\). Ezzat заметил, что Moamen рисует и заинтересовался, какое минимальное число строк нужно удалить, чтобы таблица стала прекрасной.

Таблица прекрасна, если и только если для каждых двух последовательных строк найдется хотя бы один столбец, содержащий \(1\) в этих двух строках.

Ezzat опишет таблицу с помощью числа строк \(n\), и \(m\) отрезков таблицы, содержащих \(1\). Каждый отрезок задается тремя числами \(i\), \(l\), и \(r\), где \(i\) задает номер строки, а \(l\) и \(r\) задают первый и последний столбцы отрезка в этой строке.

Например, если \(n = 3\), \(m = 6\), и заданы отрезки \((1,1,1)\), \((1,7,8)\), \((2,7,7)\), \((2,15,15)\), \((3,1,1)\), \((3,15,15)\), то таблица выглядит так:

Ваша задача — сказать Ezzat, сколько минимум строк нужно удалить, чтобы таблица стала прекрасной.

Входные данные

В первой строке содержатся два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3\cdot10^5\)).

В каждой из следующих \(m\) строк содержатся три целых числа \(i\), \(l\) и \(r\) (\(1 \le i \le n\), \(1 \le l \le r \le 10^9\)). Каждая из этих \(m\) строк означает, что строка \(i\) содержит \(1\) в столбцах с \(l\) по \(r\).

Обратите внимание, что отрезки могут накладываться.

Выходные данные

В первой строке выведите одно целое число \(k\) — минимальное число строк, которые необходимо удалить.

Во второй строке выведите \(k\) различных чисел \(r_1, r_2, \ldots, r_k\), задающих строки, которые нужно удалить (\(1 \le r_i \le n\)), в любом порядке.

Если существует несколько решений, выведите любое из них.

Примечание

Таблица из первого примера приведена в условии задачи. Для нее уже верно, что:

  1. \(1\)-я и \(2\)-я строки имеют \(1\) в столбце \(7\).
  2. \(2\)-я и \(3\)-я строки имеют \(1\) в столбце \(15\).
Значит, исходная таблица уже прекрасная и мы не должны удалять ничего.

Во втором примере таблица следующая:

B. Верхняя ячейка

дп математика Перебор теория чисел *1900

Обратите внимание, что ограничение по памяти в этой задаче ниже, чем в других.

У вас есть вертикальная полоска из \(n\) ячеек, последовательно пронумерованных сверху вниз от \(1\) до \(n\).

У вас также есть токен, изначально расположенный в ячейке \(n\). Вы будете двигать токен вверх до тех пор, пока он не окажется в ячейке \(1\).

Пусть в некоторый момент токен находится в ячейке \(x > 1\). Один сдвиг токена может иметь любой из следующих двух видов:

  • Вычитание: вы выбираете целое число \(y\) от \(1\) до \(x-1\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(x - y\).
  • Деление с округлением вниз: вы выбираете целое число \(z\) от \(2\) до \(x\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(\lfloor \frac{x}{z} \rfloor\) (частное от деления \(x\) на \(z\) с округлением вниз).

Найдите число способов, которыми токен может добраться из ячейки \(n\) в ячейку \(1\) за один или более сдвигов, и выведите это число по модулю \(m\). Обратите внимание, что если есть несколько способов переместить токен из одной ячейки в другую за один сдвиг, все эти способы считаются различными (смотрите пояснение к примерам для лучшего понимания).

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 4 \cdot 10^6\); \(10^8 < m < 10^9\); \(m\) — простое число) — длину полоски и число, по модулю которого необходимо вычислить ответ.

Выходные данные

Выведите число способов для токена добраться из ячейки \(n\) в ячейку \(1\), по модулю \(m\).

Примечание

В первом тесте есть три способа добраться из ячейки \(3\) в ячейку \(1\) за один сдвиг: с помощью вычитания \(y = 2\), а также с помощью деления на \(z = 2\) или \(z = 3\).

Также есть два способа добраться из ячейки \(3\) в ячейку \(1\) через ячейку \(2\): сначала вычесть \(y = 1\), а потом либо снова вычесть \(y = 1\), либо поделить на \(z = 2\).

Таким образом, всего способов пять.

B. Mocha и красное и синее

дп жадные алгоритмы *900

Их история развивается, и вечная сказка будет рассказана снова...

Shirahime, друг Mocha, обожает играть в музыкальную игру Arcaea, а также показывать Mocha интересные головоломки. Сегодня Shirahime придумал новую простенькую головоломку и хочет, чтобы Mocha решила ее. Однако эти головоломки слишком просты для Mocha, и она хочет, чтобы вы их решили и сказали ей ответ. Головоломки описаны ниже.

В ряд расположены \(n\) квадратов, каждый из которых может быть покрашен в красный или синий цвета.

Некоторые из квадратов уже покрашены, а остальные еще не покрашены. Вы можете решить, в какой цвет покрасить каждый непокрашенный квадрат.

Некоторые пары соседних квадратов могут иметь одинаковый цвет, что не идеально. Определим неидеальность как количество пар соседних квадратов одного цвета.

Например, неидеальность «BRRRBBR» равна \(3\), так как «BB» встречается один раз, а «RR» — дважды.

Ваша цель — покрасить непокрашенные квадраты таким образом, чтобы минимизировать неидеальность.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных, каждый в двух строках.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\leq n\leq 100\)) — количество квадратов.

Вторая строка содержит строку \(s\) длины \(n\), состоящую из латинских букв «B», «R» и знаков вопроса «?». Здесь «B» обозначает синий квадрат, «R» — красный, а «?» — непокрашенный.

Выходные данные

Для каждого набора входных данных выведите строку, состоящую из букв «B» и «R», обозначающую цвета квадратов после покраски, минимизирующей неидеальность. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных, если покрасить квадраты как «BRRBRBR», то неидеальность будет равна \(1\) (т. к. квадраты \(2\) и \(3\) одного цвета), что является минимальной возможной неидеальностью.

E. Mocha и звезды

бпф дп Комбинаторика математика теория чисел *2200

Mocha хочет быть астрологом. В небе над Чжицзяном \(n\) звезд, яркость \(i\)-й звезды равна \(a_i\).

Mocha считает, что \(n\) звезд образуют созвездие, и описывает его состояние массивом \((a_1,a_2,\ldots,a_n)\). Состояние называется математическим, если все три следующих условия выполнены:

  • Для всех \(i\) (\(1\le i\le n\)), \(a_i\) — целое число из отрезка \([l_i, r_i]\).
  • \(\sum \limits _{i=1} ^ n a_i \le m\).
  • \(\gcd(a_1,a_2,\ldots,a_n)=1\).

Здесь, \(\gcd(a_1,a_2,\ldots,a_n)\) обозначает наибольший общий делитель (НОД) чисел \(a_1,a_2,\ldots,a_n\).

Mocha интересуется, сколько существует математических состояний этого созвездия. Так как ответ может быть большим, вы должны найти его по модулю \(998\,244\,353\).

Два состояния \((a_1,a_2,\ldots,a_n)\) и \((b_1,b_2,\ldots,b_n)\) считаются различными, если существует индекс \(i\) (\(1\le i\le n\)) такой, что \(a_i \ne b_i\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 50\), \(1 \le m \le 10^5\)) — количество звезд и верхнее ограничение на сумму яркостей звезд.

Каждая из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)) — отрезок возможных значений яркости \(i\)-й звезды.

Выходные данные

Выведите одно целое число — количество различных математических состояний созвездия по модулю \(998\,244\,353\).

Примечание

В первом примере есть \(4\) различных математических состояния:

  • \(a_1=1\), \(a_2=1\).
  • \(a_1=1\), \(a_2=2\).
  • \(a_1=2\), \(a_2=1\).
  • \(a_1=3\), \(a_2=1\).

C. Шифр

дп Комбинаторика *2000

Шерлок Холмс обнаружил тайную переписку двух неких очень важных личностей и твердо вознамерился ее прочитать. Но не тут-то было! Оказалось, что переписка зашифрована. Он долго бился над этим шифром, но ничего не мог понять.

Наконец, после некоторых раздумий, он осознал следующий факт. Пусть имеется слово s, состоящее из |s| строчных букв латинского алфавита. Тогда одной операцией можно выбрать некоторую позицию p (1 ≤ p < |s|) и сделать одно из двух:

  • либо букву sp заменить на следующую за ней в алфавитном порядке, и букву sp + 1 заменить на предшествующую ей в алфавитном порядке;
  • либо букву sp заменить на предшествующую ей в алфавитном порядке, и букву sp + 1 заменить на следующую за ней в алфавитном порядке.

Заметим, что для буквы «z» не определена следующая буква, а для буквы «a» не определена предыдущая буква. Поэтому соответствующие замены не допустимы. Если операция требует выполнения хотя бы одной недопустимой замены, то такую операцию нельзя выполнить.

Два слова совпадают по смыслу тогда и только тогда, когда одно можно получить из другого посредством выполнения нуля или более операций.

Шерлоку Холмсу требуется научиться быстро определять, сколько всего может существовать слов, совпадающих по смыслу с данным словом, но отличающихся от него хотя бы одним символом. Посчитайте для него это количество по модулю 1000000007 (109 + 7).

Входные данные

Во входных данных содержится несколько тестов. В первой строке записано единственное целое число t (1 ≤ t ≤ 104) — количество тестов.

В следующих t строках расположены сами слова, по одному слову в строке. Каждое слово состоит из строчных букв латинского алфавита и имеет длину от 1 до 100 включительно. Длины слов могут быть разными.

Выходные данные

Для каждого слова надо вывести количество различных других слов, которые совпадают с ним по смыслу — не среди слов, указанных во входных данных, а среди всех возможных слов. Поскольку искомое количество может быть очень большим, выведите его значение по модулю 1000000007 (109 + 7).

Примечание

Некоторые пояснения касательно операции:

  • Обратите внимание, что для каждой буквы следующая за ней определена однозначно. Буква «b» является следующей в алфавитном порядке за буквой «a», буква «c» является следующей за «b», ..., «z» является следующей за буквой «y».
  • Аналогичным образом определены и предшествующие буквы: буква «y» является предшествующей букве «z», ..., «a» является предшествующей букве «b».
  • Заметьте, что операция никогда не меняет длину слова.

В первом примере можно получить единственную другую строку — «ba».

Во втором примере нельзя получить такими действиями ни одной другой подстроки, поэтому правильный ответ — 0.

Рассмотрим подробнее третий пример. Из слова «klmbfxzb» за одну операцию можно получить слово «klmcexzb»: нужно выбрать p = 4, и заменить четвертую букву на следующую («b»  →  «c»), а пятую — на предшествующую («f»  →  «e»). Также из этого слова можно получить много других слов за одну операцию. Из слова «ya» за одну операцию можно получить только одно другое слово — «xb».

Слово «ya» совпадает по смыслу со словами «xb», «wc», «vd», ..., «ay» (всего 24 других слова). Для слова «klmbfxzb» вариантов гораздо больше — существует 3320092814 других слов, совпадающих с ним по смыслу. Ответ для первого слова 24, для второго 320092793 — это 3320092814 по модулю 109 + 7

E. Оладьи миссис Хадсон

дп Перебор *3000

Миссис Хадсон давно не пекла свои знаменитые оладьи, и вот, наконец, решила испечь их вновь. Недавно она узнала m новых рецептов, и ей не терпится их опробовать. Эти рецепты основываются на n особых приправах. На кухне у миссис Хадсон все эти приправы лежат в баночках, пронумерованных целыми числами от 0 до n - 1 (каждая приправа лежит в своей баночке). На каждой баночке также написана цена соответствующей приправы — некоторое целое число ai.

Для i-ого рецепта оладий известно три величины: di, si, ci. Здесь di и ci — целые числа, а siшаблон некоторого целого числа, записанного в системе счисления с основанием di. Шаблон содержит цифры, латинские буквы (для обозначения цифр больше девяти) и знаки вопроса. Число x в di-ичной системе счисления подходит под шаблон si, если в шаблоне можно заменить знаки вопроса на цифры и буквы так, чтобы получилось число x (лидирующие нули не учитываются при сравнении). Более формально: каждый знак вопроса нужно заменить ровно одной цифрой или буквой. Если после замены всех вопросов получилось число с лидирующими нулями, эти нули можно отбросить. Например, число 40A9875 в 11-ичной системе счисления подходит под шаблон «??4??987?», а число 4A9875 — не подходит.

Чтобы приготовить оладьи по i-ому рецепту, необходимо взять все баночки, номера которых, переведенные в di-ичную систему счисления, подходят под шаблон si. Контрольным числом рецепта (zi) называется сумма числа ci и произведения цен всех взятых баночек. Более формально: (где j — все такие числа, которые в системе счисления с основанием di подходят под шаблон si). Если ни одна из баночек не подходит под шаблон, то произведение равно 1, а контрольное число равно ci + 1.

Миссис Хадсон не так интересны сами контрольные числа, как их минимальные простые делители. Ваша задача — найти для каждого рецепта i минимальный простой делитель числа zi. Если этот делитель больше 100, то его искать не требуется — выведите -1.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 104). Во второй строке через пробел перечислены цены приправ a0, a1, ..., an - 1, где ai — целое число (1 ≤ ai ≤ 1018).

В третьей строке записано единственное целое число m (1 ≤ m ≤ 3·104) — количество рецептов, которые узнала миссис Хадсон.

В следующих m строках описаны рецепты, по одному на каждой строке. Сначала задано целое число di, записанное в десятичной системе исчисления (2 ≤ di ≤ 16). Далее, через пробел, записан шаблон si — строка длиной от 1 до 30 включительно, состоящая из цифр от «0» до «9», букв от «A» до «F» и знаков «?». Буквы от «A» до «F» следует считать цифрами от 10 до 15 соответственно. Гарантируется, что все цифры шаблона (в том числе, обозначаемые буквами) строго меньше, чем di. Далее, через пробел, задано целое число ci, записанное в десятичной системе исчисления (1 ≤ ci ≤ 1018).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Выходные данные

Для каждого рецепта посчитайте, на какое минимальное простое число делится контрольное число в этом рецепте, и выведите это простое число в отдельной строке. Если это число окажется больше 100, выведите -1.

Примечание

В первом тесте подходит любой однозначный номер в двоичной системе исчисления. Банка всего одна и ее цена равна 1, число c тоже равно 1, контрольное число равна 2. Минимальный простой делитель числа 2 равен 2.

Во втором тесте есть 4 баночки с номерами от 0 до 3, и цены равны 2, 3, 5 и 7, соответственно — первые четыре простых числа. Во всех рецептах номера должны быть двухзначные. В первом рецепте вторая цифра обязательно 0, во втором — вторая цифра обязательно 1, в третьем варианте — первая цифра обязательно 0, в четвертом — первая цифра обязательно 1. Следовательно, контрольные числа получаются: в первом варианте 2 × 5 + 11 = 21 (минимальный простой делитель — 3); во втором варианте 3 × 7 + 13 = 44 (минимальный простой делитель — 2); в третьем варианте 2 × 3 + 17 = 23 (минимальный простой делитель — 23) и, наконец, в четвертом варианте 5 × 7 + 19 = 54 (минимальный простой делитель — 2).

В третьем тесте номер должен быть четырнадцатизначным числом в шестандцатиричной системе исчисления. Номер 0 (номер единственной баночки) подходит, контрольное число будет будет равна 1018 + 1. Минимальный простой делитель этого числа равен 101, вывести надо -1.

F2. Ближайшее красивое число (усложнённая версия)

битмаски дп жадные алгоритмы Конструктив Перебор поиск в глубину и подобное *2100

Это усложнённая версия задачи F1. Они отличаются только ограничениями (F1: \(k \le 2\), F2: \(k \le 10\)).

Дано число \(n\). Найдите минимальное целое число \(x\) такое, что \(x \ge n\) и \(x\) является \(k\)-красивым числом.

Число называется \(k\)-красивым, если в его десятичной записи, не содержащей лидирующих нулей, встречается не более \(k\) различных цифр. Например, если \(k = 2\), числа \(3434443\), \(55550\), \(777\) и \(21\) являются \(k\)-красивыми, а числа \(120\), \(445435\) и \(998244353\) — нет.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(1 \le n \le 10^9\), \(1 \le k \le 10\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(x\) — минимальное целое \(k\)-красивое число, так чтобы \(x \ge n\).

D1. Верхняя ячейка (упрощенная версия)

дп математика Перебор Структуры данных теория чисел *1700

Эта версия задачи отличается от следующей только ограничением на \(n\).

Обратите внимание, что ограничение по памяти в этой задаче ниже, чем в других.

У вас есть вертикальная полоска из \(n\) ячеек, последовательно пронумерованных сверху вниз от \(1\) до \(n\).

У вас также есть токен, изначально расположенный в ячейке \(n\). Вы будете двигать токен вверх до тех пор, пока он не окажется в ячейке \(1\).

Пусть в некоторый момент токен находится в ячейке \(x > 1\). Один сдвиг токена может иметь любой из следующих двух видов:

  • Вычитание: вы выбираете целое число \(y\) от \(1\) до \(x-1\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(x - y\).
  • Деление с округлением вниз: вы выбираете целое число \(z\) от \(2\) до \(x\) включительно и перемещаете токен из ячейки \(x\) в ячейку \(\lfloor \frac{x}{z} \rfloor\) (частное от деления \(x\) на \(z\) с округлением вниз).

Найдите число способов, которыми токен может добраться из ячейки \(n\) в ячейку \(1\) за один или более сдвигов, и выведите это число по модулю \(m\). Обратите внимание, что если есть несколько способов переместить токен из одной ячейки в другую за один сдвиг, все эти способы считаются различными (смотрите пояснение к примерам для лучшего понимания).

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\); \(10^8 < m < 10^9\); \(m\) — простое число) — длину полоски и число, по модулю которого необходимо вычислить ответ.

Выходные данные

Выведите число способов для токена добраться из ячейки \(n\) в ячейку \(1\), по модулю \(m\).

Примечание

В первом тесте есть три способа добраться из ячейки \(3\) в ячейку \(1\) за один сдвиг: с помощью вычитания \(y = 2\), а также с помощью деления на \(z = 2\) или \(z = 3\).

Также есть два способа добраться из ячейки \(3\) в ячейку \(1\) через ячейку \(2\): сначала вычесть \(y = 1\), а потом либо снова вычесть \(y = 1\), либо поделить на \(z = 2\).

Таким образом, всего способов пять.

D1. Двести двадцать один (простая версия)

дп математика Структуры данных *1700

Это простая версия задачи. Различия между версиями заключаются в том, что в простой версии не требуется выводить номера удаляемых стержней. Вы можете делать взломы, только если обе версии задачи сданы.

Стич любит экспериментировать с различными механизмами вместе со своим другом Спарки. Сегодня они построили очередную машину.

Главным элементом этой машины являются \(n\) стержней, расположенных вдоль одной прямой и пронумерованных от \(1\) до \(n\) включительно. На каждом из этих стержней должен находиться электрический заряд, количественно равный либо \(1\), либо \(-1\) (иначе машина не будет работать). Другим условием работы этой машины является то, что знакопеременная сумма заряда по всем стержням должна равняться нулю.

Более формально, стержни можно представить как массив из \(n\) чисел, характеризующих заряд: либо \(1\), либо \(-1\). Тогда должно выполняться условие: \(a_1 - a_2 + a_3 - a_4 + \ldots = 0\), или, выражаясь проще, \(\sum\limits_{i=1}^n (-1)^{i-1} \cdot a_i = 0\).

Спарки зарядил все \(n\) стержней электрическим током, но оказалось, что стержни заряжены неправильно (знакопеременная сумма заряда не равна нулю). Друзья решили оставить в машине только часть стержней. У Спарки есть \(q\) вопросов. В \(i\)-м вопросе Спарки интересуется: если бы машина состояла только из стержней с номерами с \(l_i\) по \(r_i\) включительно, какое минимальное количество стержней можно было бы удалить из машины так, чтобы знакопеременная сумма зарядов на оставшихся была равна нулю? Возможно, друзья что-то напутали, и знакопеременная сумма уже равна нулю. В таком случае, можно не удалять стержни вовсе.

Если количество стержней равно нулю, будем считать, что знакопеременная сумма зарядов равна нулю, то есть всегда можно удалить все стержни.

Помогите друзьям и ответьте на все вопросы Спарки!

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находятся два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\)) — количество стержней и количество вопросов соответственно.

Во второй строке находятся строка \(s\) длины \(n\), где заряд \(i\)-го стержня равен \(1\), если \(s_i\) это символ «+», или \(-1\), если \(s_i\) это символ «-».

Каждая из следующих \(q\) строк содержит два целых положительных числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — числа, описывающие вопросы Спарки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), а также сумма \(q\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — минимальное количество стержней, которое можно удалить.

Примечание

В первом наборе входных данных для первого запроса можно удалить стержни под номерами \(5\) и \(8\), тогда останется следующий набор стержней: +--+--++-++-. Нетрудно видеть, что здесь знакопеременная сумм равна нулю.

В втором наборе входных данных:

  • Для первого запроса можно удалить стержни под номерами \(1\) и \(11\), тогда останется следующий набор стержней: +--+--++-++-. Нетрудно видеть, что здесь знакопеременная сумма равна нулю.
  • Для второго запроса можно удалить стержень под номером \(9\), тогда останется следующий набор стержней: ---++-. Нетрудно видеть, что здесь знакопеременная сумма равна нулю.
  • Для третьего запроса можно не удалять стержни вовсе.

E. Спасти Нивен!

дп жадные алгоритмы Строки строковые суфф. структуры *2500

Morning desert sun horizon

Rise above the sands of time...

Fates Warning, «Exodus»

Преодолев, наконец, Подветренные Пустоши, Ори добрался до Развалин Ветров, дабы отыскать Сердце Леса! Однако древнее хранилище, содержащее этот бесценный свет Ивы, не желало открываться!

Ори очень этому удивился, но огонек объяснил ему: хитрые Горлеки решили наложить дополнительную защиту на хранилище.

Горлеки очень любили операцию «разворачивания строки». А еще они очень любили возрастающие подпоследовательности.

Пусть дана строка \(s_1s_2s_3 \ldots s_n\). Тогда «разворачиванием» этой строки назовем последовательность строк \(s_1\), \(s_1 s_2\), ..., \(s_1 s_2 \ldots s_n\), \(s_2\), \(s_2 s_3\), ..., \(s_2 s_3 \ldots s_n\), \(s_3\), \(s_3 s_4\), ..., \(s_{n-1} s_n\), \(s_n\). Например, «разворачиванием» строки 'abcd' будет последовательность строк 'a', 'ab', 'abc', 'abcd', 'b', 'bc', 'bcd', 'c', 'cd', 'd'.

Чтобы открыть древнее хранилище, Ори должен найти длину наибольшей возрастающей подпоследовательности «разворачивания» строки \(s\). Здесь строки сравниваются лексикографически.

Помогите Ори справиться с этой задачей!

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находится одно целое положительное число \(n\) (\(1 \le n \le 5000\)) — длина строки.

Во второй строке каждого набора входных данных находится непустая строка длины \(n\), состоящая из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — ответ на задачу.

Примечание

В первом наборе входных данных «разворачивание» строки выглядит так: 'a', 'ac', 'acb', 'acba', 'acbac', 'c', 'cb', 'cba', 'cbac', 'b', 'ba', 'bac', 'a', 'ac', 'c'. В качестве наибольшей возрастающей подпоследовательности можно выбрать, например, 'a', 'ac', 'acb', 'acba', 'acbac', 'b', 'ba', 'bac', 'c'.

B. MIN-MEX разрез

битмаски дп жадные алгоритмы Конструктив *800

Бинарная строка — это строка, состоящая из символов \(0\) и \(1\).

Определим \(\operatorname{MEX}\) бинарной строки как наименьшую из цифр \(0\), \(1\) или \(2\), которая не встречается в этой строке. Например, \(\operatorname{MEX}\) строки \(001011\) — это \(2\), потому что \(0\) и \(1\) встречаются хотя бы один раз. \(\operatorname{MEX}\) строки \(1111\) — это \(0\), потому что \(0\) и \(2\) не встречаются ни разу, и \(0 < 2\).

Дана бинарная строка \(s\). Необходимо разбить её на произвольное количество подстрок так, чтобы каждая её цифра принадлежала ровно одной подстроке. Строку разрешается разбить на одну подстроку — эту строку целиком.

Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Какую минимальную сумму \(\operatorname{MEX}\) всех полученных подстрок можно получить?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит единственную бинарную строку \(s\) (\(1 \le |s| \le 10^5\)).

Гарантируется, что сумма длин \(s\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — наименьшую сумму \(\operatorname{MEX}\), которую можно получить, разбив \(s\) на подстроки оптимально.

Примечание

В первом наборе входных данных минимальная сумма равна \(\operatorname{MEX}(0) + \operatorname{MEX}(1) = 1 + 0 = 1\).

Во втором наборе входных данных минимальная сумма равна \(\operatorname{MEX}(1111) = 0\).

В третьем наборе входных данных минимальная сумма равна \(\operatorname{MEX}(01100) = 2\).

C. MAX-MEX разрез

битмаски дп жадные алгоритмы Конструктив *1000

Бинарная строка — это строка, состоящая из символов \(0\) и \(1\). Би-таблица — это таблица, состоящая из ровно двух бинарных строк одинаковой длины.

Определим \(\operatorname{MEX}\) би-таблицы как наименьшую из цифр \(0\), \(1\) или \(2\), которая не встречается в этой би-таблице. Например, \(\operatorname{MEX}\) для \(\begin{bmatrix} 0011\\ 1010 \end{bmatrix}\) — это \(2\), потому что \(0\) и \(1\) встречаются хотя бы один раз. \(\operatorname{MEX}\) для \(\begin{bmatrix} 111\\ 111 \end{bmatrix}\) — это \(0\), потому что \(0\) и \(2\) не встречаются ни разу, и \(0 < 2\).

Дана би-таблица с \(n\) столбцами. Необходимо разбить её на произвольное количество би-таблиц (каждая состоит из последовательных столбцов) так, чтобы каждый её столбец принадлежал ровно одной би-таблице. Би-таблицу разрешается разбить на одну би-таблицу — её саму.

Какую максимальную сумму \(\operatorname{MEX}\) всех полученных би-таблиц можно получить?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество столбцов в би-таблице.

Каждая из следующих двух строк содержит бинарную строку длины \(n\)  — это строки би-таблицы.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — наибольшую сумму \(\operatorname{MEX}\), которую можно получить, разбив би-таблицу оптимально.

Примечание

В первом наборе входных данных би-таблицу можно разбить следующим образом:

  • \(\begin{bmatrix} 0\\ 1 \end{bmatrix}\), \(\operatorname{MEX}\) равен \(2\).
  • \(\begin{bmatrix} 10\\ 10 \end{bmatrix}\), \(\operatorname{MEX}\) равен \(2\).
  • \(\begin{bmatrix} 1\\ 1 \end{bmatrix}\), \(\operatorname{MEX}\) равен \(0\).
  • \(\begin{bmatrix} 0\\ 1 \end{bmatrix}\), \(\operatorname{MEX}\) равен \(2\).
  • \(\begin{bmatrix} 0\\ 0 \end{bmatrix}\), \(\operatorname{MEX}\) равен \(1\).
  • \(\begin{bmatrix} 0\\ 0 \end{bmatrix}\), \(\operatorname{MEX}\) равен \(1\).

Сумма \(\operatorname{MEX}\) равна \(8\).

E. Пересадка почек

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное *2000

Деревом называется связный граф без циклов. В корневом дереве есть особая вершина, которая называется корнем. Родитель вершины \(v\) (отличной от корня) — вершина перед \(v\) на кратчайшем пути от корня до \(v\). Дети вершины \(v\) — все вершины, для которых \(v\) является родителем.

Вершина называется листом, если у неё нет детей. Назовем вершину почкой, если выполняются три следующих условия:

  • она не является корнем,
  • у неё есть хотя бы один ребёнок, и
  • все её дети — листья.

Вам дано корневое дерево из \(n\) вершин. Вершина \(1\) — корень. За одно действие вы можете выбрать любую почку со всеми её детьми (они являются листьями) и переподвесить её за любую другую вершину дерева. Таким действием вы удаляете ребро, соединяющее почку и родителя, и добавляете ребро между почкой и выбранной вершиной дерева. Эта выбранная вершина не может совпадать с выбранной почкой или быть одним из ее детей. Все дети почки остаются соединёнными с ней.

Какое минимальное количество листьев можно получить, если разрешается сделать любое количество вышеописанных действий (возможно, ни одного)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в данном дереве.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)), которые означают, что есть в дереве есть ребро между вершинами \(u\) и \(v\).

Гарантируется, что данный граф является деревом.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество листьев, которое можно получить после нескольких (возможно нуля) действий.

Примечание

В первом наборе входных данных дерево выглядит следующим образом:

Сначала вы можете выбрать почку \(4\) и переподвесить её за вершину \(3\). После этого вы можете выбрать почку \(2\) и переподвесить её за вершину \(7\). В результате вы получите следующее дерево с \(2\) листьями:

Можно доказать, что это минимальное количество листьев, которое можно получить.

Во втором наборе входных данных дерево выглядит следующим образом:

Вы можете выбрать почку \(3\) и переподвесить её за вершину \(5\). В результате вы получите следующее дерево с \(2\) листьями:

Можно доказать, что это минимальное количество листьев, которое можно получить.

F. Движение точек

дп жадные алгоритмы реализация сортировки Структуры данных *2600

На числовой прямой даны \(n\) точек и \(m\) отрезков. Изначальная координата \(i\)-й точки равна \(a_i\). Левая и правая границы \(j\)-го отрезка это \(l_j\) и \(r_j\), соответственно.

Точки можно двигать. За одну операцию можно подвинуть любую точку из ее текущей координаты \(x\) в координату \(x - 1\) или в координату \(x + 1\). Стоимость такого движения \(1\).

Необходимо выполнить последовательность операций такую, чтобы каждый отрезок был посещён хотя бы одной точкой. Точка посетила отрезок \([l, r]\), если был такой момент, когда её координата принадлежала отрезку \([l, r]\) (включая границы).

Вы должны найти минимальную стоимость операций, которые нужно сделать, чтобы все отрезки были посещены.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество точек и отрезков соответственно.

Следующая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — изначальные координаты точек.

Каждая из следующих \(m\) строк содержит два целых числа \(l_j\) и \(r_j\) (\(-10^9 \le l_j \le r_j \le 10^9\)) — левая и правая границы \(j\)-го отрезка соответственно.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальную суммарную стоимость всех перемещений, чтобы посетить все отрезки.

Примечание

В первом наборе входных данных точки можно двигать следующим образом:

  • Подвинуть вторую точку из координаты \(6\) в координату \(5\).
  • Подвинуть третью точку из координаты \(14\) в координату \(13\).
  • Подвинуть четвёртую точку из координаты \(18\) в координату \(17\).
  • Подвинуть третью точку из координаты \(13\) в координату \(12\).
  • Подвинуть четвёртую точку из координаты \(17\) в координату \(16\).

Суммарная стоимость всех действий равна \(5\). Легко заметить, что все отрезки будут посещены после таких перемещений. Например, десятый отрезок (\([7, 13]\)) будет посещён после второго перемещения третьей точкой.

Ниже рисунок, иллюстрирующий первый набор входных данных:

H. Xor-квиз

дп интерактив Конструктив математика теория чисел *3200

Это интерактивная задача.

Вам даны два целых числа \(c\) и \(n\). У жюри есть случайно сгенерированное множество \(A\) различных положительных чисел, не превосходящих \(c\) (оно выбирается из всех таких возможных множеств с равной вероятностью). Размер \(A\) равен \(n\).

Ваша задача угадать множество \(A\). Для того, чтобы это сделать, вы можете сделать не более \(\lceil 0.65 \cdot c \rceil\) запросов.

В каждом запросе вы можете выбрать одно целое число \(1 \le x \le c\). В качестве ответа на этот запрос вы получите побитовое исключающее ИЛИ всех таких \(y\), что \(y \in A\) и \(gcd(x, y) = 1\) (т.е. \(x\) и \(y\) взаимно просты). Если таких \(y\) не существует, то такое побитовое ИЛИ равно \(0\).

Вы можете задать все вопросы в самом начале и получить ответы на все запросы. После этого у вас не будет возможности делать запросы.

Вы должны найти любое множество \(A'\) такое, что \(|A'| = n\) и \(A'\) и \(A\) дают одинаковые ответы для всех \(c\) возможных запросов.

Входные данные

Сначала вам даны два целых числа \(c\) и \(n\) (\(100 \le c \le 10^6\), \(0 \le n \le c\)).

Протокол взаимодействия

В первой строке вы должны вывести целое число \(q\) \((0 \le q \le \lceil 0.65 \cdot c \rceil)\) — количество запросов, которые вы хотите сделать. После этого в той же строке выведите \(q\) целых чисел \(x_1, x_2, \ldots, x_q\) \((1 \le x_i \le c)\) — сами запросы.

Для этих запросов вы должны считать \(q\) целых чисел, \(i\)-е из них — это ответ на вышеописанный запрос для \(x = x_i\).

После этого во второй строке вы должны вывести \(n\) целых чисел \(A'_1, A'_2, \ldots, A'_n\) — найденное множество \(A'\).

Если существуют разные множества \(A'\), для которых ответы на все возможные запросы совпадают, то выведите любое из них.

Если вы сделаете более \(\lceil 0.65 \cdot c \rceil\) запросов, или запросы будут некорректными, интерактор немедленно завершит работу, а ваша программа получит вердикт Неправильный ответ.

После вывода запросов не забудьте вывести символ перевода строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Вы не можете делать взломы по этой задаче.

Примечание

Тест из условия сделан только для того, чтобы вы поняли протокол взаимодействия. Ваше решение не будет запускаться на тесте из условия.

В тесте из условия \(A = \{1, 4, 5, 6, 8, 10\}\). Делается \(7\) запросов, \(7 \le \lceil 0.65 \cdot 10 \rceil = 7\), поэтому ограничение на количество запросов не превышено.

Ответы на запросы:

  • Для \(10\): \(1\) — единственное число в множестве \(A\), взаимно простое с \(10\), поэтому ответ \(1\)
  • Для \(2\): \(1_{10} \oplus 5_{10} = 001_2 \oplus 101_2 = 4_{10}\), где \(\oplus\) — побитовое исключающее ИЛИ
  • Для \(3\): \(1_{10} \oplus 4_{10} \oplus 5_{10} \oplus 8_{10} \oplus 10_{10} = 0001_2 \oplus 0100_2 \oplus 0101_2 \oplus 1000_2 \oplus 1010_2 = 2_{10}\)
  • Для \(5\): \(1_{10} \oplus 4_{10} \oplus 6_{10} \oplus 8_{10} = 0001_2 \oplus 0100_2 \oplus 0110_2 \oplus 1000_2 = 11_{10}\)
  • Для \(7\): \(1_{10} \oplus 4_{10} \oplus 5_{10} \oplus 6_{10} \oplus 8_{10} \oplus 10_{10} = 0001_2 \oplus 0100_2 \oplus 0101_2 \oplus 0110_2 \oplus 1000_2 \oplus 1010_2 = 4_{10}\)
  • Для \(1\): \(1_{10} \oplus 4_{10} \oplus 5_{10} \oplus 6_{10} \oplus 8_{10} \oplus 10_{10} = 0001_2 \oplus 0100_2 \oplus 0101_2 \oplus 0110_2 \oplus 1000_2 \oplus 1010_2 = 4_{10}\)
  • Для \(6\): \(1_{10} \oplus 5_{10} = 0001_2 \oplus 0101_2 = 4_{10}\)

C. Проблемные переносы

битмаски дп Комбинаторика математика *1600

Алиса только недавно изучила сложение. Однако она еще не полностью освоила концепт «переноса»: вместо того, чтобы переносить цифру в следующий разряд, она переносит ее через один разряд.

Например, обычный способ подсчета суммы \(2039 + 2976\) показан ниже:

Однако Алиса подсчитывает сумму следующим образом:

А именно, она делает следующее:

  • складывает \(9\) и \(6\), получая \(15\), и переносит \(1\) на два разряда левее, т. е. в столбец «\(0\) \(9\)»;
  • складывает \(3\) и \(7\), получая \(10\), и переносит \(1\) на два разряда левее, т. е. в столбец «\(2\) \(2\)»;
  • складывает \(1\), \(0\), и \(9\), получая \(10\), и переносит \(1\) на два разряда левее, т. е. в столбец над знаком плюс;
  • складывает \(1\), \(2\) и \(2\), получая \(5\);
  • складывает \(1\), получая \(1\).
Таким образом, она получает неправильный результат \(15005\).

Алиса пришла к Бобу и рассказала, что она сложила два целых числа и получила в результате \(n\). Но Боб знает, что Алиса сложила числа как умеет. Помогите Бобу посчитать количество упорядоченных пар положительных целых чисел таких, что при сложении методом Алисы получается число \(n\). Обратите внимание, что пары \((a, b)\) и \((b, a)\) считаются различными при \(a \ne b\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют сами наборы.

В единственно строке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 10^9\)) — число, которое получилось у Алисы.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество упорядоченных пар положительных целых чисел, таких что при сложении своим методом Алиса получит в результате \(n\).

Примечание

В первом наборе входных данных при сложении Алисой любой из следующих пар: \(1 + 9\), \(2 + 8\), \(3 + 7\), \(4 + 6\), \(5 + 5\), \(6 + 4\), \(7 + 3\), \(8 + 2\) или \(9 + 1\), она получит \(100\) в результате. Изображение, показывающее как Алиса сложит \(6 + 4\), показано ниже:

F. Палиндромный гамильтонов путь

графы дп Перебор поиск в глубину и подобное хэши *3000

Задан простой неориентированный граф с \(n\) вершинами, \(n\) четно. Вы планируете написать одну букву на каждой вершине. Каждая буква должна быть одной из первых \(k\) букв латинского алфавита.

Путь в графе называется гамильтоновым, если он посещает каждую вершину ровно один раз. Строка называется палиндромной, если она читается одинаково слева направо и справа налево. Путь в графе называется палиндромным, если при выписывании букв с вершин в порядке пути получается палиндромная строка.

Строка длины \(n\) хорошая, если:

  • каждая буква — это одна из первых \(k\) латинского алфавита;
  • если написать \(i\)-ю букву строки на \(i\)-й вершине графа, то в графе будет существовать палиндромный гамильтонов путь.

Обратите внимание, что путь не обязан проходить по вершинам в порядке \(1, 2, \dots, n\).

Посчитайте количество хороших строк.

Входные данные

В первой строке записаны три целых числа \(n\), \(m\) and \(k\) (\(2 \le n \le 12\); \(n\) четно; \(0 \le m \le \frac{n \cdot (n-1)}{2}\); \(1 \le k \le 12\)) — количество вершин в графе, количество ребер в графе и количество первых букв алфавита, которые можно использовать.

В каждой из следующих \(m\) строк записаны по два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\); \(v \neq u\)) — ребра графа. Граф не содержит кратных ребер и петель.

Выходные данные

Выведите одно целое число — количество хороших строк.

E. Почини строку

*особая задача битмаски дп жадные алгоритмы *1700

Правильная скобочная последовательность — это скобочная последовательность, которую можно превратить в корректное арифметическое выражение, вставив символы «1» и «+» между исходными символами. Например:

  • скобочные последовательности «()()» и «(())» — правильные (из них можно получить выражения «(1)+(1)» и «((1+1)+1)»);
  • скобочные последовательности «)(», «(» и «)» — неправильные.

Вам даны две строки \(s\) и \(a\), длина строки \(s\) равна \(n\), длина строки \(a\) равна \(n - 3\). Строка \(s\) — скобочная последовательность (т. е. каждый элемент этой строки — либо символ открывающей скобки, либо символ закрывающей скобки). Строка \(a\) — бинарная (т. е. каждый элемент этой строки — либо 1, либо 0).

Строка \(a\) вводит ограничения на строку \(s\): для каждого \(i\), такого, что символ \(a_i\) — это 1, строка \(s_i s_{i+1} s_{i+2} s_{i+3}\) должна быть правильной скобочной последовательностью. Символы строки \(a\), равные 0, не вводят никаких ограничений.

Изначально строка \(s\) может не удовлетворять этим ограничениям. Чтобы это исправить, можно проводить следующую операцию любое кол-во раз: заменить некоторый символ \(s\) скобкой другого типа (то есть можно менять открывающие скобки на закрывающие и наоборот).

Определите, можно ли поменять некоторые символы в \(s\) таким образом, что она будет удовлетворять всем ограничениям, и если это возможно, посчитайте минимальное кол-во символов, которые надо заменить.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк. В первой строке задано одно целое число \(n\) (\(4 \le n \le 2 \cdot 10^5\)). Во второй строке задана строка \(s\) из ровно \(n\) символов; каждый символ \(s\) — либо «(», либо «)». В третьей строке задана строка \(a\) из ровно \(n - 3\) символов; каждый символ \(a\) — либо «1», либо «0».

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное количество символов, которое нужно поменять в \(s\), или \(-1\), если все ограничения выполнить невозможно.

F. Kotlinforces

*особая задача дп Конструктив *2000

Kotlinforces — веб-платформа, на которой проводятся соревнования по программированию.

На Kotlinforces планируется провести \(n\) соревнований по программированию в следующие \(m\) дней. Каждое соревнование проводится в несколько этапов; регламент \(i\)-го соревнования гласит, что оно проводится в \(k_i\) этапов, и каждый этап, начиная со второго, должен пройти ровно на \(t_i\) дней позже предыдущего. То есть, если первый этап \(i\)-го соревнования проводится в день \(x\), второй этап будет проводиться в день \(x+t_i\), третий — в день \(x+2t_i\), ..., \(k_i\)-й этап (он же последний) — в день \(x+(k_i-1)t_i\).

Все \(n\) соревнований необходимо распланировать так, чтобы они прошли за следующие \(m\) дней, и в каждый из этих \(m\) дней проводилось не более одного этапа одного соревнования (два этапа разных соревнований не могут проводиться в один и тот же день).

Возможно ли провести все \(n\) соревнований и соблюсти все условия?

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n, m \le 5000\)) — количество соревнований и количество дней, соответственно.

Затем следуют \(n\) строк, в каждой из которых описывается соревнование. В \(i\)-й строке заданы два целых числа \(k_i\) и \(t_i\) (\(2 \le k_i \le 5000\); \(1 \le t_i \le 2\)) — параметры \(i\)-го соревнования.

Выходные данные

Если невозможно запланировать все \(n\) соревнований на следующие \(m\) дней так, что ни в один день не проводится более одного этапа, выведите -1.

Иначе выведите \(n\) целых чисел; \(i\)-е из них должно быть номером дня, в который будет проводиться первый этап \(i\)-го соревнования, дни пронумерованы с \(1\) до \(m\). Если существует несколько подходящих ответов, выведите любой из них.

G. Битва против дракона

*особая задача дп Структуры данных *2500

Отряд из \(n\) воинов защищает замок от нападения дракона. Между драконом и замком есть \(m\) баррикад.

Воины пронумерованы от \(1\) до \(n\). \(i\)-й воин знает \(k_i\) атак: \(j\)-я из них наносит \(a_{i,j}\) урона дракону и может быть применена только есть между замком и драконом ровно \(b_{i,j}\) баррикад.

Воины ходят один за другим, начиная с воина \(1\). После того как воин \(n\) завершит свой ход, считается суммарный урон, нанесенный дракону. \(i\)-й воин в свой ход совершает одно из трех возможных действий:

  1. разрушить одну баррикаду (если еще остались);
  2. применить одну из \(k_i\) своих атак;
  3. пропустить ход.

Суммарный урон считается, как сумма уронов от атак, примененных воинами, которые в свой ход выбрали атаковать. Какой наибольший суммарный урон воины могут нанести дракону?

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\)) — количество воинов и начальной количество баррикад.

Затем следуют описания атак каждого воина. \(i\)-е описание состоит из трех строк.

В первой строке записано одно целое число \(k_i\) (\(1 \le k_i \le m + 1\)) — количество атак, которые знает \(i\)-й воин.

Во второй строке записаны \(k_i\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,k_i}\) (\(1 \le a_{i,j} \le 10^9\)) — урон от каждой атаки.

В третьей строке записаны \(k_i\) целых чисел \(b_{i,1}, b_{i,2}, \dots, b_{i,k_i}\) (\(0 \le b_{i,j} \le m\)) — необходимое число баррикад для каждой атаки. \(b_{i,j}\) для \(i\)-го воина попарно различные. Атаки приведены в порядке возрастания необходимого числа баррикад, то есть \(b_{i,1} < b_{i,2} < \dots < b_{i,k_i}\).

Сумма \(k_i\) по всем воинам не превосходит \(3 \cdot 10^5\).

Выходные данные

Выведите одно целое число — наибольший суммарный урон, который воины могут нанести дракону.

Примечание

В первом примере лучший выбор следующий:

  • воин \(1\) уничтожает баррикаду, остается \(3\) баррикады;
  • воин \(2\) применяет свою первую атаку (он может это сделать, потому что \(b_{1,1}=3\), что равно текущему числу баррикад).

Суммарный урон равен \(10\).

Если бы первый воин применил свою атаку или пропустил свой ход, то второй мог бы применить только вторую атаку. Таким образом, урон был бы \(2+5=7\) или \(5\).

Во втором примере первый воин пропускает свой ход, второй воин пропускает свой ход, а третий воин применяет свою единственную атаку.

В третьем примере есть два варианта:

  • оба воина применяют свои вторые атаки;
  • первый воин уничтожает одну баррикаду, а второй воин применяет свою первую атаку.

В обоих случаях получается \(30\) суммарного урона.

A. Книга

Бинарный поиск графы дп Перебор реализация сортировки Структуры данных *1800

У вас есть книга, в которой \(n\) глав.

В начале каждой главы перечислен список других глав, которые нужно понимать для понимания написанного в этой главе. Чтобы понять главу, нужно прочитать эту главу после того, как вы поняли все главы из данного списка.

Сейчас ни одна глава книги не понятна вам. Вы планируете читать книгу с начала до конца по кругу до тех пор, пока не поймете все главы. Обратите внимание, что если вы читаете некоторую главу, но еще не понимаете какие-то из необходимых для ее понимания глав, то вы не можете понять эту главу.

Определите, сколько раз вам нужно будет прочитать всю книгу, чтобы понять все главы, или определите, что есть главы, которые вы никогда не поймете, сколько бы раз вы не прочитали книгу.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2\cdot10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит \(n\) (\(1 \le n \le 2\cdot10^5\)) — количество глав.

Далее следуют \(n\) строк. \(i\)-я из этих строк начинается с целого числа \(k_i\) (\(0 \le k_i \le n-1\)) — количества глав, которые требуется понимать для понимания \(i\)-й главы. Далее следуют \(k_i\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i, k_i}\) (\(1 \le a_{i, j} \le n, a_{i, j} \ne i, a_{i, j} \ne a_{i, l}\) для \(j \ne l\)) — главы, которые нужно понимать для понимания \(i\)-й главы.

Гарантируется, что сумма значений \(n\) и сумма значений \(k_i\) по всем наборам входных данных не превосходят \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных, если вы можете понять все главы, выведите, сколько раз вам нужно прочитать книгу целиком, иначе выведите \(-1\).

Примечание

В первом примере с первого прочтения вы поймете главы \(\{2, 4\}\), а со второго — главы \(\{1, 3\}\).

Во втором примере для понимания любой главы нужно сначала понимать какую-то другую, поэтому невозможно понять всю книгу.

В третьем примере для понимания любой главы нужно понимать только более ранние, поэтому можно понять всю книгу за одно прочтение.

В четвертом примере вы поймете главы \(\{2, 3, 4\}\) с первого прочтения, и главу \(1\) со второго.

В пятом примере вы будем понимать главы по одной за прочтение, с \(5\)-й по \(1\)-ю.

C. Покраска

дп жадные алгоритмы *2700

У вас есть изображение размером \(1\) на \(n\) пикселей. \(i\)-й пиксель изображения имеет цвет \(a_i\). Для каждого цвета число пикселей, имеющих этот цвет, не более \(20\).

Вы можете выполнять следующую операцию, которая обычно называется «заливка» в редакторах изображений:

  • выбрать цвет — целое число от \(1\) до \(n\);
  • выбрать некоторый пиксель изображения;
  • изменить цвет всех связных с выбранным пикселем на выбранный цвет (два пикселя одного цвета называются связными, если все пиксели между ними имеют такой же цвет, как и эти два пикселя).

Вычислите минимальное количество операций, необходимое, чтобы все пиксели изображения стали одного цвета.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит \(n\) (\(1 \le n \le 3\cdot10^3\)) — количество пикселей.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — начальные цвета пикселей в изображении.

Обратите внимание, что для каждого цвета число пикселей, имеющих этот цвет, не более \(20\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3\cdot10^3\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное количество операций, необходимое, чтобы сделать все пиксели изображения одного цвета.

Примечание

В первом примере оптимальное решение — применить операцию на третьем пикселе, изменив его цвет на \(2\), и затем применить операцию на любом пикселе цвета \(2\), изменив его и всех связных пикселей цвет на \(1\). Последовательность операций тогда будет: \([1, 2, 3, 2, 1] \to [1, 2, 2, 2, 1] \to [1, 1, 1, 1, 1]\).

Во втором примере мы можем либо изменить все \(1\) на \(2\) за одну операцию, или все \(2\) на \(1\) также за одну операцию.

В третьем примере один из возможных способов сделать все пиксели одного цвета — применить операцию на первом, третьем и четвертом пикселе, каждый раз выбирая цвет \(2\).

E. Многоугольник

Бинарный поиск геометрия дп *3000

У вас есть строго выпуклый многоугольник с \(n\) вершинами.

Вы сделаете \(k\) разрезов, удовлетворяющих следующим условиям:

  • каждый разрез — отрезок, соединяющий две различные не соседние вершины;
  • два разреза могут пересекаться только в вершинах многоугольника.

Ваша задача — максимизировать площадь минимальной по площади области, образованной многоугольником и этими \(k\) разрезами.

Входные данные

Первая строка содержит два целых числа \(n\), \(k\) (\(3 \le n \le 200\), \(0 \le k \le n-3\)).

Следующие \(n\) строк описывают вершины многоугольника в порядке против часовой стрелки. \(i\)-из этих строк содержит два целых числа \(x_i\), \(y_i\) (\(|x_i|, |y_i| \le 10^8\)) — координаты \(i\)-й вершины.

Гарантируется, что многоугольник выпуклый и никакие две смежные стороны не параллельны.

Выходные данные

Выведите одно целое число: максимально возможную площадь самой маленькой области после \(k\) разрезов, умноженную на \(2\).

Примечание

В примере оптимально провести разрезы между следующими парами вершин:

  • \((-2, -4)\) и \((4, 2)\),
  • \((-2, -4)\) и \((1, 5)\),
  • \((-5, -1)\) и \((1, 5)\),
  • \((-5, 0)\) и \((0, 5)\).
Область с наименьшей площадью — четырехугольник с вершинами в \((-5, -1)\), \((1, 5)\), \((0, 5)\), \((-5, 0)\), удвоенная площадь которого равна \(11\).

Во втором примере оптимально провести разрезы между следующими парами вершин:

  • \((2, -1)\) и \((0, 2)\),
  • \((2, -1)\) и \((1, 0)\),
  • \((-1, 0)\) и \((0, 2)\).
Область с наименьшей площадью — треугольник с вершинами в \((2, -2)\), \((2, -1)\), \((-1, 0)\), удвоенная площадь которого равна \(3\).

F. Вхождения

бпф графы дп Комбинаторика поиск в глубину и подобное снм *2700

Подмассив массива \(a\) с индекса \(l\) по индекс \(r\) — это массив \([a_l, a_{l+1}, \dots, a_{r}]\). Количество вхождений массива \(b\) в массива \(a\) — это количество таких подмассивов массива \(a\), которые равны \(b\).

Вам даны \(n\) массивов \(A_1, A_2, \dots, A_n\); их элементы — целые числа от \(1\) до \(k\). Вы должны построить массив \(a\) из \(m\) целых чисел от \(1\) до \(k\) таким образом, чтобы для каждого заданного массива \(A_i\) выполнялось следующее условие: количество вхождений массива \(A_i\) в массив \(a\) не меньше, чем количество вхождений каждого непустого подмассива \(A_i\) в \(a\) (по отдельности). Обратите внимание, что если \(A_i\) не входит в \(a\), и никакой подмассив \(A_i\) не входит в \(a\), это условие выполняется для \(A_i\).

Ваша задача — посчитать количество различных массивов \(a\), удовлетворяющих этим условиям, и вывести его по модулю \(998244353\).

Входные данные

В первой строке заданы три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m, k \le 3 \cdot 10^5\)) — количество заданных массивов, требуемое количество элементов в массиве \(a\), и верхнее ограничение на элементы массивов.

Затем следуют \(n\) строк. \(i\)-я строка задает массив \(A_i\). Первое число в \(i\)-й строке — \(c_i\) (\(1 \le c_i \le m\)), количество элементов в массиве \(A_i\); затем следуют \(c_i\) целых чисел от \(1\) до \(k\) — элементы массива \(A_i\).

Дополнительное ограничение на входные данные: \(\sum\limits_{i=1}^n c_i \le 3 \cdot 10^5\); то есть общее количество элементов в заданных массивах не превосходит \(3 \cdot 10^5\).

Выходные данные

Выведите одно целое число — количество различных массивов \(a\), удовлетворяющих данным условиям, по модулю \(998244353\).

D. Divisible by Twenty-Five

дп Перебор поиск в глубину и подобное *1800

Mr. Chanek has an integer represented by a string \(s\). Zero or more digits have been erased and are denoted by the character _. There are also zero or more digits marked by the character X, meaning they're the same digit.

Mr. Chanek wants to count the number of possible integer \(s\), where \(s\) is divisible by \(25\). Of course, \(s\) must not contain any leading zero. He can replace the character _ with any digit. He can also replace the character X with any digit, but it must be the same for every character X.

As a note, a leading zero is any 0 digit that comes before the first nonzero digit in a number string in positional notation. For example, 0025 has two leading zeroes. An exception is the integer zero, (0 has no leading zero, but 0000 has three leading zeroes).

Input

One line containing the string \(s\) (\(1 \leq |s| \leq 8\)). The string \(s\) consists of the characters 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, _, and X.

Output

Output an integer denoting the number of possible integer \(s\).

Note

In the first example, the only possible \(s\) is \(25\).

In the second and third example, \(s \in \{100, 200,300,400,500,600,700,800,900\}\).

In the fifth example, all possible \(s\) will have at least one leading zero.

H. Holiday Wall Ornaments

дп Строки *2200

The Winter holiday will be here soon. Mr. Chanek wants to decorate his house's wall with ornaments. The wall can be represented as a binary string \(a\) of length \(n\). His favorite nephew has another binary string \(b\) of length \(m\) (\(m \leq n\)).

Mr. Chanek's nephew loves the non-negative integer \(k\). His nephew wants exactly \(k\) occurrences of \(b\) as substrings in \(a\).

However, Mr. Chanek does not know the value of \(k\). So, for each \(k\) (\(0 \leq k \leq n - m + 1\)), find the minimum number of elements in \(a\) that have to be changed such that there are exactly \(k\) occurrences of \(b\) in \(a\).

A string \(s\) occurs exactly \(k\) times in \(t\) if there are exactly \(k\) different pairs \((p,q)\) such that we can obtain \(s\) by deleting \(p\) characters from the beginning and \(q\) characters from the end of \(t\).

Input

The first line contains two integers \(n\) and \(m\) (\(1 \leq m \leq n \leq 500\)) — size of the binary string \(a\) and \(b\) respectively.

The second line contains a binary string \(a\) of length \(n\).

The third line contains a binary string \(b\) of length \(m\).

Output

Output \(n - m + 2\) integers — the \((k+1)\)-th integer denotes the minimal number of elements in \(a\) that have to be changed so there are exactly \(k\) occurrences of \(b\) as a substring in \(a\).

Note

For \(k = 0\), to make the string \(a\) have no occurrence of 101, you can do one character change as follows.

100101011 \(\rightarrow\) 100100011

For \(k = 1\), you can also change a single character.

100101011 \(\rightarrow\) 100001011

For \(k = 2\), no changes are needed.

L. Longest Array Deconstruction

дп разделяй и властвуй сортировки Структуры данных *2100

Mr. Chanek gives you a sequence \(a\) indexed from \(1\) to \(n\). Define \(f(a)\) as the number of indices where \(a_i = i\).

You can pick an element from the current sequence and remove it, then concatenate the remaining elements together. For example, if you remove the \(3\)-rd element from the sequence \([4, 2, 3, 1]\), the resulting sequence will be \([4, 2, 1]\).

You want to remove some elements from \(a\) in order to maximize \(f(a)\), using zero or more operations. Find the largest possible \(f(a)\).

Input

The first line contains one integer \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — the initial length of the sequence.

The second line contains \(n\) integers \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 2 \cdot 10^5\)) — the initial sequence \(a\).

Output

Output an integer denoting the largest \(f(a)\) that can be obtained by doing zero or more operations.

Note

In the first example, \(f(A) = 3\) by doing the following operations.

\([2,1,\textbf{4},2,5,3,7] \rightarrow [\textbf{2},1,2,5,3,7] \rightarrow [1,2,5,3,\textbf{7}] \rightarrow [1,2,\textbf{5},3] \rightarrow [1,2,3]\)

In the second example, \(f(A) = 2\) and no additional operation is needed.

G. Минимальное покрытие

дп *2200

Даны \(n\) длин отрезков, которые требуется уложить на бесконечной координатной оси.

Первый отрезок откладывается на оси так, чтобы один из его концов лежал в точке с координатой \(0\). Назовем этот конец «началом» первого отрезка, а его «концом» — тот его конец, который не является началом.

«Начало» каждого следующего отрезка должно совпадать с «концом» предыдущего. Таким образом, если длина очередного отрезка равна \(d\), а «конец» предыдущего имеет координату \(x\), отрезок может быть расположен либо на координатах \([x-d, x]\), и тогда координата его «конца» равна \(x - d\), либо на координатах \([x, x+d]\), и в этом случае координата его «конца» равна \(x + d\).

Суммарное покрытие оси отрезками определяется как объединение всех отрезков, то есть как множество точек, покрытых хотя бы одним из них. Несложно показать, что покрытие тоже будет отрезком на оси. Определите минимальную возможную длину покрытия, которую можно получить, проложив все отрезки на оси, не меняя их порядка.

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

В следующих \(2t\) строках даны описания наборов входных данных.

В каждом описании набора входных данных первая строка содержит целое число \(n\) (\(1 \le n \le 10^4\)) — количество рассматриваемых отрезков, а во второй строке через пробел записаны \(n\) чисел \(a_i\) (\(1 \le a_i \le 1000\)) — длины отрезков ровно в том порядке, в котором они должны быть отложены на оси.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите одно целое число — минимальную достижимую длину покрытия оси заданными отрезками.

Примечание

В третьем наборе входных данных из примера отрезки следует расположить следующим образом: \([0, 6] \rightarrow [4, 6] \rightarrow [4, 7] \rightarrow [-2, 7]\). Как видно, последний отрезок \([-2, 7]\) покрывает все предыдущие, и общая длина покрытия равна \(9\).

В четвертом наборе входных данных из примера отрезки стоит расположить как \([0, 6] \rightarrow [-2, 6] \rightarrow [-2, 2] \rightarrow [2, 7]\). Объединение этих отрезков также занимает область \([-2, 7]\) и имеет длину \(9\).

E. Телефонные разговоры

*особая задача дп сортировки *1900

Недавно Сережа стал бизнесменом Сергеем Петровичем, и теперь ему приходится много разговаривать по телефону. На сегодня у него запланировано n звонков. Для каждого звонка известен запланированный момент его начала ti (в секундах от начала дня) и его продолжительность di (в секундах). Все ti различны. Сергей Петрович — очень важный человек, сам он никому не звонит, и все его звонки будут входящими.

Сергей Петрович не Цезарь, сразу несколько дел делать не умеет. Поэтому, если ему звонят, пока он еще не закончил предыдущий разговор, то он ставит новый звонок в очередь на удержание. В таком случае немедленно после окончания текущего разговора он берет из очереди самый ранний входящий звонок и начинает этот разговор. Если Сергей Петрович начал разговор в секунду t, а звонок продолжается d секунд, то он занят в секунды t, t + 1, ..., t + d - 1, а в секунду t + d он может начать новый звонок. Если Сергей Петрович не занят разговором в момент поступления очередного звонка, он не может отправить его в очередь.

Кроме того, Сергей Петрович не Наполеон, он любит поспать. Поэтому иногда он позволяет себе проигнорировать звонок, как будто его вовсе не было. Так он может поступить не более k раз. Звонок, поступающий во время разговора, тоже можно проигнорировать.

Какое наибольшее время в секундах сможет сегодня поспать Сергей Петрович, если он может выделить на сон любой непрерывный отрезок времени текущих суток (то есть с секундами от 1-ой до 86400-ой включительно), не занятый разговорами?

Заметим, что некоторые разговоры могут продолжаться или даже быть отложены до следующих суток или позже. Но интервал для сна надо выделить именно в пределах текущих суток.

Входные данные

В первой строке входных данных записана пара целых чисел n, k (0 ≤ k ≤ n ≤ 4000), разделенных единичным пробелом. Далее в n строках содержатся описания звонков на сегодня. Описание каждого звонка содержится в отдельной строке и состоит из двух целых чисел ti и di, записанных через пробел (1 ≤ ti, di ≤ 86400). Все ti различны, звонки заданы в порядке строгого возрастания ti.

Запланированные времена звонков [ti, ti + di - 1] могут произвольным образом пересекаться.

Выходные данные

Выведите число от 0 до 86400 включительно — наибольшее возможное количество секунд для сна Сергея Петровича на сегодня.

Примечание

В первом примере лучше всего проигнорировать первые два звонка.

Во втором примере лучше всего проигнорировать третий звонок. В этом случае Сергей Петрович будет разговаривать:

  • первый звонок: с 1 по 20000-ую секунду,
  • второй звонок: с 20001 по 30000-ую секунду,
  • четвертый звонок: с 30001 по 40000-ую секунду (третий звонок полностью игнорируется),
  • пятый звонок: с 80000 по 139999-ую секунду.

Таким образом, самый длинный период свободного времени — с 40001-ой секунды по 79999-ую.

A. Портал

дп жадные алгоритмы Перебор реализация Структуры данных *1700

CQXYM нашел прямоугольник \(A\) размера \(n \times m\), состоящий из \(n\) строк и \(m\) столбцов. Каждый блок прямоугольника либо является обсидиановым блоком, либо пуст. За одну операцию CQXYM может заменить обсидиановый блок пустым или пустой — обсидиановым.

Прямоугольник \(M\) размера \(a \times b\) называется порталом тогда и только тогда, когда он удовлетворяет следующим условиям:

  • \(a \geq 5,b \geq 4\).
  • Для всех \(1 < x < a\), блоки \(M_{x,1}\) и \(M_{x,b}\) обсидиановые.
  • Для всех \(1 < x < b\), блоки \(M_{1,x}\) и \(M_{a,x}\) обсидиановые.
  • Для всех \(1<x<a,1<y<b\), блок \(M_{x,y}\) пустой.
  • \(M_{1, 1}, M_{1, b}, M_{a, 1}, M_{a, b}\) могут быть любого типа.

Обратите внимание, что портал имеет \(a\) строк и \(b\) столбцов (не \(b\) строк и \(a\) столбцов).

CQXYM хочет узнать, за какое минимальное число операций один из подпрямоугольников можно сделать порталом.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(t \geq 1\)) — количество наборов входных данных.

Для каждого набора входных данных в первой строке содержатся два целых числа \(n\) и \(m\) (\(5 \le n \le 400\), \(4 \le m \le 400\)).

Далее следуют \(n\) строк по \(m\) символов \(0\) или \(1\) в каждой. Если \(j\)-й символ \(i\)-й строки равен \(0\), блок \(A_{i,j}\) пуст. В противном случае блок \(A_{i,j}\) обсидиановый.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(400\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(400\).

Выходные данные

Выведите \(t\) ответов, по одному на строке.

Примечание

В первом тестовом случае портал в итоге выглядит следующим образом:


1110
1001
1001
1001
0111

B. Курс математики

Деревья дп Комбинаторика Перебор *2600

Пусть \(c_1, c_2, \ldots, c_n\) — перестановка чисел \(1, 2, \ldots, n\). Рассмотрим все подотрезки этой перестановки, содержащие число \(x\). Для фиксированного числа \(m\) скажем, что \(x\) хорошее, если среди максимумов на данных отрезках встречается ровно \(m\) различных значений.

Cirno изучает математику, и учитель просит ее найти количество перестановок длины \(n\) с ровно \(k\) хорошими числами.

К сожалению, Cirno не сильна в математике и не может ответить на этот вопрос. Поэтому она просит вас о помощи.

Поскольку ответ может быть очень большим, вам нужно только сообщить ей количество перестановок по модулю \(p\).

Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Последовательность \(a\) является подотрезком \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Единственная строка входных данных содержит четыре целых числа \(n, m, k, p\) (\(1 \le n \le 100, 1 \le m \le n, 1 \le k \le n, 1 \le p \le 10^9\)).

Выходные данные

Выведите количество перестановок по модулю \(p\).

Примечание

В первом тестовом случае четырьмя перестановками являются \([1, 3, 2, 4]\), \([2, 3, 1, 4]\), \([4, 1, 3, 2]\) и \([4, 2, 3, 1]\).

Возьмем перестановку \([1, 3, 2, 4]\) в качестве примера:

Для числа \(1\) все подотрезки, содержащие его, являются: \([1]\), \([1, 3]\), \([1, 3, 2]\) и \([1, 3, 2, 4]\), и есть три разных максимума \(1\), \(3\) и \(4\).

Аналогично, для числа \(3\) существуют два разных максимума \(3\) и \(4\). Для числа \(2\) существует три разных максимума \(2\), \(3\) и \(4\). А для числа \(4\) есть только один, то есть сам по себе \(4\).

D. Подпоследовательность

Деревья дп жадные алгоритмы Перебор разделяй и властвуй *2900

У Алисы есть целочисленная последовательность \(a\) длины \(n\) и все ее элементы различны. Она выбирает из \(a\) подпоследовательность длины \(m\) и определяет ценность подпоследовательности \(a_{b_1},a_{b_2},\ldots,a_{b_m}\) как \(\)\sum_{i = 1}^m (m \cdot a_{b_i}) - \sum_{i = 1}^m \sum_{j = 1}^m f(\min(b_i, b_j), \max(b_i, b_j)),\(\) где \(f(i, j)\) обозначает \(\min(a_i, a_{i + 1}, \ldots, a_j)\).

Алиса хочет, чтобы вы помогли ей максимизировать ценность выбираемой подпоследовательности.

Последовательность \(s\) является подпоследовательностью \(t\), если \(s\) может быть получена из \(t\) удалением нескольких (возможно, ни одного или всех) элементов.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le m \le n \le 4000\)).

Во второй строке записано \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i < 2^{31}\)).

Выходные данные

Выведите максимальное значение, которое может получить Алиса.

Примечание

В первом примере Алиса может выбрать подпоследовательность \([15, 2, 18, 13]\), которая имеет ценность \(4 \cdot (15 + 2 + 18 + 13) - (15 + 2 + 2 + 2) - (2 + 2 + 2 + 2) - (2 + 2 + 18 + 12) - (2 + 2 + 12 + 13) = 100\).

Во втором примере существует множество подпоследовательностей ценности \(176\), одна из них — \([9, 7, 12, 20, 18]\).

E. Пчеленок и подотрезки

Бинарный поиск дп жадные алгоритмы математика Структуры данных *2000

Пчеленок решил сделать Миле подарок. Пчеленок уже купил массив \(a\) длины \(n\), но дарить просто массив слишком банально. Вместо этого он решил подарить Миле подотрезки этого массива!

Пчеленок хочет, чтобы его подарок был красивым, поэтому он решил выбрать \(k\) непересекающихся подотрезков массива \([l_1,r_1]\), \([l_2,r_2]\), \(\ldots\) \([l_k,r_k]\) так, что:

  • длина первого отрезка \([l_1,r_1]\) равна \(k\), длина второго отрезка \([l_2,r_2]\) равна \(k-1\), \(\ldots\), длина \(k\)-го отрезка \([l_k,r_k]\) равна \(1\)
  • для любых \(i<j\) \(i\)-й подотрезок встречается в массиве раньше \(j\)-го (т.е. \(r_i<l_j\))
  • суммы в этих подотрезках строго возрастают (т.е. пусть \(sum(l \ldots r) = \sum\limits_{i=l}^{r} a_i\) — сумма чисел на подотрезке массива \([l,r]\), тогда \(sum(l_1 \ldots r_1) < sum(l_2 \ldots r_2) < \ldots < sum(l_k \ldots r_k)\)).

Пчеленок также хочет, чтобы его подарок был как можно больше, поэтому он просит вас узнать, при каком максимальном \(k\) он сможет сделать подарок Миле!

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Следующие \(2 \cdot t\) строк содержат описания наборов входных данных. Описание каждого набора состоит из двух строк.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное возможное значение \(k\).

F1. Корней Корнеевич и XOR (простая версия)

битмаски дп жадные алгоритмы *1800

Это более простая версия задачи с меньшими ограничениями.

Корней Корнеевич откопал массив \(a\) длины \(n\). Корней Корнеевич недавно прочитал в книге про операцию побитового исключающего «ИЛИ» (XOR), поэтому он захотел поэкспериментировать с ней. Для этого он решил найти все целые \(x \ge 0\) такие, что существует возрастающая подпоследовательность массива \(a\), в которой побитовое исключающее «ИЛИ» ее чисел равно \(x\).

Корней Корнеевич довольно быстро нашел все такие \(x\), и хочет проверить свой результат. Для этого он попросил вас решить эту задачу!

Последовательность \(s\) является подпоследовательностью \(b\), если \(s\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов.

Последовательность \(s_1, s_2, \ldots , s_m\) называется возрастающей, если выполняется неравенство: \(s_1 < s_2 < \ldots < s_m\).

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 500\)) — элементы массива \(a\).

Выходные данные

В первой строке выведите единственное число \(k\) — количество найденных вами \(x\).

Во второй строке выходных данных выведите \(k\) целых неотрицательных чисел в возрастающем порядке \(x_1, x_2, \ldots x_k\) (\(0 \le x_1 < \ldots < x_k\)) — найденные вами \(x\).

Примечание

В первом наборе входных данных:

  • Чтобы получить значение \(x = 0\) можно выбрать пустую подпоследовательность
  • Чтобы получить значение \(x = 2\) можно выбрать подпоследовательность \([2]\)
  • Чтобы получить значение \(x = 4\) можно выбрать подпоследовательность \([4]\)
  • Чтобы получить значение \(x = 6\) можно выбрать подпоследовательность \([2, 4]\)

F2. Корней Корнеевич и XOR (сложная версия)

Бинарный поиск дп жадные алгоритмы Перебор *2400

Это более сложная версия задачи с большими ограничениями.

Корней Корнеевич откопал массив \(a\) длины \(n\). Корней Корнеевич недавно прочитал в книге про операцию побитового исключающего «ИЛИ» (XOR), поэтому он захотел поэкспериментировать с ней. Для этого он решил найти все целые \(x \ge 0\) такие, что существует возрастающая подпоследовательность массива \(a\), в которой побитовое исключающее «ИЛИ» ее чисел равно \(x\).

Корней Корнеевич довольно быстро нашел все такие \(x\), и хочет проверить свой результат. Для этого он попросил вас решить эту задачу!

Последовательность \(s\) является подпоследовательностью \(b\), если \(s\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов.

Последовательность \(s_1, s_2, \ldots , s_m\) называется возрастающей, если выполняется неравенство: \(s_1 < s_2 < \ldots < s_m\).

Входные данные

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 10^6\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 5000\)) — элементы массива \(a\).

Выходные данные

В первой строке выведите единственное число \(k\) — количество найденных вами \(x\).

Во второй строке выходных данных выведите \(k\) целых неотрицательных целых чисел в возрастающем порядке \(x_1, x_2, \ldots x_k\) (\(0 \le x_1 < \ldots < x_k\)) — найденные вами \(x\).

Примечание

В первом наборе входных данных:

  • Чтобы получить значение \(x = 0\) можно выбрать пустую подпоследовательность
  • Чтобы получить значение \(x = 2\) можно выбрать подпоследовательность \([2]\)
  • Чтобы получить значение \(x = 4\) можно выбрать подпоследовательность \([4]\)
  • Чтобы получить значение \(x = 6\) можно выбрать подпоследовательность \([2, 4]\)

C. Омкар и определение

дп Структуры данных *1700

Условие задачи вырисовывается ниже, наполняя вас определенностью.

Рассмотрим таблицу, в которой некоторые клетки пустые, а некоторые заполнены. Назовем клетку в этой таблице хорошей, если, начиная с этой клетки, вы можете выйти из таблицы, двигаясь вверх и влево только через пустые клетки. Это касается и стартовой клетки, поэтому все заполненные клетки не являются хорошими. Обратите внимание, вы можете покинуть таблицу из любой крайней левой клетки (в первом столбце), двигаясь влево, а также из любой крайней верхней клетки (в первой строке) — двигаясь вверх.

Назовем таблицу определяемой, если, зная только то, какие клетки являются хорошими, а какие — нет, мы можем точно определить, какие клетки заполнены, а какие нет.

Вам дана таблица \(a\) размером \(n \times m\), т. е. таблица с \(n\) строками и \(m\) столбцами. Вам нужно ответить на \(q\) запросов (\(1 \leq q \leq 2 \cdot 10^5\)). Каждый запрос задается двумя целыми числами \(x_1, x_2\) (\(1 \leq x_1 \leq x_2 \leq m\)) и спрашивает, является ли часть таблицы \(a\), состоящая из столбцов \(x_1, x_1 + 1, \ldots, x_2 - 1, x_2\), определяемой.

Входные данные

Первая строка содержит два целых числа \(n, m\) (\(1 \leq n, m \leq 10^6\), \(nm \leq 10^6\))  — размеры таблицы \(a\).

Далее следуют \(n\) строк. В \(y\)-й строке содержится \(m\) символов, \(x\)-й из которых «X», если клетка на пересечении \(y\)-й строки и \(x\)-го столбца заполнена, и «.», если она пуста.

Следующая строка содержит одно целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\))  — количество запросов.

Далее следуют строки по \(q\). Каждая строка содержит два целых числа \(x_1\) и \(x_2\) (\(1 \leq x_1 \leq x_2 \leq m\)), представляющих запрос, спрашивающий, является ли часть таблицы \(a\), содержащая только столбцы \(x_1, x_1 + 1, \ldots, x_2 - 1, x_2\), определяемой.

Выходные данные

Для каждого запроса выведите одну строку, содержащую «YES», если часть таблицы, указанная в запросе, определяемая, и «NO» в противном случае. Вывод не чувствителен к регистру (поэтому «YEs» и «No» также будут приняты).

Примечание

Для каждого запроса из примера соответствующая часть таблицы изображена дважды: сначала в исходном формате, затем с каждой клеткой, помеченной как «E», если она хорошая, и «N» в противном случае.

Для первого запроса:


..X EEN
... EEE
... EEE
... EEE


Для второго запроса:


X N
. E
. E
. E

Обратите внимание, что вы можете выйти из таблицы, пройдя влево из любой крайней левой клетки (или вверх из любой крайней верхней клетки); вам не нужно достигать левой верхней угловой клетки, чтобы выйти из таблицы.



Для третьего запроса:


XX NN
X. NN
X. NN
X. NN

Эта часть таблицы не может быть определена только по тому, является ли каждая клетка хорошей, потому что таблица, показанная ниже, также производит показанную выше «таблицу выходимости клеток»:


XX
XX
XX
XX


Для четвертого запроса:


X N
. E
. E
. E


Для пятого запроса:


..XXX EENNN
...X. EEENN
...X. EEENN
...X. EEENN

Этот запрос — это просто вся таблица. Она не может быть определена только по тому, является ли каждая клетка хорошей, потому что таблица, показанная ниже, также производит показанную выше «таблицу выходимости клеток»:


..XXX
...XX
...XX
...XX

F. Странная НОП

битмаски графы дп жадные алгоритмы Строки *2600

Вам даны \(n\) строк \(s_1, s_2, \ldots, s_n\), состоящих из строчных и заглавных латинских букв. Более того, каждый символ в каждой строке встречается не более двух раз. Найдите самую длинную общую подпоследовательность этих строк.

Строка \(t\) является подпоследовательностью строки \(s\), если \(t\) может быть получена из \(s\) удалением нескольких (возможно, ни одного или всех) символов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(2 \leq n \leq 10\)) — количество строк.

В следующих \(n\) строках содержатся строки \(s_i\). Все \(s_i\) непустые, состоят из строчных и заглавных латинских букв, и никакой символ не встречается ни в одной строке более чем два раза.

Выходные данные

Для каждого набора входных данных выведите ответ в двух строках.

В первой строке выведите длину самой длинной общей подпоследовательности.

Во второй — саму подпоследовательность. Если существует несколько самых длинных общих подпоследовательностей, выведите любую из них.

Примечание

В первом наборе входных данных одна из самых длинных общих подпоследовательностей это «A». Нет ни одной общей подпоследовательности длины \(2\).

Во втором наборе входных данных множества символов строк не пересекаются, поэтому никакая непустая строка не может быть общей подпоследовательностью.

F. Неравные соседи

дп Комбинаторика математика *2400

Вам дан массив \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящий из положительных целых чисел. Ваша задача — посчитать количество массивов целых чисел \(b_1, b_2, \ldots, b_n\) длины \(n\) таких, что:

  • \(1 \le b_i \le a_i\) для всех \(i\) (\(1 \le i \le n\)), и
  • \(b_i \neq b_{i+1}\) для всех \(i\) (\(1 \le i \le n - 1\)).

Количество таких массивов может быть очень большим, поэтому выведите это число по модулю \(998\,244\,353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Во второй строке задано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Выходные данные

В единственной строке выведите ответ по модулю \(998\,244\,353\).

Примечание

В первом примере подходят массивы \([1, 2, 1]\) и \([2, 1, 2]\).

Во втором примере допустимы массивы \([1, 2]\), \([1, 3]\), \([2, 1]\) и \([2, 3]\).

G. Браконьеры

графы Деревья дп игры *2500

Алиса и Боб — два браконьера, которые рубят лес.

Лес это набор (возможно пустой) деревьев. Дерево — это связный граф без циклов. Подвешенное дерево имеет специальную вершину — корень. Родителем вершины \(v\) называется следующая вершина на кратчайшем пути от \(v\) до корня. Детьми вершины \(v\) называются вершины, для которых \(v\) является родителем. Вершина называется листом, если у неё нет детей.

В этой задаче мы определим глубину вершины как количество вершин на простом пути от этой вершины до корня. Рангом дерева назовем минимальную глубину его листа.

Изначально дан непустой лес подвешенных деревьев. Алиса и Боб играют в игру на этом лесе. Они ходят по очереди, Алиса ходит первой. В начале каждого хода игрок выбирает дерево из леса. Далее игрок выбирает положительное целое число — глубину разреза, которая не превосходит ранга выбранного дерева. Затем игрок удаляет из дерева все вершины, чьи глубины меньше либо равны глубине разреза. Все остальные вершины разбиваются на набор подвешенных деревьев, корнем каждого становится вершина, имевшая наименьшую глубину в дереве до разреза. Все эти деревья добавляются в лес и игра продолжается.

Игрок проигрывает, если на момент начала его хода лес пуст.

Определите, может ли Алиса победить, если оба игрока играют оптимально.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)) — суммарное количество вершин в деревьях изначального леса.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(0 \leq p_i \leq n\)) — описание леса. Если \(p_i = 0\), то \(i\)-я вершина дерева является корнем, иначе \(p_i\) является родителем вершины \(i\). Гарантируется, что \(p\) задает корректный лес подвешенных деревьев.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если Алиса может победить, иначе выведите «NO» (без кавычек). Вы можете выводить каждую букву в любом регистре.

Примечание

В первом наборе входных данных у Боба есть симметричная стратегия, поэтому Алиса выиграть не может.

Во втором наборе Алиса может выбрать второе дерево и глубину разреза \(1\), чтобы получить лес, где уже у нее есть симметричная стратегия.

В третьем наборе ранг единственного дерева равен \(2\), и оба возможных хода Алисы приводят к неудаче. В первом случае Боб может перейти к позиции с симметричной стратегией, а во втором сразу опустошить лес.

В четвертом наборе все листья единственного дерева имеют одинаковую глубину, поэтому Алиса может за один ход опустошить весь лес.

D. Палиндромные пары

*особая задача дп Перебор Строки *1500

Дана непустая строка s, состоящая из строчных латинских букв. Найдите количество пар непересекающихся подстрок-палиндромов этой строки.

Более формально: найдите количество четверок (a, b, x, y) таких, что 1 ≤ a ≤ b < x ≤ y ≤ |s| и подстроки s[a... b], s[x... y] являются палиндромами.

Палиндромом называется строка, которая одинаково читается слева направо и справа налево. Например, строки «abacaba», «z», «abba» — палиндромы.

Подстрокой s[i... j] (1 ≤ i ≤ j ≤ |s|) строки s = s1s2... s|s| называется строка, равная sisi + 1... sj. Например, подстрока s[2...4] строки s = «abacaba» равна «bac».

Входные данные

В первой строке записана непустая строка s, состоящая из строчных букв латинского алфавита ('a' ... 'z'). Длина строки s не более 2000 символов.

Выходные данные

Выведите единственное число — количество пар непересекающихся подстрок-палиндромов заданной строки.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

C. Бакри и разделение

битмаски графы Деревья дп Конструктив поиск в глубину и подобное *1700

Бакри столкнулся с задачей, но поскольку ему лень ее решать, он просит вашей помощи.

Вам дано дерево на \(n\) вершинах, \(i\)-й вершине присвоено значение \(a_i\) для каждого \(i\) от \(1\) до \(n\). Напомним, что дерево на \(n\) вершинах — это связный граф с \(n-1\) ребрами.

Вы хотите удалить из дерева не менее \(1\), но не более \(k-1\) ребер так, чтобы выполнялось следующее условие:

  • Для каждой компоненты связности вычислим побитовое исключающего ИЛИ значений вершин в ней. Тогда, эти значения должны быть одинаковыми для всех компонент связности.

Возможно ли выполнить это условие?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) \((1 \leq t \leq 5 \cdot 10^4)\). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) \((2 \leq k \leq n \leq 10^5)\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) \((1 \leq a_i \leq 10^9)\).

В \(i\)-й из следующих \(n-1\) строк содержится два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i\neq v_i\)), что означает, что между вершинами \(u_i\) и \(v_i\) есть ребро.

Гарантируется, что данный граф является деревом.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных вы должны вывести одну строку. Если вы можете удалить ребра в соответствии с условиями, написанными выше, выведите «YES» (без кавычек). В противном случае выведите «NO» (без кавычек).

Вы можете вывести каждую букву «YES» и «NO» в любом регистре (верхнем или нижнем).

Примечание

Можно показать, что условие недостижимо для первого, третьего и пятого наборов входных данных.

Во втором наборе входных данных можно просто удалить все ребра. Останется \(5\) компонент связности, каждая из которых содержит только одну вершину со значением \(3\), поэтому побитовое ИЛИ для каждой из них будет \(3\).

В четвертом случае дерево изображено ниже: .

Вы можете удалить ребро \((4,5)\).

Побитовое ИЛИ первой компоненты будет равен \(a_1 \oplus a_2 \oplus a_3 \oplus a_4 = 1 \oplus 6 \oplus 4 \oplus 1 = 2\) (где \(\oplus\) обозначает побитовое ИЛИ).

Побитовое ИЛИ второй компоненты будет равно \(a_5 = 2\).

B. Делись на 25!

дп жадные алгоритмы математика математика поиск в глубину и подобное *900

Задано целое положительное число \(n\). За \(1\) ход можно выбрать любую его цифру и удалить её (т. е. выбирается некоторая позиция в числе и удаляется стоящая в этой позиции цифра). Операцию нельзя произвести, если осталась всего одна цифра. Если получившееся число содержит ведущие нули, то они автоматически удаляются.

Например, если из числа \(32925\) удалить \(3\)-ю цифру, то результатом операции станет число \(3225\), а если из числа \(20099050\) удалить первую цифру, то результатом операции станет число \(99050\) (следующие за первой цифрой \(2\) нуля удаляются автоматически).

Какое наименьшее число ходов необходимо совершить, чтобы получившееся число делилось на \(25\) и было положительным? Гарантируется, что для всех \(n\), заданных во входных данных, ответ существует. Гарантируется, что число \(n\) задано без ведущих нулей.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей одно целое число \(n\) (\(25 \le n \le 10^{18}\)). Гарантируется, что для всех \(n\), заданных во входных данных, ответ существует. Гарантируется, что число \(n\) задано без ведущих нулей.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите целое число \(k\) (\(k \ge 0\)) — наименьшее число ходов, которые нужно сделать, чтобы число стало делиться на \(25\).

Примечание

В первом наборе входных данных уже задано число, которое делится на \(25\).

Во втором наборе входных данных можно удалить цифры \(1\), \(3\) и \(4\), тогда получится число \(75\).

В третьем наборе входных данных достаточно удалить последнюю цифру — получится число \(325\).

В четвёртом наборе входных данных необходимо удалить три последние цифры — получится число \(50\).

В пятом наборе входных данных достаточно удалить цифры \(4\) и \(7\).

F. Красно-чёрное число

meet-in-the-middle дп математика поиск в глубину и подобное реализация *2100

Дано целое неотрицательное число \(x\), десятичная запись которого содержит \(n\) цифр. Необходимо покрасить каждую его цифру в красный или чёрный цвет, так чтобы число, образуемое красными цифрами, делилось на \(A\), а число, образуемое чёрными цифрами, делилось на \(B\). Как в красный, так и в чёрный цвет должна быть покрашена хотя бы одна цифра. Из всех таких покрасок числа \(x\), которые возможны, необходимо вывести любую такую, чтобы, если в красный покрашено \(r\) цифр, а в чёрный — \(b\) цифр, величина \(|r - b|\) была минимально возможной.

Обратите внимание, что число \(x\), а также числа, образуемые цифрами одного цвета, могут содержать ведущие нули.

Пример покраски числа для \(A = 3\) и \(B = 13\)

На рисунке выше показан пример покраски числа \(x = 02165\) из \(n = 5\) цифр для \(A = 3\) и \(B = 13\). Красные цифры образуют число \(015\), которое делится на \(3\), а чёрные — \(26\), которое делится на \(13\). Заметим, что абсолютная величина разности количеств красных и чёрных цифр равна \(1\), меньшего значения добиться невозможно.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит три целых числа \(n\), \(A\), \(B\) (\(2 \le n \le 40\), \(1 \le A, B \le 40\)). Вторая строка содержит целое неотрицательное число \(x\), состоящее ровно из \(n\) цифр и, возможно, содержащее ведущие нули.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке:

  • -1, если не существует искомой покраски;
  • строку \(s\) из \(n\) символов, каждый из которых является буквой «R» или «B». Если \(i\)-я цифра числа \(x\) красится в красный цвет, то \(i\)-й символ строки \(s\) должен быть буквой «R», иначе буквой «B».

Число, которое образовано покрашенными в красный цвет цифрами, должно делится на \(A\). Число, которое образовано покрашенными в черный цвет цифрами, должно делится на \(B\). Значение \(|r-b|\) должно быть минимальным, где \(r\)  — количество красных цифр, а \(b\)  — количество чёрных. Если ответов несколько, то выведите любой из них.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных нет чётных цифр, поэтому невозможно составить число, которое делится на \(2\).

В третьем наборе входных данных любая покраска, содержащая хотя бы одну красную и одну чёрную цифру, подходит, поэтому можно покрасить \(4\) цифры в красный и \(4\) в чёрный (\(|4 - 4| = 0\), т. е. нельзя улучшить результат).

В четвёртом наборе входных данных существует единственная искомая покраска.

G. Меняя скобки

дп жадные алгоритмы Конструктив Структуры данных *2200

Задана последовательность из круглых и квадратных скобок. Над этой последовательностью можно произвести следующие операции:

  1. поменять вид скобки с открывающей на закрывающую и наоборот, не меняя форму скобки: то есть можно поменять '(' на ')' и ')' на '('; можно поменять '[' на ']' и ']' на '['. Эта операция стоит \(0\) бурлей.
  2. взять любую квадратную скобку и поменять на круглую, не меняя направление скобки: то есть можно поменять '[' на '(', но не '(' на '['; можно поменять ']' на ')', но не ')' на ']'. Эта операция стоит \(1\) бурль.

Операции можно производить в любом количестве в любом порядке.

Задана строка \(s\) длины \(n\) и \(q\) запросов вида «l r», где \(1 \le l < r \le n\). Для каждой подстроки \(s[l \dots r]\) найдите минимальную цену, которую нужно заплатить, чтобы сделать её правильной скобочной последовательностью. Гарантируется, что подстрока \(s[l \dots r]\) имеет чётную длину.

Запросы надо обрабатывать независимо, то есть изменения в строке, сделанные для ответа на запрос \(i\), не влияют на запросы \(j\) (\(j > i\)). Иными словами, при обработке запроса подстрока \(s[l \dots r]\) берётся из первоначальной заданной строки \(s\).

Правильная скобочная последовательность — это последовательность, которую можно построить по следующим правилам:

  • пустая последовательность является правильной скобочной;
  • если «s» — правильная скобочная последовательность, то последовательности «(s)» и «[s]» являются правильными скобочными;
  • если «s» и «t» – правильные скобочные последовательности, то последовательность «st» (соединение этих последовательностей) является правильной скобочной.

Например, последовательности «», «(()[])», «[()()]()» и «(())()» являются правильными скобочными, в то время как «(», «[(])» и «)))» — нет.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора данных содержит непустую строку \(s\), содержащую только круглые ('(' и ')') и квадратные ('[' и ']') скобки. Длина строки не превышает \(10^6\). Строка содержит не менее \(2\) символов.

Вторая строка содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Далее идут \(q\) строк, содержащих два целых числа \(l\) и \(r\) (\(1 \le l < r \le n\), где \(n\) — длина строки \(s\)). Гарантируется, что подстрока \(s[l \dots r]\) имеет чётную длину.

Гарантируется, что сумма длин всех строк, заданных во всех наборах входных данных, не превышает \(10^6\). Сумма всех \(q\), заданных во всех наборах входных данных, не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите в отдельной строке целое число \(x\) (\(x \ge 0\)) — минимальную цену, которую нужно заплатить, чтобы данная подстрока стала правильной скобочной последовательностью.

Примечание

Рассмотрим первый набор входных данных. Первый запрос описывает всю строку, её можно привести к следующей правильной скобочной последовательности: «([()])()[[]]». Форма скобок не изменена, поэтому стоимость изменения равна \(0\).

Второй запрос описывает подстроку «)[)()]». Её можно привести к последовательности «(()())», стоимость равна \(2\).

Третий запрос описывает подстроку «))[)». Её можно привести к последовательности «()()», стоимость равна \(1\).

Во втором наборе входных данных все подстроки состоят только из круглых скобок. Можно показать, что любую последовательность чётной длины из круглых скобок можно привести к правильной за \(0\) бурлей.

В третьем наборе входных данных единственный запрос описывает строку «[]», которая уже является правильной скобочной последовательностью.

D. Количество предателей

графы дп Конструктив поиск в глубину и подобное снм *1700

Теофанис начал играть в новую онлайн-игру под названием «Among them». Однако, он постоянно играет с игроками из Кипра, и всех их зовут «Андреас» (самое распространенное имя на Кипре).

В каждой игре Теофанис играет с \(n\) другими игроками. Так как у них всех одинаковые имена, то они были пронумерованы от \(1\) по \(n\).

Игроки написали \(m\) комментариев в чате. Каждый комментарий имеет вид «\(i\) \(j\) \(c\)», где \(i\) и \(j\) — это два различных целых числа, а \(c\) — строка (\(1 \le i, j \le n\); \(i \neq j\); \(c\) — это либо imposter (предатель), либо crewmate (член экипажа)). Данный комментарий означает, что игрок \(i\) говорит, что роль игрока \(j\) — это \(c\).

Предатели всегда врут, а члены экипажа всегда говорят правду.

Помогите Теофанису подсчитать максимальное возможное количество предателей среди всех кипрских игроков, или определить, что комментарии противоречат друг другу (ознакомьтесь с заметками для лучшего понимания).

Заметим, что у каждого игрока ровно одна роль: либо imposter (предатель), либо crewmate (член экипажа).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\); \(0 \le m \le 5 \cdot 10^5\)) — количество игроков, исключая Теофаниса, и количество комментариев.

В каждой из следующих \(m\) строк задан очередной комментарий игроков в форме «\(i\) \(j\) \(c\)», где \(i\) и \(j\) — это два различных целых числа, а \(c\) — строка (\(1 \le i, j \le n\); \(i \neq j\); \(c\) — это либо imposter, либо crewmate).

Для одной пары \((i, j)\) может быть более одного комментария.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\) и сумма \(m\) не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное количество предателей. Если комментарии противоречат друг другу, выведите \(-1\).

Примечание

В первом наборе входных данных, предателями могут быть Андреас \(2\) и Андреас \(3\).

Во втором наборе, предателями могут быть Андреас \(1\), Андреас \(2\), Андреас \(3\) и Андреас \(5\).

В третьем наборе, комментарии противоречат друг другу. Это потому что игрок \(1\) называет игрока \(2\) предателем, в то время как игрок \(2\) называет игрока \(1\) членом экипажа. Если игрок \(1\) — член экипажа, то он должен говорить правду, а значит игрок \(2\) — предатель. Но если игрок \(2\) — предатель, то он лжет, и, следовательно, игрок \(1\) не может быть членом экипажа. Противоречие.

E2. Раскраска кубика Рубика (сложная версия)

Деревья дп математика Перебор реализация *2300

Это сложная версия задачи. Различие состоит в том, что в этой версии есть вершины с уже зафиксированными цветами.

Теофанис ужасно проголодался и хочет, наконец, отведать своего любимого блюда, шефталью. Но сначала ему нужно закончить с домашней работой. Поможете ли вы ему в решении данной задачи?

Вам задано идеальное двоичное дерево из \(2^k - 1\) вершин — двоичное дерево, в котором у всех вершин \(i\) от \(1\) по \(2^{k - 1} - 1\) есть ровно два сына: вершины \(2i\) и \(2i + 1\). У вершин с \(2^{k - 1}\) по \(2^k - 1\) нет детей. Вы хотите покрасить его вершины в \(6\) цветов кубика Рубика (белый, зеленый, красный, синий, оранжевый и желтый).

Назовем раскраску хорошей, если все ребра дерева соединяют вершины, цвета которых являются соседними цветами кубика Рубика.

Изображение кубика Рубика и его развертка.

Формально говоря:

  • соседними к белой вершине не могут быть белые и желтые вершины;
  • соседними к желтой вершине не могут быть белые и желтые вершины;
  • соседними к зеленой вершине не могут быть зеленые и синие вершины;
  • соседними к синей вершине не могут быть зеленые и синие вершины;
  • соседними к красной вершине не могут быть красные и оранжевые вершины;
  • соседними к оранжевой вершине не могут быть красные и оранжевые вершины.

Однако, есть \(n\) особых вершин в дереве, цвета которых уже зафиксированы.

Вам нужно посчитать количество хороших раскрасок двоичного дерева. Две раскраски считаются различными, если существует вершина, цвет которой в них различается.

Так как ответ может быть слишком большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(k\) (\(1 \le k \le 60\)) — количество уровней в идеальном двоичном дереве, которое вам нужно раскрасить.

Во второй строке задано одно целое число \(n\) (\(1 \le n \le \min(2^k - 1, 2000)\)) — количество вершин, цвета которых уже выбраны.

В следующих \(n\) строках заданы целое число \(v\) (\(1 \le v \le 2^k - 1\)) и строка \(s\) — номер вершины и ее цвет (\(s\) является одной из следующих строк: white, yellow, green, blue, red или orange).

Гарантируется, что каждая вершина \(v\) появляется во входных данных не более одного раза.

Выходные данные

Выведите одно целое число — количество различных раскрасок по модулю \(10^9+7\).

Примечание

На изображении ниже вы можете видеть одну из корректных раскрасок для первого примера.

A. Компьютерная игра

дп Перебор поиск в глубину и подобное реализация *800

Монокарп играет в компьютерную игру. Сейчас он хочет пройти первый уровень этой игры.

Уровень — это прямоугольное клеточное поле из \(2\) строк и \(n\) столбцов. Персонаж Монокарпа изначально стоит в клетке \((1, 1)\) — на пересечении \(1\) строки и \(1\) столбца.

Персонаж Монокарпа за одно действие может переместиться из одной клетки в другую, если они — соседние по стороне и/или углу. Формально, из клетки \((x_1, y_1)\) можно за одно действие переместиться в клетку \((x_2, y_2)\), если \(|x_1 - x_2| \le 1\) и \(|y_1 - y_2| \le 1\). Очевидно, выходить за границы уровня нельзя.

На некоторых клетках находятся ловушки. Если персонаж Монокарпа оказывается в такой клетке, он умирает, и игра заканчивается.

Чтобы пройти уровень, персонаж Монокарпа должен оказаться в клетке \((2, n)\) — на пересечении строки \(2\) и столбца \(n\).

Помогите Монокарпу определить, можно ли пройти уровень.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют сами наборы входных данных, каждый из которых состоит из трех строк.

В первой строке задано одно целое число \(n\) (\(3 \le n \le 100\)) — количество столбцов.

Далее следуют две строки, описывающие уровень. \(i\)-я из этих строк описывает \(i\)-ю строку уровня — строка состоит из символов 0 и 1. Символ 0 соответствует безопасной клетке, символ 1 — клетке с ловушкой.

Дополнительное ограничение на входные данные: клетки \((1, 1)\) и \((2, n)\) — безопасные.

Выходные данные

Для каждого набора входных данных выведите YES, если уровень можно пройти, и NO, если нельзя.

Примечание

Рассмотрим пример из условия.

Возможный путь в первом наборе входных данных: \((1, 1) \rightarrow (2, 2) \rightarrow (2, 3)\).

Возможный путь во втором наборе входных данных: \((1, 1) \rightarrow (1, 2) \rightarrow (2, 3) \rightarrow (2, 4)\).

Возможный путь в четвертом наборе входных данных: \((1, 1) \rightarrow (2, 2) \rightarrow (1, 3) \rightarrow (2, 4) \rightarrow (1, 5) \rightarrow (2, 6)\).

C. Удаление двух элементов

дп математика реализация Структуры данных *1200

У Монокарпа есть массив целых чисел \(a\), состоящий из \(n\) элементов. Обозначим среднее арифметическое всех элементов массива за \(k\) (обратите внимание, что \(k\) может быть вещественным числом).

Среднее арифметическое массива из \(n\) элементов — это сумма всех элементов массива деленная на \(n\), то есть на количество элементов массива.

Монокарп решил удалить из массива \(a\) ровно два элемента, при этом он хочет, чтобы после удаления среднее арифметическое оставшихся \((n - 2)\) элементов массива по-прежнему было равно \(k\).

Перед вами стоит задача определить количество пар позиций \([i, j]\) (\(i < j\)) таких, что если удалить элементы из этих позиций, среднее арифметическое оставшихся \((n - 2)\) элементов массива будет равно \(k\), то есть будет равно среднему арифметическому \(n\) элементов изначального массива \(a\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве Монокарпа.

Во второй строке следует последовательность целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^{9}\)), где \(a_i\) равно \(i\)-му элементу массива Монокарпа.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите количество пар позиций \([i, j]\) (\(i < j\)) таких, что если удалить элементы из этих позиций, среднее арифметическое оставшихся \((n - 2)\) элементов массива будет равно \(k\), то есть будет равно среднему арифметическому \(n\) элементов изначального массива \(a\).

Примечание

В первом примере можно удалить любую пару чисел, так как все элементы массива одинаковы.

Во второй примере нельзя удалить ни одной пары чисел таким образом, чтобы среднее арифметическое не изменилось.

В третьем примере можно удалить пару элементов в позициях \(1\) и \(3\) или пару элементов в позициях \(4\) и \(5\).

E. Лестницы

дп Комбинаторика математика Перебор поиск в глубину и подобное реализация Структуры данных *2100

Дана матрица, состоящая из \(n\) строк и \(m\) столбцов. Строки пронумерованы сверху вниз, столбцы пронумерованы слева направо.

Ячейки данной матрицы могут быть свободными или заблокированными.

Назовем путь в матрице лестницей, если он:

  • начинается и заканчивается в свободной ячейке;
  • посещает только свободные ячейки;
  • имеет одну из двух возможных структур:
    1. вторая ячейка лежит на \(1\) справа от первой, третья — на \(1\) снизу от второй, четвертая — на \(1\) справа от третьей, и так далее;
    2. вторая ячейка лежит на \(1\) снизу от первой, третья — на \(1\) справа от второй, четвертая — на \(1\) снизу от третьей, и так далее.

В частности, путь, состоящий из одной ячейки, считается лестницей.

Некоторые примеры лестниц:

Изначально все ячейки в матрице свободные.

Требуется обработать \(q\) запросов, каждый из которых переключает состояние одной ячейки. То есть, если клетка в данный момент свободна, то делает ее заблокированной, а если заблокирована, то делает ее свободной.

После каждого запроса требуется вывести количество различных лестниц. Две лестницы считаются различными, если существует такая ячейка, которая входит в один путь и не входит в другой.

Входные данные

В первой строке записаны три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 1000\); \(1 \le q \le 10^4\)) — размерности матрицы и количество запросов.

В каждой из следующих \(q\) строк записаны два целых числа \(x\) и \(y\) (\(1 \le x \le n\); \(1 \le y \le m\)) — описание очередного запроса.

Выходные данные

Выведите \(q\) целых чисел — \(i\)-е число должно быть равно количеству различных лестниц в матрице после \(i\) запросов. Две лестницы считаются различными, если существует такая ячейка, которая входит в один путь и не входит в другой.

F. ПСП

Бинарный поиск битмаски дп Перебор Структуры данных *2400

Правильная скобочная последовательность (или, коротко, ПСП) — это скобочная последовательность, которую можно превратить в корректное арифметическое выражение, вставив символы «1» и «+» между исходными символами. Например:

  • скобочные последовательности «()()» и «(())» — правильные (из них можно получить выражения «(1)+(1)» и «((1+1)+1)»);
  • скобочные последовательности «)(», «(» и «)» — неправильные.

Обозначим конкатенацию двух строк \(x\) и \(y\) как \(x+y\). Например, «()()» \(+\) «)(» \(=\) «()())(».

У вас есть \(n\) скобочных последовательностей \(s_1, s_2, \dots, s_n\). Вы можете переставить эти строки в любом порядке (можно переставлять только сами строки, но не символы в них).

Ваша задача — переставить строки в таком порядке, чтобы у строки \(s_1 + s_2 + \dots + s_n\) было как можно больше непустых префиксов, являющихся ПСП.

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 20\)).

Далее следуют \(n\) строк, \(i\)-я из которых содержит \(s_i\) — скобочную последовательность (строку, состоящую из символов «(» и/или «)». Все последовательности \(s_i\) непустые, их суммарная длина не превосходит \(4 \cdot 10^5\).

Выходные данные

Выведите одно число — максимальное количество непустых префиксов, являющихся ПСП, у строки \(s_1 + s_2 + \dots + s_n\), если вы переставите строки \(s_1, s_2, \dots, s_n\) оптимальным образом.

Примечание

В первом примере из условия можно склеить строки следующим образом: «(» \(+\) «)» \(=\) «()», у полученной строки будет один префикс, являющийся ПСП: «()».

Во втором примере из условия можно склеить строки следующим образом: «(» \(+\) «)» \(+\) «()()())» \(+\) «(» \(=\) «()()()())(», у полученной строки будет четыре префикса, являющихся ПСП: «()», «()()», «()()()», «()()()()».

В третьем и в четвертом примере всего по одной строке, поэтому поменять порядок строк невозможно.

E. Рыбы

битмаски дп Теория вероятностей *1900

В озере живет n рыб, пронумерованных от 1 до n. Каждый день ровно одна пара рыб встречается друг с другом, причем вероятности встречи каждой пары равны между собой. Если две рыбы с номерами i и j встретились, то первая съест вторую с вероятностью aij, а вторая первую –– с вероятностью aji = 1 - aij. Этот процесс продолжается, пока в озере остается хотя бы две рыбы. Для каждой рыбы посчитайте вероятность того, что она останется последней в озере.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 18) — число рыб в озере. Далее следует n строк по n вещественных чисел — матрица a. aij (0 ≤ aij ≤ 1) — вероятность того, что рыба с номером i съест рыбу с номером j. Гарантируется, что на главной диагонали матрицы стоят нули, а для всех остальных элементов выполняется: aij = 1 - aji. Все вещественные числа даны не более чем с 6 знаками после десятичной точки.

Выходные данные

Выведите n вещественных чисел, разделенных пробелами, с точностью не менее 6 знаков после точки. Число с номером i должно быть равно вероятности того, что рыба с номером i останется последней в озере.

B. Лягушка-путешественница

графы дп кратчайшие пути поиск в глубину и подобное Структуры данных *1900

Лягушонок Горф отправился в путешествие по Болотному королевству. К несчастью, он не рассчитал длину своего прыжка и упал в колодец глубиной \(n\) метров. Теперь Горф лежит на самом дне колодца и ему предстоит долгий путь наверх.

Стенки колодца в некоторых местах скользкие, а в некоторых, наоборот, очень удобные. А именно, если Горф сейчас находится на глубине \(x\) метров от уровня земли, то за один прыжок он может подняться на любое расстояние от \(0\) по \(a_x\) метров вверх. (Заметим, что Горф не прыгает вниз, только вверх).

К сожалению, Горф не может прыгать без перерывов. После каждого прыжка ему нужно отдохнуть (даже после прыжка на \(0\) метров). А потому, после прыжка в позицию \(x\) метров ниже уровня земли, он соскользнет ровно на \(b_x\) метров вниз (пока отдыхает).

Определите, за какое минимальное число прыжков Горф способен подняться до уровня земли.

Входные данные

В первой строке задано целое положительное число \(n\) (\(1 \le n \le 300\,000\)) — глубина колодца.

Во второй строке задано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le i\)), где \(a_i\) — это максимальная высота, доступная для прыжка с глубины \(i\).

В третьей строке вводится \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i \le n - i\)), где \(b_i\) — это глубина, на которую лягушонок провалится, взяв перерыв на глубине \(i\).

Выходные данные

Если лягушонок не может выбраться из колодца, выведите \(-1\). В противном случае сначала выведите целое число \(k\) — минимально возможное количество прыжков.

Далее выведите последовательность глубин \(d_1,\,d_2,\,\ldots,\,d_k\), где \(d_j\) — это глубина, которую достигнет Горф после \(j\)-го прыжка, но до того, как соскользнет вниз во время передышки. Уровень земли считается равным \(0\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере Горф находится на дне колодца, за один прыжок вверх поднимается к отметке в \(1\) метр глубины. После этого он соскальзывает вниз на метр и оказывается на отметке в \(2\) метра. С этой отметки он уже сможет выпрыгнуть из колодца за один прыжок.

Во втором примере Горф может допрыгнуть до отметки в один метр, но сразу после этого соскользнет обратно на дно колодца, поэтому ему не выбраться.

В третьем примере выбраться из колодца можно только прыгнув с глубины \(5\). Попасть напрямую туда нельзя, но можно добраться с помощью серии прыжков \(10 \Rightarrow 9 \dashrightarrow 9 \Rightarrow 4 \dashrightarrow 5\), где \(\Rightarrow\) обозначает прыжок вверх, а \(\dashrightarrow\) обозначает спуск.

C. Оптимальная вставка

дп жадные алгоритмы разделяй и властвуй сортировки Структуры данных *2300

У вас есть два массива \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_m\), состоящие из целых чисел.

Вы должны вставить все элементы массива \(b\) в массив \(a\) в произвольные места. В результате получится массив \(c_1, c_2, \ldots, c_{n+m}\) размера \(n + m\).

Обратите внимание, что элементы массива \(a\) переставлять нельзя, но элементы массива \(b\) можно вставлять куда угодно (в начало, между двумя соседними элементами массива \(a\), в конец). Более того, элементы массива \(b\) могут стоять в получившемся массиве в любом порядке.

Какое минимальное количество инверсий в массиве \(c\) может быть? Напомним, что инверсией называется пара индексов \((i, j)\), такая что \(i < j\) и \(c_i > c_j\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют сами наборы входных данных.

В первой строке каждого набора входных данных заданы два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^6\)).

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Во третьей строке каждого набора заданы \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \leq b_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\) и сумма \(m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество инверсий, которое может получиться в массиве \(c\) при вставке.

Примечание

Варианты оптимальных вставок для всех наборов входных данных (элементы массива \(a\) подчеркнуты):

  • В первом наборе входных данных можно сделать \(c = [\underline{1}, 1, \underline{2}, 2, \underline{3}, 3, 4]\).
  • Во втором наборе входных данных можно сделать \(c = [1, 2, \underline{3}, \underline{2}, \underline{1}, 3]\).
  • В третьем наборе входных данных можно сделать \(c = [\underline{1}, 1, 3, \underline{3}, \underline{5}, \underline{3}, \underline{1}, 4, 6]\).

D. Сложная гора

дп жадные алгоритмы сортировки Структуры данных *2700

Группа из \(n\) альпинистов подошла к подножию горы. Сложность подъема на эту гору можно оценить целым числом \(d\).

Каждого альпиниста можно описать всего двумя целыми числами \(s\) и \(a\), где \(s\) характеризует навык альпиниста по восхождению на горы, а \(a\) характеризует его аккуратность.

Альпинист с навыком \(s\) может забраться на гору сложности \(p\) только в том случае, если \(p \leq s\). Во время того, как он забирается, он немного меняет путь, по которому идёт, а вместе с ним и его сложность. А именно, после того как на гору сложности \(p\) забирается альпинист с аккуратностью \(a\), сложность горы становится равной \(\max(p, a)\).

Альпинисты решили подниматься на гору по одному. Но сначала всем стало интересно, какое максимальное количество альпинистов смогут забраться на эту гору, если они будут залезать в оптимальном порядке. А так как в группе только вы увлекаетесь программированием, отвечать на этот вопрос придется вам.

Заметим, что после того, как порядок выбран, каждый альпинист, который может подняться на гору, должен подняться в отведенный ему момент.

Входные данные

В первой строке заданы два целых числа \(n\) и \(d\) (\(1 \leq n \leq 500\,000\); \(0 \leq d \leq 10^9\)) — количество альпинистов в группе и изначальная сложность горы.

В каждой из последующих \(n\) строк содержится по два целых числа \(s_i\) и \(a_i\) (\(0 \leq s_i, a_i \leq 10^9\)) — навык восхождению на горы \(i\)-го альпиниста и его аккуратность.

Выходные данные

Выведите одно число — максимальное количество альпинистов, которые смогут забраться на гору, если они будут подниматься на неё в оптимальном порядке.

Примечание

В первом примере из условия на гору могут забраться альпинисты \(2\) и \(3\) в таком порядке. Других вариантов, при которых забираются \(2\) альпиниста, нет.

Во втором примере из условия альпинист \(1\) забраться не может, потому что изначальная сложность горы слишком велика, а альпинисты \(2\) и \(3\) могут забраться в любом порядке.

В третьем примере из условия на гору взберутся альпинисты \(5\), \(3\) и \(4\), причём именно в таком порядке, других вариантов нет.

E. Онлайн-курс по физкультуре

дп жадные алгоритмы Структуры данных *2900

У студентов одного неизвестного ПТУ нет обязательных занятий по физкультуре. Чтобы исправить это недоразумение, \(q\) студентов решили самостоятельно записаться в спортзал. В спортзале действует система абонементов на посещения, в \(i\)-й из \(n\) дней известна цена покупки абонемента \(a_i\). Разрешается покупать более одного абонемента за день.

Купленный в день \(i\) абонемент можно активировать как день \(i\), так и в любой день позднее. Каждый из абонементов после активации будет действовать \(k\) дней, то есть активированный в день \(t\) абонемент будет действовать в дни с номерами \(t, t + 1, \dots, t + k - 1\).

Известно, что \(j\)-й студент хочет посещать спортзал каждый день со дня \(l_j\) по день \(r_j\) включительно. Алгоритм похода в спортзал в некоторый день \(i\) (\(l_j \le i \le r_j\)) любого из студентов выглядит следующим образом:

  1. Студент подходит к кассе перед спортзалом и покупает несколько абонементов по цене \(a_i\) за штуку (возможно, не покупает ни одного).
  2. Если у студента есть хотя бы один действующий сегодня абонемент, то он просто проходит в спортзал. Иначе, он активирует один из купленных сегодня или ранее абонементов, и проходит в спортзал.

Заметим, что ни один студент не придет в спортзал раньше дня \(l_j\), а потому каждый студент обязательно купит не менее одного абонемента в день \(l_j\).

Помогите каждому студенту посчитать, какую минимальную сумму ему придется потратить, чтобы посещать зал в свои дни.

Входные данные

В первой строке заданы три целых числа \(n\), \(q\) и \(k\) (\(1 \le n, q \le 300\,000\); \(1 \le k \le n\)) — количество дней, количество студентов и длительность любого абонемента.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — стоимость одного абонемента в соответствующий день.

В следующих \(q\) строках заданы два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — отрезок дней, в которые соответствующий студент хочет посещать спортзал.

Выходные данные

Для каждого студента выведите минимальную сумму, необходимую ему для посещения спортзала в выбранный отрезок дней.

Примечание

Рассмотрим как нужно покупать абонементы каждому из студентов:

  • Первому студенту достаточно купить один сертификат в день \(1\).
  • Второму студенту нужно купить один сертификат в день \(3\) и два сертификата в день \(4\). Обратите внимание, что он не обязан использовать их в тот же день.
  • Третьему студенту достаточно купить один сертификат в день \(5\).
  • Четвертому студенту достаточно купить сертификат в день \(7\).
  • Пятому студенту нужно купить по одному сертификату в дни \(3\) и \(4\).

C. Экстремальное удлинение

дп жадные алгоритмы математика теория чисел *2300

Для массива \(b\) из \(n\) целых чисел определим экстремальное значение этого массива как минимальное количество раз (возможно, нулевое), которое необходимо выполнить следующую операцию, чтобы массив \(b\) стал неубывающим:

  • Выберите индекс \(i\) такой, что \(1 \le i \le |b|\), где \(|b|\) — текущая длина \(b\).
  • Замените \(b_i\) двумя элементами \(x\) и \(y\) такими, что \(x\) и \(y\) являются целыми положительными числами и \(x + y = b_i\).
  • Таким образом, массив \(b\) изменяется, и следующая операция выполняется над этим измененным массивом.

Например, если \(b = [2, 4, 3]\) и выбран индекс \(2\), то возможными массивами после этой операции будут \([2, \underline{1}, \underline{3}, 3]\), \([2, \underline{2}, \underline{2}, 3]\), или \([2, \underline{3}, \underline{1}, 3]\). И, следовательно, для этого массива достаточно одной операции, чтобы он стал неубывающим: \([2, 4, 3] \rightarrow [2, \underline{2}, \underline{2}, 3]\).

Легко понять, что любой массив целых положительных чисел можно сделать неубывающим таким образом.

У YouKn0wWho есть массив \(a\) из \(n\) целых чисел. Помогите ему найти сумму экстремальных значений по всем непустым подмассивам массива \(a\) по модулю \(998\,244\,353\). Если некоторый подмассив встречается в \(a\) несколько раз, его экстремальное значение нужно учесть столько раз, сколько он встречается.

Массив \(d\) является подмассивом массива \(c\), если \(d\) может быть получен из \(c\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число  — сумму экстремальных значений по всем подмассивам \(a\), по модулю \(998\,244\,353\).

Примечание

Пусть \(f(l, r)\) обозначает экстремальное значение в подмассиве \([a_l, a_{l+1}, \ldots, a_r]\).

В первом наборе входных данных:

  • \(f(1, 3) = 3\), потому что YouKn0wWho может выполнить следующие операции над подмассивом \([5, 4, 3]\) (новые вставленные элементы подчеркнуты):

    \([5, 4, 3] \rightarrow [\underline{3}, \underline{2}, 4, 3] \rightarrow [3, 2, \underline{2}, \underline{2}, 3] \rightarrow [\underline{1}, \underline{2}, 2, 2, 2, 3]\);

  • \(f(1, 2) = 1\), потому что \([5, 4] \rightarrow [\underline{2}, \underline{3}, 4]\);
  • \(f(2, 3) = 1\), потому что \([4, 3] \rightarrow [\underline{1}, \underline{3}, 3]\);
  • \(f(1, 1) = f(2, 2) = f(3, 3) = 0\), потому что они уже неубывающие.

Таким образом, общая сумма экстремальных значений всех подмассивов \(a = 3 + 1 + 1 + 0 + 0 + 0 = 5\).

D. Художественное разбиние

дп разделяй и властвуй теория чисел *3000

Для двух положительных целых чисел \(l\) и \(r\) (\(l \le r\)) обозначим за \(c(l, r)\) количество пар целых чисел \((i, j)\) таких, что \(l \le i \le j \le r\) и \(\operatorname{gcd}(i, j) \ge l\). Здесь \(\operatorname{gcd}(i, j)\) обозначает наибольший общий делитель (НОД) чисел \(i\) и \(j\).

У вас есть два целых числа \(n\) и \(k\), где \(1 \le k \le n\). Пусть \(f(n, k)\) обозначает минимум \(\sum\limits_{i=1}^{k}{c(x_i+1,x_{i+1})}\) по всем последовательностям из целых чисел \(0=x_1 \lt x_2 \lt \ldots \lt x_{k} \lt x_{k+1}=n\).

Помогите YouKn0wWho найти \(f(n, k)\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 3 \cdot 10^5\))  — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^5\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — \(f(n, k)\).

Примечание

В первом наборе входных данных YouKn0wWho может выбрать последовательность \([0, 2, 6]\). Тогда \(f(6, 2) = c(1, 2) + c(3, 6) = 3 + 5 = 8\), что является минимально возможным.

E. Идеальная задача

дп Комбинаторика математика *3200

Последовательность целых чисел \(b_1, b_2, \ldots, b_m\) называется хорошей, если \(max(b_1, b_2, \ldots, b_m) \cdot min(b_1, b_2, \ldots, b_m) \ge b_1 + b_2 + \ldots + b_m\).

Последовательность целых чисел \(a_1, a_2, \ldots, a_n\) называется идеальной, если каждая непустая подпоследовательность \(a\) является хорошей.

У YouKn0wWho есть два целых числа \(n\) и \(M\), \(M\) — простое. Помогите ему найти количество, по модулю \(M\), идеальных последовательностей \(a_1, a_2, \ldots, a_n\) таких, что \(1 \le a_i \le n + 1\) для каждого \(i\) от \(1\) до \(n\).

Последовательность \(d\) является подпоследовательностью последовательности \(c\), если \(d\) может быть получена из \(c\) путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая и единственная строка входных данных содержит два целых числа \(n\) и \(M\), разделенных пробелом (\(1 \le n \le 200\); \(10^8 \le M \le 10^9\)). Гарантируется, что \(M\) является простым.

Выходные данные

Выведите одно целое число — количество идеальных последовательностей по модулю \(M\).

Примечание

В первом примере идеальные последовательности — \([2, 2]\), \([2, 3]\), \([3, 2]\) и \([3, 3]\).

Во втором примере, некоторые из идеальных последовательностей — \([3, 4, 3, 5]\), \([4, 5, 4, 4]\), \([4, 5, 5, 5]\) и т.д. Одним из примеров последовательности, которая не является идеальной, является \([2, 3, 3, 4]\), потому что, например, подпоследовательность \([2, 3, 4]\) не является хорошей, так как \(2 \cdot 4 < 2 + 3 + 4\).

F. 18 октября 2017

дп Комбинаторика математика реализация *2700

Это произошло 18 октября 2017 года. Shohag, меланхоличная душа, твердо решил, что будет серьезно заниматься спортивным программированием, поскольку оно показалось ему увлекательным. Прошло 4 года, и он счастлив, что выбрал этот путь. Сейчас он создает раунд на Codeforces. Он нашел выдающуюся задачу, но не имеет ни малейшего представления о том, как ее решить. Помогите ему решить финальную задачу раунда.

Вам даны три целых числа \(n\), \(k\) и \(x\). Найдите количество, по модулю \(998\,244\,353\), последовательностей целых чисел \(a_1, a_2, \ldots, a_n\) таких, что выполняются следующие условия:

  • \(0 \le a_i \lt 2^k\) для каждого целого числа \(i\) от \(1\) до \(n\).
  • Не существует непустой подпоследовательности в \(a\) такой, что побитовое исключающее ИЛИ элементов подпоследовательности равно \(x\).

Последовательность \(b\) является подпоследовательностью последовательности \(c\), если \(b\) может быть получена из \(c\) путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(x\) (\(1 \le n \le 10^9\), \(0 \le k \le 10^7\), \(0 \le x \lt 2^{\operatorname{min}(20, k)}\)), разделенных пробелами.

Гарантируется, что сумма \(k\) по всем наборам входных данных не превышает \(5 \cdot 10^7\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — ответ на задачу.

Примечание

В первом наборе входных данных допустимыми последовательностями являются \([1, 2]\), \([1, 3]\), \([2, 1]\), \([2, 3]\), \([3, 1]\) и \([3, 2]\).

Во втором наборе входных данных единственной допустимой последовательностью является \([0, 0]\).

F. ПалиндORм

дп Комбинаторика *2900

Целочисленный массив \(a\) длины \(n\) называется палиндORмом, если (\(a_{1}\) \(|\) \(a_{2} \) \(|\) \( \ldots \) \(|\) \( a_{i}) = (a_{{n - i + 1}} \) \(|\) \( \ldots \) \(|\) \( a_{{n - 1}} \) \(|\) \( a_{n}) \) для всех \( 1 \leq i \leq n\), где \(|\) обозначает операцию побитового ИЛИ.

Целочисленный массив \(a\) длины \(n\) считается хорошим, если его элементы могут быть переставлены так, чтобы образовать палиндORм. Формально, массив \(a\) является хорошим, если существует перестановка \(p_1, p_2, \ldots p_n\) (массив, в котором каждое целое число от \(1\) до \(n\) встречается ровно один раз), для которой \(a_{p_1}, a_{p_2}, \ldots a_{p_n}\) является палиндORмом.

Найдите количество хороших массивов длины \(n\), состоящих только из целых чисел в диапазоне \([0, 2^{k} - 1]\), и выведите его по модулю некоторого простого числа \(m\).

Два массива \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\) считаются различными, если существует индекс \(i\) \((1 \leq i \leq n)\) такой, что \(a_i \ne b_i\).

Входные данные

Первая и единственная строка входных данных содержит три целых числа \(n\), \(k\) и \(m\) (\(1 \leq n,k \leq 80\), \(10^8 \lt m \lt 10^9\)). Гарантируется, что \(m\) является простым.

Выходные данные

Выведите одно целое число  — количество хороших массивов по модулю \(m\).

Примечание

В первом примере оба возможных массива \([0]\) и \([1]\) являются хорошими.

Во втором примере есть несколько примеров хороших массивов:

  • \([2, 1, 2]\), потому что он уже является палиндORмом.
  • \([1, 1, 0]\), потому что его можно перестроить в \([1, 0, 1]\), что является палиндORмом.

Обратите внимание, что \([1, 1, 0]\), \([1, 0, 1]\) и \([0, 1, 1]\) являются хорошими массивами и считаются разными в соответствии с определением в утверждении.

В третьем примере примером хорошего массива является \([1, 0, 1, 4, 2, 5, 4]\). Его можно переставить в массив \(b = [1, 5, 0, 2, 4, 4, 1]\), который является палиндORмом, потому что:

  • \(\mathrm{OR}(1, 1)\) = \(\mathrm{OR}(7, 7)\) = \(1\)
  • \(\mathrm{OR}(1, 2)\) = \(\mathrm{OR}(6, 7)\) = \(5\)
  • \(\mathrm{OR}(1, 3)\) = \(\mathrm{OR}(5, 7)\) = \(5\)
  • \(\mathrm{OR}(1, 4)\) = \(\mathrm{OR}(4, 7)\) = \(7\)
  • \(\mathrm{OR}(1, 5)\) = \(\mathrm{OR}(3, 7)\) = \(7\)
  • \(\mathrm{OR}(1, 6)\) = \(\mathrm{OR}(2, 7)\) = \(7\)
  • \(\mathrm{OR}(1, 7)\) = \(\mathrm{OR}(1, 7)\) = \(7\)

Здесь \(\mathrm{OR}(l, r)\) обозначает \(b_{l}\) \(|\) \(b_{l+1} \) \(|\) \( \ldots \) \(|\) \( b_{r}\)

E. Арена

дп Комбинаторика математика *2100

На арене сражаются \(n\) героев. Изначально у \(i\)-го героя \(a_i\) единиц здоровья.

Бой на арене проходит в несколько раундов. В начале каждого раунда каждый еще живой герой наносит \(1\) урона всем остальным героям. Удары всех героев происходят одновременно. Герои, чье здоровье стало меньше \(1\) в конце раунда, считаются убитыми.

Если после некоторого раунда в живых остается ровно \(1\) герой, то он объявляется победителем. В противном случае победителя нет.

Ваша задача — посчитать количество способов выбрать начальное здоровье для каждого героя \(a_i\), где \(1 \le a_i \le x\), таким образом, чтобы не существовало победителя боя. Количество способов может быть очень большим, поэтому выведите его по модулю \(998244353\). Два способа считаются различными, если хотя бы у одного героя отличается количество здоровья. Например, способы \([1, 2, 1]\) и \([2, 1, 1]\) — разные.

Входные данные

Единственная строка содержит два целых числа \(n\) и \(x\) (\(2 \le n \le 500; 1 \le x \le 500\)).

Выходные данные

Выведите одно целое число — количество способов выбрать начальное здоровье для каждого героя \(a_i\), где \(1 \le a_i \le x\), таким образом, чтобы не существовало победителя боя, взятое по модулю \(998244353\).

F. Древесные запросы

Деревья дп Перебор *2800

Дано дерево, состоящее из \(n\) вершин. Напомним, что дерево — это неориентированный ацикличный граф. Корнем данного дерева является вершина \(1\).

Требуется обработать \(q\) запросов. В каждом запросе задается вершина дерева \(v\) и целое число \(k\).

Для обработки запроса можно удалять вершины из дерева в произвольном порядке, кроме корня и вершины \(v\). Когда вершина удаляется, ее дети становятся детьми ее родителя. Требуется обработать запрос так, чтобы максимизировать значение \(c(v) - m \cdot k\) (где \(c(v)\) — это итоговое количество детей вершины \(v\), а \(m\) — это количество удаленных вершин). Выведите максимальное значение, которое можно получить.

Запросы независимые: изменения, произведенные над деревом при обработке запроса, не затрагивают другие запросы.

Входные данные

В первой строке записано одно число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Затем следует \(n-1\) строка, в \(i\)-й из них записаны два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\)) — концы \(i\)-го ребра. Данные ребра образуют дерево.

В следующей строке записано одно целое \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Затем следуют \(q\) строк, в \(j\)-й из них записаны два целых числа \(v_j\) и \(k_j\) (\(1 \le v_j \le n\); \(0 \le k_j \le 2 \cdot 10^5\)) — параметры \(j\)-го запроса.

Выходные данные

На каждый запрос выведите одно целое число — максимальное значение \(c(v) - m \cdot k\), которое можно получить.

Примечание

Дерево в первом примере показано на следующем изображении:

Ответы на запросы получаются следующим образом:

  1. \(v=1,k=0\): можно удалить вершины \(7\) и \(3\), так, чтобы у вершины \(1\) стало \(5\) детей (вершины \(2\), \(4\), \(5\), \(6\) и \(8\)), и счет равен \(5 - 2 \cdot 0 = 5\);
  2. \(v=1,k=2\): можно удалить вершину \(7\), так, чтобы у вершины \(1\) стало \(4\) ребенка (вершины \(3\), \(4\), \(5\) и \(6\)), и счет равен \(4 - 1 \cdot 2 = 2\).
  3. \(v=1,k=3\): не надо удалять вершины; тогда у вершины \(1\) станет один ребенок (вершина \(7\)), и счет равен \(1 - 0 \cdot 3 = 1\);
  4. \(v=7,k=1\): можно удалить вершину \(3\), так, чтобы у вершины \(7\) стало \(5\) детей (вершины \(2\), \(4\), \(5\), \(6\) и \(8\)), и счет равен \(5 - 1 \cdot 1 = 4\);
  5. \(v=5,k=0\): что бы вы ни делали, у вершины \(5\) не будет детей, поэтому счет равен \(0\);
  6. \(v=7,k=200000\): не надо удалять вершины; тогда у вершины \(7\) станет \(4\) ребенка (вершины \(3\), \(4\), \(5\) и \(6\)), и счет равен \(4 - 0 \cdot 200000 = 4\).

C. Мастер игры

графы дп жадные алгоритмы поиск в глубину и подобное Структуры данных *1700

\(n\) игроков играют в игру.

В игре есть две различные игровые карты. Для каждого игрока мы знаем его силу на каждой карте. Когда два игрока сражаются на определенной карте, всегда побеждает игрок с большей силой на этой карте. Нет двух игроков с одинаковой силой на одной и той же карте.

Вы — мастер этой игры, и хотите организовать турнир. Всего будет проведено \(n-1\) боев. Пока в турнире участвует более одного игрока, выберите любую карту и любых двух из оставшихся игроков, которые будут сражаться на ней. Игрок, который проиграет, выбывает из турнира.

В итоге останется ровно один игрок, и он объявляется победителем турнира. Для каждого игрока определите, может ли он выиграть турнир.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество игроков.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\), \(a_i \neq a_j\) для \(i \neq j\)), где \(a_i\) — сила \(i\)-го игрока на первой карте.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \leq b_i \leq 10^9\), \(b_i \neq b_j\) для \(i \neq j\)), где \(b_i\) — сила \(i\)-го игрока на второй карте.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите строку длины \(n\). \(i\)-й символ должен быть «1», если \(i\)-й игрок может выиграть турнир, или «0» в противном случае.

Примечание

В первом наборе входных данных \(4\)-й игрок обыграет любого другого игрока в любой игре, поэтому он обязательно выиграет турнир.

Во втором наборе входных данных каждый может стать победителем.

В третьем наборе входных данных есть только один игрок. Очевидно, что он выиграет турнир.

F. MEX подсчет

дп Комбинаторика реализация *3200

Для массива \(c\) неотрицательных целых чисел, \(MEX(c)\) обозначает наименьшее неотрицательное целое число, которое в нем не встречается. Например, \(MEX([0, 1, 3]) = 2\), \(MEX([42]) = 0\).

Вам даны целые числа \(n, k\) и массив \([b_1, b_2, \ldots, b_n]\).

Найдите количество массивов \([a_1, a_2, \ldots, a_n]\), для которых выполняются следующие условия:

  • \(0 \le a_i \le n\) для каждого \(i\) для каждого \(i\) от \(1\) до \(n\).

  • \(|MEX([a_1, a_2, \ldots, a_i]) - b_i| \le k\) для каждого \(i\) от \(1\) до \(n\).

Поскольку это число может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит два целых числа \(n, k\) (\(1 \le n \le 2000\), \(0 \le k \le 50\)).

Вторая строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-k \le b_i \le n+k\)) — элементы массива \(b\).

Выходные данные

Выведите одно целое число — количество массивов, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

C. Сложный анализ рынка

Бинарный поиск дп расписания реализация теория чисел *1400

В процессе сложного анализа рынка у Василия возникла следующая задача:

Дан массив \(a\) длины \(n\) и натуральное число \(e\). Требуется посчитать количество пар натуральных чисел \((i, k)\) для которых выполняются следующие условия:

  • \(1 \le i, k\)
  • \(i + e \cdot k \le n\).
  • Произведение \(a_i \cdot a_{i + e} \cdot a_{i + 2 \cdot e} \cdot \ldots \cdot a_{i + k \cdot e} \) является простым числом.

Простым числом называется натуральное число больше единицы, имеющее ровно два различных натуральных делителя — единицу и самого себя.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(e\) \((1 \le e \le n \le 2 \cdot 10^5)\) — количество элементов в массиве и число \(e\) соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 10^6)\) — описание массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

В единственной строке выведите количество подходящих пар чисел \((i, k)\).

Примечание

В первом тестовом примере подходят две пары:

  1. \(i = 2, k = 1\), тогда произведение: \(a_{2} \cdot a_{5} = 2\) является простым числом.
  2. \(i = 3, k = 1\), тогда произведение: \(a_{3} \cdot a_{6} = 19\) является простым числом.

Во втором тестовом примере не существует подходящих пар.

В третьем тестовом примере подходят четыре пары:

  1. \(i = 1, k = 1\), тогда произведение: \(a_{1} \cdot a_{4} = 2\) является простым числом.
  2. \(i = 1, k = 2\), тогда произведение: \(a_{1} \cdot a_{4} \cdot a_{7} = 2\) является простым числом.
  3. \(i = 3, k = 1\), тогда произведение: \(a_{3} \cdot a_{6} = 2\) является простым числом.
  4. \(i = 6, k = 1\), тогда произведение: \(a_{6} \cdot a_{9} = 2\) является простым числом.

В четвертом тестовом примере не существует подходящих пар.

В пятом тестовом примере подходят пять пар:

  1. \(i = 1, k = 1\), тогда произведение: \(a_{1} \cdot a_{2} = 2\) является простым числом.
  2. \(i = 1, k = 2\), тогда произведение: \(a_{1} \cdot a_{2} \cdot a_{3} = 2\) является простым числом.
  3. \(i = 1, k = 3\), тогда произведение: \(a_{1} \cdot a_{2} \cdot a_{3} \cdot a_{4} = 2\) является простым числом.
  4. \(i = 2, k = 1\), тогда произведение: \(a_{2} \cdot a_{3} = 2\) является простым числом.
  5. \(i = 2, k = 2\), тогда произведение: \(a_{2} \cdot a_{3} \cdot a_{4} = 2\) является простым числом.

В шестом тестовом примере не существует подходящих пар.

E. Невнимательный Василий

битмаски дп матрицы Структуры данных *2400

Перед тем как стать успешным трейдером, Василий закончил университет. Во время его обучения произошел один случай, после которого Василий стал намного внимательнее слушать условия заданий для домашней работы. Далее приведено формальное условие домашнего задания в том виде, как его услышал Василий.

Дана строка \(s\) длины \(n\), состоящая только из символов «a», «b» и «c». Есть \(q\) запросов вида (\(pos, c\)), который обозначает замену элемента строки \(s\) на позиции \(pos\) на символ \(c\). После каждого запроса требуется вывести минимальное количество символов в строке, которые нужно заменить, чтобы строка не содержала строку «abc» в качестве подпоследовательности. Правильной заменой символа является его изменение на символ «a», «b» или «c».

Строка \(x\) называется подпоследовательностью строки \(y\), если \(x\) может быть получена из \(y\) с помощью удаления некоторых символов без изменения порядка оставшихся символов.

Входные данные

Первая строка ввода содержит два целых числа \(n\) и \(q\) \((1 \le n, q \le 10^5)\) — длину строки и количество запросов соответственно.

Следующая строка ввода содержит строку \(s\), состоящую из символов «a», «b» и «c».

Следующие \(q\) строк содержат целое число \(i\) и символ \(c\) \((1 \le i \le n)\) — индекс и значение нового элемента строки соответственно. Гарантируется, что символ \(c\) равен значению «a», «b» или «c».

Выходные данные

Для каждого запроса выведите минимальное количество символов, которые необходимо заменить, чтобы строка не содержала «abc» как подпоследовательность.

Примечание

Рассмотрим состояния строки после каждого запроса:

  1. \(s = \)«aaaaccccc». В этом случае строка не содержит «abc» как подпоследовательность, поэтому замен делать не требуется.
  2. \(s = \)«aaabccccc». В этом случае можно сделать 1 замену и получить, например, строку \(s = \)«aaaaccccc». Эта строка не содержит «abc» как подпоследовательность.
  3. \(s = \)«ababccccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«aaaaccccc». Эта строка не содержит «abc» как подпоследовательность.
  4. \(s = \)«ababacccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«aaaaacccc». Эта строка не содержит «abc» как подпоследовательность.
  5. \(s = \)«bbabacccc». В этом случае можно сделать 1 замену и получить, например, строку \(s = \)«bbacacccc». Эта строка не содержит «abc» как подпоследовательность.
  6. \(s = \)«bbababccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«bbacacccc». Эта строка не содержит «abc» как подпоследовательность.
  7. \(s = \)«bbabcbccc». В этом случае можно сделать 1 замену и получить, например, строку \(s = \)«bbcbcbccc». Эта строка не содержит «abc» как подпоследовательность.
  8. \(s = \)«baabcbccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«bbbbcbccc». Эта строка не содержит «abc» как подпоследовательность.
  9. \(s = \)«aaabcbccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«aaacccccc». Эта строка не содержит «abc» как подпоследовательность.
  10. \(s = \)«aaababccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«aaacacccc». Эта строка не содержит «abc» как подпоследовательность.
  11. \(s = \)«aaababccc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«aaacacccc». Эта строка не содержит «abc» как подпоследовательность.
  12. \(s = \)«aaababbcc». В этом случае можно сделать 2 замены и получить, например, строку \(s = \)«aaababbbb». Эта строка не содержит «abc» как подпоследовательность.

D. Расстояние в дереве

Деревья дп поиск в глубину и подобное *1800

Деревом называется связный граф, не содержащий циклов.

Расстоянием между двумя вершинами дерева называется длина (в ребрах) кратчайшего пути между этими вершинами.

Дано дерево из n вершин и положительное число k. Посчитайте количество различных пар вершин дерева, расстояние между которыми равно k. Обратите внимание, что пары (v, u) и (u, v) считаются одной и той же парой.

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 50000, 1 ≤ k ≤ 500) — количество вершин дерева и требуемое расстояние между вершинами.

В следующих n - 1 строках записаны ребра дерева в формате «ai bi» (без кавычек) (1 ≤ ai, bi ≤ n, ai ≠ bi), где ai и bi — вершины дерева, соединенные i-м ребром. Все заданные ребра различны.

Выходные данные

Выведите единственное целое число — количество различных пар вершин дерева, расстояние между которыми равно k.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере парами вершин, расстояние между которыми равно 2, будут пары (1, 3), (1, 5), (3, 5) и (2, 4).

E. Медвежатник Поликарп

дп Перебор *2500

У Поликарпа есть t сейфов. Паролем от каждого сейфа является квадратная матрица из десятичных цифр '0' ... '9' (размеры паролей сейфов могут различаться). Увы, Поликарп забыл все пароли, и теперь ему предстоит их восстановить.

Поликарп любит простые числа, поэтому, когда он выбирал матрицы-пароли, он в каждую строку каждой матрицы вписал по простому числу. К своему удивлению, он обнаружил, что все матрицы получились симметричными (то есть после транспонирования остаются неизменными). Сейчас, годы спустя, к своей досаде Поликарп осознал, что он помнит только простые числа pi, записанные в первых строках матриц-паролей.

Для каждого сейфа найдите количество матриц, которые могут быть паролем к нему.

Количество цифр в pi определяет количество строк и столбцов i-ой матрицы. Одно простое число может содержаться сразу в нескольких строках матрицы-пароля или в нескольких матрицах. Простые числа, записанные не в первой строке матрицы, могут иметь ведущие нули.

Входные данные

В первой строке входных данных записано целое число t (1 ≤ t ≤ 30) — количество сейфов. Далее в t строках записаны целые числа pi (10 ≤ pi ≤ 99999), pi — простое число, записанное в первой строке матрицы-пароля для i-ого сейфа. Все pi не содержат ведущих нулей.

Выходные данные

Выведите t чисел, i-ое из которых является количеством матриц, которые могут быть паролем к i-ому сейфу. Числа выводите на отдельных строках.

Примечание

Пример возможной матрицы-пароля для второго сейфа:


239
307
977

Пример возможной матрицы-пароля для четвертого сейфа:


9001
0002
0002
1223

D. Ни кап Ли

дп Комбинаторика математика теория чисел *2000

В последнее время Ли не мог заснуть, потому что ему снились кошмары. В одном из своих кошмаров (который был о несбалансированном глобал раунде) он решил дать отпор и предложить задачу ниже (которую вы должны решить), чтобы сбалансировать раунд, надеясь освободить его от кошмаров.

Непустой массив \(b_1, b_2, \ldots, b_m\) называется хорошим, если существует \(m\) целочисленных последовательностей, удовлетворяющих следующим свойствам:

  • \(i\)-я последовательность состоит из \(b_i\) последовательных целых чисел (например, если \(b_i = 3\), то \(i\)-я последовательность может быть \((-1, 0, 1)\) или \((-5, -4, -3)\), но не \((0, -1, 1)\) или \((1, 2, 3, 4)\)).
  • Если сумма целых чисел в \(i\)-й последовательности равна \(sum_i\), то мы хотим, чтобы \(sum_1 + sum_2 + \ldots + sum_m\) было равно \(0\).

Вам дан массив \(a_1, a_2, \ldots, a_n\). У него есть \(2^n - 1\) непустых подпоследовательностей. Найдите, сколько из них являются хорошими.

Поскольку это число может быть очень большим, выведите его по модулю \(10^9 + 7\).

Массив \(c\) является подпоследовательностью массива \(d\), если \(c\) может быть получен из \(d\) путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — размер массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

Выходные данные

Выведите одно целое число — количество непустых хороших подпоследовательностей \(a\), по модулю \(10^9 + 7\).

Примечание

Для первого теста двумя примерами хороших подпоследовательностей являются \([2, 7]\) и \([2, 2, 4, 7]\):

Для \(b = [2, 7]\) мы можем использовать \((-3, -4)\) в качестве первой последовательности и \((-2, -1, \ldots, 4)\) в качестве второй. Обратите внимание, что подпоследовательность \([2, 7]\) входит дважды в \([2, 2, 4, 7]\), поэтому мы должны считать ее дважды.

Зеленые круги обозначают \((-3, -4)\), а оранжевые квадраты - \((-2, -1, \ldots, 4)\).

Для \(b = [2, 2, 4, 7]\) свойствам будут удовлетворять следующие последовательности: \((-1, 0)\), \((-3, -2)\), \((0, 1, 2, 3)\) и \((-3, -2, \ldots, 3)\).

E2. Побег из лабиринта (сложная версия)

Деревья дп жадные алгоритмы кратчайшие пути поиск в глубину и подобное *1900

Эта задача отличается от E1 только поставленным вопросом.

Влад построил лабиринт из \(n\) комнат и \(n-1\) двунаправленного коридора. Из любой комнаты \(u\) по коридорам достижима любая другая комната \(v\). Таким образом, система комнат образует неориентированное дерево.

Влад собрал \(k\) друзей, чтобы сыграть с ними в игру.

Влад начинает игру в комнате с номером \(1\) и выигрывает, если доходит до комнаты, отличной от \(1\), в которую ведёт ровно один коридор. Друзья же расставлены по лабиринту — друг с номером \(i\) стоит в комнате \(x_i\), и никакие два друга не стоят в одной комнате (то есть \(x_i \neq x_j\) для всех \(i \neq j\)). Друзья выигрывают, если одному удаётся встретиться с Владом в какой-либо комнате или коридоре, до того как он выиграет.

За одну единицу времени каждый участник игры может пройти по одному коридору. Все участники ходят одновременно. Участники также могут не двигаться. Каждая комната может вместить всех участников одновременно.

Друзья досконально изучили план и намерены выиграть. Также они не хотят зря тратить силы и просят вас определить, могут ли они выиграть и, если могут, какое минимальное количество друзей должно остаться в лабиринте, чтобы они всегда могли поймать Влада.

Иными словами вам нужно определить размер минимального подмножества друзей, который сможет переиграть Влада или сказать что такого подмножества не существует.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Перед каждым набором входных данных в тесте содержится пустая строка.

Первая строка набора входных данных содержит два числа \(n\) и \(k\) (\(1 \le k < n \le 2\cdot 10^5\)) — количество комнат и друзей соответственно.

Следующая строка набора входных данных содержит \(k\) целых чисел \(x_1, x_2, \dots, x_k\) (\(2 \le x_i \le n\)) — номера комнат с друзьями. Все \(x_i\) — различны.

Следующие \(n-1\) строк содержат описания коридоров, по два числа на строку \(v_j\) и \(u_j\) (\(1 \le u_j, v_j \le n\)) — номера комнат, которые соединяет коридор \(j\). Все коридоры двунаправленны. Из любой комнаты можно пройти в любую другую, перемещаясь по коридорам.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2\cdot10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите \(-1\), если Влад в любом случае победит, и минимальное необходимое число друзей иначе.

Примечание

В первом наборе входных данных даже если все друзья останутся в лабиринте, Влад всё равно сможет выиграть. Поэтому ответ «-1».

Во втором наборе входных данных достаточно оставить друзей из комнат \(6\) и \(7\). Тогда Влад не сможет выиграть. Ответ «2».

Во третьем и четвертом наборах входных данных Влад не сможет выиграть только если все его друзья останутся в лабиринте. Поэтому ответы соответственно «1» и «2».

E. Сообщения

дп жадные алгоритмы Перебор сортировки Теория вероятностей *2000

Монокарп — тьютор группы из \(n\) студентов. Он связывается с ними через конференцию в популярном мессенджере.

Сегодня у Монокарпа был напряженный день — его просили переслать его группе огромное количество объявлений, поэтому ему пришлось написать в конференции очень много сообщений. Монокарп достаточно хорошо знает студентов из группы, поэтому понимает, какое сообщение является важным для каждого студента: Монокарп хочет, чтобы студент \(i\) прочитал сообщение \(m_i\).

Конечно же, никто не будет читать все сообщения. Поэтому Монокарп решил прикрепить некоторые из них. Монокарп может прикрепить любое количество сообщений, и если он хочет, чтобы какое-то сообщение было прочитано, ему стоит прикрепить его — в противном случае никто такое сообщение не прочитает.

К сожалению, даже если сообщение прикреплено, некоторые студенты все равно могут его пропустить. Для каждого студента \(i\) Монокарп знает, что этот студент прочитает не более \(k_i\). Предположим, что Монокарп прикрепляет \(t\) сообщений; если \(t \le k_i\), то \(i\)-й студент прочитает все прикрепленные сообщения; но если \(t > k_i\), \(i\)-й студент выберет ровно \(k_i\) случайных прикрепленных сообщений (все различные подмножества размера \(k_i\) множества прикрепленных сообщений равновероятны) и прочитает только их.

Монокарп хочет максимизировать математическое ожидание количества студентов, которые прочитают необходимые им сообщения (это соответствует количеству таких индексов \(i\), что студент \(i\) прочитает сообщение \(m_i\)). Помогите ему выбрать, какие сообщения прикрепить!

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество студентов в конференции.

Затем следуют \(n\) строк. \(i\)-я строка содержит два целых числа \(m_i\) и \(k_i\) (\(1 \le m_i \le 2 \cdot 10^5\); \(1 \le k_i \le 20\)) — номер сообщения, которое должен прочитать \(i\)-й студент, и максимальное кол-во сообщений, которое \(i\)-й студент может прочитать, соответственно.

Выходные данные

В первой строке выведите одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество сообщений, которые должен прикрепить Монокарп. Во второй строке выведите \(t\) различных целых чисел \(c_1\), \(c_2\), ..., \(c_t\) (\(1 \le c_i \le 2 \cdot 10^5\)) — номера сообщений, которые необходимо прикрепить. Номера сообщений можно выводить в любом порядке.

Если оптимальных ответов несколько, выведите любой из них.

Примечание

Рассмотрим примеры из условия.

  1. В первом примере Монокарп прикрепляет сообщения \(5\) и \(10\).
    • если первый студент прочитает сообщение \(5\), второй студент прочитает сообщения \(5\) и \(10\), и третий студент прочитает сообщения \(5\) и \(10\), количество студентов, которые прочитают соответствующие им сообщения, будет равно \(2\);
    • если первый студент прочитает сообщение \(10\), второй студент прочитает сообщения \(5\) и \(10\), и третий студент прочитает сообщения \(5\) и \(10\), количество студентов, которые прочитают соответствующие им сообщения, будет равно \(3\).

    Поэтому математическое ожидание количества студентов, которые прочитают соответствующие им сообщения, равно \(\frac{5}{2}\).

  2. В первом примере Монокарп прикрепляет сообщение \(10\).
    • если первый студент прочитает сообщение \(10\), второй студент прочитает сообщение \(10\), и третий студент прочитает сообщение \(10\), количество студентов, которые прочитают соответствующие им сообщения, будет равно \(2\).

    Поэтому математическое ожидание количества студентов, которые прочитают соответствующие им сообщения, равно \(2\). Если бы Монокарп прикрепил и сообщение \(5\), и сообщение \(10\), математическое ожидание так же было бы равно \(2\).

  3. В третьем примере математическое ожидание кол-ва студентов, которые прочитают соответствующие им сообщения, равно \(\frac{8}{3}\).
  4. В четвертом примере математическое ожидание кол-ва студентов, которые прочитают соответствующие им сообщения, равно \(2\).

F. Доспехи и оружие

дп жадные алгоритмы кратчайшие пути Перебор *2800

Монокарп играет в компьютерную игру. В этой игре есть \(n\) различных доспехов и \(m\) различных оружий. Если персонаж снаряжен \(i\)-м доспехом и владеет \(j\)-м оружием, его сила обычно равна \(i + j\); но некоторые комбинации доспехов и оружия хорошо сочетаются. Формально существует список \(q\) упорядоченных пар, и если пара \((i, j)\) принадлежит этому списку, сила персонажа, снаряженным \(i\)-м доспехом и владеющего \(j\)-м оружием, составляет не \(i + j\), а \(i + j + 1\).

Изначально персонаж Монокарпа владеет только \(1\)-м доспехом и \(1\)-м оружием. Монокарп может получить новое оружие или новый доспех за один час. Если он хочет получить \(k\)-й доспех или \(k\)-е оружие, он должен обладать комбинацией доспеха и оружия, чья суммарная сила \(k\) или больше. Конечно, после того, как Монокарп получит оружие или доспех, он может использовать его для получения новых доспехов или оружия, но также он может использовать любой из старых доспехов и/или оружия.

Монокарп хочет получить \(n\)-й доспех и \(m\)-е оружие. Какое минимальное количество часов он должен потратить на это?

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 2 \cdot 10^5\)) — количество доспехов и количество оружия соответственно.

Вторая строка содержит одно целое число \(q\) (\(0 \le q \le \min(2 \cdot 10^5, nm)\)) — количество комбинаций, которые хорошо сочетаются.

Затем следуют \(q\) строк, \(i\)-я строка содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i \le n\); \(1 \le b_i \le m\)), что означает, что \(a_i\)-й доспех хорошо сочетается с \(b_i\)-м оружием. Все пары \((a_i, b_i)\) различны.

Выходные данные

Выведите одно целое число — минимальное количество часов, которое Монокарп должен потратить на получение как \(n\)-го доспеха, так и \(m\)-го оружия.

Примечание

В первом примере Монокарп может получить самый сильный доспех и самое сильное оружие следующим образом:

  1. Получить \(2\)-е оружие используя \(1\)-й доспех и \(1\)-е оружие;
  2. Получить \(3\)-й доспех используя \(1\)-й доспех и \(2\)-е оружие;
  3. Получить \(4\)-е оружие используя \(3\)-й доспех и \(2\)-е оружие.

Во втором примере Монокарп может получить самый сильный доспех и самое сильное оружие следующим образом:

  1. Получить \(3\)-й доспех используя \(1\)-й доспех и \(1\)-е оружие (они хорошо сочетаются, а значит сила Монокарпа равна не \(2\), а \(3\));
  2. Получить \(4\)-е оружие используя \(3\)-й доспех и \(1\)-е оружие.

D. MEX-последовательности

дп математика *1900

Назовем последовательность целых чисел \(x_1, x_2, \dots, x_k\) MEX-правильной, если для любого \(i\) (\(1 \le i \le k\)) выполняется \(|x_i - \operatorname{MEX}(x_1, x_2, \dots, x_i)| \le 1\). Здесь \(\operatorname{MEX}(x_1, \dots, x_k)\) — минимальное неотрицательное целое число, которое не принадлежит набору \(x_1, \dots, x_k\). Например, \(\operatorname{MEX}(1, 0, 1, 3) = 2\), а \(\operatorname{MEX}(2, 1, 5) = 0\).

Вам задан массив \(a\), состоящий из \(n\) целых неотрицательных чисел. Найдите количество непустых МЕХ-правильных подпоследовательностей заданного массива. Количество подпоследовательностей может быть очень большим, поэтому выведите его по модулю \(998244353\).

Примечание: подпоследовательность массива \(a\) — это последовательность \([a_{i_1}, a_{i_2}, \dots, a_{i_m}]\), удовлетворяющая ограничениям \(1 \le i_1 < i_2 < \dots < i_m \le n\). Если два разных способа выбрать последовательность индексов \([i_1, i_2, \dots, i_m]\) приводят к одной и той же подпоследовательности, ее следует считать дважды (т. е. две подпоследовательности различны, если различаются последовательности индексов \([i_1, i_2, \dots, i_m]\)).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le n\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество непустых МЕХ-правильных подпоследовательностей заданного массива, взятое по модулю \(998244353\).

Примечание

Подходящие подпоследовательности в первом примере: \([0]\), \([1]\), \([0,1]\) и \([0,2]\).

Подходящие подпоследовательности во втором примере: \([0]\) и \([1]\).

В третьем примере любая непустая подпоследовательность подходит.

C. Divan и битовые операции

битмаски дп Комбинаторика Конструктив математика *1500

Однажды Divan проанализировал последовательность \(a_1, a_2, \ldots, a_n\), состоящую из \(n\) целых неотрицательных чисел, следующим образом. Он рассмотрел все непустые подпоследовательности последовательности \(a\), вычислил побитовое исключающее ИЛИ её элементов, после чего просуммировал все полученные результаты, получив удобство последовательности \(a\).

Напомним, что последовательность \(c\) является подпоследовательностью последовательности \(d\), если \(c\) может быть получена из \(d\) путем удаления нескольких элементов (возможно, ни одного). Например, \([1, \, 2, \, 3, \, 4]\), \([2, \, 4]\) и \([2]\) являются подпоследовательностями \([1, \, 2, \, 3, \, 4]\), а \([4, \, 3]\) и \([0]\) не являются.

Divan очень гордился проведенным анализом, но теперь потерял и последовательность \(a\), и значение ее удобства! Однако Divan помнит значение побитового ИЛИ на \(m\) непрерывных подотрезках последовательности \(a\). Оказалось, что каждый элемент последовательности входит хотя бы в один из этих \(m\) отрезков.

Divan просит вас найти удобство последовательности \(a\), используя информацию, которую он помнит. Если возможны несколько значений удобства, выведите любое.

Так как ответ может быть большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Каждый тест содержит несколько наборов входных данных.

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество чисел в последовательности и количество отрезков, значения побитового ИЛИ которых смог запомнить Divan, соответственно.

Далее идут \(m\) строк, в которых содержатся описания отрезков по одному в строке.

Каждый отрезок задаётся тремя целыми числами \(l\), \(r\) и \(x\) (\(1 \le l \le r \le n\), \(0 \le x \le 2^{30} - 1\)) — левая и правая граница отрезка, а также значение побитового ИЛИ элементов \(a_l, a_{l + 1}, \ldots, a_r\), соответственно.

Гарантируется, что каждый элемент последовательности входит хотя бы в один из данных отрезков. Гарантируется, что существует последовательность, которая удовлетворяет всем данным ограничениям.

Гарантируется, что сумма значений \(n\), а также сумма значений \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите любое возможное удобство последовательности \(a\) по модулю \(10^9 + 7\).

Примечание

В первом примере одной из последовательностей, которая подходит под ограничения, является \([0, 2]\). Рассмотрим все её непустые подпоследовательности:

  • \([0]\): побитовое исключающее ИЛИ равно \(0\);
  • \([2]\): побитовое исключающее ИЛИ равно \(2\);
  • \([0, 2]\): побитовое исключающее ИЛИ равно \(2\).

Суммируя полученные числа, получаем \(4\), что является ответом.

Во втором примере одной из последовательностей, которая подходит под ограничения, является \([0, \, 5, \, 5]\).

В третьем примере одной из последовательностей, которая подходит под ограничения, является \([5, \, 6, \, 7, \, 0, \, 2]\).

D1. Divan и Костомукша (простая версия)

дп теория чисел *2100

Это простая версия задачи. Единственным различием между версиями является ограничение на \(a_i\).

Однажды в Костомукше Divan нашел массив \(a\), состоящий из целых положительных чисел! Он хочет каким-нибудь образом переупорядочить элементы массива \(a\) так, чтобы максимизировать следующее выражение: \(\)\sum_{i=1}^n \operatorname{gcd}(a_1, \, a_2, \, \dots, \, a_i),\(\) где \(\operatorname{gcd}(x_1, x_2, \ldots, x_k)\) — это наибольший общий делитель чисел \(x_1, x_2, \ldots, x_k\), а \(\operatorname{gcd}(x) = x\) для всех целых чисел \(x\).

Переупорядочить элементы массива означает каким-либо образом поменять порядок элементов в массиве или оставить исходный порядок.

Разумеется, Divan может решить эту задачу сам. Однако он посчитал, что она достаточно интересная, чтобы поделиться ею с вами.

Входные данные

В первой строке находится одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество чисел в массиве \(a\).

Вторая строка содержит \(n\) целых чисел \(a_{1}, \, a_{2}, \, \dots, \, a_{n}\) (\(1 \le a_{i} \le 5 \cdot 10^6\)) — элементы массива \(a\).

Выходные данные

Выведите максимальное значение функции, которое можно получить, переупорядочив элементы массива \(a\).

Примечание

В первом примере можно расположить элементы массива в следующем порядке: \([6, \, 2, \, 2, \, 2, \, 3, \, 1]\). Тогда \(\)\operatorname{gcd}(a_1) + \operatorname{gcd}(a_1, \, a_2) + \operatorname{gcd}(a_1, \, a_2, \, a_3) + \operatorname{gcd}(a_1, \, a_2, \, a_3, \, a_4) + \operatorname{gcd}(a_1, \, a_2, \, a_3, \, a_4, \, a_5) + \operatorname{gcd}(a_1, \, a_2, \, a_3, \, a_4, \, a_5, \, a_6) = 6 + 2 + 2 + 2 + 1 + 1 = 14.\(\) Можно показать, что большего ответа для данного массива не существует.

Во втором примере оптимально переупорядочить элементы можно, например, так: \([100, \, 10, \, 10, \, 5, \, 1, \, 3, \, 3, \, 7, \, 42, \, 54]\).

D2. Divan и Костомукша (сложная версия)

дп теория чисел *2300

Это сложная версия задачи. Единственным различием между версиями является ограничение на \(a_i\).

Однажды в Костомукше Divan нашел массив \(a\), состоящий из целых положительных чисел! Он хочет каким-нибудь образом переупорядочить элементы массива \(a\) так, чтобы максимизировать следующее выражение: \(\)\sum_{i=1}^n \operatorname{gcd}(a_1, \, a_2, \, \dots, \, a_i),\(\) где \(\operatorname{gcd}(x_1, x_2, \ldots, x_k)\) — это наибольший общий делитель чисел \(x_1, x_2, \ldots, x_k\), а \(\operatorname{gcd}(x) = x\) для всех целых чисел \(x\).

Переупорядочить элементы массива означает каким-либо образом поменять порядок элементов в массиве или оставить исходный порядок.

Разумеется, Divan может решить эту задачу сам. Однако он посчитал, что она достаточно интересная, чтобы поделиться ею с вами.

Входные данные

В первой строке находится одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество чисел в массиве \(a\).

Вторая строка содержит \(n\) целых чисел \(a_{1}, \, a_{2}, \, \dots, \, a_{n}\) (\(1 \le a_{i} \le 2 \cdot 10^7\)) — элементы массива \(a\).

Выходные данные

Выведите максимальное значение функции, которое можно получить, переупорядочив элементы массива \(a\).

Примечание

В первом примере можно расположить элементы массива в следующем порядке: \([6, \, 2, \, 2, \, 2, \, 3, \, 1]\). Тогда \(\)\operatorname{gcd}(a_1) + \operatorname{gcd}(a_1, \, a_2) + \operatorname{gcd}(a_1, \, a_2, \, a_3) + \operatorname{gcd}(a_1, \, a_2, \, a_3, \, a_4) + \operatorname{gcd}(a_1, \, a_2, \, a_3, \, a_4, \, a_5) + \operatorname{gcd}(a_1, \, a_2, \, a_3, \, a_4, \, a_5, \, a_6) = 6 + 2 + 2 + 2 + 1 + 1 = 14.\(\) Можно показать, что большего ответа для данного массива не существует.

Во втором примере оптимально переупорядочить элементы можно, например, так: \([100, \, 10, \, 10, \, 5, \, 1, \, 3, \, 3, \, 7, \, 42, \, 54]\).

F. ЛЕГОндарный гроссмейстер

дп Комбинаторика математика *2800

Устав играть с мелками, вы решили перейти на Лего! Сегодня у вас есть длинная полоска высоты \(1\) и длины \(n\), в некоторых ячейках которой расположены детальки Лего \(1\) на \(1\).

За одну секунду, вы можете либо убрать две последовательные детальки Лего с полоски (если таковые имеются), либо поставить две детальки Лего на последовательные позиции (если они пустые). Вы можете ставить и убирать Лего только по две штуки за раз, так как ваши пальцы слишком широкие для одной детальки.

Вам интересно узнать, сколько времени вы потратите на игру с Лего. При этом, для вас крайне важна эффективность, а потому если вы хотите получить из некоторого стартового состояния некоторое финишное, то вы всегда потратите наименьшее количество секунд. Если же из стартового состояния невозможно получить финишное, то вы просто ничего не станете делать (то есть потратите \(0\) секунд).

Проблема в том, что вы не помните, были ли детальки Лего в некоторых позициях (как в стартовом состоянии, так и в финишном). А потому вы хотите посчитать суммарное время получения финишного состояния из стартового для всех пар (стартовое состояние, финишное состояние), которые не противоречат вашей памяти. Так как время может оказаться очень большим, выведите его по модулю \(1\,000\,000\,007\) (\(10^9 + 7\)).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 2000\)) — размер полоски Лего.

Во второй строке каждого набора задана строка \(s\) длины \(n\), состоящая из символов 0, 1 и ? — то, что вы помните о стартовом состоянии:

  • 1 означает позицию, в которой совершенно точно стояла деталька Лего,
  • 0 означает позицию, в которой совершенно точно не было детальки Лего,
  • а ? означает позицию, про которую вы ничего не помните.

В третьей строке каждого набора задана строка \(t\) длины \(n\), состоящая из символов 0, 1 и ? — то, что вы помните о финишном состоянии, в том же формате, что и для стартового состояния.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите одно число — ответ на задачу по модулю \(1\,000\,000\,007\) (\(10^9 + 7\)).

Примечание

В первом наборе входных данных, \(00\) — единственное возможное стартовое состояние, а \(11\) — единственное возможное финишное состояние. Потребуется одна операция, чтобы превратить \(00\) в \(11\).

Во втором наборе, ниже приведены некоторые из возможных пар стартовых и финишных состояний:

  • \((000, 011)\) — потребуется \(1\) операция;
  • \((001, 100)\) — потребуется \(2\) операции;
  • \((010, 000)\) — потребуется \(0\) операций, так как невозможно получить из заданного стартового состояния заданное финишное.

D. Следи за большим средним

дп жадные алгоритмы математика *2000

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) и целое число \(x\).

Вам нужно выбрать максимальное количество элементов массива таким образом, чтобы для любого подотрезка массива \(a_l, a_{l + 1}, \ldots, a_r\), который содержит строго больше одного элемента \((l < r)\), выполняется хотя бы одно из двух:

  • Хотя бы один элемент на этом отрезке не выбран, или
  • \(a_l + a_{l+1} + \ldots + a_r \geq x \cdot (r - l + 1)\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10\)): количество наборов входных данных.

Далее следуют описания \(t\) наборов, по три строки на набор.

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 50\,000\)): размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-100\,000 \leq a_i \leq 100\,000\)).

Третья строка содержит одно целое число \(x\) (\(-100\,000 \leq x \leq 100\,000\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальное количество элементов, которое вы можете выбрать.

Примечание

В первом примере один из корректных способов выбрать элементы следующий: \([\underline{1}, 2, \underline{3}, \underline{4}, \underline{5}]\). Все подотрезки удовлетворяют хотя бы одному критерию. Например, в подотрезоке \(l = 1\), \(r = 2\) элемент \(2\) не выбран, то есть выполнен первый критерий. А в подотрезке \(l = 3\), \(r = 5\) выполняется \(3 + 4 + 5 = 12 \ge 2 \cdot 3\), удовлетворяя второй критерий.

Выбрать все элементы нельзя, так как в этом случае для \(l = 1\), \(r = 2\) все элементы будут выбраны, и \(a_1 + a_2 = 3 < 2 \cdot 2\). Таким образом, максимальное количество выбранных элементов равно \(4\).

Во втором примере один из корректных способов выбрать элементы следующий: \([\underline{2}, \underline{4}, 2, \underline{4}, \underline{2}, \underline{4}, 2, \underline{4}, \underline{2}, \underline{4}]\).

В третьем примере один из корректных способов выбрать элементы следующий: \([\underline{-10}, -5, \underline{-10}]\).

В четвертом примере один из корректных способов выбрать элементы следующий: \([\underline{9}, \underline{9}, -3]\).

G. Просто добавь ребро

графы дп поиск в глубину и подобное *3500

Вам дан ориентированный ациклический граф из \(n\) вершин и \(m\) ребер. Для всех ребер графа \(a \to b\) выполняется \(a < b\).

Вам нужно найти количество пар вершин \(x\), \(y\) таких, что \(x > y\), и после добавления в граф ребра \(x \to y\) в нем будет существовать гамильтонов путь.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5\)): количество наборов входных данных.

Следующие строки содержат описания наборов входных данных.

В первой строке находятся два целых числа \(n\) и \(m\) (\(1 \leq n \leq 150\,000\), \(0 \leq m \leq \min(150\,000, \frac{n(n-1)}{2})\)): количество вершин и ребер в графе.

Каждая из следующих \(m\) строк содержит два целых числа \(a\) и \(b\) (\(1 \leq a < b \leq n\)), описывающих ребро графа \(a \to b\). Никакое ребро \(a \to b\) не встречается более одного раза.

Выходные данные

Для каждого набора входных данных выведите одно целое число: количество пар вершин \(x\), \(y\), \(x > y\), таких, что после добавления в граф ребра \(x \to y\) в графе найдется гамильтонов путь.

Примечание

В первом примере любое ребро \(x \to y\) такое, что \(x > y\), подойдет, т. к. уже существует путь \(1 \to 2 \to 3\).

Во втором примере подходит только ребро \(4 \to 1\). Если его добавить, появится путь \(3 \to 4 \to 1 \to 2\).

В третьем примере можно добавить ребра \(2 \to 1\), \(3 \to 1\), \(4 \to 1\), \(4 \to 2\).

H. Следи за малостью XOR

битмаски дп Комбинаторика математика разделяй и властвуй Структуры данных *3000

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) и целое число \(x\).

Найдите количество непустых подмножеств индексов этого массива \(1 \leq b_1 < b_2 < \ldots < b_k \leq n\) таких, что для всех пар \((i, j)\), где \(1 \leq i < j \leq k\), выполняется неравенство \(a_{b_i} \oplus a_{b_j} \leq x\). Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(x\) (\(1 \leq n \leq 150\,000\), \(0 \leq x < 2^{30}\)). Здесь \(n\) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i < 2^{30}\)) — сам массив.

Выходные данные

Выведите одно целое число: количество непустых подмножеств таких, что побитовое исключающее ИЛИ любых двух элементов не больше \(x\), по модулю \(998\,244\,353\).

E. Новогодние конфеты

графы Деревья дп игры кратчайшие пути математика поиск в глубину и подобное реализация теория чисел *2700

Лунный Новый год приближается, и Льдинка только что получила коробку конфет от бабушки с дедушкой! Коробка содержит \(n\) конфет. \(i\)-я конфета имеет вкус \(a_i\).

Льдинка верит, что хорошие вещи случаются парами. К сожалению, вкусы всех конфет попарно различны (все \(a_i\) различны). Льдинка хочет сделать равные вкусы хотя бы у одной пары конфет.

Поэтому она попросила бабушку с дедушкой выполнить несколько замен. Перед выполнением замен Льдинка выбирает две конфеты с номерами \(x\) и \(y\) (\(1 \le x, y \le n\), \(x \ne y\)).

За одну замену дедушка и бабушка Льдинки выбирают неотрицательное целое число \(k\) такое, что \(2^k \ge a_x\), и заменяют вкус \(x\)-й конфеты с \(a_x\) на \(2^k - a_x\) (то есть, присваивают \(a_x := 2^k - a_x\)).

Замены прекратятся только при условии, что \(a_x = a_y\). Заметьте, что другие пары равных по вкусу конфет не остановят процесс.

У Льдинки умные бабушка и дедушка, поэтому они выберут такую последовательность замен, которая минимизирует количество требуемых замен. Поскольку Льдинка любит доставлять неприятности, она хочет максимизировать минимальное требуемое количество замен, выбрав соответствующие \(x\) и \(y\). Она задаётся вопросом, как выбрать такую пару \((x, y)\), что минимальное требуемое количество замен максимально среди всех возможных пар \((x, y)\).

Так как у Льдинки не очень хорошо с математикой, она надеется, что вы поможете ей решить эту задачу.

Входные данные

Первая строка ввода содержит единственное целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество конфет.

Вторая строка ввода содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)).

Гарантируется, что все \(a_i\) различны.

Выходные данные

Выведите три целых числа \(x\), \(y\) и \(m\).

\(x\) и \(y\) являются номерами оптимальных конфет для применения замен. Ваш ответ должен удовлетворять \(1 \le x, y \le n\), \(x \ne y\).

\(m\) является минимальным количеством замен, чтобы сделать \(a_x = a_y\). Можно показать, что \(m \le 10^9\) для любой пары конфет.

Примечание

В первом тесте минимальное количество замен, требуемое, чтобы заменить конфету со вкусом \(6\) на конфету со вкусом \(9\), является \(5\). Последовательность замен следующая: \(6 \rightarrow 2 \rightarrow 0 \rightarrow 1 \rightarrow 7 \rightarrow 9\).

Во втором тесте минимальное количество замен, требуемое, чтобы заменить конфету со вкусом \(4\) на конфету со вкусом \(8\), является \(2\). Последовательность замен следующая: \(4 \rightarrow 0 \rightarrow 8\).

D. Массив и операции

дп жадные алгоритмы математика *1300

Вам дан массив \(a\) из \(n\) целых чисел, и еще одно целое число \(k\), удовлетворяющее условию \(2k \le n\).

Вы должны выполнить ровно \(k\) операций с этим массивом. В каждой операции вы должны выбрать два элемента массива (пусть эти элементы — \(a_i\) и \(a_j\); они могут быть как одинаковыми, так и различными, но это должны быть элементы на разных позициях), удалить их из массива и прибавить \(\lfloor \frac{a_i}{a_j} \rfloor\) к своему счету, где \(\lfloor \frac{x}{y} \rfloor\) обозначает максимальное целое число, не превосходящее \(\frac{x}{y}\).

Изначально ваш счет равен \(0\). После того как вы выполните ровно \(k\) операций, значения всех оставшихся элементов будут прибавлены к вашему счету.

Посчитайте минимально возможный счет, который вы можете получить.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 100\); \(0 \le k \le \lfloor \frac{n}{2} \rfloor\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — минимально возможный счет.

Примечание

Рассмотрим пример из условия.

В первом наборе входных данных можно получить результат, равный \(2\):

  1. выберем \(a_7 = 1\) и \(a_4 = 2\); счет станет \(0 + \lfloor \frac{1}{2} \rfloor = 0\), а массив станет \([1, 1, 1, 1, 3]\);
  2. выберем \(a_1 = 1\) и \(a_5 = 3\); счет станет \(0 + \lfloor \frac{1}{3} \rfloor = 0\), а массив станет \([1, 1, 1]\);
  3. выберем \(a_1 = 1\) и \(a_2 = 1\); счет станет \(0 + \lfloor \frac{1}{1} \rfloor = 1\), а массив станет \([1]\);
  4. добавим оставшийся элемент \(1\) к счету, и он станет \(2\).

Во втором наборе входных данных вне зависимости от того, как провести операцию, итоговый счет будет равен \(16\).

В третьем наборе входных данных можно получить результат, равный \(0\):

  1. выберем \(a_1 = 1\) и \(a_2 = 3\); счет станет \(0 + \lfloor \frac{1}{3} \rfloor = 0\), а массив станет \([3, 7]\);
  2. выберем \(a_1 = 3\) и \(a_2 = 7\); счет станет \(0 + \lfloor \frac{3}{7} \rfloor = 0\), а массив станет пустым;
  3. массив пуст, поэтому счет больше не меняется.

В четвертом наборе входных данных нельзя выполнить ни одной операции, поэтому итоговый счет равен сумме элементов массива: \(4 + 2 = 6\).

E. MEX и инкременты

дп жадные алгоритмы Конструктив математика реализация сортировки Структуры данных *1700

У Дмитрия есть массив из \(n\) неотрицательных целых чисел \(a_1, a_2, \dots, a_n\).

За одну операцию он может выбрать произвольный индекс \(j\) (\(1 \le j \le n\)) и увеличить значение элемента \(a_j\) на \(1\). Он может выбирать один и тот же индекс \(j\) многократно.

Для каждого \(i\) от \(0\) до \(n\) определите, сможет ли Дмитрий сделать \(\mathrm{MEX}\) массива равным ровно \(i\). Если сможет, то определите, за какое минимальное количество операций.

\(\mathrm{MEX}\) массива равен минимальному целому неотрицательному числу, которого нет в массиве. Например, \(\mathrm{MEX}\) массива \([3, 1, 0]\) равен \(2\), а массива \([3, 3, 1, 4]\)\(0\).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le n\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n + 1\) целое число — \(i\)-е число равно минимальному числу операций, за которое можно сделать \(\mathrm{MEX}\) массива равным \(i\) (\(0 \le i \le n\)), или -1, если этого сделать нельзя.

Примечание

В первом наборе входных данных примера \(n=3\):

  • чтобы получить \(\mathrm{MEX}=0\), достаточно выполнить один инкремент: \(a_1\)++;
  • чтобы получить \(\mathrm{MEX}=1\), достаточно выполнить один инкремент: \(a_2\)++;
  • \(\mathrm{MEX}=2\) для заданного массива, поэтому выполнять инкременты не надо;
  • получить \(\mathrm{MEX}=3\), выполняя инкременты, невозможно.

C. BA-строка

дп жадные алгоритмы математика Перебор реализация *1800

Заданы целое число \(k\) и строка \(s\), которая состоит только из символов 'a' (строчная латинская буква) и '*' (звездочка).

Каждая звездочка должна быть заменена на несколько (от \(0\) до \(k\) включительно) строчных латинских букв 'b'. Разные звездочки можно заменить на разные количества букв 'b'.

Результат замены называется BA-строкой.

Две строки \(a\) и \(b\) различные, если у них либо различная длина, либо существует такая позиция \(i\), что \(a_i \neq b_i\).

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).

Рассмотрите все различные BA-строки и найдите из них \(x\)-ю лексикографически наименьшую.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

Во первой строке каждого набора входных данных записаны три целых числа \(n\), \(k\) and \(x\) (\(1 \le n \le 2000\); \(0 \le k \le 2000\); \(1 \le x \le 10^{18}\)). \(n\) — это длина строка \(s\).

Во второй строке каждого набора входных данных содержится строка \(s\). Она состоит из \(n\) символов, каждый из них — либо 'a' (строчная латинская буква), либо '*' (звездочка).

Сумма \(n\) по всем наборам входных данных не превосходит \(2000\). В каждом наборе входных данных \(x\) не превосходит количество различных BA-строк. Строка \(s\) содержит хотя бы один символ 'a'.

Выходные данные

На каждый набор входных данных выведите одну строку, состоящую из символов 'b' и 'a' (строчные латинские буквы) — \(x\)-ю лексикографически наименьшую BA-строку.

Примечание

В первом наборе входных данных примера BA-строки, упорядоченные лексикографически, следующие:

  1. a
  2. ab
  3. abb
  4. abbb
  5. abbbb

Во втором наборе входных данных примера BA-строки, упорядоченные лексикографически, следующие:

  1. aa
  2. aba
  3. abba

Обратите внимание, что строка «aba» считается только один раз, хотя и есть два способа заменить звездочки на символы 'b' так, чтобы ее получить.

F. Двудольный массив

дп жадные алгоритмы *2800

Вам задана перестановка \(p\), состоящая из \(n\) чисел \(1, 2, \dots, n\) (перестановка — это массив, в котором каждый элемент от \(1\) до \(n\) встречается ровно один раз).

Назовем массив \(a\) двудольным, если следующий неориентированный граф является двудольным:

  • граф состоит из \(n\) вершин;
  • две вершины \(i\) и \(j\) соединены ребром, если \(i < j\) и \(a_i > a_j\).

Ваша задача — найти двудольный массив целых чисел \(a\) размера \(n\), такой что \(a_i = p_i\) или \(a_i = -p_i\), или сообщить, что такого массива не существует. Если существует несколько ответов, выведите любой из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — размер перестановки.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\).

Сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующей формате. Если соответствующего массива \(a\) не существует, выведите «NO» в единственной строке. Иначе выведите «YES» в первой строке и \(n\) целых чисел — массив \(a\) во второй строке.

G. Подпоследовательности повсюду

битмаски дп Комбинаторика *2400

Для последовательности строк \([t_1, t_2, \dots, t_m]\) введем функцию \(f([t_1, t_2, \dots, t_m])\), которая равна кол-ву различных строк (включая пустую строку), которые являются подпоследовательностями хотя бы одной строки \(t_i\). \(f([]) = 0\) (то есть значение такой функции для пустой последовательности строк равно \(0\)).

Вам задана последовательность строк \([s_1, s_2, \dots, s_n]\). Каждая строка в этой последовательности состоит из строчных латинских букв и является отсортированной (то есть каждая строка начинается с нескольких (возможно, ни одного) символов a, затем идут несколько (возможно, ноль) символов b, ..., в конце идут несколько (возможно, ноль) символов z).

Для каждой из \(2^n\) подпоследовательностей \([s_1, s_2, \dots, s_n]\), посчитайте значение функции \(f\) по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 23\)) — количество строк.

Затем следуют \(n\) строк. \(i\)-я из них содержит строку \(s_i\) (\(1 \le |s_i| \le 2 \cdot 10^4\)), состоящую из строчных латинских букв. Каждая строка \(s_i\) является отсортированной.

Выходные данные

Так как выводить \(2^{23}\) чисел довольно долго, представьте ответ следующим образом:

Для каждой из \(2^n\) подпоследовательностей (мы обозначим подпоследовательность как \([s_{i_1}, s_{i_2}, \dots, s_{i_k}]\)) посчитайте \(f([s_{i_1}, s_{i_2}, \dots, s_{i_k}])\), возьмите это значение по модулю \(998244353\), а затем умножьте на \(k \cdot (i_1 + i_2 + \dots + i_k)\). Выведите XOR всех \(2^n\) чисел, которые у вас получатся.

Индексы \(i_1, i_2, \dots, i_k\) в описании подпоследовательности заданы в \(1\)-индексации (то есть они от \(1\) до \(n\)).

E. Новая школа

Бинарный поиск дп жадные алгоритмы реализация сортировки Структуры данных *2300

Вы решили открыть новую школу. Вы уже нашли \(n\) преподавателей и \(m\) групп учеников. Группа учеников \(i\) состоит из \(k_i \geq 2\) учеников. Вы знаете возраста всех преподавателей и всех учеников. Возраста преподавателей равны \(a_1, a_2, \ldots, a_n\), а возраста учеников в \(i\)-й группе равны \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, k_i}\).

Чтобы начать занятия, осталось лишь назначить каждой группе учеников преподавателя. При этом должны выполняться следующие условия:

  • Каждой группе учеников назначен ровно один из преподавателей.
  • Каждому преподавателю назначено не более \(1\) группы учеников.
  • Для каждой группы, cреднее арифметическое возрастов учеников группы не превосходит возраста назначенного этой группе преподавателя.

Средним арифметическим множества \(x_1, x_2, \ldots, x_k\) из \(k\) чисел является значение \(\frac{x_1 + x_2 + \ldots + x_k}{k}\).

Недавно Вы узнали, что один из учеников решил отказаться от обучения в Вашей школе. После его отказа размер одной из групп учеников уменьшится на \(1\), все остальные группы останутся без изменений.

Вы не знаете, кто именно решил отказаться от обучения. Для каждого ученика определите, сможете ли Вы начать занятия в случае его отказа.

Обратите внимание, что не гарантируется, что до отказа ученика от обучения, было возможно начать занятия.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано два числа \(n\) и \(m\) (\(1 \leq m \leq n \leq 10^5\)) — количество преподавателей и количество групп учеников.

Во второй строке дано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^5\)) — возраста преподавателей.

В следующих \(2m\) строках содержатся описания групп.

В первой строке описания группы дано одно число \(k_i\) (\(2 \leq k_i \leq 10^5\)) — количество учеников в группе.

Во второй строке описания группы дано \(k_i\) целых чисел \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, k_i}\) (\(1 \leq b_{i, j} \leq 10^5\)) — возраста учеников в этой группе.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\), и что сумма \(k_1 + k_2 + \ldots + k_m\) всех наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку длины \(k_1 + k_2 + \ldots + k_m\), состоящую из символов \(0\) и \(1\). \(i\)-й символ этой строки должен быть равен \(1\), если в случае отказа \(i\)-го ученика можно будет начать занятия, и равен \(0\) иначе.

Ученики пронумерованы целыми числами от \(1\) до \(k_1 + k_2 + \ldots + k_m\) в том порядке, в котором они встречаются во входных данных. Таким образом, ученики \(1\)-й группы имеют номера \(1\), \(2\), \(\ldots\), \(k_1\), ученики \(2\)-й группы имеют номера \(k_1 + 1\), \(k_1 + 2\), \(\ldots\), \(k_1 + k_2\) и так далее.

Примечание

В первом наборе входных данных есть одна группа учеников с средним возрастом \(\frac{25+16+37}{3}=26\) и один преподаватель с возрастом \(30\). Существует единственный способ назначить каждой группе учеников преподавателя и начать занятия.

Если ученик возраста \(16\) откажется от обучения, среднее арифметическое возрастов в группе станет равно \(\frac{25+37}{2}=31\), и не будет существовать способа назначить каждой группе учеников преподавателя.

Во втором наборе входных данных невозможно начать занятия изначально. Но если \(3\)-й ученик возраста \(111\) откажется от обучения, средние возраста учеников в группах станут равны \(\frac{4 + 5}{2}=4.5\) и \(\frac{11+11}{2} = 11\) соответственно. Тогда можно назначить первой группе первого преподавателя, а второй группе — третьего преподавателя.

G. Взвешенные возрастающие подпоследовательности

дп математика Структуры данных *3200

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\).

Последовательность индексов \(i_1 < i_2 < \ldots < i_k\) длины \(k\) задаёт подпоследовательность \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) длины \(k\) последовательности \(a\).

Подпоследовательность \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) длины \(k\) последовательности \(a\) называется возрастающей, если \(a_{i_j} < a_{i_{j+1}}\) для всех \(1 \leq j < k\).

Назовём весом возрастающей подпоследовательности \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\) длины \(k\) последовательности \(a\) количество таких \(1 \leq j \leq k\), для которых существует \(i_k < x \leq n\), такой что \(a_x > a_{i_j}\).

Например, если \(a = [6, 4, 8, 6, 5]\), то последовательность индексов \(i = [2, 4]\) задаёт возрастающую подпоследовательность \([4, 6]\) последовательности \(a\). Вес этой возрастающей подпоследовательности будет равен \(1\), так как для \(j = 1\) существует \(x = 5\) для которого \(a_5 = 5 > a_{i_1} = 4\), а для \(j = 2\) такого \(x\) не существует.

Найдите сумму весов всех возрастающих подпоследовательностей \(a\) по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина последовательности \(a\).

Во второй строке дано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — последовательность \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: сумму весов всех возрастающих подпоследовательностей \(a\) по модулю \(10^9+7\).

Примечание

В первом наборе входных данных следующие возрастающие подпоследовательности \(a\) имеют ненулевой вес:

  • \([a_1] = [6]\) имеет вес \(1\).
  • \([a_2] = [4]\) имеет вес \(1\).
  • \([a_2, a_3] = [4, 8]\) имеет вес \(1\).
  • \([a_2, a_4] = [4, 6]\) имеет вес \(1\).
Сумма весов всех возрастающих подпоследовательностей равна \(4\).

Во втором тестовом случае существует \(7\) возрастающих подпоследовательностей \(a\) ненулевого веса: \(3\) веса \(1\), \(3\) веса \(2\) и \(1\) веса \(3\). Сумма весов равна \(12\).

E. Маша-забываша

дп Конструктив Перебор реализация Строки хэши *2000

Маша познакомилась с новым другом и узнала его номер телефона — \(s\). Она хочет как можно скорее запомнить его. Номер телефона — это строка длины \(m\), которая состоит из цифр от \(0\) до \(9\). Допустимо, что телефон начинается с 0.

Маша уже знает \(n\) номеров телефонов (все номера имеют одинаковую длину \(m\)). Ей будет проще запомнить новый номер, если строку \(s\) представить как отрезки уже известных ей номеров. Каждый такой отрезок должен быть длины не менее \(2\), иначе отрезков будет слишком много, и Маша запутается.

Например, Маше нужно запомнить номер: \(s = \) «12345678» и она уже знает \(n = 4\) номера: «12340219», «20215601», «56782022», «12300678». Можно представить \(s\) как \(3\) отрезка: «1234» из первого номера, «56» из второго номера и «78» из третьего номера. Есть и другие способы представления \(s\).

Маша обратилась к вам за помощью, она просит вас разбить строку \(s\) на отрезки длины \(2\) или более из уже известных ей номеров. Если существует несколько возможных ответов, выведите любой из них.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором в тесте записана пустая строка. Далее идёт строка, которая содержит целые числа \(n\) и \(m\) (\(1 \le n, m \le 10^3\)) — количество номеров, которые знает Маша и количество цифр в каждом номере. Затем следуют \(n\) строк, \(i\)-я из которых описывает \(i\)-й номер, который знает Маша. Следующая строка содержит номер телефона её нового друга \(s\).

Среди заданных \(n+1\) телефонов могут быть дубликаты (одинаковые телефоны).

Гарантируется, что сумма значений \(n \cdot m\) (\(n\) умножить на \(m\)) по всем наборам входных данных в тесте не превосходит \(10^6\).

Выходные данные

Вам нужно вывести ответы на \(t\) запросов. В первой строке ответа должно содержаться одно число \(k\), соответствующее количеству отрезков, на которые вы разбили номер телефона \(s\). Выведите -1, если такого разбиения получить нельзя.

В случае положительного ответа далее должны следовать \(k\) строк, содержащие тройки чисел \(l, r, i\). Такая тройка обозначает, что очередные \(r-l+1\) цифр номера \(s\) равны отрезку (подстроке) с границами \([l, r]\) телефона под номером \(i\). И телефоны и цифры в них нумеруются от \(1\). Обратите внимание, что \(r-l+1 \ge 2\) для всех \(k\) строк.

Примечание

Первый тестовый случай соответствует примеру из условия.

Во втором случае невозможно представить отрезками известных номеров длины 2 или более.

В третьем случае можно получить отрезки «12» и «21» из первого номера телефона.

C. Оптимизация дорог

дп *1700

Правительство Марса заинтересовано не только в оптимизации космических перелетов, но и в улучшении дорожной системы планеты.

Одна из самых важных магистралей Марса соединяет Олимп-Сити и Кцолоп, столицу Кидонии. В рамках этой задачи будем рассматривать только путь от Кцолопа до Олимп-Сити, но не обратный путь (от Олимп-Сити до Кцолопа).

Дорога от Кцолопа до Олимп-Сити имеет длину \(\ell\) километров. Каждая точка дороги имеет координату \(x\) (\(0 \le x \le \ell\)) — расстояние до Кцолопа в километрах. Таким образом, Кцолоп находится в точке с координатой \(0\), а Олимп-Сити — в точке с координатой \(\ell\).

На дороге стоит \(n\) дорожных знаков, на \(i\)-м из которых написано ограничение скорости \(a_i\). Это ограничение означает, что следующий километр следует проехать за \(a_i\) минут и действует до тех пор, пока по пути не встретится следующий дорожный знак. Один из дорожных знаков стоит в самом начале дороги (т. е. в точке с координатой \(0\)) и задает начальную скорость.

Зная расположение всех дорожных знаков, нетрудно вычислить время поездки от Кцолопа до Олимп-Сити. Рассмотрим пример:

В данном случае необходимо проехать первые три километра за пять минут каждый, затем — один километр за восемь минут, затем — еще четыре километра за три минуты каждый и, наконец, последние два километра за шесть минут каждый. Итого время в пути составит \(3\cdot 5 + 1\cdot 8 + 4\cdot 3 + 2\cdot 6 = 47\) минут.

С целью оптимизации движения правительство Марса решило убрать не более \(k\) дорожных знаков. При этом знак в начале дороги убирать нельзя, иначе на начальном отрезке пути не будет никаких ограничений. Убирать знаки необходимо таким образом, чтобы минимизировать время в пути от Кцолопа до Олимп-Сити.

В Кидонии сосредоточены крупные промышленные предприятия Марса, поэтому оптимизация дороги до Олимп-Сити является приоритетной задачей. По этой причине правительство Марса поручило Вам решить эту задачу и выяснить, какие знаки необходимо убрать.

Входные данные

В первой строке входных данных находится три целых числа \(n\), \(\ell\) и \(k\) (\(1 \le n \le 500\), \(1 \le \ell \le 10^5\), \(0 \le k \le n-1\)) — количество знаков на дороге от Кцолопа до Олимп-Сити, расстояние между этими городами и максимальное количество знаков, которые разрешается убрать.

Во второй строке входных данных находится \(n\) целых чисел \(d_i\) (\(d_1 = 0\), \(d_i < d_{i+1}\), \(0 \le d_i \le \ell - 1\)) — координаты знаков.

В третьей строке входных данных находится \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^4\)) — ограничения скорости.

Выходные данные

Выведите одно целое число — минимально возможное время в пути от Кцолопа до Олимп-Сити (в минутах), если убрать не более \(k\) дорожных знаков.

Примечание

В первом примере знаки удалять нельзя, и ответ равен \(47\), как сказано в условии задачи выше.

Во втором примере следует удалить второй и четвертый знаки. Тогда придется проехать первые четыре километра за \(4\cdot5 = 20\) минут, а последние шесть километров – за \(6\cdot3 = 18\) минут. Итого получаем \(4\cdot5 + 6\cdot3 = 38\) минут.

E1. Обновление котов (простая версия)

графы Деревья дп Перебор поиск в глубину и подобное разделяй и властвуй Структуры данных *2500

Это простая версия задачи. Единственным различием между простой и сложной версиями задачи является наличие запросов удаления: они присутствуют лишь в сложной версии.

Компания «Interplanetary Software, Inc.» вместе с компанией «Robots of Cydonia, Ltd.» разработала и выпустила роботов-котов. Эти электронные питомцы умеют мяукать, ловить мышей и всячески развлекать хозяина.

Недавно разработчики из «Interplanetary Software, Inc.» решили выпустить обновление программного обеспечения для этих роботов. После обновления коты должны уметь решать задачи, связанные со скобочными последовательностями. Одна из таких задач приведена ниже.

Сначала немного погрузимся в теорию скобочных последовательностей. Будем рассматривать строки, состоящие из символов «(», «)» и «.». Назовем строку правильной скобочной последовательностью (ПСП), если из нее можно получить пустую строку путем операций удаления одиночных символов «.» либо подряд идущих символов «()». Например, строка «(()(.))» является ПСП, т. к. с ней можно проделать следующую цепочку удалений:

«(()(.))» \(\rightarrow\) «(()())» \(\rightarrow\) «(())» \(\rightarrow\) «()» \(\rightarrow\) «».

Мы получили пустую строку, а это значит, что исходная строка является ПСП. В то же время, строка «)(» не является ПСП, поскольку к ней нельзя применить описанные выше операции удаления.

Будем называть ПСП простой, если эта ПСП непуста, не начинается на «.» и не заканчивается на «.».

Также будем считать, что подстрока строки \(s\) — это ее последовательный подотрезок. В частности, \(s[l\dots r] = s_ls_{l+1}\dots s_r\), где \(s_i\) — \(i\)-й символ строки \(s\).

Теперь перейдем к формулировке задачи. Вам дана строка \(s\), изначально состоящая из символов «(» и «)». Необходимо отвечать на запросы следующего вида.

Даны индексы \(l\) и \(r\) (\(1 \le l < r \le n\)), причем гарантируется, что подстрока \(s[l\dots r]\) — простая ПСП. Требуется найти количество подстрок в \(s[l\dots r]\), которые являются простыми ПСП. Иными словами, необходимо найти количество пар индексов \(i\), \(j\) таких, что \(l \le i < j \le r\) и \(s[i\dots j]\) является простой ПСП.

Вы работаете в «Interplanetary Software, Inc.» и Вам поручили непростое задание: научить котов после обновления решать описанную выше задачу.

Обратите внимание, что в данной версии задачи в строке не может появиться символ «.». Он нужен лишь для сложной версии задачи.

Входные данные

В первой строке входных данных находится два целых числа \(n\) и \(q\) (\(2 \le n \le 3\cdot10^5\), \(1 \le q \le 3\cdot10^5\)) — длина строки и количество запросов.

Во второй строке находится строка \(s\), состоящая из \(n\) символов «(» и «)».

В каждой из следующих \(q\) строк находится по три целых числа \(t\), \(l\) и \(r\) (\(t = 2\), \(1 \le l < r \le n\)) — запросы, которые требуется обработать. Гарантируется, что все запросы корректны и удовлетворяют условию задачи. Обратите внимание, что в данной задаче число \(t\) не используется и всегда равно двум. Оно необходимо для сложной версии задачи.

Выходные данные

Для каждого запроса выведите по одному целому числу в отдельной строке — количество подстрок, которые являются простыми ПСП. Ответы требуется выводить в том же, порядке, в котором приведены сами запросы.

Примечание

Рассмотрим пример из условия.

Ответ на первый запрос равен \(3\), поскольку существует всего три требуемых подстроки: \(s[3\dots6]\), \(s[3\dots4]\) и \(s[5\dots6]\).

Ответ на второй запрос равен \(4\). Подходящие подстроки — \(s[3\dots6]\), \(s[3\dots4]\), \(s[5\dots6]\) и \(s[2\dots7]\).

Ответ на третий запрос равен \(1\). Подходящая подстрока — \(s[8\dots9]\).

Ответ на четвертый запрос равен \(6\). Подходящие подстроки — \(s[3\dots6]\), \(s[3\dots4]\), \(s[5\dots6]\), \(s[2\dots7]\), \(s[8\dots9]\) и \(s[2\dots9]\).

C. Монстры и заклинания

Бинарный поиск дп жадные алгоритмы математика реализация Структуры данных *1700

Монокарп снова играет в компьютерную игру. Он ученик мага, поэтому знает только одно заклинание. К счастью, это заклинание может наносить урон монстрам.

Уровень, на котором он сейчас, содержит \(n\) монстров. \(i\)-й из них появляется через \(k_i\) секунд с начала уровня и имеет \(h_i\) очков здоровья. Дополнительно есть ограничение \(h_i \le k_i\) для всех \(1 \le i \le n\). Все \(k_i\) различны.

Монокарп может использовать заклинание в моменты времени, которые являются положительным целым количеством секунд с начала уровня: \(1, 2, 3, \dots\) Урон от заклинания считается следующим образом. Если он не использовал заклинание в предыдущую секунду, то урон равен \(1\). Иначе, пусть урон в прошлую секунду был равен \(x\). Тогда он может выбрать, чтобы урон был либо \(x + 1\), либо \(1\). Заклинание использует ману: использование заклинания с уроном \(x\) использует \(x\) маны. Мана не восстанавливается.

Чтобы убить \(i\)-го монстра, Монокарп должен использовать заклинание с уроном хотя бы \(h_i\) ровно в тот момент, когда появляется монстр, что равно \(k_i\).

Обратите внимание, что Монокарп может использовать заклинание и тогда, когда в текущую секунду монстра нет.

Количество маны, необходимое для использования всех заклинаний, — это сумма маны по всем использованным заклинаниям. Посчитайте наименьшее количество маны, которое потребуется Монокарпу, чтобы убить всех монстров.

Можно показать, что всегда можно убить всех монстров в рамках ограничений задачи.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 100\)) — количество монстров на уровне.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(k_1 < k_2 < \dots < k_n\) (\(1 \le k_i \le 10^9\)) — количество секунд с начала уровня до появления \(i\)-го монстра. Все \(k_i\) различны, \(k_i\) заданы в порядке возрастания.

В третьей строке записаны \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(1 \le h_i \le k_i \le 10^9\)) — здоровье \(i\)-го монстра.

Сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее количество маны, которое потребуется Монокарпу, чтобы убить всех монстров.

Примечание

В первом наборе входных данных Монокарп может использовать заклинание через \(3, 4, 5\) и \(6\) секунд с начала уровня с уроном \(1, 2, 3\) и \(4\), соответственно. Урон в \(6\) секунду равен \(4\), что действительно больше или равно здоровью монстра, который появляется.

Во втором наборе входных данных Монокарп может использовать заклинание через \(3, 4\) и \(5\) секунд с начала уровня с уроном \(1, 2\) и \(3\), соответственно.

В третьем наборе входных данных Монокарп может использовать заклинание через \(4, 5, 7, 8\) и \(9\) секунд с начала уровня с уроном \(1, 2, 1, 1\) и \(2\), соответственно.

F. Случайный код

дп Комбинаторика математика Теория вероятностей теория чисел *2800

Дан массив целых чисел \(a_0, a_1, \dots, a_{n - 1}\) и целое число \(k\). Вы выполняете следующий код:

long long ans = 0; // 64-битная знаковая целочисленная переменная, изначально равная 0
for(int i = 1; i <= k; i++)
{
int idx = rnd.next(0, n - 1); // генерирует случайное целое число от 0 до n - 1 включительно
// каждое целое число от 0 до n - 1 выбирается с одинаковой вероятностью
ans += a[idx];
a[idx] -= (a[idx] % i);
}

Ваша задача — посчитать матожидание значения переменной ans после выполнения этого кода.

Обратите внимание, что входные данные генерируется специальным образом (подробнее в секции «Входные данные»).

Входные данные

В единственной строке заданы шесть целых чисел \(n\), \(a_0\), \(x\), \(y\), \(k\) и \(M\) (\(1 \le n \le 10^7\); \(1 \le a_0, x, y < M \le 998244353\); \(1 \le k \le 17\)).

Массив \(a\) строится следующим образом:

  • \(a_0\) задано во входных данных;
  • для каждого \(i\) от \(1\) до \(n - 1\) значение \(a_i\) считается как \(a_i = (a_{i - 1} \cdot x + y) \bmod M\).
Выходные данные

Пусть матожидание значения переменной ans после выполнения кода равно \(E\). Можно показать, что \(E \cdot n^k\) — целое число. Выведите остаток от деления этого числа на \(998244353\).

Примечание

Массив в первом примере — \([10, 35, 22]\). Во втором примере — \([15363, 1418543]\).

D. Не добавлять

дп математика Перебор теория чисел *1900

Вам дан массив \(a_1, a_2, \dots, a_n\) из \(n\) различных целых чисел. Вы можете выполнять следующую операцию:

  • Выберите два элемента \(a_i\) и \(a_j\) (\(i \ne j\)) такие, что \(\gcd(a_i, a_j)\) не встречается среди элементов массива, и добавьте \(\gcd(a_i, a_j)\) в конец массива. Здесь \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Обратите внимание, что после каждой операции массив меняется, и последующие операции выполняются с новым массивом.

Какое максимальное число раз вы можете выполнить операцию?

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^6\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^6\)). Все \(a_i\) различны.

Выходные данные

Выведите одно целое число — максимальное количество операций, которое можно выполнить с данным массивом.

Примечание

В первом примере один из способов выполнить максимальное число операций такой:

  • Выбрать \(i = 1, j= 5\) и добавить \(\gcd(a_1, a_5) = \gcd(4, 30) = 2\) к массиву.
  • Выбрать \(i = 2, j= 4\) и добавить \(\gcd(a_2, a_4) = \gcd(20, 25) = 5\) к массиву.
  • Выбрать \(i = 2, j= 5\) и добавить \(\gcd(a_2, a_5) = \gcd(20, 30) = 10\) к массиву.

Можно показать, что не существует способа выполнить больше \(3\) операций с массивом.

Во втором примере можно добавить \(3\), затем \(1\), затем \(5\) и \(2\).

E. Не спасаться

дп кратчайшие пути реализация Структуры данных *2200

Майора Рама преследует его заклятый враг Рагхав. Рам должен добраться до вершины здания, чтобы сбежать на вертолете, однако здание горит. Рам должен выбрать оптимальный путь, чтобы добраться до вершины здания, потеряв минимальное количество здоровья.

Здание состоит из \(n\) этажей, на каждом этаже \(m\) комнат. За \((i, j)\) обозначим \(j\)-ю комнату на \(i\)-м этаже. В здании \(k\) лестниц. \(i\)-я лестница позволяет Раму подняться из комнаты \((a_i, b_i)\) в \((c_i, d_i)\), но не в другом направлении. За проход по \(i\)-й лестнице Рам получает \(h_i\) очков здоровья. Гарантируется, что для всех лестниц \(a_i < c_i\).

Если Рам находится на \(i\)-м этаже, то он может двигаться влево или вправо. Путешествовать по этажам, однако, сложно, поэтому если Рам переходит от комнаты \((i, j)\) к \((i, k)\), он теряет \(|j-k| \cdot x_i\) очков здоровья.

Изначально Рам находится в комнате \((1, 1)\), а вертолет ожидает его в \((n, m)\). Какое минимальное количество очков здоровья Рам может потерять, если выберет оптимальный путь? Обратите внимание, что этот ответ может быть отрицательным (в этом случае он наберет очки здоровья). Выведите «NO ESCAPE», если Рам никак не может добраться к вертолету.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит \(3\) целых числа \(n, m, k\) (\(2 \leq n, m \leq 10^5\); \(1 \leq k \leq 10^5\)) — количество этажей, количество комнат на каждом этаже, и количество лестниц, соответственно.

Вторая строка содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \leq x_i \leq 10^6\)).

Следующие \(k\) строк содержат описания лестниц. Лестница \(i\) описана пятью целыми числами \(a_i, b_i, c_i, d_i, h_i\) (\(1 \leq a_i < c_i \leq n\); \(1 \leq b_i, d_i \leq m\); \(1 \leq h_i \leq 10^6\)) — номера комнат, которые она соединяет, и бонус к здоровью при использовании лестницы.

Гарантируется, что для всех лестниц выполняется \(a_i < c_i\), и между любыми двумя комнатами существует не более чем одна лестница.

Гарантируется, что сумма значений \(n\), сумма значений \(m\), сумма значений \(k\) по всем наборам входных данных не превосходят \(10^5\).

Выходные данные

Выведите минимальное число очков здоровья, которое Рам может потерять на пути от \((1, 1)\) до \((n, m)\). Если Рам не может добраться до вертолета, выведите «NO ESCAPE» (заглавными буквами без кавычек).

Примечание

Рисунок в условии демонстрирует первый пример из условия. Есть только \(2\) возможных пути к \((n, m)\):

  • Рам идет в \((1, 3)\), поднимается по лестнице в \((3, 3)\), идет в \((3, 2)\), поднимается по лестнице в \((5, 1)\), идет до \((5, 3)\), откуда улетает на вертолете. Потери здоровья равны \(\) \begin{align*} &\mathrel{\phantom{=}} x_1 \cdot |1-3| - h_1 + x_3 \cdot |3-2| - h_3 + x_5 \cdot |1-3| \\ &= 5 \cdot 2 - 4 + 8 \cdot 1 - 6 + 4 \cdot 2 \\ &= 16. \end{align*} \(\)
  • Рам идет в \((1, 3)\), поднимается по лестнице в \((3, 3)\), идет в \((3, 1)\), поднимается по лестнице в \((5, 2)\), идет до \((5, 3)\) , откуда улетает на вертолете. Потери здоровья равны \(\) \begin{align*} &\mathrel{\phantom{=}} x_1 \cdot |1-3| - h_1 + x_3 \cdot |3-1| - h_2 + a_5 \cdot |2-3| \\ &= 5 \cdot 2 - 4 + 8 \cdot 2 - 5 + 4 \cdot 1 \\ &= 21. \end{align*} \(\)
Минимальная потеря здоровья равна \(16\).

Во втором примере нет пути в \((n, m)\).

В третьем примере Рам идет в \((1, 3)\), а затем поднимается по лестнице в \((5, 3)\). Он теряет \(5 \cdot 2\) очка здоровья и затем получает \(h_1 = 100\) очков. Поэтому его потери равны \(10-100=-90\) (отрицательное число означает, что он улучшил здоровье).

D1. Игра на сумму (Легкая версия)

дп игры Комбинаторика математика *2100

Это легкая версия задачи. Разница заключается в ограничениях на \(n\), \(m\) и \(t\). Делать взломы можно только в том случае, если решены обе задачи.

Алисе и Бобу даются числа \(n\), \(m\) и \(k\), и они играют в следующую игру:

В игре есть счет, который Алиса пытается максимизировать, а Боб старается минимизировать. Первоначально счет равен \(0\). Игра состоит из \(n\) ходов. Каждый ход Алиса выбирает число от \(0\) до \(k\) (необязательно целое), которое Боб либо прибавляет, либо вычитает из счета игры. Но на протяжении всей игры Боб должен прибавить не менее \(m\) из \(n\) ходов.

Боб узнает, какое число выбрала Алиса, прежде чем решит, прибавить или вычесть это число из счета, а Алиса узнает, прибавил Боб или вычел число для предыдущего хода, прежде чем выбрать число для текущего хода (кроме первого хода, поскольку предыдущего хода не было).

Если Алиса и Боб будут играть оптимально, каков будет окончательный счет игры?

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество тестов. Описание тестовых примеров следует ниже.

Каждый тестовый пример состоит из одной строки, содержащей три целых числа: \(n\), \(m\) и \(k\) (\(1 \le m \le n \le 2000, 0 \le k < 10^9 + 7\)) — количество ходов, сколько из этих ходов Боб должен прибавить, и наибольшее число, которое Алиса может выбрать соответственно.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(2000\).

Выходные данные

Для каждого тестового примера выведите одно число — результат оптимальной игры по модулю \(10^9 + 7\).

Формально пусть \(M = 10^9 + 7\). Можно показать, что ответ может быть выражен в виде неприводимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом тестовом примере вся игра имеет \(3\) хода, и, поскольку \(m = 3\), Боб должен добавить в каждый из них. Следовательно, Алиса должна каждый ход выбирать самое большое число, которое она может, а именно \(k = 2\).

В третьем тестовом примере у Алисы есть стратегия, гарантирующая оценку \(\frac{75}{8} \equiv 375000012 \pmod{10^9 + 7}\).

В четвертом тестовом примере у Алисы есть стратегия, гарантирующая оценку \(\frac{45}{2} \equiv 500000026 \pmod{10^9 + 7}\).

D2. Игра на сумму (Сложная версия)

дп игры Комбинаторика математика *2400

Это сложная версия задачи. Разница заключается в ограничениях на \(n\), \(m\) и \(t\). Делать взломы можно только в том случае, если решены обе задачи.

Алисе и Бобу даются числа \(n\), \(m\) и \(k\), и они играют в следующую игру:

В игре есть счет, который Алиса пытается максимизировать, а Боб старается минимизировать. Первоначально счет равен \(0\). Игра состоит из \(n\) ходов. Каждый ход Алиса выбирает число от \(0\) до \(k\) (необязательно целое), которое Боб либо прибавляет, либо вычитает из счета игры. Но на протяжении всей игры Боб должен прибавить не менее \(m\) из \(n\) ходов.

Боб узнает, какое число выбрала Алиса, прежде чем решит, прибавить или вычесть это число из счета, а Алиса узнает, прибавил Боб или вычел число для предыдущего хода, прежде чем выбрать число для текущего хода (кроме первого хода, поскольку предыдущего хода не было).

Если Алиса и Боб будут играть оптимально, каков будет окончательный счет игры?

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество тестов. Описание тестовых примеров следует ниже.

Каждый тестовый пример состоит из одной строки, содержащей три целых числа: \(n\), \(m\) и \(k\) (\(1 \le m \le n \le 10^6, 0 \le k < 10^9 + 7\)) — количество ходов, сколько из этих ходов Боб должен прибавить, и наибольшее число, которое Алиса может выбрать соответственно.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(10^6\).

Выходные данные

Для каждого тестового примера выведите одно число — результат оптимальной игры по модулю \(10^9 + 7\).

Формально пусть \(M = 10^9 + 7\). Можно показать, что ответ может быть выражен в виде неприводимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом тестовом примере вся игра имеет \(3\) хода, и, поскольку \(m = 3\), Боб должен добавить в каждый из них. Следовательно, Алиса должна каждый ход выбирать самое большое число, которое она может, а именно \(k = 2\).

В третьем тестовом примере у Алисы есть стратегия, гарантирующая оценку \(\frac{75}{8} \equiv 375000012 \pmod{10^9 + 7}\).

В четвертом тестовом примере у Алисы есть стратегия, гарантирующая оценку \(\frac{45}{2} \equiv 500000026 \pmod{10^9 + 7}\).

A. Подстрока и подпоследовательность

дп *1700

Как-то раз Поликарп раздобыл две непустые строки s и t, состоящие из строчных букв латинского алфавита. Поликарп неплохо разбирается в строках, поэтому он сразу задался вопросом: сколько существует различных пар «x y» таких, что x — подстрока строки s, y — подпоследовательность строки t, а содержимое x и y одинаково. Две пары считаются различными, если в них различаются подстроки строки s или различаются подпоследовательности строки t. Прочтите условие до конца для точного понимания различности подстрок и подпоследовательностей в данной задаче.

Длиной строки s называется количество символов в ней. Пусть длина строки s обозначается |s|, тогда можно записать строку s в виде s = s1s2... s|s|.

Непустую строку x = s[a... b] = sasa + 1... sb (1 ≤ a ≤ b ≤ |s|) будем называть подстрокой строки s. Например, «code» и «force» — подстроки «codeforces», а «coders» — нет. Две подстроки s[a... b] и s[c... d] считаются различными, если a ≠ c или b ≠ d. Например, если scodeforces», то s[2...2] и s[6...6] — различны, несмотря на то, что их содержимое одинаково.

Непустую строку y = s[p1p2... p|y|] = sp1sp2... sp|y| (1 ≤ p1 < p2 < ... < p|y| ≤ |s|) будем называть подпоследовательностью строки s. Например, «coders» — подпоследовательность «codeforces». Две подпоследовательности u = s[p1p2... p|u|] и v = s[q1q2... q|v|] считаются различными, если различны последовательности p и q.

Входные данные

Входные данные состоят из двух строк. Первая из них содержит s (1 ≤ |s| ≤ 5000), а вторая — t (1 ≤ |t| ≤ 5000). Обе строки состоят из строчных латинских букв.

Выходные данные

Выведите единственное число — количество различных пар «x y» таких, что x — подстрока строки s, y — подпоследовательность строки t, а содержимое x и y одинаково. Так как ответ может быть достаточно большим, выведите его остаток при делении на 1000000007 (109 + 7).

Примечание

Выпишем все пары «x y», которые входят в ответ в первом тестовом примере: «s[1...1] t[1]», «s[2...2] t[1]», «s[1...1] t[2]», «s[2...2] t[2]», «s[1...2] t[1 2]».

E. Электронное правительство

Деревья дп поиск в глубину и подобное Строки Структуры данных *2800

В рамках проекта «Электронное правительство» лучшим программистам страны Распиляндии поручили создание системы автоматизации сбора статистики и анализа прессы.

Известно, что членами правительства Распиляндии может стать любой из k граждан. Их фамилии — a1, a2, ..., ak. Все фамилии различны. Изначально в правительство входят все k граждан из этого списка. Система должна поддерживать следующие возможности:

  • Включить гражданина ai в состав правительства.
  • Исключить гражданина ai из состава правительства.
  • По заданному тексту статьи определить, насколько она политизирована. Для этого, для каждого действующего члена правительства, вычисляется количество раз, которое его фамилия встречается в тексте как подстрока. Считаются все вхождения, в том числе и пересекающиеся. Степень политизированности текста определяется как сумма этих количеств по всем действующим членам правительства.

Реализуйте эту систему.

Входные данные

В первой строке через пробел записаны числа n и k (1 ≤ n, k ≤ 105) — количество запросов к системе и количество потенциальных членов правительства.

В следующих k строках заданы фамилии a1, a2, ..., ak, по одной на строку. Все фамилии попарно различны.

В следующих n строках заданы запросы к системе, по одному на строку. Каждый запрос состоит из символа, определяющего операцию, и аргумента операции, записанных подряд без пробела.

Операции «включить в правительство» соответствует символ «+», операции «исключить» — «-». Аргументом этих операций является целое число от 1 до k — номер гражданина, которого она затрагивает. Любой гражданин может быть включен и исключен из правительства произвольное количество раз в любом порядке. Включение в правительство гражданина, который в него уже входит, или исключение гражданина, который и так не входил, ничего не меняет.

Операции «подсчитать политизированность» соответствует символ «?». Её аргументом является текст.

Все строки, как фамилии, так и тексты, являются непустыми последовательностями строчных букв латинского алфавита. Суммарная длина всех фамилий не превышает 106, суммарная длина всех текстов не превышает 106.

Выходные данные

Для каждой операции «подсчитать политизированность» выведите на отдельной строке степень политизированности заданного в ней текста. Для остальных операций ничего выводить не нужно.

C. Раскрась середину

дп жадные алгоритмы сортировки *2200

Дано \(n\) элементов, пронумерованных от \(1\) до \(n\). Элемент \(i\) имеет значение \(a_i\) и цвет \(c_i\). Изначально \(c_i = 0\) для всех \(i\).

Можно выполнять следующую операцию:

  • Выбрать три элемента \(i\), \(j\) и \(k\) (\(1 \leq i < j < k \leq n\)) такие, что \(c_i\), \(c_j\) и \(c_k\) равны \(0\) и \(a_i = a_k\), и затем присвоить \(c_j = 1\).

Найдите максимальное значение \(\sum\limits_{i=1}^n{c_i}\), которое можно получить, выполнив описанную операцию некоторое (любое) количество раз.

Входные данные

Первая строка содержит целое число \(n\) (\(3 \leq n \leq 2 \cdot 10^5\)) — количество элементов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)) — где \(a_i\) равно значению \(i\)-го элемента.

Выходные данные

Напечатайте одно целое число — максимальное значение \(\sum\limits_{i=1}^n{c_i}\), которое можно получить, выполнив описанную операцию некоторое (любое) количество раз.

Примечание

В первом примере одним из возможных решений является выполнение следующих операций:

D. Переверни отрезки

дп жадные алгоритмы Конструктив теория чисел *2400

Дан массив \(a\), состоящий из \(n\) целых чисел, и множество \(B\), состоящее из \(m\) положительных целых чисел таких, что \(1 \leq b_i \leq \lfloor \frac{n}{2} \rfloor\) при \(1\le i\le m\), где \(b_i\)\(i\)-й элемент \(B\).

Вы можете выполнять следующую операцию с \(a\):

  1. Выбрать некоторый \(x\) такой, что \(x\) содержится в \(B\).
  2. Выбрать подмассив \(a\) размера \(x\) и умножить на \(-1\) каждый элемент этого подмассива. Формально, выбрать \(l\) и \(r\) такие, что \(1\leq l\leq r \leq n\) и \(r-l+1=x\), и затем присвоить \(a_i:=-a_i\) для всех \(i\) таких, что \(l\leq i\leq r\).

Рассмотрим пример. Пусть \(a=[0,6,-2,1,-4,5]\) и \(B=\{1,2\}\):

  1. \([0,6,-2,-1,4,5]\) получится, если выбрать размер подмассива \(2\) и \(l=4\), \(r=5\).
  2. \([0,6,2,-1,4,5]\) получится, если после этого выбрать размер подмассива \(1\) и \(l=3\), \(r=3\).

Найдите максимальную сумму \(\sum\limits_{i=1}^n {a_i}\), которую можно получить, применяя данную операцию неограниченное количество раз (возможно ноль).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(2\leq n \leq 10^6\), \(1 \leq m \leq \lfloor \frac{n}{2} \rfloor\)) — количество элементов в \(a\) и \(B\) соответственно.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^9\leq a_i \leq 10^9\)).

Третья строка каждого набора содержит \(m\) различных положительных целых чисел \(b_1,b_2,\ldots,b_m\) (\(1 \leq b_i \leq \lfloor \frac{n}{2} \rfloor\)) — элементы множества \(B\).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных напечатайте одно целое число — максимальную сумму всех \(a_i\), которую можно получить, применяя описанную операцию неограниченное количество раз.

Примечание

В первом наборе входных данных можно проделать операции с \(x=1\), \(l=3\), \(r=3\) и \(x=1\), \(l=5\), \(r=5\), и получить массив \([0, 6, 2, 1, 4, 5]\)

Во втором наборе можно проделать операцию с \(x=2\), \(l=2\), \(r=3\), получив массив \([1, 1, -1, -1, 1, -1, 1]\), затем проделать операцию с \(x=2\), \(l=3\), \(r=4\), получив массив \([1, 1, 1, 1, 1, -1, 1]\). Не существует способа получить сумму, большую \(5\).

B. Веселье с четными подмассивами

дп жадные алгоритмы *1100

Дан массив \(a\) целых чисел размера \(n\). Вы можете выполнять следующую операцию неограниченное количество раз:

  • Выбрать некоторый подмассив \(a\) четного размера \(2k\), начинающийся в позиции \(l\) (\(1\le l \le l+2\cdot{k}-1\le n\), \(k \ge 1\)) и для каждого \(i\), лежащего между \(0\) и \(k-1\) (включительно), присвоить значение \(a_{l+k+i}\) элементу \(a_{l+i}\).

Например, при \(a = [2, 1, 3, 4, 5, 3]\) и выборе \(l = 1\) и \(k = 2\), проделывая описанную операцию, получим \(a = [3, 4, 3, 4, 5, 3]\).

Найдите минимальное количество операций (возможно ноль), необходимых для того, чтобы сделать все элементы массива равными друг другу.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — размер массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)) - элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, содержащих ответ к соответствующим наборам входных данных — минимальное количество операций, необходимых для того, чтобы сделать все элементы массива равными друг другу.

Примечание

В первом наборе входных данных все элементы массива равны, следовательно, никаких операций не требуется.

Во втором наборе можно выполнить операцию с \(k=1\) и \(l=1\), присвоив \(a_1 := a_2\), и массив станет равным \([1, 1]\) за \(1\) операцию.

В третьем наборе можно выполнить операцию с \(k=1\) и \(l=4\), присвоив \(a_4 := a_5\), и массив станет равным \([4, 4, 4, 4, 4]\).

В четвертом наборе можно выполнить операцию с \(k=1\) и \(l=3\), присвоив \(a_3 := a_4\) и получив массив, равный \([4, 2, 3, 3]\). Затем можно выполнить операцию с \(k=2\) и \(l=1\), присвоив \(a_1 := a_3\), \(a_2 := a_4\) и получив массив, равный \([3, 3, 3, 3]\).

В пятом наборе массив состоит только из одного элемента, поэтому никаких операций не требуется.

C. Странная контрольная

Бинарный поиск битмаски дп математика Перебор *1600

Игорь учится в 11-м классе. Завтра ему предстоит написать контрольную работу по информатике у самого строгого преподавателя школы — Павла Денисовича.

Игорь заранее знает, как будет проходить контрольная: изначально преподаватель даст каждому ученику, включая Игоря, два целых положительных числа \(a\) и \(b\) (\(a < b\)). Затем ученик может неограниченное количество раз производить с числами следующие операции:

  • \(a := a + 1\) (увеличить \(a\) на \(1\)),
  • \(b := b + 1\) (увеличить \(b\) на \(1\)),
  • \(a := a \ | \ b\) (заменить \(a\) на побитовое ИЛИ \(a\) и \(b\)).

Чтобы получить максимальный балл за контрольную работу, ученику необходимо за минимальное количество операций сделать \(a\) равным \(b\).

Игорь заранее знает, какие числа даст ему учитель, и, конечно же, хочет получить максимальный балл за контрольную работу. Помогите ему понять, какое минимальное количество операций необходимо, чтобы сделать \(a\) равным \(b\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка описания каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1 \le a < b \le 10^6\)).

Гарантируется, что сумма \(b\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите единственное число — за какое минимальное количество операций можно сделать \(a\) равным \(b\).

Примечание

В первом наборе оптимально применить третью операцию.

Во втором наборе оптимально применить первую операцию три раза подряд.

В третьем наборе оптимально применить вторую операцию и потом третью операцию.

D. Сделай равными

дп жадные алгоритмы *1600

У вас есть массив целых чисел \(a\) размера \(n\). Изначально все элементы массива равны \(1\). Вы можете выполнять операцию следующего вида: выбрать два целых числа \(i\) (\(1 \le i \le n\)) и \(x\) (\(x > 0\)), а затем увеличить значение \(a_i\) на \(\left\lfloor\frac{a_i}{x}\right\rfloor\) (т.е. сделать \(a_i = a_i + \left\lfloor\frac{a_i}{x}\right\rfloor\)).

После выполнения всех операций вы получите \(c_i\) монет для тех \(i\), в которых \(a_i = b_i\).

Ваша задача — определить максимальное количество монет, которое вы можете получить выполнив не более \(k\) операций.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^3; 0 \le k \le 10^6\)) — размер массива и максимальное количество операций, соответственно.

Вторая строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^3\)).

Третья строка содержит \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^6\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(10^3\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество монет, которое вы можете получить выполнив не более \(k\) операций.

D. Бесконечный набор

битмаски дп математика матрицы Строки теория чисел *1800

Вам дан массив \(a\), состоящий из \(n\) различных целых положительных чисел.

Рассмотрим бесконечное множество целых чисел \(S\), содержащее все целые числа \(x\), удовлетворяющие хотя бы одному из следующих условий:

  1. \(x = a_i\) для некоторого \(1 \leq i \leq n\).
  2. \(x = 2y + 1\) и \(y\) находится в \(S\).
  3. \(x = 4y\) и \(y\) находится в \(S\).

Например, если \(a = [1,2]\), то \(10\) наименьших элементов в \(S\) будут равны \(\{1,2,3,4,5,7,8,9,11,12\}\) .

Найдите количество элементов в \(S\), строго меньших, чем \(2^p\). Так как это число может быть слишком большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(p\) \((1 \leq n, p \leq 2 \cdot 10^5)\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) \((1 \leq a_i \leq 10^9)\).

Гарантируется, что все числа в \(a\) различны.

Выходные данные

Выведите единственное целое число — количество элементов в \(S\), строго меньших \(2^p\). Не забудьте вывести его по модулю \(10^9 + 7\).

Примечание

В первом примере элементы меньше \(2^4\) равны \(\{1, 3, 4, 6, 7, 9, 12, 13, 15\}\).

Во втором примере элементы меньше \(2^7\) равны \(\{5,11,20,23,39,41,44,47,79,80,83,89,92,95\}\).

B. MEX и массив

дп жадные алгоритмы математика Перебор *1100

Пусть есть массив \(b_1, b_2, \ldots, b_k\). Пусть есть разбиение этого массива на отрезки \([l_1; r_1], [l_2; r_2], \ldots, [l_c; r_c]\), где \(l_1 = 1\), \(r_c = k\), и для любого \(2 \leq i \leq c\) выполнено \(r_{i-1} + 1 = l_i\). Иными словами, каждый элемент массива принадлежит ровно одному отрезку.

Определим стоимость разбиения как \(\)c + \sum_{i = 1}^{c} \operatorname{mex}(\{b_{l_i}, b_{l_i + 1}, \ldots, b_{r_i}\}),\(\) где \(\operatorname{mex}\) множества чисел \(S\) — это минимальное неотрицательное целое число, которое не встречается в множестве \(S\). Иными словами, стоимость разбиения равна количеству отрезков плюс сумма MEX по всем отрезкам. Определим ценность массива \(b_1, b_2, \ldots, b_k\) как максимально возможную стоимость его разбиения.

Дан массив \(a\) размера \(n\). Найдите сумму ценностей всех его подотрезков.

Массив \(x\) является подотрезком \(y\), если \(x\) может быть получен из \(y\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 30\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \leq n \leq 100\)) — длина массива.

Во второй строке набора задана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(100\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — ответ на задачу.

Примечание

Рассмотрим второй набор входных данных:

  • Лучшее разбиение подотрезка \([2, 0, 1]\): \([2], [0, 1]\). Стоимость такого разбиения равна \(2 + \operatorname{mex}(\{2\}) + \operatorname{mex}(\{0, 1\}) = 2 + 0 + 2 = 4\).
  • Лучшее разбиение подотрезка \([2, 0]\): \([2], [0]\). Стоимость такого разбиения равна \(2 + \operatorname{mex}(\{2\}) + \operatorname{mex}(\{0\}) = 2 + 0 + 1 = 3\)
  • Лучшее разбиение подотрезка \([2]\): \([2]\). Стоимость такого разбиения равна \(1 + \operatorname{mex}(\{2\}) = 1 + 0 = 1\).
  • Лучшее разбиение подотрезка \([0, 1]\): \([0, 1]\). Стоимость такого разбиения равна \(1 + \operatorname{mex}(\{0, 1\}) = 1 + 2 = 3\).
  • Лучшее разбиение подотрезка \([0]\): \([0]\). Стоимость такого разбиения равна \(1 + \operatorname{mex}(\{0\}) = 1 + 1 = 2\).
  • Лучшее разбиение подотрезка \([1]\): \([1]\). Стоимость такого разбиения равна \(1 + \operatorname{mex}(\{1\}) = 1 + 0 = 1\).

Суммарная ценность всех подотрезков равна \(4 + 3 + 1 + 3 + 2 + 1 = 14\).

D. Очередная задача на минимизацию

дп жадные алгоритмы математика *1800

Даны два массива \(a\) и \(b\) длины \(n\).

Вы можете любое количество раз (возможно, ноль) выполнить следующую операцию: выбрать индекс \(i\) (\(1 \leq i \leq n\)) и поменять местами \(a_i\) и \(b_i\).

Назовем стоимостью массива \(a\) величину, равную \(\sum_{i=1}^{n} \sum_{j=i + 1}^{n} (a_i + a_j)^2\). Аналогично, стоимость массива \(b\) будет равна \(\sum_{i=1}^{n} \sum_{j=i + 1}^{n} (b_i + b_j)^2\).

Вам необходимо минимизировать суммарную стоимость двух массивов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 40\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится целое число \(n\) (\(1 \leq n \leq 100\)) — длина обоих массивов.

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 100\)) — элементы первого массива.

В третей строке каждого набора входных данных содержатся \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 100\)) — элементы второго массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(100\).

Выходные данные

Для каждого набора входных данных выведите минимальную возможную суммарную стоимость двух массивов.

Примечание

Во втором наборе входных данных в одном из оптимальных ответов после выполнения операций \(a = [2, 6, 4, 6]\), \(b = [3, 7, 6, 1]\).

Стоимость массива \(a\) равна \((2 + 6)^2 + (2 + 4)^2 + (2 + 6)^2 + (6 + 4)^2 + (6 + 6)^2 + (4 + 6)^2 = 508\).

Стоимость массива \(b\) равна \((3 + 7)^2 + (3 + 6)^2 + (3 + 1)^2 + (7 + 6)^2 + (7 + 1)^2 + (6 + 1)^2 = 479\).

Суммарная стоимость массивов равна \(508 + 479 = 987\).

F. Вышки

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное *2500

Дано дерево с \(n\) вершинами, пронумерованными от \(1\) до \(n\). Для вершины с номером \(i\) известна её высота \(h_i\). Вы можете установить любое количество вышек в вершины, для каждой вышки вы можете выбрать, в какую вершину её поставить, а также выбрать её эффективность. Установка вышки с эффективностью \(e\) стоит \(e\) монет, где \(e > 0\).

Считается, что в вершине \(x\) ловит связь, если для какой-то пары вышек в вершинах \(u\) и \(v\) (\(u \neq v\), но может быть, что \(x = u\) или \(x = v\)) с эффективностями соответственно \(e_u\) и \(e_v\) выполняется, что \(\min(e_u, e_v) \geq h_x\) и \(x\) лежит на пути между \(u\) и \(v\).

Найдите минимальное количество монет, необходимое для установки вышек, чтобы во всех вершинах ловила связь.

Входные данные

В первой строке вводится целое число \(n\) (\(2 \le n \le 200\,000\)) — количество вершин в дереве.

Во второй строке вводятся \(n\) целых чисел \(h_i\) (\(1 \le h_i \le 10^9\)) — высоты вершин.

В следующих \(n - 1\) строках вводятся пары чисел \(v_i, u_i\) (\(1 \le v_i, u_i \le n\)) — ребра в дереве. Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите одно целое число — минимальное необходимое количество монет, чтобы во всех вершинах ловила связь.

Примечание

В первом тесте оптимально установить две вышки с эффективностью \(2\) в \(1\) и \(3\) вершины.

Во втором тесте оптимально установить вышку с эффективностью \(1\) в вершину \(1\) и две вышки с эффективностью \(3\) во \(2\) и \(5\) вершины.

В третьем тесте оптимально установить две вышки с эффективностью \(6\) в \(1\) и \(2\) вершины.

C. Увеличь суммы подотрезков

дп жадные алгоритмы Перебор реализация *1400

Задан массив \(a_1, a_2, \dots, a_n\), состоящий из \(n\) целых чисел. Также дано целое число \(x\).

Пусть \(f(k)\) будет равно максимальной сумме последовательного подмассива \(a\) после применения следующей операции: прибавить \(x\) к элементам на ровно \(k\) различных позициях. Пустой подмассив тоже рассматривается, его сумма равна \(0\).

Обратите внимание, что подмассив не обязан включать в себя все увеличенные элементы.

Посчитайте максимальное значение \(f(k)\) для каждого \(k\) от \(0\) до \(n\) независимо.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

В первой строке каждого набора записано два целых числа \(n\) и \(x\) (\(1 \le n \le 5000\); \(0 \le x \le 10^5\)) — количество элементов массива и значение для прибавления.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^5 \le a_i \le 10^5\)).

Сумма \(n\) по всем наборам целых чисел не превосходят \(5000\).

Выходные данные

На каждый набор входных данных выведите \(n + 1\) целое число — максимальное значение \(f(k)\) для каждого \(k\) от \(0\) до \(n\) независимо.

Примечание

В первом наборе не важно, к каким элементам прибавлять \(x\). Подотрезок с максимальной суммой всегда будет целым массивом. Если увеличить \(k\) элементов на \(x\), к сумме прибавится \(k \cdot x\).

Во втором наборе:

  • Для \(k = 0\) пустой подмассив — это лучший вариант.
  • Для \(k = 1\) наиболее выгодно увеличить элемент на позиции \(3\). Лучшая сумма становится \(-1 + 5 = 4\) для подмассива \([3, 3]\).
  • Для \(k = 2\) наиболее выгодно увеличить элемент на позиции \(3\) и любой другой элемент. Лучшая сумма останется \(4\) для подотрезка \([3, 3]\).
  • Для \(k = 3\) необходимо увеличить все элементы. Лучшая сумма становится \((-2 + 5) + (-7 + 5) + (-1 + 5) = 5\) для подотрезка \([1, 3]\).

C. Факториалы и степени двойки

битмаски дп Конструктив математика Перебор *1500

Число называется сильным, если оно является степенью двойки или факториалом. Другими словами, число \(m\) сильное, если существует неотрицательное целое число \(d\) такое, что \(m=2^d\) или \(m=d!\), где \(d!=1\cdot 2\cdot \ldots \cdot d\) (в частности, \(0! = 1\)). Например, \(1\), \(4\) и \(6\) являются сильными, потому что \(1=1!\), \(4=2^2\), \(6=3!\), а \(7\), \(10\) или \(18\) не являются.

Вам дано положительное число \(n\). Найдите минимальное число \(k\) такое, что \(n\) можно представить в виде суммы \(k\) различных сильных чисел, или определите, что такого \(k\) не существует.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Описание одного набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^{12}\)).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке.

Если \(n\) не может быть представлено как сумма различных сильных чисел, выведите \(-1\).

Иначе выведите одно положительное число — минимально возможное число \(k\).

Примечание

В первом примере \(7\) может быть представлена как \(7=1+6\), где \(1\) и \(6\) являются сильными. Так как \(7\) не является сильным числом, мы знаем, что минимальное значение \(k\) в этом случае \(k=2\).

Во втором примере один из способов разложить \(11\) в сумму трех сильных чисел такой: \(11=1+4+6\). Можно показать, что нельзя представить \(11\) в виде суммы двух или менее сильных чисел.

В третьем примере \(240\) может быть представлено как \(240=24+32+64+120\). Обратите внимание, что \(240=120+120\) не является корректным представлением, т. к. сильные числа должны быть различны.

В четвертом примере \(17179869184=2^{34}\), поэтому \(17179869184\) является сильным числом, и минимальное \(k\) в этом случае \(k=1\).

D. Взвесьте дерево

Деревья дп Конструктив поиск в глубину и подобное реализация *2000

Вам дано дерево из \(n\) вершин, пронумерованных от \(1\) до \(n\). Деревом называется связный неориентированный граф без циклов.

Для всех \(i=1,2, \ldots, n\) обозначим за \(w_i\) вес \(i\)-й вершины. Вершина называется хорошей, если ее вес равен сумме весов всех ее соседей.

Изначально веса в вершинах не определены. Выберете для каждой вершины положительный целочисленный вес так, чтобы количество хороших вершин в дереве было максимально возможным. Если есть несколько способов сделать это, вам нужно найти такой, который минимизирует сумму весов всех вершин в дереве.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — количество вершин в дереве.

Далее следует \(n−1\) строка. Каждая из этих строк содержит два целых числа \(u\) и \(v\) (\(1\le u,v\le n\)), обозначающие ребро между вершинами \(u\) и \(v\). Гарантируется, что ребра образуют дерево.

Выходные данные

В первой строке выведите два целых числа: максимальное количество хороших вершин и минимально возможный суммарный вес вершин при этом.

Во второй строке выведите \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) (\(1\le w_i\le 10^9\)) — веса вершин. Можно показать, что существует оптимальное решение, удовлетворяющее данным ограничениям.

Если существует несколько решений, выведите любое из них.

Примечание

Ниже изображено дерево из первого примера:

В этом случае, если вы выберете для каждый вершины вес \(1\), то хорошими вершинами будут вершины (покрашены черным) \(1\), \(3\) и \(4\). Невозможно выбрать такие веса, чтобы все вершины были хорошими. Минимально возможная сумма весов равна \(1+1+1+1=4\), меньшая сумма недостижима, так как вершины обязаны иметь положительный вес.

Ниже изображено дерево из второго примера:

В этом случае, если вы выберете для каждой вершины вес \(1\), то хорошими вершинами будут вершины (покрашены черным) \(2\) и \(3\). Можно показать, что это оптимальное решение.

E. Степенная таблица

дп математика Перебор теория чисел *2200

У вас есть прямоугольная таблица размера \(n\times m\) (\(n\) строк, \(m\) столбцов). \(n\) строк пронумерованы от \(1\) до \(n\) сверху вниз, а \(m\) столбцов пронумерованы от \(1\) до \(m\) слева направо.

Клетка на пересечении строки \(i\) и столбца \(j\) содержит число \(i^j\) (число \(i\), возведенное в степень \(j\)). Например, если \(n=3\) и \(m=3\), то таблица выглядит следующим образом:

Найдите количество различных чисел в таблице.

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le 10^6\)) — количество строк и количество столбцов.

Выходные данные

Выведите одно целое число: количество различных целых чисел в таблице.

Примечание

В условии показана таблице из первого примера. В этом случае \(7\) различных чисел: \(1\), \(2\), \(3\), \(4\), \(8\), \(9\) и \(27\).

Во втором примере таблица следующая:

В ней \(5\) различных чисел: \(1\), \(2\), \(4\), \(8\) и \(16\).

В третьем примере таблица следующая:

В ней \(6\) различных чисел: \(1\), \(2\), \(3\), \(4\), \(9\) и \(16\).

D. Мадока и лучшая школа России

дп Конструктив математика теория чисел *1900

Мадока собирается поступить в «ЦНУС ПТУ». Но на вступительном экзамене по информатике ей попалась сложная задача:

  • Число называется хорошим, если оно кратно \(d\).
  • Число называется красивым, если оно хорошее и его нельзя представить в виде произведения двух хороших чисел.

Обратите внимание, что красивое число обязано быть хорошим.

Дано хорошее число \(x\). Требуется определить, можно ли его представить хотя бы двумя различными способами в виде произведения нескольких (возможно одного) красивых чисел. Два способа считаются различными, если в них отличаются множества используемых чисел.

Решите эту задачу за Мадоку и помогите ей поступить в лучшую школу России!

Входные данные

В первой строке дано единственное число \(t\) (\(1 \leq t \leq 100\)) — количество тестовых случаев. Ниже идет их описание.

Каждый тестовый случай состоит из двух целых чисел \(x\) и \(d\), записанных через пробел (\(2 \leq x, d \leq 10^9\)). Гарантируется, что \(x\) кратно \(d\).

Выходные данные

Для каждого набора входных данных выведите «NO», если число нельзя представить хотя бы двумя способами. Иначе, выведите «YES».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом примере \(6\) можно представить в виде \(6\), \(1 \cdot 6\), \(2 \cdot 3\). Но \(3\) и \(1\) не являются хорошими числами, поскольку не делятся на \(2\), поэтому способ только один.

Во втором примере \(12\) можно представить в виде \(6 \cdot 2\), \(12\), \(3 \cdot 4\), или \(3 \cdot 2 \cdot 2\). Первый вариант подходит. Второй — нет, так как \(12\) не является красивым (\(12 = 6 \cdot 2\)). Третий и четвертый также не подходят, поскольку \(3\) не являетcя хорошим.

В третьем примере \(36\) можно представить в виде \(18 \cdot 2\) и \(6 \cdot 6\). Поэтому его можно разложить хотя бы двумя способами.

F. Мадока и лень

дп жадные алгоритмы *3100

Мадоке стало лень писать условие, поэтому перейдём сразу к формальному описанию задачи.

Массив целых чисел \(a_1, a_2, \ldots, a_n\) называется горкой, если он не пустой и в нем существует индекс \(i\), для которого выполнено следующее: \(a_1 < a_2 < \ldots < a_i > a_{i + 1} > a_{i + 2} > \ldots > a_n\).

Последовательность \(x\) является подпоследовательностью \(y\), если \(x\) может быть получена из \(y\) удалением нескольких (возможно, ни одного или всех) элементов с сохранением порядка оставшихся элементов. Например, для массива \([69, 1000, 228, -7]\) массив \([1000, -7]\) является подпоследовательностью, а \([1]\) и \([-7, 1000]\) не являются.

Разбиение массива на две подпоследовательности называется хорошим, если каждый элемент принадлежит ровно одной подпоследовательности, а также каждая из этих подпоследовательностей является горкой.

Вам дан массив различных целых положительных чисел \(a_1, a_2, \ldots a_n\). Требуется найти количество различных пар максимумов первой и второй подпоследовательностей среди всех хороших разбиений. Пары, отличающиеся только порядком максимумов, считаются одинаковыми.

Входные данные

Первая строка входных данных содержит единственное целое число \(n\) (\(2 \le n \le 5 \cdot 10^5\)) — размер массива.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — исходный массив. Гарантируется, что все \(a_i\) попарно различны.

Выходные данные

В единственной строке выведите ровно одно число — количество различных пар максимумов первой и второй подпоследовательностей среди всех хороших разбиений

Примечание

В первом тестовом случае есть 3 возможные пары: \((3, 4)\), \((2, 4)\), \((1, 4)\). И они достигаются при следующих разбиениях: \([1, 2, 3], [4]\); \([4, 3], [1, 2]\); \([1], [2, 4, 3]\)

D. Бизнес-шоу

дп кратчайшие пути разделяй и властвуй реализация Структуры данных *2800

Дима находится на шоу от бизнесмена Петра. В этом шоу Диме предстоит пройтись по дорожке, которая является прямоугольником \(3 \times n\), где строки пронумерованы от \(1\) до \(3\) сверху вниз, а столбцы от \(1\) до \(n\) слева направо.

На клетке на пересечении строки \(i\) и столбца \(j\) написано число \(a_{i,j}\). Изначально у Димы есть баланс, равный нулю, и когда Дима наступает на клетку в \(i\)-й строке и \(j\)-м столбце, его баланс меняется на \(a_{i,j}\) рублей. Баланс может становиться отрицательным.

Дима может заходить на любые клетки первой и третьей строки, но изначально клетки второй строки для него недоступны. Однако есть \(q\) предложений от бизнесмена Петра, которые могут сделать их доступными: \(i\)-е предложение позволяет разблокировать все клетки второй строки на отрезке с \(l_i\) по \(r_i\), заплатив за это \(k_i\) рублей. Дима может воспользоваться любым количеством таких предложений, а также разблокировать одну и ту же клетку несколько раз.

Дима изначально стоит на клетке в клетке \((1, 1)\) и хочет попасть в клетку \((3, n)\). За один ход Дима может подвинуться на 1 вправо или вниз, то есть увеличить на 1 номер строки или столбца. Таким образом, всего в процессе пути Дима сделает \(n + 1\) ход, из которых ровно \(n - 1\) будет по горизонтали и \(2\) по вертикали.

Выигрыш Димы будет равен финальному балансу после совершения всех ходов, то есть сумме чисел на всех посещённых клетках за вычетом стоимости всех использованных предложений. Ваша задача — определить максимальный возможный выигрыш Димы.

Входные данные

В первой строке даны два целых числа \(n\) и \(q\) (\(1 \le n, q \le 500\,000\)) — длина прямоугольника и число возможных отрезков для разблокировки.

В следующих трёх строках описываются числа в прямоугольнике, в \(i\)-й строке даны \(n\) целых чисел \(a_{i1}\), \(a_{i2}\), ..., \(a_{in}\) (\(-10^9 \le a_{ij} \le 10^9)\) — числа в \(i\)-й строке прямоугольника.

В следующих \(q\) строках описываются доступные предложения для разблокировки отрезков, в \(i\)-й из них даны три целых числа \(l_i\), \(r_i\) и \(k_i\) (\(1 \leq l_i \leq r_i \leq n\), \(1\leq k_i\leq 10^9\)) — границы разблокируемого отрезка и стоимость предложения.

Выходные данные

Выведите одно число — максимальный возможный выигрыш Димы.

Примечание

В первом примере оптимально воспользоваться вторым предложением Петра за \(4\) рубля и пройти по клеткам \((1, 1)\), \((1, 2)\), \((1, 3)\), \((2, 3)\), \((3, 3)\), \((3, 4)\), заработав \(1 + 0 + 2 + 9 + 4 + 1 - 4 = 13\) рублей.

Во втором примере оптимально воспользоваться вторым и третьим предложением Петра за \(2\) и \(3\) рубля соответственно, и пройти по клеткам \((1, 1)\), \((2, 1)\), \((2, 2)\), \((2, 3)\), \((2, 4)\), \((3, 4)\), \((3, 5)\), заработав \(-20 + 1 + 3 + 3 + 6 + 6 + 2 - 2 - 3= -4\) рубля.

C. Еще одна строковая задача

Бинарный поиск дп математика Перебор Строки *1600

Строка называется бинарной, если она состоит только из символов «0» и «1».

Строка v называется подстрокой строки w, если она имеет ненулевую длину, и ее можно прочитать, начиная с некоторой позиции, в строке w. Например, у строки «010» есть шесть подстрок: «0», «1», «0», «01», «10», «010». Две подстроки считаются различными, если их позиции вхождения различны. Другими словами, каждую подстроку нужно учитывать столько раз, сколько она встречается.

Дана бинарная строка s. Ваша задача — найти количество ее подстрок, содержащих ровно k единиц.

Входные данные

В первой строке записано единственное целое число k (0 ≤ k ≤ 106). Во второй строке записана непустая бинарная строка s. Длина s не превосходит 106 символов.

Выходные данные

Выведите одно целое число — количество подстрок данной строки, содержащих ровно k символов «1».

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Примечание

В первом примере искомые подстроки: «1», «1», «10», «01», «10», «010».

Во втором примере искомые подстроки: «101», «0101», «1010», «01010».

E. Совместимые числа

битмаски дп Перебор поиск в глубину и подобное *2200

Два целых числа x и y называются совместимыми, если результат их побитового «И» равен нулю, то есть a & b = 0. Например, числа 90 (10110102) и 36 (1001002) совместимы, так как 10110102 & 1001002 = 02, а числа 3 (112) и 6 (1102) несовместимы, так как 112 & 1102 = 102.

Вам дан массив целых чисел a1, a2, ..., an. Требуется определить для каждого элемента массива, совместим ли этот элемент с каким-либо другим элементом из данного массива. В случае положительного ответа также требуется найти любой подходящей элемент.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 106) — количество элементов в данном массиве. Во второй строке через пробел записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 4·106) — элементы данного массива. Числа в массиве могут повторяться.

Выходные данные

Выведите n целых чисел ansi. Если ai не совместимо ни с каким другим элементом данного массива a1, a2, ..., an, то ansi должно быть равно -1. Иначе ansi — любое такое число, что ai & ansi = 0, и при этом ansi содержится в массиве a1, a2, ..., an.

F. Виталий и Advanced Useless Algorithms

дп жадные алгоритмы реализация *2200

Виталий записался на курс Advanced Useless Algorithms. Курс состоит из \(n\) заданий. Виталий подсчитал, что до задания \(i\) у него есть \(a_i\) часов на выполнение, начиная с дня записи на курс. То есть, дедлайн до задания \(i\) составляет \(a_i\) часов. Массив \(a\) отсортирован по возрастанию, другими словами, номера заданий соответствуют порядку сдачи заданий.

Виталий все делает добросовестно, поэтому он хочет выполнить каждое задание на \(100\) процентов, или больше. Изначально его уровень выполнения по каждому заданию равен \(0\) процентов.

У Виталия есть \(m\) опций подготовки, каждая опция может быть использована не более одного раза. Опция \(i\) характеризуется тремя целыми числами: \(e_i, t_i\) и \(p_i\). Если Виталий использует \(i\)-ю опцию, то через \(t_i\) часов (с текущего момента) он улучшит выполнение задания \(e_i\) на \(p_i\) процентов.

Например, пусть Виталию предстоит выполнить \(3\) задания. Пусть массив \(a\) имеет вид: \(a = [5, 7, 8]\). Допустим, Виталию доступны \(5\) опций: \([e_1=1, t_1=1, p_1=30]\), \([e_2=2, t_2=3, p_2=50]\), \([e_3=2, t_3=3, p_3=100]\), \([e_4=1, t_4=1, p_4=80]\), \([e_5=3, t_5=3, p_5=100]\).

Тогда если Виталий будет готовиться следующим образом, он сможет выполнить все вовремя:

  • Виталий выбирает опцию \(4\). Тогда через \(1\) час он выполнит задание \(1\) на \(80\) процентов. До дедлайна задания \(1\) ему остается ещё \(4\) часа.
  • Виталий выбирает опцию \(3\). Тогда через \(3\) часа он полностью выполнит задание \(2\). До дедлайна задания \(1\) у него остается ещё \(1\) час, а до дедлайна задания \(3\) ему остаётся \(4\) часа.
  • Виталий выбирает опцию \(1\). Тогда через \(1\) час он выполнит задание \(1\) на \(110\) процентов, то есть успеет выполнить задание \(1\) как раз к дедлайну.
  • Виталий выбирает опцию \(5\). Тогда \(2\) часа он будет выполнять задание \(3\), и через еще \(1\) час Виталий полностью выполнит задание \(3\).

Таким образом, Виталий полностью и вовремя сумел пройти курс, использовав \(4\) опции.

Помогите Виталию — выведите опции, по которым Виталию следует выполнить задания в нужном порядке. Обратите внимание: каждая опция может быть использована не более одного раза. Если существует несколько возможных ответов, разрешается вывести любой.

Входные данные

В первой строке входных данных записано целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 10^5\)) — количество заданий и количество опций подготовки соответственно.

В следующей строке заданы \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — время до дедлайна задания \(i\). Заданные значения — не убывают, то есть \(a_1 \le a_2 \le \dots \le a_n\).

Следующие \(m\) строк содержат тройки чисел \(e_i, t_i, p_i\) (\(1 \le e_i \le n\), \(1 \le t_i \le 10^9\), \(1 \le p_i \le 100\)) — если Виталий выберет эту опцию, то через \(t_i\) часов он улучшит выполнение задания с номером \(e_i\) на \(p_i\) процентов. Опции пронумерованы от \(1\) до \(m\) в порядке следования во входных данных.

Гарантируется, что сумма \(n+m\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке число \(k\), означающие что за \(k\) опций Виталий сможет выполнить каждое задание на \(100\) процентов или больше вовремя. Опции не должны повторяться. Либо выведите -1, если Виталий не имеет возможности выполнить все задания вовремя.

Если ответ существует, то в следующей строке выведите \(k\) различных целых чисел от \(1\) до \(m\) — номера опций в нужном порядке. Если существует несколько ответов, разрешается вывести любой из них.

G. Подсчёт коротких путей

графы дп кратчайшие пути поиск в глубину и подобное Структуры данных *2100

Задан неориентированный связный граф, состоящий из \(n\) вершин и \(m\) ребер. Граф не содержит петель (рёбер из вершины в себя же) и кратных ребер (то есть между каждой парой вершин не более одного ребра). Вершины графа пронумерованы от \(1\) до \(n\).

Найдите количество путей из вершины \(s\) в \(t\), длина которых отличается от длины кратчайшего пути из \(s\) в \(t\) не более, чем на \(1\). Необходимо учесть все подходящие пути, даже если они проходят по одной и той же вершине или ребру более одного раза (то есть, не являются простыми).

Граф, состоящий из \(6\) вершин и \(8\) ребер.

Например, пусть \(n = 6\), \(m = 8\), \(s = 6\) и \(t = 1\), а граф выглядит как на рисунке выше. Тогда длина кратчайшего пути из \(s\) в \(t\) равна \(1\). Рассмотрим все пути, длина которых не более \(1 + 1 = 2\).

  • \(6 \rightarrow 1\). Длина пути равна \(1\).
  • \(6 \rightarrow 4 \rightarrow 1\). Длина пути равна \(2\).
  • \(6 \rightarrow 2 \rightarrow 1\). Длина пути равна \(2\).
  • \(6 \rightarrow 5 \rightarrow 1\). Длина пути равна \(2\).

Всего существует \(4\) подходящих пути.

Входные данные

В первой строке входных данных задано число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором входных данных записана пустая строка.

Первая строка набора содержит два числа \(n, m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le m \le 2 \cdot 10^5\)) — количество вершин и ребер в графе.

Вторая строка содержит два числа \(s\) и \(t\) (\(1 \le s, t \le n\), \(s \neq t\)) — номера начальной и конечной вершины пути.

В следующих \(m\) строках содержатся описания ребер: в \(i\)-й строке заданы два целых числа \(u_i\), \(v_i\) (\(1 \le u_i,v_i \le n\)) — номера вершин, которые соединяют \(i\)-е ребро. Гарантируется, что граф является связным и не содержит петель и кратных рёбер.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\). Аналогично, гарантируется, что сумма значений \(m\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая выведите единственное число — количество путей из \(s\) в \(t\) таких, что их длина отличается от длины кратчайшего пути не более, чем на \(1\).

Так как это число может быть слишком большим, выведите его по модулю \(10^9 + 7\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

E. Минимальная покрывающая звездочка

дп Комбинаторика математика Паросочетания *2200

В данной задаче мы рассматриваем полные неориентированные графы, состоящие из \(n\) вершин со взвешенными ребрами. Вес каждого ребра — это целое число от \(1\) до \(k\).

Неориентированный граф называется красивым, если сумма весов всех ребер, инцидентных вершине \(1\), равна весу минимального покрывающего дерева в графе. Минимальное покрывающее дерево — это дерево, состоящее из \(n-1\) ребра графа, которое соединяет все \(n\) вершин и имеет наименьшую сумму среди всех таких деревьев; его вес равен сумме весов ребер в нем.

Посчитайте количество полных красивых графов, в которых ровно \(n\) вершин и все веса ребер от \(1\) до \(k\). Так как ответ может быть большим, выведите его по модулю \(998244353\).

Входные данные

В единственной строке записаны два целых числа \(n\) и \(k\) (\(2 \le n \le 250\); \(1 \le k \le 250\)).

Выходные данные

Выведите одно целое число — количество полных красивых графов, в которых ровно \(n\) вершин и все веса ребер от \(1\) до \(k\). Так как ответ может быть большим, выведите его по модулю \(998244353\).

E. Годзё и игра на матрице

дп игры математика реализация сортировки Структуры данных теория чисел хэши *2500

Марин измоталась после долгого дня косплея, поэтому Годзё приглашает ее сыграть в игру!

Марин и Годзё по очереди кладут одну из своих фишек на таблицу размером \(n \times n\), при этом Марин ходит первой. Существуют некоторые ограничения на размещение фишек:

  • За исключением первого хода фишка, размещенная игроком, должна находиться на манхэттенском расстоянии более чем \(k\) от последней размещенной фишки. Другими словами, если игрок кладет фишку в \((x_1, y_1)\), то фишка, помещенная на следующем ходу, должна находиться в ячейке \((x_2, y_2)\), удовлетворяющей \(|x_2 - x_1| + |y_2 - y_1| > k\).
  • Помимо предыдущего ограничения, фишка может быть размещена в любом месте матрицы, включая ячейки, где уже были размещены фишки любого игрока.

Каждый раз, когда какой-либо игрок кладет фишку в ячейку \((x, y)\), этот игрок получает \(v_{x,\ y}\) очков. Все значения \(v\) в таблице различны. Очки за ячейку даются даже в случае, если какие-то фишки уже находятся в этой ячейке. Игра заканчивается, когда каждый игрок сделает \(10^{100}\) ходов.

Марин и Годзё сыграют \(n^2\) партий. Для каждой ячейки таблицы будет ровно одна партия, в которой первым ходом Марин размещает фишку в этой ячейке. Для каждой такой партии определите, у кого в итоге будет больше очков при оптимальной игре Марин и Годзё (после первого хода Марин)? Или партия закончится вничью?

Входные данные

Первая строка содержит два целых числа \(n\), \(k\) (\(3 \le n \le 2000\), \(1 \leq k \leq n - 2\)). Заметьте, что при таких ограничениях всегда возможно сделать ход.

Следующие \(n\) строк содержат по \(n\) целых чисел. \(j\)-м числом в \(i\)-й строке является \(v_{i,j}\) (\(1 \le v_{i,j} \le n^2\)). Все значения в \(v\) различны.

Выходные данные

Выведите \(n\) строк. \(i\)-я строка должна содержать \(n\) символов, где \(j\)-й символ является результатом партии, в которой Марин начинает с ячейки \((i, j)\). Выведите 'M' в случае победы Марин, 'G' — в случае победы Годзё и 'D' — в случае равного количества очков. Не выводите пробелы между символами в одной строке.

C. Империя на прямой

Бинарный поиск дп жадные алгоритмы математика Перебор реализация *1500

Вы — амбициозный король, который хочет быть Императором Действительных чисел. Но перед этим вам нужно стать Императором Целых чисел.

Рассмотрим числовую ось. Столица вашей империи изначально находится в точке \(0\). На прямой есть \(n\) незахваченных королевств в позициях \(0<x_1<x_2<\ldots<x_n\). Вы хотите захватить все эти королевства.

Вы можете делать два вида действий:

  • Вы можете переместить свою столицу (пусть ее текущая координата \(c_1\)) в любое захваченное королевство (пусть его позиция \(c_2\)), стоимость такого действия \(a\cdot |c_1-c_2|\).
  • Вы можете из текущей столицы (пусть ее текущая координата \(c_1\)) захватить королевство (пусть его позиция \(c_2\)), стоимость такого действия \(b\cdot |c_1-c_2|\). Вы не можете захватывать королевство, если между вашей столицей и целью есть другие незахваченные королевства.

Обратите внимание, что вы не можете расположить столицу в точке, где нет королевства. Другими словами, в любой момент времени ваша столица может быть только в точке \(0\) или в \(x_1,x_2,\ldots,x_n\). Также обратите внимание, что захват королевства не изменяет положение вашей столицы.

Выведите минимальную суммарную стоимость захвата всех королевств. Ваша столица может оказаться в итоге в любой точке.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит \(3\) целых числа \(n\), \(a\) и \(b\) (\(1 \leq n \leq 2 \cdot 10^5\); \(1 \leq a,b \leq 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(x_1, x_2, \ldots, x_n\) (\(1 \leq x_1 < x_2 < \ldots < x_n \leq 10^8\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: минимальную стоимость захвата всех королевств.

Примечание

Ниже приведена оптимальная последовательность действий для второго примера:

  1. Захватить королевство в точке \(1\), стоимость \(3\cdot(1-0)=3\).
  2. Переместить столицу в королевство в точке \(1\), стоимость \(6\cdot(1-0)=6\).
  3. Захватить королевство в точке \(5\), стоимость \(3\cdot(5-1)=12\).
  4. Переместить столицу в королевство в точке \(5\), стоимость \(6\cdot(5-1)=24\).
  5. Захватить королевство в точке \(6\), стоимость \(3\cdot(6-5)=3\).
  6. Захватить королевство в точке \(21\), стоимость \(3\cdot(21-5)=48\).
  7. Захватить королевство в точке \(30\), стоимость \(3\cdot(30-5)=75\).

Суммарная стоимость \(3+6+12+24+3+48+75=171\). Нельзя получить меньшую стоимость.

D. Обувной магазин

дп жадные алгоритмы Паросочетания сортировки *2500

На складе вашего магазина находятся n пар обуви, каждая пара характеризуется двумя целыми числами: ценой ci и размером si. Известно, что именно в этот день все числа si различны, то есть каждого размера имеется не более одной пары.

В магазин зашли одновременно m покупателей, у покупателя номер i при себе di денег, а размер его ноги равен li. Покупатель номер i может купить себе пару номер j, если cj ≤ di, а также если li = sj или li = sj - 1; то есть необходимо, чтобы у него было достаточно денег чтобы заплатить, а также размер ноги был в точности равен или на 1 меньше, чем размер выбранной пары.

Ваша задача — продать некоторым покупателям по паре обуви так, чтобы максимизировать сумму cj проданных пар, то есть прибыль. Гарантируется, что каждый покупатель возьмет не более одной пары, а каждую пару, разумеется, купит не более одного покупателя.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 105) — количество пар обуви на складе. Далее в n строках записаны описания пар обуви — два целых числа ci и si (1 ≤ ci, si ≤ 109), числа разделены пробелом. Гарантируется, что все числа si различны.

В следующей строке записано целое число m (1 ≤ m ≤ 105) — количество находящихся в магазине покупателей. Далее в m строках записаны описания покупателей — два целых числа di и li (1 ≤ di, li ≤ 109), числа разделены пробелом.

Выходные данные

В первой строке выведите единственное целое число — максимальную прибыль, которую вы сможете получить от продажи. Во второй строке выведите целое число k — количество пар обуви, которые вы продадите. Далее в k строках выведите описания проданных пар — два целых числа через пробел, где первое число означает номер покупателя, а второе — номер обуви, которую этот покупатель приобретет.

Пары чисел «номер покупателя и номер обуви» можно выводить в любом порядке, покупатели и обувь нумеруются с 1 в том порядке, в котором они заданы во входных данных. Если существует несколько оптимальных ответов, то разрешается вывести любой.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

E. Тетраэдр

дп математика матрицы *1500

Вам задан тетраэдр. Обозначим его вершины буквами A, B, C и D соответственно.

В вершине тетраэдра D находится муравей. Муравей очень подвижный и не любит стоять на месте. В каждый момент времени он совершает один шаг от одной вершины к другой по некоторому ребру тетраэдра, оставаться на месте он не может.

От Вас в этой задаче требуется совсем немногое: нужно посчитать каким количеством способов муравей может прийти из исходной вершины D в себя ровно за n шагов. Другими словами, Вас просят узнать количество различных циклических путей длины n из вершины D в себя. Поскольку это количество может быть достаточно большим, ответ требуется посчитать по модулю 1000000007 (109 + 7).

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 107) — требуемая длина циклического пути.

Выходные данные

Выведите единственное целое число — искомое количество способов по модулю 1000000007 (109 + 7).

Примечание

Искомые пути в первом примере:

  • D - A - D
  • D - B - D
  • D - C - D

C. Получи четную строку

дп жадные алгоритмы Строки *1300

Строка \(a=a_1a_2\dots a_n\) называется чётной, если она состоит из конкатенации (соединения) строк длины \(2\), состоящих из одинаковых символов. Иными словами, строка \(a\) четная, если одновременно выполняются два условия:

  • чётна её длина \(n\);
  • для всех нечётных \(i\) (\(1 \le i \le n - 1\)) выполнено \(a_i = a_{i+1}\).

Например, следующие строки являются чётными: «» (пустая строка), «tt», «aabb», «oooo» и «ttrrrroouuuuuuuukk». Следующие строки чётными не являются: «aaa», «abab» и «abba».

Задана строка \(s\), состоящая из строчных латинских букв. Необходимо найти, какое минимальное количество символов нужно удалить из строки \(s\), чтобы она стала четной. Удалённые символы не обязаны идти подряд.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Каждый набор входных данных состоит из одной строки \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)), где \(|s|\) — длина строки \(s\). Строка состоит из строчных букв латинского алфавита.

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество символов, которые необходимо удалить, чтобы строка \(s\) стала четной.

Примечание

В первом наборе входных данных можно удалить символы под номерами \(6\), \(7\) и \(9\), получив четную строку «aabbddcc».

Во втором наборе входных данных каждый символ встречается ровно один раз, поэтому для того, чтобы получить четную строку, необходимо удалить все символы из строки.

В третьем наборе входных данных можно получить четную строку «aaaabb», удалив, например, \(4\)-й и \(6\)-й символы, или строку «aabbbb», удалив \(5\)-й символ и любой из первых трех.

B. Получение нуля

битмаски графы дп жадные алгоритмы кратчайшие пути Перебор поиск в глубину и подобное *1300

Предположим, у вас есть целое число \(v\). За одну операцию вы можете:

  • либо присвоить \(v = (v + 1) \bmod 32768\)
  • либо присвоить \(v = (2 \cdot v) \bmod 32768\).

Вам заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Какое минимальное количество операций необходимо, чтобы сделать каждое \(a_i\) равным \(0\)?

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 32768\)) — количество чисел.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < 32768\)).

Выходные данные

Выведите \(n\) чисел: \(i\)-е число должно равняться минимальному количеству операций, чтобы сделать \(a_i\) равным \(0\).

Примечание

Рассмотрим каждый \(a_i\):

  • \(a_1 = 19\). Вы можете, сначала, увеличить его на единицу и получить \(20\), а потом умножить его на два \(13\) раз. Вы получите \(0\) за \(1 + 13 = 14\) шагов.
  • \(a_2 = 32764\). Вы можете увеличить число на единицу \(4\) раза: \(32764 \rightarrow 32765 \rightarrow 32766 \rightarrow 32767 \rightarrow 0\).
  • \(a_3 = 10240\). Вы можете умножить его на два \(4\) раза: \(10240 \rightarrow 20480 \rightarrow 8192 \rightarrow 16384 \rightarrow 0\).
  • \(a_4 = 49\). Вы можете умножить его на два \(15\) раз.

E. Узкие компоненты

Деревья дп математика Перебор снм Структуры данных *2500

Задана матрица \(a\), состоящая из \(3\) строк и \(n\) столбцов. Каждая клетка матрицы либо свободна, либо занята.

Свободная клетка \(y\) достижима из свободной клетки \(x\), если выполняется хотя бы одно из следующих условий:

  • \(x\) и \(y\) имеют общую сторону;
  • существует такая свободная клетка \(z\), что \(z\) достижима из \(x\), а \(y\) достижима из \(z\).

Компонента связности — это такой набор свободных клеток матрицы, что все клетки в нем достижимы друг из друга, а добавление любой другой свободной клетки в него нарушает это правило.

К матрице задаются \(q\) запросов. Запросы следующего вида:

  • \(l\) \(r\) — посчитайте количество компонент связности матрицы, состоящей из столбцов с \(l\) по \(r\) матрицы \(a\) включительно.

Выведите ответы на все запросы.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество столбцов матрицы \(a\).

В \(i\)-й из следующих трех строк описывается \(i\)-я строка матрицы \(a\) — строка, состоящая из \(n\) символов. Каждый символ — это либо \(1\) (обозначающий свободную клетку), либо \(0\) (обозначающий занятую клетку).

В следующей строке записано одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)) — количество запросов.

В \(j\)-й из следующих \(q\) строк записаны два целых числа \(l_j\) и \(r_j\) (\(1 \le l_j \le r_j \le n\)) — описание \(j\)-го запроса.

Выходные данные

Выведите \(q\) целых чисел — \(j\)-е значение должно быть равно количеству компонент связности матрицы, состоящей из столбцов с \(l_j\) по \(r_j\) матрицы \(a\) включительно.

C. European Trip

графы дп математика матрицы

The map of Europe can be represented by a set of \(n\) cities, numbered from \(1\) through \(n\), which are connected by \(m\) bidirectional roads, each of which connects two distinct cities. A trip of length \(k\) is a sequence of \(k+1\) cities \(v_1, v_2, \ldots, v_{k+1}\) such that there is a road connecting each consecutive pair \(v_i\), \(v_{i+1}\) of cities, for all \(1 \le i \le k\). A special trip is a trip that does not use the same road twice in a row, i.e., a sequence of \(k+1\) cities \(v_1, v_2, \ldots, v_{k+1}\) such that it forms a trip and \(v_i \neq v_{i + 2}\), for all \(1 \le i \le k - 1\).

Given an integer \(k\), compute the number of distinct special trips of length \(k\) which begin and end in the same city. Since the answer might be large, give the answer modulo \(998\,244\,353\).

Input

The first line contains three integers \(n\), \(m\) and \(k\) (\(3 \le n \le 100\), \(1 \le m \le n(n - 1) / 2\), \(1 \le k \le 10^4\)) — the number of cities, the number of roads and the length of trips to consider.

Each of the following \(m\) lines contains a pair of distinct integers \(a\) and \(b\) (\(1 \le a, b \le n\)) — each pair represents a road connecting cities \(a\) and \(b\). It is guaranteed that the roads are distinct (i.e., each pair of cities is connected by at most one road).

Output

Print the number of special trips of length \(k\) which begin and end in the same city, modulo \(998\,244\,353\).

Note

In the first sample, we are looking for special trips of length \(2\), but since we cannot use the same road twice once we step away from a city we cannot go back, so the answer is \(0\).

In the second sample, we have the following \(12\) special trips of length \(3\) which begin and end in the same city: \((1, 2, 4, 1)\), \((1, 3, 4, 1)\), \((1, 4, 2, 1)\), \((1, 4, 3, 1)\), \((2, 1, 4, 2)\), \((2, 4, 1, 2)\), \((3, 1, 4, 3)\), \((3, 4, 1, 3)\), \((4, 1, 3, 4)\), \((4, 3, 1, 4)\), \((4, 1, 2, 4)\), and \((4, 2, 1, 4)\).

G. Gastronomic Event

Деревья дп жадные алгоритмы

SWERC organizers want to hold a gastronomic event.

The location of the event is a building with \(n\) rooms connected by \(n-1\) corridors (each corridor connects two rooms) so that it is possible to go from any room to any other room.

In each room you have to set up the tasting of a typical Italian dish. You can choose from \(n\) typical Italian dishes rated from \(1\) to \(n\) depending on how good they are (\(n\) is the best possible rating). The \(n\) dishes have distinct ratings.

You want to assign the \(n\) dishes to the \(n\) rooms so that the number of pleasing tours is maximal. A pleasing tour is a nonempty sequence of rooms so that:

  • Each room in the sequence is connected to the next one in the sequence by a corridor.
  • The ratings of the dishes in the rooms (in the order given by the sequence) are increasing.
If you assign the \(n\) dishes optimally, what is the maximum number of pleasing tours?
Input

The first line contains an integer \(n\) (\(2\le n\le 1\,000\,000\)) — the number of rooms.

The second line contains \(n-1\) integers \(p_2, p_3, \cdots , p_n\) (\(1 \leq p_i < i\)). Each \(p_i\) indicates that there is a corridor between room \(i\) and room \(p_i\). It is guaranteed that the building has the property that it is possible to go from any room to any other room.

Output

Print the maximum number of pleasing tours.

Note

In the first sample, it is optimal to place the dish with rating \(1\) in room \(1\), the dish with rating \(2\) in room \(3\), the dish with rating \(3\) in room \(2\), the dish with rating \(4\) in room \(5\) and the dish with rating \(5\) in room \(4\).

All the \(13\) possible pleasing tours are: \((1)\), \((2)\), \((3)\), \((4)\), \((5)\), \((1,2)\), \((3,2)\), \((2,4)\), \((2,5)\), \((1,2,4)\), \((1,2,5)\), \((3,2,4)\), \((3,2,5)\).

There are also other ways to assign the dishes to the rooms so that there are \(13\) pleasing tours.

L. Il Derby della Madonnina

дп математика Структуры данных

The derby between Milan and Inter is happening soon, and you have been chosen as the assistant referee for the match, also known as linesman. Your task is to move along the touch-line, namely the side of the field, always looking very carefully at the match to check for offside positions and other offences.

Football is an extremely serious matter in Italy, and thus it is fundamental that you keep very close track of the ball for as much time as possible. This means that you want to maximise the number of kicks which you monitor closely. You are able to monitor closely a kick if, when it happens, you are in the position along the touch-line with minimum distance from the place where the kick happens.

Fortunately, expert analysts have been able to accurately predict all the kicks which will occur during the game. That is, you have been given two lists of integers, \(t_1, \ldots, t_n\) and \(a_1, \ldots, a_n\), indicating that \(t_i\) seconds after the beginning of the match the ball will be kicked and you can monitor closely such kick if you are at the position \(a_i\) along the touch-line.

At the beginning of the game you start at position \(0\) and the maximum speed at which you can walk along the touch-line is \(v\) units per second (i.e., you can change your position by at most \(v\) each second). What is the maximum number of kicks that you can monitor closely?

Input

The first line contains two integers \(n\) and \(v\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le v \le 10^6\)) — the number of kicks that will take place and your maximum speed.

The second line contains \(n\) integers \(t_1, \ldots, t_n\) (\(1 \le t_i \le 10^9\)) — the times of the kicks in the match. The sequence of times is guaranteed to be strictly increasing, i.e., \(t_1 < t_2 < \cdots < t_n\).

The third line contains \(n\) integers \(a_1, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — the positions along the touch-line where you have to be to monitor closely each kick.

Output

Print the maximum number of kicks that you can monitor closely.

Note

In the first sample, it is possible to move to the right at maximum speed for the first \(3.5\) seconds and stay at position \(7\) until the first kick happens, and then immediately move right also at maximum speed to watch the second kick at position \(17\). There is no way to monitor closely the third kick after the second kick, so at most \(2\) kicks can be seen.

D. Is it rated - 3

*особая задача дп Комбинаторика математика

Input

The first line contains a string \(S\).

The second line contains an integer \(X\).

Constraints

  • \(|S|=3\)
  • \(0 \le X \le 10^9\)
  • The input is guaranteed to be valid.

B. Оптимальное разбиение

дп Структуры данных *2100

Дан массив \(a\), состоящий из \(n\) целых чисел. Ваша задача — разбить \(a\) на непустые подотрезки (всего существует \(2^{n-1}\) таких разбиений).

Пусть \(s=a_l+a_{l+1}+\ldots+a_r\). Значение подмассива \(a_l, a_{l+1}, \ldots, a_r\) равно:

  • \((r-l+1)\), если \(s>0\),
  • \(0\), если \(s=0\),
  • \(-(r-l+1)\), если \(s<0\).
Какую максимальную сумму значений подотрезков можно получить при оптимальном разбиении?
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^5\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(-10^9 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную сумму значений подотрезков, которую можно получить при оптимальном разбиении.

Примечание

Пример \(1\): одно из оптимальных разбиений выглядит так: \([1, 2]\), \([-3]\). \(1+2>0\), поэтому величина \([1, 2]\) равна \(2\). \(-3<0\), поэтому величина \([-3]\) равна \(-1\). \(2+(-1)=1\).

Пример \(2\): возможное оптимальное разбиение выглядит так: \([0, -2, 3]\), \([-4]\), сумма величин подотрезков равна \(3+(-1)=2\).

D. Удаление рёбер

Деревья дп Конструктив поиск в глубину и подобное *2900

Дано дерево (связный неориентированный граф без циклов) с \(n\) вершинами. Два ребра считаются смежными, если они имеют ровно один общий конец. За один ход вы можете удалить любое ребро, которое смежно четному количеству оставшихся ребер.

Удалите все ребра или установите, что это невозможно. Если существует несколько решений, выведите любое из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Далее следуют \(n-1\) строка. \(i\)-я из них содержит два целых числа \(u_i\), \(v_i\) (\(1 \le u_i,v_i \le n\)) — концы \(i\)-го ребра. Гарантируется, что описанный граф является деревом.

Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «NO», если невозможно удалить все ребра.

В противном случае выведите «YES» и в следующих \(n-1\) строке выведите возможный порядок удаления ребер. Для каждого ребра выведите его концы в любом порядке.

Примечание

Пример \(1\): можно удалить данное ребро, поскольку оно не смежно никакому ребру.

Пример \(2\): оба ребра смежны ровно одному ребру, поэтому невозможно удалить ни одно из них. Таким образом, ответ «NO».

Пример \(3\): ребро \(2-3\) смежно двум другим ребрам, поэтому его можно удалить. После этого также становится возможным удалить оставшиеся ребра.

E. Центроидные вероятности

бпф дп Комбинаторика математика *3000

Рассмотрим все деревья (связные неориентированные ациклические графы) на \(n\) вершинах (\(n\) нечетное, вершины пронумерованы от \(1\) до \(n\)) такие, что для каждого \(2 \le i \le n\) \(i\)-я вершина смежна ровно одной вершине с меньшим номером.

Для каждого \(i\) (\(1 \le i \le n\)) найдите количество деревьев, для которых \(i\)-я вершина является центроидом. Ответ может быть очень большим, поэтому выведите его по модулю \(998\,244\,353\).

Центроидом называется вершина, после удаления которой дерево разбивается на поддеревья, каждое из которых состоит из не более чем \((n-1)/2\) вершин.

Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(3 \le n < 2 \cdot 10^5\), \(n\) нечетное) — количество вершин в дереве.

Выходные данные

В одну строку выведите \(n\) целых чисел, \(i\)-е из которых должно быть равно ответу для \(i\)-й вершины (по модулю \(998\,244\,353\)).

Примечание

Пример \(1\): существует два возможных дерева: с ребрами \((1-2)\), и \((1-3)\) — здесь центроидом является вершина \(1\); и с ребрами \((1-2)\), и \((2-3)\) — здесь центроидом является вершина \(2\). Таким образом, ответ равен \(1, 1, 0\).

Пример \(2\): существует \(24\) возможных дерева. Например, подойдет дерево с ребрами \((1-2)\), \((2-3)\), \((3-4)\), и \((4-5)\). Здесь центроидом является вершина \(3\).

B. Волшебники и здоровенный приз

дп математика Теория вероятностей *1800

Для успешного участия в соревнованиях волшебников, нужно много тренироваться, поэтому проводятся многочисленные волшебные школы и магические сборы.

Одна из таких волшебных школ состоит из n туров, за каждый из которых победителю дают здоровенный приз. Школа проводится достаточно далеко, поэтому везти домой все призы придется сразу. А в сумках, которые Вы привезли с собой, есть место не более чем для k здоровенных призов.

Помимо того, что вы хотите суметь увезти все призы, вы также хотите хорошо выступить. Вы будете считать выступление хорошим, если вы выиграете не менее l туров.

Так как организаторы заметили по прошлым годам, что у участников есть проблемы с транспортировкой здоровенных призов (заклинание уменьшения призов еще, к сожалению, не изобретено), то за некоторые туры победителю, вместо здоровенного приза, выдают сумку. Каждая сумка характеризуется числом ai — количеством здоровенных призов, которые в нее поместятся.

Так же вы уже знаете тематику всех туров, поэтому можете оценить вероятность pi того, что вы выиграете i-ый тур. Пропускать тур вы не можете ни при каких обстоятельствах.

Найдите, с какой вероятностью вы выступите на сборах хорошо, но при этом сможете увести все призы (то есть все выигранные здоровенные призы можно будет поместить в выигранные и привезенные сумки).

Входные данные

В первой строке записано три целых числа n, l, k (1 ≤ n ≤ 200, 0 ≤ l, k ≤ 200) — количество туров, минимальное количество туров, которое надо выиграть, и количество свободных мест в сумках, которые вы привезли с собой под призы, соответственно.

Во второй строке записаны n целых чисел через пробел, pi (0 ≤ pi ≤ 100) — вероятность выигрыша i-ого тура в процентах.

В третьей строке записаны n целых чисел через пробел, ai (1 ≤ ai ≤ 200) — вместимость сумки, которую выдают за i-ый тур, или же -1, если в i-ый тур выдают здоровенный приз, а не сумку.

Выходные данные

Выведите единственное вещественное число — ответ на задачу. Ответ будет засчитан, если абсолютная или относительная погрешность не превосходит 10 - 6.

Примечание

В первом примере, чтобы увезти все призы необходимо либо ничего не выиграть, либо выиграть третий тур. Вариант «ничего не выиграть» не подходит под условие хорошего выступления. Значит, надо обязательно выиграть третий тур. При этом остальные условия будут соблюдены всегда. Вероятность выиграть третий тур равна 0.3.

Во втором примере с вероятностью 1.0 мы выигрываем единственный тур, и радостно увозим большую сумку за него.

F. Джи, видишь?

битмаски дп Комбинаторика *2400

Во время подготовки к ICPC команда «Jee You See» наткнулась на одну простую комбинаторную задачу. После большого количества вердиктов «Неправильный ответ» они решили сдаться и разбить выключить компьютер. Теперь они нуждаются в вашей помощи, чтобы дорешать задачу.

Вам даны 4 целых числа \(n\), \(l\), \(r\) и \(z\). Вычислите количество массивов \(a\) длины \(n\), состоящих из неотрицательных целых чисел таких, что:

Так как ответ может быть большим, выведите его по модулю \(10^9+7\).

Входные данные

Единственная строка содержит четыре целых числа \(n\), \(l\), \(r\), \(z\) (\(1 \le n \le 1000\), \(1\le l\le r\le 10^{18}\), \(1\le z\le 10^{18}\)).

Выходные данные

Выведите количество подходящих массивов \(a\) по модулю \(10^9+7\).

Примечание

Следующие массивы подходят в первом примере:

  • \([1, 0, 0]\);
  • \([0, 1, 0]\);
  • \([3, 2, 0]\);
  • \([2, 3, 0]\);
  • \([0, 0, 1]\);
  • \([1, 1, 1]\);
  • \([2, 2, 1]\);
  • \([3, 0, 2]\);
  • \([2, 1, 2]\);
  • \([1, 2, 2]\);
  • \([0, 3, 2]\);
  • \([2, 0, 3]\);
  • \([0, 2, 3]\).

Следующие массивы подходят во втором примере:

  • \([2, 0, 0, 0]\);
  • \([0, 2, 0, 0]\);
  • \([0, 0, 2, 0]\);
  • \([0, 0, 0, 2]\).

E. Прямой обход

Деревья дп Комбинаторика разделяй и властвуй снм сортировки хэши *2100

Дано корневое дерево из \(2^n - 1\) вершин. У каждой вершины дерева либо \(0\) сыновей, либо \(2\). Все листья дерева расположены на одинаковой глубине, а у каждой внутренней вершины один из сыновей является левым, а другой — правым. Формально, вам задано совершенное бинарное дерево.

Вершины дерева пронумерованы следующим образом:

  • номер корня — \(1\);
  • если номер внутренней вершины — \(x\), то номер ее левого сына — \(2x\), а номер правого сына — \(2x+1\).

На каждой вершине дерева записана буква A или буква B. Пусть буква на вершине \(x\) — это \(s_x\).

Назовем строкой прямого обхода вершины \(x\) строку, которая строится по следующим правилам:

  • если вершина \(x\) — лист, то строка прямого обхода \(x\) состоит из одного символа \(s_x\);
  • в противном случае строка прямого обхода \(x\) равна \(s_x + f(l_x) + f(r_x)\), где \(+\) обозначает конкатенацию строк, \(f(l_x)\)строка прямого обхода левого сына \(x\), а \(f(r_x)\)строка прямого обхода правого сына \(x\).

Строка прямого обхода всего дерева — это строка прямого обхода его корня.

А теперь — сама задача.

Вы должны посчитать количество различных строк, которые могут быть получены как строка прямого обхода заданного дерева, если до построения строки прямого обхода можно применить следующую операцию любое количество раз:

  • выбрать любую вершину \(x\), не являющуюся листом, и поменять местами ее детей (то есть левый сын становится правым, и наоборот).
Входные данные

В первой строке задано целое число \(n\) (\(2 \le n \le 18\)).

Во второй строке заданы \(2^n-1\) символов \(s_1, s_2, \dots, s_{2^n-1}\). Каждый символ —A или B. Символы не разделяются ни пробелами, ни чем-то еще.

Выходные данные

Выведите одно целое число — количество различных строк, которые можно получить в качестве строки прямого обхода дерева, если можно применить любое количество описанных в условии операций. Ответ может быть очень большим, поэтому выведите его по модулю \(998244353\).

F. Подсчет перестановок

бпф дп Комбинаторика математика Перебор *2700

Посчитайте количество таких перестановок \(p\) размера \(n\), в которых ровно \(k\) инверсий (пар индексов \((i, j)\), для которых \(i < j\) и \(p_i > p_j\)) и ровно \(x\) индексов \(i\), для которых \(p_i > p_{i+1}\).

Да, это вся задача. Удачи!

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 3 \cdot 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей три числа \(n\), \(k\) и \(x\) (\(1 \le n \le 998244352\); \(1 \le k \le 11\); \(1 \le x \le 11\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество перестановок, описанных в условии задачи. Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

C. Палиндромный базис

дп математика Перебор теория чисел *1500

Вам дано положительное целое число \(n\). Назовём некоторое положительное целое число \(a\) без лидирующих нулей палиндромным, если оно остаётся таким же после переворота порядка его цифр. Найдите количество способов представить \(n\) как сумму положительных палиндромных чисел. Два способа считаются различными, если количества вхождений хотя бы одного палиндромного числа в них различаются. Например, \(5=4+1\) и \(5=3+1+1\) считаются различными, но \(5=3+1+1\) и \(5=1+3+1\) считаются одинаковыми.

Формально, вам нужно найти количество различных мультимножеств положительных палиндромных чисел, сумма которых равна \(n\).

Поскольку ответ может быть очень большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит единственное целое число \(n\) (\(1\leq n\leq 4\cdot 10^4\)) — требуемую сумму палиндромных чисел.

Выходные данные

Для каждого набора входных данных выведите единственное целое число, обозначающее требуемый ответ по модулю \(10^9+7\).

Примечание

Для первого набора входных данных существует \(7\) способов представить \(5\) как сумму положительных палиндромных чисел:

  • \(5=1+1+1+1+1\)
  • \(5=1+1+1+2\)
  • \(5=1+2+2\)
  • \(5=1+1+3\)
  • \(5=2+3\)
  • \(5=1+4\)
  • \(5=5\)

Во втором наборе входных данных существует всего \(77\) способов представить \(12\) как сумму положительных целых чисел, но среди них представления \(12=2+10\), \(12=1+1+10\) и \(12=12\) не являются корректными представлениями \(12\) как сумму положительных палиндромных чисел, поскольку \(10\) и \(12\) не являются палиндромными числами. Таким образом, существует \(74\) способа представить \(12\) как сумму положительных палиндромных чисел.

G. Удали ориентированные ребра

графы дп поиск в глубину и подобное *2000

Дан ориентированный ацикличный граф, состоящий из \(n\) вершин и \(m\) ребер. Вершины пронумерованы от \(1\) до \(n\). В графе нет кратных ребер и петель.

Пусть \(\mathit{in}_v\) будет количеством входящих ребер (степень входа), а \(\mathit{out}_v\) будет количеством исходящих ребер (степень исхода) вершины \(v\).

Требуется удалить некоторые ребра из графа. Пусть новые степени будут \(\mathit{in'}_v\) и \(\mathit{out'}_v\).

Разрешается удалять ребра, только если выполняются следующие условия для каждой вершины \(v\):

  • \(\mathit{in'}_v < \mathit{in}_v\) or \(\mathit{in'}_v = \mathit{in}_v = 0\);
  • \(\mathit{out'}_v < \mathit{out}_v\) or \(\mathit{out'}_v = \mathit{out}_v = 0\).

Назовем множество вершин \(S\) красивым, если для каждой пары вершин \(v\) и \(u\) (\(v \neq u\)), таких, что \(v \in S\) и \(u \in S\), существует путь либо из \(v\) в \(u\), либо из \(u\) в \(v\) по неудаленным ребрам.

Какой максимальный возможный размер красивого множества \(S\) после того, как вы удалите некоторые ребра из графа, а степени входа и исхода всех вершин либо уменьшатся, либо останутся равны \(0\)?

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\); \(0 \le m \le 2 \cdot 10^5\)) — количество вершин и количество ребер графа.

В каждой из следующих \(m\) строк записаны два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\); \(v \neq u\)) — описание ребра.

Данные ребра образуют корректный ориентированный ацикличный граф. Кратные ребра отсутствуют.

Выходные данные

Выведите одно целое число — максимальный возможный размер красивого множества \(S\) после того, как вы удалите некоторые ребра из графа, а степени входа и исхода всех вершин либо уменьшатся, либо останутся равны \(0\).

Примечание

В первом примере можно удалить ребра \((1, 2)\) и \((2, 3)\). \(\mathit{in} = [0, 1, 2]\), \(\mathit{out} = [2, 1, 0]\). \(\mathit{in'} = [0, 0, 1]\), \(\mathit{out'} = [1, 0, 0]\). Можно видеть, что для всех \(v\) условия выполняются. Максимальное красивое множество \(S\) образовано вершинами \(1\) и \(3\). Они все еще соединены ребром напрямую, поэтому между ними есть путь.

Во втором примере нет ребер. Так как все \(\mathit{in}_v\) и \(\mathit{out}_v\) равны \(0\), оставить граф с нулем ребер разрешено. Есть \(5\) красивых множеств, в каждом содержится одна вершина. Поэтому максимальный размер множества равен \(1\).

В третьем примере можно удалить ребра \((7, 1)\), \((2, 4)\), \((1, 3)\) и \((6, 2)\). Максимальное красивое множество \(S = \{7, 3, 2\}\). Можно еще удалить ребро \((7, 3)\), и ответ не изменится.

Изображение графа с третьего примера:

F. Влад и отложенные дела

Деревья дп жадные алгоритмы поиск в глубину и подобное *1800

Влад и Настя живут в городе, состоящем из \(n\) домов и \(n-1\) дороги. Из каждого дома можно добраться до другого передвигаясь только по дорогам. То есть город представляет собой дерево.

Влад живёт в доме с номером \(x\), а Настя в доме с номером \(y\). Влад решил пойти к Насте в гости. Однако он вспомнил, что отложил на потом \(k\) дел, которые он должен сделать прежде чем прийти к Насте. Чтобы сделать \(i\)-е дело ему необходимо прийти в \(a_i\)-й дом, дела можно делать в любом порядке. За \(1\) минуту он может пройти от одного дома до другого, если их соединяет дорога.

Влад не очень любит пешие прогулки, поэтому его интересует, какое минимальное количество минут он должен потратить на дорогу, чтобы сделать все дела и после этого прийти к Насте. Дома \(a_1, a_2, \dots, a_k\) он может посетить в любом порядке. Любые Дома он может посещать многократно (если захочет).

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Перед каждым набором входных данных в тесте содержится пустая строка.

Первая строка набора входных данных содержит два числа \(n\) и \(k\) (\(1 \le k \le n \le 2\cdot 10^5\)) — количество домов и дел соответственно.

Вторая строка набора входных данных содержит два числа \(x\) и \(y\) (\(1 \le x, y \le n\)) — номера домов, в которых живут Влад и Настя, соответственно.

Третья строка набора входных данных содержит \(k\) целых чисел \(a_1, a_2, \dots, a_k\) (\(1 \le a_i \le n\)) — номера домов, в которые нужно зайти по дороге.

Следующие \(n-1\) строк содержат описание города, по два числа на строку \(v_j\) и \(u_j\) (\(1 \le u_j, v_j \le n\)) — номера домов, которые соединяет дорога \(j\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2\cdot10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите единственное число — минимальное количество минут, необходимых Владу на дорогу, чтобы сделать все дела и прийти к Насте.

Примечание

Дерево и оптимальный путь для первого теста:

\(1 \rightarrow 2 \rightarrow 1 \rightarrow 3\)

Дерево и оптимальный путь для второго теста:

\(3 \rightarrow 1 \rightarrow 3 \rightarrow 5 \rightarrow 2 \rightarrow 5 \rightarrow 6 \rightarrow 5\)

Дерево и оптимальный путь для третьего теста:

\(3 \rightarrow 5 \rightarrow 2\)

G. Сортировка блинчиков

дп *2300

Настя испекла \(m\) блинов и разложила по \(n\) тарелкам. Тарелки стоят в одном ряду и пронумерованы слева направо. На тарелку с номером \(i\) она положила \(a_i\) блинчиков.

Увидев тарелки, Влад решил привнести порядок в стопки и переложить некоторые блинчики. За один ход он может переложить один блинчик с любой тарелки на соседнюю, то есть выбрать тарелку \(i\) (\(a_i > 0\)) и сделать одно из следующих действий:

  • при \(i > 1\) переложить блинчик на тарелку с предыдущим индексом, после такого действия \(a_i = a_i - 1\) и \(a_{i - 1} = a_{i - 1} + 1\);
  • при \(i < n\) переложить блинчик на тарелку со следующим индексом, после такого действия \(a_i = a_i - 1\) и \(a_{i + 1} = a_{i + 1} + 1\).

Влад хочет сделать массив \(a\) невозрастающим, переложив при этом как можно меньше блинчиков. Помогите ему найти минимальное количество перекладываний, необходимых для этого.

Массив \(a=[a_1, a_2,\dots,a_n]\) называется невозрастающим, если \(a_i \ge a_{i+1}\) для всех \(i\) от \(1\) до \(n-1\).

Входные данные

Первая строка входных данных содержит два числа \(n\) и \(m\) (\(1 \le n, m \le 250\)) — количество тарелок и количество блинчиков соответственно.

Вторая строка содержит \(n\) чисел \(a_i\) (\(0 \le a_i \le m\)), сумма всех \(a_i\) равна \(m\).

Выходные данные

Выведите единственное число — минимальное количество перекладываний, необходимое чтобы сделать массив \(a\) невозрастающим.

Примечание

В первом примере нужно сначала переложить блинчик с тарелки \(1\), после чего \(a = [4, 4, 2, 3, 3, 3]\). После необходимо переложить блинчик с тарелки \(2\) на тарелку \(3\) и массив станет невозрастающим \(a = [4, 3, 3, 3, 3, 3]\).

G. Чёрно-белые сбалансированные поддеревья

графы Деревья дп поиск в глубину и подобное *1300

Вам дано подвешенное дерево из \(n\) вершин, пронумерованных от \(1\) до \(n\). Корнем является вершина \(1\). Также есть строка \(s\), задающая цвета всех вершин: если \(s_i = \texttt{B}\), то вершина \(i\) чёрная, а если \(s_i = \texttt{W}\), то вершина \(i\) белая.

Поддерево дерева называется сбалансированным, если количество белых вершин поддерева равняется количеству чёрных вершин поддерева. Посчитайте количество сбалансированных поддеревьев.

На картинке дерево при \(n=7\), \(a=[1,1,2,3,3,5]\) и \(s=\texttt{WBBWWBW}\). Поддерево вершины \(3\) сбалансированно.

Дерево — это связный граф без циклов. Подвешенное дерево — это дерево с выбранной вершиной, которую называют корнем. В этой задаче корнем каждого дерева является вершина \(1\).

Дерево описано массивом предков \(a_2, \dots, a_n\), содержащим \(n-1\) число: \(a_i\) — предок вершины с номером \(i\) для всех \(i = 2, \dots, n\). Предок вершины \(u\) это следующая вершина на простом пути от \(u\) к корню. Поддерево вершины \(u\) — это множество всех вершин, которые содержат \(u\) в пути к корню. Например на картинке выше, \(7\) в поддереве у \(3\), потому что простой путь \(7 \to 5 \to 3 \to 1\) проходит через \(3\). Обратите внимание, что сама вершина входит в своё поддерево, и поддеревом корня является всё дерево.

Входные данные

Первая строка входных данных содержит число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит число \(n\) (\(2 \le n \le 4000\)) — количество вершин в дереве.

Вторая строка каждого набора содержит \(n-1\) число \(a_2, \dots, a_n\) (\(1 \le a_i < i\)) — родители вершин \(2, \dots, n\).

Третья строка каждого набора содержит строку \(s\) длины \(n\), состоящую из символов \(\texttt{B}\) и \(\texttt{W}\) — раскраска дерева.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — количество сбалансированных поддеревьев.

Примечание

Первый пример изображён в условии. Только поддеревья вершин \(2\) и \(3\) сбалансированны.

Во втором примере только поддерево вершины \(1\) сбалансированно.

в третьем примере сбалансированны поддеревья вершин \(1\), \(3\), \(5\) и \(7\).

A. Tokitsukaze и странное неравенство

дп Перебор Структуры данных *1600

У Tokitsukaze есть перестановка \(p\) длины \(n\). Напомним, что перестановкой \(p\) длины \(n\) называется последовательность \(p_1, p_2, \ldots, p_n\), состоящая из \(n\) различных целых чисел, каждое из которых от \(1\) до \(n\) (\(1 \leq p_i \leq n\)).

Она хочет знать, сколько различных наборов индексов \([a,b,c,d]\) (\(1 \leq a < b < c < d \leq n\)) в этой перестановке удовлетворяют следующим двум неравенствам:

\(p_a < p_c\) и \(p_b > p_d\).

Обратите внимание, что два набора \([a_1,b_1,c_1,d_1]\) и \([a_2,b_2,c_2,d_2]\) считаются различными, если \(a_1 \ne a_2\), или \(b_1 \ne b_2\), или \(c_1 \ne c_2\), или \(d_1 \ne d_2\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Каждый набор входных данных состоит из двух строк.

В первой строке записано одно целое число \(n\) (\(4 \leq n \leq 5000\)) — длина перестановки \(p\).

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — перестановка \(p\).

Гарантируется, что сумма \(n\) по всем тестам не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных наборов индексов \([a,b,c,d]\).

Примечание

В первом наборе входных данных имеется \(3\) различных набора \([a,b,c,d]\).

\(p_1 = 5\), \(p_2 = 3\), \(p_3 = 6\), \(p_4 = 1\), где \(p_1 < p_3\) и \(p_2 > p_4\) удовлетворяет неравенству, поэтому один из \([a,b,c,d]\) наборов — это \([1,2,3,4]\).

Точно так же два других набора — это \([1,2,3,6]\) и \([2,3,5,6]\).

D. Tokitsukaze и перестановки

дп математика *2500

У Tokitsukaze есть перестановка \(p\). Она выполнила следующую операцию над \(p\) ровно \(k\) раз: за одну операцию для каждого \(i\) от \(1\) до \(n - 1\) по порядку, если \(p_i\) > \(p_{i+1}\), поменять местами \(p_i\), \(p_{i+1}\). Сделав ровно \(k\) таких операций, Tokitsukaze получила новую последовательность \(a\), очевидно, что последовательность \(a\) также является перестановкой.

После этого Tokitsukaze записала на бумаге последовательность значений \(v\) над \(a\). Обозначим последовательность значений \(v\) перестановки \(a\) длины \(n\), как \(v_i=\sum_{j=1}^{i-1}[a_i < a_j]\), где значение \([a_i < a_j]\) определяется как \(1\), если \(a_i < a_j\), иначе \(0\) (другими словами, \(v_i\) равно количеству элементов больших \(a_i\), которые находятся левее позиции \(i\)). Затем Tokitsukaze ушла на работу.

В доме Tokitsukaze живут три непослушных кота. Придя домой, она обнаружила, что бумага со значениями последовательности \(v\) прогрызена кошками в нескольких местах, и значения в этих местах неясно и может быть любым. Она забыла, какой была исходная перестановка \(p\). Она хочет знать, сколько существует различных перестановок \(p\), для которых последовательность значений \(v\) новой перестановки \(a\) после ровно \(k\) операций имеют ту же последовательность значений, что и последовательность \(v\), написанная на бумаге (не принимая во внимание испорченные позиции).

Поскольку ответ может быть слишком большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Каждый набор входных данных состоит из двух строк.

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^6\); \(0 \leq k \leq n-1\)) — длина перестановки и точное количество операций.

Вторая строка содержит \(n\) целых чисел \(v_1, v_2, \dots, v_n\) (\(-1 \leq v_i \leq i-1\)) — последовательность значений \(v\). \(v_i = -1\) означает, что \(i\)-я позиция \(v\) испорчена и может принимать любое значение.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных перестановок по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных только перестановка \(p=[5,4,3,2,1]\) удовлетворяет условию.

Во втором наборе входных данных имеется \(6\) перестановок, удовлетворяющих условию ограничения, а именно:

  • \([3,4,5,2,1]\) \(\rightarrow\) \([3,4,2,1,5]\) \(\rightarrow\) \([3,2,1,4,5]\);
  • \([3,5,4,2,1]\) \(\rightarrow\) \([3,4,2,1,5]\) \(\rightarrow\) \([3,2,1,4,5]\);
  • \([4,3,5,2,1]\) \(\rightarrow\) \([3,4,2,1,5]\) \(\rightarrow\) \([3,2,1,4,5]\);
  • \([4,5,3,2,1]\) \(\rightarrow\) \([4,3,2,1,5]\) \(\rightarrow\) \([3,2,1,4,5]\);
  • \([5,3,4,2,1]\) \(\rightarrow\) \([3,4,2,1,5]\) \(\rightarrow\) \([3,2,1,4,5]\);
  • \([5,4,3,2,1]\) \(\rightarrow\) \([4,3,2,1,5]\) \(\rightarrow\) \([3,2,1,4,5]\).

Таким образом, ровно через \(2\) операции все они станут \(a=[3,2,1,4,5]\), чья последовательность значений равна \(v=[0,1,2,0,0]\).

F. Tokitsukaze и драгоценные камни

дп математика *3500

У Tokitsukaze есть последовательность длины \(n\). Она очень любит драгоценные камни. Есть \(n\) видов драгоценных камней. Камни \(i\)-го вида находятся на \(i\)-й позиции, и на этой позиции есть \(a_i\) камней этого типа. Определим \(G(l,r)\) как мультимножество, содержащее все драгоценные камни на отрезке \([l,r]\).

Мультимножество драгоценных камней может быть представлено в виде \(S=[s_1,s_2,\ldots,s_n]\), которое представляет собой неотрицательную целочисленную последовательность длины \(n\) и означает, что \(S\) содержит \(s_i\) драгоценных камней \(i\)-го вида в мультимножестве. Мультимножество \(T=[t_1,t_2,\ldots,t_n]\) является мультиподмножеством \(S=[s_1,s_2,\ldots,s_n]\) тогда и только тогда, когда \(t_i\le s_i\) для любого \(i\), удовлетворяющего \(1\le i\le n\).

Теперь, учитывая два положительных целых числа \(k\) и \(p\), вам нужно вычислить результат

\(\)\sum_{l=1}^n \sum_{r=l}^n\sum\limits_{[t_1,t_2,\cdots,t_n] \subseteq G(l,r)}\left(\left(\sum_{i=1}^n p^{t_i}t_i^k\right)\left(\sum_{i=1}^n[t_i>0]\right)\right),\(\)

где \([t_i>0]=1\), если \(t_i>0\) и \([t_i>0]=0\), если \(t_i=0\).

Так как ответ может быть довольно большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит три целых числа \(n\), \(k\) и \(p\) (\(1\le n \le 10^5\); \(1\le k\le 10^5\); \(2\le p\le 998\,244\,351\)) — длина последовательности, числа \(k\) и \(p\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1\le a_i\le 998\,244\,351\)) — количество камней на \(i\)-й позиции .

Выходные данные

Выведите одно целое число — результат по модулю \(998\,244\,353\).

B2. Tokitsukaze и хорошая 01-строка (усложненная версия)

дп жадные алгоритмы реализация *1800

Это усложненная версия задачи. Единственная разница между двумя версиями состоит в том, что более сложная версия дополнительно требует минимального количества подотрезков.

У Tokitsukaze есть двоичная строка \(s\) длины \(n\), состоящая только из нулей и единиц, \(n\) является четным.

Теперь Tokitsukaze делит \(s\) на минимальное количество непрерывных подотрезков, так чтобы в каждом подотрезке все биты были одинаковы. После этого \(s\) считается хорошей, если длины всех подотрезков четны.

Например, если \(s\) равна «11001111», она будет разделена на «11», «00» и «1111». Их длины равны \(2\), \(2\), \(4\) соответственно, все числа четные, поэтому «11001111» хорошая. Другой пример, если \(s\) равна «1110011000», она будет разделена на «111», «00», «11» и «000», а их длины равна \(3\), \(2\), \(2\), \(3\). Очевидно, что «1110011000» не является хорошей.

Tokitsukaze хочет улучшить \(s\), изменив значения некоторых позиций в \(s\). В частности, она может выполнить операцию любое количество раз: изменить значение \(s_i\) на «0» или «1» (\(1 \leq i \leq n\)). Можете ли вы назвать ей минимальное количество операций, чтобы сделать \(s\) хорошей? При этом она также хочет знать минимальное количество подотрезков, на которые можно разделить \(s\), среди всевозможных решений, которые используют минимальное количество операций.

Входные данные

Первая строка содержит единственное положительное целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных.

Для каждого набора входных данных первая строка содержит единственное целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — длина \(s\), гарантируется, что \(n\) четно.

Вторая строка содержит двоичную строку \(s\) длины \(n\), состоящую только из нулей и единиц.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в одной строке два целых числа — минимальное количество операций, чтобы сделать \(s\) хорошей, и минимальное количество подотрезков, на которые можно разделить \(s\), среди всевозможных решений, которые используют минимальное количество операций.

Примечание

В первом наборе входных данных один из способов сделать \(s\) хорошей следующий.

Измените \(s_3\), \(s_6\) и \(s_7\) на «0», после чего \(s\) станет «1100000000», ее можно разделить на «11» и «00000000», длина которых составляет \(2\) и \(8\) соответственно, количество ее подотрезков равно \(2\). Существуют и другие способы использовать \(3\) операции, чтобы сделать \(s\) хорошей, например можно в итоге получить «1111110000», «1100001100», «1111001100», число подотрезков которых равно \(2\), \(4\), \(4\) соответственно. Легко заметить, что минимальное количество подотрезков среди всего минимального числа решений операций равно \(2\).

Во втором, третьем и четвертом наборах входных данных \(s\) изначально хорошая, поэтому никаких действий не требуется.

D. Граф? А... А я думал, барон...

Бинарный поиск графы дп поиск в глубину и подобное *1900

Однажды Маша прогуливалась по парку и нашла под деревом граф... Удивлены? Вы думали, что в этой задаче будет логичная обоснованная история? Не дождетесь! Так вот...

У Маши есть ориентированный граф, в \(i\)-й вершине которого записано некоторое целое положительное число \(a_i\). Изначально Маша может положить в некоторую вершину графа монетку. За один ход разрешается переместить монетку, которая сейчас находится в некоторой вершине \(u\), в любую вершину \(v\), такую что в графе существует ориентированное ребро \(u \to v\). Каждый раз, когда монетка оказывается в какой-либо вершине \(i\), Маша записывает в блокнот число \(a_i\) (в частности, когда Маша изначально кладет монетку в некоторую вершину графа, она пишет в блокнот число, записанное в этой вершине). Маша хочет сделать ровно \(k - 1\) ходов таким образом, чтобы максимальное число, записанное ей в блокноте, было как можно меньше.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le m \le 2 \cdot 10^5\), \(1 \le k \le 10^{18}\)) — количество вершин и ребер в графе, а также количество ходов, которое хочет сделать Маша, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^9\)) — числа, записанные в вершинах графа.

Каждая из следующих \(m\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u \ne v \le n\)) — это означает, что в графе существует ребро \(u \to v\).

Гарантируется, что граф не содержит петель и кратных ребер.

Выходные данные

Выведите одно целое число — минимальное значение максимального числа, которое Маша выписала в блокнот, при оптимальном перемещении монетки.

В случае, если Маше не удастся переместить монетку \(k - 1\) раз, в качестве ответа выведите число \(-1\).

Примечание

На изображении ниже приведен граф, описанный в первых двух примерах.

В первом примере можно выбрать в качестве изначальной вершину \(1\). После этого можно выполнить три хода: \(1 \to 3\), \(3 \to 4\) и \(4 \to 5\). В итоге в блокнот будут записаны числа \(1, 2, 3\) и \(4\).

Во втором примере можно выбрать в качестве изначальной вершину \(2\). После этого можно выполнить \(99\) ходов: \(2 \to 5\), \(5 \to 6\), \(6 \to 2\), \(2 \to 5\), и так далее. В итоге в блокнот будут записаны числа \(10, 4, 5, 10, 4, 5, \ldots, 10, 4, 5, 10\).

В третьем примере на имеющемся графе не удастся выполнить \(4\) хода.

E. Типичная вечеринка в общаге

битмаски дп Комбинаторика Строки *2400

Сегодня в общаге праздник  — приехал Олег, в честь чего девочки подарили ему строку. Олегу очень понравился подарок, поэтому он тут же придумал и предложил вам, лучшему его другу, следующую задачу.

Вам дана строка \(s\) длины \(n\), которая состоит из первых \(17\) строчных букв латинского алфавита {\(a\), \(b\), \(c\), \(\ldots\), \(p\), \(q\)} и знаков вопроса. А также \(q\) запросов. Каждый запрос характеризуется набором попарно различных строчных первых \(17\) букв латинского алфавита, которые можно использовать чтобы заменить знаки вопроса в строке \(s\).

Ответом на запрос является сумма количества различных подстрок, которые являются палиндромами, по всем строкам, которые можно получить из изначальной строки \(s\) путем замены знаков вопроса на разрешенные символы. Ответ необходимо посчитать по модулю \(998\,244\,353\).

Обратите внимание! Две подстроки являются различными, когда отличаются их позиции начала и окончания в строке. Т. е. количество различных подстрок, которые являются палиндромами, для строки aba будет \(4\): a, b, a, aba.

Рассмотрим примеры замены знаков вопроса на буквы. Например, из строки aba??ee при запросе {\(a\), \(b\)} можно получить строки ababaee или abaaaee но нельзя получить строки pizza, abaee, abacaba, aba?fee, aba47ee, или abatree.

Напомним, что палиндромом называется строка, которая одинаково читается как слева направо, так и справа налево.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1\,000\)) — длина строки \(s\).

Вторая строка содержит строку \(s\), которая состоит из \(n\) строчных букв латинского алфавита и знаков вопроса. Гарантируется, что все буквы в строке принадлежат множеству {\(a\), \(b\), \(c\), \(\ldots\), \(p\), \(q\)}.

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Далее следуют \(q\) строк в каждой из которых содержится единственная строка \(t\) — набор символов, которыми можно заменять знаки вопроса (\(1 \le |t| \le 17\)). Гарантируется, что все буквы в строке принадлежат множеству {\(a\), \(b\), \(c\), \(\ldots\), \(p\), \(q\)} и встречаются не более одного раза.

Выходные данные

На каждый запрос выведите одно число — суммарное количество подстрок-палиндромов во всех возможных строках, которые можно получить из строки \(s\), по модулю \(998\,244\,353\).

Примечание

Рассмотрим первый пример и первый запрос в нём. У нас может получится только одна строка по итогам замены знаков вопроса  — abaaaba. В ней есть такие подстроки-палиндромы:

  1. a  — подстрока [\(1\); \(1\)].
  2. b  — подстрока [\(2\); \(2\)].
  3. a  — подстрока [\(3\); \(3\)].
  4. a  — подстрока [\(4\); \(4\)].
  5. a  — подстрока [\(5\); \(5\)].
  6. b  — подстрока [\(6\); \(6\)].
  7. a  — подстрока [\(7\); \(7\)].
  8. aa  — подстрока [\(3\); \(4\)].
  9. aa  — подстрока [\(4\); \(5\)].
  10. aba  — подстрока [\(1\); \(3\)].
  11. aaa  — подстрока [\(3\); \(5\)].
  12. aba  — подстрока [\(5\); \(7\)].
  13. baaab  — подстрока [\(2\); \(6\)].
  14. abaaaba  — подстрока [\(1\); \(7\)].

В третьем запросе у нас может получится 4 строки: abaaaba, abababa, abbaaba, abbbaba.

F. Формализм ради формализма

битмаски дп математика *2600

Юра, будучи математиком, уже настолько преисполнился в своем познании, что он уже сто триллионов миллиардов лет решает формальные задачи, в которых нет ни капли легенды. Эта задача именно такая!

Рассмотрим все целые неотрицательные числа из промежутка \([0, 10^{n})\). Для удобства дополним все числа ведущими нулями таким образом, чтобы любое число из данного промежутка состояло ровно из \(n\) десятичных цифр.

Пусть имеется также некоторый набор пар \((u_i, v_i)\), где \(u_i\) и \(v_i\) — различные цифры от \(0\) до \(9\).

Рассмотрим число \(x\), состоящее из \(n\) цифр. Пронумеруем цифры слева направо и обозначим их как \(d_1, d_2, \ldots, d_n\). За одну операцию разрешается поменять местами цифры \(d_i\) и \(d_{i + 1}\) тогда и только тогда, когда существует такая пара \((u_j, v_j)\), что верно хотя бы одно из условий:

  1. \(d_i = u_j\) и \(d_{i + 1} = v_j\),
  2. \(d_i = v_j\) и \(d_{i + 1} = u_j\).

Назовем числа \(x\) и \(y\), состоящие из \(n\) цифр, эквивалентными, если из числа \(x\) можно получить число \(y\), пользуясь только операциями, описанными выше. В частности, любое число считается эквивалентным самому себе.

Дано число \(n\) и набор из \(m\) пар цифр \((u_i, v_i)\). Найдите максимальное \(k\), такое что существует множество чисел \(x_1, x_2, \ldots, x_k\) (\(0 \le x_i < 10^{n}\)), для которого верно, что для любых \(1 \le i < j \le k\) число \(x_i\) не эквивалентно числу \(x_j\).

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 50\,000\)) — количество цифр в рассматриваемых числах.

Вторая строка содержит целое число \(m\) (\(0 \le m \le 45\)) — количество пар цифр.

Каждая из следующих \(m\) строк содержит две цифры \(u_i\) и \(v_i\), записанные через пробел (\(0 \le u_i < v_i \le 9\)).

Гарантируется, что все пары цифр различны.

Выходные данные

Выведите одно число — максимальное число \(k\), такое что существует множество чисел \(x_1, x_2, \ldots, x_k\) (\(0 \le x_i < 10^{n}\)), для которого верно, что для любых \(1 \le i < j \le k\) число \(x_i\) не эквивалентно числу \(x_j\).

Так как ответ может быть достаточно большим, выведите остаток от деления числа \(k\) на \(998\,244\,353\).

Примечание

В первом примере можно составить множество, состоящее из всех чисел от \(0\) до \(9\), так как никакие два числа не являются эквивалентными друг другу.

Во втором примере существует единственная пара эквивалентных чисел: \(01\) и \(10\). В качестве ответа можно, например, взять множество всех чисел от \(0\) до \(99\), кроме числа \(1\).

E. Двигающиеся фигуры

битмаски дп жадные алгоритмы *2000

Вам дана доска размера \(2 \times n\) (\(2\) строки, \(n\) столбцов). В некоторых клетках доски находятся фигуры. Фигура представлена символом '*', а пустое место представлено символом '.'. Гарантируется, что на доске находится хотя бы одна фигура.

За один ход вы можете выбрать любую фигуру и сдвинуть ее в любую соседнюю (по стороне) клетку доски (если эта клетка находится на доске). Это значит, что если фигура находится в первом ряду, вы можете сдвинуть ее влево, вправо или вниз (но она не должна покидать пределы доски). То же самое с фигурой во второй строке — вы можете сдвинуть ее влево, вправо или вверх.

Если фигура попадает в клетку с другой фигурой, фигура в клетке назначения исчезает (то есть наша фигура ест ее).

Ваша задача — найти минимальное количество ходов, необходимое для того, чтобы оставить ровно одну фигуру на доске.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину доски. Вторая строка набора тестовых данных содержит строку \(s_1\), состоящую из \(n\) символов '*' (фигура) и/или '.' (пустая клетка). Третья строка набора тестовых данных содержит строку \(s_2\), состоящую из \(n\) символов '*' (фигура) и/или '.' (пустая клетка).

Дополнительные ограничения на входные данные:

  • в каждом наборе тестовых данных есть хотя бы одна фигура на доске;
  • сумма \(n\) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).
Выходные данные

Для каждого набора тестовых данных выведите одно целое число — минимальное количество ходов, необходимое для того, чтобы оставить ровно одну фигуру на доске.

D. Требуемая длина

дп кратчайшие пути Перебор поиск в глубину и подобное хэши *1700

Даны два целых числа, \(n\) и \(x\). Вы можете провести несколько операций с числом \(x\).

Каждая операция заключается в следующем: выбрать любую цифру \(y\), которая встречается в десятичной записи \(x\) хотя бы один раз, и заменить значение \(x\) на \(x \cdot y\).

Вы должны сделать так, чтобы длина десятичной записи \(x\) (без ведущих нулей) стала равна \(n\). Какое минимальное количество операций вам потребуется для этого?

Входные данные

В единственной строке заданы два целых числа \(n\) и \(x\) (\(2 \le n \le 19\); \(1 \le x < 10^{n-1}\)).

Выходные данные

Выведите одно целое число — минимальное количество операций, необходимое, чтобы сделать длину десятичной записи \(x\) (без ведущих нулей) равной \(n\), или \(-1\), если это невозможно.

Примечание

Во втором примере следующая последовательность операций позволяет достичь цели:

  1. умножить \(x\) на \(2\), тогда \(x = 2 \cdot 2 = 4\);
  2. умножить \(x\) на \(4\), тогда \(x = 4 \cdot 4 = 16\);
  3. умножить \(x\) на \(6\), тогда \(x = 16 \cdot 6 = 96\);
  4. умножить \(x\) на \(9\), тогда \(x = 96 \cdot 9 = 864\).

E. Приключения в лабиринте

дп кратчайшие пути матрицы Структуры данных *2600

Вы нашли карту лабиринта довольно странной формы. Карта представляет собой сетку, разделенную на \(n\) строк и \(n\) столбцов. Строки карты пронумерованы от \(1\) до \(n\) снизу вверх. Столбцы карты пронумерованы от \(1\) до \(n\) слева направо.

В лабиринте есть \(n\) слоев. Первый слой — это левый нижний угол (ячейка \((1, 1)\)). Второй слой состоит из всех ячеек, которые внутри сетки и смежны с первым слоем по стороне или по углу. Третий слой состоит из всех ячеек, которые внутри сетки и смежны со вторым слоем по стороне или по углу.

Лабиринт из \(5\) слоев, например, выглядит следующим образом:

Слои отделены друг от друга стенами. Однако, в этих стенах есть двери.

В каждом слое (кроме слоя \(n\)) есть ровно две двери в следующий слой. Одна дверь размещена на верхней стене слоя, а другая дверь размещена на правой стене слоя. Для каждого слоя от \(1\) до \(n-1\) вам даны позиции этих двух дверей. Через эти двери можно ходить в обоих направлениях: либо из слоя \(i\) в слой \(i+1\), либо из слоя \(i+1\) в слой \(i\).

Если вы находитесь в какой-либо ячейке лабиринта, то вы можете переместиться в соседнюю по стороне клетку, если путь не преграждает стена (то есть нельзя переместиться в клетку в другом слое, если между клетками нет двери).

Вам нужно обработать \(m\) запросов следующего вида: какое минимальное количество ходов необходимо сделать, чтобы дойти из клетки \((x_1, y_1)\) в клетку \((x_2, y_2)\)?

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество слоев в лабиринте.

В \(i\)-й из следующих \(n-1\) строк записаны четыре целых числа \(d_{1,x}, d_{1,y}, d_{2,x}\) and \(d_{2,y}\) (\(1 \le d_{1,x}, d_{1,y}, d_{2,x}, d_{2,y} \le n\)) — координаты дверей. Обе ячейки находятся на \(i\)-м слое. Первая ячейка смежна с верхней стеной \(i\)-го слоя по стороне — эта сторона — это место двери. Вторая ячейка смежна с правой стеной \(i\)-го слоя по стороне — эта сторона — это место двери.

В следующей строке записано одно целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество запросов.

В \(j\)-й из следующих \(m\) строк записаны четыре целых числа \(x_1, y_1, x_2\) and \(y_2\) (\(1 \le x_1, y_1, x_2, y_2 \le n\)) — координаты ячеек в \(j\)-м запросе.

Выходные данные

На каждый запрос выведите одно целое число — минимальное количество ходов, которое необходимо сделать, чтобы дойти из клетки \((x_1, y_1)\) в клетку \((x_2, y_2)\).

Примечание

Здесь изображена карта лабиринта из второго примера. Двери отмечены красным.

F. Уникальные вхождения

Деревья дп поиск в глубину и подобное разделяй и властвуй снм Структуры данных *2300

Задано дерево, состоящее из \(n\) вершин. На каждом ребре написано целое число.

Пусть \(f(v, u)\) будет равно количеству значений, которые встречаются ровно один раз на ребрах на простом пути между \(v\) и \(u\).

Посчитайте сумму \(f(v, u)\) по всем парам вершин \(v\) и \(u\), для которых \(1 \le v < u \le n\).

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 5 \cdot 10^5\)) — количество вершин в дереве.

В каждой из следующих \(n-1\) строк записаны три целых числа \(v, u\) и \(x\) (\(1 \le v, u, x \le n\)) — описание ребра: вершины, которое оно соединяет, и значение, написанное на нем.

Заданные ребра образуют дерево.

Выходные данные

Выведите одно целое число — сумму \(f(v, u)\) по всем парам вершин \(v\) и \(u\) таким, что \(v < u\).

B. Нечетные подмассивы

дп жадные алгоритмы *800

Для массива \([b_1, b_2, \ldots, b_m]\) определим его число инверсий как количество пар \((i, j)\) целых чисел таких, что \(1 \le i < j \le m\) и \(b_i>b_j\). Назовем массив \(b\) нечетным, если его число инверсий нечетно.

Например, массив \([4, 2, 7]\) является нечетным, так как его число инверсий равно \(1\), а массив \([2, 1, 4, 3]\)  — нет, так как его число инверсий равно \(2\).

Вам дана перестановка \([p_1, p_2, \ldots, p_n]\) целых чисел от \(1\) до \(n\) (каждое из них встречается в перестановке ровно один раз). Вы хотите разбить ее на несколько последовательных подмассивов (возможно, всего один) так, чтобы число нечетных подмассивов среди них было как можно больше.

Какое наибольшее число этих подмассивов может быть нечетным?

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^5\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\))  — размер перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны)  — элементы перестановки.

Сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число  — наибольшее возможное количество нечетных подмассивов, которое можно получить после разбиения перестановки на несколько последовательных подмассивов.

Примечание

В первом и третьем наборах входных данных, независимо от того, как мы разобьём нашу перестановку, не будет ни одного нечетного подмассива.

Во втором наборе входных данных мы можем разбить нашу перестановку на подмассивы \([4, 3], [2, 1]\), оба из которых нечетные, так как число инверсий в них равно \(1\).

В четвертом наборе входных данных мы можем разбить нашу перестановку на один подмассив \([2, 1]\), который является нечетным.

В пятом наборе входных данных мы можем разбить нашу перестановку на подмассивы \([4, 5], [6, 1, 2, 3]\). Первый подмассив имеет \(0\) инверсий, а второй  — \(3\), поэтому он нечетный.

C. Зараженное дерево

Деревья дп поиск в глубину и подобное *1600

Байтландия — прекрасная земля, известная своими красивыми деревьями.

Миша нашел бинарное дерево с \(n\) вершинами, пронумерованными от \(1\) до \(n\). Бинарное дерево — это ациклический связный неориентированный граф, содержащий \(n\) вершин и \(n - 1\) ребер. Каждая вершина имеет степень не больше \(3\), а корнем является вершина с номером \(1\) и имеет степень не больше \(2\).

К сожалению, корень дерева был заражен. Следующий процесс происходит \(n\) раз:

  • Миша либо выбирает еще не зараженную (и не удаленную) вершину и удаляет ее со всеми ребрами, имеющими конец в этой вершине, либо ничего не делает.
  • Затем заражение распространяется на каждую вершину, соединенную ребром с уже зараженной вершиной (все уже зараженные вершины остаются зараженными).

Так как Мише некогда думать, скажите ему, какое максимальное количество вершин он может спасти от заражения (обратите внимание, что удаленные вершины не считаются спасенными).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\leq t\leq 5000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2\leq n\leq 3\cdot 10^5\)) — количество вершин дерева.

В \(i\)-й из следующих \(n-1\) строк набора входных данных задано два числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\)), обозначающих очередное ребро дерева.

Гарантируется, что граф является бинарным деревом с корнем в вершине \(1\). Также гарантируется, что сумма \(n\) по всем наборам не превышает \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — ответ на задачу.

Примечание

В первом наборе входных данных единственным возможным действием является удаление вершины \(2\), после чего мы спасли \(0\) вершин.

Во втором наборе входных данных, если мы удалим вершину \(2\), мы сможем спасти вершины \(3\) и \(4\).

D. Лена и матрица

геометрия дп кратчайшие пути Структуры данных *1900

Лена — красивая девушка, которая любит логические головоломки.

В подарок на день рождения Лена получила матрицу-головоломку!

Матрица состоит из \(n\) строк и \(m\) столбцов, и каждая ячейка либо черная, либо белая. Координаты \((i,j)\) обозначает ячейку, которая находится в \(i\)-й строке и \(j\)-м столбце для любых \(1\leq i \leq n\) и \(1\leq j \leq m\). Чтобы решить головоломку, Лена должна выбрать какую-то ячейку так, чтобы минимизировать манхэттенское расстояние от этой ячейки до самой дальней от нее черной клетки.

Более формально, пусть в матрице \(k \ge 1\) черных ячеек с координатами \((x_i,y_i)\) для каждого \(1\leq i \leq k\). Лене нужно так выбрать ячейку \((a,b)\), чтобы минимизировать \(\)\max_{i=1}^{k}(|a-x_i|+|b-y_i|).\(\)

Поскольку у Лены нет нужных навыков, она попросила вас о помощи. Скажите ей оптимальную клетку, которую нужно выбрать.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано два целых числа \(n\) и \(m\) (\(2\leq n,m \leq 1000\))  — размеры матрицы.

Следующие \(n\) строк содержат по \(m\) символов, каждый символ это «W» или «B». \(j\)-й символ в \(i\)-й строке равен «W», если ячейка \((i,j)\) белая, и «B», если ячейка \((i,j)\) черная.

Гарантируется, что в матрице есть как минимум одна черная клетка.

Также гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите оптимальную ячейку \((a,b)\). Если существует несколько оптимальных ответов, выведите любой.

Примечание

В первом наборе входных данных две черные клетки имеют координаты \((1,1)\) и \((3,2)\). Четыре оптимальные ячейки: \((1,2)\), \((2,1)\), \((2,2)\) и \((3,1)\). Можно показать, что никакая другая ячейка не минимизирует максимальное манхэттенское расстояние до самой дальней черной клетки.

Во втором наборе входных данных оптимально выбрать черную клетку \((2,2)\) с максимальным манхэттенским расстоянием \(2\).

F. Дерево и k-подмножества

Деревья дп Комбинаторика математика поиск в глубину и подобное *2500

Вам дано дерево \(G\) из \(n\) вершин, а также целое число \(k\). Вершины дерева пронумерованы от \(1\) до \(n\).

Для некоторой вершины \(r\) и подмножества \(S\) вершин дерева \(G\) такого, что \(|S| = k\), определим \(f(r, S)\) как размер наименьшего корневого поддерева, содержащего все вершины \(S\) при условии, что корнем дерева является вершина \(r\). Множество вершин \(T\) называется корневым поддеревом, если все вершины в \(T\) связны и для любой вершины в \(T\) все ее потомки тоже принадлежат \(T\).

Вам нужно вычислить сумму \(f(r, S)\) по всем различным комбинациям вершины \(r\) и подмножества \(S\), где \(|S| = k\). Формально, вычислите следующее: \(\)\sum_{r \in V} \sum_{S \subseteq V, |S| = k} f(r, S),\(\) где \(V\) — множество вершин дерева \(G\).

Выведите ответ по модулю \(10^9 + 7\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(3 \le n \le 2 \cdot 10^5\), \(1 \le k \le n\)).

Каждая из следующих \(n - 1\) строк содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\)), обозначающих ребро между вершинами \(x\) и \(y\).

Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите ответ по модулю \(10^9 + 7\).

Примечание

Дерево во втором примере показано ниже:

Всего в этом дереве \(21\) подмножество вершин размера \(2\). А именно, \(\)S \in \left\{\{1, 2\}, \{1, 3\}, \{1, 4\}, \{1, 5\}, \{1, 6\}, \{1, 7\}, \{2, 3\}, \{2, 4\}, \{2, 5\}, \{2, 6\}, \{2, 7\}, \{3, 4\}, \{3, 5\}, \{3, 6\}, \{3, 7\}, \{4, 5\}, \{4, 6\}, \{4, 7\}, \{5, 6\}, \{5, 7\}, \{6, 7\} \right\}.\(\) Так как в дереве \(7\) вершин, \(1 \le r \le 7\). Нужно найти сумму \(f(r, S)\) по всем парам \(r\) и \(S\).

Ниже перечислены значения \(f(r, S)\) для некоторых комбинаций \(r\) и \(S\).

  • \(r = 1\), \(S = \{3, 7\}\). Значение \(f(r, S)\) равно \(5\), а соответствующее поддерево равно \(\{2, 3, 4, 6, 7\}\).
  • \(r = 1\), \(S = \{5, 4\}\). Значение \(f(r, S)\) равно \(7\), а соответствующее поддерево равно \(\{1, 2, 3, 4, 5, 6, 7\}\).
  • \(r = 1\), \(S = \{4, 6\}\). Значение \(f(r, S)\) равно \(3\), а соответствующее поддерево равно \(\{4, 6, 7\}\).

G. 2^Сортировка

дп сортировки Структуры данных *1400

Вам дан массив \(a\) длины \(n\) и число \(k\). Посчитайте количество подмассивов \([a_i, \dots, a_{i+k}]\) (здесь \(1 \leq i \leq n - k\)) длины \(k+1\) удовлетворяющих следующим условиям:

  • Если умножить первый элемент подмассива на \(2^0\), второй на \(2^1\), ..., и (\(k+1\))-й элемент на \(2^k\), то этот подмассив будет строго возрастающим.

Более формально, найдите количество индексов \(1 \leq i \leq n - k\) таких, что удовлетворяется \(k\) неравенств: \(\)2^0 \cdot a_i < 2^1 \cdot a_{i+1} < 2^2 \cdot a_{i+2} < \dots < 2^k \cdot a_{i+k}.\(\)

Входные данные

Первая строка содержит единственное число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

В первой строке каждого набора содержатся два целых числа \(n\), \(k\) (\(3 \leq n \leq 2 \cdot 10^5\), \(1 \leq k < n\)).

Во второй строке каждого набора содержатся \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива.

Сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите единственное число — количество индексов, удовлетворяющих условиям.

Примечание

В первом наборе оба подмассива удовлетворяют условиям:

  • \(i=1\): помассив \([a_1,a_2,a_3] = [20,22,19]\), и \(1 \cdot 20 < 2 \cdot 22 < 4 \cdot 19\).
  • \(i=2\): подмассив \([a_2,a_3,a_4] = [22,19,84]\), и \(1 \cdot 22 < 2 \cdot 19 < 4 \cdot 84\).
Во втором наборе три подмассива удовлетворяют условиям:
  • \(i=1\): подмассив \([a_1,a_2] = [9,5]\), и \(1 \cdot 9 < 2 \cdot 5\).
  • \(i=2\): подмассив \([a_2,a_3] = [5,3]\), и \(1 \cdot 5 < 2 \cdot 3\).
  • \(i=3\): подмассив \([a_3,a_4] = [3,2]\), и \(1 \cdot 3 < 2 \cdot 2\).
  • \(i=4\): подмассив \([a_4,a_5] = [2,1]\), но \(1 \cdot 2 = 2 \cdot 1\), так что этот подмассив не удовлетворяет условиям.

H. Азартные игры

дп жадные алгоритмы математика Структуры данных *1700

Мариан пришёл в казино. Игры в казино проходят следующим образом.

Перед каждым раундом игрок выбирает число от \(1\) до \(10^9\). После этого бросается игральная кость с \(10^9\) сторонами, и выпадает случайное число от \(1\) до \(10^9\). Если игрок угадал выпавшее число, количество его денег удваивается, в противном случае количество его денег уменьшается вдвое.

Мариан умеет предсказывать будущее, поэтому он знает все числа \(x_1, x_2, \dots, x_n\) которые выпадут на игральной кости в следующих \(n\) раундах.

Мариан хочет выбрать три числа \(a\), \(l\), \(r\) (\(l \leq r\)). Он будет играть \(r-l+1\) раунд (раунды с номерами от \(l\) до \(r\)). В каждом из этих раундов он будет загадывать одно и тоже число \(a\). На старте (перед раундом \(l\)) у него \(1\) доллар.

Мариан просит вас найти такие \(a\), \(l\) и \(r\) (\(1 \leq a \leq 10^9\), \(1 \leq l \leq r \leq n\)) таких, что в конце игры у него будет максимальная сумма денег.

Заметьте, что при проигрыше или выигрыше (т.е. уменьшении или увеличении количества денег вдвое) количество денег не округляется. Все операции деления/умножения проводятся с бесконечной точностью. Например, во время игры Мариан может иметь количество денег, равное \(\dfrac{1}{1024}\), \(\dfrac{1}{128}\), \(\dfrac{1}{2}\), \(1\), \(2\), \(4\), и т.д. (любое значение \(2^t\), где \(t\) — целое число любого знака).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \leq n \leq 2\cdot 10^5\)) — количество раундов в игре.

Вторая строка каждого набора содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \leq x_i \leq 10^9\)), где \(x_i\) — число, которое выпадет на игральной кости в \(i\)-м раунде.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора выведите три числа — \(a\), \(l\), и \(r\) таких, что выигрыш Мариана в казино будет максимальным. Если существует несколько различных ответов, вы можете вывести любой из них.

Примечание

В первом наборе лучшим выбором будет \(a=4\), \(l=1\), \(r=5\). Игра пройдёт следующим образом:

  • Мариан начинает игру с одним долларом.
  • После первого раунда у Мариана будет \(2\) доллара, так как он угадал выпавшее число.
  • После второго раунда у Мариана будет \(4\) доллара, так как он вновь угадал выпавшее число.
  • После третьего раунда у Мариана будет \(2\) доллара, так как он загадал \(4\), а выпало число \(3\).
  • После четвертого раунда у Мариана вновь будет \(4\) доллара.
  • В последнем раунде Мариан закончит с \(8\) долларами, так как он вновь угадал выпавшее число.

Для второго набора есть много подходящих ответов, однако можно доказать что Мариан не может закончить играть с более чем \(2\) долларами, так что любой выбор \(l = r\) с подходящим \(a\) будет приемлемым.

B. Фейковые пластиковые деревья

Деревья дп жадные алгоритмы поиск в глубину и подобное *1700

Нам дано корневое дерево, состоящее из \(n\) вершин, пронумерованных от \(1\) до \(n\). Корнем дерева является вершина \(1\), а родителем вершины \(v\) является \(p_v\).

В каждой вершине записано число, изначально все числа равны \(0\). Обозначим число, записанное в вершине \(v\), как \(a_v\).

Для каждой \(v\) мы хотим, чтобы \(a_v\) находилось между \(l_v\) и \(r_v\) \((l_v \leq a_v \leq r_v)\).

За одну операцию мы делаем следующее:

  • Выбираем некоторую вершину \(v\). Пусть \(b_1, b_2, \ldots, b_k\)  — вершины на пути от вершины \(1\) до вершины \(v\) (то есть \(b_1 = 1\), \(b_k = v\) и \(b_i = p_{b_{i + 1}}\)).
  • Выберем неубывающий массив \(c\) длины \(k\) из неотрицательных целых чисел: \(0 \leq c_1 \leq c_2 \leq \ldots \leq c_k\).
  • Для каждого \(i\) \((1 \leq i \leq k)\), увеличим \(a_{b_i}\) на \(c_i\).

Какое минимальное количество операций необходимо для достижения нашей цели?

Входные данные

Первая строка содержит целое число \(t\) \((1\le t\le 1000)\)  — количество наборов входных данных. Далее следует описание наборов входных данныхв.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((2\le n\le 2 \cdot 10^5)\)  — количество вершин в дереве.

Вторая строка каждого набора входных данных содержит \(n - 1\) целых чисел, \(p_2, p_3, \ldots, p_n\) \((1 \leq p_i < i)\), где \(p_i\) обозначает родителя вершины \(i\).

В \(i\)-й из следующих \(n\) строк содержится два целых числа \(l_i\) и \(r_i\) \((1 \le l_i \le r_i \le 10^9)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимально необходимое количество операций.

Примечание

В первом наборе входных данных мы можем достичь цели с помощью одной операции: выбрать \(v = 2\) и \(c = [1, 2]\), в результате чего \(a_1 = 1, a_2 = 2\).

Во втором наборе входных данных мы можем достичь цели с помощью двух операций: сначала выбираем \(v = 2\) и \(c = [3, 3]\), в результате чего \(a_1 = 3, a_2 = 3, a_3 = 0\). Затем выбираем \(v = 3, c = [2, 7]\), в результате \(a_1 = 5, a_2 = 3, a_3 = 7\).

D. Разбиение на возрастающую и спадающую

дп жадные алгоритмы Перебор разделяй и властвуй Структуры данных *2800

Назовем массив \(a\) из \(m\) целых чисел \(a_1, a_2, \ldots, a_m\) Decinc, если \(a\) можно сделать возрастающим, удалив из него убывающую подпоследовательность (возможно, пустую).

  • Например, если \(a = [3, 2, 4, 1, 5]\), мы можем удалить из \(a\) убывающую подпоследовательность \([a_1, a_4]\) и получить \(a = [2, 4, 5]\), которая является возрастающей.

Вам дана перестановка \(p\) чисел от \(1\) до \(n\). Найдите количество пар целых чисел \((l, r)\) с \(1 \le l \le r \le n\) таких, что \(p[l \ldots r]\) (подмассив \(p\) от \(l\) до \(r\)) является Decinc массивом.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\))  — размер \(p\).

Вторая строка содержит \(n\) целых \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны)  — элементы перестановки.

Выходные данные

Выведите количество пар целых чисел \((l, r)\) таких, что \(p[l \ldots r]\) (подмассив \(p\) от \(l\) до \(r\)) является Decinc массивом. \((1 \le l \le r \le n)\)

Примечание

В первом примере все подмассивы являются Decinc.

Во втором примере все подмассивы, кроме \(p[1 \ldots 6]\) и \(p[2 \ldots 6]\) являются Decinc.

C. Нулевой путь

графы дп жадные алгоритмы кратчайшие пути Перебор Структуры данных *1700

Вам дана таблица с \(n\) строк и \(m\) столбцов. Обозначим ячейку в \(i\)-й (\(1\le i\le n\)) строке и \(j\)-м (\(1\le j\le m\)) столбце через \((i, j)\), а число в ней через \(a_{ij}\). Все числа равны \(1\) или \(-1\).

Вы начинаете с ячейки \((1, 1)\) и можете перемещаться на одну ячейку вниз или вправо за один раз. В конце концов, вы хотите оказаться в ячейке \((n, m)\).

Можно ли двигаться таким образом, чтобы сумма значений, записанных во всех посещенных ячейках (включая \(a_{11}\) и \(a_{nm}\)), была равна \(0\)?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \leq t \leq 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 1000\))  — размер таблицы.

Каждая из следующих \(n\) строк содержит \(m\) целых чисел. \(j\)-е целое число в \(i\)-й строке это \(a_{ij}\) (\(a_{ij} = 1\) или \(-1\))  — элемент в ячейке \((i, j)\).

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует путь из левого верхнего угла в правый нижний, который дает в сумме \(0\), и «NO» в противном случае. Вы можете выводить каждую букву в любом регистре.

Примечание

Один из возможных путей для четвертого набора входных данных приведен на рисунке в утверждении.

D1. Запросы в дереве (простая версия)

Деревья дп жадные алгоритмы Конструктив Перебор поиск в глубину и подобное *2200

Единственное отличие этой задачи от D2  — ограничение на размер дерева.

Вам дано некорневое дерево с \(n\) вершинами. В этом дереве есть некоторая скрытая вершина \(x\), которую вы пытаетесь найти.

Для этого вы можете задать \(k\) запросов \(v_1, v_2, \ldots, v_k\), где \(v_i\)  — вершины дерева. После того, как вы закончили задавать все запросы, вам дается \(k\) чисел \(d_1, d_2, \ldots, d_k\), где \(d_i\)  — количество ребер на кратчайшем пути между \(v_i\) и \(x\). Обратите внимание, что вы знаете, какое расстояние соответствует какому запросу.

Найдите минимальное \(k\), при котором существуют некоторые запросы \(v_1, v_2, \ldots, v_k\), позволяющие всегда однозначно определить \(x\) (независимо от того, какой \(x\) выбран).

Обратите внимание, что выводить эти запросы не нужно.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2000\))  — количество вершин в дереве.

Каждая из следующих \(n-1\) строк содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\)), означающие, что между вершинами \(x\) и \(y\) в дереве есть ребро.

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое неотрицательное число  — минимальное количество запросов, которое вам необходимо.

Примечание

В первом наборе входных данных есть только одна вершина, поэтому никаких запросов не требуется.

Во втором наборе входных данных достаточно задать единственный запрос о вершине \(1\). Тогда, если \(x = 1\), вы получите \(0\), в противном случае  — \(1\).

D2. Запросы в дереве (сложная версия)

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное *2300

Единственное отличие этой задачи от D1  — ограничение на размер дерева.

Вам дано некорневое дерево с \(n\) вершинами. В этом дереве есть некоторая скрытая вершина \(x\), которую вы пытаетесь найти.

Для этого вы можете задать \(k\) запросов \(v_1, v_2, \ldots, v_k\), где \(v_i\)  — вершины дерева. После того, как вы закончили задавать все запросы, вам дается \(k\) чисел \(d_1, d_2, \ldots, d_k\), где \(d_i\)  — количество ребер на кратчайшем пути между \(v_i\) и \(x\). Обратите внимание, что вы знаете, какое расстояние соответствует какому запросу.

Найдите минимальное \(k\), при котором существуют некоторые запросы \(v_1, v_2, \ldots, v_k\), позволяющие всегда однозначно определить \(x\) (независимо от того, какой \(x\) выбран).

Обратите внимание, что выводить эти запросы не нужно.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2\cdot10^5\))  — количество вершин в дереве.

Каждая из следующих \(n-1\) строк содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\)), означающие, что между вершинами \(x\) и \(y\) в дереве есть ребро.

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое неотрицательное число  — минимальное количество запросов, которое вам необходимо.

Примечание

В первом наборе входных данных есть только одна вершина, поэтому никаких запросов не требуется.

Во втором наборе входных данных достаточно задать единственный запрос о вершине \(1\). Тогда, если \(x = 1\), вы получите \(0\), в противном случае  — \(1\).

H. Максимальное произведение?

дп жадные алгоритмы Комбинаторика математика Перебор реализация *3500

Вам дано положительное целое число \(k\). Для мультимножества целых чисел \(S\) определим \(f(S)\) следующим образом:

  • Если количество элементов в \(S\) меньше чем \(k\), то \(f(S)=0\).
  • Иначе определим \(f(S)\) как максимально возможное произведение при выборе ровно \(k\) элементов из \(S\).

Более формально, пусть \(|S|\) означает число элементов в \(S\). Тогда,

  • Если \(|S|<k\), то \(f(S)=0\).
  • Иначе \(f(S)=\max\limits_{T\subseteq S,|T|=k}\left(\prod\limits_{i\in T}i\right)\).

Вам дано мультимножество целых чисел \(A\). Вычислите \(\sum\limits_{B\subseteq A} f(B)\) по модулю \(10^9+7\).

Обратите внимание, что в этой задаче элементы считаются различными, если они имеют различные индексы, но необязательно различные значения. То есть мультимножество, состоящее из \(n\) элементов, всегда содержит \(2^n\) различных подмножеств вне зависимости от того, равны ли в нём какие-то элементы или нет.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\), где \(n\) — количество элементов в \(A\) (\(1\le k\le n\le 600\)).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\), задающих элементы \(A\) (\(-10^9\le a_i\le 10^9\)).

Выходные данные

Выведите \(\sum\limits_{B\subseteq A} f(B)\) по модулю \(10^9+7\).

Примечание

Рассмотрим первый тестовый пример. Из определения,

  • \(f(\varnothing)=0\)
  • \(f(\{-1\})=0\)
  • \(f(\{2\})=0\)
  • \(f(\{4\})=0\)
  • \(f(\{-1,2\})=-2\)
  • \(f(\{-1,4\})=-4\)
  • \(f(\{2,4\})=8\)
  • \(f(\{-1,2,4\})=8\)

Таким образом, вывести необходимо \((0+0+0+0-2-4+8+8)\bmod (10^9+7)=10\).

Во втором тестовом примере мультимножество, хоть и состоит из трёх равных элементов, содержит \(8\) различных подмножеств: \(\varnothing,\{1\},\{1\},\{1\},\{1,1\},\{1,1\},\{1,1\},\{1,1,1\}\).

E. Раскраска

геометрия графы дп жадные алгоритмы Комбинаторика Конструктив математика Перебор реализация *2400

Заданы \(n\) точек на плоскости, координаты \(i\)-й из них — \((x_i, y_i)\). Ни у каких двух точек не совпадают координаты.

Расстояние между точками \(i\) и \(j\) определено как \(d(i,j) = |x_i - x_j| + |y_i - y_j|\).

Для каждой точки необходимо выбрать цвет — целое число от \(1\) до \(n\). Для каждой упорядоченной тройки различных точек \((a,b,c)\) должны выполняться следующие условия:

  • если \(a\), \(b\) и \(c\) покрашены в одинаковый цвет, то \(d(a,b) = d(a,c) = d(b,c)\);
  • если \(a\) и \(b\) покрашены в одинаковый цвет, а цвет \(c\) отличен от цвета \(a\), то \(d(a,b) < d(a,c)\) и \(d(a,b) < d(b,c)\).

Посчитайте количество различных способов выбрать цвета, чтобы удовлетворить данные условия.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 100\)) — количество точек.

Затем следуют \(n\) строк. В \(i\)-й из них записаны два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i, y_i \le 10^8\)).

Ни у каких двух точек не совпадают координаты (т. ею если \(i \ne j\), то либо \(x_i \ne x_j\), либо \(y_i \ne y_j\)).

Выходные данные

Выведите одно целое число — количество различных способов выбрать цвета точек. Так как оно может быть довольно велико, выведите его остаток от деления на \(998244353\).

Примечание

В первом тесте подходят следующие способы выбрать цвета:

  • \([1, 1, 1]\);
  • \([2, 2, 2]\);
  • \([3, 3, 3]\);
  • \([1, 2, 3]\);
  • \([1, 3, 2]\);
  • \([2, 1, 3]\);
  • \([2, 3, 1]\);
  • \([3, 1, 2]\);
  • \([3, 2, 1]\).

D. Почти тройные удаления

дп жадные алгоритмы Структуры данных *2300

Вам дано целое число \(n\) и массив целых чисел \(a_1,a_2,\ldots,a_n\).

За одну операцию вы можете выбрать индекс \(i\) (\(1 \le i \lt n\)), для которого \(a_i \neq a_{i+1}\), и удалить оба элемента \(a_i\) и \(a_{i+1}\) из массива. После удаления \(a_i\) и \(a_{i+1}\) оставшиеся части массива соединяются.

Например, если \(a=[1,4,3,3,6,2]\), то после применения операции с \(i=2\) получившийся массив будет равен \([1,3,6,2]\).

Какова максимальная возможная длина массива из равных элементов, который можно получить из \(a\) применением нескольких (возможно, нуля) операций, описанных выше?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 5000\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10\,000\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальную возможную длину массива из равных элементов, который можно получить из \(a\) применением некоторой последовательности операций.

Примечание

Для первого набора входных данных оптимальной последовательностью операций будет: \([1,2,3,2,1,3,3] \rightarrow [3,2,1,3,3] \rightarrow [3,3,3]\).

Во втором наборе входных данных все элементы массива уже равны.

В третьем наборе входных данных единственной возможной последовательностью операций является: \([1,1,1,2,2,2] \rightarrow [1,1,2,2] \rightarrow [1,2] \rightarrow []\). Обратите внимание, что по условию два удаляемых элемента должны быть различны.

В четвёртом наборе входных данных оптимальной последовательностью является: \([1,1,2,2,3,3,1,1] \rightarrow [1,1,2,3,1,1] \rightarrow [1,1,1,1]\).

В пятом наборе входных данных единственным массивом из двух равных элементов, который можно получить, является \([4,4]\).

E. Three Days Grace

дп жадные алгоритмы математика Структуры данных теория чисел *2600

Ibti раздумывал о хорошем названии для этой задачи, которое подойдёт к теме раунда (число три). Он сразу подумал о третьей производной, но это было довольно глупо, поэтому он решил включить лучшую группу в мире — Three Days Grace.

Вам дано мультимножество \(A\) изначального размера \(n\), элементы которого — целые числа от \(1\) до \(m\). За одну операцию можно сделать следующее:

  • выбрать значение \(x\) из мультимножества \(A\), затем
  • выбрать два целых числа \(p\) и \(q\) такие, что \(p, q > 1\) и \(p \cdot q = x\). Добавить \(p\) и \(q\) в \(A\), удалить \(x\) из \(A\).

Заметьте, что размер мультимножества \(A\) увеличивается на \(1\) после каждой операции.

Назовём балансом мультимножества \(A\) значение \(\max(a_i) - \min(a_i)\). Найдите минимально возможный баланс после применения нескольких (возможно, нуля) операций.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(m\) (\(1 \le n \le 10^6\), \(1 \le m \le 5 \cdot 10^6\)) — изначальный размер мультимножества и максимально возможное значение числа в мультимножестве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le m\)) — элементы в изначальном мультимножестве.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\) и сумма \(m\) по всем наборам входных данных не превосходит \(5 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимально возможный баланс.

Примечание

В первом наборе входных данных мы можем применить операцию к каждому из чисел \(4\) с \((p,q) = (2,2)\) и сделать мультимножество \(\{2,2,2,2,2,2,2\}\) с балансом \(\max(\{2,2,2,2,2,2,2\}) - \min(\{2,2,2,2,2,2,2\}) = 0\). Очевидно, мы не можем сделать баланс меньше \(0\).

Во втором входных данных мы можем применить операция к \(12\) с \((p,q) = (3,4)\). После этого мультимножество станет равным \(\{3,4,2,3\}\). Мы можем применить ещё одну операцию к числу \(4\) с \((p,q) = (2,2)\), сделав мультимножество \(\{3,2,2,2,3\}\) с балансом \(1\).

В третьем входных данных мы можем применить операцию к \(35\) с \((p,q) = (5,7)\). Итоговое мультимножество будет \(\{6,5,7\}\) с балансом \(7-5 = 2\).

В четвёртом наборе входных данных мы не может применить никакую операцию, поэтому ответ равен \(5 - 1 = 4\).

C. Баланс

дп *2500

Никита очень любит строки, любит их ворочать, сортировать, что-то менять местами... И вот в очередной раз он написал на листочке случайную строку из символов a, b, c, и стал делать следующие операции:

  • взять два соседних символа строки и заменить второй символ первым,
  • взять два соседних символа строки и заменить первый символ вторым.

Чтобы лучше понять эти действия, рассмотрим их на примере строки «abc». С помощью какой-то одной операции из неё можно получить следующие строки: «bbc», «abb», «acc». Определим для каждой буквы a, b и c величину размер множества буквы — количество вхождений этой буквы в строку. Например, для строки «abc»: |a| = 1, |b| = 1, |c| = 1, а для строки «bbc»: |a| = 0, |b| = 2, |c| = 1.

Выполняя описанные операции, Никита иногда получал сбалансированные строки. Будем называть строку сбалансированной, если размеры множеств букв отличаются друг от друга не больше чем на 1. То есть  - 1 ≤ |a| - |b| ≤ 1,  - 1 ≤ |a| - |c| ≤ 1 и  - 1 ≤ |b| - |c| ≤ 1.

Помогите Никите посчитать количество различных сбалансированных строк, которые можно получить, применяя многократно вышеуказанные операции к заданной строке s. Это число требуется посчитать по модулю 51123987.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 150) — длина заданной строки s. Следующая строка содержит s. Строка с самого начала может быть сбалансированной, в этом случае её тоже нужно включить в ответ. Заданная строка s содержит только буквы a, b и c.

Выходные данные

В единственной строке выходных данных выведите количество различных сбалансированных строк, которые могут быть получены из заданной строки s многократным применением описанных операций. Ответ нужно выводить по модулю 51123987.

Примечание

В первом примере с помощью описанных операций можно получить 51 различную строку, но только 7 из них будут сбалансированными: «abca», «bbca», «bcca», «bcaa», «abcc», «abbc», «aabc». Во втором примере: «abbc», «aabc», «abcc». В третьем примере единственная строка, которая будет сбалансированной — это она сама, «ab».

D. Шлюзы

Бинарный поиск дп жадные алгоритмы математика *1900

Недавно в Диваново построили огромную шлюзовую систему. Всего было построено \(n\) шлюзов, \(i\)-й из них имеет объем \(v_i\) литров, то есть в любой момент времени в нем может находиться любой объем воды от \(0\) до \(v_i\) литров. В каждый шлюз ведет труба, при открытии которой в шлюз будет поступать по \(1\) литру воды в секунду.

Шлюзовая система устроена так, что если доливать воду в \(i\)-й шлюз сверх его объема, то он будет моментально передавать всю лишнюю воду шлюзу с номером \(i + 1\). Если шлюз c номером \(i + 1\) тоже станет заполнен, то вся лишняя вода будет переливаться дальше. Вода из последнего шлюза будет выливаться в реку.

Рисунок показывает \(5\) шлюзов с открытыми трубами к шлюзам \(1\) и \(3\). Так как шлюзы \(1\), \(3\) и \(4\) уже заполнены, фактически вода идет в шлюзы \(2\) и \(5\).

Обратите внимание, что объем \(i\)-го шлюза может быть больше объема \(i + 1\)-го шлюза.

Для того, чтобы шлюзы начали функционировать, необходимо заполнить каждый из них. Мэра Дивановской области интересует \(q\) независимых запросов. Для каждого запроса предположим, что изначально все шлюзы пусты и все трубы закрыты, затем одновременно открываются несколько труб. Для \(j\)-го запроса мэр хочет знать, какое минимальное число труб надо включить, чтобы не позже чем через \(t_j\) секунд все шлюзы стали заполнены.

Помогите мэру справиться с этой сложной задачей, и ответьте на все его запросы!

Входные данные

В первой строке вводится одно целое число \(n\) (\(1 \le n \le 200\,000\)) — количество шлюзов.

Во второй строке вводятся \(n\) целых чисел \(v_1, v_2, \dots, v_n\) (\(1 \le v_i \le 10^9\)) — объемы шлюзов.

В третьей строке вводится одно целое число \(q\) (\(1 \le q \le 200\,000\)) — число запросов.

В следующих \(q\) строках вводится по одному целому числу \(t_j\) (\(1 \le t_j \le 10^9\)) — время, за которое нужно наполнить все шлюзы в \(j\)-м запросе.

Выходные данные

Выведите \(q\) чисел. \(j\)-е из них должно быть равно минимальному числу труб, которые придётся открыть, чтобы наполнить все шлюзы за время \(t_j\). Если за это время наполнить всю шлюзы невозможно, то выведите \(-1\).

Примечание

В первом примере есть \(6\) запросов.

В запросах \(1, 3, 4\) ответ \(-1\). Чтобы заполнить первый шлюз нужно подождать \(4\) секунды, даже если открыть все трубы.

Во шестом запросе можно открыть трубы в шлюзах \(1\), \(3\) и \(4\). Так через \(4\) секунды заполнятся шлюзы \(1\) и \(4\). В следующую \(1\) секунду \(1\) литр воды перельётся в шлюзы \(2\) и \(5\). Шлюз \(3\) будет заполнен своей трубой.

Аналогично во втором запросе можно открыть трубы в шлюзах \(1\), \(3\) и \(4\).

В пятом запросе можно открыть трубы в шлюзах с номерами \(1, 2, 3, 4\).

F. Пазл

дп жадные алгоритмы Конструктив *2600

Школьники Алиса и Ибрагим — лучшие друзья. У Ибрагима скоро день рождения, и по этому поводу Алиса решила подарить ему новый пазл. Пазл можно представить в виде матрицы из \(2\) строк и \(n\) столбцов, каждый элемент которой — \(0\), либо \(1\). За один ход можно поменять местами два элемента, стоящие в соседних клетках.

Более формально, будем считать, что строки матриц пронумерованы сверху вниз от \(1\) до \(2\), а столбцы — слева направо от \(1\) до \(n\). Обозначим клетку на пересечении строки \(x\) и столбца \(y\) за \((x, y)\). Будем считать две клетки \((x_1, y_1)\) и \((x_2, y_2)\) соседними, если \(|x_1 - x_2| + |y_1 - y_2| = 1\).

Алисе не нравится, какой рисунок образуют клетки пазла в данный момент. Она придумала свой рисунок, с которым и планирует подарить Ибрагиму новый пазл. Помогите Алисе найти минимальное количество ходов, за которое она может получить свой рисунок, или скажите, что это невозможно.

Входные данные

В первой строке записано число \(n\) (\(1 \leq n \leq 200\,000\)) — количество столбцов в пазле.

Следующие две строки описывают рисунок, образованный пазлом в данный момент. В каждой строке записано \(n\) чисел, каждое из которых равно либо \(0\), либо \(1\).

Следующие две строки описывают желаемый рисунок Алисы в том же формате.

Выходные данные

Если Алиса не ошиблась и её рисунок можно получить — найдите и выведите минимальное необходимое количество ходов, иначе выведите \(-1\).

Примечание

В первом примере из условия подойдет следующая последовательность обменов:

  • \((2, 1), (1, 1)\),
  • \((1, 2), (1, 3)\),
  • \((2, 2), (2, 3)\),
  • \((1, 4), (1, 5)\),
  • \((2, 5), (2, 4)\).

Можно показать, что меньшим числом обменов обойтись нельзя, поэтому ответ равен \(5\).

Во втором примере из условия никакая последовательность ходов не приводит пазл к нужному виду. Следовательно, ответ \(-1\).

E. Текстовый редактор

дп жадные алгоритмы Перебор Строки *2500

Вы хотели написать текст \(t\), состоящий из \(m\) строчных букв латинского алфавита. Но вместо этого вы написали текст \(s\), состоящий из \(n\) строчных букв латинского алфавита, и теперь вы хотите исправить это, получив текст \(t\) из текста \(s\).

Изначально курсор вашего текстового редактора находится в конце текста \(s\) (после последнего символа текста). За один ход вы можете совершить одно из следующих действий:

  • нажать кнопку «влево», таким образом, курсор переместится на одну позицию влево (или не сделает ничего, если он уже указывает на начало текста, то есть стоит перед первым символом текста);
  • нажать кнопку «вправо», таким образом, курсор переместится на одну позицию вправо (или не сделает ничего, если он уже указывает на конец текста, то есть стоит после последнего символа текста);
  • нажать кнопку «home», таким образом, курсор переместится в начало текста (на позицию перед первым символом текста);
  • нажать кнопку «end», таким образом, курсор переместится в конец текста (на позицию после последнего символа текста);
  • нажать кнопку «backspace», таким образом, символ слева от курсора удалится из текста (если такого символа нет, ничего не произойдет).

Ваша задача — посчитать минимальное количество ходов, необходимое для того, чтобы получить текст \(t\) из текста \(s\) при помощи заданного набора действий, или же определить, что невозможно получить текст \(t\) из текста \(s\).

Вам необходимо ответить на \(T\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(T\) (\(1 \le T \le 5000\)) — количество наборов тестовых данных. Затем следуют \(T\) наборов тестовых данных.

Первая строка набора содержит два целых числа \(n\) и \(m\) (\(1 \le m \le n \le 5000\)) — длину \(s\) и длину \(t\), соответственно.

Вторая строка набора содержит строку \(s\), состоящую из \(n\) строчных букв латинского алфавита.

Третья строка набора содержит строку \(t\), состоящую из \(m\) строчных букв латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превосходит \(5000\) (\(\sum n \le 5000\)).

Выходные данные

Для каждого набора выведите одно целое число — минимальное количество ходов, необходимое для того, чтобы получить текст \(t\) из текста \(s\) при помощи заданного набора действий, или же -1, если невозможно получить текст \(t\) из текста \(s\) в данном наборе тестовых данных.

F. Очередная задача про пары, удовлетворяющие неравенству

Бинарный поиск дп жадные алгоритмы сортировки Структуры данных *1300

Вам дан массив целых чисел \(a_1, a_2, \dots a_n\). Найдите число пар индексов \(1 \leq i, j \leq n\) таких, что \(a_i < i < a_j < j\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — длину массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — количество пар индексов, удовлетворяющих неравенству из условия.

Пожалуйста, обратите внимание, что ответ для некоторых тестовых примеров может не поместиться в 32-разрядный целочисленный тип, поэтому вы должны использовать по крайней мере 64-разрядный целочисленный тип в вашем языке программирования (например, long long для C++).

Примечание

В первом наборе входных данных пары \((i, j)\) = \(\{(2, 4), (2, 8), (3, 8)\}\).

  • Пара \((2, 4)\) подходит, потому что \(a_2 = 1\), \(a_4 = 3\) и \(1 < 2 < 3 < 4\).
  • Пара \((2, 8)\) подходит, потому что \(a_2 = 1\), \(a_8 = 4\) и \(1 < 2 < 4 < 8\).
  • Пара \((3, 8)\) подходит, потому что \(a_3 = 2\), \(a_8 = 4\) и \(2 < 3 < 4 < 8\).

G. Хороший ключ, плохой ключ

битмаски дп жадные алгоритмы математика Перебор *1600

У вас есть \(n\) сундуков. \(i\)-й сундук содержит \(a_i\) монет. Вы должны открыть все \(n\) сундуков по порядку, начиная с сундука \(1\), заканчивая сундуком \(n\).

Также существуют два вида ключей, которые вы можете использовать для открытия каждого сундука:

  • хороший ключ, который стоит \(k\) монет;
  • плохой ключ, который бесплатен, но уменьшит вдвое количество монет в каждом неоткрытом сундуке, включая сундук, который собираются им открыть. Уменьшаясь вдвое, количество монет округляется вниз до ближайшего целого числа для каждого из сундуков. Иными словами, если используется плохой ключ, чтобы открыть сундук \(i\), количества монет в сундуках изменятся следующим образом: \(a_i = \lfloor{\frac{a_i}{2}\rfloor}\), \(a_{i+1} = \lfloor\frac{a_{i+1}}{2}\rfloor, \dots, a_n = \lfloor \frac{a_n}{2}\rfloor\);
  • любой ключ (и хороший и плохой) ломается после использования, то есть является одноразовым.

Вам необходимо использовать \(n\) ключей, по одному на каждый сундук. Изначально у вас нет ключей и монет. Если вы хотите использовать хороший ключ, то его надо купить.

В процессе вы можете уходить в минус — например, если у вас есть \(1\) монета, вы можете купить хороший ключ за \(k=3\) монеты, и у вас станет \(-2\) монеты.

Найдите максимальное количество монет, которое вы сможете получить в итоге после открытия всех \(n\) сундуков по порядку от \(1\) до \(n\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В первой строке каждого набора содержатся два целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^5\), \(0 \leq k \leq 10^9\)) — количество сундуков и стоимость хорошего ключа соответственно.

Вторая строка каждого набора содержит \(n\) чисел \(a_i\) (\(0 \leq a_i \leq 10^9\))  — количество монет в каждом из сундуков.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора выведите одно число  — максимальное количество монет, которое вы сможете получить после открытия сундуков с \(1\) по \(n\).

Пожалуйста, обратите внимание, что ответ для некоторых наборов входных данных может не поместиться в 32-разрядный целочисленный тип, поэтому вы должны использовать по крайней мере 64-разрядный целочисленный тип в вашем языке программирования (например, long long для C++).

Примечание

В первом наборе одна из возможных стратегий следующая:

  • Купить хороший ключ за \(5\) монет, и открыть сундук \(1\), получив \(10\) монет. Ваш баланс станет \(0 + 10 - 5 = 5\) монет.
  • Купить хороший ключ за \(5\) монет, и открыть сундук \(2\), получив \(10\) монет. Ваш баланс станет \(5 + 10 - 5 = 10\) монет.
  • Использовать плохой ключ, и открыть им сундук \(3\). В результате использования плохого ключа, количество монет в сундуке \(3\) становится \(\left\lfloor \frac{3}{2} \right\rfloor = 1\), и количество монет в сундуке \(4\) становится \(\left\lfloor \frac{1}{2} \right\rfloor = 0\). Ваш баланс станет \(10 + 1 = 11\).
  • Использовать плохой ключ, и открыть им сундук \(4\). В результате использования плохого ключа, количество монет в сундуке \(4\) станет \(\left\lfloor \frac{0}{2} \right\rfloor = 0\). Ваш баланс станет \(11 + 0 = 11\).
После открытия всех сундуков, у вас останется \(11\) монет. Можно доказать, что получить больше монет невозможно.

E. Посчитать секунды

графы дп Конструктив математика Перебор реализация *2200

У Cirno есть ориентированный ациклический граф с \(n\) вершинами и \(m\) ребрами. В графе ровно одна вершина, не имеющая исходящих ребер. На \(i\)-й вершине написано целое число \(a_i\).

Каждую секунду происходит следующее:

  • Пусть \(S\) — множество вершин \(x\), у которых \(a_x > 0\).
  • Для всех \(x \in S\) из \(a_x\) вычитается \(1\), а затем для каждой вершины \(y\) такой, что существует ребро из \(x\) в \(y\), \(1\) прибавляется к \(a_y\).

Найдите первый момент времени, когда все \(a_i\) станут равны \(0\). Так как ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1 \leq n, m \leq 1000\)) — количество вершин и ребер в графе.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — числа, записанные в вершинах.

Следующие \(m\) строк содержит два целых числа \(x, y\) (\(1 \leq x, y \leq n\)), обозначающих ориентированное ребро из \(x\) в \(y\). Гарантируется, что граф является ориентированным ациклическим, без кратных ребер, и ровно одна вершина не имеет исходящих ребер.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных меньше или равны \(10\,000\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите целое число — первый момент времени, когда все \(a_i\) станут \(0\), по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных:

  • В момент времени \(0\) значения узлов равны \([1, 1, 1]\).
  • В момент времени \(1\) значения узлов равны \([0, 1, 1]\).
  • В момент времени \(2\) значения узлов равны \([0, 0, 1]\).
  • В момент времени \(3\) значения узлов равны \([0, 0, 0]\).
Так что ответ равен \(3\).

Во втором наборе входных данных:

  • В момент времени \(0\) значения узлов равны \([1, 0, 0, 0, 0]\).
  • В момент времени \(1\) значения узлов равны \([0, 1, 0, 0, 1]\).
  • В момент времени \(2\) значения узлов равны \([0, 0, 1, 0, 0]\).
  • В момент времени \(3\) значения узлов равны \([0, 0, 0, 1, 0]\).
  • В момент времени \(4\) значения узлов равны \([0, 0, 0, 0, 1]\).
  • В момент времени \(5\) значения узлов равны \([0, 0, 0, 0, 0]\).
Итак, ответ равен \(5\).

В третьем наборе входных данных:

Первый момент времени, когда все \(a_i\) становятся \(0\), равен \(6\cdot 998244353 + 4\).

F. Игра-раскраска

дп игры Конструктив *2600

Алиса и Боб играют в игру. В строке \(n\) ячеек. Изначально каждая ячейка либо красная, либо синяя. Алиса ходит первой.

На каждом ходу Алиса выбирает две соседние клетки, в которых есть хотя бы одна красная клетка, и окрашивает эти две клетки в белый цвет. Затем Боб выбирает две соседние клетки, содержащие хотя бы одну синюю клетку, и окрашивает эти две клетки в белый цвет. Игрок, который не может сделать ход, проигрывает.

Определите победителя, если и Алиса, и Боб играют оптимально.

Обратите внимание, что выбранная ячейка может быть белой, если другая ячейка удовлетворяет ограничениям.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Для каждого набора входных данных первая строка содержит целое число \(n\) (\(2 \leq n \leq 5 \cdot 10^5\)) — количество ячеек.

Вторая строка содержит строку \(s\) длины \(n\) — начальное состояние ячеек. \(i\)-я ячейка красная, если \(s_i = \)R, и синяя, если \(s_i = \)B.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите имя победителя в отдельной строке.

Примечание

В первом наборе входных данных у Алисы есть два варианта: закрасить первую и вторую клетки или закрасить вторую и третью клетки. Какой бы выбор ни сделала Алиса, после хода Алисы останется ровно одна синяя клетка. Бобу нужно просто закрасить синюю клетку и ее соседнюю, тогда каждая клетка будет белой и Алиса не сможет сделать ход. Итак, Боб — победитель.

Во втором наборе входных данных независимо от того, что выберет Алиса, Боб может закрасить четвертую и пятую клетки за \(2\) хода.

В третьем наборе входных данных сначала Алиса красит третью и четвертую клетки. Неважно, закрашивает ли Боб первую и вторую клетки или пятую и шестую, Алиса может закрасить две другие клетки.

В четвертом наборе входных данных сначала Алиса красит вторую и третью клетки. Если Боб закрашивает пятую и шестую клетки или четвертую и пятую клетки, то Алиса закрашивает седьмую и восьмую клетки. Если Боб закрашивает седьмую и восьмую клетки, то Алиса закрашивает пятую и шестую клетки.

В пятом наборе входных данных Алиса сначала выбирает две средние клетки, затем у Боба, очевидно, есть только два варианта, какой бы вариант он ни выбрал, Алиса может выбрать другой и выиграть.

В восьмом наборе входных данных независимо от того, что выберет Алиса, Боб может выбрать две другие симметричные ячейки.

H1. Игра ИИ (простая версия)

бпф дп Комбинаторика Конструктив математика *3200

Это упрощенная версия задачи. Разница между легкой и сложной версиями заключается в ограничении на \(k\) и ограничении по времени. Кроме того, в этой версии задачи вам нужно вычислить ответ только при \(n=k\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Cirno играет в военный симулятор с \(n\) башнями (пронумерованными от \(1\) до \(n\)) и \(n\) ботами (пронумерованными от \(1\) до \(n\)). Первоначально \(i\)-я башня занята \(i\)-м ботом для всех \(1 \le i \le n\).

Перед игрой Cirno сначала выбирает перестановку \(p = [p_1, p_2, \ldots, p_n]\) длины \(n\) (перестановкой длины \(n\) называется массив длины \(n\), где каждое целое число между \(1\) и \(n\) встречаются ровно один раз). После этого она может выбрать последовательность \(a = [a_1, a_2, \ldots, a_n]\) (\(1 \le a_i \le n\) и \(a_i \ne i\) для всех \(1 \le i \le n\) ).

В игре есть \(n\) раундов-атак. В \(i\)-м раунде, если \(p_i\)-й бот все еще находится в игре, он начнет свою атаку, в результате чего \(a_{p_i}\)-я башня будет занята \(p_i\)-м ботом; бот, который ранее занимал \(a_{p_i}\)-ю башню, больше не будет ее занимать. Если \(p_i\)-го бота нет в игре, в этом раунде ничего не произойдет.

После каждого раунда, если бот не занимает ни одной башни, он будет уничтожен и покинет игру. Обратите внимание, что ни одна башня не может быть занята более чем одним ботом, но один бот может занимать более одной башни во время игры.

В конце игры Cirno запишет результат в виде последовательности \(b = [b_1, b_2, \ldots, b_n]\), где \(b_i\) — номер бота, занимающего \(i\)-ю башня в конце игры.

Однако, как мастер математики, она хочет, чтобы вы решили следующую задачу на счет вместо того, чтобы играть в игры:

Подсчитайте количество различных пар последовательностей \(a\) и \(b\), которые могут получиться из всех возможных выборов последовательности \(a\) и перестановки \(p\).

Так как это число может быть большим, выведите его по модулю \(M\).

Входные данные

Единственная строка содержит два натуральных числа \(k\) и \(M\) (\(1\le k\le 5000\), \(2\le M\le 10^9\) ). Гарантируется, что \(2^{18}\) — делитель \(M-1\), а \(M\) — простое число.

Вам нужно вывести ответ для \(n=k\).

Выходные данные

Выведите одно целое число — количество различных пар последовательностей для \(n=k\) по модулю \(M\).

Примечание

Для \(n=1\) допустимой последовательности \(a\) не существует. Мы рассматриваем ответ как \(0\).

При \(n=2\) возможен только один массив \(a\): \([2, 1]\).

  • Для массива \(a\) равного \([2, 1]\) и перестановки \(p\) равной \([1, 2]\), последовательность \(b\) будет \([1, 1]\) после всех раундов. Детали для каждого раунда:
    • В первом раунде первый бот начнет атаку и успешно захватит башню \(2\). После этого раунда второй бот будет уничтожен и покинет игру, так как все его башни заняты другими ботами.
    • Во втором раунде второго бота нет в игре.
  • Для массива \(a\) равного \([2, 1]\) и перестановки \(p\) равной \([2, 1]\), последовательность \(b\) будет \([2, 2]\) после всех раундов. Детали для каждого раунда:
    • В первом раунде второй бот начнет атаку и успешно захватит башню \(1\). После этого раунда первый бот будет уничтожен и покинет игру, так как все его башни заняты другими ботами.
    • Во втором раунде первого бота нет в игре.

Таким образом, количество различных пар последовательностей \((a,b)\) равно \(2\) (\([2, 1]\), \([1, 1]\) и \([2, 1]\), \([2, 2]\)) при \(n=2\).

B. Создание башен

дп жадные алгоритмы математика *1100

У вас есть последовательность из \(n\) цветных блоков. Цвет \(i\)-го из них равен \(c_i\). Цвета блоков являются целыми числами от \(1\) до \(n\).

Вы будете последовательно размещать блоки на бесконечной координатной сетке следующим образом:

  1. Сначала вы размещаете блок \(1\) в клетке \((0, 0)\).
  2. Для \(2 \le i \le n\) обозначим за \((x, y)\) клетку, в которой вы разместили \((i - 1)\)-й блок. Вы можете разместить \(i\)-й блок в одну из свободных клеток \((x + 1, y)\), \((x - 1, y)\), \((x, y + 1)\) (но не в клетку \((x, y - 1)\)). Обратите внимание, что вы не можете размещать блок в клетке, уже содержащей блок.

Башня состоит из \(s\) блоков, расположенных в клетках \((x, y), (x, y + 1), \ldots, (x, y + s - 1)\) для некоторой клетки \((x, y)\) и целого числа \(s\). Размер башни равен количеству блоков в ней \(s\). Башня цвета \(r\) это башня, состоящая только из блоков цвета \(r\).

Для всех \(r\) от \(1\) до \(n\) решите независимо следующую задачу:

  • Вы хотите создать большую башню цвета \(r\) в результате размещения всех блоков описанным выше образом. Чему равен максимальный размер такой башни?
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \le n \le 10^5\)) — длина последовательности блоков.

Во второй строке даны \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le n\)) — цвета блоков.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел. \(r\)-е из них должно быть равно максимальному размеру башни цвета \(r\), которую Вы можете создать после размещения всех блоков. Если Вы не можете создать башню цвета \(r\), то \(r\)-е число должно быть равно \(0\).

Примечание

В первом наборе входных данных, один из способов создать башню цвета \(1\) размера \(3\) приведён ниже:

  • разместить блок \(1\) в клетке \((0, 0)\);
  • разместить блок \(2\) в клетке \((1, 0)\) (справа от блока \(1\));
  • разместить блок \(3\) в клетке \((1, 1)\) (над блоком \(2\));
  • разместить блок \(4\) в клетке \((0, 1)\) (слева от блока \(3\));
  • разместить блок \(5\) в клетке \((-1, 1)\) (слева от блока \(4\));
  • разместить блок \(6\) в клетке \((-1, 2)\) (над блоком \(5\));
  • разместить блок \(7\) в клетке \((0, 2)\) (справа от блока \(6\)).

В клетках \((0, 0)\), \((0, 1)\) и \((0, 2)\) расположены блоки цвета \(1\), образующие башню размера \(3\).

Во втором наборе входных данных, обратите внимание, что следующее размещение блоков не является корректным, так как Вы не можете разместить блок \(6\) ниже блока \(5\):

Можно показать, что невозможно создать башню цвета \(4\) размера \(3\).

C. Qpwoeirut и город

дп жадные алгоритмы Потоки реализация *1400

Qpwoeirut занялся архитектурой и решил перестроить свой город.

Город состоит из \(n\) зданий, расположенных в ряд. Здание \(i\) (\(1 \le i \le n\)) имеет высоту \(h_i\) этажей. Вы можете считать, что все этажи в этой задаче имеют одинаковую высоту. Иными словами, здание \(i\) выше здания \(j\) тогда и только тогда, когда количество этажей \(h_i\) в здании \(i\) больше количества этажей \(h_j\) в здании \(j\).

Здание \(i\) классное, если оно выше (\(i-1\))-го здания и (\(i+1\))-го здания одновременно (и оба этих здания существуют). В частности, \(1\)-е и \(n\)-е здания не могут быть классными.

Qpwoeirut хочет максимизировать количество классных зданий. Чтобы сделать это, он может строить новые этажи на уже существующих зданиях, тем самым делая их выше. Обратите внимание, что Qpwoeirut не может удалять уже существующие этажи.

Так как новые этажи очень дорогие, Qpwoeirut хочет минимизировать количество новых этажей. Найдите минимальное количество этажей, которое ему придётся построить, чтобы максимизировать количество классных зданий.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(3 \le n \le 10^5\)) — количество зданий в городе.

Во второй строке даны \(n\) целых чисел \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le 10^9\)) — высоты зданий в этажах.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: минимальное количество этажей, которое Qpwoeirut должен построить, чтобы максимизировать количество классных зданий.

Примечание

В первом наборе входных данных оптимально построить \(2\) новых этажа на втором здании, в результате чего оно станет выше обоих соседних зданий. Высоты зданий будут равны \([2, \underline{3}, 2]\).

Во втором наборе входных данных количество классных зданий уже максимально, поэтому Qpwoeirut может ничего не делать.

В третьем наборе входных данных оптимально построить \(2\) этажа на третьем здании и \(1\) этаж на пятом здании. Количество классных зданий будет равно двум. Высоты зданий будут равны \([3, 1, \underline{6}, 5, \underline{6}, 2]\).

Можно показать, что нельзя сделать более \(2\) классных зданий или сделать \(2\) классных здания, построив не более \(3\) этажей.

В четвёртом наборе входных данных можно сделать классным второе либо третье здание. В обоих случаях надо построить \(3\) новых этажа. Высоты зданий будут равны \([4, 2, \underline{4}, 3, 5, 3, 6, 1]\) либо \([4, \underline{5}, 1, 3, 5, 3, 6, 1]\).

D2. Нарезка морковки (cложная версия)

дп жадные алгоритмы Конструктив математика Перебор Структуры данных теория чисел *2400

Это сложная версия задачи. Единственное отличие между простой и сложной версиями — ограничения на \(n\), \(k\), \(a_i\) и сумму \(n\) по всем наборам входных данных. Вы можете делать взломы, только если обе версии задачи решены.

Обратите внимание на нестандартное ограничение по памяти.

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\) и целое число \(k\).

Стоимость массива целых чисел \(p_1, p_2, \ldots, p_n\) длины \(n\) равна \(\)\max\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right) - \min\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right).\(\)

Здесь \(\lfloor \frac{x}{y} \rfloor\) обозначает целую часть от деления \(x\) на \(y\). Найдите минимальную возможную стоимость массива \(p\), такого что \(1 \le p_i \le k\) для всех \(1 \le i \le n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два числа \(n\) и \(k\) (\(1 \le n, k \le 10^5\)).

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_1 \le a_2 \le \ldots \le a_n \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: минимальную возможную стоимость массива \(p\), удовлетворяющего требованию выше.

Примечание

В первом наборе входных данных оптимальный массив \(p = [1, 1, 1, 2, 2]\). Массив значений \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равен \([4, 5, 6, 4, 5]\). Стоимость \(p\) равна \(\max\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) - \min\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) = 6 - 4 = 2\). Можно показать, что не существует массива (удовлетворяющего требованию из условия) с меньшей стоимостью.

Во втором наборе входных данных один из оптимальных массивов \(p = [12, 12, 12, 12, 12]\). Все значения \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равны \(0\).

В третьем наборе входных данных единственный возможный массив \(p = [1, 1, 1]\).

D. Частичные виртуальные деревья

Деревья дп Комбинаторика математика поиск в глубину и подобное *3000

Каваширо Нитори — девушка, которой нравится спортивное программирование. Однажды она нашла корневое дерево из \(n\) вершин. Корень дерева был в вершине с номером \(1\). Как продвинутый автор, она сразу придумала задачу.

У Каваширо Нитори есть множество вершин \(U=\{1,2,\ldots,n\}\). За одну операцию она будет выбирать множество вершин \(T\), где \(T\) является частичным виртуальным деревом множества \(U\), и заменять множество \(U\) на \(T\).

Множество вершин \(S_1\) называется частичным виртуальным деревом множества вершин \(S_2\), если \(S_1\) — подмножество \(S_2\), \(S_1 \neq S_2\) и для любых пар вершин \(i\) и \(j\) из \(S_1\) \(\operatorname{LCA}(i,j)\) лежит внутри \(S_1\), где \(\operatorname{LCA}(x,y)\) обозначает наименьшего общего предка вершин \(x\) и \(y\) в дереве. Обратите внимание, что множество вершин может иметь много различных частичных виртуальных деревьев.

Каваширо Нитори хочет узнать для каждого возможного \(k\), если применить операцию строго \(k\) раз, сколькими способами она может получить \(U=\{1\}\) в конце? Два способа считаются различными, если существует целое число \(z\) (\(1 \le z \le k\)) такое, что после \(z\) операций множества \(U\) различаются.

Так как ответ может быть большим, найдите его по модулю \(p\). Гарантируется, что \(p\) — простое число.

Входные данные

Первая строка содержит два целых числа \(n\) и \(p\) (\(2 \le n \le 2000\), \(10^8 + 7 \le p \le 10^9+9\)). Гарантируется, что \(p\) — простое число.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n\)), обозначающих ребро между \(u_i\) и \(v_i\).

Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите единственную строку, состоящую из \(n-1\) целых чисел — ответ по модулю \(p\) для всех \(k=1,2,\ldots,n-1\).

Примечание

В первом примере при \(k=1\) единственный возможный способ следующий:

  1. \(\{1,2,3,4\} \to \{1\}\).

При \(k=2\) существуют \(6\) способов:

  1. \(\{1,2,3,4\} \to \{1,2\} \to \{1\}\);
  2. \(\{1,2,3,4\} \to \{1,2,3\} \to \{1\}\);
  3. \(\{1,2,3,4\} \to \{1,2,4\} \to \{1\}\);
  4. \(\{1,2,3,4\} \to \{1,3\} \to \{1\}\);
  5. \(\{1,2,3,4\} \to \{1,3,4\} \to \{1\}\);
  6. \(\{1,2,3,4\} \to \{1,4\} \to \{1\}\).

При \(k=3\) существуют \(6\) возможных способов:

  1. \(\{1,2,3,4\} \to \{1,2,3\} \to \{1,2\} \to \{1\}\);
  2. \(\{1,2,3,4\} \to \{1,2,3\} \to \{1,3\} \to \{1\}\);
  3. \(\{1,2,3,4\} \to \{1,2,4\} \to \{1,2\} \to \{1\}\);
  4. \(\{1,2,3,4\} \to \{1,2,4\} \to \{1,4\} \to \{1\}\);
  5. \(\{1,2,3,4\} \to \{1,3,4\} \to \{1,3\} \to \{1\}\);
  6. \(\{1,2,3,4\} \to \{1,3,4\} \to \{1,4\} \to \{1\}\).

F. Бугабу

битмаски дп Конструктив теория чисел *3500

Трансформация массива положительных целых чисел \(a_1,a_2,\dots,a_n\) определена как замена \(a\) на массив \(b_1,b_2,\dots,b_n\), получающийся операцией \(b_i=a_i\oplus a_{(i\bmod n)+1}\), где \(\oplus\) обозначает операцию побитового XOR (исключающего ИЛИ).

Вам даны целые числа \(n\), \(t\) и \(w\). Мы считаем, что массив \(c_1,c_2,\dots,c_n\) (\(0 \le c_i \le 2^w-1\)) является бугабу тогда и только тогда, когда существует массив \(a_1,a_2,\dots,a_n\) такой, что после трансформации массива \(a\) ровно \(t\) раз массив \(a\) превращается в \(c\).

Например, если \(n=6\), \(t=2\), \(w=2\), то массив \([3,2,1,0,2,2]\) — бугабу, потому что его можно получить, трансформировав массив \([2,3,1,1,0,1]\) \(2\) раза: \(\) [2,3,1,1,0,1]\to [2\oplus 3,3\oplus 1,1\oplus 1,1\oplus 0,0\oplus 1,1\oplus 2]=[1,2,0,1,1,3]; \\ [1,2,0,1,1,3]\to [1\oplus 2,2\oplus 0,0\oplus 1,1\oplus 1,1\oplus 3,3\oplus 1]=[3,2,1,0,2,2]. \(\)

Массив \([4,4,4,4,0,0]\) не бугабу, потому что \(4 > 2^2 - 1\). Массив \([2,3,3,3,3,3]\) не бугабу, потому что он не может быть получен трансформацией одного массива \(2\) раза.

Вам дан массив \(c\), значения на некоторых позициях которого неизвестны (вначале только \(m\) элементов известны, остальные — нет). Также есть \(q\) модификаций, где каждая модификация меняет какой-либо элемент \(c\). Модификация может изменить, известен ли элемент на какой-либо позиции или нет, а так же, возможно, переопределить элемент на позиции, которая уже известна.

Вам нужно посчитать, сколько возможных массивов \(c\) (с произвольными элементами на неизвестных позициях) являются бугабу после каждой модификации. Выведите \(i\)-й ответ по модулю \(p_i\) (\(p_i\) — заданный массив из \(q\) элементов).

Входные данные

Первая строка содержит четыре целых числа \(n\), \(m\), \(t\) и \(w\) (\(2\le n\le 10^7\), \(0\le m\le \min(n, 10^5)\), \(1\le t\le 10^9\), \(1\le w\le 30\)).

Затем следуют \(m\) строк, \(i\)-я из которых содержит два целых числа \(d_i\) и \(e_i\) (\(1\le d_i\le n\), \(0\le e_i< 2^w\)), означающие, что позиция \(d_i\) массива \(c\) известна и \(c_{d_i}=e_i\). Гарантируется, что \(1\le d_1<d_2<\ldots<d_m\le n\).

Следующая строка содержит одно число \(q\) (\(1\le q\le 10^5\)) — количество модификаций.

Затем следуют \(q\) строк, \(i\)-я из которых содержит три целых числа \(f_i\), \(g_i\), \(p_i\) (\(1\le f_i\le n\), \(-1\le g_i< 2^w\), \(11\le p_i\le 10^9+7\)). Значение \(g_i=-1\) означает пометку позиции \(f_i\) массива \(c\) как неизвестной, иначе пометку позиции \(f_i\) массива \(c\) как известной, причем \(c_{f_i}=g_i\). Значение \(p_i\) означает, что вы должны вывести \(i\)-й ответ по модулю \(p_i\).

Выходные данные

Выведите \(q\) строк — ваши ответы.

Примечание

В первом примере \(n=3\), \(t=1\) и \(w=1\). Пусть \(?\) обозначает неизвестную позицию в массиве \(c\).

В первом запросе \(c=[1,0,1]\). Единственный возможный массив \([1,0,1]\) — бугабу, потому что он может быть получен одной трансформацией из \([0,1,1]\). Поэтому ответ \(1\bmod 123\,456\,789 = 1\).

Во втором запросе \(c=[1,1,1]\). Единственный возможный массив \([1,1,1]\) — не бугабу. Поэтому ответ \(0\bmod 111\,111\,111 = 0\).

В третьем запросе \(c=[?,1,1]\). Есть два возможных массива: \([1,1,1]\) и \([0,1,1]\). Из них только \([0,1,1]\) является бугабу, потому что может быть получен одной трансформацией из \([1,1,0]\). Поэтому ответ \(1\bmod 987\,654\,321=1\).

В четвертом запросе \(c=[?,1,?]\). Есть четыре возможных массива, из них \([0,1,1]\) и \([1,1,0]\) являются бугабу. \([1,1,0]\) может быть получен из \([1,0,1]\) одной трансформацией. Поэтому ответ \(2\bmod 555\,555\,555=2\).

B. Also Try Minecraft

дп реализация Структуры данных *900

Вы занимаетесь бета-тестированием нового секретного обновления игры Terraria. Это обновление добавит в игру квесты!

Для простоты карту мира можно представить как массив длины \(n\), где \(i\)-й столбец мира имеет высоту \(a_i\).

Вам необходимо протестировать \(m\) квестов. Квест с номером \(j\) представлен двумя целыми числами \(s_j\) и \(t_j\). В этом квесте вам необходимо добраться из столбца \(s_j\) до столбца \(t_j\). В начале квеста вы появляетесь в столбце \(s_j\).

За один ход вы можете перейти из столбца \(x\) в столбец \(x-1\) или в столбец \(x+1\). В этой версии у вас есть Spectre Boots, которые позволяют вам летать. Так как это бета-версия, эти ботинки работают неправильно, поэтому они позволяют вам летать только тогда, когда вы движетесь вверх, и имеют бесконечную длительность полета. Когда вы перемещаетесь из столбца с высотой \(p\) в столбец с высотой \(q\), вы получаете какое-то количество урона от падения. Если высота \(p\) больше высоты \(q\), вы получаете \(p - q\) единиц урона от падения, иначе вы летите вверх и получаете \(0\) единиц урона.

Для каждого из заданных квестов определите минимальное количество урона от падения, которое вы можете получить, выполняя этот квест.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 10^5; 1 \le m \le 10^5\)) — количество столбцов в мире и количество квестов, которые вам надо протестировать, соответственно.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно высоте \(i\)-го столбца мира.

Следующие \(m\) строк описывают квесты. В \(j\)-й из них содержатся два целых числа \(s_j\) и \(t_j\) (\(1 \le s_j, t_j \le n; s_j \ne t_j\)), которые значат, что вам необходимо переместиться из столбца \(s_j\) в столбец \(t_j\) в течение \(j\)-го квеста.

Заметьте, что \(s_j\) может быть больше, чем \(t_j\).

Выходные данные

Выведите \(m\) строк. В \(j\)-й из них должно находиться минимальное количество урона от падения, который вы можете получить во время выполнения \(j\)-го квеста.

F. Мультимножество строк

meet-in-the-middle битмаски бпф графы Деревья дп математика Перебор Потоки *2500

Вам даны три целых числа \(n\), \(k\) и \(f\).

Рассмотрим все бинарные строки (то есть все строки, состоящие из символов \(0\) и/или \(1\)) длины от \(1\) до \(n\). Для каждой такой строки \(s\) вы должны выбрать целое число \(c_s\) от \(0\) до \(k\).

Мультимножество из бинарных строк длины ровно \(n\) считается красивым, если для каждой бинарной строки \(s\) длины от \(1\) до \(n\) выполняется следующее: количество строк в мультимножестве, для которых \(s\) является префиксом, не превосходит \(c_s\).

Например, пусть \(n = 2\), \(c_{0} = 3\), \(c_{00} = 1\), \(c_{01} = 2\), \(c_{1} = 1\), \(c_{10} = 2\) и \(c_{11} = 3\). Мультимножество строк \(\{11, 01, 00, 01\}\) является красивым, так как:

  • для строки \(0\) существует \(3\) строки из мультимножества, для которых \(0\) — префикс, и \(3 \le c_0\);
  • для строки \(00\) существует одна строка из мультимножества, для которой \(00\) — префикс, и \(1 \le c_{00}\);
  • для строки \(01\) существует \(2\) строки из мультимножества, для которых \(01\) — префикс, и \(2 \le c_{01}\);
  • для строки \(1\) существует одна строка из мультимножества, для которой \(1\) — префикс, и \(1 \le c_1\);
  • для строки \(10\) существует \(0\) строк из мультимножества, для которых \(10\) — префикс, и \(0 \le c_{10}\);
  • для строки \(11\) существует одна строка из мультимножества, для которой \(11\) — префикс, и \(1 \le c_{11}\).

А теперь — сама задача. Вы должны посчитать количество способов выбрать числа \(c_s\) для всех бинарных строк \(s\) длины от \(1\) до \(n\) таким образом, чтобы максимальный возможный размер красивого мультимножества был равен ровно \(f\).

Входные данные

В единственной строке заданы три целых числа \(n\), \(k\) и \(f\) (\(1 \le n \le 15\); \(1 \le k, f \le 2 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — количество способов выбрать числа \(c_s\) для всех бинарных строк \(s\) длины от \(1\) до \(n\) таким образом, чтобы максимальный возможный размер красивого мультимножества был равен ровно \(f\). Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Примечание

В первом примере есть три способа выбрать значения \(c_s\):

  • \(c_0 = 0\), \(c_1 = 2\), тогда максимальное красивое мультимножество — \(\{1, 1\}\);
  • \(c_0 = 1\), \(c_1 = 1\), тогда максимальное красивое мультимножество — \(\{0, 1\}\);
  • \(c_0 = 2\), \(c_1 = 0\), тогда максимальное красивое мультимножество — \(\{0, 0\}\).

C. XOR-треугольники

битмаски дп жадные алгоритмы Конструктив математика Перебор *2500

Вам дано целое положительно число \(n\). Так как \(n\) может быть большим, вам дано его представление в двоичной системе счисления.

Вычислите количество троек целых чисел \((a,b,c)\) таких, что \(0 \leq a,b,c \leq n\), и значение \(a \oplus b\), \(b \oplus c\) и \(a \oplus c\) образуют стороны невырожденного треугольника.

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Выведите ответ по модулю \(998\,244\,353\).

Три положительных числа \(x\), \(y\) и \(z\) образуют стороны невырожденного треугольника, если и только если \(x+y>z\), \(x+z>y\) и \(y+z>x\).

Входные данные

Единственная строка содержит представление числа \(n\) (\(0 < n < 2^{200\,000}\)) в двоичной системе счисления без ведущих нулей.

Например, строка 10 является представлением числа \(2\) в двоичной системе счисления, а строка 1010 представляет число \(10\).

Выходные данные

Выведите одно число — количество троек \((a,b,c)\), удовлетворяющих условию, по модулю \(998\,244\,353\).

Примечание

В первом примере \(101_2=5\).

  • Тройка \((a, b, c) = (0, 3, 5)\) подходит, потому что \((a\oplus b, b\oplus c, c\oplus a) = (3, 6, 5)\) образуют стороны невырожденного треугольника.
  • Тройка \((a, b, c) = (1, 2, 4)\) подходит, потому что \((a\oplus b, b\oplus c, c\oplus a) = (3, 6, 5)\) образуют стороны невырожденного треугольника.

\(6\) перестановок каждой из этих двух троек тоже подходят, поэтому ответ \(12\).

В третьем примере \(11\,011\,111\,101\,010\,010_2=114\,514\). Полный ответ (без взятия по модулю) равен \(1\,466\,408\,118\,808\,164\).

C. Постройте перестановку

дп Конструктив математика *1200

Массив \(a\) длины \(n\), пронумерованный с \(\mathbf{0}\), называется хорошим, если для всех корректных индексов \(i\) (\(0 \le i \le n-1\)) значение \(a_i + i\) является полным квадратом\(^\dagger\).

Дано целое число \(n\). Найдите перестановку\(^\ddagger\) \(p\) массива \([0,1,2,\ldots,n-1]\), являющуюся хорошим массивом, или определите, что такой перестановки не существует.

\(^\dagger\) Целое число \(x\) называется полным квадратом, если существует целое число \(y\) такое, что \(x = y^2\).

\(^\ddagger\) Массив \(b\) является перестановкой массива \(a\), если \(b\) состоит из элементов массива \(a\) в произвольном порядке. Например, \([4,2,3,4]\) является перестановкой \([3,2,4,4]\), а \([1,2,2]\) не является перестановкой \([1,2,3]\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину перестановки \(p\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) различных чисел \(p_0, p_1, \dots, p_{n-1}\) (\(0 \le p_i \le n-1\)) — перестановку \(p\) — если ответ существует, и \(-1\) иначе.

Примечание

В первом наборе входных данных \(n=3\). Массив \(p = [1, 0, 2]\) хороший, т. к. \(1 + 0 = 1^2\), \(0 + 1 = 1^2\) и \(2 + 2 = 2^2\)

Во втором наборе \(n=4\). Массив \(p = [0, 3, 2, 1]\) хороший, т. к. \(0 + 0 = 0^2\), \(3 + 1 = 2^2\), \(2+2 = 2^2\) и \(1+3 = 2^2\).

F. Потерянный массив

битмаски дп Комбинаторика Конструктив математика *2900

Мои orz-дети, мы можем оптимизировать эту задачу с \(O(S^3)\) до \(O\left(T^\frac{5}{9}\right)\)!
— Spyofgame, основатель религии Orz

Давным-давно Spyofgame изобрел известный массив \(a\) (элементы которого нумеруются с \(1\)) длины \(n\), который содержал знания о мире и о жизни. После этого он превратил его в матрицу \(b\) (элементы которой нумеруются с \(0\)) размера \((n + 1) \times (n + 1)\), которая содержала знания о мире, о жизни, и о том, что за их пределами.

Spyofgame превратил \(a\) в \(b\) по следующим правилам.

  • \(b_{i,0} = 0\) при \(0 \leq i \leq n\);
  • \(b_{0,i} = a_{i}\) при \(1 \leq i \leq n\);
  • \(b_{i,j} = b_{i,j-1} \oplus b_{i-1,j}\) при \(1 \leq i, j \leq n\).

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

В наши дни археологи нашли знаменитую матрицу \(b\). Однако многие ее элементы утеряны. Удалось прочесть лишь значения \(b_{i,n}\) для всех \(1 \leq i \leq n\) (обратите внимание, это некоторые элементы последнего столбца, а не строки).

Археологи хотят восстановить возможный массив \(a\). Можете помочь им найти любой массив, который может быть массивом \(a\)?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(b_{1,n}, b_{2,n}, \ldots, b_{n,n}\) (\(0 \leq b_{i,n} < 2^{30}\)).

Выходные данные

Если какой-то массив \(a\) подходит под данную информацию, выведите строку, содержащую \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Если существуют несколько решений, выведите любое из них.

Если решения не существует, выведите одно целое число \(-1\).

Примечание

Если \(a = [1,2,3]\), то \(b\) будет следующей:

\(\bf{0}\)\(\bf{1}\)\(\bf{2}\)\(\bf{3}\)
\(\bf{0}\)\(1\)\(3\)\(0\)
\(\bf{0}\)\(1\)\(2\)\(2\)
\(\bf{0}\)\(1\)\(3\)\(1\)

Значения \(b_{1,n}, b_{2,n}, \ldots, b_{n,n}\) равны \([0,2,1]\), что соответствует найденной археологами информации.

D. Покрась вхождениями

дп жадные алгоритмы Перебор Строки Структуры данных *1600

Вам задан некоторый текст \(t\) и набор из \(n\) строк \(s_1, s_2, \dots, s_n\).

За один ход вы можете выбрать любое вхождение любой строки \(s_i\) в текст \(t\) и покрасить соответствующие символы текста в красный цвет. Например, если \(t=\texttt{bababa}\) и \(s_1=\texttt{ba}\), \(s_2=\texttt{aba}\), то за один ход можно получить \(t=\color{red}{\texttt{ba}}\texttt{baba}\), \(t=\texttt{b}\color{red}{\texttt{aba}}\texttt{ba}\) или \(t=\texttt{bab}\color{red}{\texttt{aba}}\).

Вы хотите сделать все буквы текста \(t\) красными. При повторной покраске буквы в красный цвет, она остаётся красной.

В примере выше достаточно три хода:

  • Перекрасим в красный цвет \(t[2 \dots 4]=s_2=\texttt{aba}\), получим \(t=\texttt{b}\color{red}{\texttt{aba}}\texttt{ba}\);
  • Перекрасим в красный цвет \(t[1 \dots 2]=s_1=\texttt{ba}\), получим \(t=\color{red}{\texttt{baba}}\texttt{ba}\);
  • Перекрасим в красный цвет \(t[4 \dots 6]=s_2=\texttt{aba}\), получим \(t=\color{red}{\texttt{bababa}}\).

Каждая строка \(s_i\) может применяться произвольное количество раз (или не применяться вообще). Вхождения для покраски могут пересекаться произвольным образом.

Определите, какое минимальное количество ходов надо сделать, чтобы покрасить все буквы \(t\) в красный цвет и как для этого надо совершать ходы. Если сделать все буквы текста \(t\) красными невозможно, то выведите -1.

Входные данные

Первая строка входных данных содержит целое число \(q\) (\(1 \le q \le 100\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит текст \(t\) (\(1 \le |t| \le 100\)), состоящий только из строчных латинских букв, где \(|t|\) — длина текста \(t\).

Вторая строка каждого набора содержит единственное целое число \(n\) (\(1 \le n \le 10\)) — количество строк в наборе.

Далее следует \(n\) строк, каждая из которых содержит строку \(s_i\) (\(1 \le |s_i| \le 10\)), состоящую только из строчных латинских букв, где \(|s_i|\) — длина строки \(s_i\).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке.

Если невозможно сделать все буквы текста красными, то выведите единственную строку, содержащую число -1.

Иначе, на первой строке выведите число \(m\) — минимальное количество ходов, которые потребуются, чтобы сделать все буквы \(t\) красными.

Затем в последующих \(m\) строках выведите пары чисел: \(w_j\) и \(p_j\) (\(1 \le j \le m\)), которые обозначают, что строка с индексом \(w_j\) была использована как подстрока для покрытия вхождения, начинающегося в тексте \(t\) с позиции \(p_j\). Пары можно выводить в любом порядке.

Если вариантов ответа несколько, выведите любой из них.

Примечание

Первый набор входных данных разобран в условии задачи.

Во втором наборе входных данных невозможно сделать все буквы текста красными.

E. Долгий путь домой

геометрия графы дп жадные алгоритмы кратчайшие пути разделяй и властвуй Структуры данных *2400

Олеся решила отправиться в путешествие по стране, состоящей из \(n\) городов (она живет в городе \(1\)). Между некоторыми городами страны есть двусторонние дороги. Для каждой дороги известно время, необходимое для того, чтобы по ней проехать. Также между каждой парой городов есть авиарейс, перелет из города \(u\) в город \(v\) занимает \((u - v)^2\) времени.

Олеся недавно посмотрела «Чудо на Гудзоне» и несколько боится летать, поэтому она может воспользоваться не более чем \(k\) перелетами. Олеся хочет узнать минимальное время путешествия в каждый из \(n\) городов страны из города \(1\).

Входные данные

В первой строке находятся числа \(n\), \(m\) и \(k\) (\(2 \leq n \leq 10^{5}\), \(1 \leq m \leq 10^{5}\), \(1 \leq k \leq 20\)) — количество городов, дорог и максимальное количество перелётов, которое может совершить Олеся.

Следующие \(m\) строк описывают дороги. В каждой находятся числа \(u\), \(v\), \(w\) (\(1 \leq u, v \leq n\), \(u \neq v\), \(1 \leq w \leq 10^{9}\)) — города, которые соединяет дорога, и время, необходимое, чтобы по ней проехать. Некоторые пары городов могут быть соединены более чем одной парой дорог.

Выходные данные

Выведите \(n\) чисел, \(i\)-е из которых равно минимальному времени путешествия в город \(i\).

Примечание

В первом примере время путешествия до города 1 равно 0; чтобы добраться в город 2, можно воспользоваться авиаперелетом из 1 в 2 за 1 единицу времени; в город 3 можно добраться из города 1 по дороге за 1 единицу времени.

Во втором примере время путешествия до города 1 равно 0. Чтобы добраться в город 2, можно воспользоваться авиаперелетом из 1 в 2, занимающим 1 единицу времени. Чтобы добраться в город 3 за 4 единицы времени, можно проехать из города 1 в город 2 по дороге за 3 единицы времени, а потом воспользоваться авиаперелетом из 2 в 3. Чтобы добраться в город 4, можно воспользоваться авиаперелетом из города 1 в город 2, а потом проехать из города 2 в город 4 по дороге за 5 единиц времени.

C. Робот в коридоре

дп жадные алгоритмы реализация Структуры данных Тернарный поиск *2000

Задано поле, состоящее из \(2\) строк и \(m\) столбцов. Строки занумерованы от \(1\) до \(2\) сверху вниз. Столбцы занумерована от \(1\) до \(m\) слева направо.

Робот начинает в клетке \((1, 1)\). За одну секунду он может проделать любое из двух действий:

  • перейти в соседнюю по стороне клетку: наверх, направо, вниз или налево;
  • остаться в той же клетке.

Роботу запрещено выходить за пределы поля.

Изначально все клетки, кроме клетки \((1, 1)\) заблокированы. Каждая клетка \((i, j)\) содержит значение \(a_{i,j}\) — момент, когда данная клетка будет разблокирована. Робот может перейти в клетку \((i, j)\), если до начала хода прошло хотя бы \(a_{i,j}\) секунд.

Робот должен посетить все клетки, не входя ни в какую клетку дважды или больше (считается, что робот вошел в клетку \((1, 1)\) на старте). Он может закончить в любой клетке.

Какое минимальное время у него это может занять?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора записано одно целое число \(m\) (\(2 \le m \le 2 \cdot 10^5\)) — количество столбцов поля.

В \(i\)-й из следующих \(2\) строк записаны \(m\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,m}\) (\(0 \le a_{i,j} \le 10^9\)) — момент времени, в который каждая клетка будет разблокирована. \(a_{1,1} = 0\). Если \(a_{i,j} = 0\), то клетка \((i, j)\) разблокирована с самого начала.

Сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — минимальное количество секунд, которые могут потребоваться роботу, чтобы посетить все клетки, не входя ни в какую клетку дважды или больше.

D. Перемещение фишки

дп математика Перебор *2000

На координатной прямой лежит фишка. Изначально фишка находится в точке \(0\). Вы можете переместить фишку любое количество раз; каждый раз при перемещении ее координата увеличивается на некоторое целое положительное число (будем его называть длиной перемещения). При этом длина первого перемещения должна делиться на \(k\), длина второго — на \(k+1\), длина третьего — на \(k+2\), и так далее.

Например, если \(k=2\), то последовательность перемещений может выглядеть следующим образом: \(0 \rightarrow 4 \rightarrow 7 \rightarrow 19 \rightarrow 44\), т.  к. \(4 - 0 = 4\) делится на \(2 = k\), \(7 - 4 = 3\) делится на \(3 = k + 1\), \(19 - 7 = 12\) делится на \(4 = k + 2\), \(44 - 19 = 25\) делится на \(5 = k + 3\).

Вам дано два целых положительных числа \(n\) и \(k\). Ваша задача — посчитать количество способов попасть в точку \(x\), начиная из точки \(0\), для всех \(x \in [1, n]\). Количество способов может быть очень большим, поэтому выведите его по модулю \(998244353\). Два способа считаются различными, если они отличаются как наборы посещенных позиций.

Входные данные

Единственная строка содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)).

Выходные данные

Выведите \(n\) целых чисел — количество способов попасть из \(0\) в точку \(x\) для всех \(x \in [1, n]\), взятое по модулю \(998244353\).

Примечание

Рассмотрим способы в первом примере:

Способы попасть в точку \(1\): \([0, 1]\);

Способы попасть в точку \(2\): \([0, 2]\);

Способы попасть в точку \(3\): \([0, 1, 3]\), \([0, 3]\);

Способы попасть в точку \(4\): \([0, 2, 4]\), \([0, 4]\);

Способы попасть в точку \(5\): \([0, 1, 5]\), \([0, 3, 5]\), \([0, 5]\);

Способы попасть в точку \(6\): \([0, 1, 3, 6]\), \([0, 2, 6]\), \([0, 4, 6]\), \([0, 6]\);

Способы попасть в точку \(7\): \([0, 2, 4, 7]\), \([0, 1, 7]\), \([0, 3, 7]\), \([0, 5, 7]\), \([0, 7]\);

Способы попасть в точку \(8\): \([0, 3, 5, 8]\), \([0, 1, 5, 8]\), \([0, 2, 8]\), \([0, 4, 8]\), \([0, 6, 8]\), \([0, 8]\).

E. Обмен и максимальный отрезок

битмаски дп поиск в глубину и подобное разделяй и властвуй Структуры данных *2500

Задан массив длины \(2^n\). Элементы массива пронумерованы от \(1\) до \(2^n\).

Надо обработать \(q\) запросов к массиву. В \(i\)-м запросе будет дано целое число \(k\) (\(0 \le k \le n-1\)). Чтобы обработать запрос, надо сделать следующее:

  • для каждого \(i \in [1, 2^n-2^k]\) в возрастающем порядке сделайте следующее: если \(i\)-й элемент уже менялся местами с каким-либо другим элементов в текущем запросе, пропустите его; иначе поменяйте местами \(a_i\) и \(a_{i+2^k}\);
  • после этого выведите наибольшую сумму среди всех непрерывных подотрезков массива (включая пустой подотрезок).

Например, если массив \(a\) равен \([-3, 5, -3, 2, 8, -20, 6, -1]\), а \(k = 1\), то запрос обрабатывается так:

  • \(1\)-й элемент еще не менялся ни с кем местами, поэтому поменяем его местами с \(3\)-м элементом;
  • \(2\)-й элемент еще не менялся ни с кем местами, поэтому поменяем его местами с \(4\)-м элементом;
  • \(3\)-й элемент уже менялся местами;
  • \(4\)-й элемент уже менялся местами;
  • \(5\)-й элемент еще не менялся ни с кем местами, поэтому поменяем его местами с \(7\)-м элементом;
  • \(6\)-й элемент еще не менялся ни с кем местами, поэтому поменяем его местами с \(8\)-м элементом.

Тогда массив становится равен \([-3, 2, -3, 5, 6, -1, 8, -20]\). Подотрезок с максимальной суммой — это \([5, 6, -1, 8]\), и ответ на запрос равен \(18\).

Обратите внимание, что запросы изменяют массив, т. е. после выполнения запроса массив не возвращается в изначальное состояние, и следующий запрос будет применен к измененному массиву.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 18\)).

Во второй строке записаны \(2^n\) целых чисел \(a_1, a_2, \dots, a_{2^n}\) (\(-10^9 \le a_i \le 10^9\)).

В третьей строке записано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)).

Затем следуют \(q\) строк, в \(i\)-й из них записано одно целое число \(k\) (\(0 \le k \le n-1\)), описывающее \(i\)-й запрос.

Выходные данные

На каждый запрос выведите одно целое число — наибольшую сумму среди всех непрерывных подотрезков массива (включая пустой подотрезок) после обработки запроса.

Примечание

Преобразование массива в примере: \([-3, 5, -3, 2, 8, -20, 6, -1] \rightarrow [-3, 2, -3, 5, 6, -1, 8, -20] \rightarrow [2, -3, 5, -3, -1, 6, -20, 8] \rightarrow [5, -3, 2, -3, -20, 8, -1, 6]\).

F. Мешки с шарами

дп Комбинаторика математика теория чисел *2500

Есть \(n\) мешков, в каждом лежат \(m\) шаров с числами от \(1\) до \(m\). В каждом мешке ровно один шар с числом \(i\) для каждого \(i \in [1, m]\).

Из каждого мешка берется по одному шару (все мешки различные, так что, например, взять шар \(1\) из первого мешка и шар \(2\) из второго мешка — это не то же самое, что и взять шар \(2\) из первого мешка и шар \(1\) из второго мешка). После этого считается количество шаров с нечетными числами среди тех, которые достали. Пусть это количество будет равно \(F\).

Ваша задача — посчитать сумму \(F^k\) по всем способам выбрать \(n\) шаров, по одному из каждого мешка.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, в которой записаны три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m \le 998244352\); \(1 \le k \le 2000\)).

Выходные данные

На каждый набор входных данных выведите одно целое число — сумму \(F^k\) по всем способам выбрать \(n\) шаров, по одному из каждого мешка. Так как это значение может быть достаточно велико, выведите его по модулю \(998244353\).

A1. Бурёнка и традиции (простая версия)

дп жадные алгоритмы *1800

Это упрощенная версия этой задачи. Разница между легкой и сложной версиями заключается в ограничениях на \(a_i\) и на \(n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Бурёнка — наследная принцесса Бурятии, и скоро она станет \(n\)-й по счёту королевой страны. В Бурятии есть древняя традиция — правитель перед своей коронацией должен показать жителям свою силу. Чтобы определить силу \(n\)-го правителя, жители страны дают ему массив \(a\) из ровно \(n\) чисел, после чего он должен превратить все элементы массива в нули за наименьшее время. Правитель может любое число раз выполнить следующую операцию из двух шагов:

  • выбрать два индекса \(l\) и \(r\) такие, что \(1 \le l \le r \le n\) и целое неотрицательное число \(x\), затем
  • для всех \(l \leq i \leq r\) присвоить \(a_i := a_i \oplus x\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. На эту операцию он потратит \(\left\lceil \frac{r-l+1}{2} \right\rceil\) секунд, где \(\lceil y \rceil\) обозначает округление числа \(y\) вверх до ближайшего целого.

Помогите Буренке посчитать, сколько времени ей понадобится.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) (\(1 \le n \le 5000\)).

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 5000\)) — элементы массива.

Сумма \(n\) по всем тестам не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное время, которое понадобится Буренке.

Примечание

В первом наборе входных данных Бурёнка может выбрать индексы \(l = 1\), \(r = 4\) и \(x=5\). так он заполнит массив нулями за \(2\) секунды.

Во втором наборе входных данных Бурёнка сначала выбирает индексы \(l = 1\), \(r = 2\) и \(x = 1\), после чего \(a = [0, 2, 2]\), а затем индексы \(l = 2\), \(r = 3\) и \(x=2\), что заполняет массив нулями. Суммарно Бурёнка потратит \(2\) секунды.

A2. Бурёнка и традиции (сложная версия)

дп жадные алгоритмы Структуры данных *1900

Это усложненная версия этой задачи. Разница между легкой и сложной версиями заключается в ограничениях на \(a_i\) и на \(n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Бурёнка — наследная принцесса Бурятии, и скоро она станет \(n\)-й по счёту королевой страны. В Бурятии есть древняя традиция — правитель перед своей коронацией должен показать жителям свою силу. Чтобы определить силу \(n\)-го правителя, жители страны дают ему массив \(a\) из ровно \(n\) чисел, после чего он должен превратить все элементы массива в нули за наименьшее время. Правитель может любое число раз выполнить следующую операцию из двух шагов:

  • выбрать два индекса \(l\) и \(r\) такие, что \(1 \le l \le r \le n\) и целое неотрицательное число \(x\), затем
  • для всех \(l \leq i \leq r\) присвоить \(a_i := a_i \oplus x\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. На эту операцию он потратит \(\left\lceil \frac{r-l+1}{2} \right\rceil\) секунд, где \(\lceil y \rceil\) обозначает округление числа \(y\) вверх до ближайшего целого.

Помогите Буренке посчитать, сколько времени ей понадобится.

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 500)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) \((1 \le n \le 10^5)\).

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(a_1, a_2, \cdots , a_n\) \((0 \le a_i < 2^{30})\) — элементы массива.

Cумма \(n\) по всем тестам не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное время, которое понадобится Буренке.

Примечание

В первом наборе входных данных Бурёнка может выбрать индексы \(l = 1\), \(r = 4\) и \(x=5\). так он заполнит массив нулями за \(2\) секунды.

Во втором наборе входных данных Бурёнка сначала выбирает индексы \(l = 1\), \(r = 2\) и \(x = 1\), после чего \(a = [0, 2, 2]\), а затем индексы \(l = 2\), \(r = 3\) и \(x=2\), что заполняет массив нулями. Суммарно Бурёнка потратит \(2\) секунды.

D1. Xor-подпоследовательность (простая версия)

битмаски Деревья дп Перебор Строки *1800

Это простая версия задачи. Единственное различие состоит в том, что в этой версии \(a_i \le 200\).

Дан массив из \(n\) целых чисел \(a_0, a_1, a_2, \ldots a_{n - 1}\). Бряп захотел найти в данном массиве самую длинную хорошую подпоследовательность.

Массив \(b = [b_0, b_1, \ldots, b_{m-1}]\), где \(0 \le b_0 < b_1 < \ldots < b_{m - 1} < n\), будем называть подпоследовательностью длины \(m\) массива \(a\).

Подпоследовательность \(b = [b_0, b_1, \ldots, b_{m-1}]\) длины \(m\) называется хорошей, если выполняется следующее условие:

  • Для любого целого числа \(p\) (\(0 \le p < m - 1\)) выполняется условие: \(a_{b_p} \oplus b_{p+1} < a_{b_{p+1}} \oplus b_p\).

Здесь \(a \oplus b\) обозначает побитовое исключающее ИЛИ чисел \(a\) и \(b\). Например, \(2 \oplus 4 = 6\), а \(3 \oplus 1=2\).

Так как Бряп не очень любознательная персона, он хочет знать лишь длину такой подпоследовательности. Помогите ему найти ответ на данную задачу.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_0,a_1,...,a_{n-1}\) (\(0 \leq a_i \leq 200\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных единственное число — максимальную длину хорошей подпоследовательности.

Примечание

В первом наборе входных данных в качестве подпоследовательности мы можем выбрать оба элемента массива, так как \(1 \oplus 1 < 2 \oplus 0\).

Во втором наборе входных данных мы можем взять элементы с индексами \(1\), \(2\) и \(4\)\(0\)-нумерации). Для них выполняется: \(2 \oplus 2 < 4 \oplus 1\) и \(4 \oplus 4 < 1 \oplus 2\).

D2. Xor-подпоследовательность (сложная версия)

битмаски Деревья дп Строки Структуры данных *2400

Это сложная версия задачи. Единственное различие состоит в том, что в этой версии \(a_i \le 10^9\).

Дан массив из \(n\) целых чисел \(a_0, a_1, a_2, \ldots a_{n - 1}\). Бряп захотел найти в данном массиве самую длинную хорошую подпоследовательность.

Массив \(b = [b_0, b_1, \ldots, b_{m-1}]\), где \(0 \le b_0 < b_1 < \ldots < b_{m - 1} < n\), будем называть подпоследовательностью длины \(m\) массива \(a\).

Подпоследовательность \(b = [b_0, b_1, \ldots, b_{m-1}]\) длины \(m\) называется хорошей, если выполняется следующее условие:

  • Для любого целого числа \(p\) (\(0 \le p < m - 1\)) выполняется условие: \(a_{b_p} \oplus b_{p+1} < a_{b_{p+1}} \oplus b_p\).

Здесь \(a \oplus b\) обозначает побитовое исключающее ИЛИ чисел \(a\) и \(b\). Например, \(2 \oplus 4 = 6\), а \(3 \oplus 1=2\).

Так как Бряп не очень любознательная персона, он хочет знать лишь длину такой подпоследовательности. Помогите ему найти ответ на данную задачу.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_0,a_1,...,a_{n-1}\) (\(0 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных единственное число — максимальную длину хорошей подпоследовательности.

Примечание

В первом наборе входных данных в качестве подпоследовательности мы можем выбрать оба элемента массива, так как \(1 \oplus 1 < 2 \oplus 0\).

Во втором наборе входных данных мы можем взять элементы с индексами \(1\), \(2\) и \(4\)\(0\) нумерации). Для них выполняется: \(2 \oplus 2 < 4 \oplus 1\) и \(4 \oplus 4 < 1 \oplus 2\).

E. Запросы про префикс функцию

Деревья дп поиск в глубину и подобное Строки строковые суфф. структуры хэши *2200

Задана строка \(s\), состоящая из строчных латинских букв.

К ней приходят \(q\) запросов: дана другая строка \(t\), состоящая из строчных латинских букв; проделайте следующие шаги:

  1. склеить \(s\) и \(t\);
  2. посчитать префикс-функцию полученной строки \(s+t\);
  3. выведите значения префикс-функции на позициях \(|s|+1, |s|+2, \dots, |s|+|t|\) (\(|s|\) и \(|t|\) — это длины строк \(s\) и \(t\), соответственно);
  4. вернуть строку обратно к \(s\).

Префикс-функция строки \(a\) — это последовательность \(p_1, p_2, \dots, p_{|a|}\), где \(p_i\) — это наибольшее значение \(k\) такое, что \(k < i\) и \(a[1..k]=a[i-k+1..i]\) (\(a[l..r]\) обозначает непрерывную подстроку строку \(a\) с позиции \(l\) до позиции \(r\) включительно). Другими словами, это наибольший собственный префикс строки \(a[1..i]\), который равен ее суффиксу такой же длины.

Входные данные

В первой строке записана непустая строка \(s\) (\(1 \le |s| \le 10^6\)), состоящая из строчных латинских букв.

Во второй строке записано одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

В каждой из следующих \(q\) строк записан запрос: непустая строка \(t\) (\(1 \le |t| \le 10\)), состоящая из строчных латинских букв.

Выходные данные

На каждый запрос выведите значения префикс-функции строки \(s+t\) на позициях \(|s|+1, |s|+2, \dots, |s|+|t|\).

E. Считаем прямоугольники

дп Перебор реализация Структуры данных *1600

У вас есть \(n\) прямоугольников, \(i\)-й из них имеет высоту \(h_i\) и ширину \(w_i\).

Вам надо ответить на \(q\) запросов, которые задаются четырьмя числами: \(h_s \ w_s \ h_b \ w_b\).

Для каждого запроса выведите суммарную площадь всех таких прямоугольников, которые могут вместить в себя прямоугольник с высотой \(h_s\) и шириной \(w_s\) и при этом сами вмещаются в прямоугольник с высотой \(h_b\) и шириной \(w_b\). Иными словами, выведите \(\sum h_i \cdot w_i\) по всем \(i\), что \(h_s < h_i < h_b\) и \(w_s < w_i < w_b\).

Обратите внимание, что если у прямоугольников одинаковая ширина или высота, то ни один из них не может вместить в себя другой. Также обратите внимание, что вы не можете вращать прямоугольники.

Обратите внимание, что для некоторых наборов входных данных ответ не будет помещаться в 32-х битных целочисленный тип, вы должны использовать 64-битный целочисленный тип вашего языка (например, long long в C++).

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n, q\) (\(1 \leq n \leq 10^5\); \(1 \leq q \leq 10^5\)) — количество прямоугольников и количество запросов.

Затем следуют \(n\) строк, каждая содержит два целых числа \(h_i, w_i\) (\(1 \leq h_i, w_i \leq 1000\)) — высоту и ширину \(i\)-го прямоугольника.

Затем в \(q\) строках заданы запросы, каждая строка содержит четыре целых числа \(h_s, w_s, h_b, w_b\) (\(1 \leq h_s < h_b,\ w_s < w_b \leq 1000\)) — описание запроса.

Сумма значений \(q\) по всем набора входных данных не превосходит \(10^5\). Сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк, \(i\)-я должна содержать ответ на \(i\)-й запрос.

Примечание

В первом наборе входных данных только один запрос. Нам надо найти сумму площадей всех прямоугольников, которые вмещают прямоугольник \(1 \times 1\) и сами вмещаются в прямоугольник \(3 \times 4\).

Нам подходит только прямоугольник \(2 \times 3\), так как \(1 < 2\) (сравниваем высоты) и \(1 < 3\) (сравниваем ширины), то \(1 \times 1\) помещается в него. Аналогично, \(2 < 3\) (сравниваем высоты) и \(3 < 4\) (сравниваем ширины), то есть он помещается в \(3 \times 4\).

Прямоугольник \(3 \times 2\) слишком высок, чтобы поместиться в \(3 \times 4\) rectangle.

Суммарная площадь в ответа равна \(2 \cdot 3 = 6\).

E. Electrical Efficiency

Деревья дп Комбинаторика математика Структуры данных теория чисел *2500

In the country of Dengkleknesia, there are \(N\) factories numbered from \(1\) to \(N\). Factory \(i\) has an electrical coefficient of \(A_i\). There are also \(N-1\) power lines with the \(j\)-th power line connecting factory \(U_j\) and factory \(V_j\). It can be guaranteed that each factory in Dengkleknesia is connected to all other factories in Dengkleknesia through one or more power lines. In other words, the collection of factories forms a tree. Each pair of different factories in Dengkleknesia can use one or more existing power lines to transfer electricity to each other. However, each power line needs to be turned on first so that electricity can pass through it.

Define \(f(x, y, z)\) as the minimum number of power lines that need to be turned on so that factory \(x\) can make electrical transfers to factory \(y\) and factory \(z\). Also define \(g(x, y, z)\) as the number of distinct prime factors of \(\text{GCD}(A_x, A_y, A_z)\).

To measure the electrical efficiency, you must find the sum of \(f(x, y, z) \times g(x, y, z)\) for all combinations of \((x, y, z)\) such that \(1 \leq x < y < z \leq N\). Because the answer can be very large, you just need to output the answer modulo \(998\,244\,353\).

Note: \(\text{GCD}(k_1, k_2, k_3)\) is the greatest common divisor of \(k_1\), \(k_2\), and \(k_3\), which is the biggest integer that simultaneously divides \(k_1\), \(k_2\), and \(k_3\).

Input

The first line contains a single integer \(N\) (\(1 \le N \le 2 \cdot 10^5\)) — the number of factories in Dengkleknesia.

The second line contains \(N\) integers \(A_1, A_2, \dots, A_N\) (\(1 \leq A_i \leq 2 \cdot 10^5\)) — the electrical coefficients of the factories.

The \(j\)-th of the next \(N-1\) lines contains two integers \(U_j\) and \(V_j\) (\(1 \le U_j, V_j \le N\)) — a power line that connects cities \(U_j\) and \(V_j\). The collection of factories forms a tree.

Output

An integer representing the sum of \(f(x, y, z) \times g(x, y, z)\) for all combinations of \((x, y, z)\) such that \(1 \leq x < y < z \leq N\), modulo \(998\,244\,353\)

Note

In the first example, the only \((x, y, z)\) possible is \((1, 2, 3)\). Because \(\text{GCD}(A_1, A_2, A_3) = \text{GCD}(1, 2, 3) = 1\) has \(0\) distinct prime factors, therefore \(f(x, y, z) \times g(x, y, z) = 2 \times 0 = 0\).

In the second example, all triples \((x, y, z)\) that satisfy the condition are as follows:

  • \((1, 2, 3) \rightarrow f(1, 2, 3) \times g(1, 2, 3) = 2 \times 1 = 2\)
  • \((1, 2, 4) \rightarrow f(1, 2, 4) \times g(1, 2, 4) = 2 \times 1 = 2\)
  • \((1, 3, 4) \rightarrow f(1, 3, 4) \times g(1, 3, 4) = 3 \times 2 = 6\)
  • \((2, 3, 4) \rightarrow f(2, 3, 4) \times g(2, 3, 4) = 2 \times 1 = 2\)

So the electrical efficiency is \(2 + 2 + 6 + 2 = 12\).

J. Journey

Деревья дп *2500

One day, Pak Chanek who is already bored of being alone at home decided to go traveling. While looking for an appropriate place, he found that Londonesia has an interesting structure.

According to the information gathered by Pak Chanek, there are \(N\) cities numbered from \(1\) to \(N\). The cities are connected to each other with \(N-1\) two-directional roads, with the \(i\)-th road connecting cities \(U_i\) and \(V_i\), and taking a time of \(W_i\) hours to be traversed. In other words, Londonesia's structure forms a tree.

Pak Chanek wants to go on a journey in Londonesia starting and ending in any city (not necessarily the same city) such that each city is visited at least once with the least time possible. In order for the journey to end quicker, Pak Chanek also carries an instant teleportation device for moving from one city to any city that can only be used at most once. Help Pak Chanek for finding the minimum time needed.

Notes:

  • Pak Chanek only needs to visit each city at least once. Pak Chanek does not have to traverse each road.
  • In the journey, a city or a road can be visited more than once.
Input

The first line contains a single integer \(N\) (\(1 \le N \le 10^5\)) — the number of cities in Londonesia.

The \(i\)-th of the next \(N-1\) lines contains three integers \(U_i\), \(V_i\), and \(W_i\) (\(1 \le U_i, V_i \le N\), \(1 \le W_i \le 10^9\)) — a two-directional road that connects cities \(U_i\) and \(V_i\) that takes \(W_i\) hours to be traversed. The roads in Londonesia form a tree.

Output

Output one integer, which represents the minimum time in hours that is needed to visit each city at least once.

Note

In the first example, the journey that has the minimum time is \(2 → 1 \xrightarrow{\text{teleport}} 4 → 3\).

In the second example, the journey that has the minimum time is \(3 → 1 → 4 → 1 → 2 \xrightarrow{\text{teleport}} 5\).

M. Moving Both Hands

графы дп кратчайшие пути *1800

Pak Chanek is playing one of his favourite board games. In the game, there is a directed graph with \(N\) vertices and \(M\) edges. In the graph, edge \(i\) connects two different vertices \(U_i\) and \(V_i\) with a length of \(W_i\). By using the \(i\)-th edge, something can move from \(U_i\) to \(V_i\), but not from \(V_i\) to \(U_i\).

To play this game, initially Pak Chanek must place both of his hands onto two different vertices. In one move, he can move one of his hands to another vertex using an edge. To move a hand from vertex \(U_i\) to vertex \(V_i\), Pak Chanek needs a time of \(W_i\) seconds. Note that Pak Chanek can only move one hand at a time. This game ends when both of Pak Chanek's hands are on the same vertex.

Pak Chanek has several questions. For each \(p\) satisfying \(2 \leq p \leq N\), you need to find the minimum time in seconds needed for Pak Chanek to end the game if initially Pak Chanek's left hand and right hand are placed on vertex \(1\) and vertex \(p\), or report if it is impossible.

Input

The first line contains two integers \(N\) and \(M\) (\(2 \leq N \leq 10^5\), \(0 \leq M \leq 2 \cdot 10^5\)) — the number of vertices and edges in the graph.

The \(i\)-th of the next \(M\) lines contains three integers \(U_i\), \(V_i\), and \(W_i\) (\(1 \le U_i, V_i \le N\), \(U_i \neq V_i\), \(1 \le W_i \le 10^9\)) — a directed edge that connects two different vertices \(U_i\) and \(V_i\) with a length of \(W_i\). There is no pair of different edges \(i\) and \(j\) such that \(U_i = U_j\) and \(V_i = V_j\).

Output

Output a line containing \(N-1\) integers. The \(j\)-th integer represents the minimum time in seconds needed by Pak Chanek to end the game if initially Pak Chanek's left hand and right hand are placed on vertex \(1\) and vertex \(j+1\), or \(-1\) if it is impossible.

Note

If initially Pak Chanek's left hand is on vertex \(1\) and his right hand is on vertex \(5\), Pak Chanek can do the following moves:

  1. Move his right hand to vertex \(4\) in \(1\) second.
  2. Move his left hand to vertex \(2\) in \(2\) seconds.
  3. Move his left hand to vertex \(4\) in \(1\) second.

In total it needs \(1+2+1=4\) seconds. It can be proven that there is no other way that is faster.

D. Выбор букв

дп игры Конструктив *1800

Алиса и Боб играют в игру. Изначально им дана непустая строка \(s\), состоящая из строчных латинских букв. Длина строки четная. У каждого игрока также есть своя строка, изначально пустая.

Алиса начинает, затем они ходят по очереди. За один ход игрок берет либо первую, либо последнюю букву из строки \(s\), удаляет ее из \(s\) и приписывает ее в начало своей строки.

Игра заканчивается, когда строка \(s\) становится пустой. Побеждает игрок, у которого строка лексикографически меньше. Если строки у игроков одинаковые, то это ничья.

Строка \(a\) лексикографически меньше строки \(b\), если существует такая позиция \(i\), что \(a_j = b_j\) для всех \(j < i\) и \(a_i < b_i\).

С каким результатом закончится игра, если оба игрока играют оптимально (т. е. оба игрока стараются выиграть; если они не могут, то стараются сыграть вничью)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки — непустой строки \(s\), состоящей из строчных латинских букв. Длина строки \(s\) четная.

Суммарная длина строк по всем наборам входных данных не превосходит \(2000\).

Выходные данные

На каждый набор входных данных выведите результат игры, если оба игрока играют оптимально. Если Алиса выиграет, то выведите «Alice». Если Боб выиграет, то выведите «Bob». Если игра закончится вничью, то выведите «Draw».

Примечание

Одна из возможных игр, которую могут сыграть Алиса и Боб в первом наборе входных данных:

  1. Алиса выбирает первую букву в \(s\): \(s=\)«orces», \(a=\)«f», \(b=\)«»;
  2. Боб выбирает последнюю букву в \(s\): \(s=\)«orce», \(a=\)«f», \(b=\)«s»;
  3. Алиса выбирает последнюю букву в \(s\): \(s=\)«orc», \(a=\)«ef», \(b=\)«s»;
  4. Боб выбирает первую букву в \(s\): \(s=\)«rc», \(a=\)«ef», \(b=\)«os»;
  5. Алиса выбирает последнюю букву в \(s\): \(s=\)«r», \(a=\)«cef», \(b=\)«os»;
  6. Боб выбирает оставшуюся букву в \(s\): \(s=\)«», \(a=\)«cef», \(b=\)«ros».

Алиса выигрывает, потому что «cef» < «ros». Ни один из игроков не следует никакой стратегии в конкретно этой игре, поэтому она не показывает, что Алиса выигрывает, если игроки играют оптимально.

G. Освещение

Бинарный поиск битмаски дп Комбинаторика математика Перебор *2700

Рассмотрим отрезок \([0, d]\) координатной прямой. В этом отрезке \(n\) фонарей и \(m\) интересных точек.

Для каждого фонаря вы должны выбрать его мощность — целое число от \(0\) до \(d\) (включительно). Фонарь с координатой \(x\) освещает интересную точку с координатой \(y\), если \(|x - y|\) меньше либо равно мощности фонаря.

Способ выбрать мощности для всех фонарей является корректным, если каждая интересная точка освещена хотя бы одним фонарем.

Вам нужно обработать \(q\) запросов. Каждый запрос обозначается одним целым числом \(f_i\). Чтобы ответить на \(i\)-й запрос, вам нужно:

  • добавить фонарь в точку \(f_i\);
  • посчитать количество корректных способов назначить мощность каждому фонарю, и вывести это количество по модулю \(998244353\);
  • удалить только что добавленный фонарь.
Входные данные

В первой строке заданы три целых числа \(d\), \(n\) и \(m\) (\(4 \le d \le 3 \cdot 10^5\); \(1 \le n \le 2 \cdot 10^5\); \(1 \le m \le 16\)) — размер отрезка, количество фонарей и количество интересных точек, соответственно.

Во второй строке заданы \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(1 \le l_i \le d - 1\)), где \(l_i\) — координата \(i\)-го фонаря.

В третьей строке заданы \(m\) целых чисел \(p_1, p_2, \dots, p_m\) (\(1 \le p_i \le d - 1\)), где \(p_i\) — координата \(i\)-й интересной точки.

В четвертой строке задано одно целое число \(q\) (\(1 \le q \le 5 \cdot 10^5\)) — количество запросов.

В пятой строке заданы \(q\) целых чисел \(f_1, f_2, \dots, f_q\) (\(1 \le f_i \le d - 1\)), где \(f_i\) — число, соответствующее \(i\)-му запросу.

Дополнительное ограничение на входные данные: при обработке каждого запроса ни в какой точке отрезка нету двух или более объектов (то есть не может быть ни двух фонарей с одинаковой координатой, ни двух интересных точек с одинаковой координатой, ни фонаря и интересной точки с одинаковой координатой).

Выходные данные

Для каждого запроса выведите ответ на него по модулю \(998244353\).

G. Вырежи подстроки

дп Комбинаторика Строки хэши *2100

Вам даны две непустые строки \(s\) и \(t\), состоящие из латинских букв.

За один ход вы можете выбрать вхождение строки \(t\) в строку \(s\) и заменить его на точки.

Ваша задача — за минимальное количество ходов убрать все вхождения строки \(t\) в строке \(s\), а также посчитать, сколько существует различных последовательностей ходов минимальной длины.

Две последовательности ходов считаются различными, если множества индексов, в которых начинаются убираемые вхождения строки \(t\) в \(s\), различаются. Например, множества \(\{1, 2, 3\}\) и \(\{1, 2, 4\}\) считаются различными, множества \(\{2, 4, 6\}\) и \(\{2, 6\}\) — тоже, а множества \(\{3, 5\}\) и \(\{5, 3\}\) — нет.

Например, пусть строка \(s =\) «abababacababa», а строка \(t =\) «aba». Мы можем убрать все вхождения строки \(t\) за \(2\) хода, заменив вхождения строки \(t\) на \(3\)-й и \(9\)-й позициях на точки. В этом случае строка \(s\) пример вид «ab...bac...ba». Также можно вырезать вхождения строки \(t\) на \(3\)-й и \(11\)-й позициях. Всего есть две различные последовательности ходов минимальной длины.

Так как ответ может быть большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка входных данных содержит единственное целое число \(q\) (\(1 \le q \le 50\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит непустую строку \(s\) (\(1 \le |s| \le 500\)), состоящую из строчных латинских букв.

Вторая строка каждого набора содержит непустую строку \(t\) (\(1 \le |t| \le 500\)), состоящую из строчных латинских букв.

Гарантируется, что сумма длин строк \(s\) по всем наборам входных данных не превосходит \(500\). Аналогично, гарантируется, что сумма длин строк \(t\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите два целых числа — минимальное количество ходов и количество различных оптимальных последовательностей, взятое по модулю \(10^9 + 7\).

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе достаточно заменить любое из четырёх вхождений.

В третьем наборе строка \(s\) является конкатенацией двух строк \(t =\) «xyz», поэтому существует единственная оптимальная последовательность из \(2\) ходов.

В четвёртом и шестом наборах строка \(s\) изначально не содержит вхождений строки \(t\).

В пятом наборе строка \(s\) содержит ровно одно вхождение строки \(t\).

C. Максимум на спирали

дп Перебор *1900

Рассмотрим квадрат k × k, разделенный на единичные квадратики, причем k ≥ 3 и нечетно. Начиная от левой верхней клетки, будем красить клетки в следующем порядке: двигаемся сначала вправо, затем вниз, затем влево, затем вверх, затем опять вправо и так далее. При этом движение в одном направлении заканчиваем в одном из двух случаев: мы добрались до стенки квадрата, или следующая после следующей клетки уже покрашена. Всю покраску заканчиваем, если при движении в любом из направлений, не удается закрасить ни одной клетки. Фигуру, состоящую из закрашенных клеток, назовем спиралью.

Примеры спиралей для k = 3, 5, 7, 9 можно видеть на рисунке.

Имеется таблица n × m, в каждой ячейке которой находится число. Рассмотрим всевозможные спирали, образованные ячейками таблицы. Это означает, что мы рассматриваем спирали всевозможных размеров, которые не выходят за границы таблицы. Для каждой из спиралей найдем сумму чисел ячеек, из которых она образована. От вас требуется найти максимум из всех этих значений среди всех спиралей.

Входные данные

В первой строке записаны два целых числа n и m (3 ≤ n, m ≤ 500) — размеры таблицы.

В следующих n строках записано по m целых чисел, разделенных пробелами: j-ое число в i-ой строке aij ( - 1000 ≤ aij ≤ 1000) — число, записанное в j-ой ячейке i-ой строки таблицы.

Выходные данные

Выведите одно число — максимальную сумму чисел среди всех спиралей.

Примечание

В первом тестовом примере спираль с максимальной суммой будет покрывать все единички таблицы.

Во втором примере спираль может покрыть только шесть единичек.

F. Почти отсортировано

битмаски дп Структуры данных *2700

Дана перестановка \(p\) длины \(n\) и целое число \(k\). Рассмотрим перестановку \(q\) длины \(n\) такую, что для любых целых чисел \(i\) и \(j\), где \(1 \le i < j \le n\), выполняется \(\)p_{q_i} \le p_{q_j} + k.\(\)

Найдите минимально возможное количество инверсий, которое может быть в перестановке \(q\).

Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Инверсия в перестановке \(a\) — это пара индексов \(i\) и \(j\) (\(1 \le i, j \le n\)), такая, что \(i < j\), но \(a_i > a_j\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 5000\), \(1 \le k \le 8\)).

Вторая строка содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)).

Выходные данные

Выведите минимально возможное количество инверсий, которое может быть в перестановке \(q\).

Примечание

В первом примере единственный вариант перестановки \(q = [1]\) (\(0\) инверсий). Тогда \(p_{q_1} = 1\).

Во втором примере единственный вариант с \(1\) инверсией — \(q = [1, 3, 2]\). Тогда \(p_{q_1} = 2\), \(p_{q_2} = 1\), \(p_{q_3} = 3\).

В третьем примере один из возможных вариантов с \(6\) инверсиями — \(q = [3, 4, 5, 1, 2]\). Тогда \(p_{q_1} = 3\), \(p_{q_2} = 2\), \(p_{q_3} = 1\), \(p_{q_4} = 5\), \(p_{q_5} = 4\).

D. Новая карта Valiant

Бинарный поиск дп Перебор Структуры данных *1700

Разработчик игр «DbZ Games» хочет добавить еще одну карту в свою популярную игру «Valiant». В этот раз карта под именем «Panvel» будет сделана на основе города Мумбаи.

Мумбаи можно представить как \(n \times m\) клеточное поле. В каждой клетке \((i, j)\) (\(1 \le i \le n\); \(1 \le j \le m\)) поля расположено здание в форме параллелепипеда высотой \(a_{i,j}\).

В этот раз DbZ Games хотят создать карту с идеальным вертикальным геймплеем. Для этого им нужно выбрать квадрат \(l \times l\) в Мумбаи такой, что каждое здание в этом квадрате имеет высоту хотя бы \(l\).

Можете ли вы помочь DbZ Games найти соответствующий квадрат наибольшего размера \(l\)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных заданы два положительных целых числа \(n\) и \(m\) (\(1 \le n \le m\); \(1 \leq n \cdot m \leq 10^6\)).

В \(i\)-й из следующих \(n\) строк заданы \(m\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,m}\) (\(1 \leq a_{i,j} \leq 10^6\)) — высоты зданий в \(i\)-м ряду.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно число — наибольший размер \(l\) квадрата, который может выбрать DbZ Games.

Примечание

В первом наборе входных данных мы можем выбрать квадрат со стороной \(l = 2\) (т. е. все поле), так как высоты всех зданий больше или равны \(2\).

Во втором наборе мы можем выбрать сторону квадрата только как \(1\), а потому ответ равен \(1\).

В третьем наборе на поле нет квадратов со стороной \(2\), в которых все здания не ниже \(2\), а потому ответ равен \(1\).

E. Стоимость графа

дп жадные алгоритмы математика теория чисел *2000

Вам задан первоначально пустой неориентированный граф из \(n\) вершин, пронумерованных от \(1\) по \(n\) (т. е. \(n\) вершин и \(0\) ребер). Вы хотите добавить в него \(m\) ребер так, чтобы граф не содержал петель и кратных ребер.

Если будет добавлено ребро, соединяющее две вершины \(u\) и \(v\), его вес должен быть равен наибольшему общему делителю \(u\) и \(v\), т. е. \(\gcd(u, v)\).

Для того чтобы добавлять ребра в граф, вы можете повторять следующую операцию произвольное количество раз (возможно, ни разу):

  • выбираете целое число \(k \ge 1\);
  • добавляете ровно \(k\) ребер в граф, каждое веса \(k + 1\). Добавление этих \(k\) ребер суммарно стоит \(k + 1\).
Заметим, что вы не можете создавать петли или кратные ребра. А потому, если вы не можете добавить \(k\) ребер веса \(k + 1\), вы не можете выбрать такое \(k\).

Например, если вы можете добавить еще \(5\) ребер веса \(6\), вы можете их добавить в граф, и добавление будет стоить \(6\) за всю группу из \(5\) ребер. Однако если вы можете добавить только \(4\) ребра веса \(6\) в граф, вы не можете выполнить данную операцию для \(k = 5\).

Для заданных \(n\) и \(m\), посчитайте минимальную суммарную стоимость создания графа из \(n\) вершин и ровно \(m\) ребер, используя описанную выше операцию. Если построить такой граф нельзя, выведите \(-1\).

Заметим, что результирующий граф может состоять из нескольких компонент связности.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой и единственной строке заданы два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^6\); \(1 \leq m \leq \frac{n(n-1)}{2}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите наименьшую стоимость построения графа или \(-1\), если такой граф построить нельзя.

Примечание

В первом наборе входных данных, мы можем добавить одно ребро между вершинами \(2\) и \(4\) с \(\gcd = 2\). Это единственный способ добавить \(1\) ребро, и он будет стоить \(2\).

Во втором наборе, невозможно добавить \(10\) ребер, а потому ответ \(-1\).

В третьем наборе, мы можем добавить следующие ребра:

  • \(k = 1\): ребро веса \(2\) между вершинами \(2\) и \(4\) (\(\gcd(2, 4) = 2\)). Стоимость: \(2\);
  • \(k = 1\): ребро веса \(2\) между вершинами \(4\) и \(6\) (\(\gcd(4, 6) = 2\)). Стоимость: \(2\);
  • \(k = 2\): ребра веса \(3\): \((3, 6)\) и \((3, 9)\) (\(\gcd(3, 6) = \gcd(3, 9) = 3\)). Стоимость: \(3\).
В результате мы добавили \(1 + 1 + 2 = 4\) ребра с общей стоимостью \(2 + 2 + 3 = 7\), что является оптимальным ответом.

F. Сумма функций

бпф дп Комбинаторика математика Перебор *2500

Предположим, вам задан целочисленный массив \(a_1, a_2, \dots, a_n\).

Пусть \(\operatorname{lsl}(i)\) равно количеству индексов \(j\) (\(1 \le j < i\)) таких, что \(a_j < a_i\).

Аналогично, пусть \(\operatorname{grr}(i)\) равно количеству индексов \(j\) (\(i < j \le n\)) таких, что \(a_j > a_i\).

Назовем позицию \(i\) в массиве \(a\) хорошей, если \(\operatorname{lsl}(i) < \operatorname{grr}(i)\).

Наконец, определим функцию \(f\) на массиве \(a\) \(f(a)\) как сумму всех \(a_i\) таких, что \(i\) — хорошая в \(a\).

Для заданных целых чисел \(n\) и \(k\), посчитайте сумму \(f(a)\) по всем массивам \(a\) размера \(n\) таких, что \(1 \leq a_i \leq k\) для всех \(1 \leq i \leq n\), по модулю \(998\,244\,353\).

Входные данные

В первой и единственной строке заданы два целых числа \(n\) и \(k\) (\(1 \leq n \leq 50\); \(2 \leq k < 998\,244\,353\)).

Выходные данные

Выведите единственное число — сумму \(f\) по всем массивам \(a\) размера \(n\) по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных:

\(f([1,1,1]) = 0\)\(f([2,2,3]) = 2 + 2 = 4\)
\(f([1,1,2]) = 1 + 1 = 2\)\(f([2,3,1]) = 2\)
\(f([1,1,3]) = 1 + 1 = 2\)\(f([2,3,2]) = 2\)
\(f([1,2,1]) = 1\)\(f([2,3,3]) = 2\)
\(f([1,2,2]) = 1\)\(f([3,1,1]) = 0\)
\(f([1,2,3]) = 1\)\(f([3,1,2]) = 1\)
\(f([1,3,1]) = 1\)\(f([3,1,3]) = 1\)
\(f([1,3,2]) = 1\)\(f([3,2,1]) = 0\)
\(f([1,3,3]) = 1\)\(f([3,2,2]) = 0\)
\(f([2,1,1]) = 0\)\(f([3,2,3]) = 2\)
\(f([2,1,2]) = 1\)\(f([3,3,1]) = 0\)
\(f([2,1,3]) = 2 + 1 = 3\)\(f([3,3,2]) = 0\)
\(f([2,2,1]) = 0\)\(f([3,3,3]) = 0\)
\(f([2,2,2]) = 0\)

Сложив все значения, получаем ответ, равный \(28\).

B. Угу

дп жадные алгоритмы Перебор реализация *900

Бинарной строкой называется строка, состоящая только из символов 0 и 1. Вам дана бинарная строка \(s_1 s_2 \ldots s_n\). Нужно сделать эту строку неубывающей за наименьшее количество операций. Иными словами, каждый символ должен быть не меньше предыдущего. За одну операцию вы можете сделать следующее:

  • Выбрать произвольный индекс в строке \(1 \leq i \leq n\);
  • Для всех \(j \geq i\) поменять значение в \(j\)-й позиции на противоположное, то есть если \(s_j = 1\), то сделать \(s_j = 0\), и наоборот.

За какое минимальное количество операций можно сделать строку неубывающей?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину строки.

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество операций, которое потребуется сделать, чтобы сделать строку неубывающей.

Примечание

В первом наборе входных данных строка уже неубывающая.

Во втором наборе входных данных можно выбрать \(i = 1\), и после этого \(s = \mathtt{01}\).

В третьем наборе входных данных можно выбрать \(i = 1\) и получить \(s = \mathtt{010}\), а после этого выбрать \(i = 2\). В результате получим \(s = \mathtt{001}\), то есть неубывающую строку.

В шестом наборе входных данных можно на первой итерации выбрать \(i = 5\) и получить \(s = \mathtt{100001}\). Затем выбрать \(i = 2\), тогда \(s = \mathtt{111110}\). Дальше выбираем \(i = 1\), и получаем неубывающую строку \(s = \mathtt{000001}\).

E. Локация

дп математика Структуры данных теория чисел *2800

Вам даны два массива целых чисел \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_n\). Вам нужно обработать \(q\) запросов двух типов:

  • \(1\) \(l\) \(r\) \(x\): присвоить \(a_i := x\) для всех \(l \leq i \leq r\);
  • \(2\) \(l\) \(r\): найти минимальное значение следующего выражения по всем \(l \leq i \leq r\): \(\)\frac{\operatorname{lcm}(a_i, b_i)}{\gcd(a_i, b_i)}.\(\)

В данной задаче \(\gcd(x, y)\) обозначает наибольший общий делитель чисел \(x\) и \(y\), а \(\operatorname{lcm}(x, y)\) обозначает наименьшее общее кратное чисел \(x\) и \(y\)

Входные данные

В первой строке находятся два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 5 \cdot 10^4\)) — количество чисел в массивах \(a\) и \(b\) и количество запросов.

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 5 \cdot 10^4\)) — элементы массива \(a\).

В третьей строке находятся \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 5 \cdot 10^4\)) — элементы массива \(b\).

Далее следует \(q\) строк, \(j\)-я из которых начинается с целого числа \(t_j\) (\(1 \leq t_j \leq 2\)) и означает, что \(j\)-й запрос имеет тип \(t_j\).

Если \(t_j = 1\), то остальная часть строки содержит целые числа \(l_j\), \(r_j\) и \(x_j\) (\(1 \leq l_j \leq r_j \leq n\), \(1 \leq x_j \leq 5 \cdot 10^4\)).

Если \(t_j = 2\), то остальная часть строки содержит целые числа \(l_j\) и \(r_j\) (\(1 \leq l_j \leq r_j \leq n\)).

Гарантируется, что есть хотя бы один запрос типа \(2\).

Выходные данные

Для каждого запроса второго типа выведите ответ на задачу.

Примечание

В первом примере:

  • Для первого запроса мы можем выбрать \(i = 4\). Тогда значение равно \(\frac{\operatorname{lcm}(4, 4)}{\gcd(4, 4)} = \frac{4}{4} = 1\).
  • После второго запроса массив \(a = [6, 10, 15, 4, 9, 25, 9, 9, 9, 9]\).
  • Для третьего запроса мы можем выбрать \(i = 9\). Тогда значение равно \(\frac{\operatorname{lcm}(9, 18)}{\gcd(9, 18)} = \frac{18}{9} = 2\).

Во втором примере:

  • Для первого запроса мы можем выбрать \(i = 4\). Тогда значение равно \(\frac{\operatorname{lcm}(1, 5)}{\gcd(1, 5)} = \frac{5}{1} = 5\).
  • После второго запроса массив \(a = [10, 18, 18, 5]\).
  • После третьего запроса массив \(a = [10, 10, 18, 5]\).
  • Для четвёртого запроса мы можем выбрать \(i = 2\). Тогда значение равно \(\frac{\operatorname{lcm}(10, 12)}{\gcd(10, 12)} = \frac{60}{2} = 30\).

D2. Ноль-один (сложная версия)

дп жадные алгоритмы *2000

Это усложненная версия задачи. В этой версии выполняется \(n \le 5000\), и нет ограничений между \(x\) и \(y\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны две бинарные строки \(a\), \(b\) длины \(n\). Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выберите два индекса \(l\) и \(r\) (\(l < r\)).
  • Замените \(a_l\) на \((1 - a_l)\) и \(a_r\) на \((1 - a_r)\).
  • Если \(l + 1 = r\), стоимость операции равна \(x\). В противном случае стоимость равна \(y\).

Вы должны найти минимально необходимую стоимость для превращения \(a\) в \(b\), или сказать, что это невозможно сделать.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк. Первая строка содержит три целых числа \(n\), \(x\) и \(y\) (\(5 \le n \le 5000\), \(1 \le x, y \le 10^9\)) — длина строк и операций.

Вторая строка каждого набора входных данных содержит строку \(a\) длины \(n\). Строка состоит только из цифр \(0\) и \(1\).

Третья строка каждого набора входных данных содержит строку \(b\) длины \(n\). Строка состоит только из цифр \(0\) и \(1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных, если нет способа сделать \(a\) равным \(b\), выведите \(-1\). В противном случае выведите минимальную стоимость, чтобы \(a\) равнялось \(b\). Ответ следует печатать по одному в строке.

Примечание

В первом примере можно выбрать индексы \(2\) и \(3\), стоимость операции будет равна \(8\).

Во втором примере мы можем выполнить следующие операции.

  • Выберите индексы \(1\) и \(2\). Это стоит \(2\), и после этого \(a\) равно 110001.
  • Выберите индексы \(2\) и \(3\). Это стоит \(2\), и после этого \(a\) равно 101001.
  • Выберите индексы \(3\) и \(4\). Это стоит \(2\), и после этого \(a\) равно 100101.
  • Выберите индексы \(4\) и \(5\). Это стоит \(2\), и после этого \(a\) равно 100011.
  • Выберите индексы \(5\) и \(6\). Это стоит \(2\), и после этого \(a\) равно 100000.

Общая стоимость \(10\).

В третьем примере не возможно сделать \(a\) равным \(b\) при помощи этой операции.

В четвертом примере, мы можем выполнить следующие операции.

  • Выберите индексы \(3\) и \(6\). Это стоит \(3\), и после этого \(a\) равно 0101011.
  • Выберите индексы \(4\) и \(6\). Это стоит \(3\), и после этого \(a\) равно 0100001.

Общая стоимость \(6\).

В пятом примере, мы можем выполнить следующие операции.

  • Выберите индексы \(1\) и \(6\). Это стоит \(4\), и после этого \(a\) равно 110000.
  • Выберите индексы \(2\) и \(3\). Это стоит \(3\), и после этого \(a\) равно 101000.

Общая стоимость \(7\).

В шестом примере строки изначально равны, поэтому оптимально не выполнять никаких операции.

E. Конвейер

дп Конструктив математика *2700

Есть конвейер со \(120\) строками и \(120\) столбцами. Каждая строка и столбец пронумерованы от \(0\) до \(119\), а ячейка в \(i\)-й строке и \(j\)-й столбце обозначена как \((i, j)\). Самая верхняя левая ячейка обозначается \((0, 0)\). Каждая ячейка имеет маленькую конвейерную ленту, и изначально лента в каждой ячейке направлена вправо.

Изначально в ячейке \((0, 0)\) находится слайм, а остальные ячейки пусты. Каждую секунду состояние конвейера меняется следующим образом.

  • Все шарики слизи на конвейере одновременно перемещаются на одну клетку в направлении ленты конвейера в текущей ячейке. Если новая позиция находится снаружи конвейера, слайм выпадает с конвейера, а если два слайма перемещаются в одну и ту же ячейку, они сливаются в один.
  • Все клетки, в которых в предыдущую секунды были слаймы, меняю направление конвейерной ленты: ленты, обращенные вправо, становятся обращенными вниз, и наоборот.
  • На ячейку \((0, 0)\) помещается новый слайм.

Даны \(q\) запросов, каждый состоит из трех целых чисел \(t\), \(x\) и \(y\). Вы должны определить, есть ли слайм в клетке \((x, y)\) спустя \(t\) секунд после начала. Сможете ли вы сделать это?

Входные данные

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 10^4\)) — количество запросов.

Единственная строка каждого запроса содержит три целых числа \(t\), \(x\) и \(y\) (\(0 \le t \le 10^{18}\), \(0 \le x, y < 120\)).

Выходные данные

Выведите ответ для каждого запроса по одному в строке. Если в ячейке \((x, y)\) через \(t\) секунд после исходного состояния находится слайм, выведите «YES». В противном случае выведите «NO».

Примечание

Состояние конвейера при \(t = 0\). Красная стрелка представляет направление каждой ленты, а синие отметки показывают положения слаймов.

Состояние конвейера при \(t = 1\).

Состояние конвейера при \(t = 2\).

D. Слаймовый побег

дп жадные алгоритмы Структуры данных *1800

Вы играете в игру под названием Слаймовый побег. Игра проходит на числовой прямой. Изначально на прямой \(n\) слаймов. Для каждого целого числа \(i\) такого, что \(1 \le i \le n\), \(i\)-й слайм находится в позиции \(i\) и имеет здоровье \(a_i\). Вы управляете слаймом в позиции \(k\).

С прямой два выхода в позициях \(0\) и \(n+1\). Ваша цель — достигнуть любого из двух выходов после выполнения любого количества шагов.

За один шаг вы можете переместить свой слайм налево или направо на одну позицию. Однако если в позиции, куда вы перемещаете свой слайм, есть другой слайм, вы должны его поглотить. При поглощении слайма к здоровью вашего слайма добавляется здоровье поглощенного слайма, а после этого поглощенный слайм убирается из игры.

Обратите внимание, что у некоторых слаймов может быть отрицательное здоровье, и ваше здоровье уменьшится при поглощении таких слаймов.

Вы проигрываете, если в какой-то момент игры здоровье вашего слайма становится отрицательным.

Можете ли вы достичь одного из двух выходов, не проиграв?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 20\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(3 \leq n \leq 200\,000\), \(1 \leq k \leq n\)) — количество слаймов и позиция вашего слайма.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — здоровье слаймов.

Гарантируется, что здоровье вашего слайма неотрицательное (\(a_k \geq 0\)), и у всех остальных слаймов здоровье не равно нулю (\(a_i \ne 0\) при \(i \ne k\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если можно добраться до выхода, не проиграв, иначе выведите «NO» (без кавычек).

Примечание

В первом примере вы управляете слаймом в позиции \(4\) со здоровьем \(6\). Один из способов выбраться — поглотить слаймов в позициях \(5\), \(6\) и \(7\). Вы достигнете выхода со здоровьем \(0\) в позиции \(8\).

Во втором примере вы управляете слаймом со здоровьем \(232\) в позиции \(1\). Так как ваш слайм уже у выхода в позиции \(0\), вы можете сразу переместиться туда, не поглощая других слаймов.

В третьем примере можно показать, что здоровье вашего слайма всегда достигнет отрицательных значений до того, как вы достигнете выхода.

В четвертом примере вы управляете слаймом в позиции \(4\) со здоровьем \(6\). Ниже описана возможная последовательность действий для победы.

  1. Поглотить слаймов в позициях \(5\), \(6\) и \(7\): ваше здоровье становится равно \(4\) после поглощения слайма со здоровьем \(-2\); становится \(1\) после поглощения слайма со здоровьем \(-3\); \(7\) после поглощения слайма со здоровьем \(6\).
  2. Поглотить слаймов в позициях \(3\) и \(2\): ваше здоровье становится \(7-7+10=10\).
  3. Поглотить слайм в позиции \(8\): ваше здоровье становится \(10-10=0\).
  4. Дойти до выхода в позиции \(9\).

Так как здоровье вашего слайма всегда оставалось неотрицательным, вы выиграли.

F. Нули и единицы

битмаски дп математика разделяй и властвуй *2500

Пусть \(S\) — это строка Туэ-Морса. Другими словами, \(S\) — это пронумерованная с \(0\) бинарная строка бесконечной длины, построенная следующим образом:

  • Изначально \(S\) равна «0».
  • Затем мы повторяем следующую операцию бесконечно много раз: конкатенируем \(S\) с ее копией, в которой все биты заменены на противоположные по значению.

    Например, ниже показаны первые четыре операции:

    Номер операции\(S\) до операции\(S\) до операции с заменой битСконкатенированная \(S\)
    10101
    201100110
    30110100101101001
    401101001100101100110100110010110
    \(\ldots\)\(\ldots\)\(\ldots\)\(\ldots\)

Вам даны два положительных числа \(n\) и \(m\). Найдите количество позиций, в которых отличаются строки \(S_0 S_1 \ldots S_{m-1}\) и \(S_n S_{n + 1} \ldots S_{n + m - 1}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора содержит два положительных числа \(n\) и \(m\) (\(1 \leq n,m \leq 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество позиций, в которых отличаются данные строки.

Примечание

Строка \(S\) равна 0110100110010110....

В первом примере \(S_0\) это «0», а \(S_1\) это «1». Эти строки отличаются в \(1\) позиции.

Во втором примере \(S_0 S_1 \ldots S_9\) это «0110100110», а \(S_5 S_6 \ldots S_{14}\) это «0011001011». Эти строки отличаются в \(6\) позициях.

C2. Хорошие подмассивы (сложная версия)

Бинарный поиск дп Структуры данных *2400

Это сложная версия этой задачи. В этой версии присутствуют запросы. Обратите внимание, что в этой версии в каждом тесте ровно один набор входных данных. Вы можете делать взломы только если обе версии задачи решены.

Массив \(b\) длины \(m\) является хорошим, если \(i\)-й элемент больше либо равен \(i\) для всех \(i\). Другими словами, \(b\) хороший, если и только если \(b_i \geq i\) для всех \(i\) (\(1 \leq i \leq m\)).

Вам дан массив \(a\), состоящий из \(n\) положительных целых чисел, а также \(q\) запросов.

В каждом запросе вам даны два целых числа \(p\) и \(x\) (\(1 \leq p,x \leq n\)). Вам нужно выполнить \(a_p := x\) (присвоить \(x\) элементу \(a_p\)). В обновленном массиве, найдите количество пар индексов \((l, r)\), где \(1 \le l \le r \le n\), таких, что массив \([a_l, a_{l+1}, \ldots, a_r]\) хороший.

Обратите внимание, что все запросы независимы то есть после каждого запроса массив \(a\) восстанавливается к изначальному состоянию.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Третья строка содержит одно целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(p_j\) и \(x_j\) (\(1 \leq p_j, x_j \leq n\)) – описание \(j\)-го запроса.

Выходные данные

Для каждого запроса выведите количество подходящих пар индексов после изменения массива.

Примечание

Ниже находятся примечания к первому примеру.

В первом запросе \(a=[2,4,1,4]\). Здесь \((1,1)\), \((2,2)\), \((3,3)\), \((4,4)\), \((1,2)\) и \((3,4)\) являются подходящими парами.

Во втором запросе \(a=[2,4,3,4]\). Все подмассивы \(a\) являются хорошими.

В третьем запросе \(a=[2,1,1,4]\). Здесь \((1,1)\), \((2,2)\), \((3,3)\), \((4,4)\) и \((3,4)\) являются подходящими парами.

E. Поменяй местами и возьми

дп жадные алгоритмы *2600

Вам дан массив из \(n\) целых чисел. Вы должны сделать \(n\) ходов.

Изначально у вас счет \(0\).

На \(i\)-м ходе вы можете один раз поменять местами любые \(2\) соседних элемента, а затем заменить ровно один из них на \(0\). Или вы можете пропустить ход. В любом случае, после этого к вашему счету добавляется \(a_i\).

Какой максимальный счет вы можете получить?

Входные данные

Первая строка содержит целое число \(n\) (\(2 \le n \le 500\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)).

Выходные данные

Выведите одно целое число — максимально возможный счет.

Примечание

В первом примере чтобы получить максимальный счет, будем действовать следующим образом. Первый ход пропустим, к счету добавится \(3\). На втором ходу поменяем местами первый и второй элемент, и заменим \(1\) на \(0\), к счету добавится \(3\). Итоговый счет \(6\).

D. Эла и волшебник

графы дп жадные алгоритмы кратчайшие пути Перебор реализация *2200

Эле нужно отправить большой пакет данных с компьютера \(1\) на компьютер \(n\) через сеть компьютеров. В настоящее время сеть работает слишком медленно, и пакет может не успеть вовремя. К счастью, добрый волшебник протянул ей руку помощи.

Сеть может быть представлена как неориентированный связный граф с \(n\) вершинами, каждая из которых представляет компьютер. Для их соединения используются \(m\) проводов. Провод \(i\) используется для соединения компьютеров \(u_i\) и \(v_i\) и имеет вес \(w_i\). Вышеупомянутый пакет при прохождении через провод \(i\) переместится с компьютера \(u_i\) на компьютер \(v_i\) (или наоборот) ровно за \(w_i\) микросекунд. Волшебник может использовать свое заклинание произвольное количество раз. Для каждого заклинания он выберет провод с индексом \(i\), соединяющий компьютеры \(u_i\) и \(v_i\), и переподключит его, выполнив следующие действия:

  • Выберет один из компьютеров, соединенный этим проводом. Без ограничения общности выберем \(v_i\).
  • Выберет компьютер, который в данный момент подключен к \(v_i\) (можно выбрать \(u_i\)), назовем его \(t_i\), отсоединит провод с индексом \(i\) от \(v_i\), и соединит им \(u_i\) и \(t_i\).

Переподключение провода \(i\) займет \(w_i\) микросекунд, а вес провода после этой операции не изменится. После переподключения компьютер может иметь какой-то провод, соединяющий его с самим собой. Переподключение также может сделать граф несвязным.

Задача Элы — как можно быстрее отправить пакет данных с компьютера \(1\) на компьютер \(n\). Обратите внимание, что волшебник может использовать свое заклинание сколько угодно раз (возможно, ноль). Чтобы обеспечить бесперебойную работу сети при передаче большого пакета, все заклинания могут использоваться только до начала передачи данных с компьютера \(1\).

Какое минимальное количество времени потребуется для передачи пакета данных с компьютера \(1\) на компьютер \(n\), с учетом времени, потраченного на применение заклинаний?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 500\), \(n - 1 \le m \le 250 000\)) — количество вершин и проводов соответственно.

\(i\)-я из следующих \(m\) строк содержит три числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i, v_i \le n\), \(1 \le w_i \le 10^9\)) — номера двух компьютеров, соединенных \(i\)-м проводом, и его вес.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(500\) и сумма \(m\) по всем наборам не превышает \(250 000\). Граф в каждом наборе входных данных гарантированно будет связным и без петель, но он может содержать кратные ребра.

Выходные данные

Для каждого набора входных данных выведите одно целое число, обозначающее наименьшее количество времени, необходимое для передачи пакета данных с компьютера \(1\) на \(n\).

Примечание

Граф в первом наборе входных данных:

Эла может попросить волшебника использовать его заклинание на проводе с индексом \(7\), который соединяет компьютеры \(2\) и \(3\). Поскольку компьютер \(8\) подключена к компьютеру \(3\), волшебник может отключить провод \(7\) от компьютера \(3\) и подключить его к компьютеру \(8\) за \(3\) микросекунды (вес провода \(3\)).

После этого пакет можно отправить с компьютера \(1\) на компьютер \(8\) за \(6\) микросекунд. Следовательно, ответ \(3 + 6 = 9\) микросекунд.

E. Эла идет в поход

дп Комбинаторика математика Теория вероятностей *2500

Эла любит ходить в походы. Она любит природу и исследует различных животных. Однажды она увидела муравьев странного вида с каннибальскими наклонностями. В частности, муравей такого вида съест любого меньшего муравья, которого он увидит.

Заинтересовавшись этой особенностью, Эла решила провести эксперимент.

Она посадила \(n\) муравьев-каннибалов в ряд на длинной деревянной палке. Изначально все муравьи имеют одинаковый вес \(1\). Расстояние между любыми двумя соседними муравьями одинаково. Расстояния между первым муравьем в цепочке до левого конца палки и последним муравьем в цепочке до правого конца палки также одинаковы и равны расстоянию между двумя соседними муравьями. В какой-то момент каждый муравей начинает двигаться влево либо вправо равновероятно случайным образом с одной и той же постоянной для всех муравьев скоростью на протяжении всего эксперимента. Муравьи поворачиваются в обратную сторону сразу же, как только достигнут конца палки. Вскоре Эле удалось выяснить поведение муравьев в случае встречи.

  • Если два муравья разного веса встретятся, более тяжелый мгновенно съест более легкого и увеличит свой вес на вес более легкого. После этого он продолжит идти в том же направлении. Например, если более тяжелый муравей имеет вес \(x\) и идет вправо, а более легкий имеет вес \(y\) и идет влево (\(x > y\)), то после встречи более легкий будет съеден, а более тяжелый будет иметь вес \(x + y\) и продолжит идти вправо.
  • Если два муравья одного веса встретятся, то тот, кто идет влево, мгновенно съест того, кто идет вправо, а затем продолжит идти в том же направлении. Другими словами, если один муравей веса \(x\), идущий влево, встретится с другим муравьем веса \(x\), идущим вправо, то муравей, идущий вправо, будет съеден, а идущий влево будет весить \(2x\) и продолжит двигаться влево.

Заметьте, что два муравья могут встретиться, только если идут в разные стороны

Можно доказать, что через определенное время останется только один муравей. Изначально каждый муравей будет случайным образом равновероятно двигаться влево или вправо, что порождает \(2^n\) различных случаев начального движения. Для каждого муравья вычислите вероятность того, что он в итоге выживет. Выведите ее по модулю \(10^9 + 7\).

Формально, пусть \(M = 10^9 + 7\). Можно показать, что ответ можно представить в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, а \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — количество муравьев в эксперименте.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого теста выведите \(n\) строк. В \(i\)-й строке выведите единственное число, обозначающее вероятность выживания \(i\)-го муравья в строке по модулю \(10^9 + 7\).

Примечание

В примере на ветке находятся \(6\) муравьев. Движение муравья будет обозначаться для удобства либо символом \(L\), либо \(R\). Пусть муравьи на ветке будут двигаться как \(RLRRLR\). Вот как они ведут себя после этого:

Первоначально муравьи располагаются, как указано выше.

Через некоторое время муравей с индексом \(2\) (идущий влево) встретится с муравьем с индексом \(1\) (идущий вправо). Два муравья имеют одинаковый вес, поэтому муравей \(2\) съест муравья \(1\) и будет иметь вес \(2\). То же самое произойдет с муравьем \(5\) и муравьем \(4\).

Муравей \(6\) дойдет до конца палки, тем самым изменив свое направление.

После этого муравей с индексом \(5\) встретится с муравьем с индексом \(3\). Поскольку муравей \(5\) тяжелее (вес \(2\)), чем муравей \(3\) (вес \(1\)), муравей \(5\) съест муравья \(3\) и будет иметь вес \(3\).

Муравей \(2\) дойдет до конца палки, тем самым изменив свое направление.

После этого муравей с индексом \(5\) встретится с муравьем с индексом \(2\). Поскольку муравей \(5\) тяжелее (вес \(3\)), чем муравей \(2\) (вес \(2\)), муравей \(5\) съест муравья \(2\) и наберет вес \(5\).

Наконец, после того, как муравей \(5\) дойдет до конца ветки и изменит направление, муравей \(5\) съест муравья \(6\) и останется последним оставшимся муравьем.

C. Упоротые четные числа

дп жадные алгоритмы игры математика *1500

Алиса и Боб играют в игру на последовательности \(a_1, a_2, \dots, a_n\) длины \(n\). Их ходы чередуются, и Алиса ходит первой.

В свой ход каждый игрок должен выбрать одно число и убрать его из последовательности. Игра заканчивается, когда в последовательности не остается чисел.

Алиса выигрывает, если сумма убранных ей чисел четная; в противном случае выигрывает Боб.

Ваша задача определить кто победит, если оба игрока играют оптимально.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 100\)) — Количество наборов входных данных. Затем следуют описания наборов входных данных.

В первой строке набора входных данных содержится целое число \(n\) (\(1 \leq n \leq 100\)), означающее длину последовательности.

Во второй строке набора входных данных содержится \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)), сама последовательность.

Выходные данные

Для каждого набор входных данных выведите «Alice» (без кавычек) если Алиса побеждает, и «Bob» (без кавычек) в противном случае.

Примечание

В первом примере Алиса всегда выбирает два нечетных числа, Таким образом, сумма выбранных ей чисел всегда четна, а значит она побеждает.

В третьем примере у Боба есть выигрышная стратегия, заключающаяся в том, что он всегда выбирает число той же четности, что и Алиса в свой последний ход. Следовательно, Боб всегда выигрывает.

В четвертом примере Алиса всегда выбирает два четных числа, Таким образом, сумма выбранных ей чисел всегда четна, а значит она побеждает.

E. Упоротый баланс

дп Комбинаторика математика *2300

Дана последовательность \(a_1, a_2, \dots, a_n\) длины \(n\), ваша задача посчитать число, по модулю \(998244353\), способов разбить ее на несколько не пустых непрерывных подпоследовательностей так, что сумма элементов в подпоследовательностях является сбалансированной последовательностью.

Последовательность \(s_1, s_2, \dots, s_k\) длины \(k\) является сбалансированной, если \(s_{i} = s_{k-i+1}\) для всех \(1 \leq i \leq k\). Например, \([1, 2, 3, 2, 1]\) и \([1,3,3,1]\) сбалансированный, а \([1,5,15]\) нет.

Формально, каждое разбиение может быть описано последовательностью индексов \(i_1, i_2, \dots, i_k\) длины \(k\) и \(1 = i_1 < i_2 < \dots < i_k \leq n\) такое, что

  1. \(k\) является числом непустых непрерывных подпоследовательностей в разделении;
  2. Для каждого \(1 \leq j \leq k\), \(j\)-я непрерывная подпоследовательность начинается в \(a_{i_j}\), и заканчивается перед \(a_{i_{j+1}}\), где \(i_{k+1} = n + 1\). Значит, что \(j\)-я подпоследовательность это \(a_{i_j}, a_{i_j+1}, \dots, a_{i_{j+1}-1}\).
Всего \(2^{n-1}\) различных разбиений.

Пусть \(s_1, s_2, \dots, s_k\) означает суммы элементов в подпоследовательностях относительно разбиения \(i_1, i_2, \dots, i_k\). Формально, для каждого \(1 \leq j \leq k\), \(\) s_j = \sum_{i=i_{j}}^{i_{j+1}-1} a_i = a_{i_j} + a_{i_j+1} + \dots + a_{i_{j+1}-1}. \(\) Например, разбиение \([1\,|\,2,3\,|\,4,5,6]\) последовательности \([1,2,3,4,5,6]\) задается последовательностью индексов \([1,2,4]\), и суммы элементов разбиения будут равны \([1,5,15]\).

Два разбиения \(i_1, i_2, \dots, i_k\) и \(i'_1, i'_2, \dots, i'_{k'}\) (описанные последовательностью индексов) являются разными, если выполнено хотя бы одно из следующих условий.

  • \(k \neq k'\),
  • \(i_j \neq i'_j\) для некоторого \(1 \leq j \leq \min\left\{ k, k' \right\}\).
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 10^5\)), означающее длину последовательности \(a\).

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \leq a_i \leq 10^9\)), означающие элементы последовательности \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого тестового примера выведите количество разделений, в которых сумма элементов в каждой подпоследовательности сбалансирована по модулю \(998244353\).

Примечание

В первом примере существует только один способ разделить последовательность длины \(1\), который, разумеется, сбалансированный.

Для второго теста существует \(2\) способа разделить последовательность:

  • Сама последовательность \([1, 1]\) тогда \(s = [2]\) сбалансирована;
  • Разделить на две последовательности \([1\,|\,1]\), тогда \(s = [1, 1]\) сбалансирована.

В третьем тесте существует \(3\) способа разделить последовательность:

  • Сама последовательность \([0, 0, 1, 0]\), тогда \(s = [1]\) сбалансирована;
  • \([0 \,|\, 0, 1 \,|\, 0]\), тогда \(s = [0, 1, 0]\) сбалансирована;
  • \([0, 0 \,|\, 1 \,|\, 0]\), тогда \(s = [0, 1, 0]\) сбалансирована.

В четвертом примере существует \(4\) способа разделить последовательность:

  • Сама последовательность \([1, 2, 3, 2, 1]\), тогда \(s = [9]\) сбалансирована;
  • \([1, 2 \,|\, 3 \,|\, 2, 1]\), тогда \(s = [3, 3, 3]\) сбалансирована;
  • \([1 \,|\, 2, 3, 2 \,|\, 1]\), тогда \(s = [1, 7, 1]\) сбалансирована;
  • \([1 \,|\, 2 \,|\, 3 \,|\, 2 \,|\, 1]\), тогда \(s = [1, 2, 3, 2, 1]\) сбалансирована.

В пятом примере существует \(2\) способа разделить последовательность:

  • Сама последовательность \([1, 3, 5, 7, 9]\), тогда \(s = [25]\) сбалансирована;
  • \([1, 3, 5 \,|\, 7 \,|\, 9]\), тогда \(s = [9, 7, 9]\) сбалансирована.

Для шестого примера любое разбиение подходит. Значит, ответ равен \(2^{32-1} \equiv 150994942 \pmod {998244353}\).

G. Упоротое противодействие увеличению

дп жадные алгоритмы Конструктив математика *2900

Вам дана таблица \(n \times n\).

Обозначим за \((i, j)\) клетку из \(i\)-й строки и \(j\)-го столбца. Для каждой клетки известно, можно ее удалить или нет.

Дано целое число \(k\), вам необходимо удалить ровно \((n-k+1)^2\) клеток из таблицы так, чтобы выполнялось следующее условие.

  • Нельзя найти \(k\) неудаленных клеток \((x_1, y_1), (x_2, y_2), \dots, (x_k, y_k)\) которые строго возрастают, т.е. \(x_i < x_{i+1}\) и \(y_i < y_{i+1}\) для всех \(1 \leq i < k\).
Ваша задача найти любое решение, или сказать, что его нет.
Входные данные

В первой строк содержится целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборо входных данных.

Первая строка набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \leq k \leq n \leq 1000\)).

Далее следуют \(n\) строк. \(i\)-я строка содержит бинарную строку \(s_i\) длины \(n\). \(j\)-й символ \(s_i\) это 1 если вы можете удалить клетку \((i, j)\), и 0 в противном случае.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных, если не существует способа удалить ровно \((n-k+1)^2\) клеток, чтобы выполнить условие, выведите «NO» (без кавычек).

В противном случае выведите «YES» (без кавычек). Затем, выведите \(n\) строк. \(i\)-я строка должна содержать бинарную строку \(t_i\) длины \(n\). \(j\)-й символ \(t_i\) это 0 если клетка \((i, j)\) удалена, и 1 в противном случае.

Если существуют несколько решений, выведите любое из них.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

В первом примере достаточно удалить клетку \((1, 1)\).

Во втором примере можно выбрать для удаления клетки \((1,1)\), \((1,2)\), \((4,3)\) и \((4,4)\).

Для третьего примера нет решения, потому что клетки по диагонали всегда будут образовывать строго возрастающую последовательность длины \(5\).

C. Карточная игра

дп игры Комбинаторика Конструктив *1500

Рассмотрим игру с \(n\) картами (\(n\) четное). На каждой карте написано число от \(1\) до \(n\). Числа на всех картах различны. Скажем, что карта с числом \(x\) сильнее карты с числом \(y\), если \(x > y\).

Два игрока, Алексей и Борис играют в эту игру. В начале каждый из них получает ровно по \(\frac{n}{2}\) карт, так что каждая карта находится ровно у одного игрока. Затем они ходят по очереди. Сначала ходит Алексей, затем Борис, затем снова Алексей и так далее.

На своем ходу игрок должен сыграть ровно одну из своих карт. Затем, если у соперника нет карт сильнее сыгранной карты, то соперник проигрывает, и игра заканчивается. Иначе соперник должен сыграть карту сильнее сыгранной (тоже ровно одну). Эти две карты удаляются из игры, и ход заканчивается. Если карт больше нет, то игра заканчивается вничью; иначе ход переходит к сопернику.

Рассмотрим все способы распределить карты между двумя игроками так, чтобы у каждого была ровно половина всех карт. Вам надо посчитать три величины:

  • количество способов раздать карты так, чтобы выиграл Алексей;
  • количество способов раздать карты так, чтобы выиграл Борис;
  • количество способов раздать карты так, чтобы игра закончилась вничью.

Полагаем, что оба игрока играют оптимально (т. е. если игрок может выиграть вне зависимости от действий его соперника, то он выигрывает). Два способа раздать карты считаются различными, если есть хотя бы одна такая карта, что в одном из способов она у Алексея, а в другом — у Бориса.

Например, пусть \(n = 4\), Алексей получает карты \([2, 3]\), а Борис получает карты \([1, 4]\). Игра может пойти следующим образом:

  • если Алексей играет карту \(2\), Борис должен ответить картой \(4\). Ход Алексея заканчивается, и начинается ход Бориса. У Бориса осталась только карта \(1\); он играет ее, и Алексей отвечает картой \(3\). Игра заканчивается ничьей;
  • если Алексей играет карту \(3\), Борис должен ответить картой \(4\). Ход Алексея заканчивается, и начинается ход Бориса. У Бориса осталась только карта \(1\); он играет ее, и Алексей отвечает картой \(2\). Игра заканчивается ничьей.

Таким образом, в этом случае игра заканчивается вничью.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 30\)) — количество наборов входных данных.

Затем следуют \(t\) строк. В \(i\)-й строке записано одно четное число \(n\) (\(2 \le n \le 60\)).

Выходные данные

На каждый набор входных данных выведите три числа:

  • количество способов раздать карты так, чтобы выиграл Алексей;
  • количество способов раздать карты так, чтобы выиграл Борис;
  • количество способов раздать карты так, чтобы игра закончилась вничью.

Так как ответ может быть достаточно большим, выведите его по модулю \(998244353\).

Примечание

В первом наборе входных данных Алексей выигрывает, если он получает карту \(2\) (он ее играет, а Борис не может ответить). Если Алексей получает карту \(1\), то игра заканчивается вничью.

Во втором наборе входных данных:

  • Алексей выигрывает, если он получает карты \([3, 4]\), \([2, 4]\) или \([1, 4]\);
  • Борис выигрывает, если Алексей получает карты \([1, 2]\) или \([1, 3]\);
  • игра заканчивается вничью, если Алексей получает карты \([2, 3]\).

E. Робот-пылесос

битмаски дп *2400

Рассмотрим коридор, которой может быть представлен как матрица из \(2\) строк и \(n\) столбцов. Определим ячейку на пересечении \(i\)-й строки и \(j\)-го столбца как \((i, j)\). Расстояние между ячейками \((i_1, j_1)\) и \((i_2, j_2)\) равно \(|i_1 - i_2| + |j_1 - j_2|\).

В клетке \((1, 1)\) стоит робот-пылесос. Некоторые клетки коридора чистые, остальные — грязные (клетка, в которой стоит робот, чистая). Вы хотите очистить коридор, поэтому вы планируете запустить робота для этой работы.

После запуска робот делает следующее. Пока есть хотя бы одна грязная клетка, робот выбирает ближайшую (к текущей клетке) клетку среди грязных, перемещается туда и очищает ее (клетка перестает быть грязной). После очистки робот снова находит ближайшую к его текущей клетке грязную клетку, и так далее. Этот процесс повторяется, пока весь коридор не станет чистым.

Однако в программе робота есть серьезная ошибка. Если в какой-то момент есть несколько ближайших (к текущей позиции робота) грязных клеток, то робот ломается.

Вы хотите сами очистить коридор так, чтобы робот не сломался. До запуска робота вы можете очистить несколько (возможно, ноль) грязных клеток вручную. Однако вы не хотите делать много грязной работы сами, когда у вас есть такой замечательный, умный (хоть и неправильно запрограммированный) робот, чтобы это делать. Обратите внимание, что вы не можете сделать чистую клетку грязной.

Посчитайте максимальное количество клеток, которые можно оставить грязными до запуска робота так, чтобы он не сломался.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество столбцов в коридоре.

Затем следуют две строки, означающие \(1\)-ю и \(2\)-ю строку коридора. В этих строках по \(n\) символов, где 0 означает чистую клетку, а 1 означает грязную клетку. Стартовая клетка робота \((1, 1)\) чистая.

Выходные данные

Выведите одно целое число — максимально возможное количество клеток, которые можно оставить грязными, до запуска робота так, чтобы он не сломался.

Примечание

В первом примере можно очистить клетку \((1, 2)\), так что путь робота — \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2)\).

Во втором примере можно оставить коридор как есть, так что путь робота — \((1, 1) \rightarrow (1, 2) \rightarrow (2, 2)\).

В третьем примере можно очистить клетку \((1, 2)\), так что путь робота — \((1, 1) \rightarrow (2, 1) \rightarrow (2, 3) \rightarrow (2, 4) \rightarrow (1, 4)\).

В четвертом примере коридор уже чистый. Может, вы уже запускали робота?

F. Дизайн клавиатуры

битмаски дп Строки строковые суфф. структуры Структуры данных *2600

У Монокарпа есть словарь из \(n\) слов, состоящих из первых \(12\) букв латинского алфавита. Слова пронумерованы от \(1\) до \(n\). Во всех парах соседних букв в слове буквы различны. Каждому слову \(i\) Монокарп сопоставил целое число \(c_i\) — как часто он использует это слово.

Монокарп хочет выбрать такой дизайн клавиатуры, чтобы он помог ему проще печатать некоторые слова. Клавиатуру можно описать, как последовательность из \(12\) первых букв латинского алфавита, где каждая буква от a до l встречается ровно один раз.

Слово можно легко напечатать на клавиатуре, если для каждой пары соседних символов в слове эти символы на клавиатуре тоже соседние. Оптимальность клавиатуры — это сумма \(c_i\) по всем словам \(i\), которые могут быть легко на ней напечатаны.

Помогите Монокарпу создать дизайн клавиатуры с максимальной оптимальностью.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 1000\)) — количество слов.

Затем следуют \(n\) строк. В \(i\)-й из них записаны целое число \(c_i\) (\(1 \le c_i \le 10^5\)) и строка \(s_i\) (\(2 \le |s_i| \le 2000\)), означающее \(i\)-е слово. Каждый символ в \(s_i\) — это один из \(12\) первых букв латинского алфавита. Все буквы строчные. Для каждого \(j \in [1, |s_i| - 1]\), \(j\)-й символ в \(s_i\) отличается от \((j+1)\)-го.

Дополнительное ограничение на входные данные: \(\sum \limits_{i=1}^{n} |s_i| \le 2000\).

Выходные данные

Выведите последовательность из \(12\) первых букв латинского алфавита, где каждая буква от a до l встречается ровно один раз, определяющую оптимальную клавиатуру. Если ответов несколько, выведите любой из них.

B. Список файлов

дп жадные алгоритмы реализация *1400

Системный администратор Евдоким снова «отличился». В результате ошибки в некотором скрипте список имен особо важных файлов был поврежден. Так как это были файлы файловой системы BerFS, то известно, что каждое имя файла имеет вид «name.ext», где:

  • name — это строка строчных латинских букв длины от 1 до 8 символов;
  • ext — это строка строчных латинских букв длины от 1 до 3 символов.

Например, «read.me», «example.txt» и «b.cpp» — корректные имена файлов, а «version.info», «ntldr» и «contestdata.zip» — нет.

Повреждение списка привело к тому, что все имена файлов оказались записанными друг за другом, без каких-либо разделителей.

Евдокиму необходимо срочно исправить ситуацию, разделив на части получившуюся строку так, что каждая часть будет корректным именем файла в BerFS. Так как Евдоким уже доказал, что он не силен в программировании, помогите ему. Получившийся список файлов может содержать одинаковые имена файлов.

Входные данные

Входные данные состоят из единственной строки s, длина которой от 1 до 4·105 символов. Строка может содержать только строчные латинские буквы («a» - «z») и точки («.»).

Выходные данные

Выведите «YES» (без кавычек) в первую строку, если возможно разбить s на части требуемым образом. В этом случае следующие строки должны содержать части искомого разбиения, по одной части в строке в порядке их следования в s. Искомое разбиение может содержать одинаковые имена файлов. Если решений несколько, выведите любое.

Если решения не существует, то выведите в единственную строку «NO» (без кавычек).

E. Подвешенные сердца

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное Структуры данных *1800

У Пака Чанека есть \(n\) пустых карточек в форме сердца. Карточка \(1\) прикреплена непосредственно к стене, остальные же карточки подвешены ровно к одной другой карточке верёвочкой. А именно, карточка \(i\) (\(i > 1\)) подвешена к карточке \(p_i\) (\(p_i < i\)).

Пак Чанек должен написать на каждой карточке одно целое число. Для этого он выберет произвольную перестановку \(a\) чисел \([1, 2, \dots, n]\), и на карточке \(i\) запишет число \(a_i\).

После этого Пак Чанек должен выполнить следующую операцию \(n\) раз, поддерживая при этом последовательность \(s\) (изначально пустую):

  1. Выбрать такую карточку \(x\), что к ней не подвешена ни одна другая карточка.
  2. Добавить число, записанное на карте \(x\), в конец последовательности \(s\).
  3. Если \(x \neq 1\) и число на карточке \(p_x\) больше, чем число на карточке \(x\), заменить число на карточке \(p_x\) на число на карточке \(x\).
  4. Удалить карточку \(x\).

После этого у Пака Чанека будет последовательность \(s\) из \(n\) элементов. Какова максимальная длина наибольшей неубывающей подпоследовательности\(^\dagger\) \(s\) в конце, если Пак Чанек выполняет все шаги оптимально?

\(^\dagger\) Последовательность \(b\) называется подпоследовательностью последовательности \(c\) если \(b\) может быть получена из \(c\) удалением некоторого (возможно нулевого) количества элементов. Например, \([3,1]\) — подпоследовательность \([3,2,1]\), \([4,3,1]\) и \([3,1]\), но не \([1,3,3,7]\) и не \([3,10,4]\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество карточек.

Вторая строка содержит \(n - 1\) целое число \(p_2, p_3, \dots, p_n\) (\(1 \le p_i < i\)) описывающая, к какой карточке подвешена каждая карточка.

Выходные данные

Выведите одно целое число — максимальную длину наибольшей неубывающей подпоследовательности \(s\) в конце, если Пак Чанек сделает все шаги оптимально.

Примечание

Ниже представлена структура карточек в первом примере.

Пак Чанек может выбрать перестановку \(a = [1, 5, 4, 3, 2, 6]\).

Пусть \(w_i\) — число на карточке \(i\). Изначально \(w_i = a_i\).

Пак Чанек может выполнять следующие операции по порядку:

  1. Выбрать карточку \(5\). Добавить \(w_5 = 2\) в конец \(s\). Так как \(w_4 > w_5\), значение \(w_4\) становится равным \(2\). Удаляем карточку \(5\). После этой операции \(s = [2]\).
  2. Выбрать карточку \(6\). Добавить \(w_6 = 6\) в конец \(s\). Так как \(w_2 \leq w_6\), значение \(w_2\) остается неизменным. Удаляем карточку \(6\). После этой операции \(s = [2, 6]\).
  3. Выбрать карточку \(4\). Добавить \(w_4 = 2\) в конец \(s\). Так как \(w_1 \leq w_4\), значение \(w_1\) остается неизменным. Удаляем карточку \(4\). После этой операции \(s = [2, 6, 2]\).
  4. Выбрать карточку \(3\). Добавить \(w_3 = 4\) в конец \(s\). Так как \(w_2 > w_3\), значение \(w_2\) становится равным \(4\). Удаляем карточку \(3\). После этой операции \(s = [2, 6, 2, 4]\).
  5. Выбрать карточку \(2\). Добавить \(w_2 = 4\) в конец \(s\). Так как \(w_1 \leq w_2\), значение \(w_1\) is left unchanged. Удаляем карточку \(2\). После этой операции \(s = [2, 6, 2, 4, 4]\).
  6. Выбрать карточку \(1\). Добавить \(w_1 = 1\) в конец \(s\). Удаляем карточку \(1\). После этой операции \(s = [2, 6, 2, 4, 4, 1]\).

Одна из наибольших неубывающих подпоследовательностей \(s = [2, 6, 2, 4, 4, 1]\) это \([2, 2, 4, 4]\). Таким образом, длина наибольшей неубывающей подпоследовательности \(s\) равна \(4\). Можно доказать, что это действительно максимально возможная длина.

F. Ограниченное смешивание

дп Комбинаторика математика *2600

Паку Чанаку дан массив \(a\) из \(n\) целых чисел. Для каждого \(i\) (\(1 \leq i \leq n\)) Пак Чанак пишет на доске одноэлементное множество \(\{a_i\}\).

После этого за одну операцию Пак Чанак может сделать следующее:

  1. Выбрать два различных множества \(S\) и \(T\) на доске таких, что \(S \cap T = \varnothing\) (\(S\) и \(T\) не имеют общих элементов).
  2. Стереть \(S\) и \(T\) с доски и записать \(S \cup T\) (объединение \(S\) и \(T\)) на доску.

Выполнив ноль или более операций, Пак Чанак построит мультимножество \(M\), содержащее размеры всех множеств, написанных на доске. Другими словами, каждый элемент в \(M\) соответствует размеру некоторого множества после операций.

Сколько различных\(^\dagger\) мультимножеств \(M\) может быть получено таким процессом? Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).

\(^\dagger\) Мультимножества \(B\) и \(C\) различны тогда и только тогда, когда существует значение \(k\) такое, что количество элементов со значением \(k\) в \(B\) отличается от количества элементов со значением \(k\) в \(C\).

Входные данные

Первая строка содержит целое число \(n\) (\(1 \le n \le 2000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)).

Выходные данные

Выведите количество различных мультимножеств \(M\) по модулю \(998\,244\,353\).

Примечание

В первом примере возможные мультимножества \(M\) таковы: \(\{1,1,1,1,1,1\}\), \(\{1,1,1,1,2\}\), \(\{1,1,1,3\}\), \(\{1,1,2,2\}\), \(\{1,1,4\}\), \(\{1,2,3\}\) и \(\{2,2,2\}\).

В качестве примера рассмотрим возможную последовательность операций.

  1. Вначале множества имеют вид \(\{1\}\), \(\{1\}\), \(\{2\}\), \(\{1\}\), \(\{4\}\) и \(\{3\}\).
  2. Применяем операцию ко множествам \(\{1\}\) и \(\{3\}\). Теперь множества на доске имеют вид \(\{1\}\), \(\{1\}\), \(\{2\}\), \(\{4\}\) и \(\{1,3\}\).
  3. Применяем операцию ко множествам \(\{2\}\) and \(\{4\}\). Теперь множества на доске имеют вид \(\{1\}\), \(\{1\}\), \(\{1,3\}\) и \(\{2,4\}\).
  4. Применяем операцию ко множествам \(\{1,3\}\) and \(\{2,4\}\). Теперь множества на доске имеют вид \(\{1\}\), \(\{1\}\) и \(\{1,2,3,4\}\).
  5. Полученное мультимножество \(M\) имеет вид \(\{1,1,4\}\).

I. Хрустальные шары

геометрия графы дп разделяй и властвуй разделяй и властвуй Структуры данных теория чисел *3500

В мире Compfestnesia Пак Чанек нашел секретное подземелье. Внутри него находится сундук с сокровищами, окруженный \(n\) статуями, расположенными по кругу. Статуи пронумерованы от \(0\) до \(n-1\), причем статуя \(i\) находится слева от статуи \(i+1\), а статуя \(n-1\) — слева от статуи \(0\).

Пак Чанек заметил, что каждая статуя держит хрустальный шар с целым числом от \(0\) до \(m-1\) включительно. В хрустальном шаре статуи \(i\) содержится число \(a_i\).

В подземелье есть инструкция, согласно которой, чтобы открыть сундук с сокровищами, все целые числа в хрустальных шарах должны быть равны \(0\). Для этого Паку Чанеку дается целое число \(k\), и он может выполнить ноль или более операций. За одну операцию Пак Чанек делает следующее:

  1. Он выберет ровно \(k\) последовательных статуй. Другими словами, выберет статуи \(p, (p+1) \bmod n, (p+2) \bmod n, (p+3) \bmod n, \ldots, (p+k-1) \bmod n\) для некоторого выбранного индекса \(p\).
  2. Выполнит одно из следующих действий:
    • Для каждой выбранной статуи заменит её значение \(a_i\) на \((a_i+1) \bmod m\).
    • Для каждой выбранной статуи заменит её значение \(a_i\) на \((a_i-1) \bmod m\).

Помогите Паку Чанеку найти минимально возможное количество операций, чтобы открыть сундук с сокровищами.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \leq n,m \leq 10^6\), \(nm \leq 2 \cdot 10^6\), \(1 \leq k < n\)) — количество статуй, верхнее ограничение на значения чисел в хрустальных шарах и количество статуй, которые можно изменять за одну операцию.

Вторая строка содержит \(n\) целых чисел \(a_0,a_1,\ldots,a_{n-1}\) (\(0 \leq a_i < m\)) — целые числа в хрустальных шарах.

Выходные данные

Если возможно выполнить ноль или более операций так, чтобы стало \(a_0=a_1=\ldots=a_{n-1}=0\), выведите минимальное требуемое количество операций. В противном случае выведите \(-1\).

Примечание

В первом примере Пак Чанек может выполнять следующие операции:

  1. Выполнить операцию \(a_i := (a_i-1) \bmod m\) \(3\) раза для статуй \(1\), \(2\) и \(3\). Теперь \(a=[8,7,1,2,0]\).
  2. Выполнить операцию \(a_i := (a_i-1) \bmod m\) \(1\) раз для статуй \(3\), \(4\) и \(0\). Теперь \(a=[7,7,1,1,8]\).
  3. Выполнить операцию \(a_i := (a_i+1) \bmod m\) \(2\) раза для статуй \(4\), \(0\) и \(1\). Теперь \(a=[0,0,1,1,1]\).
  4. Выполнить операцию \(a_i := (a_i-1) \bmod m\) \(1\) раз для статуй \(2\), \(3\) и \(4\). Теперь \(a=[0,0,0,0,0]\).

E. Передача последовательности по сети

дп *1600

Последовательность \(a\) передается по сети следующим образом:

  1. последовательность \(a\) разбивают на отрезки (каждый элемент последовательности принадлежит ровно одному отрезку, каждый отрезок — это подряд идущие элементы последовательности);
  2. рядом с каждым отрезком, либо слева, либо справа от него, записывают длину этого отрезка;
  3. полученная последовательность \(b\) передаётся по сети.

Например, нужно было передать последовательность \(a = [1, 2, 3, 1, 2, 3]\). Допустим, что её разбили на отрезки следующим образом: \([\color{red}{1}] + [\color{blue}{2, 3, 1}] + [\color{green}{2, 3}]\). Тогда могли получиться следующие последовательности:

  • \(b = [1, \color{red}{1}, 3, \color{blue}{2, 3, 1}, \color{green}{2, 3}, 2]\),
  • \(b = [\color{red}{1}, 1, 3, \color{blue}{2, 3, 1}, 2, \color{green}{2, 3}]\),
  • \(b = [\color{red}{1}, 1, \color{blue}{2, 3, 1}, 3, 2, \color{green}{2, 3}]\),
  • \(b = [\color{red}{1}, 1,\color{blue}{2, 3, 1}, 3, \color{green}{2, 3}, 2]\).

Если бы было использовано другое разбиение на отрезки, то переданная последовательность могла бы быть другой.

Задана последовательность \(b\). Могла ли последовательность \(b\) быть передана по сети? Другими словами, существует ли такая последовательность \(a\), что при преобразовании \(a\) для передачи по сети могла получиться последовательность \(b\)?

Входные данные

В первой строке входных данных дано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк.

В первой строке входных данных дано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер последовательности \(b\).

Во второй строке входных данных дано \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)) — сама последовательность \(b\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • YES, если последовательность \(b\) могла быть передана по сети, то есть если последовательность \(b\) могла быть получена из некоторой последовательности \(a\) для передачи \(a\) по сети.
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных последовательность \(b\) могла быть получена из последовательности \(a = [1, 2, 3, 1, 2, 3]\) со следующим разбиением: \([\color{red}{1}] + [\color{blue}{2, 3, 1}] + [\color{green}{2, 3}]\). Последовательность \(b\): \([\color{red}{1}, 1, \color{blue}{2, 3, 1}, 3, 2, \color{green}{2, 3}]\).

Во втором наборе входных данных последовательность \(b\) могла быть получена из последовательности \(a = [12, 7, 5]\) со следующим разбиением: \([\color{red}{12}] + [\color{green}{7, 5}]\). Последовательность \(b\): \([\color{red}{12}, 1, 2, \color{green}{7, 5}]\).

Во третьем наборе входных данных последовательность \(b\) могла быть получена из последовательности \(a = [7, 8, 9, 10, 3]\) со следующим разбиением: \([\color{red}{7, 8, 9, 10, 3}]\). Последовательность \(b\): \([5, \color{red}{7, 8, 9, 10, 3}]\).

В четвертом наборе входных данных не существует такой последовательности \(a\), что при изменении \(a\) для передачи по сети могла получиться последовательность \(b\).

G. Кирилл и компания

битмаски графы дп кратчайшие пути Перебор поиск в глубину и подобное Потоки *2200

Кирилл живёт на связном неориентированном графе из \(n\) вершин и \(m\) рёбер в вершине с номером \(1\). В один прекрасный вечер он собрал у себя \(f\) друзей, \(i\)-й друг живёт в вершине \(h_i\). Таким образом, в настоящий момент все друзья находятся в вершине \(1\), каждый должен добраться домой — \(i\)-й друг должен попасть в вершину \(h_i\).

Вечер подошёл к концу и настала пора расходиться. Оказалось, что у \(k\) (\(k \le 6\)) из его друзей нет машин и им придётся идти пешком, если их никто не подвезёт. Один друг с машиной может подвезти любое количество друзей без машин, но только если он может подвезти их, проехав по одному из кратчайших путей до своего дома.

Например, в графе ниже, друг из вершины \(h_i=5\) может подвезти друзей из следующих наборов вершин: \([2, 3]\), \([2, 4]\), \([2]\), \([3]\), \([4]\), но не может подвезти друга из вершины \(6\) или набор \([3, 4]\).

Вершины в которых живут друзья без машин выделены зелёным, а с машинами — красным.

Кирилл хочет, чтобы как можно меньшему числу друзей пришлось идти пешком. Помогите ему найти минимально возможное количество.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных в тесте.

Первая строка набора содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 10^4\), \(n-1 \le m \le min (10^4, \)\( \frac{n \cdot (n - 1)}{2} \)\()\)) — количество вершин и рёбер соответственно.

Следующие \(m\) строк набора содержат описание рёбер, по два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — номера вершин, соединённых ребром. Гарантируется, что в графе нет петель и кратных рёбер.

Дальше следует строка набора, содержащая число \(f\) (\(1 \le f \le 10^4\)) — количество друзей Кирилла.

Следующая строка набора содержит \(f\) целых чисел: \(h_1, h_2, \dots, h_f\) (\(2 \le h_i \le n\)) — вершины, в которых они живут. Некоторые вершины могут повторяться.

Следующая строка набора содержит число \(k\) (\(1 \le k \le min(6, f)\)) — количество друзей без машин.

Последняя строка каждого набора содержит \(k\) целых чисел: \(p_1, p_2, \dots, p_k\) (\(1 \le p_i \le f\), \(p_i < p_{i+1}\)) — номера друзей без машин.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^4\), как и суммы \(m\) и \(f\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите единственное число — минимально возможное количество друзей, которым придётся идти пешком.

Примечание

Первый набор входных данных первого примера разобран в условии.

Во втором наборе входных данных первого примера в вершине \(5\) живут два друга с машинами, один может подвезти друзей из вершин \(2\) и \(3\), а второй из вершины \(4\), не подвезут только друга из вершины \(6\).

C. Журналы Монокарпа

дп жадные алгоритмы Конструктив *1100

Монокарп очень долго коллекционировал разные журналы и теперь решил их продать. Для этого он выставил в ряд \(n\) коробок с журналами, причем в \(i\)-й коробке находится \(a_i\) журналов. Некоторые из коробок он накрыл крышками.

Внезапно пошел дождь, и Монокарпу нужно спасти от дождя как можно большее количество журналов. Для этого он может сделать следующее: если коробка \(i\) изначально была накрыта крышкой, он может либо переместить крышку с коробки \(i\) на коробку \((i-1)\) (если она есть), либо оставить крышку на коробке \(i\). Считайте, что все перемещения крышек Монокарп выполнит мгновенно, и каждая крышка будет перемещена не более одного раза. Журналы, которые после перемещения будут находиться в коробках с крышками, будут спасены от дождя; все остальные журналы намокнут.

Перед вами стоит задача определить максимальное количество журналов, которые Монокарп может спасти от дождя.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество коробок с журналами.

Во второй строке записана строка, состоящая из \(n\) символов 0 и/или 1. Если \(i\)-й символ строки равен 1, то изначально \(i\)-я коробка накрыта крышкой. Если \(i\)-й символ строки равен 0, то изначально \(i\)-я коробка не накрыта крышкой.

В третьей строке записана последовательность целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^4\)), где \(a_i\) равно количеству журналов в \(i\)-й коробке.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите максимальное количество журналов, которые Монокарп может спасти от дождя.

Примечание

В первом наборе входных данных в примере нужно переместить крышку со второй коробки влево на первую коробку. Тогда коробки \(1\), \(3\) и \(4\) будут накрыты крышками, и \(10 + 8 + 9 = 27\) журналов будут спасены от дождя.

Во втором наборе входных данных нужно переместить крышку со второй коробки на первую коробку, крышку с третьей коробки на вторую коробку, крышку с пятой коробки на четвертую коробку, крышку с шестой коробки на пятую коробку. Тогда коробки \(1\), \(2\), \(4\) и \(5\) будут накрыты крышками, и \(20 + 10 + 30 + 20 = 80\) журналов будут спасены от дождя.

В третьем наборе входных данных нет ни одной крышки, поэтому ни один из журналов нельзя спасти от дождя.

D. Задача со случайными тестами

дп жадные алгоритмы Перебор Теория вероятностей *1700

Дана строка \(s\) из \(n\) символов. Каждый символ \(s\) — либо 0, либо 1.

Подстрока строки \(s\) — это непрерывная подпоследовательность ее символов.

Вы должны выбрать две подстроки \(s\) (возможно, пересекающиеся, возможно, одну и ту же два раза, возможно, непересекающиеся — две любые подстроки). После того как вы выбрали подстроки, вы считаете их стоимость следующим образом:

  • пусть \(s_1\) — первая подстрока, \(s_2\) — вторая подстрока, а \(f(s_i)\) — целое число, для которого \(s_i\) является записью в двоичной системе счисления (напримре, если \(s_i\) — это 11010, то \(f(s_i) = 26\));
  • стоимость пары подстрок — это побитовое ИЛИ чисел \(f(s_1)\) и \(f(s_2)\).

Посчитайте максимальную стоимость, которую вы можете получить, и выведите ее в двоичной системе счисления без ведущих нулей.

Входные данные

В первой строке задано число \(n\) — количество символов в \(s\).

Во второй строке задана \(s\), состоящая из ровно \(n\) символов 0 и/или 1.

Все тесты в этой задаче, кроме примеров из условия, сгенерированы случайным образом: каждый символ \(s\) выбирается независимо от остальных, и для каждого символа вероятность быть 1 равна \(\frac{1}{2}\).

В этой задаче ровно \(40\) тестов. Тесты с \(1\) по \(3\) — примеры из условия; тесты с \(4\) по \(40\) сгенерированы случайным образом. В тестах с \(4\) по \(10\) \(n = 5\); в тестах с \(11\) по \(20\) \(n = 1000\); в тестах с \(21\) по \(40\) \(n = 10^6\).

В этой задаче запрещены взломы.

Выходные данные

Выведите максимальную стоимость, которую можно получить, в двоичной системе счисления без ведущих нулей.

Примечание

В первом примере можно выбрать подстроки 11010 и 101. \(f(s_1) = 26\), \(f(s_2) = 5\), их побитовое ИЛИ равно \(31\), а двоичное представление \(31\) — это 11111.

Во втором примере можно выбрать подстроки 1110010 и 11100.

E. FTL

Бинарный поиск дп *2400

Монокарп играет в компьютерную игру. В этой игре он управляет космическим кораблем. Его цель — уничтожить космический корабль противника.

На корабле Монокарпа установлены два лазера. Оба лазера \(1\) и \(2\) характеризуются двумя значениями:

  • \(p_i\) — мощность лазера;
  • \(t_i\) — время перезарядки лазера.

Когда лазер полностью заряжен, Монокарп может либо выстрелить из него, либо дождаться полной зарядки другого лазера и выстрелить из них обоих одновременно.

У корабля противника \(h\) прочности и \(s\) силы щита. Когда Монокарп стреляет по кораблю противника, тот получает \((P - s)\) урона (т. е. \((P - s)\) вычитается из его прочности), где \(P\) — это суммарная мощность лазеров, из которых выстрелил Монокарп (т. е. \(p_i\), если он стрелял только из лазера \(i\), и \(p_1 + p_2\), если он стрелял из обоих одновременно). Корабль противника считается уничтоженным, когда его прочность становится меньше или равна \(0\).

Изначально оба лазера разряжены.

За какое наименьшее время Монокарп может уничтожить корабль противника?

Входные данные

В первой строке записаны два целых числа \(p_1\) и \(t_1\) (\(2 \le p_1 \le 5000\); \(1 \le t_1 \le 10^{12}\)) — мощность и время перезарядки первого лазера.

Во второй строке записаны два целых числа \(p_2\) и \(t_2\) (\(2 \le p_2 \le 5000\); \(1 \le t_2 \le 10^{12}\)) — мощность и время перезарядки второго лазера.

В третьей строке записаны два целых числа \(h\) и \(s\) (\(1 \le h \le 5000\); \(1 \le s < \min(p_1, p_2)\)) — прочность и сила щита корабля противника. Обратите внимание, что последнее ограничение подразумевает, что Монокарп всегда может уничтожить корабль противника.

Выходные данные

Выведите одно целое число — наименьшее время, за которое Монокарп может уничтожить корабль противника.

Примечание

В первом примере Монокарп ждет зарядки обоих лазеров, затем стреляет из обоих в \(10\), они наносят \((5 + 4 - 1) = 8\) единиц урона. Затем он снова ждет и стреляет из обоих лазеров в \(20\), нанося еще \(8\) единиц урона.

Во втором примере Монокарп не ждет зарядки второго лазера. Он просто стреляет из первого \(25\) раз, нанося \((10 - 9) = 1\) единицу урона каждый раз.

F. Пересечение и объединение

дп матрицы Структуры данных Теория вероятностей *2300

Вам даны \(n\) отрезков на координатной прямой. \(i\)-й отрезок — это \([l_i, r_i]\). Обозначим множество всех целочисленных точек, принадлежащих \(i\)-му отрезку, за \(S_i\).

Пусть \(A \cup B\) — объединение множеств \(A\) и \(B\), \(A \cap B\) — пересечение множеств \(A\) и \(B\), а \(A \oplus B\) — симметрическая разность \(A\) и \(B\) (множество, в которые входят все элементы \(A\) и все элементы \(B\), кроме тех, которые встречаются в обоих множествах).

Пусть \([\mathbin{op}_1, \mathbin{op}_2, \dots, \mathbin{op}_{n-1}]\) — массив, где каждый элемент — либо \(\cup\), либо \(\oplus\), либо \(\cap\). По всем \(3^{n-1}\) способам выбрать этот массив посчитайте сумму следующих значений:

\(\)|(((S_1\ \mathbin{op}_1\ S_2)\ \mathbin{op}_2\ S_3)\ \mathbin{op}_3\ S_4)\ \dots\ \mathbin{op}_{n-1}\ S_n|\(\)

В этом выражении \(|S|\) означает размер множества \(S\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)).

Затем следуют \(n\) строк. В \(i\)-й из них заданы два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i \le r_i \le 3 \cdot 10^5\)).

Выходные данные

Выведите одно целое число — сумму \(|(((S_1\ \mathbin{op}_1\ S_2)\ \mathbin{op}_2\ S_3)\ \mathbin{op}_3\ S_4)\ \dots\ \mathbin{op}_{n-1}\ S_n|\) по всем возможным способам выбрать \([\mathbin{op}_1, \mathbin{op}_2, \dots, \mathbin{op}_{n-1}]\). Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

G. Антифибоначчиевый разрез

битмаски дп Комбинаторика Конструктив математика Структуры данных хэши *3000

Обратите внимание на нестандартное ограничение памяти.

Введем последовательность строк Фибоначчи следующим образом: \(f_0\) — строка 0, \(f_1\) — строка 1, \(f_i\) строится по формуле \(f_{i-1} + f_{i-2}\) при \(i>1\) (\(+\) обозначает конкатенацию строк). Например, \(f_2\)10, \(f_3\)101, \(f_4\)10110.

Для строки \(s\) обозначим за \(g(s)\) количество способов разрезать эту строку на строки, из которых ни одна не является строкой Фибоначчи. Например, если \(s\)10110101, \(g(s) = 3\), так как существуют три способа разрезать строку:

  • 101101 \(+\) 01;
  • 1011 \(+\) 0101;
  • 1011 \(+\) 01 \(+\) 01.

Вам дана последовательность строк \(s_1, s_2, \dots, s_n\). Посчитайте \(g(s_1), g(s_1 + s_2), \dots, g(s_1 + s_2 + \ldots + s_n)\). Так как эти значения могут быть очень большими, выведите их по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^3\)).

Затем следуют \(n\) строк. В \(i\)-й из них задана \(s_i\) (\(1 \le |s_i| \le 10^3\)), состоящая из символов 0 и/или 1.

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из которых равно \(g(s_1 + s_2 + \ldots + s_i) \bmod 998244353\).

D. Пути на дереве

Деревья дп жадные алгоритмы поиск в глубину и подобное сортировки *1900

Вам дано корневое дерево, состоящее из \(n\) вершин. Вершины пронумерованы от \(1\) до \(n\), а корнем является вершина \(1\). Также вам дан массив коэффициентов \(s_1, s_2, \ldots, s_n\).

Мультимножество из \(k\) простых путей называется допустимым, если выполняются следующие два условия:

  • Каждый путь начинается в вершине \(1\).
  • Пусть \(c_i\) — количество путей, покрывающих вершину \(i\). Для каждой пары вершин \((u,v)\) (\(2\le u,v\le n\)), имеющих общего родителя, верно \(|c_u-c_v|\le 1\).
Значение мультимножества путей определяется как \(\sum\limits_{i=1}^n c_i s_i\).

Можно показать, что всегда можно найти хотя бы одно допустимое мультимножество. Найдите максимальное значение среди всех допустимых мультимножеств.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа через пробел \(n\) (\(2 \le n \le 2 \cdot 10^5\)) и \(k\) (\(1 \le k \le 10^9\)) — размер дерева и требуемое количество путей.

Вторая строка содержит \(n - 1\) целое число через пробел \(p_2,p_3,\ldots,p_n\) (\(1\le p_i\le n\)), где \(p_i\) — родитель \(i\)-й вершины. Гарантируется, что данные значения корректно задают дерево с корнем в \(1\).

В третьей строке через пробел записаны \(n\) целых чисел \(s_1,s_2,\ldots,s_n\) (\(0 \le s_i \le 10^4\)) — коэффициенты вершин.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное значение мультимножества.

Примечание

В первом наборе входных данных одно из оптимальных решений — четыре пути \(1 \to 2 \to 3 \to 5\), \(1 \to 2 \to 3 \to 5\), \(1 \to 4\), \(1 \to 4\), при этом \(c=[4,2,2,2,2]\). Значение будет равно \(4\cdot 6+ 2\cdot 2+2\cdot 1+2\cdot 5+2\cdot 7=54\).

Во втором наборе входных данных одно из оптимальных решений — три пути \(1 \to 2 \to 3 \to 5\), \(1 \to 2 \to 3 \to 5\), \(1 \to 4\), при этом \(c=[3,2,2,1,2]\). Значение будет равно \(3\cdot 6+ 2\cdot 6+2\cdot 1+1\cdot 4+2\cdot 10=56\).

E2. Задача-шутка (сложная версия)

дп интерактив *3200

Единственная разница между этой задачей и сложной версией — максимальное количество вопросов.

Это интерактивная задача!

Загадано некоторое целое число \(1 \le x \le n\), которое вам нужно найти. Чтобы найти его, вы можете задать не более \(\mathbf{53}\) вопросов.

В каждом вопросе вы можете выбрать непустое множество целых чисел \(S\) и спросить, принадлежит ли \(x\) множеству \(S\) или нет. После каждого запроса, если \(x\) принадлежит \(S\), вы получите «YES», иначе «NO».

Проблема в том, что не все ответы обязательно верны (некоторые из них шуточные). Гарантируется, что на каждые два последовательных вопроса хотя бы на один из них дан правильный ответ.

Вы также можете сделать не более \(2\) попыток угадать \(x\). Каждый раз, если вы правильно угадаете \(x\), вы получите «:)» и ваша программа должна завершиться, иначе вы получите «:(».

Как часть шутки, мы не будем фиксировать значение \(x\) в начале. Наоборот, это значение может изменяться в процессе взаимодействия, но все уже полученные ответы всегда будут корректны с точки зрения описанного выше.

Обратите внимание, что на ваши догадки ответа всегда отвечают правильно. Если вы задаете вопрос до и после догадки, по крайней мере на один из этих ваших вопросов будет дан правильный ответ, как обычно.

Входные данные

Единственная строка входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)), максимально возможное значение \(x\).

Протокол взаимодействия

Для каждого вопроса, если вы хотите спросить о множестве \(S\), сначала выведите символ «?», затем выведите размер множества \(S\), а затем уже элементы \(S\) один за другим. Все элементы должны быть различными целыми числами от \(1\) до \(n\). После каждого вопроса вы получите ответ на него: «YES» или «NO» в соответствии с условием. Вы можете задать не более \(53\) таких запросов.

Если вы хотите угадать \(x\), сначала выведите «!», а затем выведите свою догадку. Если вы угадаете \(x\) правильно, вы получите «:)» и ваша программа должна завершиться, иначе вы получите «:(». Вы можете сделать не более \(2\) таких догадок.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы в этой задаче отключены.

Примечание

Если бы ответ на первый вопрос был правильным, то \(x\) было бы равно \(6\), но, как мы видим из первого предположения, \(6\) не является ответом.

Так что ответ на первый вопрос — шутка. Как мы знаем, ответ хотя бы на один из наших двух вопросов правильный, и так как ответ на первый вопрос был шутливым, ответ на второй вопрос должен быть правильным.

Итак, мы понимаем, что \(x\) не равно \(1, 2, 3\) или \(4\), и мы также знаем, что \(x\) не равно \(6\). Следовательно, \(x\) равно \(5\).

G. Подготовка к олимпиаде

Бинарный поиск геометрия дп Потоки реализация сортировки Структуры данных *3500

Антон решил подготовиться к очередной олимпиаде. Чтобы Антону было интереснее, Илья подготовил для него \(n\) задач. Сдать \(i\)-ю задачу можно только в первые \(d_{i}\) дней, причем сдавать несколько задач в один и тот же день нельзя. Илья оценил полезность \(i\)-й задачи как \(r_{i}\), и разделил задачи на три темы, тема \(i\)-й задачи равна \(type_{i}\).

Антон хочет решить ровно \(a\) задач на первую тему, ровно \(b\) на вторую тему и ровно \(c\) задач на третью тему (и каждая из этих задач должна быть решена не позже своего дедлайна). Скажите Антону, сможет ли он это сделать, и если сможет, то выведите максимальную суммарную полезность задач, которые он решит.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся четыре целых числа \(n, a, b, c\) (\(1 \le n \le 10^5\), \(0 \le a, b, c \le n\)).

В каждой из следующих \(n\) строк содержатся три целых числа \(r_i, type_i, d_i\) (\(0 \le r_i \le 10^{9}\), \(1 \le type_i \le 3\), \(1 \le d_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число: \(-1\), если решить нужный набор задач невозможно, и максимальную полезность решенных задач в противном случае.

Примечание

В первом наборе входных данных выгодно решить \(2\)-ю и \(4\)-ю задачи.

Во втором наборе входных данных ответа не существует.

В третьем наборе входных данных оптимально решить \(2\)-ю, \(3\)-ю и \(4\)-ю задачи.

В последнем наборе входных данных оптимально решить \(1\)-ю, \(2\)-ю и \(4\)-ю задачи.

E. Генерация списков

дп Комбинаторика математика *2900

Для заданных целых чисел \(n\) и \(m\) назовем пару массивов \(a\) и \(b\) целых чисел хорошей, если они удовлетворяют следующим условиям:

  • \(a\) и \(b\) имеют одинаковую длину, пусть их длина равна \(k\).
  • \(k \ge 2\) и \(a_1 = 0, a_k = n, b_1 = 0, b_k = m\).
  • Для каждого \(1 < i \le k\) имеет место следующее: \(a_i \geq a_{i - 1}\), \(b_i \geq b_{i - 1}\), и \(a_i + b_i \neq a_{i - 1} + b_{i - 1}\).

Найдите сумму \(|a|\) по всем хорошим парам массивов \((a,b)\). Поскольку ответ может быть очень большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t (1 \leq t \leq 10^4)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) \((1 \leq n, m \leq 5 \cdot 10^6)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5 \cdot 10^6\), а сумма \(m\) по всем наборам входных данных не превышает \(5 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число  — сумму \(|a|\) по всем хорошим парам массивов \((a,b)\) по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных, хорошими парами массивов являются

  • \(([0, 1], [0, 1])\), длина = \(2\).
  • \(([0, 1, 1], [0, 0, 1])\), длина = \(3\).
  • \(([0, 0, 1], [0, 1, 1])\), длина = \(3\).

Следовательно, сумма длин будет \({2 + 3 + 3} = 8\).

C. Префиксы с нулевой суммой

дп жадные алгоритмы Перебор реализация Структуры данных *1600

Красота массива \(v_1,v_2,\ldots,v_n\) равняется количеству индексов \(i\) (\(1 \le i \le n\)), таких что \(v_1+v_2+\ldots+v_i = 0\).

У вас есть массив \(a_1,a_2,\ldots,a_n\) длины \(n\). Вы можете применить к нему следующую операцию сколько угодно раз:

  • выбрать индекс \(i\) (\(1 \le i \le n\)), такой что \(a_i=0\);
  • после этого заменить \(a_i\) на произвольное целое число.

Какой максимальной красоты массив \(a\) вы можете получить?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Во второй строке даны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^9 \le a_i \le 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: максимальную красоту массива \(a\) после применения к нему операций.

Примечание

В первом наборе входных данных вы можете заменить \(a_2\) на \(-2\) за одну операцию. После этого массив \(a\) станет равен \([2,-2,1,-1,0]\) и будет иметь красоту \(3\):

  • \(a_1+a_2=2-2=0\);
  • \(a_1+a_2+a_3+a_4=2-2+1-1=0\);
  • \(a_1+a_2+a_3+a_4+a_5=2-2+1-1+0=0\).

Во втором наборе входных данных вы можете заменить \(a_3\) на \(-2\,000\,000\,000\), чтобы получить массив красоты \(1\).

В третьем наборе входных данных вы можете не делать операции.

E. Очередная задача на подсчёт массивов

Бинарный поиск Деревья дп математика Потоки разделяй и властвуй Структуры данных *2300

Позиция первого максимума на отрезке \([l; r]\) массива \(x = [x_1, x_2, \ldots, x_n]\) это наименьшее целое число \(i\), такое что \(l \le i \le r\) и \(x_i = \max(x_l, x_{l+1}, \ldots, x_r)\).

Вам дан массив \(a = [a_1, a_2, \ldots, a_n]\) длины \(n\). Найдите количество массивов \(b = [b_1, b_2, \ldots, b_n]\) длины \(n\), удовлетворяющих следующим требованиям:

  • \(1 \le b_i \le m\) для всех \(1 \le i \le n\);
  • для всех пар \(1 \le l \le r \le n\), позиция первого максимума на отрезке \([l; r]\) массива \(b\) равна позиции первого максимума на отрезке \([l; r]\) массива \(a\).

Так как это количество может быть очень большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два числа \(n\) и \(m\) (\(2 \le n,m \le 2 \cdot 10^5\), \(n \cdot m \le 10^6\)).

Во второй строке даны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le m\)) — массив \(a\).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно число: количество массивов \(b\), удовлетворяющих требованиям выше, по модулю \(10^9+7\).

Примечание

В первом наборе входных данных следующие \(8\) массивов удовлетворяют требованиям из условия:

  • \([1,2,1]\);
  • \([1,2,2]\);
  • \([1,3,1]\);
  • \([1,3,2]\);
  • \([1,3,3]\);
  • \([2,3,1]\);
  • \([2,3,2]\);
  • \([2,3,3]\).

Во втором наборе входных данных следующие \(5\) массивов удовлетворяют требованиям из условия:

  • \([1,1,1,1]\);
  • \([2,1,1,1]\);
  • \([2,2,1,1]\);
  • \([2,2,2,1]\);
  • \([2,2,2,2]\).

D. Подсчет массивов

дп Комбинаторика математика теория чисел *1900

Рассмотрим массив \(a\) длины \(n\), элементы которого пронумерованы от \(1\) до \(n\). Можно удалить \(i\)-й элемент из \(a\), если \(gcd(a_i, i) = 1\), где \(gcd\) обозначает наибольший общий делитель. После того, как элемент удаляется, те элементы, которые были справа от него, сдвигаются на одну позицию влево.

Массив \(b\) из \(n\) элементов, для которых выполняется \(1 \le b_i \le n - i + 1\), называется последовательностью удалений для массива \(a\), если можно удалить все элементы \(a\) в следующем порядке: сначала удалить \(b_1\)-й элемент, затем \(b_2\)-й, ..., затем \(b_n\)-й. Например, пусть \(a = [42, 314]\):

  • \([1, 1]\) — последовательность удалений: когда вы удаляете \(1\)-й элемент массива, условие \(gcd(42, 1) = 1\) соблюдаются, и массив становится \([314]\); когда вы снова удаляете \(1\)-й элемент, условие \(gcd(314, 1) = 1\) соблюдается, и массив становится пустым.
  • \([2, 1]\) не является последовательностью удалений: когда вы пытаетесь удалить \(2\)-й элемент, условие \(gcd(314, 2) = 1\) не выполняется.

Назовем массив неоднозначным, если у него хотя бы две последовательности удалений. Например, массив \([1, 2, 5]\) — неоднозначный: у него есть последовательности удалений \([3, 1, 1]\) и \([1, 2, 1]\). Массив \([42, 314]\) не является неоднозначным: единственная последовательность удалений для него — это \([1, 1]\).

Вам даны два числа \(n\) и \(m\). Посчитайте количество неоднозначных массивов \(a\), таких, что длина \(a\) от \(1\) до \(n\), а элементы \(a_i\) — целые числа от \(1\) до \(m\).

Входные данные

В единственной строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 3 \cdot 10^5\); \(1 \le m \le 10^{12}\)).

Выходные данные

Выведите одно целое число — количество неоднозначных массивов \(a\), таких, что длина \(a\) от \(1\) до \(n\), а элементы \(a_i\) — целые числа от \(1\) до \(m\). Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

D. Plane of Tanks: Duel

дп математика Перебор Теория вероятностей *2400

Вася играет в Plane of Tanks.

В этой игре танки описываются следующими характеристиками:

  • количество очков жизни;
  • интервал между двумя выстрелами орудия (время необходимое для перезарядки орудия после выстрела);
  • вероятность того, что выстрел орудия не пробьет броню вражеского танка;
  • урон, наносимый орудием вражескому танку.

Урон орудия задается отрезком [l, r], где l и r — целые числа. При выстреле потенциальный урон x выбирается равновероятно среди всех целых чисел отрезка [l, r]. Если данный выстрел пробивает броню вражеского танка, то количество очков жизни врага уменьшается на x единиц. Если при этом количество очков жизни стало неположительным, то считается, что танк уничтожен.

В игре возможны непробития снарядом танка, в этом случае количество очков жизни врага не изменяется. Вероятность непробития брони врага снарядом считается характеристикой стреляющего танка и не зависит от поведения игрока.

Победа уже близка, остался всего один вражеский танк. Вася полностью готов к поединку — еще одна битва добра со злом неизбежна! Два противника увидели друг друга и одновременно сделали по выстрелу... Так началась завершающая битва! Помогите Васе определить, какова вероятность того, что он одержит в ней победу, уничтожив вражеский танк?

Считается, что если оба танка были уничтожены в результате битвы (после одновременных выстрелов), то Васе также засчитывается победа. Можно считать, что каждый игрок производит очередной выстрел сразу же после перезарядки его орудия, а в каждом танке имеется бесконечное число снарядов.

Входные данные

В первой строке даны пять целых чисел через пробел, описывающих характеристики танка Васи: количество очков жизни hp (10 ≤ hp ≤ 200), интервал между двумя выстрелами dt (1 ≤ dt ≤ 30), диапазон урона орудия l и r (10 ≤ l ≤ r ≤ 100), вероятность непробития танка врага p (0 ≤ p ≤ 100)(в процентах).

Во второй строке описаны характеристики танка врага Васи в таком же формате.

Выходные данные

Необходимо вывести единственное число с абсолютной или относительной погрешностью не более 10 - 4 — вероятность победы Васи.

Примечание

В первом примере оба танка одновременно умирают после второго выстрела, вероятность уничтожения вражеского танка, соответственно, равна 1.

Во втором примере враг Васи успеет сделать второй выстрел раньше Васи, но не успеет сделать третий. Для того, чтобы уничтожить Васю раньше, необходимо произвести два выстрела с уроном 50. Вероятность этого события = . В противном случае Вася побеждает.

В третьем примере враг Васи успеет сделать три выстрела с вероятностью пробития 0.5. Для уничтожения Васи ему необходимо, чтобы хотя бы 2 из 3 выстрелов пробили броню Васиного танка. Вероятность этого события равна 0.5.

E. Power Defence

геометрия дп жадные алгоритмы Перебор *2600

Вася играет в Power Defence.

Ему осталось пройти последний уровень игры. Для этого ему необходимо уничтожить Главного Злодея, который движется по прямой со скоростью 1 метр в секунду из точки ( - ∞, 0) в точку ( + ∞, 0) игрового мира. В точках вида (x, 1) и (x,  - 1), где x — целое число, можно строить башни одного из трех типов: огненную, электрическую или замедляющую. При этом нельзя строить две башни в одной точке. Башня каждого типа имеет определенный радиус действия и величину урона в секунду (кроме замедляющей). Если в некоторой точке на Главного Злодея действует k замедляющих башен, то его скорость падает в k + 1 раз.

Известно, сколько башен каждого типа можно построить. Требуется определить, какой максимальный урон можно нанести Главному Злодею.

Все расстояния в задаче указаны в метрах. Размер Главного Злодея и башен очень мал, поэтому можно считать их точками на плоскости. Главный Злодей находится в радиусе действия башни если расстояние между ним и башней не превышает радиуса действия башни.

Входные данные

Первая строка содержит три целых числа nf, ne и ns (0 ≤ nf, ne, ns ≤ 20, 1 ≤ nf + ne + ns ≤ 20) — максимальное количество огненных, электрических и замедляющих башен, которые можно построить, соответственно. Числа разделены единичными пробелами.

Вторая строка содержит три целых числа rf, re и rs (1 ≤ rf, re, rs ≤ 1000) — радиус действия огненной, электрической и замедляющей башни, соответственно. Числа разделены единичными пробелами.

Третья строка содержит два целых числа df и de (1 ≤ df, de ≤ 1000) — количество урона наносимого огненной и электрической башней Главному Злодею за 1 секунду (при условии, что Главный Злодей находится в радиусе действия башни). Числа разделены единичным пробелом.

Выходные данные

Выведите единственное вещественное число — наибольший возможный урон, который может быть нанесен Главному Злодею, с абсолютной или относительной погрешностью не более 10 - 6.

Примечание

В первом примере имеется одна огненная башня, которая нанесет один и тот же урон независимо от расположения.

Во втором примере есть еще одна замедляющая башня такого же радиуса действия. Если построить две башни напротив друг друга, то скорость Главного Злодея будет в 2 раза ниже на всем интервале действия огненной башни, то есть будет нанесен вдвое больший урон.

E. Скобочная стоимость

Бинарный поиск дп жадные алгоритмы разделяй и властвуй Строки Структуры данных *2400

Деймон Таргариен решил перестать быть похожим на персонажа Metin2. Он превратил себя в прекраснейшую вещь — скобочную последовательность.

Для последовательности скобок мы можем выполнять два вида операций:

  • Выберите одну из её подстрок\(^\dagger\) и циклически сдвиньте её вправо. Например, после циклического сдвига вправо «(())» станет «)(()»;
  • Вставьте любую скобку, открывающую «(» или закрывающую «)», в любом месте последовательности.

Мы определяем стоимость скобочной последовательности как минимальное количество таких операций, чтобы сделать её правильной\(^\ddagger\).

Для заданной скобочной последовательности \(s\) длины \(n\) найдите сумму стоимостей всех \(\frac{n(n+1)}{2}\) её непустых подстрок. Обратите внимание, что для каждой подстроки мы вычисляем стоимость независимо.

\(^\dagger\) Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

\(^\ddagger\) Последовательность скобок называется правильной, если её можно превратить в правильное математическое выражение, добавив символы \(+\) и \(1\). Например, последовательности «(())()», «()» и «(()(()))» правильные, в то время как «)(», «(()» и «(()))(» не являются правильными.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину скобочной последовательности.

Вторая строка каждого набора входных данных содержит строку \(s\), состоящую только из символов '(' и ')', длины \(n\) — скобочную последовательность.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — сумму стоимостей всех подстрок \(s\).

Примечание

В первом наборе входных данных есть единственная подстрока «)». Её стоимость \(1\), потому что мы можем вставить «(» в начало этой подстроки и получить строку «()», то есть сбалансированную строку.

Во втором наборе входных данных стоимость каждой подстроки длины один равна \(1\). Стоимость подстроки «)(» равна \(1\), потому что мы можем циклически сдвинуть ее вправо и получить строку «()». Стоимость строк « )()» и «()(» равна \(1\), потому что достаточно вставить по одной скобке в каждую из них. Стоимость подстроки «)()(» равна \(1\), потому что мы можем циклически сдвинуть её вправо и получить строку «()()». Таким образом, есть \(4 + 2 + 2 + 1 = 9\) подстрока стоимостью \(1\) и \(1\) подстрока из стоимостью \(0\). Таким образом, сумма стоимостей равна \(9\).

В третьем наборе входных данных:

  • «(», стоимость равна \(1\);
  • «()», стоимость равна \(0\);
  • «())», стоимость равна \(1\);
  • «)», стоимость равна \(1\);
  • «))», стоимость равна \(2\);
  • «)», стоимость равна \(1\).

Таким образом, сумма стоимостей равна \(6\).

F. Большинство

дп Комбинаторика математика Строки *2700

Ибти пытался придумать историю, которая придала бы смысл этой задаче. Он решил вставить грустную историю.

Все были счастливы программировать, пока внезапно не случился перебой в электроснабжении, и лучший сайт спортивного программирования не вышел из строя. К счастью, системный администратор недавно купил новое оборудование, в том числе несколько ИБП. Таким образом, есть несколько серверов, которые всё ещё находятся в сети, но нам нужно, чтобы они все работали, чтобы раунд остался рейтинговым.

Представьте, что серверы представляют собой бинарную строку \(s\) длины \(n\). Если \(i\)-й сервер находится онлайн, то \(s_i = 1\), иначе \(s_i = 0\).

Системный администратор может выполнить следующую операцию под названием распределение электроэнергии, которая состоит из следующих этапов:

  • Выберите два сервера в позициях \(1 \le i < j \le n\) так, чтобы оба были подключены к сети (т. е. \(s_i=s_j=1\)). Распределение начинается только с онлайн-серверов.
  • Проверьте, достаточно ли мощности для распространения. Мы считаем, что мощности достаточно, если количество включенных серверов в диапазоне \([i, j]\) не меньше количества выключенных серверов в диапазоне \([i, j]\). Более формально, проверьте, что \(2 \cdot (s_i + s_{i+1} + \ldots + s_j) \ge j - i + 1\).
  • Если условие выше выполнено, включите все серверы в оффлайне в диапазоне \([i, j]\). Более формально, присвоить \(s_k := 1\) для всех \(k\) от \(i\) до \(j\).

Мы называем бинарную строку \(s\) длины \(n\) рейтинговой, если мы можем включить все серверы (т.е. сделать \(s_i = 1\) для \(1 \le i \le n\)) с помощью операции распределения электроэнергии произвольное количество раз (возможно, \(0\)). Ваша задача — найти количество рейтинговых строк длины \(n\) по модулю \(m\).

Входные данные

Первая и единственная строка содержится два целых числа \(n\) и \(m\) (\(1 \le n \le 5000\), \(10 \le m \le 10^9\)) — длина строки и требуемый модуль.

Выходные данные

Выведите единственное целое число — количество рейтинговых бинарных строк длины \(n\). Так как это число может быть большим, выведите его по модулю \(m\).

Примечание

В первом примере единственной рейтинговой строкой является 11. Таким образом, ответ \(1\).

Во втором примере рейтинговыми строками являются:

  • 111;
  • 101, потому что мы можем выполнить операцию с \(i = 1\) и \(j = 3\).
Таким образом, ответ равен \(2\).

В третьем примере рейтинговые строки:

  • 1001;
  • 1111;
  • 1011;
  • 1101.
Таким образом, ответ \(4\).

G. Допинг

дп Комбинаторика математика *3300

Мы называем массив \(a\) длины \(n\) изысканным, если для каждого \(1 < i \le n\) верно, что \(a_i = a_{i-1} + 1\).

Назовем \(f(p)\), применяемую к перестановке\(^\dagger\) длины \(n\), как минимальное количество подмассивов, на которые можно разбить перестановку так, чтобы каждый из них был изысканным. Например, \(f([1,2,3]) = 1\), а \(f([3,1,2]) = 2\) и \(f([3,2,1]) = 3\).

Учитывая \(n\) и перестановку \(p\) длины \(n\), мы определяем перестановку \(p'\) длины \(n\) как \(k\)-специальную тогда и только тогда, когда:

  • \(p'\) лексикографически меньше\(^\ddagger\), чем \(p\), и
  • \(f(p') = k\).

Ваша задача — посчитать для каждого \(1 \le k \le n\) количество \(k\)-специальных перестановок по модулю \(m\).

\(^\dagger\) Перестановка — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — это перестановка, но \([1,2,2]\) — не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве есть \(4\)).

\(^\ddagger\) Перестановка \(a\) длины \(n\) лексикографически меньше перестановки \(b\) длины \(n\) тогда и только тогда, когда выполняется следующее: в первой позиции, где \(a\) и \(b\) различаются, перестановка \(a\) имеет меньший элемент, чем соответствующий элемент в \(b\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2000\), \(10 \le m \le 10^9\)) — длина перестановки и требуемый модуль.

Вторая строка содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — перестановка \(p\).

Выходные данные

Выведите \(n\) целых чисел, где \(k\)-е число — это количество \(k\)-специальных перестановок по модулю \(m\).

Примечание

В первом примере перестановки, лексикографически меньшие, чем \([1,3,4,2]\), следующие:

  • \([1,2,3,4]\), \(f([1,2,3,4])=1\);
  • \([1,2,4,3]\), \(f([1,2,4,3])=3\);
  • \([1,3,2,4]\), \(f([1,3,2,4])=4\).

Таким образом, наш ответ \([1,0,1,1]\).

Во втором примере перестановки, лексикографически меньшие, чем \([3,2,1]\), следующие:

  • \([1,2,3]\), \(f([1,2,3])=1\);
  • \([1,3,2]\), \(f([1,3,2])=3\);
  • \([2,1,3]\), \(f([2,1,3])=3\);
  • \([2,3,1]\), \(f([2,3,1])=2\);
  • \([3,1,2]\), \(f([3,1,2])=2\).

Таким образом, наш ответ равен \([1,2,2]\).

H. BinaryStringForces

дп Конструктив Структуры данных *3500

Вам дана бинарная строка \(s\) длины \(n\). Определим максимальную подстроку как подстроку, которую нельзя расширить, сохраняя при этом все элементы равными. Например, в строке \(11000111\) есть три максимальные подстроки: \(11\), \(000\) и \(111\).

За одну операцию можно выбрать две максимальные соседние подстроки. Поскольку они максимальные и соседние, легко видеть, что их элементы должны иметь разные значения. Пусть \(a\) — длина последовательности единиц, а \(b\) — длина последовательности нулей. Затем сделайте следующее:

  • Если \(a \ge b\), то заменить \(b\) выбранных нулей на \(b\) единиц.
  • Если \(a < b\), то заменить \(a\) выбранных единиц на \(a\) нулей.

Например, для \(1110000\) мы превратим в \(0000000\), для \(0011\) мы превратим в \(1111\). Мы называем строку хорошей, если ее можно превратить в \(1111...1111\) с помощью применения вышеупомянутой операции произвольное количество раз (возможно, ноль). Найдите количество хороших подстрок среди всех \(\frac{n(n+1)}{2}\) непустых подстрок \(s\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — количество хороших подстрок.

Примечание

Определим подстроку от индекса \(l\) до индекса \(r\) как \([l, r]\).

Для первого теста хорошими подстроками являются:

  • \([1,1]\),
  • \([1,2]\),
  • \([3,6]\),
  • \([4,5]\),
  • \([4,6]\),
  • \([5,5]\),
  • \([5,6]\),
  • \([6,6]\).

Во втором наборе входных данных все подстроки хорошие, кроме \([2,2]\).

В третьем наборе входных данных все подстроки хорошие.

A1. Нулевая сумма (простая версия)

дп жадные алгоритмы Конструктив *1300

Это простая версия задачи. Разница между версиями заключается в том, что в этой версии массив не содержит нулей. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам дан массив \([a_1, a_2, \ldots a_n]\), состоящий из чисел \(-1\) и \(1\). Требуется предъявить разбиение этого массива на несколько отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\), обладающее следующим свойством:

  • Обозначим за \(s_i\) знакопеременную сумму элементов в \(i\)-м отрезке, то есть \(s_i\) = \(a_{l_i} - a_{l_i+1} + a_{l_i+2} - a_{l_i+3} + \ldots \pm a_{r_i}\). Например знакопеременная сумма на отрезке \([2, 4]\) в массиве \([1, 0, -1, 1, 1]\) равна \(0 - (-1) + 1 = 2\).
  • Сумма значений \(s_i\) по всем отрезкам из разбиения должна быть равна нулю.

Обратите внимание, каждое \(s_i\) не обязано равняться 0, условие стоит только на сумму \(s_i\) по всем отрезкам разбиения.

Набор отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\) называется разбиением массива \(a\) длины \(n\), если \(1 = l_1 \le r_1, l_2 \le r_2, \ldots, l_k \le r_k = n\), причем для всех \(i = 1, 2, \ldots k-1\) выполняется \(r_i + 1 = l_{i+1}\). Иными словами, каждый элемент массива должен принадлежать ровно одному отрезку.

Требуется предъявить разбиение массива, обладающее описанными свойствами, или сказать, что такого разбиения не существует.

Обратите внимание, минимизировать количество отрезков в разбиении не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют описания наборов:

Первая строка каждого описания содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — длину массива \(a\).

Вторая строка каждого описания содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i\) равно \(-1\) или \(1\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — количество отрезков в получившемся разбиении. Если требуемого разбиения не существует, выведите \(-1\).

Далее, если разбиение существует, то в \(i\)-й из следующих \(k\) строк выведите два целых числа \(l_i\) и \(r_i\) — границы \(i\)-го отрезка. При этом должны выполняться условия:

  • \(l_i \le r_i\) для всех \(i\) от \(1\) до \(k\).
  • \(l_{i + 1} = r_i + 1\) для всех \(i\) от \(1\) до \((k - 1)\).
  • \(l_1 = 1, r_k = n\).

Если существует несколько корректных разбиений массива на отрезки, разрешается вывести любое из них.

Примечание

В первом наборе входных данных массив можно разбить на один отрезок длины \(4\). Сумма на этом отрезке будет равна \(1 - 1 + 1 - 1 = 0\).

Во втором наборе входных данных массив можно разбить на два отрезка длины \(3\). В первом из них знакопеременная сумма будет равна \(-1 -1 + 1 = -1\), а во втором: \(1 - 1 + 1 = 1\). Получаем общую сумму: \(-1 + 1 = 0\).

В третьем и четвертом наборах входных данных можно показать, что требуемого разбиения не существует.

A1. Нулевая сумма (простая версия)

дп жадные алгоритмы Конструктив *1300

Это простая версия задачи. Разница между версиями заключается в том, что в этой версии массив не содержит нулей. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам дан массив \([a_1, a_2, \ldots a_n]\), состоящий из чисел \(-1\) и \(1\). Требуется предъявить разбиение этого массива на несколько отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\), обладающее следующим свойством:

  • Обозначим за \(s_i\) знакопеременную сумму элементов в \(i\)-м отрезке, то есть \(s_i\) = \(a_{l_i} - a_{l_i+1} + a_{l_i+2} - a_{l_i+3} + \ldots \pm a_{r_i}\). Например знакопеременная сумма на отрезке \([2, 4]\) в массиве \([1, 0, -1, 1, 1]\) равна \(0 - (-1) + 1 = 2\).
  • Сумма значений \(s_i\) по всем отрезкам из разбиения должна быть равна нулю.

Обратите внимание, каждое \(s_i\) не обязано равняться 0, условие стоит только на сумму \(s_i\) по всем отрезкам разбиения.

Набор отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\) называется разбиением массива \(a\) длины \(n\), если \(1 = l_1 \le r_1, l_2 \le r_2, \ldots, l_k \le r_k = n\), причем для всех \(i = 1, 2, \ldots k-1\) выполняется \(r_i + 1 = l_{i+1}\). Иными словами, каждый элемент массива должен принадлежать ровно одному отрезку.

Требуется предъявить разбиение массива, обладающее описанными свойствами, или сказать, что такого разбиения не существует.

Обратите внимание, минимизировать количество отрезков в разбиении не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют описания наборов:

Первая строка каждого описания содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — длину массива \(a\).

Вторая строка каждого описания содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i\) равно \(-1\) или \(1\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — количество отрезков в получившемся разбиении. Если требуемого разбиения не существует, выведите \(-1\).

Далее, если разбиение существует, то в \(i\)-й из следующих \(k\) строк выведите два целых числа \(l_i\) и \(r_i\) — границы \(i\)-го отрезка. При этом должны выполняться условия:

  • \(l_i \le r_i\) для всех \(i\) от \(1\) до \(k\).
  • \(l_{i + 1} = r_i + 1\) для всех \(i\) от \(1\) до \((k - 1)\).
  • \(l_1 = 1, r_k = n\).

Если существует несколько корректных разбиений массива на отрезки, разрешается вывести любое из них.

Примечание

В первом наборе входных данных массив можно разбить на один отрезок длины \(4\). Сумма на этом отрезке будет равна \(1 - 1 + 1 - 1 = 0\).

Во втором наборе входных данных массив можно разбить на два отрезка длины \(3\). В первом из них знакопеременная сумма будет равна \(-1 -1 + 1 = -1\), а во втором: \(1 - 1 + 1 = 1\). Получаем общую сумму: \(-1 + 1 = 0\).

В третьем и четвертом наборах входных данных можно показать, что требуемого разбиения не существует.

A1. Нулевая сумма (простая версия)

дп жадные алгоритмы Конструктив *1300

Это простая версия задачи. Разница между версиями заключается в том, что в этой версии массив не содержит нулей. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам дан массив \([a_1, a_2, \ldots a_n]\), состоящий из чисел \(-1\) и \(1\). Требуется предъявить разбиение этого массива на несколько отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\), обладающее следующим свойством:

  • Обозначим за \(s_i\) знакопеременную сумму элементов в \(i\)-м отрезке, то есть \(s_i\) = \(a_{l_i} - a_{l_i+1} + a_{l_i+2} - a_{l_i+3} + \ldots \pm a_{r_i}\). Например знакопеременная сумма на отрезке \([2, 4]\) в массиве \([1, 0, -1, 1, 1]\) равна \(0 - (-1) + 1 = 2\).
  • Сумма значений \(s_i\) по всем отрезкам из разбиения должна быть равна нулю.

Обратите внимание, каждое \(s_i\) не обязано равняться 0, условие стоит только на сумму \(s_i\) по всем отрезкам разбиения.

Набор отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\) называется разбиением массива \(a\) длины \(n\), если \(1 = l_1 \le r_1, l_2 \le r_2, \ldots, l_k \le r_k = n\), причем для всех \(i = 1, 2, \ldots k-1\) выполняется \(r_i + 1 = l_{i+1}\). Иными словами, каждый элемент массива должен принадлежать ровно одному отрезку.

Требуется предъявить разбиение массива, обладающее описанными свойствами, или сказать, что такого разбиения не существует.

Обратите внимание, минимизировать количество отрезков в разбиении не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют описания наборов:

Первая строка каждого описания содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — длину массива \(a\).

Вторая строка каждого описания содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i\) равно \(-1\) или \(1\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — количество отрезков в получившемся разбиении. Если требуемого разбиения не существует, выведите \(-1\).

Далее, если разбиение существует, то в \(i\)-й из следующих \(k\) строк выведите два целых числа \(l_i\) и \(r_i\) — границы \(i\)-го отрезка. При этом должны выполняться условия:

  • \(l_i \le r_i\) для всех \(i\) от \(1\) до \(k\).
  • \(l_{i + 1} = r_i + 1\) для всех \(i\) от \(1\) до \((k - 1)\).
  • \(l_1 = 1, r_k = n\).

Если существует несколько корректных разбиений массива на отрезки, разрешается вывести любое из них.

Примечание

В первом наборе входных данных массив можно разбить на один отрезок длины \(4\). Сумма на этом отрезке будет равна \(1 - 1 + 1 - 1 = 0\).

Во втором наборе входных данных массив можно разбить на два отрезка длины \(3\). В первом из них знакопеременная сумма будет равна \(-1 -1 + 1 = -1\), а во втором: \(1 - 1 + 1 = 1\). Получаем общую сумму: \(-1 + 1 = 0\).

В третьем и четвертом наборах входных данных можно показать, что требуемого разбиения не существует.

A2. Нулевая сумма (сложная версия)

дп жадные алгоритмы Конструктив *1500

Это сложная версия задачи. Разница между версиями заключается в том, что в этой версии массив содержит нули. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам дан массив \([a_1, a_2, \ldots a_n]\), состоящий из чисел \(-1\), \(0\) и \(1\). Требуется предъявить разбиение этого массива на несколько отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\), обладающее следующим свойством:

  • Обозначим за \(s_i\) знакопеременную сумму элементов в \(i\)-м отрезке, то есть \(s_i\) = \(a_{l_i} - a_{l_i+1} + a_{l_i+2} - a_{l_i+3} + \ldots \pm a_{r_i}\). Например знакопеременная сумма на отрезке \([2, 4]\) в массиве \([1, 0, -1, 1, 1]\) равна \(0 - (-1) + 1 = 2\).
  • Сумма значений \(s_i\) по всем отрезкам из разбиения должна быть равна нулю.

Обратите внимание, каждое \(s_i\) не обязано равняться 0, условие стоит только на сумму \(s_i\) по всем отрезкам разбиения.

Набор отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\) называется разбиением массива \(a\) длины \(n\), если \(1 = l_1 \le r_1, l_2 \le r_2, \ldots, l_k \le r_k = n\), причем для всех \(i = 1, 2, \ldots k-1\) выполняется \(r_i + 1 = l_{i+1}\). Иными словами, каждый элемент массива должен принадлежать ровно одному отрезку.

Требуется предъявить разбиение массива, обладающее описанными свойствами, или сказать, что такого разбиения не существует.

Обратите внимание, минимизировать количество отрезков в разбиении не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют описания наборов:

Первая строка каждого описания содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — длину массива \(a\).

Вторая строка каждого описания содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i\) равно \(-1\), \(0\) или \(1\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — количество отрезков в получившемся разбиении. Если требуемого разбиения не существует, выведите \(-1\).

Далее, если разбиение существует, то в \(i\)-й из следующих \(k\) строк выведите два целых числа \(l_i\) и \(r_i\) — границы \(i\)-го отрезка. При этом должны выполняться условия:

  • \(l_i \le r_i\) для всех \(i\) от \(1\) до \(k\).
  • \(l_{i + 1} = r_i + 1\) для всех \(i\) от \(1\) до \((k - 1)\).
  • \(l_1 = 1, r_k = n\).

Если существует несколько корректных разбиений массива на отрезки, разрешается вывести любое из них.

Примечание

В первом наборе входных данных массив можно просто разбить на \(4\) отрезка по одному элементу, равному \(0\). Тогда общая сумма будет равна \(0 + 0 + 0 + 0 = 0\).

Во втором наборе входных данных массив разбивается на \(4\) отрезка. На первом из них знакопеременная сумма будет равна \(-1\), на втором \(1\), на третьем \(0 - 1 + 0 = -1\), на четвёртом \(1 - 0 = 1\). Получаем общую сумму: \(-1 + 1 -1 + 1 = 0\).

В третьем наборе входных данных можно показать, что требуемого разбиения не существует.

C. Знал бы я, как сортировать массив...

дп математика Теория вероятностей *2000

Вам дан бинарный массив \(a\) (массив содержит только числа \(0\) и \(1\)) длины \(n\). Вы хотите отсортировать этот массив, но, к сожалению, преподаватель алгоритмов, лекции которого вы слушаете, еще не научил вас алгоритмам сортировки. Поэтому вы решили применять следующие операции до тех пор, пока массив \(a\) не будет отсортирован:

  1. Выбрать два случайных индекса \(i\) и \(j\), таких что \(i < j\). Индексы выбираются равновероятно среди всех пар индексов \((i, j)\), таких что \(1 \le i < j \le n\).
  2. Если \(a_i > a_j\), то поменять местами элементы \(a_i\) и \(a_j\).

Каково математическое ожидание количества операций, которые вам придется сделать, прежде чем массив будет отсортирован?

Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{998\,244\,353}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod 998\,244\,353\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < 998\,244\,353\) и \(x \cdot q \equiv p \pmod{998\,244\,353}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 200\,000\)) — количество элементов в бинарном массиве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i \in \{0, 1\}\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — значение \(p \cdot q^{-1} \bmod 998\,244\,353\).

Примечание

Рассмотрим первый набор входных данных. Если будет выбрана пара индексов \((2, 3)\), то эти элементы поменяются местами, и массив будет отсортирован. В противном случае, если будет выбрана пара индексов \((1, 2)\) или \((1, 3)\), то ничего не произойдет. Таким образом, с вероятностью \(\frac{1}{3}\) массив будет отсортирован за одну операцию, с вероятностью \(\frac{2}{3} \cdot \frac{1}{3}\) массив будет отсортирован за две операции, с вероятностью \(\frac{2}{3} \cdot \frac{2}{3} \cdot \frac{1}{3}\) — за три операции, и так далее. Математическое ожидание количества операций равно \(\sum \limits_{i=1}^{\infty} \left(\frac{2}{3} \right)^{i - 1} \cdot \frac{1}{3} \cdot i = 3\).

Во втором наборе входных данных массив уже отсортирован, поэтому математическое ожидание количества операций равно нулю.

В третьем наборе входных данных математическое ожидание количества операций равно \(\frac{75}{4}\), поэтому ответ равен \(75 \cdot 4^{-1} \equiv 249\,561\,107 \pmod {998\,244\,353}\).

E. Гуманоид

дп Перебор сортировки *1500

На некоторой космической станции работают \(n\) космонавтов. Космонавт с номером \(i\) (\(1 \le i \le n\)) имеет стойкость \(a_i\).

На эту космическую станцию пробрался злобный гуманоид. Сила этого гуманоида равна \(h\). Также гуманоид взял с собой две зелёных сыворотки и одну синюю сыворотку.

За одну секунду гуманоид может сделать любое из трёх действий:

  1. поглотить космонавта со стойкостью строго меньше силы гуманоида;
  2. употребить зелёную сыворотку, если такая ещё осталась;
  3. употребить синюю сыворотку, если такая ещё осталась.

При поглощении космонавта со стойкостью \(a_i\), этот космонавт исчезает, а сила гуманоида увеличивается на \(\lfloor \frac{a_i}{2} \rfloor\), то есть целую часть от \(\frac{a_i}{2}\). Например, если гуманоид поглощает космонавта со стойкостью \(4\), его сила увеличивается на \(2\), а если гуманоид поглощает космонавта со стойкостью \(7\), его сила увеличивается на \(3\).

При употреблении зелёной сыворотки, эта сыворотка исчезает, а сила гуманоида увеличивается в \(2\) раза.

При употреблении синей сыворотки, эта сыворотка исчезает, а сила гуманоида увеличивается в \(3\) раза.

Гуманоиду интересно, какое максимальное количество космонавтов он сможет поглотить, если будет действовать оптимально.

Входные данные

В первой строке входных данных дано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных даны целые числа \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество космонавтов и \(h\) (\(1 \le h \le 10^6\)) — изначальная сила гуманоида.

Во второй строке каждого набора входных данных даны \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^8\)) — стойкости космонавтов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите максимальное количество космонавтов, которое сможет поглотить гуманоид.

Примечание

В первом случае можно действовать так:

  1. употребить зелёную сыворотку. \(h = 1 \cdot 2 = 2\)
  2. поглотить космонавта \(2\). \(h = 2 + \lfloor \frac{1}{2} \rfloor = 2\)
  3. употребить зелёную сыворотку. \(h = 2 \cdot 2 = 4\)
  4. поглотить космонавта \(1\). \(h = 4 + \lfloor \frac{2}{2} \rfloor = 5\)
  5. употребить синюю сыворотку. \(h = 5 \cdot 3 = 15\)
  6. поглотить космонавта \(3\). \(h = 15 + \lfloor \frac{8}{2} \rfloor = 19\)
  7. поглотить космонавта \(4\). \(h = 19 + \lfloor \frac{9}{2} \rfloor = 23\)

B. Разрезание слов

дп *1700

Рассмотрим одну интересную игру со словами. В этой игре требуется из одного слова получить другое посредством специальных операций.

Пусть у нас есть слово w, разделим это слово на две непустые части x и y так, что w = xy. Операцией split, назовем преобразование слова w = xy в слово u = yx. Например, слово «wordcut» посредством одной операции split можно преобразовать в слово «cutword».

Вам даны два слова start и end. Посчитайте сколькими способами можно получить из слова start слово end, применив к слову start последовательно ровно k операций split.

Два способа считаются различными, если различаются последовательности примененных операций. Две последовательности операций различны, если существует такой номер i (1 ≤ i ≤ k), что в i-ой операции первой последовательности слово делится на части x и y, в i-ой операции второй последовательности слово делится на части a и b, и при этом x ≠ a.

Входные данные

В первой строке записано непустое слово start, во второй — непустое слово end. Слова состоят из строчных латинских букв. Количество букв в слове start совпадает с количеством букв в слове end и не превышает 1000 букв. Гарантируется, что слова start и end состоят из не менее 2 букв.

В третьей строке записано целое число k (0 ≤ k ≤ 105) — требуемое количество операций.

Выходные данные

Выведите единственное число — ответ на задачу. Так как это число может оказаться достаточно большим, выведите остаток от деления его на 1000000007 (109 + 7).

Примечание

В первом примере искомый способ:

ab  →  a|b  →  ba  →  b|a  →  ab

Во втором примере искомые два способа:

  • ababab  →  abab|ab  →  ababab
  • ababab  →  ab|abab  →  ababab

D. Гипер Строка

дп *2500

Предсказание Пола Эрдеша сбылось. Инопланетные захватчики приземлились на Землю. Правда, не смотря на наши ожидания, они не спросили значение числа Рамсея (может быть, они посчитали его сами). Пришельцы попросили решить другую задачу, которая на вид ничуть не проще чисел Рамсея. Они грозились, что если люди не сумеют решить поставленную задачу за 2 часа, Земле не поздоровится.

Перед тем как рассказать задачу, пришельцы определили понятие Гипер Строки. Гипер Строка — это строка, составленная из нескольких базовых строк. Пусть у нас имеется список базовых строк b1, b2, ..., bn. Гипер Строкой, составленной из индексов i1, i2, ..., im, называется конкатенация базовых строк bi1, bi2, ..., bim. Гипер Строки могут получаться очень длинными, поэтому любые операции с ними выполняются достаточно долго.

Пришельцы попросили людей посчитать длину наидлиннейшей общей подпоcледовательности Гипер Строки t и строки s. Ваша задача — помочь человечеству.

Входные данные

Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 2000) — количество базовых строк.

Следующие n строк содержат базовые строки. Каждая базовая строка состоит из строчных латинских букв. Базовая строка не может быть пустой, а сумма длин всех базовых строк не превосходит 106.

Следующая строка содержит единственное целое число m (1 ≤ m ≤ 2000) — количество базовых строк в Гипер Строке t.

Следующая строка содержит m целых чисел, записанных через пробел, i1, i2, ..., im (1 ≤ ij ≤ n) — индексы базовых строк, из которых составлена Гипер Строка t.

Последняя строка содержит непустую строку s. Строка s состоит только из строчных латинских букв и ее длина не превосходит 2000.

Выходные данные

Выведите единственное целое число — длину наидлиннейшей общей подпоследовательности Гипер Строки t и строки s. Если нет ни одной общей подпоследовательности, выведите 0.

Примечание

Длиной строки s называется количество символов в ней. Если длина строки s обозначается |s|, строку можно записать s в виде s = s1s2... s|s|.

Непустую строку y = s[p1p2... p|y|] = sp1sp2... sp|y| (1 ≤ p1 < p2 < ... < p|y| ≤ |s|) будем называть подпоследовательностью строки s. Например, «coders» — подпоследовательность «codeforces».

F1. Анти-медианный (простая версия)

дп математика *3100

Это простая версия задачи. Единственное различие между двумя версиями  — ограничение на \(n\). Вы можете делать взломы, только если все версии задачи решены.

Назовем массив \(a\) нечетной длины \(2m+1\) (при \(m \ge 1\)) плохим, если элемент \(a_{m+1}\) равен медиане этого массива. Другими словами, массив является плохим, если после его сортировки элемент на \(m+1\)-й позиции остается неизменным.

Назовем перестановку \(p\) целых чисел от \(1\) до \(n\) анти-медианной, если каждый ее подмассив нечетной длины \(\ge 3\) не является плохим.

Вам уже даны значения некоторых элементов перестановки. Найдите количество способов задать неизвестные значения, чтобы получить анти-медианную перестановку. Поскольку это число может быть очень большим, найдите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((2 \le n \le 1000)\)  — длину перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), или \(p_i = -1\))  — элементы перестановки. Если \(p_i \neq -1\), то он задан, иначе он неизвестен. Гарантируется, что если для некоторых \(i \neq j\) имеет место \(p_i \neq -1, p_j \neq -1\), то \(p_i \neq p_j\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого наборам входных данных выведите одно целое число  — количество способов установить неизвестные значения для получения анти-медианной перестановки, по модулю \(10^9+7\).

Примечание

В первом наборе входных данных анти-медианными являются как \([1, 2]\), так и \([2, 1]\).

Во втором наборе входных данных перестановки \([1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2]\) являются анти-медианными. Оставшиеся две перестановки, \([1, 2, 3]\), \([3, 2, 1]\), сами по себе являются плохими массивами, так как их медиана, \(2\), находится в их середине.

В третьем наборе входных данных \([1, 2, 3, 4]\) не является анти-медианным, поскольку содержит плохой подмассив \([1, 2, 3]\).

В четвертом наборе входных данных единственный анти-медианный массив, который можно получить, это \([5, 6, 3, 4, 1, 2]\).

F2. Анти-медианный (сложная версия)

дп Комбинаторика математика *3500

Это сложная версия задачи. Единственное различие между двумя версиями  — ограничение на \(n\). Вы можете делать взломы, только если все версии задачи решены.

Назовем массив \(a\) нечетной длины \(2m+1\) (при \(m \ge 1\)) плохим, если элемент \(a_{m+1}\) равен медиане этого массива. Другими словами, массив является плохим, если после его сортировки элемент на \(m+1\)-й позиции остается неизменным.

Назовем перестановку \(p\) целых чисел от \(1\) до \(n\) анти-медианной, если каждый ее подмассив нечетной длины \(\ge 3\) не является плохим.

Вам уже даны значения некоторых элементов перестановки. Найдите количество способов задать неизвестные значения, чтобы получить анти-медианную перестановку. Поскольку это число может быть очень большим, найдите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((2 \le n \le 10^6)\)  — длину перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), или \(p_i = -1\))  — элементы перестановки. Если \(p_i \neq -1\), то он задан, иначе он неизвестен. Гарантируется, что если для некоторых \(i \neq j\) имеет место \(p_i \neq -1, p_j \neq -1\), то \(p_i \neq p_j\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого наборам входных данных выведите одно целое число  — количество способов установить неизвестные значения для получения анти-медианной перестановки, по модулю \(10^9+7\).

Примечание

В первом наборе входных данных анти-медианными являются как \([1, 2]\), так и \([2, 1]\).

Во втором наборе входных данных перестановки \([1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2]\) являются анти-медианными. Оставшиеся две перестановки, \([1, 2, 3]\), \([3, 2, 1]\), сами по себе являются плохими массивами, так как их медиана, \(2\), находится в их середине.

В третьем наборе входных данных \([1, 2, 3, 4]\) не является анти-медианным, поскольку содержит плохой подмассив \([1, 2, 3]\).

В четвертом наборе входных данных единственный анти-медианный массив, который можно получить, это \([5, 6, 3, 4, 1, 2]\).

F. Хорошие пары

Бинарный поиск дп Структуры данных *2600

Вам дан массив \(a\) из \(n\) целых чисел, а также целое число \(k\).

Пара индексов \((l,r)\) называется хорошей, если существует последовательность индексов \(i_1, i_2, \dots, i_m\) такая, что

  • \(i_1=l\) и \(i_m=r\);
  • \(i_j < i_{j+1}\) для всех \(1 \leq j < m\); а также
  • \(|a_{i_j}-a_{i_{j+1}}| \leq k\) для всех \(1 \leq j < m\).

Найдите количество хороших пар \((l,r)\) (\(1 \leq l \leq r \leq n\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 5 \cdot 10^5\); \(0 \leq k \leq 10^5\)) — длину массива \(a\) и целое число \(k\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq 10^5\)) — массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите число хороших пар.

Примечание

В первом примере хорошие пары равны \((1,1)\), \((1,2)\), \((1,3)\), \((2,2)\), \((2,3)\) и \((3,3)\).

Во втором примере хорошие пары равны \((1,1)\), \((1,3)\), \((1,4)\), \((2,2)\), \((2,3)\), \((2,4)\), \((3,3)\), \((3,4)\) и \((4,4)\). Пара \((1,4)\) является хорошей, так как существует последовательность индексов \(1, 3, 4\), удовлетворяющая всем ограничениям.

D. Допустимые битонические перестановки

дп Комбинаторика математика реализация теория чисел *2200

Вам дано пять целых чисел \(n\), \(i\), \(j\), \(x\), и \(y\). Найдите количество битонических перестановок \(B\), чисел от \(1\) до \(n\), таких, что \(B_i=x\), и \(B_j=y\). Так как ответ может быть очень большим, выведите его по модулю \(10^9+7\).

Битоническая перестановка — это перестановка чисел, такая, что элементы перестановки сначала увеличиваются до определенного индекса \(k\), \(2 \le k \le n-1\), а затем уменьшайте до конца. Обратитесь к примечаниям для получения дополнительных разъяснений.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)) —количество наборов входных данных.

В единственной строке набора входных данных содержатся целые числа, \(n\), \(i\), \(j\), \(x\), и \(y\) (\(3 \le n \le 100\) и \(1 \le i,j,x,y \le n\)).

Гарантируется, что \(i < j\) и \(x \ne y\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую количество битонических перестановок, удовлетворяющих вышеуказанным условиям по модулю \(10^9+7\).

Примечание

Перестановка — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в любом порядке. Например, \([2,3,1,5,4]\) это перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но \(4\) встречается в массиве).

Массив из \(n \ge 3\) элементов битонический, если его элементы сначала увеличиваются до индекса \(k\), \(2 \le k \le n-1\), а затем уменьшается до конца. Например, \([2,5,8,6,1]\) это битонический массив с \(k=3\), но \([2,5,8,1,6]\) не битонический массив (элементы сначала возрастают до \(k=3\), затем убывают, а затем возрастают снова).

Битоническая перестановка — это перестановка, в которой элементы следуют вышеупомянутому битоническому свойству. Например, \([2,3,5,4,1]\) является битонической перестановкой, но \([2,3,5,1,4]\) не является битонической перестановкой (поскольку это не битонический массив) и \([2,3,4,4,1]\)также не является битонической перестановкой (поскольку это не перестановка).

Объяснение примера из условий

Для \(n=3\), возможные перестановки это \([1,2,3]\), \([1,3,2]\), \([2,1,3]\), \([2,3,1]\), \([3,1,2]\), и \([3,2,1]\). Среди приведенных перестановок битоническими перестановками являются \([1,3,2]\) и \([2,3,1]\).

В первом тестовом примере ожидаемая перестановка должна иметь вид \([2,?,3]\), который не удовлетворяет ни одной из двух битонических перестановок с \(n=3\), следовательно, ответ равен 0.

Во втором тестовом примере ожидаемая перестановка должна иметь вид \([?,3,2]\), который удовлетворяет только битонической перестановке \([1,3,2]\), следовательно, ответ 1.

E. Пары вершин

графы дп математика теория чисел *2200

Давайте назовем упорядоченную пару вершин \((u, v)\) в ориентированном графе однонаправленный если \(u \neq v\), существует путь от \(u\) до \(v\), и не существует пути от \(v\) до \(u\).

Ориентированный граф называется \(p\)-достижимым, если он содержит ровно \(p\) упорядоченных пар вершин \((u, v)\) таких, что \(u < v\), \(u\) и \(v\) достижимы друг из друга. Найдите минимальное количество вершин, необходимое для создания \(p\)-достижимого ориентированного.

Еще, среди всех \(p\)-достижимых ориентированных графов с минимальным числом вершин, пусть \(G\) обозначает граф, который максимизирует количество однонаправленных пар вершин. Найдите это число.

Входные данные

Первая и единственная строка содержит одно целое число \(p\) (\(0 \le p \le 2 \cdot 10^5\)) — количество упорядоченных пар вершин.

Выходные данные

Выведите одну строку, содержащую два целых числа — минимальное количество вершин, необходимое для создания \(p\)-достижимого ориентированного графа, и максимальное количество однонаправленных пар вершин среди всех таких \(p\)-достижимых ориентированных графов с минимальным количеством вершин.

Примечание

В первом примере минимальное количество вершин, необходимое для создания \(3\)-достижимого ориентированного графа это \(3\). Среди всех \(3\)-достижимых ориентированных графов с \(3\) вершинами, следующий граф \(G\) является одним из графиков с максимальным количеством однонаправленных пар вершин, который является \(0\).

F. Запросы к ребрам

графы Деревья дп поиск в глубину и подобное снм Структуры данных *3000

Вам дан неориентированных, связный граф из \(n\) вершин и \(m\) ребер. Все вершины \(u\) графа удовлетворяют следующему условию:

  • Пусть \(S_u\) это множество вершин принадлежащих длиннейшему простому циклу начинающемуся и заканчивающемуся в \(u\).
  • Пусть \(C_u\) это объединение множеств вершин всех простых циклов начинающихся и заканчивающихся в \(u\).
  • \(S_u = C_u\).

Вы должны ответить на \(q\) запросов.

Для каждого запроса вам будет дана вершина \(a\) и вершина \(b\). Для всех ребер принадлежащих любому простому пути из \(a\) в \(b\), посчитайте число ребер таких, что если вы удалите их, \(a\) и \(b\) останутся достижимы друг из друга.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le m \le \min\)(\(2 \cdot 10^5\), \((n \cdot (n-1))/2\))) — число вершин и ребер графа, соответственно.

Следующие \(m\) строк содержат пары целых чисел \(u\) и \(v\) (\(1 \le\) (\(u\), \(v\)) \(\le n\), \(u \neq v\)) — описывающие ребра, означающие \(u\) что \(v\) соединены друг с другом.

Гарантируется, что между одной парой вершин проведено не более одного ребра и данный граф связен.

В следующей строке содержится одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Затем \(q\) следующих строк содержат запросы. Каждая из них содержит два целых числа \(a\) и \(b\) (\(1 \le\) \(a\), \(b\) \(\le n\)).

Выходные данные

Для каждого запроса выведите одно целое число — ответ на запрос.

Примечание

Граф в первом примере:

Первый запрос это \((1, 4)\). Тут всего \(5\) ребер принадлежат любому простому пути из \(1\) в \(4\). Ребра \((3, 4), (4, 5), (5, 3)\) будут посчитаны как ответ на запрос.

Четвертый запрос \((2, 8)\). Тут только один простой путь из \(2\) в \(8\), причем ни одно ребро не будет посчитано в ответ.

Пятый запрос \((7, 10)\). Тут всего \(4\) ребра принадлежат любому простому пути из \(7\) в \(10\), все они будут посчитаны в ответе.

D. Дореми и игра с колышками

дп Комбинаторика математика *2000

У Дореми есть \(n+1\) колышек. \(n\) красных колышков расставлены в вершины правильного \(n\)-угольника и пронумерованы от \(1\) до \(n\) против часовой стрелки. Также есть синий колышек несколько меньшего диаметра по центру многоугольника. Вокруг красных колышков натянута резинка.

Дореми сегодня очень скучно, поэтому она решила сыграть в игру. Изначально у нее есть пустой массив \(a\). До тех пор, пока резинка не коснется синего колышка, она будет повторять следующую операцию:

  1. выбрать \(i\) (\(1 \leq i \leq n\)) такое, что красный колышек номер \(i\) еще не был убран;
  2. убрать красный колышек номер \(i\);
  3. добавить \(i\) в конец массива \(a\).

Дореми интересно, сколько различных массивов \(a\) может получиться как итог данного процесса. Так как ответ может быть большим, выведите его по модулю \(p\). Гарантируется, что \(p\) — простое число.

Игра с \(n=9\) и \(a=[7,5,2,8,3,9,4]\), а также игра с \(n=8\) и \(a=[3,4,7,1,8,5,2]\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(p\) (\(3 \leq n \leq 5000\), \(10^8 \le p \le 10^9\)) — количество красных колышков и модуль соответственно.

Гарантируется, что \(p\) — простое число.

Выходные данные

Выведите одно целое число — количество различных массивов \(a\), которые могут получиться как итог данной игры по модулю \(p\).

Примечание

В первом примере \(n=4\), в числе прочих могут получиться следующие массивы \(a\): \([4,2,3]\), \([1,4]\). Однако массив \(a\) не может быть равен \([1]\) или \([1,4,3]\).

E. Дореми и числовая прямая

дп жадные алгоритмы сортировки *2400

У Дореми есть два массива целых чисел \(a\) и \(b\) из \(n\) целых чисел каждый, а также целое число \(k\).

Изначально у нее есть числовая прямая, где никакие точки не покрашены. Она выбирает перестановку \(p\) чисел \([1,2,\ldots,n]\), затем делает \(n\) ходов. На \(i\)-м ходу Дореми делает следующее:

  • Она выбирает непокрашенное целое число \(x\) на числовой прямой, удовлетворяющее
    • \(x \leq a_{p_i}\), или
    • существует покрашенное целое число \(y\) такое, что \(y \leq a_{p_i}\) и \(x \leq y+b_{p_i}\).
  • Она красит \(x\) в цвет \(p_i\).

Определите, может ли целое число \(k\) оказаться покрашенным в цвет \(1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^5\), \(1 \le k \le 10^9\)).

Каждая из следующих \(n\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i,b_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если точка \(k\) может оказаться покрашена в цвет \(1\). Иначе выведите «NO» (без кавычек).

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут приняты как положительны ответ).

Примечание

В первом примере невозможно покрасить число \(16\) в цвет \(1\).

Во втором примере \(p=[2,1,3,4]\) — одно из возможных решений, ниже показаны подробности.

  • На первом ходу выбирается \(x=8\) и окрашивается в цвет \(2\), так как \(x=8\) еще не покрашено, и \(x \le a_2\).
  • На втором ходу выбирается \(x=16\) и окрашивается в цвет \(1\), так как существует покрашенная точка \(y=8\) такая, что \(y\le a_1\) и \(x \le y + b_1\).
  • На третьем ходу выбирается \(x=0\) и окрашивается в цвет \(3\), так как \(x=0\) еще не покрашено, и \(x \le a_3\).
  • На четвертом ходу выбирается \(x=-2\) и окрашивается в цвет \(4\), так как \(x=-2\) еще не покрашено, и \(x \le a_4\).
  • В итоге числа \(-2,0,8,16\) покрашены в цвета \(4,3,2,1\) соответственно.

В третьем примере одно из возможных решений — \(p=[2,1,4,3]\).

В четвертом примере одно из возможных решений — \(p=[2,3,4,1]\).

C. Card Guessing

дп Комбинаторика Теория вероятностей *2600

Consider a deck of cards. Each card has one of \(4\) suits, and there are exactly \(n\) cards for each suit — so, the total number of cards in the deck is \(4n\). The deck is shuffled randomly so that each of \((4n)!\) possible orders of cards in the deck has the same probability of being the result of shuffling. Let \(c_i\) be the \(i\)-th card of the deck (from top to bottom).

Monocarp starts drawing the cards from the deck one by one. Before drawing a card, he tries to guess its suit. Monocarp remembers the suits of the \(k\) last cards, and his guess is the suit that appeared the least often among the last \(k\) cards he has drawn. So, while drawing the \(i\)-th card, Monocarp guesses that its suit is the suit that appears the minimum number of times among the cards \(c_{i-k}, c_{i-k+1}, \dots, c_{i-1}\) (if \(i \le k\), Monocarp considers all previously drawn cards, that is, the cards \(c_1, c_2, \dots, c_{i-1}\)). If there are multiple suits that appeared the minimum number of times among the previous cards Monocarp remembers, he chooses a random suit out of those for his guess (all suits that appeared the minimum number of times have the same probability of being chosen).

After making a guess, Monocarp draws a card and compares its suit to his guess. If they match, then his guess was correct; otherwise it was incorrect.

Your task is to calculate the expected number of correct guesses Monocarp makes after drawing all \(4n\) cards from the deck.

Input

The first (and only) line contains two integers \(n\) (\(1 \le n \le 500\)) and \(k\) (\(1 \le k \le 4 \cdot n\)).

Output

Let the expected value you have to calculate be an irreducible fraction \(\dfrac{x}{y}\). Print one integer — the value of \(x \cdot y^{-1} \bmod 998244353\), where \(y^{-1}\) is the inverse to \(y\) (i. e. an integer such that \(y \cdot y^{-1} \bmod 998244353 = 1\)).

F. Chemistry Lab

геометрия дп Теория вероятностей *2200

Monocarp is planning on opening a chemistry lab. During the first month, he's going to distribute solutions of a certain acid.

First, he will sign some contracts with a local chemistry factory. Each contract provides Monocarp with an unlimited supply of some solution of the same acid. The factory provides \(n\) contract options, numbered from \(1\) to \(n\). The \(i\)-th solution has a concentration of \(x_i\%\), the contract costs \(w_i\) burles, and Monocarp will be able to sell it for \(c_i\) burles per liter.

Monocarp is expecting \(k\) customers during the first month. Each customer will buy a liter of a \(y\%\)-solution, where \(y\) is a real number chosen uniformly at random from \(0\) to \(100\) independently for each customer. More formally, the probability of number \(y\) being less than or equal to some \(t\) is \(P(y \le t) = \frac{t}{100}\).

Monocarp can mix the solution that he signed the contracts with the factory for, at any ratio. More formally, if he has contracts for \(m\) solutions with concentrations \(x_1, x_2, \dots, x_m\), then, for these solutions, he picks their volumes \(a_1, a_2, \dots, a_m\) so that \(\sum \limits_{i=1}^{m} a_i = 1\) (exactly \(1\) since each customer wants exactly one liter of a certain solution).

The concentration of the resulting solution is \(\sum \limits_{i=1}^{m} x_i \cdot a_i\). The price of the resulting solution is \(\sum \limits_{i=1}^{m} c_i \cdot a_i\).

If Monocarp can obtain a solution of concentration \(y\%\), then he will do it while maximizing its price (the cost for the customer). Otherwise, the customer leaves without buying anything, and the price is considered equal to \(0\).

Monocarp wants to sign some contracts with a factory (possibly, none or all of them) so that the expected profit is maximized — the expected total price of the sold solutions for all \(k\) customers minus the total cost of signing the contracts from the factory.

Print the maximum expected profit Monocarp can achieve.

Input

The first line contains two integers \(n\) and \(k\) (\(1 \le n \le 5000\); \(1 \le k \le 10^5\)) — the number of contracts the factory provides and the number of customers.

The \(i\)-th of the next \(n\) lines contains three integers \(x_i, w_i\) and \(c_i\) (\(0 \le x_i \le 100\); \(1 \le w_i \le 10^9\); \(1 \le c_i \le 10^5\)) — the concentration of the solution, the cost of the contract and the cost per liter for the customer, for the \(i\)-th contract.

Output

Print a single real number — the maximum expected profit Monocarp can achieve.

Your answer is considered correct if its absolute or relative error does not exceed \(10^{-6}\).

Formally, let your answer be \(a\), and the jury's answer be \(b\). Your answer is accepted if and only if \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

C. Гамильтонова стена

дп реализация *1300

Сэр Монокарп Гамильтон планирует покрасить свою стену. Стену можно представить как сетку, состоящую из \(2\) строк и \(m\) столбцов. Изначально стена полностью белая.

Монокарп хочет нарисовать на стене черное изображение. В частности он хочет, чтобы клетка \((i, j)\) (\(j\)-я клетка в \(i\)-й строке) была покрашена в черный, если \(c_{i, j} =\) 'B', и была оставлена белой, если \(c_{i, j} =\) 'W'. Кроме того он хочет, чтобы в каждом столбце была хотя бы одна черная клетка, поэтому для каждого \(j\) выполняется следующее условие: \(c_{1, j}\), \(c_{2, j}\) или они обе равны 'B'.

Чтобы картинка получилась ровной, Монокарп хочет поставить кисть в какую-нибудь клетку \((x_1, y_1)\) и провести ей по пути \((x_1, y_1), (x_2, y_2), \dots, (x_k, y_k)\) так, чтобы:

  • для каждого \(i\) \((x_i, y_i)\) и \((x_{i+1}, y_{i+1})\) имели общую сторону;
  • все чёрные клетки встречались в пути ровно по одному разу;
  • в пути не встречались белые клетки.

Определите, может ли Монокарп покрасить стену.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество столбцов в стене.

В \(i\)-й из следующих двух строк записана строка \(c_i\), состоящая из \(m\) символов, где каждый символ — это 'B' или 'W'. \(c_{i, j}\) равно 'B', если клетка \((i, j)\) должна быть покрашена черным, и 'W', если клетка \((i, j)\) должна быть оставлена белой.

Кроме того, для каждого \(j\) выполняется следующее условие: \(c_{1, j}\), \(c_{2, j}\) или они обе равны 'B'.

Сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите «YES», если Монокарп может покрасить стену. В противном случае выведите «NO».

Примечание

В первом наборе входных данных Монокарп может провести кистью по пути \((2, 1)\), \((2, 2)\), \((1, 2)\), \((1, 3)\). Все черные клетки встречаются в пути ровно один раз, никакая белая клетка не встречается в пути.

Во втором наборе входных данных Монокарп может воспользоваться путем \((1, 1)\), \((2, 1)\).

В третьем наборе входных данных:

  • путь \((1, 1)\), \((2, 1)\), \((2, 2)\), \((2, 3)\), \((1, 3)\), \((2, 4)\), \((2, 5)\), \((1, 5)\) не подходит, потому что пара клеток \((1, 3)\) и \((2, 4)\) не имеют общую сторону;
  • путь \((1, 1)\), \((2, 1)\), \((2, 2)\), \((2, 3)\), \((1, 3)\), \((2, 3)\), \((2, 4)\), \((2, 5)\), \((1, 5)\) не подходит, потому что клетка \((2, 3)\) посещается дважды;
  • путь \((1, 1)\), \((2, 1)\), \((2, 2)\), \((2, 3)\), \((2, 4)\), \((2, 5)\), \((1, 5)\) не подходит, потому что черная клетка \((1, 3)\) не встречается в пути;
  • путь \((1, 1)\), \((2, 1)\), \((2, 2)\), \((2, 3)\), \((2, 4)\), \((2, 5)\), \((1, 5)\), \((1, 4)\), \((1, 3)\) не подходит, потому что белая клетка \((1, 4)\) встречается в пути.

E. Декомпозиция

Бинарный поиск дп Перебор разделяй и властвуй Структуры данных *2300

Для последовательности целых чисел \([x_1, x_2, \dots, x_k]\) обозначим декомпозицию следующим образом:

Будем обрабатывать последовательность слева направо, поддерживая список ее подпоследовательностей. Когда мы обрабатываем элемент \(x_i\), мы приписываем его в конец первой подпоследовательности в списке, для которой побитовое И последнего ее элемента и \(x_i\) больше \(0\). Если такой подпоследовательности в списке нет, создадим новую подпоследовательность с единственным элементом \(x_i\) и запишем ее в конец списка подпоследовательностей.

Например, рассмотрим декомпозицию последовательности \([1, 3, 2, 0, 1, 3, 2, 1]\):

  • обрабатываем элемент \(1\), список подпоследовательностей пуст. Ни к одной подпоследовательности нельзя приписать \(1\), поэтому мы создаем новую подпоследовательность \([1]\);
  • обрабатываем элемент \(3\), список подпоследовательностей — \([[1]]\). Так как побитовое И \(3\) и \(1\) равно \(1\), элемент добавляется в первую подпоследовательность;
  • обрабатываем элемент \(2\), список подпоследовательностей — \([[1, 3]]\). Так как побитовое И \(2\) и \(3\) равно \(2\), элемент добавляется в первую подпоследовательность;
  • обрабатываем элемент \(0\), список подпоследовательностей — \([[1, 3, 2]]\). Ни к одной подпоследовательности нельзя приписать \(0\), поэтому мы создаем новую подпоследовательность \([0]\);
  • обрабатываем элемент \(1\), список подпоследовательностей — \([[1, 3, 2], [0]]\). Ни к одной подпоследовательности нельзя приписать \(1\), поэтому мы создаем новую подпоследовательность \([1]\);
  • обрабатываем элемент \(3\), список подпоследовательностей — \([[1, 3, 2], [0], [1]]\). Так как побитовое И \(3\) и \(2\) равно \(2\), элемент добавляется в первую подпоследовательность;
  • обрабатываем элемент \(2\), список подпоследовательностей — \([[1, 3, 2, 3], [0], [1]]\). Так как побитовое И \(2\) и \(3\) равно \(2\), элемент добавляется в первую подпоследовательность;
  • обрабатываем элемент \(1\), список подпоследовательностей — \([[1, 3, 2, 3, 2], [0], [1]]\). Элемент \(1\) нельзя приписать ни к одной из первых двух подпоследовательностей, но можно приписать к третьей.

В результате получается список подпоследовательностей \([[1, 3, 2, 3, 2], [0], [1, 1]]\).

Пусть \(f([x_1, x_2, \dots, x_k])\) — количество подпоследовательностей, на которое декомпозируется последовательность \([x_1, x_2, \dots, x_k]\).

А теперь — сама задача.

Вам дана последовательность \([a_1, a_2, \dots, a_n]\), в которой каждый элемент — это целое число от \(0\) до \(3\). Пусть \(a[i..j]\) — это последовательность \([a_i, a_{i+1}, \dots, a_j]\). Вы должны посчитать \(\sum \limits_{i=1}^n \sum \limits_{j=i}^n f(a[i..j])\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 3\)).

Выходные данные

Выведите одно целое число, равное \(\sum \limits_{i=1}^n \sum \limits_{j=i}^n f(a[i..j])\).

C. Посчитайте бинарные строки

дп Структуры данных *2100

Дано целое число \(n\). Вы должны посчитать количество бинарных (состоящих из символов 0 и/или 1) строк \(s\), удовлетворяющих следующим условиям.

Для каждой пары целых чисел \((i, j)\), в которой \(1 \le i \le j \le n\), дано целое число \(a_{i,j}\). Оно соответствует следующему ограничению на строку \(s_i s_{i+1} s_{i+2} \dots s_j\):

  • если \(a_{i,j} = 1\), все символы в строке \(s_i s_{i+1} s_{i+2} \dots s_j\) должны быть одинаковыми;
  • если \(a_{i,j} = 2\), в подстроке \(s_i s_{i+1} s_{i+2} \dots s_j\) должна быть хотя бы одна пара различных символов;
  • если \(a_{i,j} = 0\), на подстроку \(s_i s_{i+1} s_{i+2} \dots s_j\) нет ограничений.

Посчитайте количество бинарных строк \(s\) длины \(n\), удовлетворяющих данным условиям. Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 100\)).

Затем следуют \(n\) строк. В \(i\)-й из них задано \(n-i+1\) целых чисел \(a_{i,i}, a_{i,i+1}, a_{i,i+2}, \dots, a_{i,n}\) (\(0 \le a_{i,j} \le 2\)).

Выходные данные

Выведите одно целое число — количество строк, удовлетворяющих ограничениям задачи, взятое по модулю \(998244353\).

Примечание

В первом примере ограничениям соответствуют строки 001, 010, 011, 100, 101, 110.

Во втором примере ограничениям соответствуют строки 001, 110.

D. Плей-офф

дп жадные алгоритмы Комбинаторика Конструктив математика *1500

\(2^n\) команд участвуют в плей-офф турнире. Турнир состоит из \(2^n - 1\) игры. Они проводятся следующим образом: на первом этапе команды делятся на пары: команда \(1\) играет против команды \(2\), команда \(3\) играет против команды \(4\) и так далее (таким образом, в этой фазе будет сыграно \(2^{n-1}\) игры). Когда команда проигрывает игру, она выбывает, и каждая игра приводит к выбыванию одной команды (нет ничьих). После этого остается \(2^{n-1}\) команд. Если остается только одна команда, она объявляется чемпионом; в противном начинается второй этап, где играется еще \(2^{n-2}\) игр: в первой из них победитель игры «\(1\) против \(2\)» играет против победителя игры «\(3\) против \(4\)», затем победитель игры «\(5\) против \(6\)» играет против победителя игры «\(7\) против \(8\)» и так далее. Этот процесс повторяется до тех пор, пока не останется только одна команда.

Уровень навыков \(i\)-й команды равен \(p_i\), где \(p\) — перестановка чисел \(1\), \(2\), ..., \(2^n\) (перестановка — это массив, в котором каждый элемент от \(1\) до \(2^n\) встречается ровно один раз).

Задана строка \(s\), состоящая из \(n\) символов. Эти символы обозначают результаты игр на каждом этапе турнира следующим образом:

  • если \(s_i\) равно 0, то на \(i\)-м этапе турнира (этапе с \(2^{n-i}\) играми) каждую игру выигрывает команда с меньшим уровнем навыков;
  • если \(s_i\) равно 1, то на \(i\)-м этапе турнира (этапе с \(2^{n-i}\) играми) каждую игру выигрывает команда с большим уровнем навыков.

Назовем целое число \(x\) выигрышным, если существует такая перестановка \(p\), что команда с уровнем навыков \(x\) выиграет турнир. Найдите все выигрышные целые числа.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 18\)).

Вторая строка содержит строку \(s\) длины \(n\), состоящую из символов 0 и/или 1.

Выходные данные

Выведите все выигрышные целые числа \(x\) в порядке их возрастания.

E. Algebra Flash

meet-in-the-middle битмаски графы Деревья дп математика Перебор *2500

Выпущена новая версия: Algebra Flash 2.2

Список изменений:

  • Новый игровой режим!

Благодарим вас за непрерывную поддержку игры!

И это все? С небольшим разочарованием вы запускаете игру и нажимаете на новый режим. Написано «Цветные платформы».

В ряд расположены \(n\) платформ, пронумерованных от \(1\) до \(n\). В игре доступны \(m\) цветов, пронумерованных от \(1\) до \(m\). \(i\)-я платформа раскрашена в цвет \(c_i\).

Вы начинаете на платформе \(1\) и хотите добраться до платформы \(n\). За один ход вы можете прыгнуть с некоторой платформы \(i\) на платформы \(i + 1\) или \(i + 2\).

Все платформы изначально деактивированы (включая платформы \(1\) и \(n\)). Для каждого цвета \(j\) можно заплатить \(x_j\) монет, чтобы активировать все платформы этого цвета.

Вы хотите включить некоторые платформы так, чтобы можно было начать на активированной платформе \(1\), попрыгать по некотором активированным платформам и достичь платформы \(n\).

Какое наименьшее количество монет потребуется для достижения этого?

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(2 \le n \le 3 \cdot 10^5\); \(1 \le m \le 40\)) — количество платформ и количество цветов, соответственно.

Во второй строке записаны \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le m\)) — цвета платформ.

В третьей строке записаны \(m\) целых чисел \(x_1, x_2, \dots, x_m\) (\(1 \le x_i \le 10^7\)) — стоимости включения всех платформ каждого цвета.

Выходные данные

Выведите наименьшее количество монет, которое потребуется того, чтобы можно было начать на активированной платформе \(1\), попрыгать по некотором активированным платформам и достичь платформы \(n\).

F. Великолепный прыжок

дп жадные алгоритмы *2900

Вам дан массив натуральных чисел \(a_1,a_2,\ldots,a_n\) длины \(n\).

За одну операцию вы можете прыгнуть с позиции \(i\) на позицию \(j\) (\(1 \le i \le j \le n\)), заплатив \(\min(a_i, a_{i + 1}, \ldots, a_j) \cdot (j - i)^2\) эрисов.

Для каждого \(k\) от \(1\) до \(n\) найдите минимальное количество эрисов, которое вам придется потратить, чтобы добраться от позиции \(1\) до позиции \(k\).

Входные данные

Первая строка содержит одно число \(n\) (\(2 \le n \le 4 \cdot 10^5\)) — длину массива.

Во второй строке содержится \(n\) чисел \(a_1,a_2,\ldots a_n\) (\(1 \le a_i \le n\)).

Выходные данные

Выведите \(n\) чисел, \(k\)-е из которых является минимальным количеством эрисов, которое вам придется потратить, чтобы добраться от позиции \(1\) до позиции \(k\).

Примечание

В первом тесте:

  • Из \(1\) в \(1\): стоимость \(0\),
  • Из \(1\) в \(2\): \(1 \rightarrow 2\) - стоимость \(\min(2, 1) \cdot (2 - 1) ^ 2=1\),
  • Из \(1\) в \(3\): \(1 \rightarrow 2 \rightarrow 3\) - стоимость \(\min(2, 1) \cdot (2 - 1) ^ 2 + \min(1, 3) \cdot (3 - 2) ^ 2 = 1 + 1 = 2\).

В четвертом тесте из \(1\) в \(4\): \(1 \rightarrow 3 \rightarrow 4\) - стоимость \(\min(1, 4, 4) \cdot (3 - 1) ^ 2 + \min(4, 4) \cdot (4 - 3) ^ 2 = 4 + 4 = 8\).

C1. Подкрутка I

*особая задача дп жадные алгоритмы Перебор *1200

В этой версии задачи \(n \le 50\) и \(a_i \le 100\).

Вика за время работы в компании VK уже сделала \(n\) коммитов в системе контроля версий. \(i\)-й коммит был сделан в \(a_i\)-й день работы Вики в компании. В некоторые дни Вика могла сделать несколько коммитов, а в другие — не сделать ни одного.

Вику интересуют такие отрезки подряд идущих дней, что в каждый из этих дней у неё есть хотя бы один коммит. Чем длиннее будет самый длинный такой отрезок, тем более продуктивным сотрудником она будет себя ощущать.

Недавно Вика нашла способ подкрутить время любого коммита вперёд, но не более чем на сутки. Таким образом, \(i\)-й коммит теперь может быть «сделан» либо в \(a_i\)-й, либо в \((a_i + 1)\)-й день. Время каждого коммита можно подкрутить независимо от других — в частности, можно как оставить всем коммитам исходное время, так и перенести все коммиты ровно на день вперёд.

Найдите длину самого длинного возможного отрезка подряд идущих дней, в каждый из которых у Вики в профиле будет отображаться хотя бы один коммит, после возможной подкрутки времени некоторых коммитов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — число коммитов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) в неубывающем порядке (\(1 \le a_1 \le a_2 \le \ldots \le a_n \le 100\)) — номера дней, в которые были сделаны коммиты.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную возможную длину отрезка дней, в каждый из которых у Вики в профиле будет отображаться хотя бы один коммит, после возможной подкрутки времени некоторых коммитов вперёд не более чем на сутки.

Примечание

В первом наборе входных данных можно поменять дату коммита в день \(3\) на день \(4\), дату коммита в день \(4\) — на день \(5\), а дату любого из коммитов в день \(6\) — на день \(7\). Тогда в каждый из дней \(4\), \(5\), \(6\), \(7\) и \(8\) в профиле Вики будет отображаться хотя бы один коммит, и наибольший отрезок из подряд идущих дней с коммитами — \([4; 8]\) — будет иметь длину \(5\).

Во втором наборе входных данных можно либо оставить все коммиты как есть, либо перенести каждый коммит на день вперёд. В любом случае длина отрезка дней составит \(6\).

В третьем наборе входных данных Вика сделала много коммитов, но все в один и тот же день с номером \(10\). В лучшем случае отрезок дней достигнет длины \(2\) — если какие-то коммиты оставить на день \(10\), а другие перенести на день \(11\).

C2. Подкрутка II

*особая задача дп *1300

В этой версии задачи \(n \le 2 \cdot 10^5\) и \(a_i \le 10^6\) (а также есть ограничение на сумму \(n\) по наборам входных данных внутри одного теста).

Вика за время работы в компании VK уже сделала \(n\) коммитов в системе контроля версий. \(i\)-й коммит был сделан в \(a_i\)-й день работы Вики в компании. В некоторые дни Вика могла сделать несколько коммитов, а в другие — не сделать ни одного.

Вику интересуют такие отрезки подряд идущих дней, что в каждый из этих дней у неё есть хотя бы один коммит. Чем длиннее будет самый длинный такой отрезок, тем более продуктивным сотрудником она будет себя ощущать.

Недавно Вика нашла способ подкрутить время любого коммита вперёд, но не более чем на сутки. Таким образом, \(i\)-й коммит теперь может быть «сделан» либо в \(a_i\)-й, либо в \((a_i + 1)\)-й день. Время каждого коммита можно подкрутить независимо от других — в частности, можно как оставить всем коммитам исходное время, так и перенести все коммиты ровно на день вперёд.

Найдите длину самого длинного возможного отрезка подряд идущих дней, в каждый из которых у Вики в профиле будет отображаться хотя бы один коммит, после возможной подкрутки времени некоторых коммитов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — число коммитов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) в неубывающем порядке (\(1 \le a_1 \le a_2 \le \ldots \le a_n \le 10^6\)) — номера дней, в которые были сделаны коммиты.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную возможную длину отрезка дней, в каждый из которых у Вики в профиле будет отображаться хотя бы один коммит, после возможной подкрутки времени некоторых коммитов вперёд не более чем на сутки.

Примечание

В первом наборе входных данных можно поменять дату коммита в день \(3\) на день \(4\), дату коммита в день \(4\) — на день \(5\), а дату любого из коммитов в день \(6\) — на день \(7\). Тогда в каждый из дней \(4\), \(5\), \(6\), \(7\) и \(8\) в профиле Вики будет отображаться хотя бы один коммит, и наибольший отрезок из подряд идущих дней с коммитами — \([4; 8]\) — будет иметь длину \(5\).

Во втором наборе входных данных можно либо оставить все коммиты как есть, либо перенести каждый коммит на день вперёд. В любом случае длина отрезка дней составит \(6\).

В третьем наборе входных данных Вика сделала много коммитов, но все в один и тот же день с номером \(10\). В лучшем случае отрезок дней достигнет длины \(2\) — если какие-то коммиты оставить на день \(10\), а другие перенести на день \(11\).

D1. Игра в Девятку I

*особая задача дп Перебор *1800

В этой версии задачи нужно определить, кто выиграет в карточной игре для двух игроков в заданном раскладе при оптимальной игре обоих соперников.

Алиса и Боб решили сыграть в карточную игру «Девятка». Пожалуйста, внимательно прочитайте условие задачи, поскольку правила могут отличаться от известных вам.

Для игры нужна стандартная колода из \(36\) карт — по девять карт (от шестёрки до туза) каждой из четырёх мастей (трефы, бубны, пики и черви). Карты по достоинству от младшей к старшей идут следующим образом: шестёрка, семёрка, восьмёрка, девятка, десятка, валет, дама, король, туз.

Перед игрой колода перемешивается, и каждому игроку раздаётся по \(18\) карт. Карты нужно выкладывать из руки на стол по определённым правилам. Выигрывает игрок, который первым выложит все карты из своей руки.

Игроки ходят по очереди. Ход игрока имеет один из следующих видов:

  • выложить на стол из своей руки девятку любой масти;
  • выложить на стол шестёрку, семёрку или восьмёрку любой масти, если на столе уже лежит карта той же масти достоинством на единицу выше;
  • выложить на стол десятку, валета, даму, короля или туза любой масти, если на столе уже лежит карта той же масти достоинством на единицу ниже.

Например, девятку пик можно выложить на стол в любой момент, для выкладывания семёрки треф необходимо наличие на столе восьмёрки треф, а для выкладывания туза червей необходимо наличие на столе короля червей.

Если игрок не может выложить на стол ни одну карту из своей руки, то ход переходит к сопернику. Обратите внимание: нельзя пропустить ход просто так — всегда необходимо выложить карту на стол корректным образом, если это возможно.

Вам дан расклад карт в начале игры. Алиса будет ходить первой. Определите, кто первым избавится от всех своих карт и выиграет, если оба игрока будут пытаться победить и играть оптимально.

Входные данные

В первой строке задано \(18\) строк длины \(2\) через пробел, описывающих карты Алисы в случайном порядке. Первый символ строки обозначает достоинство карты — символ из набора 6, 7, 8, 9, T, J, Q, K, A, обозначающий шестёрку, семёрку, восьмёрку, девятку, десятку, валета, даму, короля и туза, соответственно. Второй символ строки обозначает масть карты — символ из набора C, D, S, H, обозначающий трефы, бубны, пики и черви, соответственно.

Во второй строке задано \(18\) строк длины \(2\) через пробел, описывающих карты Боба в том же формате.

Каждая из \(36\) возможных карт находится в руке одного из двух игроков в единственном экземпляре.

В задаче \(100\) тестов. Все тесты сгенерированы случайным образом.

Выходные данные

Выведите Alice, если при оптимальной игре выиграет Алиса, и Bob в противном случае.

E. Косия и дерево

Деревья дп Комбинаторика математика поиск в глубину и подобное снм Теория вероятностей *2400

У Ими есть неориентированное дерево из \(n\) вершин, ребра которого пронумерованы от \(1\) до \(n-1\). \(i\)-е ребро соединят вершины \(u_i\) и \(v_i\). Также на дереве находятся \(k\) бабочек. Изначально \(i\)-я бабочка находится в вершине \(a_i\). Все значения \(a\) попарно различны.

Косия играет в игру следующим образом.

  • Для \(i = 1, 2, \dots, n - 1\) Косия выбирает одно из направлений \(i\)-го ребра (\(u_i \rightarrow v_i\) или \(v_i \rightarrow u_i\)) с одинаковой вероятностью.
  • Для \(i = 1, 2, \dots, n - 1\), если в начальной вершине \(i\)-го ребра есть бабочка, а в конечной вершине нет бабочки, то эта бабочка перелетает в конечную вершину. Обратите внимание, что операции выполняются для ребер \(1, 2, \dots, n - 1\) по порядку, а не одновременно.
  • Косия выбирает две бабочки из \(k\) бабочек с равной вероятностью для всех \(\frac{k(k-1)}{2}\) способов выбрать две бабочки, затем она вычисляет расстояние\(^\dagger\) между двумя вершинами, и объявляет это своим счетом.

Косия хочет, чтобы вы вычислили математическое ожидание ее счета по модулю \(998\,244\,353^\ddagger\).

\(^\dagger\) Расстоянием между двумя вершинами в дереве называется количество ребер на (единственном) простом пути между ними.

\(^\ddagger\) Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \leq k \leq n \leq 3 \cdot {10}^5\)) — размер дерева и количество бабочек.

Вторая строка содержит \(k\) целых чисел \(a_1, a_2, \dots, a_k\) (\(1 \leq a_i \leq n\)) — начальные позиции бабочек. Гарантируется, что все позиции попарно различны.

\(i\)-я из следующих \(n − 1\) строк содержит два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\)) — вершины, которые соединяет \(i\)-е ребро.

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите одно целое число — математическое ожидание счета Косии по модулю \(998\,244\,353\).

Примечание

Дерево из первого примера показано ниже. Вершины с бабочками отмечены жирным.

Существуют только \(2\) бабочки, поэтому выбор бабочек фиксирован. Рассмотрим следующие \(4\) случая:

  • Ориентация ребер \(1 \rightarrow 2\) и \(2 \rightarrow 3\): бабочка из вершины \(1\) перемещается в вершину \(2\), а бабочка в вершине \(3\) не двигается. Расстояние между вершинами \(2\) и \(3\) равно \(1\).
  • Ориентация ребер \(1 \rightarrow 2\) и \(3 \rightarrow 2\): бабочка из вершины \(1\) перемещается в вершину \(2\), а бабочка в вершине \(3\) не двигается, потому что вершина \(2\) занята. Расстояние между вершинами \(2\) и \(3\) равно \(1\).
  • Ориентация ребер \(2 \rightarrow 1\) и \(2 \rightarrow 3\): бабочки в вершинах \(1\) и \(3\) не двигаются. Расстояние между вершинами \(1\) и \(3\) равно \(2\).
  • Ориентация ребер \(2 \rightarrow 1\) и \(3 \rightarrow 2\): бабочка в вершине \(1\) не двигается, а бабочка из вершины \(3\) перемещается в вершину \(2\). Расстояние между вершинами \(1\) и \(2\) равно \(1\).

Таким образом, математическое ожидание счета Косии равно \(\frac {1+1+2+1} {4} = \frac {5} {4}\), что есть \(748\,683\,266\) по модулю \(998\,244\,353\).

Дерево из второго примера показано ниже. Вершины с бабочками отмечены жирным. Математическое ожидание счета Косии равно \(\frac {11} {6}\), что есть \(831\,870\,296\) по модулю \(998\,244\,353\).

F. Кохиа и последовательность

битмаски дп Комбинаторика математика теория чисел *3100

У Мари есть три целых числа \(n\), \(x\) и \(y\).

Назовем массив \(a\) из \(n\) неотрицательных целых чисел хорошим, если он удовлетворяет следующим ограничениям:

  • \(a_1+a_2+\ldots+a_n=x\), и
  • \(a_1 \, | \, a_2 \, | \, \ldots \, | \, a_n=y\), где \(|\) обозначает операцию побитового ИЛИ.

Значением хорошего массива называется значение \(a_1 \oplus a_2 \oplus \ldots \oplus a_n\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Косия хочет, чтобы вы нашли побитовое исключающее ИЛИ значений всех хороших массивов. Если хороших массивов не существует, выведите \(0\).

Входные данные

Первая строка содержит три целых числа \(n\), \(x\) и \(y\) (\(1 \leq n < 2^{40}\), \(0 \leq x < 2^{60}\), \(0 \leq y < 2^{20}\)).

Выходные данные

Выведите одно целое число — побитовое исключающее ИЛИ значений всех хороших массивов.

Примечание

В первом примере есть \(12\) хороших массивов, они перечислены ниже.

  • \([0,2,3]\), \([0,3,2]\), \([2,0,3]\), \([2,3,0]\), \([3,0,2]\) и \([3,2,0]\): значение равно \(0 \oplus 2 \oplus 3 = 1\);
  • \([1, 2, 2]\), \([2, 1, 2]\) and \([2, 2, 1]\): значение равно \(1 \oplus 2 \oplus 2 = 1\);
  • \([1, 1, 3]\), \([1, 3, 1]\) and \([3, 1, 1]\): значение равно \(1 \oplus 1 \oplus 3 = 3\).

Поэтому побитовое исключющее ИЛИ значений всех хороших массивов равно \(\underbrace{1 \oplus \ldots \oplus 1}_{9\text{ раз}} \oplus 3 \oplus 3 \oplus 3 = 2\).

Во втором примере нет хороших массивов. Ответ должен быть \(0\).

B. Хоссам и друзья

Бинарный поиск дп Конструктив *1400

Хоссам устраивает большую вечеринку, он собирается пригласить на нее своих друзей.

У него есть \(n\) друзей, пронумерованных от \(1\) до \(n\). Они будут организованы в очередь следующим образом: \(1, 2, 3, \ldots, n\).

У Хоссама есть список из \(m\) пар его друзей, которые не знакомы друг с другом. Любая пара, не входящая в этот список, знакома друг с другом.

Подотрезок очереди, начинающийся с друга \(a\) и заканчивающийся другом \(b\), равен \([a, a + 1, a + 2, \ldots, b]\). Подоторезок очереди считается хорошим, если любая пара из этого подотрезка знакома друг с другом.

Хоссам хочешь знать, сколько пар \((a, b)\) (\(1 \le a \le b \le n\)), таких, что подотрезок начинающийся с друга \(a\) и заканчивающийся другом \(b\) хороший.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)), количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 10^5\), \(0 \le m \le 10^5\)) означающих число друзей и число пар, соответственно.

В \(i\)-й из следующих \(m\) строк содержатся два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i\le n\), \(x_i \neq y_i\)) означающих пары друзей Хоссама, которые не знают друг друга.

Обратите внимание, что пары могут повторяться.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\), и сумма \(m\) по всем наборам входных данных не первосходит\(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество хороших подотрезков.

Примечание

В первом наборе ответ равен \(4\). Хорошие подотрезки здесь:

[1]

[2]

[3]

[1, 2]

Во втором наборе ответ равен \(5\). Хорошие подотрезки здесь:

[1]

[2]

[3]

[4]

[3, 4]

D. Хоссам и дерево (под-)палиндромов

Деревья дп Перебор поиск в глубину и подобное Строки Структуры данных *2100

У Хоссама есть невзвешенное дерево \(G\), в вершинах которого записаны буквы.

Через \(s(v, \, u)\) Хоссам обозначает строку, которая получается при написании всех букв на единственном простом пути из вершины \(v\) в вершину \(u\) в дереве \(G\).

Строка \(a\) является подпоследовательностью строки \(s\), если \(a\) может быть получена из \(s\) путем удаления нескольких символов (возможно, ни одного). Например, «dores», «cf» и «for» являются подпоследовательностями «codeforces», а «decor» и «fork» не являются.

Палиндромом называется строка, читающаяся одинаково слева направо и справа налево. Например, «abacaba» — палиндром, а «abac» — нет.

Под-палиндромом строки \(s\) Хоссам называет подпоследовательность \(s\), являющуюся палиндромом. Например, «k», «abba» и «abhba» являются под-палиндромом строки «abhbka», а «abka» и «cat» — нет.

Максимальным под-палиндромом строки \(s\) Хоссам называет под-палиндром \(s\), имеющий максимальную длину среди всех под-палиндромов \(s\). Например, у строки «abhbka» есть только один максимальный под-палиндром — «abhba». Но может быть и так, что у строки несколько максимальных под-палиндромов: у строки «abcd» целых \(4\) максимальных под-палиндрома.

Хоссам просит вас найти длину самого длинного максимального под-палиндрома среди всех \(s(v, \, u)\) в заданном дереве \(G\).

Еще раз обращаем Ваше внимание на то, что под-палиндром — это подпоследовательность, а не подстрока.

Входные данные

В первой строке входного файла задано одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^3\)) — количество вершин в дереве.

Во второй строке задана строка \(s\) длины \(n\), \(i\)-й символ которой задает букву, которая записана в вершине дерева с номером \(i\). Гарантируется, что все символы этой строке — маленькие буквы латинского алфавита.

Далее идут \(n - 1\) строк, описывающие ребра в дереве. Каждое ребро задаётся двумя целыми числами \(v\) и \(u\) (\(1 \le v, \, u \le n\), \(v \neq u\)). Эти два числа означают, что в дереве есть ребро \((v, \, u)\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма по всем \(n\) не превышает \(2 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите одно число — длину самого длинного максимального под-палиндрома среди всех \(s(v, \, u)\).

Примечание

В первом примере искомым подпалиндромом может быть «aaa», символы которого расположены в вершинах \(1, \, 3, \, 5\) или «aca», символы которого расположены в вершинах \(1, \, 4, \, 5\).

Дерево из первого примера.

Во втором примере единственным искомым палиндромом является «bacab», символы которого расположены в вершинах \(4, \, 2, \, 1, \, 5, \, 9\).

Дерево из второго примера.

E. Хоссам и буква

дп Перебор реализация *2500

Хоссам купил новый участок земли длины \(n\) и ширины \(m\), он поделил его на \(n \cdot m\) квадратов, каждый из которых имеет размер \(1\times1\).

Так как имя Хоссам начинается с латинской буквы 'H', он хочет нарисовать большую букву 'H' путем построения стен размера \(1\times1\) на некоторых квадратах земли. Каждый квадрат земли \(1\times1\) может быть одного из трех типов: идеальный, средний, или плохой.

Процесс возведения стен для формирования буквы 'H' имеет следующие ограничения:

  • Буква должна состоять из одной горизонтальной и двух вертикальных линий.
  • Вертикальные линии не должны находиться в одном и том же или соседних столбцах.
  • Вертикальные линии должны начинаться в одной строке и заканчиваться в одной строке (и, следовательно, иметь одинаковую длину).
  • Горизонтальная линия должна соединять вертикальные линии, но не должна пересекать их.
  • Горизонтальная линия может находиться в любом ряду между вертикальными линиями (не только в середине), кроме верхней и нижней. (С горизонтальной линией в верхнем ряду буква выглядит как 'n', а в нижнем ряду как 'U'.)
  • Запрещается возводить стены в квадратах плохого качества.
  • Вы можете использовать не более одного квадрата среднего качества.
  • Вы можете использовать любое количество квадратов идеального качества.

Найдите максимальное количество стен, которые можно использовать для рисования буквы 'H'.

Смотрите примечание для получения дополнительных разъяснений.

Входные данные

Первая строка ввода содержит два целых числа \(n\), \(m\) (\(1 \le n, m \le 400\)).

Следующие \(n\) строк содержат \(m\) символов, описывающих участок. Символ '.' кодирует квадрат превосходного качества, 'm' — среднего качества, '#' — плохого качества.

Выходные данные

Выведите одно целое число — максимальное число стен в букве 'H'.

Если никак не возможно написать букву 'H', выведите \(0\).

Примечание

В первом тестовом примере никак не возможно написать букву 'H'.

Во втором примере, картинка показывает участок и некоторые допустимые буквы 'H'. Идеальные, средние, и плохие квадраты выделены белым, желтым, и черным цветом соответственно.

C. Лед и пламень

дп жадные алгоритмы Конструктив *1300

Little09 и его друзья играют в игру. Есть \(n\) игроков, и значение температуры игрока \(i\) равно \(i\).

Типы окружающей среды обозначаются как \(0\) или \(1\). Когда два игрока сражаются в определенной среде, если её тип равен \(0\), то всегда побеждает игрок с более низким значением температуры; если он равен \(1\), то всегда побеждает игрок с более высоким значением температуры. Типы этих сред \(n-1\) образуют бинарную строку \(s\) длиной \(n-1\).

Если в игре участвует \(x\) игроков, то всего будет \(x-1\) сражений, а типами \(x-1\) сред будут первые \(x-1\) символов \(s\). Если в турнире осталось более одного игрока, выберите для сражения любых двух оставшихся игроков. Игрок, который проиграет, выбывает из турнира. Типом среды для \(i\)-го сражения является \(s_i\).

Для каждого \(x\) от \(2\) до \(n\) ответьте на следующий вопрос: если в игре участвуют все игроки, значение температуры которых не превышает \(x\), то сколько игроков имеют шансы на победу?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t \le 10^3\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\leq n\leq 2\cdot 10^5\))  — количество игроков.

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длиной \(n-1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n-1\) целых чисел  — для каждого \(x\) от \(2\) до \(n\) выведите количество игроков, имеющих шанс на победу.

Примечание

В первом наборе входных данных для \(x=2\) и \(x=3\) победителем может стать только игрок, чье значение температуры равно \(1\). Для \(x=4\) победителем могут стать игроки, чьи значения температуры равны \(2,3,4\).

E. Две шахматные фигуры

Деревья дп жадные алгоритмы поиск в глубину и подобное *1900

У Cirno_9baka есть дерево с \(n\) вершинами. Он готов поделиться им с вами, что означает, что вы можете на нем оперировать.

Изначально в вершине \(1\) дерева стоят две шахматные фигуры. За один шаг вы можете выбрать любую фигуру и переместить ее в соседнюю вершину. Вам также дано целое число \(d\). Вам нужно выполнить следующее условие: расстояние между двумя фигурами всегда должно не превышать \(d\).

У каждой из этих двух фигур есть последовательность вершин, которые они должны пройти в любом порядке, и, в конце концов, они должны вернуться в корень. Как любознательный мальчик, он хочет узнать минимальное количество шагов, которое для этого необходимо сделать.

Входные данные

Первая строка содержит два целых числа \(n\) и \(d\) (\(2 \le d \le n \le 2\cdot 10^5\)).

В \(i\)-й из следующих \(n - 1\) строк содержится два целых числа \(u_i, v_i\) \((1 \le u_i, v_i \le n)\), обозначающих ребро между вершинами \(u_i, v_i\) дерева.

Гарантируется, что эти ребра образуют дерево.

Следующая строка содержит целое число \(m_1\) (\(1 \le m_1 \le n\)) и \(m_1\) целых чисел \(a_1, a_2, \ldots, a_{m_1}\) (\(1 \le a_i \le n\), все \(a_i\) попарно различны)  — последовательность вершин, которые должна пройти первая фигура.

Вторая строка содержит целое число \(m_2\) (\(1 \le m_2 \le n\)) и \(m_2\) целых чисел \(b_1, b_2, \ldots, b_{m_2}\) (\(1 \le b_i \le n\), все \(b_i\) попарно различны)  — последовательность вершин, которые должна пройти вторая фигура.

Выходные данные

Выведите одно целое число  — минимальное количество шагов, которые необходимо сделать.

Примечание

В первом примере, вот одна возможная последовательность шагов длиной \(6\).

  • Вторая фигура перемещается по маршруту \(1 \to 2 \to 4 \to 2 \to 1\).

  • Затем, первая фигура перемещается по маршруту \(1 \to 3 \to 1\).

Во втором примере, вот одна возможная последовательность шагов длиной \(8\):

  • Первая фигура перемещается по маршруту \(1 \to 2 \to 3\).

  • Затем, вторая фигура перемещается по маршруту \(1 \to 2\).

  • Затем, первая фигура перемещается по маршруту \(3 \to 4 \to 3 \to 2 \to 1\).

  • Затем, вторая фигура перемещается по маршруту \(2 \to 1\).

G. Покрытие отрезками

Деревья дп Комбинаторика Конструктив Перебор Структуры данных *3200

ChthollyNotaSeniorious дает DataStructures числовую ось с \(m\) различными отрезками на ней. Пусть \(f(l,r)\)  — количество способов выбрать четное число отрезков так, чтобы их объединение было равно \([l,r]\), а \(g(l,r)\)  — количество способов выбрать нечетное число отрезков так, чтобы их объединение было равно \([l,r]\).

ChthollyNotaSeniorious задал DataStructures \(q\) вопросов. В каждом вопросе ChthollyNotaSeniorious дает DataStructures два числа \(l, r\), и хочет, чтобы вы помогли ему найти значение \(f(l,r)-g(l,r)\) по модулю \(998\,244\,353\), чтобы он не подвел ее.

Входные данные

Первая строка ввода содержит два целых числа \(m\) (\(1 \leq m \leq 2 \cdot 10^5\)) и \(q\) (\(1 \leq q \leq 2 \cdot 10^5\))  — количество отрезков и запросов, соответственно.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \leq x_i < y_i \leq 10^9\)), обозначающие отрезок \([x_i, y_i]\).

Гарантируется, что все отрезки попарно различны. Более формально, не существует двух чисел \(i, j\) при \(1 \le i < j \le m\) таких, что \(x_i = x_j\) и \(y_i = y_j\).

\(i\)-я из следующих \(q\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i < r_i \leq 10^9\)), описывающие запрос.

Выходные данные

Для каждого запроса выведите одно целое число  — \(f(l_i,r_i)-g(l_i,r_i)\) по модулю \(998\,244\,353\).

Примечание

В первом запросе мы должны найти \(f(1, 4) - g(1, 4)\). Единственное подмножество отрезков с объединением \([1, 4]\) это \(\{[1, 3], [2, 4]\}\), поэтому \(f(1, 4) = 1, g(1, 4) = 0\).

Во втором запросе нам нужно найти \(f(1, 5) - g(1, 5)\). Единственными подмножествами отрезков с объединением \([1, 5]\) являются \(\{[1, 3], [2, 4], [3, 5]\}\) и \(\{[1, 3], [3, 5]\}\), поэтому \(f(1, 5) = 1, g(1, 5) = 1\).

F. Лаборатория на Плутоне

дп жадные алгоритмы Конструктив математика *2500

Как известно, марсианские ученые активно занимаются космическими исследованиями. Одно из самых приоритетных направлений — Плутон. Чтобы изучить эту планету более детально, было решено построить на Плутоне лабораторию.

Известно, что лаборатория будет построена из \(n\) квадратных блоков одинакового размера. Для удобства будем считать, что поверхность Плутона — плоскость, разбитая вертикальными и горизонтальными линиями на единичные квадраты. Но тогда каждый квадрат либо занят блоком лаборатории, либо нет, причем занято всего \(n\) квадратов.

Поскольку каждый блок квадратный, то у него есть четыре стены. Если стена примыкает к другому блоку, то она считается внутренней, иначе — внешней.

Плутон славится своими крайне холодными температурами, поэтому внешние стены лаборатории необходимо утеплить. На одну внешнюю стену потребуется одна единица утеплителя. Таким образом, чем больше суммарная длина внешних стен лаборатории (т. е. ее периметр), тем больше утеплителя потребуется.

Рассмотрим план лаборатории на рисунке ниже. На нем видно, что лаборатория состоит из \(n = 33\) блоков, а суммарно у всех блоков \(24\) внешние стены, т. е. потребуется \(24\) единицы утеплителя.

Следует строить лабораторию оптимальным образом, т. е. минимизировать количество утеплителя. С другой стороны, оптимальных вариантов может быть много, поэтому ученых может заинтересовать количество способов построить лабораторию, используя минимальное количество утеплителя, по модулю простого числа \(m\).

Два способа считаются одинаковыми, если они совпадают при наложении друг на друга без поворотов. Таким образом, если повернуть план лаборатории на \(90^{\circ}\), то такой новый план может считаться отдельным способом.

Чтобы помочь ученым в освоении Плутона, вам надо написать программу, которая решает эти непростые задачи.

Входные данные

В первой строке входных данных находится два целых числа \(t\) и \(u\) (\(1 \le t \le 2\cdot 10^5\), \(1 \le u \le 2\)) — количество тестовых примеров и тип задания. Если \(u=1\), то необходимо найти любой способ построить лабораторию оптимальным способом, а если \(u=2\), то необходимо вычислить количество способов это сделать.

Если \(u=2\), то в следующей строке входных данных находится простое целое число \(m\) (\(10^8 \le m \le 10^9 + 9\)), по модулю которого необходимо вычислять количество способов.

В каждой из следующих \(t\) строк входных данных находится описание тестового примера, состоящее из одного целого числа \(n\) (\(1 \le n \le 4\cdot 10^5\)) — количество блоков, из которых должна состоять лаборатория.

Гарантируется, что если \(u=1\), то сумма \(n\) по всем тестовым примерам не превосходит \(8\cdot10^5\).

Выходные данные

Для каждого тестового примера необходимо вывести ответы в формате ниже, разделяя их переводом строки. Формат выходных данных при этом зависит от \(u\) во входных данных.

Если \(u=1\), то необходимо в первой строке вывести через пробел два целых числа \(h\) и \(w\) — высота и ширина участка, на котором должна быть построена лаборатория. Далее, в каждой из следующих \(h\) строк необходимо вывести строки \(s_i\), состоящие из \(w\) символов «#» и «.» каждая. Если \(j\)-й символ строки \(s_i\) равен «#», то тогда на соответствующем квадрате должен располагаться блок лаборатории, иначе он считается пустым. Таким образом, мы получаем матрицу из символов. Должно также выполняться условие, что в первой и последней строках матрицы, а также в первом и последнем столбцах, должен быть хотя бы один символ «#», иначе можно было бы вывести такой же план лаборатории, но с меньшими \(h\) и \(w\). Если вариантов построить оптимальную лабораторию несколько, выведите любой из них.

Если \(u=2\), то необходимо вывести через пробел два целых числа \(p\) и \(c\) — количество внешних стен в оптимальной лаборатории, а также остаток от деления количества способов на \(m\).

Примечание

Рассмотрим второй пример.

При \(n=1\) единственный способ построить лабораторию — разместить единственный блок. При этом периметр будет равен четырем.

При \(n=2\) необходимо разместить два блока рядом. Это можно сделать как по вертикали, так и по горизонтали, поэтому есть два способа. Нетрудно убедиться, что в данном случае у лаборатории шесть внешних стен.

При \(n=7\) все \(22\) оптимальных плана показаны на рисунке ниже:

B. Vittorio Plays with LEGO Bricks

геометрия дп *2200

Vittorio is playing with his new LEGO Duplo bricks. All the bricks have the shape of a square cuboid with a \(2 \times 2\) square base and a height of \(1\). They can be arranged in the 3D space to build structures, provided that the following rules are met:

  1. No two bricks can intersect, but they can touch on their faces.
  2. The corners of every brick must have integer coordinates (so bricks are axis-aligned) and the \(z\) coordinates of all corners must be non-negative.
  3. The square bases of every brick must be parallel to the ground (i.e. the plane \(z=0\)).
  4. The lower base of any brick that is not touching the ground must touch the upper base of some other brick in a region of positive area (when this happens, the two bricks stay attached to each other thanks to small studs).

For example, this is a valid structure:

Vittorio wants to build a structure that includes purple bricks in the following \(n\) positions: \((x_1, 0, h)\), \((x_2, 0, h)\), \(\dots\), \((x_n, 0, h)\) — these are the coordinates of the centers of their lower bases; note that all of these bricks have \(y\) coordinate equal to \(0\) and \(z\) coordinate equal to \(h\). Vittorio will use additional bricks of other colors to support the purple bricks. He is willing to place bricks only in positions where the center of the lower base has \(y\) coordinate equal to \(0\). What is the minimum number of additional bricks needed?

It can be shown that a valid construction always exists.

Input

The first line contains two integers \(n\) and \(h\) (\(1 \le n \le 300\), \(0 \le h \le 10^9\)) — the number of purple bricks and their common \(z\) coordinate.

The second line contains \(n\) integers \(x_1, \, x_2, \, \dots, \, x_n\) (\(1 \le x_i \le 10^9\), \(x_i + 1 < x_{i+1}\)) — the \(x\) coordinates of the purple bricks (centers of the bases), given in increasing order.

Output

Print the minimum number of additional bricks needed.

Note

In the first sample, all the purple bricks lie on the ground, so no additional bricks are needed.

In the second sample, Vittorio will have to place supporting bricks under the purple bricks, and he can use a single brick to support both the third and the fourth purple bricks. For example, he can place additional bricks at positions \((3, 0, 0)\), \((7, 0, 0)\) and \((12, 0, 0)\). It can be shown that it is impossible to build a valid construction using less than \(3\) additional bricks.

In the fourth sample, a possible structure that minimizes the number of additional bricks is shown in the problem description.

E. Crossing the Railways

дп Структуры данных *3500

Isona is in a train station. This station has two platforms, and between them there are \(m\) parallel railways that can be viewed as infinite straight lines. Each railway is identified with an integer from \(1\) to \(m\), railway \(1\) being the closest to the first platform and railway \(m\) being the farthest. There is a \(1\) meter distance between consecutive railways, as well as between each platform and its closest railway.

Isona is standing on the inner border of the first platform, when she realizes that she forgot to validate her ticket! There is a validating machine on the second platform, exactly opposite her current position (thus, the distance between Isona and the validating machine is \(m + 1\) meters). There are only \(s\) seconds left to validate the ticket and the bridge designated to cross the railways is too far from the validating machine. Therefore, Isona (who is very brave and a little bit careless) will cross the railways running in a straight line perpendicular to the railways themselves. Isona can only run forward (not backward) and she can stay still. When she runs at maximum speed, she needs \(v\) seconds to traverse \(1\) meter. She can run at any speed less than or equal to her maximum speed.

There is only one problem: \(n\) trains are programmed to transit through the railways. The \(i\)-th train will use the railway \(r_i\). It will start crossing the straight line between Isona and the validating machine \(a_i\) seconds from now and it will end \(b_i\) seconds from now. Of course, Isona cannot cross a railway when a train is passing. Formally, for every \(i = 1, \, 2, \, \dots, \, n\), Isona is not allowed to be on railway \(r_i\) at any time \(t\) with \(a_i < t < b_i\) (but she is allowed to cross at times \(a_i\) or \(b_i\)).

The following picture summarizes the situation. In the picture there are \(m = 4\) railways and two trains are visible; the train going through railway \(3\) is currently crossing the line between Isona and the validating machine.

Isona is a really good runner, but she gets tired every time she has to change her running speed. What is the minimum number of speed changes she has to perform to get to the validating machine on the other platform within \(s\) seconds from now? Note that at the beginning Isona is not running. She can start to run anytime. The instant she starts to run (i.e. her speed becomes positive) is not counted as a speed change.

Input

The first line of the input contains four integers \(n\), \(m\), \(s\), \(v\) (\(1 \leq n \leq 500\), \(1 \leq m \leq 10\), \(1 \leq s, v \leq 10^9\)) — the number of trains, the number of railways, the maximum time in seconds Isona can spend crossing the railways, and the number of seconds she needs to traverse \(1\) meter at maximum speed.

Each of the next \(n\) lines contains three integers \(a_i\), \(b_i\), \(r_i\) (\(1 \leq a_i < b_i \leq 10^9\), \(1 \leq r_i \leq m\)) — the start and end times of the \(i\)-th train crossing the straight line between Isona and the validating machine, and the railway it will be using.

It is guaranteed that, for any two trains \(i\) and \(j\) that go through the same railway (i.e. \(r_i = r_j\)), there is at least \(1\) second between them (that is, either \(a_j \ge b_i + 1\) or \(a_i \ge b_j + 1\)).

Output

Print the minimum number of speed changes Isona has to perform to get to the validating machine in time. If this is impossible, print \(-1\).

Note

In the first sample, if Isona starts running at time \(t=0\) at maximum speed (\(1\) m/s), she will cross each railway just when a train is about to traverse it, and she will arrive at the other platform at time \(4 = s - 1\) without changing speed.

In the second sample, a possible solution with \(2\) speed changes is the following: for the first \(2\) seconds Isona goes at maximum speed (\(0.5\) m/s), then she slows down to \(0.25\) m/s for \(4\) seconds until she reaches the second railway. At that point, she goes at maximum speed again until she reaches the other platform.

In the third sample, Isona can wait \(2\) seconds before starting running. She then runs for \(5\) seconds at maximum speed (\(0.5\) m/s). After that, she waits for \(1\) second not running (or running at \(0\) m/s), and finally she runs again at maximum speed for the last \(5\) seconds. Overall, she changes speed twice.

K. Uniform Chemistry

дп математика *3200

In a parallel universe there are \(n\) chemical elements, numbered from \(1\) to \(n\). The element number \(n\) has not been discovered so far, and its discovery would be a pinnacle of research and would bring the person who does it eternal fame and the so-called SWERC prize.

There are \(m\) independent researchers, numbered from \(1\) to \(m\), that are trying to discover it. Currently, the \(i\)-th researcher has a sample of the element \(s_i\). Every year, each researcher independently does one fusion experiment. In a fusion experiment, if the researcher currently has a sample of element \(a\), they produce a sample of an element \(b\) that is chosen uniformly at random between \(a+1\) and \(n\), and they lose the sample of element \(a\). The elements discovered by different researchers or in different years are completely independent.

The first researcher to discover element \(n\) will get the SWERC prize. If several researchers discover the element in the same year, they all get the prize. For each \(i = 1, \, 2, \, \dots, \, m\), you need to compute the probability that the \(i\)-th researcher wins the prize.

Input

The first line contains two integers \(n\) and \(m\) (\(2 \le n \le 10^{18}\), \(1 \le m \le 100\)) — the number of elements and the number of researchers.

The second line contains \(m\) integers \(s_1, \, s_2, \, \dots, \, s_m\) (\(1 \le s_i < n\)) — the elements that the researchers currently have.

Output

Print \(m\) floating-point numbers. The \(i\)-th number should be the probability that the \(i\)-th researcher wins the SWERC prize. Your answer is accepted if each number differs from the correct number by at most \(10^{-8}\).

Note

In the first sample, all researchers will discover element \(2\) in the first year and win the SWERC prize.

In the second sample, the last researcher will definitely discover element \(3\) in the first year and win the SWERC prize. The first two researchers have a \(50\%\) chance of discovering element \(2\) and a \(50\%\) chance of discovering element \(3\), and only element \(3\) will bring them the prize.

In the third sample, each researcher has an independent \(50\%\) chance of discovering element \(3\) in the first year, in which case they definitely win the SWERC prize. Additionally, if they all discover element \(2\) in the first year, which is a \(12.5\%\) chance, then they will all discover element \(3\) in the second year and all win the prize.

M. Parmigiana With Seafood

Бинарный поиск Деревья дп жадные алгоритмы *3000

The "Parmigiana di melanzane" is a typical Italian dish. Alessandro and Bianca have very different tastes when it comes to it: Alessandro loves to eat Parmigiana with seafood, but Bianca thinks it is an atrocity! To decide which ingredients to include in the dish they prepare, they play the following game.

There are \(n\) possible ingredients, labeled from \(1\) to \(n\). The higher the label, the closer the ingredient is to being seafood. The ingredients are connected by \(n - 1\) edges, in such a way as to form a tree. Alessandro and Bianca take turns, with Alessandro going first. They alternately choose a terminal ingredient \(x\), that is an ingredient currently connected to at most one other ingredient, and remove it from the tree. If the terminal ingredient \(x\) was chosen by Alessandro, it goes in the recipe; if it was chosen by Bianca, it is discarded.

The taste of the Parmigiana is measured as the maximum label of an ingredient in the recipe. Alessandro wants to maximize the taste, while Bianca wants to minimize the taste. If both play optimally, what is the taste of the Parmigiana?

Input

The first line contains an integer \(n\) (\(2\le n \le 100\,000\)) — the number of ingredients.

Each of the following \(n-1\) lines contain two integers \(u_i\) and \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)) — the ingredients that the \(i\)-th edge connects.

It is guaranteed that the edges form a tree (i.e., any pair of ingredients is connected by the edges, possibly indirectly).

Output

Print the value of the taste if both Alessandro and Bianca play optimally.

Note

In the first sample, Alessandro can choose terminal ingredient \(4\) in the first turn. This ingredient is added to the recipe. Since \(4\) is the maximum label of an ingredient, the taste is \(4\) regardless of the choices that follow.

In the second sample, Bianca can make sure that neither ingredient \(4\) nor \(5\) are included in the recipe, in which case Alessandro can include \(3\). Thus, the taste is \(3\).

D. Цена дерева

битмаски Деревья дп Комбинаторика математика поиск в глубину и подобное Теория вероятностей *1900

Дано дерево на \(n\) вершинах, корень дерева — вершина \(1\). В каждой вершине написано значение, изначально (в момент \(t=0\)) равное \(0\) или \(1\).

В каждый целочисленный момент времени \(t>0\) значение вершины становится равно побитовому исключающему ИЛИ значений ее детей в момент времени \(t - 1\); значения листьев становятся равными \(0\), поскольку у них детей нет.

Через \(S(t)\) обозначим сумму значений всех вершин в момент \(t\).

Через \(F(A)\) обозначим сумму \(S(t)\) по всем значениям \(t\) в диапазоне \(0 \le t \le 10^{100}\), где \(A\) — некоторая изначальная расстановка \(0\) и \(1\) в дереве.

Ваша задача — найти сумму \(F(A)\) по всем \(2^n\) изначальным расстановкам \(0\) и \(1\) в дереве. Выведите ответ по модулю \(10^9+7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Следующие \(n-1\) строк каждого набора входных данных содержат по два числа — \(u\), \(v\), задающие ребро между \(u\) и \(v\) (\(1 \le u, v \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите сумму по модулю \(10^9+7\).

Примечание

Найдём \(F(A)\) для расстановки \(A = [0,1,0,0,1,1]\) (\(A[i]\) означает значение вершины \(i\)). Состояние дерева в момент времени \(t = 0\) изображено ниже. В каждой вершине записаны два числа: ее номер, затем ее значение. \(S(0)\) в такой конфигурации равно \(3\).

В момент \(t = 1\) конфигурация меняется на \([1,0,0,0,0,0]\). Дерево будет выглядеть так, как показано на рисунке ниже. Имеем \(S(1) = 1\).

В момент \(t = 2\) конфигурация меняется на \([0,0,0,0,0,0]\). Дерево будет выглядеть так, как показано на рисунке ниже. Имеем \(S(2) = 0\).

Для всех \(t>2\) граф остаётся неизменным, то есть \(S(t)=0\) для всех \(t > 2\). Поэтому изначальная расстановка \(A = [0,1,0,0,1,1]\) имеет значение \(F(A) = 3 + 1 = 4\).

Выполнив аналогичный процесс для всех \(2^{6}\) возможных стартовых расстановок, получим ответ \(\textbf{288}\).

D. Гибкая строка возвращается

дп Комбинаторика математика Теория вероятностей *2100

Вам даны две бинарные строки \(a\) и \(b\) длины \(n\). На каждом шаге строка \(a\) изменяется следующим образом.

  • Индекс \(i\) (\(1 \leq i \leq n\)) выбирается случайным образом. Символ \(a_i\) будет изменится на противоположный. То есть если символ \(a_i\) равен \(0\), то он становится \(1\), а если \(a_i\) равен \(1\), то он становится \(0\).

Чему равняется математическое ожидание количества шагов, необходимого для того, чтобы обе строки стали равными в первый раз?

Бинарная строка — это строка, в которой каждый символ равен либо \(\tt{0}\), либо \(\tt{1}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — длина строк.

Вторая строка каждого набора содержит бинарную строку \(a\) длиной \(n\).

Третья строка каждого набора содержит бинарную строку \(b\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите математическое ожидание количества ходов по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом наборе индекс \(1\) выбирается случайным образом и \(a_1\) изменяется на противоположное значение. После этого строки \(a\) и \(b\) равны. Ожидаемое количество ходов — \(1\).

Во втором наборе строки \(a\) и \(b\) уже равны. Таким образом, ожидаемое количество ходов равно \(0\).

Ожидаемое количество ходов для третьего и четвертого наборов составляет \(\frac{56}{3}\) и \(\frac{125}{3}\) соответственно.

F. Максимизируем корень

графы Деревья дп математика поиск в глубину и подобное теория чисел *2600

Вам дано корневое дерево, состоящее из \(n\) вершин, пронумерованных от \(1\) до \(n\). Вершина \(1\) является корнем дерева. Каждая вершина имеет целочисленное значение. Значение \(i\)-й вершины равно \(a_i\). Следующую операцию можно выполнить не более \(k\) раз:

  • Выберите вершину \(v\), которая не была выбрана ранее, и целое число \(x\) такое, что \(x\) является общим делителем значений всех вершин поддерева \(v\). Умножьте значение каждой вершины поддерева \(v\) на \(x\).

Какое максимально возможное значение корневой вершины \(1\) можно получить после не более чем \(k\) операций? Формально, вы должны максимизировать значение \(a_1\).

Дерево — это связный неориентированный граф без циклов. Корневое дерево — это дерево с выбранной вершиной, которая называется корнем. Поддерево вершины \(u\) — это множество всех вершин \(y\) таких, что простой путь от \(y\) до корня проходит через \(u\). Обратите внимание, что вершина \(u\) входит в поддерево вершины \(u\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 50\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(2 \leq n \leq 10^5\), \(0 \leq k \leq n\)) — количество вершин в дереве и количество операций.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 1000\)), где \(a_i\) обозначает значение в вершине \(i\).

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\)), обозначающих ребро дерева между вершинами \(u_i\) и \(v_i\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите максимальное значение корня после выполнения не более чем \(k\) операций.

Примечание

Оба примера имеют одно и то же дерево:

Для первого набора вы можете выполнить две операции следующим образом:

  • Выберите поддерево с вершиной \(4\) и \(x = 2\).
    После этой операции значения вершин станут \(\{24, 12, 24, 12, 12\}.\)
  • Выберите поддерево с вершиной \(1\) и \(x = 12\).
    После этой операции значения вершин станут \(\{288, 144, 288, 144, 144\}.\)
Значение корня равно \(288\) и является максимальным.

Для второго тестового примера можно выполнить три операции следующим образом:

  • Выберите поддерево с вершиной \(4\) и \(x = 2\).
    После этой операции значения вершин станут \(\{24, 12, 24, 12, 12\}.\)
  • Выберите поддерево с вершиной \(2\) и \(x = 4\).
    После этой операции значения вершин станут \(\{24, 48, 24, 48, 48\}.\)
  • Выберите поддерево с вершиной \(1\) и \(x = 24\).
    После этой операции значения вершин станут \(\{576, 1152, 576, 1152, 1152\}.\)
Значение корня равно \(576\) и является максимальным.

D. Борис и его восхитительная прическа

дп жадные алгоритмы Конструктив снм сортировки Структуры данных *1700

Борис думает, что шахматы это скучная игра, поэтому он ушел со своего турнира пораньше. Он пошел в парикмахерскую, ведь его прическа была немного неаккуратная.

В настоящий момент его волосы можно описать массивом \(a_1,a_2,\ldots, a_n\), где \(a_i\) — высота волоса на позиции \(i\). Его желаемая прическа описывается массивом \(b_1,b_2,\ldots, b_n\) аналогично.

У парикмахера есть \(m\) бритв. Каждая бритва имеет некоторый размер и может быть использована не более одного раза. За одну операцию парикмахер может выбрать одну бритву и обрезать с помощью нее отрезок волос Бориса. Формально, операция выглядит следующим образом:

  • Выбрать ранее неиспользованную бритву, пусть ее размер равен \(x\);
  • Выбрать отрезок \([l,r]\) (\(1\leq l \leq r \leq n\));
  • Присвоить \(a_i := \min (a_i,x)\) для всех \(l\leq i \leq r\).

Обратите внимание, что некоторые бритвы могут иметь одинаковый размер. Парикмахер может выбирать размер \(x\) максимум столько раз, сколько у него есть бритв размера \(x\).

Парикмахер может выполнить сколько угодно операций, не используя одну бритву дважды. Необходимо, чтобы в конце выполнялось \(a_i = b_i\) для всех \(1 \leq i \leq n\). Он не обязан использовать все бритвы.

Определите, может ли парикмахер сделать необходимую Борису стрижку.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 20\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит положительное целое число \(n\) (\(3\leq n\leq 2\cdot 10^5\)) — длину массивов \(a\) и \(b\).

Вторая строка содержит \(n\) положительных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — описание текущих волос Бориса.

Третья строка содержит \(n\) положительных целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 10^9\)) — описание необходимой стрижки.

Четвертая строка содержит положительное целое число \(m\) (\(1 \leq m \leq 2\cdot 10^5\)) — количество бритв.

Пятая строка содержит \(m\) положительных целых чисел \(x_1,x_2, \ldots, x_m\) (\(1 \leq x_i \leq 10^9\)) — размеры бритв.

Гарантируется, что сумма значений \(n\) и сумма значений \(m\) по всем наборам входных данных не превосходят \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если парикмахер может выполнить необходимую стрижку, и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере волосы Бориса изначально равны \([3,3,3]\). Опишем последовательность из \(2\) операций, которые может выполнить парикмахер:

  • Использовать бритву размера \(1\) на отрезке \([2,2]\); волосы становятся \([3,1,3]\).
  • Использовать бритву размера \(2\) на отрезке \([1,3]\); волосы становятся \([2,1,2]\), что и требуется.

В третьем примере можно ничего не делать, так как волосы уже в желаемом состоянии.

В четвертом примере нельзя обрезать волосы так, чтобы их длина увеличилась, и \([1,1,1]\) превратился в \([1,1,2]\).

F. Ксолдовские камни

битмаски Деревья дп Конструктив *2500

Миша был забанен в шахматах за использование компьютера. Он отправился на пенсию и решил стать ксолдуном.

Однажды, гуляя в парке, Миша наткнулся на корневое дерево с вершинами, пронумерованными от \(1\) до \(n\). Корнем дерева является вершина с номером \(1\).

Для всех \(1\le i\le n\) в вершине \(i\) лежат \(a_i\) камней. Миша недавно выучил новое заклинание на уроке ксолдовства и хочет его опробовать. Заклинание состоит из нескольких шагов:

  • Выбрать некоторую вершину \(i\) (\(1 \leq i \leq n\)).
  • Вычислить побитовое исключающее ИЛИ \(x\) всех \(a_j\) таких, что вершина \(j\) лежит в поддереве вершины \(i\) (\(i\) принадлежит своему поддереву).
  • В значения \(a_j\) для всех вершин \(j\) в поддереве \(i\) присвоить \(x\).

Миша может выполнить не более \(2n\) заклинаний и хочет, чтобы в дереве не осталось камней. Более формально, он хочет, чтобы выполнялось \(a_i=0\) для всех \(1\leq i \leq n\). Можете помочь ему выполнить заклинания?

Деревом из \(n\) вершин называется связный ациклический граф из \(n-1\) ребра. Поддеревом вершины \(i\) является множество всех вершин \(j\) таких, что \(i\) лежит на простом пути от \(1\) (корня) к \(j\). В этой задаче \(i\) принадлежит собственному поддереву.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 2\cdot 10^5\)) — размер дерева.

Вторая строка содержит массив целых чисел \(a_1,a_2,\ldots, a_n\) (\(0 \leq a_i \leq 31\)), описывающий изначальное количество камней в каждой вершине дерева.

Третья строка содержит массив целых чисел \(p_2,p_3,\ldots, p_n\) (\(1 \leq p_i \leq i-1\)), где \(p_i\) обозначает, что вершины \(p_i\) и \(i\) соединены ребром.

Выходные данные

Если нет подходящей последовательности заклинаний, выведите \(-1\).

Иначе в первой строке выведите одно целое число \(q\) (\(0 \leq q \leq 2n\)) — количество заклинаний в вашем решении.

Во второй строке выведите последовательность целых чисел \(v_1,v_2,\ldots,v_q\) (\(1 \leq v_i \leq n\)): \(i\)-е заклинание будет выполнено к поддереву вершины \(v_i\). Обратите внимание, что здесь важен порядок.

Если существует несколько решений, выведите любое из них. Вам не нужно минимизировать число операций.

Примечание

Рисунок ниже объясняет третий пример. Показаны только первые \(4\) заклинания, так как последние \(2\) ничего не меняют. Первый рисунок показывает начальное дерево, число камней в каждой вершине написано над вершиной зеленым. Изменения от заклинаний показаны красным.

F. Три стула

битмаски дп Комбинаторика Перебор сортировки Структуры данных теория чисел *2300

Как-то раз Кира нашел \(n\) друзей из Морио и решил собрать их за одним столом, чтобы провести мирный разговор. Рост друга \(i\) равен \(a_i\). Так получилось, что рост каждого из друзей уникален.

Но вот незадача, в доме Киры всего \(3\) стула, и всех друзей усадить явно не удастся! Поэтому Кира должен позвать только \(3\) друзей.

Но все не так просто! Если рост самого низкого и самого высокого из приглашенных друзей не взаимно просты, то друзья будут подшучивать друг над другом, что сильно разозлит Киру.

Кира заинтересовался, сколько есть способов позвать \(3\) друзей так, чтобы они не стали подшучивать друг над другом? Два способа считаются различными, если существует такой друг, что он приглашен в одном случае, и не приглашен в другом.

Формально, если Кира позовет друзей с номерами \(i\), \(j\) и \(k\), то должно выполняться \(\gcd(\min(a_i, a_j, a_k), \max(a_i, a_j, a_k)) = 1\), где \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Кира не очень силен в информатике, поэтому просит вас посчитать количество различных способов позвать друзей.

Входные данные

В первой строке записано число \(n\) (\(3 \le n \le 3\cdot10^5\)) — количество друзей Киры.

В следующей строке записано \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 3\cdot10^5\)) — рост друзей Киры.

Выходные данные

В единственной строке выведите количество способов позвать друзей.

Примечание

В первом примере подходит одна способ — позвать друзей \(1\), \(2\) и \(3\). Здесь \(1 < 2 < 3\), и числа \(1\) и \(3\) взаимно просты.

F. Вставка скобок

Деревья дп Комбинаторика математика *2700

Вика любит играть со скобочными последовательностями. Сегодня она хочет создать новую скобочную последовательность по следующему алгоритму. Исходно скобочная последовательность Вики — пустая строка, а дальше \(n\) раз она повторит следующие действия:

  • Выберет место в текущей скобочной последовательности, куда можно вставлять скобки, случайно равновероятно среди всех возможных позиций. Если длина текущей последовательности равна \(k\), то таких позиций \(k+1\): перед первой скобкой, между первой и второй скобками, \(\ldots\), после \(k\)-й скобки. В частности, в пустой скобочной последовательности одно такое место.
  • Выберет строку «()» с вероятностью \(p\) или строку «)(» с вероятностью \(1 - p\) и вставит её в выбранное место. Длина скобочной последовательности увеличится на \(2\).

Скобочная последовательность называется правильной, если из неё возможно получить корректное арифметическое выражение путём вставки символов «+» и «1». Например, последовательности «(())()», «()» и «(()(()))» являются правильными, а «)(», «(()» и «(()))(» — нет.

Вика хочет знать, с какой вероятностью ее итоговая скобочная последовательность будет правильной. Помогите ей и найдите эту вероятность по модулю \(998\,244\,353\) (см. формат вывода).

Входные данные

В единственной строке задано два целых числа \(n\) и \(q\) (\(1 \le n \le 500\); \(0 \le q \le 10^4\)). Здесь \(n\) равно числу операций вставки скобок, а вероятность выбора Викой строки «()» на каждом шаге алгоритма равна \(p = q \cdot 10^{-4}\).

Выходные данные

Выведите вероятность того, что скобочная последовательность Вики окажется правильной, по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом примере с вероятностью \(p = \frac{3}{4}\) получится правильная скобочная последовательность (), а с вероятностью \(1 - p = \frac{1}{4}\) получится неправильная скобочная последовательность )(. Искомая вероятность равна \(\frac{3}{4}\), а \(249\,561\,089 \cdot 4 \equiv 3 \pmod{998\,244\,353}\).

Во втором примере искомая вероятность равна \(\frac{11}{25}\).

D. Различные массивы

дп Перебор реализация *2000

Вам дан массив \(a\), состоящий из \(n\) целых чисел.

Вы должны выполнить последовательность из \(n-2\) операций над этим массивом:

  • во время первой операции вы либо прибавляете \(a_2\) к \(a_1\) и вычитаете \(a_2\) из \(a_3\), либо прибавляете \(a_2\) к \(a_3\) и вычитаете \(a_2\) из \(a_1\);
  • во время второй операции вы либо прибавляете \(a_3\) к \(a_2\) и вычитаете \(a_3\) из \(a_4\), либо прибавляете \(a_3\) к \(a_4\) и вычитаете \(a_3\) из \(a_2\);
  • ...
  • во время последней операции вы либо прибавляете \(a_{n-1}\) к \(a_{n-2}\) и вычитаете \(a_{n-1}\) из \(a_n\), либо прибавляете \(a_{n-1}\) к \(a_n\) и вычитаете \(a_{n-1}\) из \(a_{n-2}\).

То есть во время \(i\)-й операции вы прибавляете элемент \(a_{i+1}\) к одному из его соседей и вычитаете его из другого соседа.

Например, если у вас есть массив \([1, 2, 3, 4, 5]\), один из способов провести над ним последовательность операций — следующий:

  • вычесть \(2\) из \(a_3\) и прибавить к \(a_1\), массив станет \([3, 2, 1, 4, 5]\);
  • вычесть \(1\) из \(a_2\) и прибавить к \(a_4\), массив станет \([3, 1, 1, 5, 5]\);
  • вычесть \(5\) из \(a_3\) и прибавить к \(a_5\), массив станет \([3, 1, -4, 5, 10]\).

В итоге получится массив \([3, 1, -4, 5, 10]\).

Назовем массив достижимым, если его можно получить в результате применения всей последовательности операций к массиву \(a\). Посчитайте количество достижимых массивов, а затем выведите остаток от деления этого количества на \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(3 \le n \le 300\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 300\)).

Выходные данные

Выведите одно целое число — количество достижимых массивов, взятое по модулю \(998244353\).

D. Деревянная ложка

дп Комбинаторика *2400

\(2^n\) человек, пронумерованных различными целыми числами от \(1\) до \(2^n\), играют в турнире по олимпийской системе. Сетка турнира представляет собой полное бинарное дерево высоты \(n\) с \(2^n\) листьями.

Когда два игрока сходятся в матче, всегда выигрывает тот игрок, который имеет меньший номер. Победителем турнира становится игрок, выигравший все \(n\) своих матчей.

Виртуальный утешительный приз «Деревянная ложка» вручается тому игроку, который удовлетворяет следующим \(n\) условиям:

  • он проиграл первый же свой матч;
  • игрок, обыгравший его, проиграл свой следующий, второй матч;
  • игрок, обыгравший этого игрока, проиграл свой третий матч;
  • \(\ldots\);
  • игрок, обыгравший игрока из предыдущего пункта, проиграл финальный матч турнира.

Можно показать, что этим условиям всегда удовлетворяет ровно один игрок.

Рассмотрим все возможные \((2^n)!\) расстановок игроков в сетке турнира. Для каждого игрока найдите, в скольких из этих расстановок он получит «Деревянную ложку», и выведите эти числа по модулю \(998\,244\,353\).

Входные данные

В единственной строке задано одно целое \(n\) (\(1 \le n \le 20\)) — размер турнира.

В задаче \(20\) тестов: в первом тесте \(n = 1\), во втором тесте \(n = 2\), \(\ldots\), в \(20\)-м тесте \(n = 20\).

Выходные данные

Выведите \(2^n\) целых чисел — число расстановок, при которых «Деревянную ложку» получает игрок номер \(1, 2, \ldots, 2^n\), по модулю \(998\,244\,353\).

Примечание

В первом примере «Деревянную ложку» всегда получает игрок \(2\).

Во втором примере в \(8\) расстановках игроки \(1\) и \(4\) встречаются друг с другом в первом матче, и тогда «Деревянную ложку» получает игрок номер \(3\). В остальных \(16\) расстановках приз уходит игроку номер \(4\).

E. Бесконечная игра

дп игры Комбинаторика Перебор Теория вероятностей *3100

Алиса и Боб играют в бесконечную игру, состоящую из сетов. Каждый сет состоит из раундов. В каждом раунде выигрывает один из игроков. В сете выигрывает тот, кто первым выиграет два раунда. Соответственно, сет всегда заканчивается со счётом \(2:0\) или \(2:1\) по раундам в пользу одного из игроков.

Сценарием игры назовём конечную строку \(s\) из символов «a» и «b». Рассмотрим бесконечную строку, образованную повторениями строки \(s\): \(sss \ldots\) Пусть игроки играют раунды в соответствии с этой бесконечной строкой по порядку. Если очередной символ строки \(sss \ldots\) равен «a», то в текущем раунде выигрывает Алиса, если «b» — выигрывает Боб. Как только один из игроков выигрывает два раунда, сет завершается в его пользу, и со следующего раунда начинается новый сет.

Пусть \(a_i\) равно числу выигранных Алисой сетов среди первых \(i\) сетов при игре по данному сценарию. Обозначим через \(r\) предел отношения \(\frac{a_i}{i}\) при \(i \rightarrow \infty\). Если \(r > \frac{1}{2}\), то строку \(s\) назовём выигрышным для Алисы сценарием. Если \(r = \frac{1}{2}\), то строку \(s\) назовём ничейным сценарием. Если \(r < \frac{1}{2}\), то строку \(s\) назовём выигрышным для Боба сценарием.

Вам дана строка \(s\), состоящая из символов «a», «b» и «?». Рассмотрим все способы заменить каждый символ «?» на «a» или «b», чтобы получить строку, состоящую только из символов «a» и «b». Посчитайте, в скольких случаях получится выигрышный для Алисы сценарий, в скольких — ничейный, а в скольких — выигрышный для Боба, и выведите эти три числа по модулю \(998\,244\,353\).

Входные данные

Единственная строка ввода содержит строку \(s\) (\(1 \le |s| \le 200\)), состоящую из символов «a», «b» и «?».

Выходные данные

Выведите три числа: сколько способов замены приведут к выигрышному для Алисы сценарию, сколько — к ничейному, а сколько — к выигрышному для Боба. Все числа нужно вывести по модулю \(998\,244\,353\).

Примечание

В первом примере есть четыре варианта замены:

  • \(s = \mathtt{aa}\): Алиса выигрывает все сеты со счётом \(2:0\) — сценарий выигрышный для Алисы;
  • \(s = \mathtt{ab}\): поочерёдно сначала Алиса, а потом Боб выигрывает сет со счётом \(2:1\) — сценарий ничейный;
  • \(s = \mathtt{ba}\): поочерёдно сначала Боб, а потом Алиса выигрывает сет со счётом \(2:1\) — сценарий ничейный;
  • \(s = \mathtt{bb}\): Боб выигрывает все сеты со счётом \(2:0\) — сценарий выигрышный для Боба.

C. Раскройте скобки

дп жадные алгоритмы математика *1600

У RSJ есть последовательность \(a\) из \(n\) целых чисел \(a_1,a_2, \ldots, a_n\) и целое число \(s\). Для каждого \(a_2,a_3, \ldots, a_{n-1}\) он выбрал пару неотрицательных целых чисел \(x_i\) и \(y_i\) такую, что \(x_i+y_i=a_i\) и \((x_i-s) \cdot (y_i-s) \geq 0\).

Теперь он заинтересовался значением \(\)F = a_1 \cdot x_2+y_2 \cdot x_3+y_3 \cdot x_4 + \ldots + y_{n - 2} \cdot x_{n-1}+y_{n-1} \cdot a_n.\(\)

Помогите ему найти минимально возможное значение \(F\) при оптимальном выборе \(x_i\) и \(y_i\). Можно показать, что всегда существует хотя бы один корректный способ выбрать эти числа.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(s\) (\(3 \le n \le 2 \cdot 10^5\); \(0 \le s \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0 \le a_i \le 2 \cdot 10^5\)).

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное значение \(F\).

Примечание

В первом наборе входных данных \(2\cdot 0+0\cdot 1+0\cdot 3+0\cdot 4 = 0\).

Во втором наборе входных данных \(5\cdot 1+2\cdot 2+2\cdot 2+1\cdot 5 = 18\).

H. Разбалловка Codeforces

Бинарный поиск геометрия дп Структуры данных *3300

Вы участвуете в раунде Codeforces с \(n\) задачами.

На решение каждой задачи вы тратите ровно одну минуту, время на отправку решения можно не учитывать. В каждый момент времени вы можете решать не более одной задачи. Раунд начинается в момент времени \(0\), поэтому свою первую посылку вы можете сделать в момент времени \(t \ge 1\) минут. Когда вы отправляете решение, вы всегда правильно решаете задачу.

Получаемые баллы за \(i\)-ю задачу могут быть описаны тремя целыми числами \(k_i\), \(b_i\) и \(a_i\). Если вы решите эту задачу по прошествии \(t\) минут, вы получите \(\max(b_i - k_i \cdot t,a_i)\) баллов.

Ваша задача — выбрать порядок решения всех этих \(n\) задач, чтобы получить максимальное количество очков. Можете считать, что раунд достаточно длинный, и вы успеете решить все задачи.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество задач.

Далее следуют \(n\) строк, \(i\)-я из которых содержит три целых числа \(k_i\), \(b_i\), \(a_i\) (\(1\le k_i,b_i,a_i\le 10^9\); \(a_i < b_i\)), которые означают, что вы получите \(\max(b_i - k_i \cdot t,a_i)\) баллов, если решите эту \(i\)-ю задачу на \(t\)-й минуте.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую одно целое число — максимальный балл, который вы можете получить.

Примечание

Во втором наборе входных данных баллы всех задач на каждой минуте перечислены ниже.

Время\(1\)\(2\)\(3\)\(4\)\(5\)\(6\)
Задача \(1\)\(7\)\(6\)\(5\)\(\color{red}{4}\)\(3\)\(2\)
Задача \(2\)\(\color{red}{20}\)\(11\)\(4\)\(4\)\(4\)\(4\)
Задача \(3\)\(12\)\(10\)\(\color{red}{8}\)\(6\)\(4\)\(3\)
Задача \(4\)\(9\)\(5\)\(1\)\(1\)\(\color{red}{1}\)\(1\)
Задача \(5\)\(17\)\(\color{red}{15}\)\(13\)\(11\)\(9\)\(7\)
Задача \(6\)\(5\)\(5\)\(5\)\(5\)\(5\)\(\color{red}{5}\)

Красным цветом показан один из оптимальных порядков решения задач, который дает \(53\) балла.

E. Сумма больше нуля

дп поиск в глубину и подобное Структуры данных *2200

Вам дан массив \(a_1, a_2, \ldots, a_n\) из \(n\) целых чисел. Рассмотрим набор отрезков \(S\), удовлетворяющий следующим условиям.

  • Каждый элемент \(S\) должен иметь вид \([x, y]\), где \(x\) и \(y\) — целые числа от \(1\) до \(n\) включительно, и \(x \leq y\).
  • Никакие два отрезка в \(S\) не пересекаются друг с другом. Два отрезка \([a, b]\) и \([c, d]\) пересекаются тогда и только тогда, когда существует такое целое число \(x\), что \(a \leq x \leq b\) и \(c \leq x \leq d\).
  • Для каждого \([x, y]\) в \(S\) выполняется \(a_x+a_{x+1}+ \ldots +a_y \geq 0\).

Длина отрезка \([x, y]\) определяется как \(y-x+1\). \(f(S)\) определяется как сумма длин всех отрезков в \(S\). Формально, \(f(S) = \sum_{[x, y] \in S} (y - x + 1)\). Обратите внимание, что если \(S\) пусто, то \(f(S)\) равно \(0\).

Каково максимальное значение \(f(S)\) среди всех возможных \(S\)?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)).

Во второй строке содержится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)).

Выходные данные

Выведите одно целое число — максимальное \(f(S)\) среди всех возможных \(S\).

Примечание

В первом примере \(S=\{[1, 2], [4, 5]\}\) может являться \(S\), так как \(a_1+a_2=0\) и \(a_4+a_5=1\). \(S=\{[1, 4]\}\) также допустимо.

Поскольку не существует ни одного \(S\), удовлетворяющего условию \(f(S) > 4\), ответ — \(4\).

Во втором примере \(S=\{[1, 9]\}\) — единственное множество, которое удовлетворяет \(f(S)=9\). Поскольку все возможные \(S\) удовлетворяют \(f(S) \leq 9\), ответ — \(9\).

В третьем примере \(S\) может быть только пустым множеством, поэтому ответ — \(0\).

C. Serval и массивы Toxel

дп Комбинаторика математика реализация *1500

Toxel любит массивы. Перед поездкой в Paldea Serval подарил ему массив \(a\). Этот массив состоит из \(n\) попарно различных элементов.

Чтобы получить больше массивов, Toxel выполнил \(m\) операций с исходным массивом. \(i\)-й операцией он изменил \(p_{i}\)-й элемент \((i-1)\)-го массива на \(v_{i}\), в результате чего получился \(i\)-й массив (исходный массив \(a\) имеет номер \(0\)). Во время изменений Toxel гарантировал, что элементы каждого массива по-прежнему попарно различны после каждой операции.

Наконец, Toxel получил \(m+1\) массив и обозначил их как \(A_{0}=a, A_{1},\ldots,A_{m}\). Для каждой пары \((i,j)\) (\(0\le i<j\le m\)), Toxel определил её значение как количество различных элементов в конкатенации \(A_{i}\) и \(A_{j}\). Теперь Toxel задается вопросом, какова сумма значений для всех пар массивов? Пожалуйста, помогите ему вычислить ответ.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1\le t\le10^{4}\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le2\cdot10^{5}\)) — длину массива и количество операций.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_{1},a_{2},\dots,a_{n}\) (\(1\le a_{i}\le n+m\)). Гарантируется, что все \(a_i\) попарно различны.

Каждая из следующих \(m\) строк каждого набора входных данных содержит два целых числа \(p_{i}\) и \(v_{i}\) (\(1\le p_{i}\le n\), \(1\le v_{i}\le n+m\)) — позиция изменяемого элемента и его новое значение. Гарантируется, что элементы каждого массива по-прежнему попарно различны после каждой операции.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(2\cdot10^{5}\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — сумму значений для всех пар массивов.

Примечание

В первом наборе входных данных массив изменяется следующим образом: \([1,2,3]\to[\underline{4},2,3]\to[4,\underline{5},3]\).

Конкатенацией \(0\)-го массива \(1\)-го массива является \(\require{cancel}[1,2,3,4,\cancel{2},\cancel{3}]\). Здесь есть \(4\) различных элемента.

Конкатенацией \(0\)-го массива и \(2\)-го массива является \(\require{cancel}[1,2,3,4,5,\cancel{3}]\). Здесь есть \(5\) различных элементов.

Конкатенацией \(1\)-го массива и \(2\)-го массива является \(\require{cancel}[4,2,3,\cancel{4},5,\cancel{3}]\). Здесь есть \(4\) различных элемента.

Зачёркнутые элементы являются повторяющимися в массиве.

Таким образом, ответ равен \(4+5+4=13\).

Во втором наборе входных данных обратите внимание, что массив может оставаться без изменений после операций.

E. Serval и музыкальная игра

дп математика Перебор реализация теория чисел *2500

Serval любит играть в музыкальные игры. Он столкнулся с проблемой, играя в музыкальные игры, и оставил её решать вам.

Вам даны \(n\) положительных целых чисел \(s_1 < s_2 < \ldots < s_n\). \(f(x)\) определим как количество таких \(i\) (\(1\leq i\leq n\)), что существуют неотрицательные целые числа \(p_i, q_i\) такие, что:

\(\)s_i=p_i\left\lfloor{s_n\over x}\right\rfloor + q_i\left\lceil{s_n\over x}\right\rceil\(\)

Найдите \(\sum_{x=1}^{s_n} x\cdot f(x)\) по модулю \(998\,244\,353\).

Напомним, что \(\lfloor x\rfloor\) обозначает максимальное целое число не больше \(x\), и \(\lceil x\rceil\) обозначает минимальное целое число не меньше \(x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1\leq t\leq 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1\leq n\leq 10^6\)).

Вторая строка каждого набора входных данных содержит \(n\) положительных целых чисел \(s_1,s_2,\ldots,s_n\) (\(1\leq s_1 < s_2 < \ldots < s_n \leq 10^7\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\), и сумма \(s_n\) по всем наборам входных данных не превосходит \(10^7\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — сумму \(x\cdot f(x)\) по всем возможным \(x\) по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных \(s_n=4\), \(f(x)\) вычисляется следующим образом:

  • \(f(1)=1\)
    • \(\left\lfloor s_n\over 1\right\rfloor=4\), \(\left\lceil s_n\over 1\right\rceil=4\).
    • Можно показать, что \(p_1,p_2\) и \(q_1,q_2\), которые удовлетворяют условиям, не существует.
    • Пусть \(p_3=1\) и \(q_3=0\), тогда \(s_3 = p_3\cdot\left\lfloor s_n\over 1\right\rfloor + q_3\cdot\left\lceil s_n\over 1\right\rceil = 1\cdot 4 + 0\cdot 4 = 4\).
  • \(f(2)=2\)
    • \(\left\lfloor s_n\over 2\right\rfloor=2\), \(\left\lceil s_n\over 2\right\rceil=2\).
    • Можно показать, что \(p_1\) и \(q_1\), которые удовлетворяют условиям, не существует.
    • Пусть \(p_2=1\) и \(q_2=0\), тогда \(s_2 = p_2\cdot\left\lfloor s_n\over 2\right\rfloor + q_2\cdot\left\lceil s_n\over 2\right\rceil = 1\cdot 2 + 0\cdot 2 = 2\).
    • Пусть \(p_3=0\) и \(q_3=2\), тогда \(s_3 = p_3\cdot\left\lfloor s_n\over 2\right\rfloor + q_3\cdot\left\lceil s_n\over 2\right\rceil = 0\cdot 2 + 2\cdot 2 = 4\).
  • \(f(3)=3\)
    • \(\left\lfloor s_n\over 3\right\rfloor=1\), \(\left\lceil s_n\over 3\right\rceil=2\).
    • Пусть \(p_1=1\) и \(q_1=0\), тогда \(s_1 = p_1\cdot\left\lfloor s_n\over 3\right\rfloor + q_1\cdot\left\lceil s_n\over 3\right\rceil = 1\cdot 1 + 0\cdot 2 = 1\).
    • Пусть \(p_2=0\) и \(q_2=1\), тогда \(s_2 = p_2\cdot\left\lfloor s_n\over 3\right\rfloor + q_2\cdot\left\lceil s_n\over 3\right\rceil = 0\cdot 1 + 1\cdot 2 = 2\).
    • Пусть \(p_3=0\) и \(q_3=2\), тогда \(s_3 = p_3\cdot\left\lfloor s_n\over 3\right\rfloor + q_3\cdot\left\lceil s_n\over 3\right\rceil = 0\cdot 1 + 2\cdot 2 = 4\).
  • \(f(4)=3\)
    • \(\left\lfloor s_n\over 4\right\rfloor=1\), \(\left\lceil s_n\over 4\right\rceil=1\).
    • Пусть \(p_1=1\) и \(q_1=0\), тогда \(s_1 = p_1\cdot\left\lfloor s_n\over 4\right\rfloor + q_1\cdot\left\lceil s_n\over 4\right\rceil = 1\cdot 1 + 0\cdot 1 = 1\).
    • Пусть \(p_2=1\) и \(q_2=1\), тогда \(s_2 = p_2\cdot\left\lfloor s_n\over 4\right\rfloor + q_2\cdot\left\lceil s_n\over 4\right\rceil = 1\cdot 1 + 1\cdot 1 = 2\).
    • Пусть \(p_3=2\) и \(q_3=2\), тогда \(s_3 = p_3\cdot\left\lfloor s_n\over 4\right\rfloor + q_3\cdot\left\lceil s_n\over 4\right\rceil = 2\cdot 1 + 2\cdot 1 = 4\).

Таким образом, ответ равен \(\sum_{x=1}^4 x\cdot f(x) = 1\cdot 1 + 2\cdot 2 + 3\cdot 3 + 4\cdot 3 = 26\).

Во втором наборе входных данных:

  • \(f(1)=f(2)=f(3)=1\)
  • \(f(4)=3\)
  • \(f(5)=f(6)=f(7)=f(8)=f(9)=4\)

Например, когда \(x=3\), \(f(3)=1\), потому что существуют \(p_4\) и \(q_4\):

\(\)9 = 1 \cdot\left\lfloor{9\over 3}\right\rfloor + 2 \cdot\left\lceil{9\over 3}\right\rceil\(\)

Можно показать, что невозможно найти \(p_1,p_2,p_3\) и \(q_1,q_2,q_3\), которые удовлетворяют условиям.

Когда \(x=5\), \(f(5)=4\), потому что существуют следующие \(p_i\) и \(q_i\):

\(\)1 = 1 \cdot\left\lfloor{9\over 5}\right\rfloor + 0 \cdot\left\lceil{9\over 5}\right\rceil\(\) \(\)2 = 0 \cdot\left\lfloor{9\over 5}\right\rfloor + 1 \cdot\left\lceil{9\over 5}\right\rceil\(\) \(\)7 = 3 \cdot\left\lfloor{9\over 5}\right\rfloor + 2 \cdot\left\lceil{9\over 5}\right\rceil\(\) \(\)9 = 3 \cdot\left\lfloor{9\over 5}\right\rfloor + 3 \cdot\left\lceil{9\over 5}\right\rceil\(\)

Таким образом, ответ равен \(\sum_{x=1}^9 x\cdot f(x) = 158\).

F. Serval и Brain Power

битмаски дп жадные алгоритмы Перебор реализация Строки *2700

Serval любит Brain Power и свою интеллектуальную задачу.

Serval называет строку \(T\) мощной тогда и только тогда, когда \(T\) можно получить конкатенацией некоторой строки \(T'\) несколько раз. Формально говоря, \(T\) является мощной тогда и только тогда, когда существует строка \(T'\) и целое число \(k\geq 2\) такие, что \(\)T=\underbrace{T'+T'+\dots+T'}_{k\text{ раз}}\(\)

Например, gogogo является мощной, потому что её можно получить конкатенацией go три раза, но power не является мощной.

У Serval есть строка \(S\), состоящая из строчных латинских букв. Ему любопытно узнать о самой длинной мощной подпоследовательности \(S\), и ему достаточно, чтобы вы узнали её длину. Если все непустые подпоследовательности \(S\) не являются мощными, ответ считается равным \(0\).

Строка \(a\) является подпоследовательностью строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов.

Входные данные

Первая строка содержит единственную строку \(S\) (\(|S|\leq 80\)), состоящую из строчных латинских букв.

Выходные данные

Выведите единственное целое число — длину самой длинной мощной подпоследовательности \(S\). Если все непустые подпоследовательности \(S\) не являются мощными, выведите \(0\).

Примечание

В первом примере все непустые подпоследовательности buaa перечислены ниже:

  • b
  • u
  • a (встречается дважды, buaa и buaa)
  • bu
  • ba (встречается дважды, buaa и buaa)
  • ua (встречается дважды, buaa и buaa)
  • aa
  • bua (встречается дважды, buaa и buaa )
  • baa
  • uaa
  • buaa

Так как aa \(=\) a \(+\) a, aa является мощной подпоследовательностью. Можно доказать, что aa является единственной мощной подпоследовательностью среди них. Поэтому ответ равен \(2\).

Во втором примере самой длинной мощной подпоследовательностью является codcod из codeforcesround. Поэтому ответ равен \(6\).

E. Отрицательные и положительные

дп жадные алгоритмы сортировки *1100

Дан массив \(a\) состоящий из \(n\) элементов, найдите максимально возможную сумму, которая может быть у массива после выполнения следующей операции любое количество раз:

  • Выбрать \(2\) соседних элемента и поменять их знаки. Иными словами, выбрать индекс \(i\) такой, что \(1 \leq i \leq n - 1\) и присвоить \(a_i = -a_i\) и \(a_{i+1} = -a_{i+1}\).
Входные данные

Каждый тест состоит из множества наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов. Затем следуют описания наборов.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 2\cdot10^5\)) — длину массива.

Следующая строка содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(-10^9 \leq a_i \leq 10^9\)), разделенных пробелами.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите максимально возможную сумму, которая может получится у массива, если мы применим описанную выше операцию любое количество раз.

Примечание

В первом наборе, выполнив операцию над первыми двумя элементами, мы можем изменить массив с \([-1, -1, -1]\) на \([1, 1, -1]\). Можно доказать, что этот массив дает максимально возможную сумму, которая равна \(1 + 1 + (-1) = 1\).

Во втором наборе, выполнив операцию над \(-5\) и \(0\), мы изменим массив с \([1, 5, -5, 0, 2]\) на \([1, 5, -(-5), -0, 2] = [1, 5, 5, 0, 2]\), который имеет максимальную сумму, так как все элементы неотрицательны. Так, ответ: \(1 + 5 + 5 + 0 + 2 = 13\).

В третьем наборе массив уже содержит только положительные числа, поэтому выполнять операции не нужно. Ответ — это просто сумма всего массива, которая равна \(1 + 2 + 3 = 6\).

E. Таблица и делители

дп Перебор поиск в глубину и подобное теория чисел *2400

Вам задана таблица умножения \(n \times n\) и положительное целое число \(m = m_1 \cdot m_2\). Таблица умножения \(n \times n\) — это таблица из \(n\) строк и \(n\) столбцов, пронумерованных от \(1\) по \(n\), где \(a_{i, j} = i \cdot j\).

Для каждого делителя \(d\) числа \(m\) определите: встречается ли \(d\) в таблице хотя бы раз, и если встречается, то какой наименьший номер строки, которая содержит \(d\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы три целых числа \(n\), \(m_1\) и \(m_2\) (\(1 \le n \le 10^9\); \(1 \le m_1, m_2 \le 10^9\)) — размер таблицы умножения и число \(m\), представленное как \(m_1 \cdot m_2\).

Выходные данные

Для каждого набора входных данный, пусть \(d_1, d_2, \dots, d_k\) – это все делители \(m\), отсортированные в порядке возрастания. А также, пусть \(a_1, a_2, \dots, a_k\) — это массив ответов, где \(a_i\) равно наименьшему номеру строки, в которой встречается \(d_i\), либо \(0\), если такой строки в таблице нет.

Так как массив \(a\) может быть длинным, выведите сначала число \(s\) — количество делителей \(m\), которые встречаются в таблице умножения \(n \times n\). Далее выведите одно число \(X = a_1 \oplus a_2 \oplus \dots \oplus a_k\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Примечание

В первом наборе входных данных, \(m = 72 \cdot 1 = 72\) и имеет \(12\) делителей \([1, 2, 3, 4, 6, 8, 9, 12, 18, 24, 36, 72]\). Таблица умножения \(3 \times 3\) выглядит следующим образом:

123
1123
2246
3369

Для каждого делителя \(m\), что присутствует в таблице, выделена позиция с наименьшим номером строки. Соответственно, массив ответов \(a\) равен \([1, 1, 1, 2, 2, 0, 3, 0, 0, 0, 0, 0]\). В нем только \(6\) ненулевых значений, а исключающее ИЛИ \(a\) равен \(2\).

Во втором наборе, \(m = 10 \cdot 15 = 150\) и имеет \(12\) делителей \([1, 2, 3, 5, 6, 10, 15, 25, 30, 50, 75, 150]\). Все делители кроме \(75\) и \(150\) присутствуют в таблице \(10 \times 10\). Массив \(a\) \(=\) \([1, 1, 1, 1, 1, 1, 3, 5, 3, 5, 0, 0]\). В нем \(10\) ненулевых значений и исключающее ИЛИ \(a\) равно \(0\).

В третьем наборе, \(m = 1 \cdot 210 = 210\) и имеет \(16\) делителей \([1, 2, 3, 5, 6, 7, 10, 14, 15, 21, 30, 35, 42, 70, 105, 210]\). Таблица умножения \(6 \times 6\) с выделенными делителями изображена ниже:

123456
1123456
224681012
3369121518
44812162024
551015202530
661218243036

Массив \(a\) \(=\) \([1, 1, 1, 1, 1, 0, 2, 0, 3, 0, 5, 0, 0, 0, 0, 0]\). В нем \(8\) ненулевых значений и исключающее ИЛИ \(a\) равно \(5\).

F1. Покраска графа (простая версия)

графы дп Комбинаторика *2700

Единственное различие между простой и сложной версией — ограничение на \(n\).

Дан полный неориентированный граф из \(n\) вершин. Полный граф — это такой граф, где между каждой парой вершин существует ровно одно ребро. Вы должны покрасить ребра этого графа в два цвета, синий и красный (каждое ребро должно быть покрашено в один из этих цветов).

Назовем множество вершин \(S\) связным по красному цвету, если для каждой пары вершин \((v_1, v_2)\), такой, что \(v_1 \in S\) и \(v_2 \in S\), существует путь из \(v_1\) в \(v_2\), проходящий только по вершинам из \(S\) и по красным ребрам. Аналогично, назовем множество вершин \(S\) связным по синему цвету, если для каждой пары вершин \((v_1, v_2)\), такой, что \(v_1 \in S\) и \(v_2 \in S\), существует путь из \(v_1\) в \(v_2\), проходящий только по вершинам из \(S\) и по синим ребрам.

Нужно раскрасить граф так, чтобы выполнялись следующие условия:

  • хотя бы одно ребро красное;
  • хотя бы одно ребро синее;
  • для каждого множества вершин \(S\), такого, что \(|S| \ge 2\), \(S\) связно по красному цвету или по синему цвету, но не по обоим цветам.

Посчитайте количество способов покрасить граф и выведите его по модулю \(998244353\).

Входные данные

В первой (и единственной) строке задано одно целое число \(n\) (\(3 \le n \le 5 \cdot 10^3\)).

Выходные данные

Выведите одно целое число — количество способов покрасить граф, взятое по модулю \(998244353\).

F2. Покраска графа (сложная версия)

бпф графы дп Комбинаторика Перебор разделяй и властвуй *2900

Единственное различие между простой и сложной версией — ограничение на \(n\).

Дан полный неориентированный граф из \(n\) вершин. Полный граф — это такой граф, где между каждой парой вершин существует ровно одно ребро. Вы должны покрасить ребра этого графа в два цвета, синий и красный (каждое ребро должно быть покрашено в один из этих цветов).

Назовем множество вершин \(S\) связным по красному цвету, если для каждой пары вершин \((v_1, v_2)\), такой, что \(v_1 \in S\) и \(v_2 \in S\), существует путь из \(v_1\) в \(v_2\), проходящий только по вершинам из \(S\) и по красным ребрам. Аналогично, назовем множество вершин \(S\) связным по синему цвету, если для каждой пары вершин \((v_1, v_2)\), такой, что \(v_1 \in S\) и \(v_2 \in S\), существует путь из \(v_1\) в \(v_2\), проходящий только по вершинам из \(S\) и по синим ребрам.

Нужно раскрасить граф так, чтобы выполнялись следующие условия:

  • хотя бы одно ребро красное;
  • хотя бы одно ребро синее;
  • для каждого множества вершин \(S\), такого, что \(|S| \ge 2\), \(S\) связно по красному цвету или по синему цвету, но не по обоим цветам.

Посчитайте количество способов покрасить граф и выведите его по модулю \(998244353\).

Входные данные

В первой (и единственной) строке задано одно целое число \(n\) (\(3 \le n \le 5 \cdot 10^4\)).

Выходные данные

Выведите одно целое число — количество способов покрасить граф, взятое по модулю \(998244353\).

D. Московские гориллы

Бинарный поиск дп жадные алгоритмы математика реализация *1800

Зимой обитателям Московского зоопарка очень скучно, в частности, это касается горилл. Вы решили развлечь их и принесли в зоопарк перестановку \(p\) длины \(n\).

Перестановкой длины \(n\) называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве).

У горилл оказалась своя перестановка \(q\) длины \(n\). Они предложили вам посчитать количество пар целых чисел \(l, r\) (\(1 \le l \le r \le n\)) таких, что \(\operatorname{MEX}([p_l, p_{l+1}, \ldots, p_r])=\operatorname{MEX}([q_l, q_{l+1}, \ldots, q_r])\).

\(\operatorname{MEX}\) последовательности это минимальное целое положительное число, отсутствующее в этой последовательности. Например, \(\operatorname{MEX}([1, 3]) = 2\), \(\operatorname{MEX}([5]) = 1\), \(\operatorname{MEX}([3, 1, 2, 6]) = 4\).

Вы не хотите рисковать своим здоровьем, поэтому не посмеете отказать гориллам.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина перестановок.

Вторая строка содержит \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — элементы перестановки \(p\).

Третья строка содержит \(n\) различных целых чисел \(q_1, q_2, \ldots, q_n\) (\(1 \le q_i \le n\)) — элементы перестановки \(q\).

Выходные данные

Выведите одно целое число — количество подходящих пар \(l\) и \(r\).

Примечание

В первом примере подходят два отрезка — \([1, 3]\), для которого \(\operatorname{MEX}\) в обоих массивах равен \(4\), и \([3, 3]\), для которого \(\operatorname{MEX}\) в обоих массивах равен \(1\).

Во втором примере, например, подходит отрезок \([1, 4]\), а отрезок \([6, 7]\) не подходит, потому что \(\operatorname{MEX}(5, 4) \neq \operatorname{MEX}(1, 4)\).

E. Велепин и маркетинг

Бинарный поиск дп жадные алгоритмы сортировки Структуры данных *2600

Знаменитый писатель Велепин очень продуктивный. Совсем недавно он подписал контракт с известным изданием и теперь ему нужно написать \(k_i\) книг за \(i\)-й год. Для него это вообще не проблема, он может сколько угодно писать о самураях, космосе, пустоте, насекомых и оборотнях.

У него есть \(n\) постоянных читателей, каждый из которых в \(i\)-й год прочитает одну из \(k_i\) книг, выпущенных Велепиным. Читатели очень любят обсуждать книги, поэтому \(j\)-й из них будет доволен в течение года, если такую же книгу, как он, прочитают как минимум \(a_j\) человек (включая его самого).

У Велепина есть явные проблемы с маркетингом, поэтому он обратился к вам! Известный сервис чтения книг может управлять тем, что будет читать каждый из поклонников Велепина, но он не хочет чтобы книги пропадали зря, поэтому каждую книгу должен кто-то прочитать. И вот они обратились к вам, с просьбой сказать, какое максимальное количество постоянных читателей можно сделать довольным в течение каждого из годов, если вы можете выбирать каждому человеку книгу, которую он будет читать.

Входные данные

В первой строке дано одно целое число \(n\) \((2 \le n \le 3 \cdot 10^5)\) — количество постоянных читателей Велепина.

Во второй строке дано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \le a_i \le n)\) — количество необходимых читателей той же книги для счастья \(i\)-го человека.

В третьей строке дано одно целое число \(q\) \((1 \le q \le 3 \cdot 10^5)\) — количество лет, которые нужно проанализировать.

В каждой из следующих \(q\) строк дано по одному целому числу \(k_j\) \((2 \le k_j \le n)\) — количество книг, которые Велепин должен написать в \(j\)-й год.

Выходные данные

Выведите \(q\) строк, в каждой из них ровно одно число — максимальное количество человек, которые могут быть довольны в \(j\)-й год, если Велепин выпустит \(k_j\) книг.

Примечание

В первом примере в первый год оптимальным является разделение \(1, 2, 2, 2, 2\) (первую книгу читает первый человек, а все остальные вторую). Во второй год оптимальным решением является \(1, 2, 2, 3, 3\) (первую книгу читает первый человек, вторую книгу читает второй и третий человек, а все остальные третью книгу). В третий год оптимальным будет разбиение \(1, 2, 3, 4, 2\). Соответственно количество довольных людей по годам будет — \(5, 5, 3\).

Во втором примере в первый год оптимальным является разделение \(1, 1, 1, 1, 1, 2\), тогда будут довольны все кроме \(6\)-го человека. Во второй год оптимальным разделением является \(1, 1, 1, 1, 2, 3\), тогда будут довольны все кроме \(5\)-го и \(6\)-го человека.

D. Подсчет факторизаций

дп Комбинаторика математика разделяй и властвуй теория чисел *1900

Факторизация положительного целого числа \(m\) — это единственный способ записать его в виде \(\displaystyle m=p_1^{e_1}\cdot p_2^{e_2}\cdot \ldots \cdot p_k^{e_k}\), где \(p_1, p_2, \ldots, p_k\) — простые числа, \(p_1 < p_2 < \ldots < p_k\) и \(e_1, e_2, \ldots, e_k\) — положительные целые числа.

Для каждого положительного целого числа \(m\), определим \(f(m)\) как мультимножество всех чисел в его факторизации, то есть \(f(m)=\{p_1,e_1,p_2,e_2,\ldots,p_k,e_k\}\) .

Например, \(f(24)=\{2,3,3,1\}\), \(f(5)=\{1,5\}\) и \(f(1)=\{\}\).

Вам задан список, состоящий из \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2n}\). Подсчитайте, сколько положительных целых чисел \(m\) удовлетворяют условию \(f(m)=\{a_1, a_2, \ldots, a_{2n}\}\), поскольку это число может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\le n \le 2022\)).

Вторая строка содержит \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2n}\) (\(1\le a_i\le 10^6\)) — заданный список.

Выходные данные

Выведите одно целое число — количество положительных целых чисел \(m\), удовлетворяющих условию \(f(m)=\{a_1, a_2, \ldots, a_{2n}\}\), по модулю \(998\,244\,353\).

Примечание

В первом примере два значения \(m\), такие что \(f(m)=\{1,2,3,3\}\): \(m=24\) и \(m=54\). Их факторизации: \(24=2^3\cdot 3^1\) и \(54=2^1\cdot 3^3\).

Во втором примере пять значений \(m\), таких что \(f(m)=\{2,2,3,5\}\): \(200, 225, 288, 500\) и \(972\).

В третьем примере не существует такого значения \(m\), что \(f(m)=\{1,4\}\). Ни \(1^4\), ни \(4^1\) не являются факторизациями, потому что \(1\) и \(4\) не являются простыми числами.

E. Разметка дерева расстояниями

Деревья дп жадные алгоритмы реализация Структуры данных хэши *2400

Вам задано невзвешенное дерево из \(n\) вершин, пронумерованных от \(1\) до \(n\), и список из \(n-1\) целого числа \(a_1, a_2, \ldots, a_{n-1}\). Дерево — это связный неориентированный граф без циклов. Вы можете использовать каждый элемент списка, чтобы пометить одну из вершин дерева. Никакая вершина не должна быть помечена дважды. Вы можете пометить единственную оставшуюся непомеченной вершину любым целым числом.

Вершина \(x\) называется хорошей, если можно так пометить вершины, чтобы для каждой вершины \(i\) ее метка была равна расстоянию между \(x\) и \(i\). Расстояние между двумя вершинами \(s\) и \(t\) на дереве — это минимальное количество ребер на пути, который начинается в вершине \(s\) и заканчивается в вершине \(t\).

Найдите все хорошие вершины.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — число вершин в дереве.

Вторая строка содержит \(n - 1\) целое число \(a_1,a_2,\ldots,a_{n-1}\) (\(0\le a_i < n\)) — заданный список.

Затем следуют \(n−1\) строк. Каждая из них содержит два целых числа \(u\) и \(v\) (\(1\le u,v\le n\)), обозначающие ребро между вершинами \(u\) и \(v\). Гарантируется, что ребра образуют дерево.

Выходные данные

В первой строке выведите количество хороших вершин.

Во второй строке выведите номера всех хороших вершин в порядке возрастания.

Примечание

На рисунке ниже показано дерево для первого примера:

На рисунке ниже показаны две возможные разметки, такие что \(2\) — хорошая вершина (слева) и \(4\) — хорошая вершина (справа).

Квадрат под каждой вершиной означает ее метку. Черные квадраты содержат числа, которые были в данном списке, а единственный белый квадрат содержит единственное число, которого не было в данном списке.

Во втором примере единственной хорошей вершиной является вершина \(3\).

В третьем примере хороших вершин нет.

E. Взрывы?

Бинарный поиск дп жадные алгоритмы математика Структуры данных *2200

Вы играете в очередную компьютерную игру, где вы убиваете монстров с помощью магических заклинаний. Поле состоит из \(n\) клеток, расположенных в ряд и пронумерованных от \(1\) по \(n\). Первоначально, в \(i\)-й клетке находится \(i\)-й монстер с \(h_i\) единиц здоровья.

У вас есть базовое заклинание, которое стоит \(1\) MP и наносит \(1\) урона выбранному вами монстру. Вы можете использовать его любое количество раз. Также у вас есть свиток с заклинанием «Взрыв», которое вы можете использовать только один раз. Вы хотите закончить убийство монстров с помощью взрыва, а потому вы сначала используете базовое заклинание несколько раз (возможно, ни разу), а потом используете один «Взрыв».

Как же работает заклинание «Взрыв»? Во-первых, вы выбираете мощность заклинания: если вы вольете в него \(x\) MP, «Взрыв» нанесет \(x\) урона. Во-вторых, вы выбираете монстра \(i\), который будет целью заклинания. Вот что происходит дальше:

  • если его текущее здоровье \(h_i > x\), то он остается живым со здоровьем, пониженным на \(x\);
  • если \(h_i \le x\), то \(i\)-й монстр умирает и взрывается, нанося \(h_i - 1\) урона монстрам в соседних клетках \(i - 1\) и \(i + 1\), если эти клетки есть и монстры в них еще живы;
  • если урона, нанесенного взрывом, достаточно, чтобы убить монстра \(i - 1\) (или \(i + 1\)), т. е. текущее \(h_{i - 1} \le h_i - 1\) (или \(h_{i + 1} \le h_i - 1\)), то этот монстр также взрывается, нанося \(h_{i-1} - 1\) (или \(h_{i+1} - 1\)) урона своим соседям, которые также могут взорваться, если умрут, и так далее.

Ваша задача — убить всех оставшихся монстров с помощью этих «цепных» взрывов, а потому вам может понадобиться базовое заклинание, чтобы уменьшить \(h_i\) некоторых монстров, а может, даже убить их заранее (монстры умирают, когда их текущее здоровье \(h_i\) становится меньше или равно нулю). Заметим, что монстры не перемещаются между клетками, а потому, например, монстры \(i\) и \(i + 2\) никогда не станут соседними.

Какое наименьшее суммарное MP вам нужно, чтобы уничтожить монстров описанным выше способом? Общее MP считается как сумма количества использований базового заклинания и выбранной мощности \(x\) заклинания «Взрыв».

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество клеток на поле, или же количество монстров.

Во второй строке каждого набора заданы \(n\) целых чисел \(h_1, h_2, \dots, h_n\) (\(1 \le h_i \le 10^6\)) — первоначальное здоровье монстров.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — наименьшее суммарное количество MP, которое вам понадобится, для того, чтобы уничтожить всех монстров с помощью взрыва в конце.

Примечание

В первом наборе входных данных вы можете, например, использовать базовое заклинание на монстрах \(1\) и \(2\) (один раз на каждого), чтобы уничтожить их. После этого вы кастуете «Взрыв» мощности \(x = 1\) на монстра \(3\), чтобы убить его. Суммарное MP равно \(2 + 1 = 3\).

Во втором наборе, выгодно скастовать базовое заклинание \(4\) раза на монстра \(1\) и убить его. После этого, вы кастуете «Взрыв» мощности \(x = 2\) на монстра \(3\). Он умирает и взрывается с силой \(1\), чем убивает монстров \(2\) и \(4\). Суммарное MP равно \(4 + 2 = 6\).

В третьем наборе, вы кастуете «Взрыв» силы \(15\) на монстра \(3\). Взрыв \(3\)-го монстра (силы \(14\)) убивает монстров \(2\) и \(4\). Взрыв монстра \(2\) (силы \(9\)), в свою очередь, убивает монстра \(1\).

D. Максимальный подмассив

дп жадные алгоритмы Структуры данных *2000

Задан массив \(a_1, a_2, \dots, a_n\), состоящий из \(n\) целых чисел. Также дано два целых числа \(k\) и \(x\).

Вы должны выполнить следующую операцию ровно один раз: прибавить \(x\) к элементам на ровно \(k\) различных позициях и вычесть \(x\) на всех остальных.

Например, если \(a = [2, -1, 2, 3]\), \(k = 1\), \(x = 2\), и мы выбрали увеличить первый элемент, тогда после применения операции \(a = [4, -3, 0, 1]\).

Пусть \(f(a)\) — максимальная сумма подмассива из \(a\). Подмассив массива \(a\) — это последовательная часть массива \(a\), другими словами массив \(a_i, a_{i + 1}, \dots, a_j\) для некоторых \(1 \le i \le j \le n\). Пустой подмассив тоже рассматривается, его сумма равна \(0\).

Пусть массив \(a'\) будет массивом \(a\) после применения вышеупомянутой операции. Примените операцию таким образом, чтобы \(f(a')\) было максимально возможным, и выведите максимально возможное значение \(f(a')\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(k\) и \(x\) (\(1 \le n \le 2 \cdot 10^5\); \(0 \le k \le \min(20, n)\); \(-10^9 \le x \le 10^9\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимально возможное значение \(f(a')\).

E. Красивые подграфы

Деревья дп жадные алгоритмы игры поиск в глубину и подобное *2500

У Монокарпа есть дерево, состоящее из \(n\) вершин.

Он планирует выбрать некоторую вершину \(r\) и проделать следующие операции над каждой вершиной \(v\) от \(1\) до \(n\):

  • присвоить \(d_v\) равным расстоянию от \(v\) до \(r\) (количество ребер на кратчайшем пути);
  • раскрасить \(v\) в какой-нибудь цвет.

Раскраска называется красивой, если она удовлетворяет двум условиям:

  • для каждой пары вершин одного цвета \((v, u)\) существует путь из \(v\) в \(u\), который посещает только вершины того же цвета;
  • для каждой пары вершины одного цвета \((v, u)\), \(d_v \neq d_u\).

Обратите внимание, что Монокарп может выбирать любое количество различных цветов, которые он хочет использовать.

Для каждого использованного цвета он затем считает количество вершин этого цвета. Стоимость дерева — это минимум из этих значений.

Какая может быть наибольшая стоимость дерева?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке записано одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

В каждой из следующих \(n-1\) строк записаны два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\)) — описание ребра.

Заданные ребра образуют дерево. Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наибольшая возможная стоимость дерева.

D. Li Hua и дерево

Деревья дп Перебор поиск в глубину и подобное реализация Структуры данных *1900

У Li Hua есть дерево с \(n\) вершинами и \(n-1\) ребром. Корнем дерева является вершина \(1\). Каждая вершина \(i\) имеет важность \(a_i\). Обозначим размер поддерева как количество вершин в нем, а важность как сумму важности вершин в нем. Обозначим тяжелым сыном нелистовой вершины сына с наибольшим размером поддерева. Если таких вершин несколько, то тяжёлым сыном будет та, у которой индекс минимален.

Li Hua хочет выполнить \(m\) операций:

  • «1 \(x\)» (\(1\leq x \leq n\)) — вычислить важность поддерева, корнем которого является \(x\).
  • «2 \(x\)» (\(2\leq x \leq n\)) — повернуть тяжёлого сына поддерева \(x\) вверх. Формально, обозначим как \(son_x\) тяжелого сына \(x\), \(fa_x\) как отца \(x\). Он хочет удалить ребро между \(x\) и \(fa_x\) и добавить ребро между \(son_x\) и \(fa_x\). Гарантируется, что \(x\) не является корнем, но не гарантируется, что \(x\) не является листом. Если \(x\) является листом, проигнорируйте эту операцию.

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

Входные данные

Первая строка содержит 2 целых числа \(n,m\) (\(2\le n\le 10^{5},1\le m\le 10^{5}\)) — количество вершин в дереве и количество операций.

Вторая строка содержит \(n\) целых чисел \(a_{1},a_{2},\ldots ,a_{n}\) (\(-10^{9}\le a_{i}\le 10^{9}\)) — важность каждой вершины.

Следующие \(n-1\) строк содержат рёбра дерева. В \(i\)-й строке записаны два целых числа \(u_i\) и \(v_i\) (\(1\le u_i,v_i\le n\), \(u_i\ne v_i\)) — соответствующее ребро. Данные рёбра образуют дерево.

Следующие \(m\) строк содержат операции — по одной операции в строке. \(j\)-я операция содержит два целых числа \(t_{j},x_{j}\) (\(t_{j}\in \{1,2\}\), \(1 \leq x_{j} \leq n\), \(x_{j}\neq 1\) если \(t_j = 2\)) — \(j\)-я операция.

Выходные данные

Для каждого запроса вида «1 \(x\)» выведите ответ в отдельной строке.

Примечание

В первом примере:

Начальное дерево показано на следующем рисунке:

Важность поддерева \(6\) равна \(a_6+a_7=2\).

После поворота тяжелого сына вершины \(3\) (которым является \(6\)) вверх, дерево будет выглядеть следующим образом:

Важность поддерева \(6\) равна \(a_6+a_3+a_7=3\).

Важность поддерева \(2\) - \(a_2+a_4+a_5=3\).

E. Генератор мультитестов

дп Перебор *2300

Массив \(b_1, b_2, \ldots, b_m\) назовём тестом, если \(b_1 = m - 1\).

Массив \(b_1, b_2, \ldots, b_m\) назовём мультитестом, если массив \(b_2, b_3, \ldots, b_m\) можно разбить на \(b_1\) непустых подмассивов так, что каждый из этих подмассивов является тестом. Обратите внимание, что каждый элемент массива должен войти в ровно один подмассив из разбиения, при этом каждый подмассив должен состоять из последовательных элементов исходного массива.

Определим функцию \(f\) от массива \(b_1, b_2, \ldots, b_m\) как минимальное количество операций вида «Заменить любое \(b_i\) на любое целое неотрицательное число \(x\)», которое нужно сделать, чтобы массив \(b_1, b_2, \ldots, b_m\) стал мультитестом.

Дан массив \(a_1, a_2, \ldots, a_n\) из положительных чисел. Для каждого \(i\) от \(1\) до \(n - 1\) найдите \(f([a_i, a_{i+1}, \ldots, a_n])\).

Ниже приведены некоторые примеры тестов и мультитестов.

  • Тесты: \([\underline{1}, 5]\), \([\underline{2}, 2, 2]\), \([\underline{3}, 4, 1, 1]\), \([\underline{5}, 0, 0, 0, 0, 0]\), \([\underline{7}, 1, 2, 3, 4, 5, 6, 7]\), \([\underline{0}]\). Эти массивы являются тестами, так как их первый элемент (подчеркнут) равен длине массива минус один.
  • Мультитесты: \([1, \underline{\underline{1}, 1}]\), \([2, \underline{\underline{3}, 0, 0, 1}, \underline{\underline{1}, 12}]\), \([3, \underline{\underline{2}, 2, 7}, \underline{\underline{1}, 1}, \underline{\underline{3}, 4, 4, 4}]\), \([4, \underline{\underline{0}}, \underline{\underline{3}, 1, 7, 9}, \underline{\underline{4}, 2, 0, 0, 9}, \underline{\underline{1}, 777}]\). Подчеркнуты подмассивы после разбиения, а два раза подчеркнуты первые элементы в них.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 300\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 300\,000\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 300\,000\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(300\,000\).

Выходные данные

Для каждого набора входных данных выведите \(n - 1\) число — значения \(f([a_i, a_{i+1}, \ldots, a_n])\) для каждого \(i\) от \(1\) до \(n - 1\).

Примечание

В первом наборе входных данных первого теста массив \([1, 2, 1, 7]\) является мультитестом, так как массив \([2, 1, 7]\) является тестом. Массив \([2, 1, 7]\) не является мультитестом, но при замене первого числа на \(1\) получается массив \([1, 1, 7]\) который является мультитестом. Массив \([1, 7]\) также не является мультитестом, но массив \([1, 0]\) является. Таким образом \(f([1, 7]) = 1\).

Во втором наборе входных данных первого теста для \(i = 2\), \(f([a_i, a_{i+1}, \ldots, a_n]) = f([1, 3, 1, 2, 1, 1]) = 1\), так как массив не является мультитестом, но при замене второго элемента на \(4\) получится мультитест.

В третьем наборе входных данных первого теста для \(i = 1\), \(f([a_i, a_{i+1}, \ldots, a_n]) = f([2, 7, 1, 1]) = 1\), так как массив не является мультитестом, но при замене второго элемента на \(0\) получится мультитест.

Второй тест представляет из себя массив составленный из всех чисел первого теста. Поэтому \(f([a_1, a_2, \ldots, a_n])\) естественным образом равняется \(0\).

F. Подарки от Деда Ахмеда

дп математика теория чисел *2500

В Школе Деда Ахмеда обучается \(n+1\) ученик. Ученики разбиты на \(k\) классов, и в \(i\)-м классе обучается \(s_i\) учеников. Таким образом, \(s_1 + s_2 + \ldots + s_k = n+1\).

В честь скорого Дня дурака все ученики получат подарки!

Дед Ахмед планировал заказать \(n+1\) коробку с подарками. В каждой коробке будет один или несколько подарков. Дед Ахмед распределит их между классами так, чтобы были выполнены следующие условия:

  1. Класс номер \(i\) должен получить ровно \(s_i\) коробок (чтобы каждый ученик мог открыть ровно одну коробку с подарками).
  2. Суммарное количество подарков в коробках, полученных \(i\)-м классом, должно быть кратным \(s_i\) (то есть поровну распределяться между \(s_i\) учениками этого класса).

К сожалению, Дед Ахмед по невнимательности заказал всего \(n\) коробок с подарками, в \(i\)-й из которых содержится \(a_i\) подарков.

У Ахмеда есть время, чтобы купить недостающую коробку с подарками, причем количество подарков в коробке должно быть целым числом от \(1\) до \(10^6\). Помогите Ахмеду определить, коробку с каким количеством подарков ему стоит купить, а также постройте подходящее распределение коробок по классам, или сообщите, что это невозможно.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 200\), \(k \le n + 1\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^6\)) — количество подарков в имеющихся коробках.

Третья строка содержит \(k\) целых числа \(s_1, s_2, \ldots, s_k\) (\(1 \le s_i \le n+1\)) — количество учеников в классах. Гарантируется, что \(\sum s_i = n+1\).

Выходные данные

Если подходящего распределения не существует, в единственной строке выведите число \(-1\).

Иначе, в первой строке выведите единственное число \(s\) — количество подарков в коробке, которую должен купить Дед Ахмед (\(1 \le s \le 10^6\)).

Далее в \(k\) строках выведите распределение коробок по классам. В \(i\)-й строке выведите \(s_i\) целых чисел — размеры коробок, которые попадут в \(i\)-й класс.

Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом примере Дед Ахмед может купить всего \(1\) подарок. После определить в первый класс две коробки с \(7\) подарками. \(7 + 7 = 14\) нацело делится на \(2\). А во второй класс достанутся коробки с \(1, 7, 127\) подарками. \(1 + 7 + 127 = 135\) нацело делится на \(3\).

Во втором тестовом примере классы имеют размеры \(6\), \(1\), \(9\) и \(3\). Покажем, что имеющихся коробок достаточно, чтобы распределить в классы размеров \(6\), \(9\), \(3\), а в класс размера \(1\) можно купить коробку любого размера. В класс размера \(6\) отправим коробки размеров \(7\), \(1\), \(7\), \(6\), \(5\), \(4\). \(7 + 1 + 7 + 6 + 5 + 4 = 30\) нацело делится на \(6\). В класс размера \(9\) отправим коробки размеров \(1\), \(2\), \(3\), \(8\), \(3\), \(2\), \(9\), \(8\), \(9\). \(1 + 2 + 3 + 8 + 3 + 2 + 9 + 8 + 9 = 45\) нацело делится на \(9\). В класс размера \(3\) отправятся оставшиеся коробки размеров \(6\), \(5\), \(4\). \(6 + 5 + 4 = 15\) нацело делится на \(3\).

D1. Горячий запуск (простая версия)

дп *1900

Это простая версия задачи. Единственное различие между версиями заключается в ограничениях на \(t\), \(n\), \(k\).

У вас есть компьютер с двумя CPU. Также есть \(k\) программ, пронумерованных целыми числами от \(1\) до \(k\), которые вы можете исполнять на компьютере, каждую только на одном CPU.

\(i\)-я программа (\(1 \le i \le k\)) занимает \(cold_i\) секунд, чтобы быть исполненной на любом CPU. Однако, если последняя программа, которая исполнялась на этом CPU была также программа \(i\), исполнение занимает \(hot_i\) секунд (\(hot_i \le cold_i\)). Обратите внимание, что это выполняется, только если мы исполнили программу \(i\) несколько раз последовательно на этом CPU  — если мы исполняем программу \(i\), потому другую программу, потом программу \(i\), время исполнения программы во второй раз займет \(cold_i\) секунд.

Вам дана последовательность \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящая из целых чисел от \(1\) до \(k\). Вам нужно исполнить на компьютере программы \(a_1, a_2, \ldots, a_n\) в этом порядке. Для всех \(2 \le i \le n\), вы не можете начать исполнять программу \(a_i\), пока программа \(a_{i - 1}\) не завершилась.

Найдите минимальное количество времени нужное, чтобы исполнить все программы \(a_1, a_2, \ldots, a_n\) в таком порядке.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Описания наборов входных данных следуют.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(k\) (\(1 \le n, k \le 5000\)).

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le k\)).

В третьей строке каждого набора входных данных находится \(k\) целых чисел \(cold_1, cold_2, \ldots, cold_k\) (\(1 \le cold_i \le 10^9\)).

В четвертой строке каждого набора входных данных находится \(k\) целых чисел \(hot_1, hot_2, \ldots, hot_k\) (\(1 \le hot_i \le cold_i\)).

Гарантируется, что сумма \(n\) и сумма \(k\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите минимальное время, необходимое чтобы исполнить все программы в данном порядке.

Примечание

В первом наборе входных данных мы можем сделать следующее:

  • Исполнить программу \(a_1 = 1\) на CPU \(1\). Это займет \(cold_1 = 3\) секунды.
  • Исполнить программу \(a_2 = 2\) на CPU \(2\). Это займет \(cold_2 = 2\) секунды.
  • Исполнить программу \(a_3 = 2\) на CPU \(2\). Последняя программа, которая была исполнена на этом CPU была тоже программа \(2\), поэтому это займет \(hot_2 = 1\) секунду.

Суммарно нам потребуется \(3 + 2 + 1 = 6\) секунд, чтобы исполнить все программы. Можно показать, что это оптимальное время.

Во втором наборе входных данных мы можем сделать следующее:

  • Исполнить программу \(a_1 = 1\) на CPU \(1\). Это займет \(cold_1 = 5\) секунд.
  • Исполнить программу \(a_2 = 2\) на CPU \(2\). Это займет \(cold_2 = 3\) секунды.
  • Исполнить программу \(a_3 = 1\) на CPU \(1\). Последняя программа, которая была исполнена на этом CPU была тоже программа \(1\), поэтому это займет \(hot_1 = 2\) секунды.
  • Исполнить программу \(a_4 = 2\) on CPU \(2\). Последняя программа, которая была исполнена на этом CPU была тоже программа \(2\), поэтому это займет \(hot_2 = 1\) секунду.

Суммарно нам потребуется \(5 + 3 + 2 + 1 = 11\) секунд, чтобы исполнить все программы. Можно показать, что это оптимальное время.

D2. Горячий запуск (сложная версия)

дп Структуры данных *2100

Это сложная версия задачи. Единственное различие между версиями заключается в ограничениях на \(t\), \(n\), \(k\).

У вас есть компьютер с двумя CPU. Также есть \(k\) программ, пронумерованных целыми числами от \(1\) до \(k\), которые вы можете исполнять на компьютере, каждую только на одном CPU.

\(i\)-я программа (\(1 \le i \le k\)) занимает \(cold_i\) секунд, чтобы быть исполненной на любом CPU. Однако, если последняя программа, которая исполнялась на этом CPU была также программа \(i\), исполнение занимает \(hot_i\) секунд (\(hot_i \le cold_i\)). Обратите внимание, что это выполняется, только если мы исполнили программу \(i\) несколько раз последовательно на этом CPU  — если мы исполняем программу \(i\), потому другую программу, потом программу \(i\), время исполнения программы во второй раз займет \(cold_i\) секунд.

Вам дана последовательность \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящая из целых чисел от \(1\) до \(k\). Вам нужно исполнить на компьютере программы \(a_1, a_2, \ldots, a_n\) в этом порядке. Для всех \(2 \le i \le n\), вы не можете начать исполнять программу \(a_i\), пока программа \(a_{i - 1}\) не завершилась.

Найдите минимальное количество времени нужное, чтобы исполнить все программы \(a_1, a_2, \ldots, a_n\) в таком порядке.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Описания наборов входных данных следуют.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(k\) (\(1 \le n, k \le 3 \cdot 10^5\)).

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le k\)).

В третьей строке каждого набора входных данных находится \(k\) целых чисел \(cold_1, cold_2, \ldots, cold_k\) (\(1 \le cold_i \le 10^9\)).

В четвертой строке каждого набора входных данных находится \(k\) целых чисел \(hot_1, hot_2, \ldots, hot_k\) (\(1 \le hot_i \le cold_i\)).

Гарантируется, что сумма \(n\) и сумма \(k\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное время, необходимое чтобы исполнить все программы в данном порядке.

Примечание

В первом наборе входных данных мы можем сделать следующее:

  • Исполнить программу \(a_1 = 1\) на CPU \(1\). Это займет \(cold_1 = 3\) секунды.
  • Исполнить программу \(a_2 = 2\) на CPU \(2\). Это займет \(cold_2 = 2\) секунды.
  • Исполнить программу \(a_3 = 2\) на CPU \(2\). Последняя программа, которая была исполнена на этом CPU была тоже программа \(2\), поэтому это займет \(hot_2 = 1\) секунду.

Суммарно нам потребуется \(3 + 2 + 1 = 6\) секунд, чтобы исполнить все программы. Можно показать, что это оптимальное время.

Во втором наборе входных данных мы можем сделать следующее:

  • Исполнить программу \(a_1 = 1\) на CPU \(1\). Это займет \(cold_1 = 5\) секунд.
  • Исполнить программу \(a_2 = 2\) на CPU \(2\). Это займет \(cold_2 = 3\) секунды.
  • Исполнить программу \(a_3 = 1\) на CPU \(1\). Последняя программа, которая была исполнена на этом CPU была тоже программа \(1\), поэтому это займет \(hot_1 = 2\) секунды.
  • Исполнить программу \(a_4 = 2\) on CPU \(2\). Последняя программа, которая была исполнена на этом CPU была тоже программа \(2\), поэтому это займет \(hot_2 = 1\) секунду.

Суммарно нам потребуется \(5 + 3 + 2 + 1 = 11\) секунд, чтобы исполнить все программы. Можно показать, что это оптимальное время.

F. Подели пополам или вычти

Бинарный поиск дп жадные алгоритмы Перебор сортировки *2700

У вас есть массив положительных целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\). Также вам дано положительное целое число \(b\).

Мы можете сделать следующие операции несколько раз в любом порядке:

  1. Выберите некоторый индекс \(1 \le i \le n\) и замените \(a_i\) на \(\lceil \frac{a_i}{2} \rceil\). Здесь \(\lceil x \rceil\) обозначает минимальное целое число не меньше чем \(x\).
  2. Выберите некоторый индекс \(1 \le i \le n\) и замените \(a_i\) на \(\max(a_i - b, 0)\).

Однако также нужно, чтобы следующие условия удовлетворялись:

  • Вы можете сделать не более \(k_1\) операций типа 1.
  • Вы можете сделать не более \(k_2\) операций типа 2.
  • Для всех \(1 \le i \le n\), вы можете сделать не более \(1\) операции типа 1 с элементом \(a_i\).
  • Для всех \(1 \le i \le n\), вы можете сделать не более \(1\) операции типа 2 с элементом \(a_i\).

Цена массива это сумма его элементов. Найдите минимальную цену массива \(a\), которую можно получить, выполняя эти операции.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Описания наборов входных данных следуют.

В первой строке описания каждого набора входных данных находится четыре целых числа \(n\), \(b\), \(k_1\), \(k_2\) (\(1 \le n \le 5000\), \(1 \le b \le 10^9\), \(0 \le k_1, k_2 \le n\)).

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) задающих массив \(a\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите минимальную цену массива \(a\), которую можно получить, выполняя операции.

Примечание

В первом наборе входных данных вы можете сделать следующее:

  • Сделать операцию 2 с элементом \(a_3\). Он поменяется с \(5\) на \(3\).
  • Сделать операцию 1 с элементом \(a_1\). Он поменяется с \(9\) на \(5\).

После всех операций получается массив \(a = [5, 3, 3]\) который имеет цену \(5 + 3 + 3 = 11\). Можно показать, что это минимальная достижимая цена.

Во втором наборе входных данных обратите внимание, что нам не разрешено применять операцию типа 1 более одного раза с элементом \(a_1\). Поэтому оптимально применить операцию типа 1 к элементам \(a_1\) и \(a_2\). Также можно применить операцию 1 только к \(a_1\), потому что эта операция никак не меняет элемент \(a_2\).

В третьем наборе входных данных можно получить массив стоимости \(23\):

  • Сделать операцию 1 с элементом \(a_4\). Он поменяется с \(19\) на \(10\).
  • Сделать операцию 2 с элементом \(a_4\). Он поменяется с \(10\) на \(7\).

После всех операций получается массив \(a = [2, 8, 3, 7, 3]\). Цена массива \(a\) это \(2 + 8 + 3 + 7 + 3 = 23\). Можно показать, что это минимальная достижимая цена.

G. Подсчет голосов

дп Комбинаторика математика *2600

\(n\) человек участвуют в голосовании. У каждого человека есть ровно один голос.

\(i\)-й человек состоит в команде \(t_i\) (\(1 \leq t_i \leq n\)), где \(t_i = t_j\) означает что \(i\), \(j\) состоят в одной команде. По правилам человек может проголосовать только за человека из другой команды. Обратите внимание, что это автоматически означает, что каждый человек не может проголосовать за себя.

Каждый человек знает количество голосов \(c_i\), которое он хочет получить. Сколько существует возможных способов провести голосование, так что каждый человек получит желаемое количество голосов? Поскольку это число может быть очень большим, найдите его по модулю \(998\,244\,353\).

Входные данные

В первой строке находится единственное целое число \(n\) (\(1 \leq n \leq 200\)) — количество людей.

Во второй строке находится \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(0 \leq c_i \leq n\)) — желаемые количества голосов. Гарантируется, что \(\sum\limits_{i=1}^{n} c_i = n\).

В третьей строке находится \(n\) целых чисел \(t_1, t_2, \ldots, t_n\) (\(1 \leq t_i \leq n\)) — номера команд.

Выходные данные

Выведите единственное целое число — количество способов провести голосование по модулю \(998\,244\,353\).

Примечание

В первом тесте есть два возможных способа провести голосование: \((2, 3, 1)\), \((3, 1, 2)\).

В третьем тесте есть пять возможных способов провести голосование: \((3, 3, 2, 2, 1)\), \((2, 3, 2, 3, 1)\), \((3, 3, 1, 2, 2)\), \((3, 1, 2, 3, 2)\), \((2, 3, 1, 3, 2)\).

H. Обрезание дерева

битмаски дп поиск в глубину и подобное *3200

Вам дано дерево с \(n\) вершинами.

Герой \(k\) раз делает следующую операцию:

  • Выбрать некоторое ребро.
  • Удалить его.
  • Выбрать одну из двух оставшихся частей и удалить ее.
  • Записать количество вершин в оставшейся части.

Вам дано изначальное дерево и последовательность выписанных чисел. Найдите количество способов сделать операции так, что выписанные числа совпадут с данными числами. Поскольку ответ может быть очень большим, найдите его по модулю \(998\,244\,353\). Два способа считаются различными, если в какой-то операции выбранное ребро или остающаяся часть различаются.

Входные данные

В первой строке находится единственное целое число \(n\) (\(2 \leq n \leq 5000\)) — количество вершин.

Каждая из следующих \(n-1\) строк содержит два целых числа \(s\), \(f\) (\(1 \leq s, f \leq n\), \(s \neq f\)) — описание ребра \((s, f)\).

Следующая строка содержит единственное целое число \(k\) (\(1 \leq k \leq \min{(6, n - 1)}\)) — количество операций.

В следующей строке находится \(k\) целых чисел \(s_1, s_2, \ldots, s_k\) (\(n > s_1 > s_2 > \ldots > s_k \geq 1\)) — выписанные числа.

Выходные данные

Выведите единственное целое число — ответы на задачу по модулю \(998\,244\,353\).

Примечание

В первом тесте есть четыре возможных способа сделать операции:

  • Удалить ребро \((1, 2)\) и удалить вершину \(1\). Удалить ребро \((2, 3)\) и удалить вершину \(2\).
  • Удалить ребро \((1, 2)\) и удалить вершину \(1\). Удалить ребро \((3, 2)\) и удалить вершину \(3\).
  • Удалить ребро \((3, 2)\) и удалить вершину \(3\). Удалить ребро \((1, 2)\) и удалить вершину \(1\).
  • Удалить ребро \((3, 2)\) и удалить вершину \(3\). Удалить ребро \((2, 1)\) и удалить вершину \(2\).

Во втором тесте есть два возможных способа сделать операции:

  • Удалить ребро \((4, 1)\) и удалить часть с вершиной \(4\). Удалить ребро \((2, 3)\) и удалить часть с вершиной \(2\).
  • Удалить ребро \((4, 1)\) и удалить часть с вершиной \(4\). Удалить ребро \((3, 2)\) и удалить часть с вершиной \(3\).

D. Продавец Вася

дп жадные алгоритмы Перебор *2000

В прошлом году Вася подрабатывал продажей компьютерных флешек. В каждый из n дней его работы происходило одно из двух:

  • К Васе приходил покупатель и спрашивал флешку на 2x мегабайт. Если у Васи была такая флешка, он продавал ее и получал 2x бурлей.
  • Вася выигрывал какую-нибудь олимпиаду по программированию и получал в качестве приза флешку на 2x мегабайт. При этом он мог выбрать, подарить ли ему эту флешку кому-то из друзей, или оставить ее себе.

Вася никогда не хранил у себя больше одной флешки, так как боялся перепутать их объемы и случайно кого-нибудь обмануть. Также известно, что для каждого объема флешки было не более одного покупателя, желающего купить такую флешку. Сейчас, зная все запросы покупателей и все призы на олимпиадах по программированию за прошедшие n дней, Васе интересно, сколько денег он мог бы заработать, если бы действовал оптимально.

Входные данные

В первой строке входных данных содержится число n (1 ≤ n ≤ 5000) — сколько дней работал Вася. Следующие n строк содержат описание дней. Строка вида sell x описывает день, в который к Васе приходил покупатель за флешкой на 2x мегабайт (0 ≤ x ≤ 2000). Гарантируется, что для каждого x задано не более одной строки вида sell x. Строка вида win x описывает день, в который Вася выиграл флешку на 2x мегабайт (0 ≤ x ≤ 2000).

Выходные данные

Выведите наибольший возможный заработок Васи в бурлях, если бы он заранее знал все события. Не забудьте, что Вася не может хранить у себя одновременно больше одной флешки.

E. Флаг 2

дп *2000

Согласно очередному стандарту ISO, флаг каждой страны должен представлять собой, как ни странно, клетчатое поле размером n × m, каждая клетка которого целиком покрашена в один из 26 цветов. Накладываются следующие ограничения:

  • В каждой строке должно использоваться не более двух различных цветов.
  • Никакие 2 смежные по стороне клетки не должны быть покрашены в один цвет.

Обратите внимание, что в одном столбце может использоваться более двух различных цветов.

Правительство Берляндии решило привести флаг своей страны в соответствие очередному стандарту, при этом как можно меньше изменив старый флаг. По заданному флагу Берляндии вам требуется найти, какое наименьшее число клеток нужно перекрасить, чтобы флаг соответствовал стандарту ISO. Также требуется построить один из возможных вариантов нового флага Берляндии.

Входные данные

В первой строке входных данных записаны 2 целых числа n и m (1 ≤ n, m ≤ 500) — число строк и столбцов во флаге Берляндии соответственно. Далее следует описание флага: в следующих n строках содержится по m символов. Каждый символ — буква от a до z, обозначает цвет соответствующей клетки.

Выходные данные

В первую строку выходных данных выведите наименьшее число перекрашиваний, требуемое для приведения флага в соответствие новому стандарту ISO. Следующие n строк должны содержать один из возможных вариантов нового флага Берляндии. Не забудьте, что предложенный вами вариант нового флага должен быть получен из старого наименьшим числом перекрашиваний клеток. Если решений несколько выведите любое.

C. Письмо

дп *1400

Петр уже дописал письмо своей возлюбленной Стасе, когда заметил, что оно выглядит не очень красиво. Петр сильно нервничал пока писал письмо, поэтому некоторые буквы получились строчными, а некоторые — прописными.

По мнению Петра, сообщение является красивым, если любая прописная буква стоит левее любой строчной. Иными словами это правило описывает строки, в которых сначала идет ноль или более прописных букв, а затем — ноль или более строчных.

Для приведения письма в красивый вид Петр может замазать некоторую букву и записать эту же букву в этом же месте в противоположном регистре (строчную букву заменить на прописную и наоборот). Петр заинтересовался вопросом — какое наименьшее число действий необходимо, чтобы привести письмо в красивый вид. Одним действием будет считать смену регистра буквы в письме. Никаких других действий Петр совершать не может.

Входные данные

В единственной строке входных данных содержится непустая строка из строчных и прописных латинских букв. Длина строки не превосходит 105.

Выходные данные

Выведите единственное число — наименьшее число действий, необходимое, чтобы письмо стало красивым.

E. Кубики

Бинарный поиск дп *1800

Представьте, что вы играете в следующую несложную компьютерную игру. На экране нарисованы n кубиков, расположенных в ряд. Каждый кубик окрашен в один из m цветов. Вам разрешается удалить не более чем k кубиков (которые не обязательно идут подряд). После этого оставшиеся кубики сомкнутся и будет произведен подсчет очков. Количество очков, которое вы получите, равно длине максимальной последовательности подряд идущих кубиков одного цвета. Напишите программу, определяющую максимально возможное количество очков, которое вы можете получить.

Обратите внимание: разрешается удалять не более k произвольных кубиков, допустимо не удалять кубики вообще.

Входные данные

В первой строке записаны три целых числа n, m и k (1 ≤ n ≤ 2·105, 1 ≤ m ≤ 105, 0 ≤ k < n). Во второй строке записаны n целых чисел от 1 до m — номера цветов кубиков. Номера цветов разделяются одиночными пробелами.

Выходные данные

Выведите максимально возможное количество очков, которое можно набрать.

Примечание

В первом примере следует удалить пятый и шестой кубики.

Во втором примере следует удалить четвертый и седьмой кубики.

В третьем примере следует не удалять ни одного кубика.

C. Музыкальный фестиваль

Бинарный поиск дп жадные алгоритмы сортировки Структуры данных *1900

Мальчик Витя очень любит слушать музыку. Он пристально следит за обновлениями своих любимых групп, поэтому знает, что в эту пятницу должны быть выпущены \(n\) альбомов, \(i\)-й из которых содержит \(k_i\) треков. Разумеется, Витя, как самый преданный фанат, уже послушал все треки, которые должны выйти в ближайшее время, и знает, что в \(i\)-м альбоме крутость \(j\)-го трека равна \(a_{i,j}\).

У Вити есть подруга Маша, которую он очень хочет пригласить на фестиваль, где выступают его любимые группы. Однако для того, чтобы подруга согласилась, она должна сначала оценить вышедшие новинки. Витя знает, что, если Маша послушает трек, который был круче всех прошлых, она получит 1 единицу впечатления. К сожалению, альбомы можно слушать только целиком, не меняя песни в них местами.

Помогите Вите найти такой порядок альбомов, чтобы впечатление Маши оказалось как можно больше, и она точно сходила вместе с ним на фестиваль.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число t (\(1 \le t \le 200\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора дано единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — количество альбомов.

Далее следуют описания альбомов. Каждое описание альбома состоит из двух строк:

В первой строке дано единственное целое число \(k_i\) (\(1 \le k_i \le 200\,000\)) — количество треков в \(i\)-м альбоме.

В следующей строке даны \(k_i\) целых чисел \(a_{i, 1},\ a_{i, 2},\ a_{i, 3},\ \ldots,\ a_{i, k_i}\) (\(1 \le a_{i,j} \le 200\,000\)) — крутость треков в \(i\)-м альбоме.

Обозначим за \(\sum k_i\) сумму по всем \(k_i\). Гарантируется, что \(\sum k_i \le 200\,000\).

Выходные данные

Для каждого тестового набора выведите единственное число — максимальное впечатление, которое может может получить Маша.

Примечание

В первом тестовом примере оптимальным порядком является прослушивание 4-го, 2-го, 3-го и 1-го альбомов. В таком случае Маша послушает треки в следующем порядке: 1; 7; 8, 6; 4, 9, 4, 6, 8 и получит 4 единицы впечатления. Во втором тестовом примере необходимо сначала прослушать 1-й, потом 4-й и в любом порядке 2-й и 3-й. В таком случае Маша получит максимальное впечатление, причём за каждую песню в 1-м и 4-м альбомах и ничего за 2-й и 3-й.

D. Путь домой

Бинарный поиск графы дп жадные алгоритмы кратчайшие пути сортировки Структуры данных *2100

Известный фокусник Боря Будини путешествовал по стране \(X\), которая состоит из \(n\) городов. Однако случилось несчастье, и его обокрали в городе номер \(1\). Теперь Будини предстоит нелегкий путь домой в город \(n\).

Добираться он собирается самолетами. Всего в стране есть \(m\) авиарейсов, \(i\)-й летит из города \(a_i\) в город \(b_i\) и стоит \(s_i\) монет. Обратите внимание, что \(i\)-й рейс односторонний, то есть не может использоваться, чтобы добраться из города \(b_i\) в город \(a_i\). Чтобы им воспользоваться, Боря должен быть в городе \(a_i\) и иметь на руках хотя бы \(s_i\) монет (которые он потратит на перелет).

После ограбления у него осталось всего \(p\) монет, однако он не отчаивается! Находясь в городе \(i\), он может хоть каждый день организовывать представления, которые будут приносить ему по \(w_i\) монет каждый.

Помогите фокуснику узнать, сможет ли он добраться до дома, а также какое минимальное количество представлений придется для этого организовать.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 80\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных содержит три целых числа \(n\), \(m\) и \(p\) (\(2 \le n \le 800\), \(1 \le m \le 3000\), \(0 \le p \le 10^9\)) — количество городов, количество авиарейсов и изначальное количество монет.

Во второй строке каждого набора входных даны \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) \((1 \le w_i \le 10^9)\) — прибыль от представлений.

В следующих \(m\) строках даны по три целых числа \(a_i\), \(b_i\) и \(s_i\) (\(1 \le a_i, b_i \le n\), \(1 \le s_i \le 10^9\)) — начальный и конечный город, а также стоимость \(i\)-го авиарейса.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(800\), а также, что сумма \(m\) по всем наборам входных данных не превосходит \(10000\).

Выходные данные

Для каждого теста выведите единственное целое число — минимальное количество представлений, которое придется организовать Боре, чтобы добраться до дома, или \(-1\), если это сделать невозможно.

Примечание

В первом примере Боре оптимально сделать \(4\) представления в первом городе, имея в итоге \(2 + 7 \cdot 4 = 30\) рублей, а потом пройтись по маршруту \(1-3-2-4\), потратив \(6+8+11=25\) рублей.

Во втором примере Боре оптимально сделать \(15\) представлений в первом городе, полететь в \(3\) город, сделать там \(9\) представлений, и далее отправиться в \(4\) город.

F. Ещё одна n-мерная шоколадка

meet-in-the-middle дп математика теория чисел *2700

Мама купила мальчику Васе \(n\)-мерную шоколадку, представляющую собой \(n\)-мерный куб, у которого длина каждой стороны равна \(1\). У шоколадки намечено разделение на дольки. По \(i\)-му измерению ее можно разделить гиперплоскостями на \(a_i\) равных частей. Таким образом, шоколадка делится суммарно на \(a_1 \cdot a_2 \cdot a_3 \cdot \ldots \cdot a_n\) долек, у каждой дольки длина по \(i\)-му измерению равна \(\frac{1}{a_i}\), соответственно объём каждой дольки равен \(\frac{1}{a_1 a_2 \cdots a_n}\).

Вася с друзьями хочет разрезать шоколадку, чтобы получилось хотя бы \(k\) кусочков, при этом Вася хочет максимизировать объем наименьшего из них. Резать шоколадку можно только по местам соединения долек, причём каждый разрез должен проходить через всю шоколадку вдоль некоторой гиперплоскости, участвующей в образовании долек. Только сделав все разрезы, Вася разбирает шоколадку на кусочки.

Более формально, Вася хочет выбрать числа \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le a_i\)) — количество частей на которые Вася разрежет шоколадку вдоль каждого измерения. Должно выполняться условие \(b_1 \cdot b_2 \cdot \ldots \cdot b_n \ge k\), чтобы получить не менее \(k\) кусочков после всех разрезаний. Можно заметить, что при оптимальном разрезании с такими параметрами, минимальный кусочек будет содержать \(\lfloor \frac{a_1}{b_1} \rfloor \dotsm \lfloor \frac{a_n}{b_n} \rfloor\) долек, а его объём будет равен \(\lfloor \frac{a_1}{b_1} \rfloor \dotsm \lfloor \frac{a_n}{b_n} \rfloor \cdot \frac{1}{a_1 a_2 \cdots a_n}\).

Вася хочет получить максимальное возможное значение объема минимального кусочка, умноженного на \(k\), то есть он хочет максимизировать число \(\lfloor \frac{a_1}{b_1} \rfloor \dotsm \lfloor \frac{a_n}{b_n} \rfloor \cdot \frac{1}{a_1 a_2 \cdots a_n} \cdot k\). Помогите ему в этом.

Входные данные

В первой строке даны два целых числа \(n\) и \(k\) \((1 \le n \le 100\), \(1 \le k \le 10^7)\) — размерность шоколадки, и на сколько частей её нужно поделить.

Во второй строке даны \(n\) целых чисел \(a_1,\ a_2,\ \dots,\ a_n\) \((1 \le a_i \le 10^7)\) — количество кусочков, на которое размечена шоколадка вдоль каждого из измерений.

Выходные данные

Выведите одно число — максимальный возможный объём наименьшего из полученных кусочков, умноженный на \(k\), с абсолютной или относительной погрешностью не более \(10^{-9}\).

Если при заданных ограничениях разрезать шоколадку хотя бы на \(k\) кусочков невозможно, выведите \(0\).

Примечание

В первом примере одномерную шоколадку можно разделить так:

Тогда ответ будет \(\frac{2}{5} \cdot 2 = 0.8\)

Во втором примере шоколадку можно разрезать следующим образом:

Тогда ответ будет \(\frac{2}{5} \cdot \frac{3}{10} \cdot 6 = 0.72\)

В третьем примере шоколадку можно разрезать следующим образом:

Тогда ответ будет \(\frac{2}{4} \cdot \frac{1}{4} \cdot 7 = 0.875\)

D. Размещение

дп жадные алгоритмы Перебор реализация *2000

Энни — фотограф-любитель. Ей нравится фотографировать гигантские жилые дома ночью. Она только что сфотографировала огромное прямоугольное здание, которое можно представить как таблицу из \(n \times m\) окон. Это означает, что в здании \(n\) этажей и на каждом этаже ровно \(m\) окон. Каждое окно либо тёмное, либо светлое, то есть в комнате за ним горит свет.

Энни знает, что каждая квартира в этом доме либо однокомнатная, либо двухкомнатная. Каждая однокомнатная квартира представлена на фотографии ровно одним окном, а каждая двухкомнатная квартира представлена на фотографии двумя подряд идущими окнами на одном этаже. Более того, \(m\) гарантированно делится на \(4\) и известно, что на каждом этаже ровно \(\frac{m}{4}\) двухкомнатных квартир и ровно \(\frac{m}{2}\) однокомнатных квартир. Точное расположение квартир неизвестно и может быть разным для каждого этажа.

Энни считает, что квартира заселена, если хотя бы в одном из её окон горит свет. Теперь она задаётся вопросом, какое может быть минимальное и максимальное количество заселённых квартир в доме, если судить по данной фотографии?

Формально, для каждого из этажей Энни придумывает возможное расположение квартир, в котором есть ровно \(\frac{m}{4}\) двухкомнатных квартир (два последовательных окна) и \(\frac{m}{2}\) однокомнатных квартир (одно окно). Затем она подсчитывает общее количество квартир, в которых есть хотя бы одно светлое окно. Какое минимальное и максимальное число она может получить?

Входные данные

Первая строка входных данных содержит два положительных целых числа \(n\) и \(m\) (\(1 \leq n \cdot m \leq 5 \cdot 10^5\)) — количество этажей в здании и количество окон на этаже соответственно. Гарантируется, что \(m\) делится на \(4\).

Затем следует \(n\) строк, каждая из которых содержит \(m\) символов. \(j\)-й символ \(i\)-й строки равен «0», если \(j\)-е окно на \(i\)-м этаже тёмное, и равен «1», если это окно светлое.

Выходные данные

Выведите два целых числа, минимальное и максимальное возможное количество заселённых квартир, если на каждом этаже возможно своё собственное расположение \(\frac{m}{4}\) двухкомнатных и \(\frac{m}{2}\) однокомнатных квартир.

Примечание

В первом примере каждый этаж состоит из одной двухкомнатной квартиры и двух однокомнатных квартир.

При следующей планировке квартир достигается минимально возможное количество заселённых квартир, равное \(7\).


|0 1|0|0|
|1 1|0|0|
|0|1 1|0|
|1|0 1|0|
|1|0|1 1|

При следующей планировке квартир достигается максимально возможное количество заселённых квартир, равное \(10\).


|0 1|0|0|
|1|1 0|0|
|0 1|1|0|
|1|0 1|0|
|1 0|1|1|

E. Маршрутизация

битмаски графы дп Перебор поиск в глубину и подобное *2400

Ада управляет сетью, состоящей из \(n\) серверов и \(m\) прямых соединений между ними. Каждое прямое соединение между парой различных серверов позволяет осуществлять двустороннюю передачу информации между этими двумя серверами. Ада знает, что с помощью этих \(m\) прямых соединений возможна передача информации между любыми двумя серверами в этой сети (напрямую или через промежуточные серверы). Будем называть сервер \(v\) соседом сервера \(u\), если существует прямое соединение между этими двумя серверами.

Аде нужно настроить в своей сети WRP (Weird Routing Protocol — Странный протокол маршрутизации). Для каждого сервера \(u\) ей нужно выбрать ровно одного соседа и назначить его вспомогательным сервером \(a(u)\). Рассмотрим процесс того, как будет работать маршрутизация после определения всех \(a(u)\). Предположим, сервер \(u\) хочет найти путь до сервера \(v\), отличного от \(u\).

  • Сервер \(u\) смотрит на все свои прямые соединения с другими серверами. Если он видит прямое соединение с сервером \(v\), он знает путь и процесс завершается.
  • Если путь не был найден на первом шаге, сервер \(u\) запрашивает поиск пути у своего вспомогательного сервера \(a(u)\).
  • Вспомогательный сервер \(a(u)\) следует этому процессу, начиная с первого шага.
  • После того, как \(a(u)\) находит путь, он возвращает его \(u\). Затем сервер \(u\) строит результирующий путь как объединение прямого соединения между \(u\) и \(a(u)\) и пути от \(a(u)\) до \(v\).

Как видите, эта процедура либо создает правильный путь и завершается, либо работает вечно. Таким образом, для Ады крайне важно правильно настроить WRP своей сети.

Ваша цель — назначить вспомогательный сервер \(a(u)\) для каждого сервера \(u\) в данной сети таким образом, чтобы WRP мог построить путь от любого сервера \(u\) к любому другому серверу \(v\), используя вышеупомянутую процедуру. Или же требуется определить, что такое назначение вспомогательных серверов невозможно.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 20\), \(n - 1 \leq m \leq \frac{n \cdot (n - 1)}{2}\)) — количество серверов и количество прямых соединений в данной сети.

Далее следуют \(m\) строк, содержащих по два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \ne v_i\)), \(i\)-я строка описывает \(i\)-е прямое соединение.

Гарантируется, что между любыми двумя серверами существует не более одного прямого соединения. Гарантируется, что существует прямой или непрямой маршрут (состоящий только из заданных прямых соединений) между любыми двумя серверами.

Выходные данные

Если нет возможности назначить вспомогательный сервер \(a(u)\) для каждого сервера \(u\) таким образом, чтобы WRP смог найти путь от любого сервера \(u\) к любому другому серверу \(v\), выведите «No» в единственной строке вывода.

В противном случае выведите «Yes» в первой строке вывода. Во второй строке выведите \(n\) целых чисел, \(i\)-е из которых должно быть равно \(a(i)\) – номеру вспомогательного сервера для сервера \(i\). Не забывайте, что должно быть прямое соединение между сервером \(i\) и сервером \(a(i)\).

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

H. Кодовый замок

битмаски дп *3300

У Лары есть сейф, который запирается кодовым замком в форме круга, состоящим из вращающейся стрелки, статической окружности вокруг стрелки, экрана ввода и кнопки ввода.

Окружность замка разбита на \(k\) равных секторов, пронумерованных от \(1\) до \(k\) по часовой стрелке, вращающаяся стрелка всегда указывает на один из этих секторов. Каждому сектору соответствует одна из первых \(k\) букв английского алфавита, причём никаким двум секторам не соответствует одна и та же буква.

Из-за ограничений устройства сейфа пароль от него представляет собой строку длины \(n\), состоящую из только первых \(k\) букв английского алфавита. Лара вводит пароль поворачивая стрелку замка и нажимая кнопку ввода. Изначально стрелка замка указывает на секцию \(1\), а экран ввода пуст, далее за одну секунду Лара может выполнить одно из следующих действий.

  • Повернуть стрелку на один сектор по часовой стрелке. Если стрелка указывала на сектор \(x < k\), то теперь она будет указывать на сектор \(x + 1\). Если же стрелка указывала на сектор \(k\), то теперь она будет указывать на сектор \(1\).
  • Повернуть стрелку на один сектор против часовой стрелки. Если стрелка указывала на сектор \(x > 1\), то теперь она будет указывать на сектор \(x - 1\). Если стрелка указывала на сектор \(1\), то теперь она будет указывать на сектор \(k\).
  • Нажать на кнопку ввода. В конец содержимого экрана ввода добавляется буква, соответствующая сектору, на который указывает сейчас стрелка.

Как только содержимое экрана ввода совпадёт с паролем, сейф откроется. Лара всегда действует таким образом, чтобы вводить свой пароль за минимально возможное время.

Недавно Лара узнала, что сейф можно перепрограммировать. Она может взять первые \(k\) букв английского алфавита и переназначить их секторам в произвольном порядке. Теперь она хочет переназначить буквы таким образом, чтобы свести к минимуму количество секунд, необходимых ей для ввода пароля. Вычислите это минимально возможное количество секунд, а также вычислите количество способов расставить буквы по секторам, для которых это минимальное количество секунд будет достигаться.

Два способа назначения букв секторам считаются различными, если существует хотя бы один сектор \(i\), которому в этих способах назначены разные буквы.

Входные данные

Первая строка входных данных содержит два целых числа \(k\) и \(n\) (\(2 \leq k \leq 16\), \(2 \leq n \leq 100\,000\)) — количество секторов на окружности замка и длину пароля Лары соответственно.

Вторая строка входных данных содержит строку длины \(n\), состоящую только из первых \(k\) строчных букв английского алфавита. Эта строка является паролем.

Выходные данные

В первой строке выведите минимально возможное количество секунд, за которое Лара введёт пароль и откроет сейф, если она оптимально расставит буквы по секторам.

Во второй строке выведите количество способов оптимально расставить буквы.

Примечание

Начальные состояния оптимальных способов для первого примера показаны на рисунке ниже.

Начальные состояния оптимальных способов для второго примера показаны на рисунке ниже.

Начальные состояния оптимальных способов для третьего примера показаны на рисунке ниже.

D. Широкий-преширокий граф

графы Деревья дп жадные алгоритмы поиск в глубину и подобное *1800

Дано дерево (связный граф без циклов) на \(n\) вершинах.

Зафиксируем число \(k\). Назовем графом \(G_k\) граф на \(n\) вершинах, в котором между вершинами \(u\) и \(v\) есть ребро тогда и только тогда, когда расстояние между вершинами \(u\) и \(v\) в данном дереве не меньше \(k\).

Для каждого \(k\) от \(1\) до \(n\) выведите количество компонент связности в графе \(G_k\).

Входные данные

В первой строке дано целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в графе.

В каждой из следующих \(n-1\) строк содержатся два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)), обозначающие ребро между вершинами \(u\) и \(v\) в дереве. Гарантируется, что данные ребра задают корректное дерево.

Выходные данные

Выведите \(n\) целых чисел — количество компонент связности в графе \(G_k\) для каждого \(k\) от \(1\) до \(n\).

Примечание

В первом примере: При \(k=1\) в графе будет ребро между каждой парой вершин, поэтому в нём будет одна компонента. При \(k=4\) в графе будут только рёбра \(4 \leftrightarrow 6\) и \(5 \leftrightarrow 6\), поэтому в графе будет \(4\) компоненты.

Во втором примере: при \(k=1\) и \(k=2\) в графе одна компонента. При \(k=3\) граф \(G_k\) разбивается на \(3\) компоненты: в одной компоненте вершины \(1\), \(4\) и \(5\), а ещё две компоненты содержат по одной вершине. При \(k=4\) и \(k=5\) каждая вершина является отдельной компонентой.

E. Максимумов должно быть много

Деревья дп Перебор поиск в глубину и подобное Структуры данных *2300

Дано дерево (связный граф без циклов). В каждой вершине дерева записано число. Назовём характеристикой \(\mathrm{MAD}\) (maximum double) дерева максимальное число, которое встречается в вершинах этого дерева хотя бы \(2\) раза. Если же никакое число не встречается в дереве больше одного раза, то положим \(\mathrm{MAD}=0\).

Заметим, что если удалить ребро из дерева, то оно распадётся на два дерева. Вычислим \(\mathrm{MAD}\) в каждом из деревьев и возьмем максимум из этих двух значений. Полученный результат назовем значением удаленного ребра.

Для каждого ребра найдите его значение. Обратите внимание, что мы в действительности не удаляем ребра из дерева, и каждое значение должно быть вычислено независимо.

Входные данные

В первой строке находится одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в дереве.

Далее в \(n - 1\) строке находятся по два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)) — концы рёбер дерева. Гарантируется, что данные ребра образуют дерево.

В последней строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — числа, записанные в вершинах.

Выходные данные

Для каждого ребра в порядке ввода выведите одно число — максимум из \(\mathrm{MAD}\) двух деревьев, получающихся после удаления из начального дерева данного ребра.

Примечание

В первом примере после удаления ребра \((1, 2)\) ни в одном из получившихся поддеревьев никакое число не будет повторяться \(2\) раза, поэтому ответ равен \(\max(0, 0)=0\).

После удаления ребра \((2, 3)\) в бо́льшем поддереве будет два раза повторяться \(1\) и два раза повторяться \(2\), поэтому \(\mathrm{MAD}\) этого дерева будет равен \(2\).

После удаления ребра \((2, 4)\) в бо́льшем поддереве будет повторяться только число \(1\), а во втором будет только одно число, поэтому ответом будет \(1\).

Во втором примере, если ребро \(1 \leftrightarrow 4\) не удалено, то в одном из поддеревьев будет две \(1\), поэтому ответ — \(1\). А если удалено ребро \(1 \leftrightarrow 4\), то в обоих поддеревьях нет повторяющихся значений, поэтому ответом будет \(0\).

D. Мастер СНМ

дп Комбинаторика математика снм *2500

Вам дано целое число \(n\) и массив \(a\) длины \(n-1\), элементы которого либо \(0\), либо \(1\).

Определим стоимость перестановки \(^\dagger\) \(p\) длины \(m-1\) (\(m \leq n\)) следующим образом.

Пусть \(G\) - граф из \(m\) вершин с номерами от \(1\) до \(m\), не содержащий ребер. Для каждого \(i\) от \(1\) до \(m-1\) выполните следующие операции:

  • определим \(u\) и \(v\) как (различные) вершины с только входящими ребрами\(^{\dagger\dagger}\) в компонентах слабой связности \(^\ddagger\), содержащих вершины \(p_i\) и \(p_i+1\) соответственно
  • в графе \(G\), добавим направленное ребро из вершины \(v\) в \(u\), если \(a_{p_i}=0\), иначе добавим направленное ребро из вершины \(u\) в \(v\) (если \(a_{p_i}=1\)).
Заметим, что после каждого шага можно показать, что каждая компонента слабой связности \(G\) имеет ровно одну вершину с только входящими рёбрами.

Тогда, значение \(p\) — это количество входящих ребер \(G\) в вершину \(1\).

Для каждого \(k\) от \(1\) до \(n-1\) найдите сумму стоимостей всех \(k!\) перестановок длины \(k\). Поскольку эта величина может быть большой, от вас требуется вычислить ее только по модулю \(998\,244\,353\).

Операции при \(n=3\), \(a=[0,1]\) и \(p=[1,2]\)

\(^\dagger\) Перестановка длины \(n\) - это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) - перестановка, но \([1,2,2]\) - не перестановка (\(2\) встречается в массиве дважды), и \([1,3,4]\) - тоже не перестановка (\(n=3\), но в массиве есть \(4\)).

\(^\ddagger\) Компоненты слабой связности направленного графа — это то же самое, что и компоненты неориентированной версии графа. Формально, для направленного графа \(G\) определите граф \(H\), где для всех ребер \(a \to b\) в \(G\) добавляется неориентированное ребро \(a \leftrightarrow b\) в \(H\). Тогда компоненты слабой связности \(G\) являются компонентами \(H\).

\(^{\dagger\dagger}\) Заметим, что вершина, не имеющая ребер, считается имеющей только входящие ребра.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(2\le n\le 5 \cdot 10^5\)).

Вторая строка содержит \(n-1\) чисел \(a_1, a_2, \ldots, a_{n-1}\) (\(a_i\) равно \(0\) или \(1\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n-1\) целых чисел в строке. \(i\)-е число является ответом для \(k=i\), по модулю \(998\,244\,353\).

Примечание

Рассмотрим первый набор входных данных.

Когда \(k=1\), существует только \(1\) перестановка \(p\).

  • Когда \(p=[1]\), мы добавим одно ребро из вершины \(2\) в \(1\). Вершина \(1\) будет иметь \(1\) входящее ребро. Поэтому значение \([1]\) равно \(1\).

Поэтому, когда \(k=1\), ответ равен \(1\).

Когда \(k=2\), существует \(2\) перестановки \(p\).

  • Когда \(p=[1,2]\), мы добавим ребро из вершины \(2\) в \(1\) и ребро из \(3\) в \(1\). Вершина \(1\) будет иметь \(2\) входящих ребер. Таким образом, значение \([1,2]\) равно \(2\).
  • Когда \(p=[2,1]\), мы добавим ребро из вершины \(3\) в \(2\) и ребро из \(2\) в \(1\). Вершина \(1\) будет иметь входящее ребро \(1\). Таким образом, значение \([2,1]\) равно \(1\).

Поэтому, когда \(k=2\), ответ будет \(2+1=3\).

G1. Последовательное сложение (простая версия)

дп жадные алгоритмы Перебор реализация сортировки Структуры данных *1100

Единственное различие между двумя версиями в том, что в этой версии ограничения ниже.

Изначально массив \(a\) содержит только число \(1\). Вы можете выполнить несколько операций, чтобы изменить массив. За одну операцию можно выбрать некоторую подпоследовательность \(^{\dagger}\) из \(a\) и вставить на любую позицию в \(a\) элемент, равный сумме всех элементов подпоследовательности.

Вам дан массив \(c\). Проверьте, можно ли получить из массива \(a\) массив \(c\), выполнив некоторое количество (возможно, 0) операций над исходным массивом.

\(^{\dagger}\) Последовательность \(b\) является подпоследовательностью последовательности \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, нуля, но не всех) элементов. Другими словами, операция выглядит так: выберем \(k\) (\(1 \leq k \leq |a|\)) различных индексов \(i_1, i_2, \dots, i_k\) и вставим в любое место \(a\) новый элемент со значением, равным \(a_{i_1} + a_{i_2} + \dots + a_{i_k}\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 5000\)) — длину массива \(c\).

Вторая строка каждого набора входных данных содержит \(n\) разделенных пробелами целых чисел \(c_i\) (\(1 \leq c_i \leq 5000\)) — массив \(c\), который вам нужно получить из массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если такая последовательность операций существует, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для первого набора входных данных исходный массив \(a\) уже равен \([1]\), поэтому ответ «YES».

Для второго набора входных данных после выполнения любого количества операций длина массива \(a\) станет хотя бы два, а в начальном массиве элемента \(2\) нет, поэтому получить массив \([2]\) невозможно, и ответ будет «NO».

Для третьего набора входных данных мы можем выполнить следующие операции, чтобы получить массив \(c\):

  • Первоначально, \(a = [1]\).
  • Выбрав подпоследовательность \([1]\) и вставив \(1\) в массив, \(a\) станет равным \([1, 1]\).
  • Выбрав подпоследовательность \([1, 1]\) и вставив \(1+1=2\) в середину массива, \(a\) станет равным \([1, 2, 1]\).
  • Выбрав подпоследовательность \([1, 2]\) и вставив \(1+2=3\) после первой \(1\) массива, \(a\) станет равным \([1, 3, 2, 1]\).
  • Выбрав подпоследовательность \([1, 3, 1]\) и вставив \(1+3+1=5\) в начало массива, \(a\) станет равным \([5, 1, 3, 2, 1]\) (именно такой массив нам нужно было получить).

G2. Последовательное сложение (сложная версия)

битмаски дп жадные алгоритмы реализация сортировки *1100

Единственное различие между двумя версиями в том, что в этой версии ограничения выше.

Изначально массив \(a\) содержит только число \(1\). Вы можете выполнить несколько операций, чтобы изменить массив. За одну операцию можно выбрать некоторую подпоследовательность \(^{\dagger}\) из \(a\) и вставить на любую позицию в \(a\) элемент, равный сумме всех элементов подпоследовательности.

Вам дан массив \(c\). Проверьте, можно ли получить из массива \(a\) массив \(c\), выполнив некоторое количество (возможно, 0) операций над исходным массивом.

\(^{\dagger}\) Последовательность \(b\) является подпоследовательностью последовательности \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, нуля, но не всех) элементов. Другими словами, операция выглядит так: выберем \(k\) (\(1 \leq k \leq |a|\)) различных индексов \(i_1, i_2, \dots, i_k\) и вставим в любое место \(a\) новый элемент со значением, равным \(a_{i_1} + a_{i_2} + \dots + a_{i_k}\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину массива \(c\).

Вторая строка каждого набора входных данных содержит \(n\) разделенных пробелами целых чисел \(c_i\) (\(1 \leq c_i \leq 2 \cdot 10^5\)) — массив \(c\), который вам нужно получить из массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если такая последовательность операций существует, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для первого набора входных данных исходный массив \(a\) уже равен \([1]\), поэтому ответ «YES».

Для второго набора входных данных после выполнения любого количества операций длина массива \(a\) станет хотя бы два, а в начальном массиве элемента \(2\) нет, поэтому получить массив \([2]\) невозможно, и ответ будет «NO».

Для третьего набора входных данных мы можем выполнить следующие операции, чтобы получить массив \(c\):

  • Первоначально, \(a = [1]\).
  • Выбрав подпоследовательность \([1]\) и вставив \(1\) в массив, \(a\) станет равным \([1, 1]\).
  • Выбрав подпоследовательность \([1, 1]\) и вставив \(1+1=2\) в середину массива, \(a\) станет равным \([1, 2, 1]\).
  • Выбрав подпоследовательность \([1, 2]\) и вставив \(1+2=3\) после первой \(1\) массива, \(a\) станет равным \([1, 3, 2, 1]\).
  • Выбрав подпоследовательность \([1, 3, 1]\) и вставив \(1+3+1=5\) в начало массива, \(a\) станет равным \([5, 1, 3, 2, 1]\) (именно такой массив нам нужно было получить).

C. Неудачливые номера

дп жадные алгоритмы Перебор реализация *1900

В этой задаче, в отличие от задачи А, требуется искать наименее удачливый номер, а не наиболее удачливый.

Обратите внимание, что ограничения на эту задачу отличаются от ограничений на задачу А.

В городе Олимп-Сити недавно запустили производство персональных звездолетов. Теперь каждый житель Марса сможет купить себе такое средство передвижения и недорого летать на другие планеты.

Естественно, у каждого звездолета есть номер — некоторое целое положительное число \(x\). Назовем удачливостью числа \(x\) разность между наибольшей и наименьшей цифрами этого числа. Например, у числа \(142857\) наибольшая цифра равна \(8\), а наименьшая — \(1\), поэтому его удачливость равна \(8-1=7\). А у числа \(111\) все цифры равны \(1\), поэтому его удачливость равна нулю.

Лаксап — известный марсианский блогер, который часто летает в разные уголки Солнечной системы. Чтобы выпускать интересные видео еще быстрее, он решил купить себе звездолет. Придя в магазин, он увидел звездолеты с номерами с \(l\) по \(r\) включительно. Находясь в магазине, Лаксап заинтересовался, какие из звездолетов имеют наименее удачливые номера.

Поскольку звездолетов в магазине много, а Лаксап не умеет программировать, то Вы должны помочь блогеру и написать программу, которая отвечает на его вопрос.

Входные данные

В первой строке находится целое число \(t\) (\(1 \le t \le 600\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк находится описание набора входных данных. Описание состоит из двух целых чисел \(l\), \(r\) (\(1 \le l \le r \le 10^{18}\)) — наибольший и наименьший номера звездолета в магазине.

Выходные данные

Выведите \(t\) строк, по одной строке на каждый набор входных данных, содержащую номер наименее удачливого звездолета в магазине.

Если способов выбрать наименее удачливый номер несколько, то выведите любой из них.

Примечание

Рассмотрим первые два набора входных данных.

  • удачливость числа \(59\) равна \(9 - 5 = 4\);
  • удачливость числа \(60\) равна \(6 - 0 = 6\);
  • удачливость числа \(61\) равна \(6 - 1 = 5\);
  • удачливость числа \(62\) равна \(6 - 2 = 4\);
  • удачливость числа \(63\) равна \(6 - 3 = 3\).
Таким образом, наименее удачливый номер — \(63\).

В пятом тестовом примере наименьшую удачливость имеют числа \(1\), \(2\), \(3\), \(4\), \(5\), \(6\), \(7\), \(8\), \(9\), \(11\), \(22\), \(33\), \(44\), \(55\), \(66\), \(77\), \(88\), \(99\), поэтому разрешается вывести любое из них.

E1. Маршрутки на Венере (простая версия)

дп Комбинаторика разделяй и властвуй *2200

Это простая версия задачи. Различия между версиями заключаются в ограничениях на \(n\) и \(k\). Вы можете делать взломы, только если все три версии задачи сданы.

Максим — водитель маршрутки на планете Венера.

Чтобы проехаться на маршрутке Максима, необходимо иметь билет. У каждого билета есть номер, состоящий из \(n\) цифр. Но, как известно, жители Венеры пользуются не десятичной системой счисления, а системой счисления по основанию \(k\). Поэтому можно считать, что номер билета — это последовательность из \(n\) целых чисел от \(0\) до \(k-1\) включительно.

Жители Венеры считают билет счастливым, если на нем найдется цифра, равная сумме остальных цифр по модулю \(k\). Например, если \(k=10\), то билет \(7135\) является счастливым, поскольку \(7 + 1 + 5 \equiv 3 \pmod{10}\). С другой стороны, билет \(7136\) счастливым не является, поскольку ни одна цифра не равна сумме всех остальных по модулю \(10\).

Однажды Максим, выполняя очередную поездку, задумался: а сколько всего существует счастливых билетов? При этом Максим понимает, что это число может быть очень велико, поэтому его интересует лишь остаток от деления ответа на некоторое простое число \(m\).

Входные данные

В единственной строке входных данных находится три целых числа \(n\), \(k\) и \(m\) (\(1 \le n \le 100\), \(1 \le k \le 30\), \(10^8 \le m \le 10^9 + 7\), \(m\) — простое) — количество цифр на билете, основание системы счисления на Венере, и модуль, по которому надо найти ответ.

Выходные данные

Выведите одно целое число — количество счастливых билетов по модулю \(m\), т. е. остаток от деления ответа на \(m\).

Примечание

В первом примере существует всего четыре счастливых билета: \(000\), \(011\), \(101\) и \(110\).

E2. Маршрутки на Венере (средняя версия)

дп Комбинаторика матрицы разделяй и властвуй *2500

Это средняя версия задачи. Различия между версиями заключаются в ограничениях на \(n\) и \(k\). Вы можете делать взломы, только если все три версии задачи сданы.

Максим — водитель маршрутки на планете Венера.

Чтобы проехаться на маршрутке Максима, необходимо иметь билет. У каждого билета есть номер, состоящий из \(n\) цифр. Но, как известно, жители Венеры пользуются не десятичной системой счисления, а системой счисления по основанию \(k\). Поэтому можно считать, что номер билета — это последовательность из \(n\) целых чисел от \(0\) до \(k-1\) включительно.

Жители Венеры считают билет счастливым, если на нем найдется цифра, равная сумме остальных цифр по модулю \(k\). Например, если \(k=10\), то билет \(7135\) является счастливым, поскольку \(7 + 1 + 5 \equiv 3 \pmod{10}\). С другой стороны, билет \(7136\) счастливым не является, поскольку ни одна цифра не равна сумме всех остальных по модулю \(10\).

Однажды Максим, выполняя очередную поездку, задумался: а сколько всего существует счастливых билетов? При этом Максим понимает, что это число может быть очень велико, поэтому его интересует лишь остаток от деления ответа на некоторое простое число \(m\).

Входные данные

В единственной строке входных данных находится три целых числа \(n\), \(k\) и \(m\) (\(1 \le n \le 10^{18}\), \(1 \le k \le 100\), \(10^8 \le m \le 10^9 + 7\), \(m\) — простое) — количество цифр на билете, основание системы счисления на Венере, и модуль, по которому надо найти ответ.

Выходные данные

Выведите одно целое число — количество счастливых билетов по модулю \(m\), т. е. остаток от деления ответа на \(m\).

Примечание

В первом примере существует всего четыре счастливых билета: \(000\), \(011\), \(101\) и \(110\).

E3. Маршрутки на Венере (сложная версия)

дп Комбинаторика математика Перебор *2800

Это сложная версия задачи. Различия между версиями заключаются в ограничениях на \(n\) и \(k\). Вы можете делать взломы, только если все три версии задачи сданы.

Максим — водитель маршрутки на планете Венера.

Чтобы проехаться на маршрутке Максима, необходимо иметь билет. У каждого билета есть номер, состоящий из \(n\) цифр. Но, как известно, жители Венеры пользуются не десятичной системой счисления, а системой счисления по основанию \(k\). Поэтому можно считать, что номер билета — это последовательность из \(n\) целых чисел от \(0\) до \(k-1\) включительно.

Жители Венеры считают билет счастливым, если на нем найдется цифра, равная сумме остальных цифр по модулю \(k\). Например, если \(k=10\), то билет \(7135\) является счастливым, поскольку \(7 + 1 + 5 \equiv 3 \pmod{10}\). С другой стороны, билет \(7136\) счастливым не является, поскольку ни одна цифра не равна сумме всех остальных по модулю \(10\).

Однажды Максим, выполняя очередную поездку, задумался: а сколько всего существует счастливых билетов? При этом Максим понимает, что это число может быть очень велико, поэтому его интересует лишь остаток от деления ответа на некоторое простое число \(m\).

Входные данные

В единственной строке входных данных находится три целых числа \(n\), \(k\) и \(m\) (\(1 \le n \le 10^{18}\), \(1 \le k \le 2000\), \(10^8 \le m \le 10^9 + 7\), \(m\) — простое) — количество цифр на билете, основание системы счисления на Венере, и модуль, по которому надо найти ответ.

Выходные данные

Выведите одно целое число — количество счастливых билетов по модулю \(m\), т. е. остаток от деления ответа на \(m\).

Примечание

В первом примере существует всего четыре счастливых билета: \(000\), \(011\), \(101\) и \(110\).

E. Две бочки

Бинарный поиск дп математика реализация *2400

Есть две бочки — в первую помещается \(a\) литров воды, во вторую помещается \(b\) литров воды. В первой бочке изначально \(c\) (\(0 \le c \le a\)) литров воды, во второй бочке изначально \(d\) (\(0 \le d \le b\)) литров воды.

Вы хотите провести \(n\) действий над ними. \(i\)-е действие задается одним ненулевым целым числом \(v_i\). Если \(v_i > 0\), то вы пытаетесь налить \(v_i\) литров воды из первой бочки во вторую. Если \(v_i < 0\), то вы пытаетесь налить \(-v_i\) литров воды из второй бочки в первую.

Когда вы пытаетесь налить \(x\) литров воды из бочки, в которой сейчас \(y\) литров воды, в бочку, в которой может поместиться еще \(z\) литров воды, то за действие вы перельете только \(\min(x, y, z)\) литров воды.

Для всех пар начальных объемов воды \((c, d)\) таких, что \(0 \le c \le a\) и \(0 \le d \le b\), посчитайте объем воды в первой бочке после применения всех действий.

Входные данные

В первой строке записаны три целых числа \(n, a\) и \(b\) (\(1 \le n \le 10^4\); \(1 \le a, b \le 1000\)) — количество действий и вместимости бочек, соответственно.

Во второй строке записаны \(n\) целых чисел \(v_1, v_2, \dots, v_n\) (\(-1000 \le v_i \le 1000\); \(v_i \neq 0\)) — объем воды, который вы пытаетесь перелить в каждом действии.

Выходные данные

Для всех пар начальных объемов воды \((c, d)\) таких, что \(0 \le c \le a\) и \(0 \le d \le b\), посчитайте объем воды в первой бочке после применения всех действий.

Выведите \(a + 1\) строку, в каждой строке должно быть \(b + 1\) целых чисел. \(j\)-е значение в \(i\)-й строке должно быть ответом для \(c = i - 1\) и \(d = j - 1\).

Примечание

Рассмотрим \(c = 3\) и \(d = 2\) из первого примера:

  • В первом действии вы пытаетесь перелить \(2\) литра воды из второй бочки в первую, во второй бочке есть \(2\) литра воды, в первую поместится еще \(1\) литр. Поэтому переливается \(\min(2, 2, 1) = 1\) литр, в первой бочке теперь \(4\) литра, во второй \(1\) литр.
  • Во втором действии вы пытаетесь перелить \(1\) литр воды из первой бочки во вторую. Переливается \(\min(1, 4, 3) = 1\) литр, в первой бочке теперь \(3\) литра, во второй \(2\) литра.
  • В третьем действии вы пытаетесь перелить \(2\) литра воды из первой бочки во вторую. Переливается \(\min(2, 3, 2) = 2\) литра, в первой бочке теперь \(1\) литр, во второй \(4\) литра.

В конце в первой бочке \(1\) литр воды. Поэтому третье значение в четвертой строке равно \(1\).

G. Прогноз

дп Комбинаторика математика *2800

Рассмотрим турнир, в котором участвуют \(n\) спортсменов. Рейтинг \(i\)-го спортсмена равен \(a_i\).

Турнир проходит следующим образом. Сначала каждому спортсмену присваивается индекс — целое число от \(1\) до \(n\). Все индексы различны. Обозначим за \(p_i\) спортсмена с индексом \(i\).

Затем организаторы проведут \(n-1\) игр. В первой игре будут соревноваться спортсмены \(p_1\) и \(p_2\). Во второй — победитель первой игры и спортсмен \(p_3\). В третьей — победитель второй игры и спортсмен \(p_4\), и так далее — в последней игре будут соревноваться победитель игры \((n-2)\) и спортсмен \(p_n\).

Монокарп хочет спрогнозировать результаты каждой из \(n-1\) игр (конечно, он сформирует свой прогноз только после того, как все спортсмены получат свои индексы). Он знает, что когда в игре соревнуются спортсмены с рейтингами \(x\) и \(y\), и при этом \(|x - y| > k\), спортсмен с более высоким рейтингом обязательно побеждает. Но если \(|x - y| \le k\), победить может любой из двух спортсменов.

Среди всех \(n!\) способов назначить индексы участникам посчитайте количество таких способов, что Монокарп может точно спрогнозировать результат каждой из \(n-1\) игр. Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Входные данные

В первой строке заданы два целых числа \(n\) и \(k\) (\(2 \le n \le 10^6\); \(0 \le k \le 10^9\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_1 \le a_2 \le \dots \le a_n \le 10^9\)).

Выходные данные

Выведите одно целое число — количество способов назначить участникам индексы так, чтобы Монокарп мог точно предсказать результат каждой из \(n-1\) игр.

Примечание

В первом примере Монокарп точно знает результат игры между любой парой игроков, поэтому все \(24\) способа назначить индексы игрокам подходят.

Во втором примере подходящие способы назначить индексы — такие: \([1, 3, 2]\), \([2, 3, 1]\), \([3, 1, 2\)] и \([3, 2, 1]\).

G. Максимальный префикс

дп *3200

Вы собираетесь сгенерировать массив \(a\) длиной не более \(n\), где каждый элемент \(a_{i}\) равен либо \(1\), либо \(-1\).

Вы генерируете этот массив следующим способом.

  • Сначала вы выбираете некоторое \(k\) (\(1\le k \le n\)), которое определяет длину \(a\).
  • Далее для каждого \(i\) (\(1\le i \le k\)) вы устанавливаете \(a_{i} = 1\) с вероятностью \(p_{i}\), в противном случае вы устанавливаете \(a_{i} = -1\) (с вероятностью \(1 - p_{i}\)).

После того, как массив сгенерирован, вы вычисляете \(s_{i} = a_{1} + a_{2} + a_{3}+ \ldots + a_{i}\). Отдельно положим \(s_{0} = 0\). Затем вы вычисляете \(S\) как \(\displaystyle \max_{i=0}^{k}{s_{i}}\). То есть \(S\) — это максимальная префиксная сумма массива \(a\).

Вам дано \(n+1\) целое число \(h_{0} , h_{1}, \ldots ,h_{n}\). Оценка массива \(a\) с максимальной суммой префиксов \(S\) равна \(h_{S}\). Теперь для каждого \(k\) вы хотите узнать математическое ожидание оценки для массива длины \(k\) по модулю \(10^9+7\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следует их описание.

Первая строка содержит целое число \(n\) (\(1\le n \le 5000\)).

Затем в следующих \(n\) строках содержатся по два целых числа \(x_{i}\) и \(y_{i}\) (\(0 \le x_{i} < 10^9 + 7\), \(1\le y_{i} < 10^9 + 7\), \(x_{i} \le y_{i}\)), которые определяют \(p_{i} = \frac{x_{i}}{y_{i}}\).

Следующая строка содержит \(n+1\) целое число \(h_{0},h_{1}, \ldots, h_{n}\) (\(0 \le h_{i} < 10^9 + 7\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите в одной строке \(n\) целых чисел, \(i\)-е из которых обозначает ожидаемый результат для массива длины \(i\) по модулю \(10^9 + 7\).

Формально, пусть \(M = 10^9 + 7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом наборе входных данных, если мы выберем \(k=1\), будет \(2\) возможных массива с равными вероятностями: \([1]\) и \([-1]\). Значения \(S\) для них составляют \(1\) и \(0\). Таким образом, ожидаемый результат равен \(\frac{1}{2}h_{0} + \frac{1}{2}h_{1} = \frac{3}{2}\). Если мы выберем \(k=2\), будет \(4\) возможных массива с равными вероятностями: \([1,1]\), \([1,-1]\), \([-1,1]\), \([-1,-1]\), и значения \(S\) для них равны \(2,1,0,0\). Таким образом, ожидаемый результат равен \(\frac{1}{2}h_{0} + \frac{1}{4}h_{1} + \frac{1}{4}h_{2} = \frac{7}{4}\).

Во втором наборе входных данных, независимо от значения \(S\), оценка всегда равна \(1\), поэтому ожидаемая оценка всегда равна \(1\).

E. Живая последовательность

Бинарный поиск дп математика теория чисел *1500

В Японии цифра \(4\) читается как смерть, поэтому Боб решил построить живую последовательность. Живая последовательность \(a\) содержит все натуральные числа, не содержащие цифры \(4\). \(a = [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, \ldots]\).

Например, число \(1235\) входит в последовательность \(a\), а числа \(4321\), \(443\) не входят в последовательность \(a\).

Боб понял, что не умеет быстро искать конкретное число по позиции \(k\) в последовательности, поэтому просит вас о помощи.

Например, если Боб хочет узнать число на позиции \(k = 4\) (индексация с \(1\)), то вам нужно ответить \(a_k = 5\).

Входные данные

В первой строке входных данных дано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

В единственной строке каждого набора входных данных задано одно целое число \(k\) (\(1 \le k \le 10^{12}\)) — позиция, интересующая Боба.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке число \(a_k\) в индексации с \(1\).

G1. Влад и правильные пути (простая версия)

дп Комбинаторика математика *2100

Это простая версия задачи, она отличается от сложной только ограничениями на \(n\) и \(k\).

Влад нашёл ряд из \(n\) плиток и число \(k\). Плитки пронумерованы слева направо и \(i\)-я плитка имеет цвет \(c_i\). Немного подумав, он решил, что с этим делать.

Вы можете начать с любой плитки и прыгать на любое количество плиток вправо, формируя при этом путь \(p\). Назовём путь \(p\) длины \(m\) правильным, если верно:

  • \(p\) разбивается на блоки длины ровно \(k\), то есть \(m\) делится на \(k\) без остатка;
  • \(c_{p_1} = c_{p_2} = \ldots = c_{p_k}\);
  • \(c_{p_{k+1}} = c_{p_{k+2}} = \ldots = c_{p_{2k}}\);
  • \(\ldots\)
  • \(c_{p_{m-k+1}} = c_{p_{m-k+2}} = \ldots = c_{p_{m}}\);

Ваша задача найти количество правильных путей максимальной длины. Так как это число может оказаться слишком большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 100\)) — количество плиток в ряду и длину блока.

Вторая строка каждого набора содержит \(n\) целых чисел \(c_1, c_2, c_3, \dots, c_n\) (\(1 \le c_i \le n\)) — цвета плиток.

Гарантируется, что сумма \(n^3\) по всем наборам не превосходит \(5 \cdot 10^6\).

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор входных данных — количество правильных путей максимальной длины по модулю \(10^9 + 7\).

Примечание

В первом примере невозможно составить правильный путь, длины больше \(0\).

Во втором примере нас интересуют следующие пути:

  • \(1 \rightarrow 3 \rightarrow 4 \rightarrow 5\)
  • \(2 \rightarrow 4 \rightarrow 5 \rightarrow 7\)
  • \(1 \rightarrow 3 \rightarrow 5 \rightarrow 7\)
  • \(1 \rightarrow 3 \rightarrow 4 \rightarrow 7\)

В третьем примере подходит любой путь длины \(8\).

G2. Влад и правильные пути (сложная версия)

Бинарный поиск дп Комбинаторика математика Структуры данных *2200

Это сложная версия задачи, она отличается от простой только ограничениями на \(n\) и \(k\).

Влад нашёл ряд из \(n\) плиток и число \(k\). Плитки пронумерованы слева направо и \(i\)-я плитка имеет цвет \(c_i\). Немного подумав, он решил, что с этим делать.

Вы можете начать с любой плитки и прыгать на любое количество плиток вправо, формируя при этом путь \(p\). Назовём путь \(p\) длины \(m\) правильным, если верно:

  • \(p\) разбивается на блоки длины ровно \(k\), то есть \(m\) делится на \(k\) без остатка;
  • \(c_{p_1} = c_{p_2} = \ldots = c_{p_k}\);
  • \(c_{p_{k+1}} = c_{p_{k+2}} = \ldots = c_{p_{2k}}\);
  • \(\ldots\)
  • \(c_{p_{m-k+1}} = c_{p_{m-k+2}} = \ldots = c_{p_{m}}\);

Ваша задача найти количество правильных путей максимальной длины. Так как это число может оказаться слишком большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 5000\)) — количество плиток в ряду и длину блока.

Вторая строка каждого набора содержит \(n\) целых чисел \(c_1, c_2, c_3, \dots, c_n\) (\(1 \le c_i \le n\)) — цвета плиток.

Гарантируется, что сумма \(n^2\) по всем наборам не превосходит \(25 \cdot 10^6\).

Выходные данные

Выведите \(t\) чисел, каждое из которых является ответом на соответствующий набор входных данных — количество правильных путей максимальной длины по модулю \(10^9 + 7\).

Примечание

В первом примере невозможно составить правильный путь, длины больше \(0\).

Во втором примере нас интересуют следующие пути:

  • \(1 \rightarrow 3 \rightarrow 4 \rightarrow 5\)
  • \(2 \rightarrow 4 \rightarrow 5 \rightarrow 7\)
  • \(1 \rightarrow 3 \rightarrow 5 \rightarrow 7\)
  • \(1 \rightarrow 3 \rightarrow 4 \rightarrow 7\)

В третьем примере подходит любой путь длины \(8\).

E. Фишки на цепочке

дп матрицы Структуры данных *2300

Дан неориентированный граф из \(n\) вершин и \(n-1\) ребер. Вес \(i\)-го ребра равен \(a_i\); это ребро соединяет вершины \(i\) и \(i+1\).

Изначально в каждой вершине расположена фишка. Число, написанное на фишке в \(i\)-й вершине, равно \(i\).

За одну операцию можно выбрать фишку (если в какой-то вершине находится несколько фишек, то можно выбрать любую, но только одну) и передвинуть ее по ребру. Стоимость такой операции равна весу ребра.

Стоимостью графа назовем минимальную стоимость такой последовательности операций, что:

  • после того, как все операции произведены, в каждой вершине ровно одна фишка, и число на каждой фишке не равно номеру вершины, в которой она находится.

Вы должны обработать \(q\) запросов:

  • \(k\) \(x\) — изменить вес \(k\)-го ребра (соединяющего вершины \(k\) и \(k+1\)) на \(x\).

После каждого запроса выведите стоимость графа. Обратите внимание, что на самом деле вы не перемещаете фишки, только считаете стоимость графа; при каждом подсчете фишки расположены в исходных позициях.

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Во второй строке заданы \(n-1\) чисел \(a_1, a_2, \dots, a_{n-1}\) (\(1 \le a_i \le 10^9\)).

В третьей строке задано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)).

Затем следуют \(q\) строк. В \(i\)-й из них заданы два целых числа \(k\) и \(x\) (\(1 \le k \le n-1\); \(1 \le x \le 10^9\)) для \(i\)-го запроса.

Выходные данные

На каждый запрос выведите одно целое число — стоимость графа после выполнения запроса.

D. Подсчёт XOR

битмаски дп Комбинаторика математика *2600

Вам даны два положительных целых числа \(n\) и \(m\). Найдите сумму всех возможных значений \(a_1\bigoplus a_2\bigoplus\ldots\bigoplus a_m\), где \(a_1,a_2,\ldots,a_m\) являются неотрицательными целыми числами такими, что \(a_1+a_2+\ldots+a_m=n\).

Обратите внимание, что все возможные значения \(a_1\bigoplus a_2\bigoplus\ldots\bigoplus a_m\) должны быть посчитаны в сумме ровно один раз.

Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Здесь \(\bigoplus\) обозначает операцию побитового исключающего ИЛИ.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единсвственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(0\le n\le 10^{18}, 1\le m\le 10^5\)) — сумма и количество чисел в наборе, соответственно.

Выходные данные

Для каждого набора входных данных выведите сумму всех возможных значений \(a_1\bigoplus a_2\bigoplus\ldots\bigoplus a_m\) по всем наборам неотрицательных целых чисел \(a_1,a_2,\ldots,a_m\) с \(a_1+a_2+\ldots+a_m=n\). Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Примечание

В первом наборе входных данных у нас должно быть \(a_1=69\), поэтому это единственное возможное значение \(a_1\), следовательно, наш ответ — \(69\).

Во втором наборе входных данных \((a_1,a_2)\) может быть равно \((0,5), (1,4), (2,3), (3,2), (4,1)\) или \((5,0)\), в которых \(a_1\bigoplus a_2\) равно \(5,5,1,1,5,5\) соответственно. Поэтому \(a_1\bigoplus a_2\) может быть равно \(1\) или \(5\), поэтому ответ равен \(1+5=6\).

В третьем наборе входных данных \(a_1,a_2,\ldots,a_{10}\) должны быть все равны \(0\), поэтому \(a_1\bigoplus a_2\bigoplus\ldots\bigoplus a_{10}=0\). Поэтому ответ равен \(0\).

E. Bosco and частица

дп математика Строки теория чисел *3100

Bosco изучает поведение частиц. Он решил исследовать особенности поведения так называемой частицы «четыре-один-два». Он поступает следующим образом:

Имеется прямая длиной \(n+1\), где самая верхняя точка — позиция \(0\), а самая нижняя — позиция \(n+1\). Частица первоначально (в момент времени \(t=0\)) находится в позиции \(0\) и движется вниз. Частица движется со скоростью \(1\) единица в секунду. В позициях \(1,2,\ldots,n\) находятся \(n\) излучателей.

Каждый излучатель может быть описан бинарной строкой. Начальное состояние каждого излучателя — это первый символ его бинарной строки. Когда частица сталкивается с излучателем, она меняет направление своего движения, если текущее состояние излучателя равно \(\texttt{1}\), и продолжает двигаться в том же направлении, если его текущее состояние равно \(\texttt{0}\), и этот излучатель переходит в следующее состояние (следующее состояние для последнего состояния определяется как первое состояние). Кроме того, частица всегда меняет свое направление, если она находится в положении \(0\) или \(n+1\) в момент времени \(t > 0\).

Bosco хотел бы узнать длину цикла движения частицы. Длина цикла определяется как минимальное значение \(c\), такое, что для любого времени \(t \ge 0\) положение частицы в момент времени \(t\) совпадает с положением частицы в момент времени \(t+c\). Можно доказать, что такое значение \(c\) существует всегда. Поскольку он понимает, что ответ может быть слишком большим, он просит вас вывести ответ по модулю \(998244353\).

Входные данные

Первая строка содерижит целое число \(n\) (\(1\le n\le10^6\)) — количество излучателей.

\(i\)-я из следующих \(n\) строк содержит бинарную строку \(s_i\) (\(1\le\left|s_i\right|\le10^6\)) — бинарная строка, содержащая только символы \(\texttt{0}\) и \(\texttt{1}\), описывающая излучатель на позиции \(i\).

Гарантируется, что сумма \(|s_i|\) не превосходит \(10^6\).

Выходные данные

Выведите единственное целое число — длину цикла движения частицы, взятую по модулю \(998244353\).

Примечание

В первом примере единственный излучатель на позиции \(1\) всегда имеет состояние \(\texttt{0}\). В моменты времени \(0,1,2,3\) позиции частицы равны \(0,1,2,1\) соответственно. Затем те же позиции будут повторяться, поэтому \(c=4\).

Анимация для второго примера: здесь или более плавная анимация.

C. Лисица и полный обход древа

Деревья дп Конструктив математика реализация *2400

Лисица Яэ забралась на древо Священной сакуры. Древом называют связный неориентированный граф, не содержащий циклов.

Для передвижения по древу лисица применяет свои магические способности. Яэ может прыгнуть из вершины \(v\) в другую вершину \(u\) тогда и только тогда, когда расстояние между этими вершинами не превосходит \(2\). Иными словами, за один прыжок Яэ может перепрыгнуть из вершины \(v\) в вершину \(u\), если вершины \(v\) и \(u\) соединены ребром, либо если существует такая вершина \(w\), что вершины \(v\) и \(w\) соединены ребром, а также вершины \(u\) и \(w\) соединены ребром.

После того, как Яэ смогла заполучить лепесток сакуры, она задумалась, существует ли циклический маршрут в древе \(v_1, v_2, \ldots, v_n\), такой что:

  • лисица может совершить прыжок из вершины \(v_i\) в вершину \(v_{i + 1}\),
  • лисица может совершить прыжок из вершины \(v_n\) в вершину \(v_1\),
  • все \(v_i\) попарно различны.

Помогите лисице определить, существует ли требуемый обход.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин древа.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — вершины, соединенные ребром. Гарантируется, что данные ребра задают древо.

Выходные данные

В первой строке выведите «Yes» (без кавычек), если требуемый обход древа существует, либо «No» (без кавычек) в противном случае.

Если требуемый обход древа существует, во второй строке выведите \(n\) целых различных чисел \(v_1, v_2, \ldots, v_n\) (\(1 \le v_i \le n\)) — вершины древа в порядке обхода.

Если существует несколько корректных обходов, выведите любой из них.

Примечание

Древо из первого примера изображено ниже. Жирными стрелками обозначен маршрут лисицы.

Во втором примере любая последовательность из трёх различных вершин является корректным маршрутом, потому что лисица может совершить прыжок из любой вершины в любую.

Древо из третьего примера изображено ниже. Можно показать, что для него не существует требуемого маршрута.

D. Миша и яблоки

дп Перебор Структуры данных *2800

Школьник Миша устал заниматься спортивным программированием, и поэтому решил все бросить и уйти в магический лес торговать магическими яблоками.

Его друг Даня пришел в этот магический лес, чтобы навестить Мишу. Какого же было его удивление, когда он узнал, что Миша нашел там много друзей, таких же бывших спортивных программистов. И у всех них, как и у Миши, есть своя лавка, где они продают магические яблоки. Чтобы поддержать друзей, так кардинально поменявших свою жизнь, он решил скупить у них весь ассортимент.

Процесс покупки устроен следующим образом: всего есть \(n\) лавок, пронумерованных целыми числами от \(1\) до \(n\), и \(m\) видов магических яблок, пронумерованных целыми числами от \(1\) до \(m\). В каждой лавке продается какое-то множество видов яблок. Даня посещает все лавки в порядке возрастания номера, начиная с первой. Заходя в лавку он покупает по одному магическому яблоку каждого вида, который в этой лавке продается, и кладет их к себе в рюкзак.

Однако, магические яблоки не были бы магическими, если бы с ними было все в порядке. Дело в том, что когда два яблока одного типа оказываются вместе в рюкзаке, все яблоки в нем магическим образом исчезают. Важно, что исчезновение происходит уже после того, как Даня положил яблоки в рюкзак и покинул лавку.

Вернувшись домой, Даня понял, что где-то в лесу он успел потерять свой рюкзак. Помня для некоторых лавок, какие виды магических яблок в них продавались, он хочет узнать, какое максимальное количество яблок могло оказаться у него в рюкзаке после всех покупок в лучшем случае.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 2 \cdot 10^5\)) — количество лавок и видов яблок.

Каждая из следующих \(n\) строк описывает ассортимент очередного прилавка в формате, описанном ниже.

Каждая строка начинается с целого числа \(k_i\) (\(0 \le k_i \le 2 \cdot 10^5\)). За ней следуют \(k_i\) различных целых чисел \(a_{ij}\) (\(1 \le a_{ij} \le m\)) — виды яблок, продаваемых в \(i\)-й лавке. Если \(k_i = 0\), то Даня не помнит какой ассортимент был в этой лавке, и множество видов яблок может быть каким угодно (в том числе и пустым).

Гарантируется, по что сумма всех \(k_i\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\) и сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора данных выведите одно целое число — максимальное количество яблок, которое могло оказаться в рюкзаке Дани после посещения всех лавок в лучшем случае.

Примечание

В первом наборе входных данных Даня помнит про все лавки, поэтому процесс будет детерминированным. В первой лавке он возьмет два яблока, и еще два во второй, но после того как он положит их в рюкзак, они исчезнут. Поэтому в конце останется только \(2\) яблока, которые он возьмет в третьей лавке.

Во втором наборе входных данных, если в третьей лавке будет пусто, то после посещения четвертой лавки все яблоки исчезнут. В любом другом случае яблоки исчезнут после третьей лавки, и в четвертой Даня сможет взять одно яблоко, поэтому ответ \(1\).

В третьем наборе входных данных, в первой лавке могут продаваться все виды яблок, а во второй лавке может ничего не продаваться. Тогда в конце останутся все \(5\) яблок.

F. Тяп-ляп, кряк, в релиз!

дп Структуры данных *3500

Вы долго об этом мечтали и наконец устроились работать в крупную IT-компанию. Вы долго-долго учились всем существующим современным технологиям и уже готовы применить все свои знания на практике. Но тут вы садитесь за свой рабочий стол и видите лист с распечатанным крупными буквами девизом компании: abcdabcdabcdabcd....

В девизе компании указаны четыре главных принципа — a (Тяп), b (Ляп), c (Кряк), d (Релиз). Поэтому вы рассматриваете строки длины \(n\), состоящие из указанных четырех букв латинского алфавита. Неупорядоченные пары букв «ab», «bc», «cd» и «da» в этом девизе соседние, поэтому будем называть такие пары символов хорошими. Итак, если вам дана строка \(s\) длины \(n\), и известно, что неупорядоченная пара символов \(\{ x, y \}\) хорошая, то со строкой можно совершить одну из указанных операций:

  • если \(s_n = x\), то разрешается заменить этот символ на \(y\),
  • если существует такое \(1 \le i < n\), что \(s_i = x\) и \(s_{i+1} = \ldots = s_n = y\), то разрешается заменить \(i\)-й символ строки на \(y\), а все последующие — на \(x\).

Например, строку bacdd можно заменить на одну из строк bacda, bacdc или badcc, а строку aac можно заменить на aab или aad.

Непустую последовательность операций для строки \(s\) будем называть корректной, если выполняются следующие два условия:

  1. после совершения всех операций снова получится строка \(s\),
  2. никакая строка, кроме \(s\), в ходе совершения операций не возникнет более одного раза. При этом строка \(s\) должна возникнуть ровно два раза — перед началом выполнения операций и после выполнения всех операций.

Теперь мы готовы перейти к условию задачи! У вас есть множество строк, которое изначально пусто. Далее \(q\) раз в множество добавится очередная строка \(t_i\), либо строка \(t_i\) удаляется из множества. После каждого запроса требуется вывести минимальный и максимальный размер корректной последовательности операций, в ходе которой каждое слово возникает хотя бы один раз. Выбор начальной строки \(s\) остается за вами.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n \le 20\), \(1 \le q \le 100\,000\)) — длина рассматриваемых строк и количество запросов изменения множества строк.

Каждая из следующих \(q\) строк содержит строку \(t_i\) (\(\lvert t_i \rvert = n\)). Все строки состоят из символов «a», «b», «c» и «d». Если до этого запроса строка \(t_i\) не находилась в множестве, то она добавляется в него, а иначе она удаляется из множества.

Выходные данные

Для каждого из \(q\) запросов выведите два целых числа — минимальный и максимальный размер корректной последовательности операций, в ходе которой каждое слово из множества возникает хотя бы один раз.

Если не существует ни одной последовательности операций, удовлетворяющей условию задачи, выведите одно число \(-1\).

Примечание

Рассмотрим первый пример.

  • После первого запроса множество строк равно \(\{\)aa\(\}\), минимальная последовательность действий имеет следующий вид: aa, ab, aa. В качестве максимальной последовательности действий подходит aa, ab, ba, bb, bc, cb, cc, cd, dc, dd, da, ad, aa.
  • После второго запроса множество строк равно \(\{\)aa, ac\(\}\). Минимальная и максимальная последовательности действий: aa, ab, ac, ad, aa.
  • После третьего запроса множество строк равно \(\{\)aa, ac, dd\(\}\). Не существует последовательности действий, которая подходит под условие, поэтому следует вывести \(-1\).
  • После четвертого запроса множество строк равно \(\{\)aa, dd\(\}\). Минимальная и максимальная последовательности действий таковы: aa, ab, ba, bb, bc, cb, cc, cd, dc, dd, da, ad, aa.

E. Деревянный забор

дп *1800

Недавно Вася купил земельный участок и теперь решил огородить его деревянным забором.

Он обратился в компанию «Деревянная доска» по производству деревянных досок для заборов. В каталоге товаров Вася прочитал, что компания имеет в своем распоряжении n различных типов древесины. Из i-го типа древесины компания производит доску, которая представляет собой прямоугольный брусок размером ai на bi.

Вася решил заказать в этой компании доски и построить из них свой забор. Оказалось, что склад компании настолько большой, что Вася может заказать произвольное количество досок каждого из типов. Заметим, что при формировании забора, доски разрешается поворачивать. Однако, поворачивать квадратные доски запрещено.

Васе требуется построить забор длины l, однако произвольный забор ему не подходит. Он хочет, чтобы его забор выглядел красиво. Будем говорить, что забор красивый тогда и только тогда, когда выполняются два условия:

  • не существует двух подряд идущих досок одного типа древесины
  • первая доска забора имеет произвольную длину, а длина каждой последующей доски равна ширине предыдущей

Другими словами, забор считается красивым, если тип древесины i-ой доски забора отличен от типа древесины i - 1 доски, а также длина i-ой доски совпадает с шириной i - 1 доски (для всех i, начиная с 2).

Теперь Васю заинтересовал следующий вопрос — сколькими способами он может подобрать забор для своего участка. От Вас требуется посчитать количество различных красивых заборов длины l.

Два забора будем считать одинаковыми, если соответствующие последовательности типов древесины досок заборов совпадают с учетом их поворотов, в противном случае заборы различны. Поскольку искомое количество может быть достаточно большим, ответ требуется посчитать по модулю 1000000007 (109 + 7).

Входные данные

В первой строке заданы два целых числа n и l (1 ≤ n ≤ 100, 1 ≤ l ≤ 3000) — количество различных типов досок и длина забора, соответственно. Далее в n строках следует описание типов досок: i-ая строка содержит два целых числа ai и bi (1 ≤ ai, bi ≤ 100) — размеры доски из i-го типа древесины. Все числа в строках разделены пробелами.

Выходные данные

Выведите единственное целое число — искомое количество способов по модулю 1000000007 (109 + 7).

Примечание

В первом примере существует ровно два способа построить красивый забор длины 3:

  • В качестве первой доски забора использовать доску первого типа с длиной 1 шириной 2. В качестве второй доски использовать доску второго типа с длиной 2 шириной 3.
  • Использовать одну доску второго типа, повернув её. Её длина будет равна 3, а ширина — 2.

E. Переставь скобки

дп жадные алгоритмы Перебор сортировки Строки *2100

Правильная скобочная последовательность — это скобочная последовательность, которую можно превратить в корректное арифметическое выражение, вставив символы «1» и «+» между исходными символами. Например:

  • скобочные последовательности «()()» и «(())» — правильные (из них можно получить выражения «(1)+(1)» и «((1+1)+1)»);
  • скобочные последовательности «)(», «(» и «)» — неправильные.

Дана правильная скобочная последовательность. За один ход вы можете удалить пару соседних скобок такую, что левая скобка открывающая, а правая — закрывающая. Затем склеить полученные части, не изменяя порядка. Стоимость такого хода равна количеству скобок справа от правой скобки из этой пары.

Стоимость правильной скобочной последовательности равна наименьшей суммарной стоимости ходов, необходимых, чтобы сделать последовательность пустой.

На самом деле, никаких скобок вы не удаляете. Вместо этого вам дана правильная скобочная последовательность и целое число \(k\). Вы можете проделать следующее действие не больше \(k\) раз:

  • вытащить скобку из последовательности и вставить ее в любую позицию (между двух скобок, в начало или в конец; возможно, туда же, где она и была).

После всех действий скобочная последовательность должна быть правильной. Какая наименьшая стоимость полученной правильной скобочной последовательности?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(k\) (\(0 \le k \le 5\)) — наибольшее количество действий, которые вы можете совершить.

Во второй строке записана непустая скобочная последовательность, она состоит только из символов '(' и ')'.

Суммарная длина скобочных последовательностей по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшая стоимость правильной скобочной последовательности после того, как вы проделаете над ней не более \(k\) действий.

F. Древесина

бпф дп Комбинаторика математика *2600

Перед торговым центром расположилась замечательная аллея с деревьями. Как жаль, что придется от нее избавиться, чтобы освободить место под парковку...

Деревья на аллее растут в один ряд. Есть \(n\) мест под деревья: позиция \(0\) — это торговый центр, позиция \(n+1\) — это дорога, а позиции с \(1\) по \(n\) — это места под деревья. Некоторые из них заняты — в них растут деревья одинаковой высоты \(k\). Не более одного дерева растет на каждом месте.

Когда вы срубаете дерево на месте \(x\), то вы можете его свалить либо налево, либо направо. Если оно падает налево, то занимает места с \(x-k\) по \(x\) включительно. Если оно падает направо, то занимает места с \(x\) по \(x+k\) включительно.

Пусть \(m\) деревьев растут на аллее в каких-то местах \(x_1, x_2, \dots, x_m\). Назовем аллею неудачной, если все \(m\) деревьев можно срубить таким образом, чтобы:

  • ни одно дерево не упало на торговый центр или дорогу;
  • ни одно место не было занято более чем одним упавшим деревом.

Посчитайте количество различных неудачных аллей с \(m\) деревьями высоты \(k\). Две аллеи считаются различными, если есть такое место \(y\), что дерево растет на месте \(y\) на первой аллее и не растет на месте \(y\) на второй аллее.

Выведите это число по модулю \(998\,244\,353\).

Входные данные

В единственной строке записаны три целых числа \(n, m\) и \(k\) (\(1 \le m, k \le n \le 3 \cdot 10^5\)) — количество мест для деревьев, количество деревьев и высота каждого дерева.

Выходные данные

Выведите одно целое число — количество различных неудачных аллей с \(m\) деревьями высоты \(k\) по модулю \(998\,244\,353\).

F. Подружки-садоводы

графы Деревья дп Перебор поиск в глубину и подобное *1700

Две подруги, Алиса и Юки, посадили в своем саду дерево из \(n\) вершин. Дерево — это неориентированный граф без циклов, петель и кратных ребер. Каждое ребро в этом дереве имеет длину \(k\). Изначально вершина \(1\) — корень дерева.

Алиса и Юки выращивают дерево не просто так, они хотят продать его. Стоимостью дерева назовем максимальное расстояние от корня до вершины по всем вершинам дерева. Расстоянием между двумя вершинами \(u\) и \(v\) является сумма длин ребер на пути от \(u\) до \(v\).

Девочки проходили курс юных садоводов, поэтому они умеют модифицировать дерево. За \(c\) монет Алиса и Юки могут поменять корень дерева, выбрав одного из соседей текущего корня и сделав его корнем дерева. Эту операцию можно применять любое количество раз (в том числе и ноль). Обратите внимание, что операция не затрагивает структуру дерева; единственное изменение заключается в том, что корнем дерева становится другая вершина.

Подруги хотят продать дерево с максимальной выгодой. Выгода — это разность стоимости дерева и затрат на все операции.

Помогите девочкам и найдите максимальную выгоду, которую они могут получить, применив к дереву операции произвольное число раз (возможно, ноль).

Входные данные

В первой строке входных данных содержится число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержатся три целых числа \(n\), \(k\), \(c\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le k, c \le 10^9\)) — количество вершин в дереве, длина каждого ребра и стоимость операции.

В каждой из следующих \(n - 1\) строк набора содержится по паре целых чисел \(u_i\), \(v_i\) (\(1 \le u_i, v_i \le n\)) — описания ребер. Эти ребра задают дерево.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — максимальную выгоду, которую могут получить Юки и Алиса.

E. Удалить граф

графы дп игры математика Перебор *2500

Алиса и Боб играют с графом. У них есть неориентированный граф без петель и кратных ребер. Все вершины графа имеют степень равную \(2\). Граф может содержать несколько компонент связности. Обратите внимание, что если такой граф имеет \(n\) вершин, он будет иметь ровно \(n\) ребер.

Алиса и Боб ходят по очереди. Алиса ходит первой. За один ход игрок может выбрать \(k\) (\(l \le k \le r\); \(l < r\)) вершин, которые образуют связный подграф, и удалить эти вершины из графа, включая все инцидентные ребра.

Игрок, который не может сделать ход, проигрывает.

Предположим, для примера, что они играют на заданном графе с заданными \(l = 2\) и \(r = 3\):

Следующие множества вершин допустимы для первого хода Алисы:

  • \(\{1, 2\}\)
  • \(\{1, 3\}\)
  • \(\{2, 3\}\)
  • \(\{4, 5\}\)
  • \(\{4, 6\}\)
  • \(\{5, 6\}\)
  • \(\{1, 2, 3\}\)
  • \(\{4, 5, 6\}\)
Пусть Алиса выбрала подграф \(\{4, 6\}\).

Тогда следующие множества вершин допустимы для первого хода Боба:

  • \(\{1, 2\}\)
  • \(\{1, 3\}\)
  • \(\{2, 3\}\)
  • \(\{1, 2, 3\}\)
Пусть Боб выбрал подграф \(\{1, 2, 3\}\).

Алиса не может сделать ход, поэтому она проигрывает.

Вам дан граф размера \(n\) и целые числа \(l\) и \(r\). Кто победит, если Алиса и Боб играют оптимально.

Входные данные

Первая строка содержит три целых числа \(n\), \(l\) и \(r\) (\(3 \le n \le 2 \cdot 10^5\); \(1 \le l < r \le n\)) — количество вершин в графе и ограничения на количество вершин, которые Алиса или Боб могут выбрать одним ходом.

Следующие \(n\) строк содержат ребра графа: по одному в строке. \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)) — описание \(i\)-го ребра.

Гарантируется, что степени всех вершин данного графа равны \(2\).

Выходные данные

Выведите Alice (регистро-независимо), если Алиса победит, или Bob в противном случае.

Примечание

В первом тесте даны те же входные данные, что и в условии.

Во втором тесте дан тот же граф, что и в условии, но \(l = 1\) и \(r = 2\)

F. Случайная прогулка

графы Деревья дп математика Теория вероятностей *2600

Вам задано дерево, состоящее из \(n\) вершин и \(n - 1\) ребер, и у каждой вершины \(v\) есть свой счетчик \(c(v)\).

Первоначально в вершине \(s\) расположена фишка, и все счетчики, кроме \(c(s)\), равны \(0\); \(c(s)\) равен \(1\).

Ваша задача — переместить фишку в вершину \(t\). Для этого вы можете совершить следующую последовательность шагов. Пусть сейчас фишка расположена в вершине \(v\). За один шаг вы можете сделать следующее:

  1. выбрать одну из соседних вершин \(to\) вершины \(v\) равновероятно (\(to\) является соседней вершиной \(v\) тогда и только тогда, когда в дереве есть ребро \(\{v, to\}\));
  2. передвинуть фишку в вершину \(to\) и увеличить \(c(to)\) на \(1\).

Вы будете повторять данную операцию, пока не достигните вершины \(t\).

Для каждой вершины \(v\) вычислите математическое ожидание значения \(c(v)\) по модулю \(998\,244\,353\).

Входные данные

В первой строке заданы три целых числа: \(n\), \(s\) и \(t\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le s, t \le n\); \(s \neq t\)) — количество вершин в дереве, стартовая и конечная вершины.

В следующих \(n - 1\) строках заданы ребра дерева: по одному в строке. В \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)), обозначающих ребро между вершинами \(u_i\) и \(v_i\).

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите \(n\) чисел: математические ожидания значений \(c(v)\) по модулю \(998\,244\,353\) для каждого \(v\) от \(1\) по \(n\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

Дерево из первого примера показано ниже:

Посчитаем математическое ожидание \(E[c(1)]\):
  • \(P(c(1) = 0) = 0\), так как \(c(1)\) изначально равно \(1\).
  • \(P(c(1) = 1) = \frac{1}{2}\), так как есть только одна последовательность шагов, приводящая к \(c(1) = 1\). Это \(1 \rightarrow 2 \rightarrow 3\) с вероятностью \(1 \cdot \frac{1}{2}\).
  • \(P(c(1) = 2) = \frac{1}{4}\): единственный путь \(1 \rightarrow_{1} 2 \rightarrow_{0.5} 1 \rightarrow_{1} 2 \rightarrow_{0.5} 3\).
  • \(P(c(1) = 3) = \frac{1}{8}\): единственный путь \(1 \rightarrow_{1} 2 \rightarrow_{0.5} 1 \rightarrow_{1} 2 \rightarrow_{0.5} 1 \rightarrow_{1} 2 \rightarrow_{0.5} 3\).
  • \(P(c(1) = i) = \frac{1}{2^i}\) в общем случае.
В результате \(E[c(1)] = \sum\limits_{i=1}^{\infty}{i \frac{1}{2^i}} = 2\).
Изображение дерева во втором тесте
Изображение дерева в третьем тесте

C. LuoTianyi и XOR-дерево

Деревья дп жадные алгоритмы поиск в глубину и подобное снм Структуры данных *2500

LuoTianyi дала вам дерево со значениями в вершинах, корнем этого дерева является вершина \(1\).

За одну операцию вы можете изменить значение в любой вершине на любое неотрицательное целое число.

Вам нужно найти минимальное количество операций, которые нужно сделать, чтобы побитовое исключающее ИЛИ на любом пути от корня до листа\(^{\dagger}\) было равно нулю.

\(^{\dagger}\)Листом в корневом дереве называется вершина, которая имеет ровно одного соседа, и при этом не является корнем.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в дереве.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(i\)-е число равно значению в \(i\)-й вершине.

Следующие \(n−1\) строка описывают рёбра дерева. \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i,v_i \le n, u_i \neq v_i\)) — вершины, соединённые ребром дерева. Гарантируется, что данные рёбра образуют дерево.

Выходные данные

Выведите единственное целое число — минимальное количество операций.

Примечание

Дерево из первого примера:

Если мы поменяем значение в вершине \(2\) на \(3\), значение в вершине \(5\) на \(4\), значение в вершине \(6\) на \(6\), то дерево станет подходящим.

Побитовое исключающее ИЛИ от корня до листа \(2\) будет равно \(3 \oplus 3=0\).

Побитовое исключающее ИЛИ от корня до листа \(5\) будет равно \(4 \oplus 7 \oplus 3=0\).

Побитовое исключающее ИЛИ от корня до листа \(6\) будет равно \(6 \oplus 5 \oplus 3=0\).

Дерево из второго примера:

Если мы поменяем значение в вершине \(2\) на \(4\), значение в вершине \(3\) на \(27\), значение в вершине \(6\) на \(20\), то дерево станет подходящим.

Побитовое исключающее ИЛИ от корня до листа \(6\) будет равно \(20 \oplus 19 \oplus 7=0\).

Побитовое исключающее ИЛИ от корня до листа \(8\) будет равно \(11 \oplus 27 \oplus 4 \oplus 19 \oplus 7=0\).

Побитовое исключающее ИЛИ от корня до листа \(4\) будет равно \(16 \oplus 4 \oplus 19 \oplus 7=0\).

Побитовое исключающее ИЛИ от корня до листа \(7\) будет равно \(16 \oplus 4 \oplus 19 \oplus 7=0\).

В третьем примере единственным листом является вершина \(4\), и побитовое исключающее ИЛИ на пути до неё равно \(1 \oplus 2 \oplus 1 \oplus 2 = 0\), поэтому нам не нужно изменять значения.

В четвёртом примере мы можем изменить значение в вершине \(1\) на \(5\), а значение в вершине \(4\) на \(0\).

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

D. Running Miles

дп жадные алгоритмы Перебор *1700

Есть улица с \(n\) достопримечательностями, достопримечательность с номером \(i\) находится в \(i\) милях от начала улицы. Достопримечательность номер \(i\) обладает красотой \(b_i\). Вы хотите стартовать утреннюю пробежку в \(l\) милях и закончить в \(r\) милях от начала улицы. Пока вы бежите, вы будете пробегать мимо каких-то достопримечательностей (включая достопримечательности в \(l\) и \(r\) милях от начала). Вам интересны \(3\) наиболее красивых достопримечательности с вашей пробежки, но вы устаете с каждой милей, которую пробегаете.

Выберите \(l\) и \(r\) такие, что вы пробежите мимо хотя бы \(3\) достопримечательностей, и сумма красот \(3\) самых красивых достопримечательностей минус дистанция в милях, которую вы пробегаете, максимальна. Более формально, выберите \(l\) и \(r\) такие, что \(b_{i_1} + b_{i_2} + b_{i_3} - (r - l)\) максимально, где \(i_1, i_2, i_3\) — индексы трех самых красивых достопримечательностей в диапазоне \([l, r]\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — число наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(3 \leq n \leq 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(b_i\) (\(1 \leq b_i \leq 10^8\)) — красоты достопримечательностей в \(i\) милях от начала улицы.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное значение \(b_{i_1} + b_{i_2} + b_{i_3} - (r - l)\) для некоторого отрезка \([l, r]\).

Примечание

В первом примере мы можем выбрать \(l\) и \(r\) равными \(1\) и \(5\). Так мы посетим все достопримечательности, и три достопримечательности с максимальной красотой имеют индексы \(1\), \(3\) и \(5\) с красотами \(5\), \(4\) и \(3\) соответственно. Откуда суммарное значение равно \(5 + 4 + 3 - (5 - 1) = 8\).

Во втором примере отрезок \([l, r]\) может быть равен \([1, 3]\) или \([2, 4]\), с суммарным значением, равным \(1 + 1 + 1 - (3 - 1) = 1\).

E. Walk the Runway

битмаски графы дп Перебор реализация сортировки Структуры данных *2400

Тур состоит из \(m\) идентичных подиумных шоу в разных городах. Всего есть \(n\) моделей, которые хотят участвовать в туре, пронумерованных от \(1\) до \(n\). У людей в разных городах разные взгляды на индустрию моды, поэтому они оценивают моделей по-разному. В частности, люди в городе \(i\) оценивают модель \(j\) рейтингом \(r_{i, j}\).

Из желающих моделей вы выберете \(k\) моделей и некоторый их порядок, пусть эти модели в этом порядке имеют номера \(j_1, j_2, \dots, j_k\). В каждом городе на подиум выйдут эти \(k\) моделей в данном порядке. Чтобы сделать шоу захватывающим, в каждом городе рейтинги моделей должны строго возрастать в порядке их выхода на подиум. Более формально, для любого города \(i\) и индекса \(t\) (\(2 \leq t \leq k\)), рейтинги должны удовлетворять условию \(r_{i,j_{t - 1}} < r_{i,j_t}\).

В конце концов, индустрия моды сфокусирована на деньгах, поэтому выбрав модель \(j\) для участия в туре, вы получите \(p_j\) прибыли. Вычислите, какую максимальную прибыль вы можете получить при правильном выборе моделей и порядка их выступления, при условии соблюдения всех ограничений.

Входные данные

Первая строка содержит два целых числа \(m\) и \(n\) (\(1 \leq m \leq 500\), \(1 \leq n \leq 5000\)) — число шоу и число моделей, желающих участвовать, соответственно.

Вторая строка содержит \(n\) целых чисел \(p_j\) (\(1 \leq p_j \leq 10^9\)) — прибыль от приглашения \(j\)-й модели в тур.

В каждой из следующих \(m\) строк содержится \(n\) целых чисел. Строка под номером \(i\) содержит \(n\) целых чисел \(r_{i, j}\) (\(1 \leq r_{i, j} \leq n\)) — рейтинги моделей в городе \(i\).

Выходные данные

Выведите одно целое число — максимальную суммарную прибыль.

Примечание

В первом примере в тур приглашены \(3\) модели. Шоу состоит из моделей в следующем порядке \([1, 3, 4]\).

Соответственные рейтинги в городах:

  • Город \(1\)\([ 1, 3, 4 ]\).
  • Город \(2\)\([ 1, 2, 3 ]\).
  • Город \(3\)\([ 2, 4, 5 ]\).

Видно, что рейтинги моделей в каждом городе возрастают. Суммарная прибыль равна \(10 + 10 + 10 = 30\). Можно доказать, что невозможно достичь большей прибыли.

Во втором примере мы можем пригласить в тур пятую модель, откуда получаем общую прибыль \(50\). Можно доказать, что невозможно достичь большей прибыли.

В третьем примере мы приглашаем в тур единственную модель, откуда получаем прибыль \(1\,000\,000\,000\).

В четвертом примере мы можем пригласить всех моделей и шоу будет состоять из моделей в следующем порядке \([ 5, 4, 3, 2, 1 ]\). Тогда общая прибыль будет равна \(5 \cdot 1\,000\,000\,000 = 5\,000\,000\,000\).

B1. Сортировка подотрезков (простая версия)

Бинарный поиск Деревья дп жадные алгоритмы снм *2000

Единственная разница между простой и сложной версиями состоит в ограничениях на \(t\) и \(n\).

Вам задан массив \(a\), состоящий из \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\).

Определим стоимость массива \(p_1, p_2, \ldots p_k\) как минимальное количество времени, необходимое для сортировки этого массива с использованием произвольного количества операций сортировки диапазона. В каждой операции сортировки диапазона вы будете делать следующее:

  • Выберите два целых числа \(l\) и \(r\) (\(1 \le l < r \le k\)).
  • Отсортируйте подмассив \(p_l, p_{l + 1}, \ldots, p_r\) за \(r - l\) секунд.

Пожалуйста, посчитайте сумму стоимостей по всем подмассивам массива \(a\).

Подмассив массива определяется как непрерывная последовательность элементов массива.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 5 \cdot 10^3\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^3\)) — длина массива \(a\).

Вторая строка каждого набора входных данных состоит из \(n\) целых чисел \(a_1,a_2,\ldots, a_n\) (\(1\le a_i\le 10^9\)). Гарантируется, что все элементы \(a\) попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите сумму стоимостей по всем подмассивам массива \(a\).

Примечание

В первом наборе входных данных:

  • Подмассив \([6]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([4]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([6, 4]\) можно отсортировать за одну операцию, выбрав \(l = 1\) и \(r = 2\). Его стоимость равна \(1\).
Сумма стоимостей по всем подмассивам данного массива равна \(0 + 0 + 1 = 1\).

Во втором наборе входных данных:

  • Подмассив \([3]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([10]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([6]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([3, 10]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([10, 6]\) можно отсортировать за одну операцию, выбрав \(l = 1\) и \(r = 2\). Его стоимость равна \(2 - 1 = 1\).
  • Подмассив \([3, 10, 6]\) можно отсортировать за одну операцию, выбрав \(l = 2\) и \(r = 3\). Его стоимость равна \(3 - 2 = 1\).
Сумма стоимостей по всем подмассивам данного массива равна \(0 + 0 + 0 + 0 + 1 + 1 = 2\).

B2. Сортировка подотрезков (сложная версия)

Бинарный поиск дп жадные алгоритмы Структуры данных *2400

Единственная разница между простой и сложной версиями состоит в ограничениях на \(t\) и \(n\).

Вам задан массив \(a\), состоящий из \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\).

Определим стоимость массива \(p_1, p_2, \ldots p_k\) как минимальное количество времени, необходимое для сортировки этого массива с использованием произвольного количества операций сортировки диапазона. В каждой операции сортировки диапазона вы будете делать следующее:

  • Выберите два целых числа \(l\) и \(r\) (\(1 \le l < r \le k\)).
  • Отсортируйте подмассив \(p_l, p_{l + 1}, \ldots, p_r\) за \(r - l\) секунд.

Пожалуйста, посчитайте сумму стоимостей по всем подмассивам массива \(a\).

Подмассив массива определяется как непрерывная последовательность элементов массива.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных состоит из \(n\) целых чисел \(a_1,a_2,\ldots, a_n\) (\(1\le a_i\le 10^9\)). Гарантируется, что все элементы \(a\) попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите сумму стоимостей по всем подмассивам массива \(a\).

Примечание

В первом наборе входных данных:

  • Подмассив \([6]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([4]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([6, 4]\) можно отсортировать за одну операцию, выбрав \(l = 1\) и \(r = 2\). Его стоимость равна \(1\).
Сумма стоимостей по всем подмассивам данного массива равна \(0 + 0 + 1 = 1\).

Во втором наборе входных данных:

  • Подмассив \([3]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([10]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([6]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([3, 10]\) уже отсортирован, поэтому его стоимость равна \(0\).
  • Подмассив \([10, 6]\) можно отсортировать за одну операцию, выбрав \(l = 1\) и \(r = 2\). Его стоимость равна \(2 - 1 = 1\).
  • Подмассив \([3, 10, 6]\) можно отсортировать за одну операцию, выбрав \(l = 2\) и \(r = 3\). Его стоимость равна \(3 - 2 = 1\).
Сумма стоимостей по всем подмассивам данного массива равна \(0 + 0 + 0 + 0 + 1 + 1 = 2\).

C. Разбиение на палиндромы

Бинарный поиск дп Перебор Строки Структуры данных хэши *2600

Подстрокой называется непрерывный и непустой подотрезок букв из данной строки, без изменения порядка.

Чётным палиндромом называется строка, которая читается одинаково как слева направо, так и справа налево, и имеет чётную длину. Например, строки «zz», «abba», «abccba» являются чётными палиндромами, а строки «codeforces», «reality», «aba», «c» не являются.

Красивой строкой называется чётный палиндром или строка, которую можно разбить на несколько меньших чётных палиндромов.

Дана строка \(s\), состоящая из \(n\) строчных латинских букв. Подсчитайте количество красивых подстрок в \(s\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Затем следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5\cdot 10^5\)).

Вторая строка каждого набора входных данных содержит строку \(s\). Строка \(s\) состоит только из строчных латинских букв и имеет длину \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество красивых подстрок.

Примечание

В первом наборе входных данных красивыми подстроками являются «abaaba», «baab», «aa».

В последнем наборе входных данных красивыми подстроками являются «aa» (подсчитано дважды), «abba», «bb», «bbaa», «abbaaa».

D. Золотая лихорадка

дп Перебор поиск в глубину и подобное реализация *1000

Изначально у вас есть одна куча золотых самородков, содержащая \(n\) самородков. За одну операцию вы можете сделать следующее:

  • Разделить любую кучу на две кучи так, чтобы одна из полученных куч содержала в два раза больше золотых самородков, чем другая. (Все кучи должны содержать целое число самородков.)

Одно из возможных действий - взять кучу размера \(6\) и разделить ее на кучи размеров \(2\) и \(4\), что является допустимым, так как \(4\) в два раза больше, чем \(2\).

Можете ли вы сделать кучу с ровно \(m\) золотых самородков, используя ноль или более операций?
Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных в тесте.

Единственная строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^7\)) — начальный и целевой размер кучи соответственно.

Выходные данные

Для каждого теста выведите «YES», если вы можете создать кучу размером ровно \(m\), и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый тест изображен в условии. Мы можем создать кучу размером \(4\).

Во втором тесте мы можем выполнить следующие операции: \(\{\color{red}{9}\} \to \{\color{red}{6},3\} \to \{4,2,3\}\). Куча, которая разделяется, выделена красным цветом перед каждой операцией.

В третьем тесте мы не можем выполнить ни одной операции.

В четвертом тесте мы не можем получить кучу большего размера, чем у нас изначально.

G. Пирамида из банок

дп математика реализация Структуры данных *1600

На ярмарке есть огромная пирамида из консервных банок с \(2023\) рядами, пронумерованными в стандартном порядке, как показано на рисунке.

Если вначале попасть в банку с номером \(9^2\), то упадут все банки, покрашенные в красный цвет на рисунке выше.

Вы бросаете мяч в пирамиду, и он попадает в одну банку с номером \(n^2\). Это приводит к тому, что все банки, которые находятся над этой банкой, падают (то есть банка \(n^2\) падает, затем падают банки, непосредственно находящиеся над \(n^2\), затем банки, непосредственно находящиеся над этими банками, и так далее). Например, на рисунке выше показаны банки, которые упадут, если попасть в банку \(9^2\).

Какова сумма номеров всех банок, которые упадут? Напомним, что \(n^2 = n \times n\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — это означает, что банка, в которую вы попали, имеет номер \(n^2\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — сумму номеров всех банок, которые упадут.

Примечание

Первый набор входных данных изображен в условии. Сумма номеров, которые упадут, равна \(\)1^2 + 2^2 + 3^2 + 5^2 + 6^2 + 9^2 = 1 + 4 + 9 + 25 + 36 + 81 = 156.\(\)

Во втором наборе входных данных упадет только банка с номером \(1^2\), поэтому ответ равен \(1^2=1\).

В третьем наборе входных данных упадут банки с номерами \(1^2\) и \(2^2\), поэтому ответ равен \(1^2+2^2=1+4=5\).

В четвертом наборе входных данных упадут банки с номерами \(1^2\) и \(3^2\), поэтому ответ равен \(1^2+3^2=1+9=10\).

В пятом наборе входных данных упадут банки с номерами \(1^2\), \(2^2\) и \(4^2\), поэтому ответ равен \(1^2+2^2+4^2=1+4+16=21\).

H. Не вините меня

битмаски дп Комбинаторика математика *1700

К сожалению, автор задачи не смог придумать интересную историю, поэтому он просто просит вас решить следующую задачу.

Дан массив \(a\), состоящий из \(n\) положительных целых чисел. Посчитайте количество подпоследовательностей, для которых побитовое \(\mathsf{AND}\) элементов в подпоследовательности имеет ровно \(k\) единичных битов в двоичном представлении. Ответ может быть большим, поэтому выведите его по модулю \(10^9+7\).

Напомним, что подпоследовательность массива \(a\) - это последовательность, которую можно получить из \(a\), удалив некоторые (возможно, ни одного) элементы. Например, \([1, 2, 3]\), \([3]\), \([1, 3]\) являются подпоследовательностями \([1, 2, 3]\), но \([3, 2]\) и \([4, 5, 6]\) - нет.

Обратите внимание, что \(\mathsf{AND}\) обозначает логическую операцию AND.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов \(t\) (\(1 \le t \le 10^4\)). Затем следует описание наборов входных данных.

Первая строка каждого тестового случая состоит из двух целых чисел \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5\), \(0 \le k \le 6\)) — длина массива и количество единичных битов, которое должно быть у побитового \(\mathsf{AND}\) подсчитанных подпоследовательностей в двоичном представлении.

Вторая строка каждого тестового случая состоит из \(n\) целых чисел \(a_i\) (\(0 \leq a_i \leq 63\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая выведите одно целое число - количество подпоследовательностей, у которых в двоичном представлении значение побитового \(\mathsf{AND}\) имеет ровно \(k\) установленных битов. Ответ может быть большим, поэтому выведите его по модулю \(10^9+7\).

D. Футболки

дп жадные алгоритмы Теория вероятностей *2700

Вы проходите стажировку в Codeforces с командой из n инженеров, пронумерованных от 1 до n, и хотите подарить каждому из них по сувениру — футболке из Вашей страны (футболки принимаются в Codeforces «на ура!»). К сожалению, вы не знаете, какой размер футболки подойдет каждому инженеру. Всего существует m различных размеров, пронумерованных от 1 до m, и каждому инженеру придется впору футболка ровно одного размера.

Вам неизвестны точные размеры футболок, подходящих инженерам, поэтому вы решили узнать их у Вашего друга Геральда. К сожалению, он тоже не смог выяснить точные размеры, зато для каждого инженера i и для всех размеров j раздобыл вероятность того, что инженеру i подойдет футболка размера j.

Вы решили подарить каждому инженеру по одной футболке, и поэтому собираетесь привезти с собой ровно n футболок. Конечно же, эти n футболок могут быть любых размеров (можно даже привести несколько футболок одного размера!). При выборе футболок-сувениров Вы не знаете точный размер каждого инженера, так что Вам придется выбирать футболки, исходя исключительно из вероятностей, которые предоставил Ваш друг Геральд.

Ваша задача — максимизировать матожидание количества инженеров, которые получат футболки своего размера.

Более формально процесс получения футболок можно описать следующим образом. Когда Вы наконец-то приедете в офис Codeforces, Вы спросите у каждого инженера точный размер его футболки. Затем, если у Вас все еще будет футболка нужного размера, Вы подарите такую футболку данному инженеру, в противном случае не подарите данному инженеру ничего. Вы будете спрашивать размеры у инженеров по порядку, начиная с инженера номер 1, за ним последует инженер номер 2, и так далее до инженера номер n.

Входные данные

В первой строке содержатся два целых числа n и m (1 ≤ n ≤ 3000, 1 ≤ m ≤ 300), записанных через пробел — количество инженеров и количество размеров футболок соответственно.

Затем следует n строк, в каждой строке содержится m целых чисел через пробел. Число номер j в строке номер i обозначает вероятность того, что инженеру номер i будет впору футболка с размером номер j. Каждая вероятность представлена целым числом от 0 до 1000, включительно. Для того, чтобы вычислить, собственно, вероятность, следует разделить соответствующее число на 1000.

Гарантируется, что для любого инженера сумма вероятностей для всех m футболок равняется единице.

Выходные данные

Выведите единственное вещественное число, обозначающее максимально возможное математическое ожидание количества инженеров, которые получат по футболке своего размера.

Допустимая мера абсолютной или относительной погрешности составляет 10 - 9.

Примечание

В первом примере нужно привезти по одной футболке каждого размера. Вероятности того, что либо обоим инженерам будут впору футболки размера номер 1, либо им обоим будут впору футболки с размером номер 2, равна 0.5. Вероятность того, что одному инженеру будет впору футболка размера номер 1, а другому — футболка размера номер 2, также равна 0.5. В первом случае футболку получает только один инженер. В последнем случае по футболке получают два инженера. Следовательно, матожидание количества инженеров, которые получат по футболке, равняется 1.5. Это максимально возможное матожидание количества инженеров для всех комплектов футболок.

Во втором примере нужно привезти две футболки размера номер 1 и одну футболку размера номер 2. Таким образом, каждый инженер несомненно получит по футболке своего размера.

В третьем примере нужно привезти одну футболку размера номер 4.

A. Copil Copac рисует деревья

графы Деревья дп поиск в глубину и подобное *1400

Copil Copac получил список из \(n-1\) ребра, описывающих дерево на \(n\) вершинах. Он решил нарисовать его, используя следующий алгоритм:

  • Шаг \(0\): Рисует первую вершину (вершину \(1\)). Переходит к шагу \(1\).
  • Шаг \(1\): Для каждого ребра из входных данных в порядке ввода: если ребро соединяет уже нарисованную вершину \(u\) с не нарисованной вершиной \(v\), он рисует \(v\) и ребро. После прохода по всем рёбрам он переходит к шагу \(2\).
  • Шаг \(2\): Если все вершины нарисованы, завершает алгоритм. Иначе переходит к шагу \(1\).

Количество проходов определяется как количество раз, которое Copil Copac выполняет шаг \(1\).

Найдите количество проходов, необходимых Copil Copac для рисования дерева.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Затем следует описание наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин дерева.

Следующие \(n - 1\) строк каждого набора содержат по два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\)) — концы ребра \((u_i,v_i)\), которое является \(i\)-м ребром в списке. Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество проходов, необходимых Copil Copac для рисования дерева.

Примечание

В первом наборе входных данных:

После первого прохода дерево будет выглядеть так:

После второго прохода:

Таким образом, Copil Copac нужно \(2\) прохода, чтобы нарисовать дерево.

D. Дерево MEX

Деревья дп Перебор *2800

Дано дерево с \(n\) вершинами. Каждую вершину дерева вы можете раскрасить в \(0\) или \(1\).

Значение пути \((u,v)\) равно MEX\(^\dagger\) цветов вершин на кратчайшем пути между \(u\) и \(v\).

Значение раскраски равно сумме значений всех путей \((u,v)\) таких, что \(1 \leq u \leq v \leq n\).

Чему равно максимально возможное значение раскраски дерева?

\(^{\dagger}\) MEX (minimum excluded) массива — это наименьшее неотрицательное целое число, которое не принадлежит массиву.

Например:

  • MEX \([2,2,1]\) равно \(0\), потому что \(0\) не принадлежит массиву.
  • MEX \([3,1,0,1]\) равно \(2\), потому что \(0\) и \(1\) принадлежат массиву, но \(2\) нет.
  • MEX \([0,3,1,2]\) равно \(4\), потому что \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, но \(4\) нет.
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Следующие \(n-1\) строк каждого набора содержат \(2\) целых числа \(a_i\) и \(b_i\) (\(1 \leq a_i, b_i \leq n, a_i \neq b_i\)) — ребро между вершинами \(a_i\) и \(b_i\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимально возможное значение любой раскраски дерева.

Примечание

В первом примере мы закрасим вершину \(2\) в \(1\), а вершины \(1,3\) в \(0\). Затем мы рассмотрим все пути:

  • \((1,1)\) со значением \(1\)
  • \((1,2)\) со значением \(2\)
  • \((1,3)\) со значением \(2\)
  • \((2,2)\) со значением \(0\)
  • \((2,3)\) со значением \(2\)
  • \((3,3)\) со значением \(1\)

Сумма значений равна \(8\), что является максимально возможной суммой.

F. Третья благодать

дп Структуры данных *3200

Даны \(n\) отрезков и \(m\) точек на числовой прямой. \(i\)-й отрезок имеет границы \([l_i,r_i]\), а \(i\)-я точка находится на координате \(i\) и имеет коэффициент \(p_i\).

Изначально все точки неактивны. Вам нужно выбрать подмножество из \(m\) точек для активации. Для каждого из \(n\) интервалов мы определяем его стоимость как:

  • \(0\), если в интервале нет активированных точек;
  • коэффициент активированной точки с наибольшей координатой внутри интервала в противном случае.

Ваша задача — максимизировать сумму стоимостей всех интервалов, выбирая, какие точки активировать.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Затем следует описание наборов.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^6, 1 \le m \le 10^6\)) — количество интервалов и количество точек.

Следующие \(n\) строк каждого набора содержат два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)) — концы \(i\)-го интервала.

Следующая строка каждого набора содержит \(m\) целых чисел \(p_1,p_2,\ldots,p_m\) (\(0 \le p_i \le 10^9\)) — коэффициенты точек.

Гарантируется, что сумма \(n\) не превышает \(10^6\), а сумма \(m\) не превышает \(10^6\).

Выходные данные

Выведите максимально возможную сумму стоимостей всех интервалов.

Примечание

В первом примере мы можем активировать точки \(1\) и \(8\). Сумма стоимостей всех интервалов будет \(78+30=108\).

Во втором примере мы не будем активировать ни одной точки. Сумма стоимостей всех интервалов будет \(0\).

E. Задачка на комбинаторику

дп Комбинаторика Перебор *2200

Напомним, что биномиальный коэффициент \(\binom{x}{y}\) вычисляется следующим образом (\(x\) и \(y\) — неотрицательные целые числа):

  • если \(x < y\), то \(\binom{x}{y} = 0\);
  • в противном случае \(\binom{x}{y} = \frac{x!}{y! \cdot (x-y)!}\).

Дан массив \(a_1, a_2, \dots, a_n\) и целое число \(k\). Вам нужно вычислить новый массив \(b_1, b_2, \dots, b_n\), где

  • \(b_1 = (\binom{1}{k} \cdot a_1) \bmod 998244353\);
  • \(b_2 = (\binom{2}{k} \cdot a_1 + \binom{1}{k} \cdot a_2) \bmod 998244353\);
  • \(b_3 = (\binom{3}{k} \cdot a_1 + \binom{2}{k} \cdot a_2 + \binom{1}{k} \cdot a_3) \bmod 998244353\), и так далее.

Формально, \(b_i = (\sum\limits_{j=1}^{i} \binom{i - j + 1}{k} \cdot a_j) \bmod 998244353\).

Обратите внимание, что массив задан в измененном виде, и вы должны вывести его в измененном виде.

Входные данные

В единственной строке ввода содержатся шесть целых чисел \(n\), \(a_1\), \(x\), \(y\), \(m\) и \(k\) (\(1 \le n \le 10^7\); \(0 \le a_1, x, y < m\); \(2 \le m \le 998244353\); \(1 \le k \le 5\)).

Массив \([a_1, a_2, \dots, a_n]\) генерируется следующим образом:

  • \(a_1\) задан во входных данных;
  • для \(2 \le i \le n\), \(a_i = (a_{i-1} \cdot x + y) \bmod m\).
Выходные данные

Поскольку вывод \(10^7\) целых чисел может быть слишком медленным, вы должны выполнить следующее:

Пусть \(c_i = b_i \cdot i\) (без взятия остатка от деления на \(998244353\) после умножения). Выведите целое число \(c_1 \oplus c_2 \oplus \dots \oplus c_n\), где \(\oplus\) обозначает оператор побитового исключающего ИЛИ.

F. Зомби

Бинарный поиск дп *3200

Поликарп играет в компьютерную игру, в которой он управляет группой выживших в постапокалиптическом мире. Мир захвачен ордами зомби, которые рвутся на базу выживших. Зомби будут пытаться пробраться на базу выживших в течение \(x\) минут, начиная с минуты \(0\). Всего на базу есть \(n\) входов, каждую минуту через каждый вход пытается пробраться один зомби.

Чтобы ограничить вторжение зомби, выжившие могут охранять входы на базу. Есть два варианта:

  • вручную — отстреливать зомби на определенном входе;
  • автоматически — установить электрическую сетку на определенном входе, чтобы поджаривать зомби.

Если в течение какой-то минуты вход охраняется любым или обоими способами, в эту минуту зомби не пробираются на базу через этот вход.

Каждый вход охраняется одним из выживших. \(i\)-й вход охраняется с минуты \(l_i\) по минуту \(r_i\) не включительно — \([l_i, r_i)\).

В распоряжении выживших есть \(k\) генераторов, при помощи которых можно охранять входы автоматически. Каждый вход должен быть подключён ровно к одному генератору, но при этом каждый генератор может запитать любое количество входов. Каждый генератор будет работать ровно \(m\) минут подряд. Поликарп выбирает время запуска каждого генератора независимо друг от друга, этот интервал длиной \(m\) минут должен вкладываться в интервал \([0, x)\).

Поликарп — не совсем нормальный игрок. Он хочет, чтобы игра была для него как можно сложнее. Поэтому он подключит каждый вход к генератору и настроит время работы генераторов так, чтобы как можно больше зомби пробралось на базу. Помогите ему это сделать!

Входные данные

В первой строке записано четыре целых числа \(n, k, x\) и \(m\) (\(1 \le k \le n \le 2000\); \(1 \le m \le x \le 10^9\)) — количество входов, количество генераторов, длительность атаки зомби и дилтельность всех генераторов.

В \(i\)-й из следующий \(n\) строк записаны два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i < r_i \le x\)) — отрезок времени, в течение которого \(i\)-й вход охраняется вручную.

Выходные данные

Выведите одно целое число — наибольшее количество зомби, которые могут пробраться на базу после того как Поликарп подсоединит каждый вход к некоторому генератору и выберет время для каждого генератора.

G. Ксюша и шиншилла

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное реализация снм *1800

У Ксюши есть домашняя шиншилла, дерево на \(n\) вершинах и огромные ножницы. Деревом называется связный граф без циклов. Сейчас Ксюша сидит на скучном уроке физики и думает над тем, как развлечь своего питомца.

Шиншиллам нравится играть с веточками. Веточкой называется дерево из \(3\) вершин.

Веточка выглядит так.

Разрезом называется удаление некоторого (ещё не отрезанного) ребра в дереве. У Ксюши полно свободного времени, поэтому она может себе позволить сделать достаточно разрезов, чтобы дерево распалось на веточки. Другими словами, после нескольких (возможно нуля) разрезов, каждая вершина должна принадлежать ровно одной веточке.

Помогите Ксюше выбрать отрезаемые рёбра или сообщите, что сделать это невозможно.

Входные данные

В первой строке дано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано единственное целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Следующие \(n - 1\) строк каждого набора входных данных содержат целые числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\)) — номера вершин, которые соединяет \(i\)-е ребро.

Гарантируется, что данный набор рёбер образует дерево. Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите ответ для каждого набора входных данных.

Если искомого способа разрезать дерево не существует, выведите \(-1\).

В противном случае выведите целое число \(k\) — количество отрезаемых рёбер. В следующей строке выведите \(k\) различных целых чисел \(e_i\) (\(1 \le e_i < n\)) — номера отрезаемых рёбер. Если \(k = 0\), выведите вместо этого пустую строку.

Если решений несколько, вы можете вывести любое.

Примечание
Первый набор входных данных в первом тесте.

E. Старый мобильник

дп Комбинаторика Теория вероятностей *3500

Во время последней миссии звездолета U.S.S. Coder капитан Ян Битовский был случайно телепортирован на поверхность неизвестной планеты.

Пытаясь найти обратную дорогу, Ян обнаружил артефакт древней цивилизации планеты Земля — мобильное устройство, способное осуществлять межзвездные звонки, созданное компанией Byterola. К сожалению, возникла другая проблема. Хотя Ян, как представитель людей, прекрасно знал старую нотацию номеров мобильных телефонов, символы на клавиатуре устройства были полностью стерты и невидимы человеческому глазу. На старых клавиатурах было ровно \(m + 1\) кнопок, по одной на каждую цифру из системы счисления по основанию \(m\), и одна кнопка backspace, позволяющая стереть последнюю написанную цифру (если на экране ничего не написано, то эта кнопка ничего не делает, но она нажатие все равно считается).

Ян хочет связаться со своей командой. Ему нужно набрать определенное число (также из системы счисления по основанию \(m\), то есть цифры от \(0\) до \(m - 1\)). Он хочет знать математическое ожидание количества нажатий на кнопки, необходимое для связи с кораблем U.S.S. Coder. Ян всегда выбирает наиболее оптимальные кнопки с учетом своих текущих знаний. Кнопки неразличимы до тех пор, пока не будут нажаты.

Помогите ему!

Входные данные

В первой строке ввода находятся два целых числа \(n\) и \(m\) (\(1 \le n \le 10^6\), \(2 \le m \le 10^3\)), разделенные одним пробелом — длина номера U.S.S. Coder и основание системы счисления.

Во второй строке находятся \(n\) целых чисел от \(0\) до \(m - 1\): номер, который должен набрать Ян Битовский, в системе счисления по основанию \(m\).

Выходные данные

Выведите ожидаемое количество нажатий на кнопки по модулю \(1\,000\,000\,007\).

Формально, пусть \(M = 1\,000\,000\,007\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом примере на клавиатуре имеются две цифры (\(0\) и \(1\)) и кнопка backspace. Ян не может знать, какая из них какая, поэтому он нажимает случайную.

С вероятностью \(\frac{1}{3}\) он нажимает \(0\) и ему удается набрать номер экипажа.

С вероятностью \(\frac{1}{3}\) он нажимает backspace, и ничего не происходит. Затем с вероятностью \(\frac{1}{2}\) ему удается нажать \(0\) (завершая процесс). В противном случае, с вероятностью \(\frac{1}{2}\), он набирает \(1\), который затем должен удалить с помощью backspace и нажать последнюю кнопку, которая должна быть \(0\). В этом случае ему потребуется \(4\) нажатий на кнопку.

Наконец, он может нажать сначала кнопку \(1\), также с вероятностью \(\frac{1}{3}\). Затем, если он нажмет backspace с вероятностью \(50\%\), то все будет готово и ему останется только нажать последнюю кнопку (всего 3 нажатия). В худшем случае, он нажмет сначала кнопку \(0\) и должен будет удалить обе с помощью backspace, а затем, наконец, набрать число \(0\) (всего 5 нажатий).

Мы получаем ожидаемое значение \(\frac{16}{6}\). Обратное к \(6\) по модулю \(1\;000\;000\;007\) равно \(166666668\), поэтому \(16 \cdot 166666668 = 666666674 \mod \; 1\;000\;000\;007\).

E. Подсчет суперпоследовательностей

дп Комбинаторика математика *2500

Вам дан массив \(a\) из \(n\) целых чисел, в котором все элементы \(a_i\) лежат в диапазоне \([1, k]\). Сколько различных массивов \(b\) из \(m\) целых чисел, где все элементы \(b_i\) лежат в диапазоне \([1, k]\), содержат \(a\) в качестве подпоследовательности? Два массива считаются различными, если они отличаются хотя бы в одной позиции.

Последовательность \(x\) является подпоследовательностью последовательности \(y\), если \(x\) может быть получена из \(y\) путем удаления нескольких (возможно, нуля или всех) элементов.

Поскольку ответ может быть очень большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора содержит три целых числа \(n\), \(m\), \(k\) (\(1 \le n \le 2\cdot 10^5\), \(n \le m \le 10^9\), \(1 \le k \le 10^9\)) — размер \(a\), размер \(b\) и максимально допустимое значение в массивах, соответственно.

Следующая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots a_n\) (\(1\le a_i \le k\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество подходящих массивов \(b\), по модулю \(10^9+7\).

Примечание

В первом примере, поскольку \(k=1\), существует только один массив размера \(m\), состоящий из целых чисел \([1, k]\). Этот массив (\([1, 1, \ldots, 1]\)) содержит исходный массив в качестве подпоследовательности, поэтому ответ - 1.

Во втором примере есть \(9\) массивов: \([1, 1, 2, 2]\), \([1, 2, 1, 2]\), \([1, 2, 2, 1]\), \([1, 2, 2, 2]\), \([1, 2, 2, 3]\), \([1, 2, 3, 2]\), \([1, 3, 2, 2]\), \([2, 1, 2, 2]\), \([3, 1, 2, 2]\).

В четвертом примере, поскольку \(m=n\), единственным массивом размера \(m\), который содержит \(a\) в качестве подпоследовательности, является сам \(a\).

D. Сортировка шаров

дп сортировки Структуры данных *2100

У вас есть \(n\) разноцветных шаров, расположенных в ряд. Шары покрашены в \(n\) различных цветов, пронумерованных от \(1\) до \(n\). Цвет \(i\)-го слева шара равен \(c_i\). Вы хотите переупорядочить шары так, чтобы \(i\)-й слева шар имел цвет \(i\). Для этого вы можете использовать \(k \ge 1\) одинаковых шаров цвета \(0\).

Из-за странных свойств шаров их можно переупорядочивать только используя следующие операции:

  1. Поместить шар цвета \(0\) на любую позицию в ряду (между любыми двумя соседними шарами, перед первым шаром или после последнего шара), не меняя порядок остальных шаров. Эту операцию можно использовать не более \(k\) раз, так как у вас есть всего \(k\) шаров цвета \(0\).
  2. Выбрать любой шар ненулевого цвета, такой, что хотя бы один из соседних с ним шаров имеет цвет \(0\), и переместить этот шар (ненулевого цвета) на любую позицию в ряду (между любыми двумя соседними шарами, перед первым шаром или после последнего шара), не меняя порядок остальных шаров. Эту операцию можно использовать сколько угодно раз, но за каждое её использование вы должны заплатить \(1\) монету.

Вы можете применять эти операции в любом порядке. После того, как вы закончите применять операции, все шары цвета \(0\) магическим образом исчезнут из ряда. После этого в ряду останутся только \(n\) шаров ненулевых цветов.

Какое наименьшее количество монет вам нужно потратить на операции второго типа, чтобы после исчезновения всех шаров нулевого цвета \(i\)-й слева шар имел цвет \(i\) для всех \(i\) от \(1\) до \(n\)? Можно показать, что при данных ограничениях это всегда можно сделать.

Решите задачу для всех \(k\) от \(1\) до \(n\).

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке задано одно целое число \(n\) (\(1 \le n \le 500\)) — количество шаров в ряду.

Во второй строке заданы \(n\) различных целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le n\)) — цвета шаров в ряду.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(500\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел: \(i\)-е (\(1 \le i \le n\)) из них должно быть равно наименьшему количеству монет, которого достаточно для требуемого переупорядочивания шаров при \(k = i\).

Примечание

В первом наборе входных данных есть \(n = 6\) шаров. Цвета шаров слева направо равны \([\, 2, 3, 1, 4, 6, 5 \,]\).

Пусть \(k = 1\). Один из способов переставить шары в требуемом порядке за \(3\) монеты:

\([\, 2, 3, 1, 4, 6, 5 \,]\) \(\xrightarrow{\, 1 \,}\) \([\, 2, 3, 1, 4, \color{red}{0}, 6, 5 \,]\) \(\xrightarrow{\, 2 \,}\) \([\, 2, 3, \color{blue}{4}, 1, 0, 6, 5 \,]\) \(\xrightarrow{\, 2 \,}\) \([\, \color{blue}{1}, 2, 3, 4, 0, 6, 5 \,]\) \(\xrightarrow{\, 2\,}\) \([\, 1, 2, 3, 4, 0, 5, \color{blue}{6} \,]\)

Число над стрелкой обозначает тип операции. Красным выделены шары, вставленные в операциях первого типа, синим — шары, передвинутые в операциях второго типа.

Можно показать, что для \(k = 1\) невозможно расставить шары в правильном порядке, потратив меньше \(3\) монет.

Пусть \(k = 2\). Один из способов переставить шары в требуемом порядке за \(2\) монеты:

\([\, 2, 3, 1, 4, 6, 5 \,]\) \(\xrightarrow{\, 1 \,}\) \([\, 2, 3, 1, 4, 6, \color{red}{0}, 5\,]\) \(\xrightarrow{\, 2 \,}\) \([\, 2, 3, 1, 4, 0, 5, \color{blue}{6}\,]\) \(\xrightarrow{\, 1 \,}\) \([\, 2, 3, \color{red}{0}, 1, 4, 0, 5, 6 \,]\) \(\xrightarrow{\, 2 \,}\) \([\, \color{blue}{1}, 2, 3, 0, 4, 0, 5, 6\,]\)

Эта последовательность операций является корректной и для \(k\), больших \(2\).

Можно показать, что для \(k\) от \(2\) до \(6\) невозможно расставить шары в правильном порядке, потратив меньше \(2\) монет.

Во втором запросе шары уже стоят в правильном порядке, поэтому ответы для всех \(k\) равны \(0\).

E. Игра в уменьшения

дп жадные алгоритмы интерактив Конструктив поиск в глубину и подобное *2400

Это интерактивная задача.

Рассмотрим следующую игру для двух игроков:

  • Изначально на доску выписывается массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\).
  • Игра состоит из раундов. На каждом раунде происходит следующее:
    • Первый игрок выбирает любое \(i\), такое, что \(a_i \gt 0\). Если такого \(i\) не существует, первый игрок проигрывает (второй игрок выигрывает) и игра заканчивается.
    • Второй игрок выбирает любое \(j \neq i\), такое, что \(a_j \gt 0\). Если такого \(j\) не существует, второй игрок проигрывает (первый игрок выигрывает) и игра заканчивается.
    • Вычисляется \(d = \min(a_i, a_j)\). Значения \(a_i\) и \(a_j\) одновременно уменьшаются на \(d\), после чего начинается следующий раунд.

Можно показать, что игра всегда заканчивается после конечного числа раундов.

Выберите, за кого вы хотите сыграть (за первого игрока или за второго) в эту игру, и выиграйте за него.

Входные данные

В первой строке задано целое число \(n\) (\(1 \le n \le 300\)) — длина массива \(a\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 300\)) — массив \(a\).

Протокол взаимодействия

Взаимодействие начинается после считывания \(n\) и массива \(a\).

Вы должны начать взаимодействие с вывода одной строки «First» или «Second», обозначающей игрока, за которого вы будете играть.

На каждом раунде происходит следующее:

  • Если вы выбрали первого игрока, то вы должны вывести одно целое число \(i\) (\(1 \le i \le n\)) в отдельной строке. После этого вы должны считать одно целое число \(j\) (\(-1 \le j \le n\)), выведенное в отдельной строке.

    Если \(j = -1\), то это значит, что вы сделали некорректный ход. В таком случае вы должны немедленно завершить вашу программу.

    Если \(j = 0\), то это значит, что второй игрок не может сделать корректный ход, и, соответственно, вы выигрываете игру. В этом случае вы также должны завершить вашу программу.

    Иначе \(j\) равняется индексу, выбранному вторым игроком, и вы должны перейти к следующему раунду.

  • Если вы выбрали второго игрока, то вы должны считать одно целое число \(i\) (\(-1 \le i \le n\)), выведенное в отдельной строке.

    Если \(i = -1\), то это значит, что вы сделали некорректный ход на предыдущем раунде. В этом случае вы должны немедленно завершить вашу программу.

    Если \(i = 0\), то это значит, что первый игрок не может сделать корректный ход и вы выигрываете игру. В этом случае вы также должны завершить вашу программу.

    Иначе \(i\) равняется индексу, выбранному первым игроком. В таком случае вы должны вывести одно целое число \(j\) (\(1 \le j \le n\)) в отдельной строке и перейти к следующему раунду.

После вывода \(i\) или \(j\) не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

В этой задаче отключены взломы.

Примечание

В первом примере \(n = 4\) и массив \(a\) равен \([\, 10, 4, 6, 3 \,]\). Ход игры будет следующим:

  • После считывания массива \(a\) программа участника выбирает первого игрока и выводит «First».
  • Первый раунд: первый игрок выбирает \(i = 1\), второй игрок выбирает \(j = 3\). Считается \(d = \min(a_1, a_3) = \min(10, 6) = 6\). Элементы \(a_1\) и \(a_3\) уменьшаются на \(6\). Массив \(a\) становится равен \([\, 4, 4, 0, 3 \,]\).
  • Второй раунд: первый игрок выбирает \(i = 2\), второй игрок выбирает \(j = 1\). Считается \(d = \min(a_2, a_1) = \min(4, 4) = 4\). Элементы \(a_2\) и \(a_1\) уменюшаются на \(4\). Массив \(a\) становится равен \([\, 0, 0, 0, 3 \,]\).
  • Третий раунд: первый игрок выбирает \(i = 4\). Не существует \(j \neq 4\), такого, что \(a_j > 0\), поэтому второй игрок не может сделать ход и первый игрок выигрывает. Интерактор выводит \(j = 0\), после считывания которого программа участника завершается.

Во втором примере \(n = 6\) и массив \(a\) равен \([\, 4, 5, 5, 11, 3, 2 \,]\). Ход игры будет следующим:

  • Программа участника выбирает второго игрока и выводит «Second».
  • Первый раунд: \(i = 2\), \(j = 4\), \(a = [\, 4, 0, 5, 6, 3, 2 \,]\).
  • Второй раунд: \(i = 5\), \(j = 4\), \(a = [\, 4, 0, 5, 3, 0, 2 \,]\).
  • Третий раунд: \(i = 4\), \(j = 3\), \(a = [\, 4, 0, 2, 0, 0, 2 \,]\).
  • Четвертый раунд: \(i = 6\), \(j = 1\), \(a = [\, 2, 0, 2, 0, 0, 0 \,]\).
  • Пятый раунд: \(i = 1\), \(j = 3\), \(a = [\, 0, 0, 0, 0, 0, 0 \,]\).
  • Шестой раунд: первый игрок не может сделать ход и второй игрок выигрывает. Интерактор выводит \(i = 0\), после считывания которого программа участника завершается.

Обратите внимание, что лишние переводы строки в примерах приведены только для удобства и в действительности вам не нужно их выводить. Программа жюри также не будет выводить лишних переводов строки.

F. Рельсотроны

графы дп Перебор поиск в глубину и подобное *2200

Тёма играет в одну очень интересную компьютерную игру.

Во время прохождения очередной миссии, персонаж Тёмы оказался на незнакомой планете. В отличие от Земли эта планета плоская и представима в виде прямоугольника \(n \times m\).

Персонаж Тёмы находится в точке с координатами \((0, 0)\), чтобы успешно завершить миссию ему необходимо живым добраться до точки с координатами \((n, m)\).

Пусть персонаж компьютерной игры находится в координате \((i, j)\). Каждую секунду, начиная с первой, Тёма может:

  • либо воспользоваться технологией гиперпрыжка по вертикали, после чего его персонаж попадёт в координату \((i + 1, j)\) в конце секунды,
  • либо воспользоваться технологией гиперпрыжка по горизонтали, после чего его персонаж попадёт в координату \((i, j + 1)\) в конце секунды,
  • либо Тёма может не совершать гиперпрыжок, тогда его персонаж не будет перемещаться в течение этой секунды.

Пришельцы, что обитают на этой планете очень опасны и настроены враждебно. Поэтому они будут стрелять из своих рельсотронов \(r\) раз.

Каждый выстрел полностью простреливает одну координату по вертикали или горизонтали. Если в момент выстрела (в конце секунды) персонаж находится в зоне его поражения, то он умирает.

Так как Тёма посмотрел исходный код игры, он знает полную информацию о каждом выстреле — время, простреливаемую координату, а также направление выстрела.

За какое минимальное время персонаж может добраться до нужной точки? Если он обречён на смерть и не сможет добраться до точки с координатами \((n, m)\), выведите \(-1\).

Входные данные

В первой строке входных данных содержится одно целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержатся два целых числа \(n\) и \(m\) (\(1 \le n \cdot m \le 10^4\)) — размеры планеты, её высота и ширина.

Во второй набора данных содержится единственное целое число \(r\) (\(1 \le r \le 100\)) — количество выстрелов.

Далее следует \(r\) строк, каждая из которых описывает один выстрел.

Выстрел описывается тремя целыми числами \(t\), \(d\), \(coord\). Где \(t\) — секунда, в которую будет произведён данный выстрел (\(1 \le t \le 10^9\)). \(d\) — обозначение направления выстрела (\(d = 1\) обозначает выстрел вдоль горизонтали, \(d = 2\) обозначает выстрел вдоль вертикали). \(coord\) — величина простреливаемой координаты (\(0 \le coord \le n\) при \(d = 1\), \(0 \le coord \le m\) при \(d = 2\)).

Cумма произведений \(n \cdot m\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное время, за которое персонаж сможет добраться до координаты \((n, m)\), либо же \(-1\), если ему суждено погибнуть.

Примечание

В первом наборе входных данных персонаж может перемещаться следующим образом: \((0, 0) \rightarrow (0, 1) \rightarrow (0, 2) \rightarrow (0, 3) \rightarrow (0, 3) \rightarrow (1, 3)\).

Во втором примере входных данных персонаж не сможет выйти за пределы прямоугольника, который будет полностью простреливаться выстрелами на \(2\) секунде.

C. Мирские числа

дп жадные алгоритмы математика Перебор Строки *1800

Мирские цифры обозначаются заглавными латинскими буквами от A до E. Кроме того, значение буквы A равно \(1\), B равно \(10\), C равно \(100\), D равно \(1000\), E равно \(10000\).

Мирское число — это последовательность мирских цифр. Значение мирского числа вычисляется следующим образом: суммируются значения всех цифр, но некоторые цифры берутся со знаком минус; цифра берется со знаком минус, если справа от нее есть цифра со значением строго больше (не обязательно сразу после нее); в противном случае цифра берется со знаком плюс.

Например, значение мирского числа DAAABDCA равно \(1000 - 1 - 1 - 1 - 10 + 1000 + 100 + 1 = 2088\).

Вам дано мирское число. Вы можете изменить не более одной цифры в нем. Вычислите максимально возможное значение полученного числа.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)), состоящую из заглавных латинских букв от A до E — заданное мирское число.

Сумма длин строк по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное значение числа, если вы можете изменить в нем не более одной цифры.

Примечание

В первом примере можно получить EAAABDCA со значением \(10000-1-1-1-10+1000+100+1=11088\).

Во втором примере можно получить EB со значением \(10000+10=10010\).

C. Тенцинг и шарики

дп *1500

Enjoy erasing Tenzing, identified as Accepted!

У Тенцинга есть \(n\) шариков, расположенных в один ряд. Цвет \(i\)-го шарика слева — \(a_i\).

Тенцинг может проделать следующую операцию любое количество раз:

  • выбрать \(i\) и \(j\) такие, что \(1\leq i < j \leq |a|\) и \(a_i=a_j\),
  • удалить из массива \(a_i,a_{i+1},\ldots,a_j\) (и уменьшить индексы всех элементов справа от \(a_j\) на \(j-i+1\)).

Тенцинг хочет узнать максимальное количество шариков, которое он может удалить.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1\leq t\leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит одно целое число \(n\) (\(1\leq n\leq 2\cdot 10^5\)) — количество шариков.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq a_i \leq n\)) — цвета шариков.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное количество шариков, которые может удалить Тенцинг.

Примечание

В первом примере Тенцинг выберет \(i=2\) и \(j=3\) в первой операции так, что \(a=[1,3,3]\). Затем Тенцинг снова выберет \(i=2\) и \(j=3\) во второй операции так, что \(a=[1]\). Таким образом, Тенцинг может удалить в общей сложности \(4\) шарика.

Во втором примере Тенцинг выберет \(i=1\) и \(j=3\) в первой и единственной операции так, что \(a=[2]\). Таким образом, Тенцинг может удалить \(3\) шарика.

E. Тенцинг и треугольник

геометрия дп жадные алгоритмы математика Структуры данных *2300

На двумерной плоскости имеется \(n\) попарно различных точек и прямая \(x+y=k\). Точка \(i\) находится в точке \((x_i,y_i)\). Все точки имеют неотрицательные координаты и находятся строго под прямой. Другими словами, \(0 \leq x_i,y_i, x_i+y_i < k\).

Тенцинг хочет стереть все точки. Он может выполнить следующие две операции:

  1. Нарисовать треугольник: Тенцинг выберет два неотрицательных целых числа \(a\), \(b\), которые удовлетворяют условию \(a+b<k\), тогда все точки внутри треугольника, образованного прямыми \(x=a\), \(y=b\) и \(x+y=k\) будут стерты. Можно показать, что этот треугольник является равнобедренным прямоугольным треугольником. Пусть длины сторон треугольника равны \(l\), \(l\) и \(\sqrt 2 l\) соответственно. Тогда стоимость этой операции равна \(l \cdot A\).

    Синяя область следующего рисунка описывает треугольник с \(a=1,b=1\) со стоимостью \(=1\cdot A\).

  2. Стереть определенную точку: Тенцинг выбирает целое число \(i\), которое удовлетворяет условию \(1 \leq i \leq n\) и стирает точку \(i\). Стоимость этой операции равна \(c_i\).

Помогите Тенцингу найти минимальную стоимость стирания всех точек.

Входные данные

Первая строка содержит три целых числа \(n\), \(k\) и \(A\) (\(1\leq n,k\leq 2\cdot 10^5\), \(1\leq A\leq 10^4\)) — количество точек, коэффициент, описывающий гипотенузу треугольника и коэффициент, описывающий стоимость построения треугольника.

В следующих \(n\) строках входных данных \(i\)-я строка содержит три целых числа \(x_i,y_i,c_i\) (\(0\leq x_i,y_i,x_i+y_i< k\), \(1\leq c_i\leq 10^4\)) — координаты \(i\)-й точки и стоимость ее стирания с помощью второй операции. Гарантируется, что координаты попарно различны.

Выходные данные

Выведите одно целое число –минимальную стоимость стирания всех точек.

Примечание

Рисунок первого примера:

Тенцинг выполняет следующие операции:

  1. построить треугольник с \(a=3,b=2\), стоимость \(=1\cdot A=1\).
  2. стереть первую точку, стоимость \(=1\).
  3. стереть вторую точку, стоимость \(=1\).
  4. стереть третью точку, стоимость \(=1\).

Рисунок для второго примера:

G. Тенцинг и случайные операции

дп Комбинаторика математика Теория вероятностей *2800

Еще одна задача про случайность.

У Тенцинга есть массив \(a\) длины \(n\) и целое число \(v\).

Тенцинг выполняет следующую операцию \(m\) раз:

  1. Выбрать целое число \(i\) такое, что \(1 \leq i \leq n\), равномерно случайным образом.
  2. Для всех \(j\) таких, что \(i \leq j \leq n\), присвоить \(a_j := a_j + v\).

Тенцинг хочет узнать ожидаемое значение \(\prod_{i=1}^n a_i\) после выполнения \(m\) операций, по модулю \(10^9+7\).

Формально, пусть \(M = 10^9+7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Первая строка ввода содержит три целых числа \(n\), \(m\) и \(v\) (\(1\leq n\leq 5000\), \(1\leq m,v\leq 10^9\)).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq a_i\leq 10^9\)).

Выходные данные

Выведите ожидаемое значение \(\prod_{i=1}^n a_i\) по модулю \(10^9+7\).

Примечание

Существует три возможных значения \(a\) после выполнения всех \(m\) операций:

1. \(a_1=2,a_2=12\) с \(\frac{1}{4}\) вероятностью.

2. \(a_1=a_2=12\) с \(\frac{1}{4}\) вероятностью.

3. \(a_1=7,a_2=12\) с \(\frac{1}{2}\) вероятностью.

Таким образом, ожидаемое значение \(a_1\cdot a_2\) равно \(\frac{1}{4}\cdot (24+144) + \frac{1}{2}\cdot 84=84\).

H. Тенцинг и случайные вещественные числа

битмаски графы дп математика Теория вероятностей *3000

Имеется \(n\) непрерывно распределённых случайных вещественных чисел от 0 до 1 включительно, которые обозначаются как \(x_1, x_2, \ldots, x_n\).

Тенцинг имеет \(m\) условий. Каждое условие имеет вид \(x_i+x_j\le 1\) или \(x_i+x_j\ge 1\).

Тенцинг хочет узнать вероятность того, что все условия выполнены, по модулю \(998~244~353\).

Формально, пусть \(M = 998~244~353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1\le n\le 20\), \(0\le m\le n^2+n\)).

Затем следующие \(m\) строк содержат три целых числа \(t\), \(i\) и \(j\) (\(t \in \{0,1\}\), \(1\le i\le j\le n\)).

  • Если \(t=0\), то условие равно \(x_i+x_j\le 1\).
  • Если \(t=1\), то условие равно \(x_i+x_j\ge 1\).

Гарантируется, что все условия попарно различны.

Выходные данные

Выведите вероятность того, что все условия выполнены, по модулю \(M = 998~244~353\).

Примечание

В первом примере условиями являются \(x_1+x_2 \le 1\) и \(x_3+x_3\ge 1\), и вероятность выполнения каждого условия равна \(\frac 12\), поэтому вероятность того, что они оба выполнены, равна \(\frac 12\cdot \frac 12=\frac 14\), по модулю \(998~244~353\) равно \(748683265\).

Во втором примере ответ равен \(\frac 14\).

В третьем примере ответ равен \(\frac 1{16}\).

В четвертом случае сумма всех переменных должна быть равна \(2\), поэтому вероятность равна \(0\).

I. Тенцинг и ожерелье

дп жадные алгоритмы разделяй и властвуй *3500

яркое, солнечное и невинное......

У Тенцинга есть красивое ожерелье. Ожерелье состоит из \(n\) жемчужин, пронумерованных от \(1\) до \(n\), с нитками, соединяющими жемчужины \(i\) и \((i \text{ mod } n)+1\) для всех \(1 \leq i \leq n\).

Однажды Тенцинг захотел разделить ожерелье на несколько частей, перерезав несколько нитей. На каждой связной части ожерелья должно быть не более \(k\) жемчужин. Время, необходимое для разрезания каждой нити, может быть неодинаковым. Тенцинг должен потратить \(a_i\) минут, чтобы перерезать нить между жемчужинами \(i\) и \((i \text{ mod } n)+1\).

Тенцинг хочет узнать минимальное время в минутах, которое требуется, чтобы разрезать ожерелье так, чтобы в каждой связной части было не более \(k\) жемчужин.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов. Далее следует описание наборов.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(2\leq n\leq 5\cdot 10^5\), \(1\leq k <n\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq a_i\leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимально необходимое общее время в минутах.

Примечание

В первом наборе ожерелье будет разрезано на \(3\) части: \([1,2][3,4][5]\), поэтому общее время составит \(3\).

Во втором наборе ожерелье будет разрезано на \(3\) части: \([5,1][2][3,4]\). Тенцинг разрежет нитки, соединяющие \((1,2), (2,3)\) и \((4,5)\), поэтому общее время составит \(a_1+a_2+a_4=7\).

D. Яблоня

Деревья дп Комбинаторика математика поиск в глубину и подобное *1200

У Тимофея в саду растёт яблоня, она представляет собой корневое дерево из \(n\) вершин с корнем в вершине \(1\) (вершины пронумерованы от \(1\) от \(n\)). Деревом называется связный граф без циклов, петель и кратных ребер.

Это дерево очень необычное — оно растёт корнем вверх. Впрочем, в этом нет ничего необычного для деревьев в программировании.

Яблоня достаточно молодая, поэтому на ней вырастет всего два яблока. Яблоки вырастут в определённых вершинах (эти вершины могу совпадать). После того как яблоки вырастут, Тимофей начнёт трясти яблоню, пока яблоки не упадут. Каждый раз, когда Тимофей трясёт яблоню, с каждым из яблок происходит следующее:

Пусть яблоко сейчас находится в вершине \(u\).

  • Если у вершины \(u\) есть ребёнок, то яблоко перемещается в него (если таких вершин несколько, то яблоко может переместиться в любую из них).
  • Иначе яблоко падает с дерева.

Можно показать, что через конечное время оба яблока упадут с дерева.

У Тимофея есть \(q\) предположений, в каких вершинах могут вырасти яблоки. Он предполагает, что яблоки могут вырасти в вершинах \(x\) и \(y\), и хочет узнать количество пар вершин (\(a\), \(b\)), с которых яблоки могут упасть с дерева, где \(a\) — вершина, с которой упадёт яблоко из вершины \(x\), \(b\) — вершина, с которой упадёт яблоко из вершины \(y\). Помогите ему это сделать.

Входные данные

В первой строке дано число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных даны числа \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество вершин в яблоне.

Далее следует \(n - 1\) строка, описывающая дерево. В \(i\)-й из них даны числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \ne v_i\)) — ребро в дереве.

В следующей строке дано единственное целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество предположений Тимофея.

Далее следует \(q\) строк, описывающих предположения Тимофея. В \(i\)-й строке даны числа \(x_i\) и \(y_i\) (\(1 \leq x_i, y_i \leq n\)) — предполагаемые вершины, на которых вырастут яблоки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\). Аналогично, сумма \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса Тимофея выведите количество упорядоченных пар вершин, с которых яблоки могут упасть с дерева, если предположение окажется верным, в отдельной строке.

Примечание

В первом примере:

  • Для первого запроса существует две возможные пары вершин, с которых яблоки могут упасть: \((4, 4), (5, 4)\).
  • Для второго запроса также существует две пары: \((5, 4), (5, 5)\).
  • Для третьего запроса есть всего одна пара: \((4, 4)\).
  • Для четвертого запроса существует \(4\) пары: \((4, 4), (4, 5), (5, 4), (5, 5)\).
Дерево из первого примера.

Во втором примере для первого предположения есть \(4\) возможных пар вершин, с которых могут упасть яблоки: \((2, 3), (2, 2), (3, 2), (3, 3)\). Для второго запроса есть всего одна возможная пара: \((2, 3)\). Для третьего запроса есть две пары: \((3, 2), (3, 3)\).

F1. Метрополитен в Омске (простая версия)

графы Деревья дп жадные алгоритмы математика поиск в глубину и подобное Структуры данных *1800

Это простая версия задачи. Единственное отличие между простой и сложной версией состоит в том, что в этой версии для всех вопросов \(u = 1\).

Как известно, Омск — столица Берляндии. Как и в любой столице, в Омске есть хорошо развитая система метрополитена. Метрополитен Омска представляет из себя некоторое количество станций, соединённых туннелями, причём между любыми двумя станциями есть ровно один путь, проходящий по каждому из туннелей не более одного раза. Иными словами, метрополитен представляет собой дерево.

Для развития метрополитена и привлечения жителей в Омске используется следующая система. Каждая станция имеет свой вес \(x \in \{-1, 1\}\). Если станция имеет вес \(-1\), то при посещении станции с жителя Омска взимается плата в \(1\) бурль. Если же вес станции равен \(1\), то житель Омска вознаграждается \(1\)-м бурлем.

Пока что есть только одна станция с номером \(1\) и весом \(x = 1\). Каждый день происходит одно из следующих событий:

  • К станции с номером \(v_i\) присоединяется новая станция с весом \(x\), и ей присваивается номер, на единицу больший количества уже существующих станций.
  • Лёша, живущий в Омске, задаётся вопросом: существует ли подотрезок\(\dagger\) (возможно, пустой) пути между вершинами \(u\) и \(v\) такой, что, проехав по нему, можно заработать ровно \(k\) бурлей (если \(k < 0\), то это означает, что на проезд придётся потратить \(k\) бурлей). Иначе говоря, Лёшу интересует, существует ли такой подотрезок пути, что сумма весов вершин в нем равна \(k\). Обратите внимание, что подотрезок может быть пустым, и тогда сумма равна \(0\).

Вы являетесь другом Лёши, поэтому Ваша задача — ответить на вопросы Лёши.

\(\dagger\)Подотрезок — непрерывная последовательность элементов.

Входные данные

В первой строке находится число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество событий.

Далее следует \(n\) строк, описывающих события. В \(i\)-й строке возможен один из вариантов:

  • Сначала идёт символ «+» (без кавычек), затем два числа \(v_i\) и \(x_i\) (\(x_i \in \{-1, 1\}\), также гарантируется, что вершина с номером \(v_i\) существует). В этом случае к станции с номером \(v_i\) присоединяется новая станция с весом \(x_i\).
  • Сначала идёт символ «?» (без кавычек), а затем три числа \(u_i\), \(v_i\) и \(k_i\) (\(-n \le k_i \le n\)). Гарантируется, что вершины с номерами \(u_i\) и \(v_i\) существуют. В этом случае необходимо определить, существует ли подотрезок (возможно, пустой) пути между станциями \(u_i\) и \(v_i\) с суммой весов ровно \(k_i\). В этой версии задачи гарантируется, что \(u_i = 1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого вопроса Лёши выведите «Yes» (без кавычек), если описанный в условии подотрезок существует, иначе выведите «No» (без кавычек).

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Пояснение к первому примеру.

Ответ на второй вопрос «Yes», так как существует путь \(1\).

В четвертом вопросе мы можем снова выбрать путь \(1\).

В пятом запросе ответ «Yes», так как есть путь \(1-3\).

В шестом запросе мы можем выбрать пустой путь, так как сумма весов на нем равна \(0\).

Нетрудно показать, что нет путей, удовлетворяющих первому и третьему запросу.

F2. Метрополитен в Омске (сложная версия)

Деревья дп математика поиск в глубину и подобное разделяй и властвуй Структуры данных *2300

Это сложная версия задачи. Единственное отличие между простой и сложной версией состоит в том, что в этой версии \(u\) может принимать любые возможные значения.

Как известно, Омск — столица Берляндии. Как и в любой столице, в Омске есть хорошо развитая система метрополитена. Метрополитен Омска представляет из себя некоторое количество станций, соединённых туннелями, причём между любыми двумя станциями есть ровно один путь, проходящий по каждому из туннелей не более одного раза. Иными словами, метрополитен представляет собой дерево.

Для развития метрополитена и привлечения жителей в Омске используется следующая система. Каждая станция имеет свой вес \(x \in \{-1, 1\}\). Если станция имеет вес \(-1\), то при посещении станции с жителя Омска взимается плата в \(1\) бурль. Если же вес станции равен \(1\), то житель Омска вознаграждается \(1\)-м бурлем.

Пока что есть только одна станция с номером \(1\) и весом \(x = 1\). Каждый день происходит одно из следующих событий:

  • К станции с номером \(v_i\) присоединяется новая станция с весом \(x\), и ей присваивается номер, на единицу больший количества уже существующих станций.
  • Лёша, живущий в Омске, задаётся вопросом: существует ли подотрезок\(\dagger\) (возможно, пустой) пути между вершинами \(u\) и \(v\) такой, что, проехав по нему, можно заработать ровно \(k\) бурлей (если \(k < 0\), то это означает, что на проезд придётся потратить \(k\) бурлей). Иначе говоря, Лёшу интересует, существует ли такой подотрезок пути, что сумма весов вершин в нем равна \(k\). Обратите внимание, что подотрезок может быть пустым, и тогда сумма равна \(0\).

Вы являетесь другом Лёши, поэтому Ваша задача — ответить на вопросы Лёши.

\(\dagger\)Подотрезок — непрерывная последовательность элементов.

Входные данные

В первой строке находится число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество событий.

Далее следует \(n\) строк, описывающих события. В \(i\)-й строке возможен один из вариантов:

  • Сначала идёт символ «+» (без кавычек), затем два числа \(v_i\) и \(x_i\) (\(x_i \in \{-1, 1\}\), также гарантируется, что вершина с номером \(v_i\) существует). В этом случае к станции с номером \(v_i\) присоединяется новая станция с весом \(x_i\).
  • Сначала идёт символ «?» (без кавычек), а затем три числа \(u_i\), \(v_i\) и \(k_i\) (\(-n \le k_i \le n\)). Гарантируется, что вершины с номерами \(u_i\) и \(v_i\) существуют. В этом случае необходимо определить, существует ли подотрезок (возможно, пустой) пути между станциями \(u_i\) и \(v_i\) с суммой весов ровно \(k_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого вопроса Лёши выведите «Yes» (без кавычек), если описанный в условии подотрезок существует, иначе выведите «No» (без кавычек).

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Пояснение к первому примеру.

Ответ на второй вопрос «Yes», так как существует путь \(1\).

В четвертом вопросе мы можем снова выбрать путь \(1\).

В пятом запросе ответ «Yes», так как есть путь \(1-3\).

В шестом запросе мы можем выбрать пустой путь, так как сумма весов на нем равна \(0\).

Нетрудно показать, что нет путей, удовлетворяющих первому и третьему запросу.

C. Частицы

дп жадные алгоритмы математика реализация *1300

Вы нашли \(n\) волшебных частиц, которые расположены друг за другом в ряд и имеют целочисленные заряды \(c_1,\dots,c_n\). У вас также есть устройство, которое позволяет производить следующую операцию:

  • Выбрать частицу и удалить её из последовательности. Оставшиеся частицы сдвинутся, чтобы заполнить образовавшийся разрыв между ними. Если перед удалением частицы непосредственно слева и непосредственно справа от неё были расположены частицы с зарядами \(x\) и \(y\) соответственно, то они войдут в реакцию и объединятся в одну частицу с зарядом \(x+y\).

Например, если последовательность зарядов частиц была \([-3,1,4,-1,5,-9]\), то после выполнения операции над \(4\)-й частицей последовательность преобразуется в \([-3,1,9,-9]\).

Если после этого использовать устройство на \(1\)-й частице в этом новом порядке, то последовательность станет равна \([1,9,-9]\).

Вам нужно выполнять операции до тех пор, пока в последовательности не останется ровно одна частица. Чему равен максимально возможный заряд этой частицы?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1,\dots,c_n\) (\(-10^9 \le c_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число, равное максимально возможному заряду последней оставшейся частицы.

Примечание

В первом наборе входных данных оптимальная стратегия выглядит так: использовать устройство на \(4\)-й частице, затем на \(1\)-й (как описано в условии), потом на \(3\)-й, и наконец на \(1\)-й.

Во втором наборе входных данных оптимальная стратегия выглядит так: использовать устройство на \(4\)-й частице, после чего последовательность преобразуется в \([998244353,998244353,1996488706]\), затем на \(2\)-й частице, после чего последовательность станет равна \([2994733059]\). Проследите за переполнением целочисленного типа.

В третьем наборе входных данных есть всего одна частица, так что операций применять нельзя.

H. Циклы, кратные трём

дп Комбинаторика математика снм Структуры данных *3400

Дана последовательность \(a_1,\dots,a_n\) длины \(n\), изначально все её элементы — пустые. Над последовательностью совершают \(n\) обновлений, в каждом из которых один из элементов \(a\) становится некоторым числом, таким образом, что после всех обновлений \(a\) становится перестановкой \(1,2,\dots,n\).

После каждого обновления найдите число способов (по модулю \(998\,244\,353\)) заполнить остающиеся пустые места в \(a\) так, чтобы \(a\) стала перестановкой \(1,2,\dots,n\), причём длины всех циклов в \(a\) стали кратны \(3\).

Перестановкой \(1,2,\dots,n\) является последовательность длины \(n\), состоящая из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Циклом в перестановке \(a\) называется последовательность попарно различных чисел \((i_1,\dots,i_k)\), такая что \(i_2 = a_{i_1},i_3 = a_{i_2},\dots,i_k = a_{i_{k-1}},i_1 = a_{i_k}\). Длина этого цикла равна числу \(k\), которое кратно \(3\), если и только если \(k \equiv 0 \pmod 3\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 3 \cdot 10^5\), \(n \equiv 0 \pmod 3\)).

В \(i\)-й из следующих \(n\) строк содержатся по два числа \(x_i\) и \(y_i\), что значит, что \(i\)-е обновление делает \(a_{x_i}\) равным \(y_i\).

Гарантируется, что \(x_1,\dots,x_n\) и \(y_1,\dots,y_n\) являются перестановками \(1,2,\dots,n\), т. е. \(a\) становится перестановкой \(1,2,\dots,n\) после всех обновлений.

Выходные данные

Выведите \(n\) строк: число способов (по модулю \(998\,244\,353\)) после \(1,2,\dots,n\) обновлений.

Примечание

В первом примере, скажем, после \(3\)-го обновления есть \(3\) способа заполнить последовательность \(a = [4,\_,2,5,\_,\_]\):

  • \([4,1,2,5,6,3]\): имеем один цикл \((1\,4\,5\,6\,3\,2)\) длины \(6\).
  • \([4,6,2,5,1,3]\): имеем два цикла \((1\,4\,5)\) и \((2\,6\,3)\), с длинами \(3\) и \(3\).
  • \([4,6,2,5,3,1]\): имеем один цикл \((1\,4\,5\,3\,2\,6)\) длины \(6\).

Во втором примере первое же обновление создаёт цикл длины \(1\), так что нет ни одного способа сделать так, чтобы длины всех циклов были кратны \(3\).

C. Сильный пароль

Бинарный поиск дп жадные алгоритмы Строки *1400

Монокарп наконец-то набрался смелости зарегистрироваться на ForceCoders. Он придумал ник, но все еще думает насчет пароля.

Он хочет, чтобы пароль был как можно сильнее, поэтому придумал следующие критерии:

  • длина пароля должна быть ровно \(m\);
  • пароль должен состоять только из цифр от \(0\) до \(9\);
  • пароль не должен встречаться в базе данных паролей (заданной строкой \(s\)) как подпоследовательность (не обязательно подряд идущих цифр).

Монокарп также придумал две строки длины \(m\): \(l\) и \(r\), обе состоящие только из цифр от \(0\) до \(9\). Он хочет, чтобы \(i\)-я цифра его пароля была от \(l_i\) до \(r_i\) включительно.

Существует ли пароль, который подходит под все условия?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записана строка \(s\) (\(1 \le |s| \le 3 \cdot 10^5\)), состоящая только из цифр от \(0\) до \(9\) — база данных паролей.

Во второй строке записано одно целое число \(m\) (\(1 \le m \le 10\)) — требуемая длина пароля.

В третьей строке записана строка \(l\) (\(|l| = m\)), состоящая только из цифр от \(0\) до \(9\), — нижняя граница на каждую цифру.

В четвертой строке записана строка \(r\) (\(|r| = m\)), состоящая только из цифр от \(0\) до \(9\), — верхняя граница на каждую цифру. \(l_i \le r_i\) для всех \(i\) от \(1\) до \(m\).

Сумма длин \(s\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите «YES», если существует пароль, который подходит под все условия. Иначе выведите «NO».

Примечание

В первом наборе входных данных Монокарп может выбрать пароль «50». Он не встречается в \(s\) как подпоследовательность.

Во втором наборе все наборы из трех цифр, каждая из которых от \(1\) до \(4\), подходит под условия на \(l\) и \(r\). Однако, все они встречаются в \(s\) как подпоследовательности. Например, «314» встречается на позициях \([3, 5, 12]\), а «222» встречается на позициях \([2, 6, 10]\).

В третьем наборе Монокарп может выбрать пароль «4321». На самом деле это единственный пароль, который подходит под условия на \(l\) и \(r\). К счастью, он не встречается в \(s\) как подпоследовательность.

В четвертом наборе только «49» и «59» подходят под условия на \(l\) и \(r\). Оба они встречаются в \(s\) как подпоследовательности.

В пятом набор Монокарп может выбрать пароль «11».

D. Рейтинговая система

Бинарный поиск дп жадные алгоритмы математика Перебор снм Структуры данных *1800

Вы разрабатываете рейтинговую систему для онлайн-игры. Каждый раз, когда игрок участвует в матче в этой игре, его рейтинг меняется в зависимости от результатов.

Изначально рейтинг игрока равен \(0\). Он будет участвовать в \(n\) матчах; после \(i\)-го матча рейтинг изменяется на \(a_i\) (рейтинг увеличивается на \(a_i\), если \(a_i\) положительное, или уменьшается на \(|a_i|\), если отрицательное. В последовательности \(a\) нет нулей).

В системе есть дополнительное правило: для заданного целого числа \(k\), если рейтинг игрока достиг значения \(k\), он никогда не опустится ниже него. Формально, если рейтинг игрока хотя бы \(k\), а изменение рейтинга должно сделать его меньше \(k\), то рейтинг снизится ровно до \(k\).

Ваша задача состоит в том, чтобы определить значение \(k\) таким образом, чтобы рейтинг игрока после всех \(n\) матчей был максимально возможным (среди всех возможных целочисленных значений \(k\)). Если существует несколько возможных ответов, выведите любой из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество матчей.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\); \(a_i \ne 0\)) — изменение рейтинга после \(i\)-го матча.

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(m\) (\(-10^{18} \le m \le 10^{18}\)) — такое значение \(k\), при котором рейтинг игрока будет максимально возможным. Можно показать, что существует хотя бы одно такое значение, которое удовлетворяет ограничениям \(-10^{18} \le m \le 10^{18}\).

Примечание

В первом примере, если \(k=3\), то рейтинг изменяется следующим образом: \(0 \rightarrow 3 \rightarrow 3 \rightarrow 4 \rightarrow 6\).

Во втором примере, если \(k=0\), то рейтинг изменяется следующим образом: \(0 \rightarrow 0 \rightarrow 0 \rightarrow 0\).

В третьем примере, если \(k=25\), то рейтинг изменяется следующим образом: \(0 \rightarrow 4 \rightarrow 6\).

В четвертом примере, если \(k=6\), то рейтинг изменяется следующим образом: \(0 \rightarrow 5 \rightarrow 6 \rightarrow 6 \rightarrow 8 \rightarrow 7 \rightarrow 6 \rightarrow 8\).

E. Коробки и шары

дп математика реализация *2500

В ряд расставлены \(n\) коробок. Коробки пронумерованы от \(1\) до \(n\). В некоторых коробках лежит по одному шару, остальные пустые. Хотя бы в одной коробке есть шар и хотя бы одна коробка пустая.

За один ход вы обязаны выбрать коробку с шаром и соседнюю с ней пустую коробку и переложить шар из одной коробки в другую. Коробки \(i\) и \(i+1\) для всех \(i\) от \(1\) до \(n-1\) считаются соседними друг с другом. Коробки \(1\) и \(n\) не соседние.

Сколько различных расположений шаров может быть после совершения ровно \(k\) ходов? Два расположения называются различными, если есть хотя бы одна такая коробка, что в одном из них в ней есть шар, а в другом нет.

Так как ответ может быть достаточно большой, выведите его остаток от деления на \(10^9+7\).

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(2 \le n \le 1500\); \(1 \le k \le 1500\)) — количество коробок и количество ходов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(a_i \in \{0, 1\}\)) — \(0\) обозначает пустую коробку, \(1\) обозначает коробку с шаром. В последовательности есть хотя бы один \(0\) и хотя бы одна \(1\).

Выходные данные

Выведите одно целое число — количество возможных различных расположений шаров после совершения ровно \(k\) ходов, по модулю \(10^9+7\).

Примечание

В первом примере есть следующие возможные расположения:

  • 0 1 1 0 — получается после перемещения шара из коробки \(1\) в коробку \(2\);
  • 1 0 0 1 — получается после перемещения шара из коробки \(3\) в коробку \(4\);
  • 1 1 0 0 — получается после перемещения шара из коробки \(3\) в коробку \(2\).

Во втором примере есть следующие возможные расположения:

  • 1 0 1 0 — три способа получить ее: просто верните обратно шар после первой операции;
  • 0 1 0 1 — получается из любого из первых двух расположений после первого хода.

F. Пловцы в бассейне

бпф дп математика теория чисел *2800

В бассейне длины \(l\) собираются поплавать \(n\) человек. Все люди начинают плавать одновременно (в момент \(0\)), но можно считать, что они плавают по разным дорожками, а потому не создают помех друг другу.

Каждый пловец плывет по следующему маршруту: он стартует в точке \(0\) и плывет в точку \(l\) с постоянной скоростью (у \(i\)-го пловца скорость \(v_i\) единиц в секунду). Достигнув точки \(l\), он моментально (за незначительно малое время) разворачивается и плывет назад в точку \(0\) с той же постоянной скоростью. После возвращения в точку \(0\) он моментально разворачивается и плывет в точку \(l\), и так далее.

Назовем некоторый действительный момент времени моментом встречи, если хотя бы два пловца оказались в одной и той же точке бассейна в данный момент (точка может быть как \(0\) или \(l\), так и любая другая действительная точка в пределах бассейна).

Бассейн будет открыт для плавания на \(t\) секунд. Посчитайте количество моментов встречи, пока бассейн открыт. Так как ответ может быть очень большим, выведите его по модулю \(10^9 + 7\).

Входные данные

В первой строке заданы два целых числа \(l\) и \(t\) (\(1 \le l, t \le 10^9\)) — длина бассейна и количество секунд, на протяжении которых в нем будут плавать люди.

Во второй строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество пловцов.

В третьей строке заданы \(n\) целых чисел \(v_1, v_2, \dots, v_n\) (\(1 \le v_i \le 2 \cdot 10^5\)), где \(v_i\) — скорость \(i\)-го пловца. Все \(v_i\) — попарно различны.

Выходные данные

Выведите одно целое число — количество моментов встреч (включая момент \(t\), если нужно, и исключая момент \(0\)) по модулю \(10^9 + 7\).

Примечание

В первом примере три момента встречи:

  • момент \(6\), в который оба пловца в точке \(6\);
  • момент \(12\), в который оба пловца в точке \(6\);
  • и момент \(18\), в который оба пловца в точке \(0\).

C. Рудольф и очередное соревнование

дп жадные алгоритмы Конструктив сортировки Структуры данных *1200

Рудольф зарегистрировался на соревнование по спортивному программированию, которое пройдет по правилам ICPC. Правила подразумевают, что за каждую решенную задачу дается \(1\) балл, а также начисляется штрафное время, равное количеству минут, пройденному с начала соревнования к моменту решения задачи. В итоговой таблице выше находится участник набравший больше баллов, а при равенстве баллов выше тот, у которого меньше штрафное время.

Всего на соревнование зарегистрировалось \(n\) участников. Рудольф имеет номер \(1\). Известно, что будет предложено \(m\) задач. А длиться соревнование будет \(h\) минут.

Мощный искусственный интеллект предсказал значения \(t_{i, j}\) — количество минут, за которое \(i\)-й участник решит \(j\)-ю задачу.

Рудольф понял, что порядок решения задач повлияет на итоговый результат. Например, если \(h = 120\), а время решения задач равны [\(20, 15, 110\)], тогда если Рудольф будет решать задачи в порядке:

  • \({3, 1, 2}\), то он успеет решить только третью задачу и получит \(1\) балл и \(110\) штрафных минут.
  • \({1, 2, 3}\), то первую задачу он решит через \(20\) минут после начала, вторую через \(20+15=35\) минут, а третью не успеет. Таким образом он получит \(2\) балла и \(20+35=55\) штрафных минут.
  • \({2, 1, 3}\), то вторую задачу он решит через \(15\) минут после начала, первую через \(15+20=35\) минут, а третью не успеет. Таким образом он получит \(2\) балла и \(15+35=50\) штрафных минут.

Рудольфу стало интересно какое место он займет на соревановании, если каждый участник будет решать задачи в оптимальном порядке исходя из предсказаний искусственного интеллекта. Будем считать, что при равенстве баллов и штрафных минут Рудольф займет наилучшее место.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Далее следуют описания наборов.

Первая строка набора содержит три целых числа \(n, m, h\) (\(1 \le n \cdot m \le 2 \cdot 10^5, 1 \le h \le 10^6\)) — количество участников, количество задач и продолжительность соревнования, соответственно.

Далее идут \(n\) строк по \(m\) чисел \(t_{i, j}\) (\(1 \le t_{i, j} \le 10^6\)) — количество минут, за которое \(i\)-й участник решает \(j\)-ю задачу.

Сумма \(n \cdot m\) по всем наборам данным не превосходит \(2 \cdot 10^5\)

Выходные данные

Для каждого набора входных данных выведите целое число — место Рудольфа в таблице результатов, если все участники будут решать задачи в оптимальном порядке.

Примечание

В первом примере Рудольф наберет \(2\) балла и \(50\) штрафных минут. Второй участник решит только одну задачу и наберет \(1\) балл и \(90\) штрафных минут. И третий участник успеет решить все \(3\) задачи и наберет \(3\) балла и \(240\) штрафных минут. Таким образом Рудольф займет второе место.

Во втором примере оба наберут \(1\) балл и \(30\) штрафных минут. При равенстве баллов Рудольфу достается лучшая позиция, поэтому он займет первое место.

В третьем примере Рудольф единственный участник, поэтому он займет первое место.

В четвёртом примере все участники могут решить две задачи со штрафом в \(25 = 8 + (8 + 9)\), \(24 = 7 + (7 + 10)\) и \(26 = 8 + (8 + 10)\), соответственно, благодаря штрафу второй участник получит первое место, а Рудольф второе.

G. Рудольф и CodeVid-23

битмаски графы дп жадные алгоритмы кратчайшие пути *1900

Среди программистов распространился новый вирус «CodeVid-23». Рудольфу, как программисту, также не удалось избежать его.

Всего есть \(n\) симптомов, пронумерованных от \(1\) до \(n\), которые могут появиться при заболевании. Изначально Рудольф имеет некоторые из них. Чтобы вылечиться он сходил в аптеку и купил \(m\) лекарств.

Для каждого лекарства известно количество дней, которое его нужно принимать, а также набор симптомов, которые оно снимает. К сожалению, у лекарств часто бывают побочные эффекты. Поэтому для каждого из лекарств также известен набор симптомов, которые появляются при его приеме.

Почитав инструкции Рудольф понял, что принимать больше одного лекарства одновременно очень вредно для организма.

Рудольф хочет как можно быстрее встать на ноги. Поэтому он просит вас посчитать за какое минимальное количество дней он сможет избавиться от всех симптомов, или сказать, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 100)\) — количество наборов входных данных.

Далее следуют описания наборов.

Первая строка набора содержит два целых числа \(n, m\) \((1 \le n \le 10, 1 \le m \le 10^3)\) — количество симптомов и лекарств, соответственно.

Вторая строка набора содержит строку длины \(n\), состоящую из символов \(0\) и \(1\) — описание симптомов Рудольфа. Если \(i\)-й символ строки равен \(1\), Рудольф имеет \(i\)-й симптом, иначе нет.

Затем следуют \(3 \cdot m\) строк — описание лекарств.

Первая строка каждого описания содержит целое число \(d\) \((1 \le d \le 10^3)\) — количество дней, которое нужно принимать лекарство.

Следующие две строки описания содержат две строки длины \(n\), состоящие из символов \(0\) и \(1\) — описание симптомов, которые оно снимает, а также описание побочных эффектов.

В первой из строк \(1\) на \(i\)-й позиции означает, что лекарство снимает \(i\)-й симптом, и \(0\) иначе.

Во второй из строк \(1\) на \(i\)-й позиции означает, что после приема появляется \(i\)-й симптом, и \(0\) иначе.

Разные лекарства могут иметь одинаковые наборы симптомов и побочных эффектов. Если лекарство снимает некоторый симптом, то его не будет среди побочных эффектов.

Сумма \(m\) по всем наборам входных данных не превосходит \(10^3\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — минимальное количество дней, через которое Рудольф сможет избавиться ото всех симптомов. Если этого не случится никогда выведите \(-1\).

Примечание

В первом примере мы можем применить сначала лекарство номер \(4\), после него симптомы примут вид «00101». После этого лекарство номер \(2\), тогда симптомы полностью исчезнут, а количество дней будет равно \(5 + 3 = 8\). Ещё один вариант применения лекарств в порядке \(1, 3, 2\). В этом случае все симптомы также исчезнут, но количество дней будет равно \(3 + 3 + 3 = 9\).

Во втором примере симптомов нет изначально, поэтому лечение займет \(0\) дней.

В третьем примере нет вариантов полностью убрать симптомы.

C. Кто-нибудь хочет вампирские способности?

битмаски дп жадные алгоритмы Перебор *1400

ДИО знает, что Крестоносцы звёздной пыли определили его местоположение и собираются сразиться с ним. Чтобы сорвать их планы, он решает послать несколько пользователей стендов для борьбы с ними. Первоначально он призвал с собой \(n\) пользователей, причем сила \(i\)-го из них равна \(a_i\). Используя свои вампирические способности, он может делать следующее столько раз, сколько пожелает:

  • Пусть текущее число пользователей стенда равно \(m\).
  • DIO выбирает индекс \(i\) (\(1 \le i \le m\)).
  • Затем он вызывает нового пользователя стенда с индексом \(m+1\) и силой, равной \(\)a_{m+1} = a_i \oplus a_{i+1} \oplus \ldots \oplus a_m,\(\)

    где оператор \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

  • В итоге число пользователей стенда становится \(m+1\).

К несчастью для ДИО, используя предсказательные способности Пурпурного отшельника, Крестоносцы знают, что он замышляет это, и они также знают силы первоначальных пользователей стендов. Помогите Крестоносцам найти максимально возможную силу пользователя стенда среди всех возможных способов вызовов.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10\,000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество пользователей Стенда, вызванных первоначально.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^8\)) — сила каждого пользователя Стенда.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число, максимальную силу пользователя Стенда среди всех возможных способов вызовов.

Примечание

В первом наборе входных данных один из способов добавления новых пользователей Стендов выглядит следующим образом:

  • Выбрать \(i=n\). Теперь \(a\) становится \([0,2,5,1,1]\).
  • Выбрать \(i=1\). Теперь \(a\) становится \([0,2,5,1,1,7]\). \(7\) — это максимальная сила пользователя стенда, которого может вызвать ДИО.

Во втором наборе входных данных, ДИО не нужно добавлять больше пользователей стенда, потому что \(3\) — это максимальная сила пользователя стенда, которого ДИО может вызвать.

F. Вика и вики

Бинарный поиск битмаски дп Комбинаторика математика разделяй и властвуй *2400

На днях Вика изучала свой любимый интернет-ресурс — Википедию.

На просторах Википедии она вычитала про интересную математическую операцию побитового исключающего ИЛИ, обозначаемую \(\oplus\).

Вика стала изучать свойства этой загадочной операции. Для этого она взяла массив \(a\), состоящий из \(n\) целых неотрицательных чисел и применила одновременно ко всем его элементам следующую операцию: \(a_i = a_i \oplus a_{(i+1) \bmod n}\). Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\). Элементы массива нумеруются, начиная с \(0\).

Так как для полного изучения недостаточно проделать вышеописанные действия единожды, Вика повторяет их до тех пор, пока массив \(a\) не превратится в состоящий только из нулей.

Определите, через сколько описанных выше действий все элементы массива \(a\) станут нулевыми. Если такой момент никогда не наступит, выведите \(-1\).

Входные данные

В первой строке находится единственное целое число \(n\) (\(1 \le n \le 2^{20}\)) — длина массива \(a\).

Гарантируется, что \(n\) представимо в виде \(2^k\) для некоторого целого числа \(k\) (\(0 \le k \le 20\)).

Вторая строка содержит \(n\) целых чисел \(a_0, a_1, a_2, \dots, a_{n-1}\) (\(0 \le a_i \le 10^9\)) — элементы массива \(a\).

Выходные данные

Выведите единственное число — минимальное число действий, необходимое, чтобы сделать все элементы массива \(a\) нулевыми, или \(-1\), если массив \(a\) никогда не станет нулевым.

Примечание

В первом примере после одной операции массив \(a\) станет равен \([3, 3, 3, 3]\). Через ещё одну операцию он будет равен \([0, 0, 0, 0]\).

Во втором примере массив \(a\) изначально состоит только из нулей.

В третьем примере после одной операции массив \(a\) станет равен \([0]\).

E. Максимум справа от минимума

Бинарный поиск дп разделяй и властвуй снм Структуры данных *2300

Дана перестановка \(p\) длины \(n\) — массив, состоящий из целых чисел от \(1\) до \(n\), все различные.

Пусть \(p_{l,r}\) задает подмассив — массив, полученный при выписывании элементов с позиции \(l\) по позицию \(r\), включительно.

Пусть \(\mathit{maxpos}_{l,r}\) задает позицию максимального элемента на \(p_{l,r}\). Аналогично, пусть \(\mathit{minpos}_{l,r}\) задает позицию минимального элемента на нем.

Посчитайте количество подмассивов \(p_{l,r}\) таких, что \(\mathit{maxpos}_{l,r} > \mathit{minpos}_{l,r}\).

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 10^6\)).

Во второй строке записаны \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)). Все \(p_i\) различны.

Выходные данные

Выведите одно целое число — количество подмассивов \(p_{l,r}\) таких, что \(\mathit{maxpos}_{l,r} > \mathit{minpos}_{l,r}\).

C. Хитроумная жирная крыса

дп *2500

Жирная крыса и её друг Сerealguy поспорили — спустится ли к ним по хитроумной конструкции хоть чуть-чуть хлопьев. На рисунке ниже показана хитроумная конструкция.

Более формальное описание хитроумной конструкции следует далее. Хитроумная конструкция состоит из n рядов с весами. В первом ряду n весов, во втором (n - 1) весов, в i-ом ряду (n - i + 1) весов, в последнем ряду ровно одни весы. Пронумеруем весы в каждом ряду слева направо, начиная с 1. Тогда величина wi, k в килограммах (1 ≤ i ≤ n; 1 ≤ k ≤ n - i + 1) обозначает параметр выдержки k-х весов в i-ом ряду.

Если на весы с параметром выдержки wi, k падает тело с массой не меньшей чем wi, k, то весы ломаются. При этом все, что было на весах, падает либо на уровень ниже влево (если это возможно), либо на уровень ниже вправо (если это возможно). Другими словами, если ломаются весы wi, k (i < n), то возможно максимум два варианта падения содержимого весов: все содержимое весов wi, k падает либо на весы wi + 1, k - 1 (если такие существуют), либо на весы wi + 1, k (если такие существуют). Если ломаются весы wn, 1, то все содержимое этих весов падает прямо в руки жирной крысе. Обратите внимание, что у первых в ряду весов и у последних в ряду весов существует ровно один вариант падения содержимого.

Изначально, на все весы первого уровня одновременно кладутся хлопья. На i-е весы кладется ai килограмм хлопьев. После этого весы начинают ломаться, а хлопья начинают падать вниз каким-то образом. Можно считать, что все происходит мгновенно. То есть весы ломаются мгновенно и хлопья падают тоже мгновенно.

Жирная крыса утверждает, что ни при каком развитии событий хлопья с первого уровня не смогут попасть к ней в руки. Cerealguy утверждает, что существует такое развитие событий, при котором в руки крысе попадет хоть сколько-нибудь хлопьев. Помогите жирной крысе и Cerealguy. Определите, кто их них прав.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 50) — количество уровней с весами.

В следующей строке записаны через пробел n целых чисел ai (1 ≤ ai ≤ 106) — массы хлопьев в килограммах.

В следующих n строках задано описание весов: в i-й строке записано через пробел (n - i + 1) целых чисел wi, k (1 ≤ wi, k ≤ 106) — параметры выдержки для весов, находящихся на i-ом уровне, в килограммах.

Выходные данные

Выведите «Fat Rat», если права крыса, иначе выведите — «Cerealguy».

Примечание

Пояснения к примерам:

  • Первый пример: На весы, которые выдерживают 2, падает 1. А это значит, что нижние весы не сломаются.
  • Второй пример: Все весы на самом верхнем ряду очевидно ломаются, потом хлопья падают на нижний ряд общей массой 4, а это ровно столько сколько «почти выдерживают» нижние весы, а так как 4  ≥  4, то весы ломаются.

E. Настя и зелья

графы дп поиск в глубину и подобное сортировки *1500

Алхимик Настя очень любит смешивать зелья. Всего алхимии известно \(n\) видов зелий, одно зелье вида \(i\) можно купить за \(c_i\) монет.

Любой вид зелий можно получить не более чем одним способом, путём смешивания из нескольких других. Зелья, которые используются в смешивании при этом потратятся. Причём ни одно зелье нельзя получить из самого себя путём одного или нескольких смешиваний.

Как опытный алхимик, Настя имеет зелья \(k\) видов \(p_1, p_2, \dots, p_k\) в неограниченных количествах, но не знает какое захочет получить следующим. Чтобы определиться, она просит вас для всех \(1 \le i \le n\) узнать, какое минимальное число монет нужно потратить, чтобы следующим получить зелье вида \(i\).

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов.

В первой строке набора содержится два целых числа \(n\) и \(k\) (\(1 \le k < n \le 2 \cdot 10^5\)) — количество видов зелий всего и количество видов зелий, которые есть у Насти.

Во второй строке набора содержатся \(n\) чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^9\)) – стоимости покупки зелий.

В третьей строке набора содержатся \(k\) различных целых чисел \(p_1, p_2, \dots, p_k\) (\(1 \le p_i \le n\)) — номера зелий, которые уже есть у Насти в неограниченных количествах.

Далее следуют \(n\) строк, описывающих способы получения зелий смешиванием.

Каждая строка начинается с числа \(m_i\) (\(0 \le m_i < n\)) — количество зелий, необходимое для смешивания зелья вида \(i\) (\(1 \le i \le n\)).

Дальше строка содержит \(m_i\) различных целых чисел \(e_1, e_2, \dots, e_{m_i}\) (\(1 \le e_j \le n\), \(e_j \ne i\)) — номера зелий необходимых для смешивания зелья вида \(i\). Если этот список пуст, то зелье вида \(i\) можно только купить.

Гарантируется, что ни одно зелье нельзя получить из самого себя путём одного или нескольких смешиваний.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Аналогично гарантируется, что сумма значений \(m_i\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел — минимальное число монет, которое нужно потратить, чтобы получить зелье каждого вида.

Примечание

В первом наборе первого примера оптимально:

  • Получить зелье первого типа купив и смешав \(2\), \(4\) и \(5\);
  • зелье второго типа можно получить только купив его;
  • у Насти уже есть неограниченное число зелий третьего типа;
  • зелье четвертого типа выгоднее купить, чем купить и смешать другие зелья;
  • зелье пятого типа можно получить только купив его;

C. Ина с Горы

дп жадные алгоритмы математика Структуры данных *2400

Чтобы подготовить своих осьминогов «Такодачи» к правлению миром, Ниномае Ина-нис, также известная как Ина с Горы, приказала Хишимачи Суйсей бросать в них валуны. Ина просит вас, Кирю Коко, помочь выбрать, как именно бросать валуны.

В одну линию на горе Ины находятся \(n\) осьминогов, они пронумерованы \(1, 2, \ldots, n\). \(i\)-й осьминог изначально имеет здоровье, равное \(a_i\), где \(1 \leq a_i \leq k\).

Каждый валун падает на последовательных осьминогов с номерами \(l, l+1, \ldots, r\), где \(1 \leq l \leq r \leq n\). Вы можете выбрать числа \(l\) и \(r\) для каждого валуна произвольным образом.

Каждый валун уменьшает здоровье каждого осьминога, на которого он падает, на \(1\). Однако осьминоги бессмертны, поэтому как только здоровье осьминога становится равно \(0\), он немедленно восстановит свое здоровье до \(k\).

По данным значениям начального здоровья осьминогов определите минимальное количество валунов, необходимых для того, чтобы здоровье всех осьминогов стало равно \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le 10^9\)) — количество осьминогов и верхняя граница значения здоровья осьминогов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le k\)) — начальные значения здоровья осьминогов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество валунов, которое необходимо бросить, чтобы значения здоровья всех осьминогов стали равными \(k\).

Примечание

В первом наборе входных данных минимальное количество бросков валуна равно \(2\):

  • Бросить первый валун между \([l,r] = [1,3]\). Тогда значения здоровья осьминогов станут \([3, 1, 3, 3]\).
  • Бросить второй валун между \([l,r] = [2,2]\). Тогда значения здоровья осьминогов станут \([3, 3, 3, 3]\).

Во втором наборе минимальное количество бросков валуна равно \(4\). Диапазоны \([l,r]\) равны \([1,7], [2, 6], [3, 5], [4, 4]\).

D. Мириан и спички

дп жадные алгоритмы Конструктив *2800

Спички Мириана представляют собой таблицу размером \(2 \times n\), которую необходимо заполнить символами A или B.

Он уже заполнил первую строку таблицы и хотел бы, чтобы вы заполнили вторую строку. Вы должны сделать это таким образом, чтобы количество пар соседних клеток, имеющих различные буквы\(^\dagger\) было равно \(k\). Если это невозможно, сообщите об этом.

\(^\dagger\) Пара соседних клеток, имеющая различные буквы — это пара ячеек \((r_1, c_1)\) и \((r_2, c_2)\) (\(1 \le r_1, r_2 \le 2\), \(1 \le c_1, c_2 \le n\)), таких что \(|r_1 - r_2| + |c_1 - c_2| = 1\) и символы в \((r_1, c_1)\) и \((r_2, c_2)\) различаются.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5, 0 \leq k \leq 3 \cdot n\)) — количество столбцов спички и требуемое количество пар соседних клеток, имеющих различные буквы.

Вторая строка каждого набора содержит строку \(s\) из \(n\) символов (\(s_i\) может быть либо A, либо B) — верхняя строка спички Мирианы.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора, если нет способа заполнить вторую строку так, чтобы количество пар соседних клеток, имеющих различные буквы, было равно \(k\), выведите «NO».

В противном случае выведите «YES». Затем выведите \(n\) символов, которые представляют собой допустимую нижнюю строку для спички Мириана. Если есть несколько ответов, выведите любой из них.

Примечание

В первом наборе можно доказать, что нет возможного способа заполнить \(2\) строку сетки так, чтобы \(k = 1\).

Для второго теста BABB — один из возможных ответов.

Таблица ниже является результатом заполнения BABB второй строкой.

\(\begin{array}{|c|c|} \hline A & A & A & A \cr \hline B & A & B & B \cr \hline \end{array}\)

Пары различных символов следующие:

\(\begin{array}{|c|c|} \hline \color{red}{A} & A & A & A \cr \hline \color{red}{B} & A & B & B \cr \hline \end{array}\)

—————————————————

\(\begin{array}{|c|c|} \hline A & A & \color{red}{A} & A \cr \hline B & A & \color{red}{B} & B \cr \hline \end{array}\)

—————————————————

\(\begin{array}{|c|c|} \hline A & A & A & \color{red}{A} \cr \hline B & A & B & \color{red}{B} \cr \hline \end{array}\)

—————————————————

\(\begin{array}{|c|c|} \hline A & A & A & A \cr \hline \color{red}{B} & \color{red}{A} & B & B \cr \hline \end{array}\)

—————————————————

\(\begin{array}{|c|c|} \hline A & A & A & A \cr \hline B & \color{red}{A} & \color{red}{B} & B \cr \hline \end{array}\)

Всего \(5\) пар, что равняется \(k\).

F. Встречи панд

дп Потоки Структуры данных *3500

Красные панды приехали в город, чтобы встретиться со своими родственниками, синими пандами! Город представлен в виде числовой оси.

Панды уже запланировали свою встречу, но график постоянно меняется. Вам дано \(q\) обновлений вида x t c.

  • Если \(c < 0\), это означает, что дополнительно \(|c|\) красных панд входят на числовую ось в позиции \(x\) и времени \(t\). Затем каждую секунду они могут независимо перемещаться на одну единицу в любом направлении по числовой оси или не перемещаться вовсе.
  • Если \(c > 0\), это означает, что дополнительно \(c\) синих панд проверяют позицию \(x\) на наличие красных панд в момент времени \(t\). Если синяя панда не встречает красную панду в этом конкретном месте и времени, она сразу печально покидает числовую ось. Если красная панда есть на позиции в то время, когда синяя панда ее проверяет, они становятся друзьями и покидают числовую ось. Каждая красная панда может стать другом не более чем одной синей панды и наоборот.

Запросы представлены в порядке неубывания значений \(x\). После каждого запроса выведите максимальное количество пар друзей, которое может быть сформировано, если красные панды движутся в оптимальном порядке на основе всех событий, представленных во входных данных до этого обновления (включительно).

Движения красных панд могут меняться от обновления к обновлению.

Входные данные

Первая строка содержит \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество обновлений.

\(i\)-я строка из следующих \(q\) строк содержит \(3\) целых числа \(x_i\), \(t_i\) и \(c_i\) (\(0 \leq x_i \leq 10^9\), \(0 \leq t_i \leq 10^9\), \(0 < |c_i| \leq 1000\)) — описание \(i\)-го обновления.

Гарантируется, что \(x_i\) будут представлены в порядке неубывания.

Выходные данные

После каждого обновления выведите максимальное количество пар друзей, которое может быть сформировано.

Примечание

В первом примере количество пар друзей после каждого обновления может быть оптимизировано следующим образом:

  1. \(3\) синих панды проверяют наличие красных панд на позиции \(0\) в момент времени \(6\). Нигде нет красных панд, поэтому пар друзей не возникает.
  2. \(5\) красных панд появляются на позиции \(4\) в момент времени \(2\). \(4\) из них могут переместиться на позицию \(0\) в момент времени \(6\), где \(3\) из них могут стать друзьями с \(3\) существующими синими пандами.
  3. \(6\) красных панд появляются на позиции \(7\) в момент времени \(4\). Новые синие панды не добавляются, поэтому максимальное количество пар друзей остается \(3\).
  4. \(100\) синих панд появляются на позиции \(10\) в момент времени \(5\). Ни одна красная панда не может достичь их в момент времени \(5\), поэтому новых пар друзей не создается.
  5. \(7\) синих панд появляются на позиции \(10\) в момент времени \(8\). \(6\) красных панд на позиции \(7\) в момент времени \(4\), вместе с \(1\) красной пандой на позиции \(4\) в момент времени \(2\), могут достичь \(7\) синих панд на позиции \(10\) в момент времени \(8\), добавляя \(7\) новых пар друзей. Это приводит к общему количеству пар друзей, равному \(10\).

B. Заработать или разблокировать

битмаски дп Перебор *2200

Андрей играет в игру Tanto Cuore.

У него есть колода из \(n\) карт со значениями \(a_1, \ldots, a_n\) сверху вниз. Каждая карта может быть либо заблокирована, либо разблокирована. Первоначально разблокирована только самая верхняя карта.

Ходы происходят по очереди. В каждый ход Андрей выбирает незаблокированную карту из колоды. Пусть значение, записанное на этой карте, равно \(v\). Тогда он выполняет ровно одну из следующих двух операций:

  1. Разблокировать первые \(v\) заблокированных карт в колоде сверху. Если в колоде меньше \(v\) заблокированных карт, то разблокировать все заблокированные карты.
  2. Заработать \(v\) очков победы.
В обоих случаях после выполнения операции он убирает карту из колоды.

Игра заканчивается, когда все оставшиеся в колоде карты закрыты или в колоде больше нет карт.

Какое максимальное количество очков победы может заработать Андрей?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество карт в колоде.

Вторая строка содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(0 \leq a_1, \ldots, a_n \leq n\)) — значения карт в колоде.

Выходные данные

Выведите одно целое число — максимальное количество очков победы, которое может заработать Андрей.

Примечание

В первом примере колода в колоде сначала лежит разблокированная карта, потом заблокированная. Андрей использует первую карту, чтобы разблокировать вторую карту. Затем он использует вторую карту, чтобы заработать \(2\) победных очка.

Во втором примере Андрей может использовать первую карту для разблокировки второй и третьей карт. Затем он использует вторую и третью карты, чтобы заработать \(4+5=9\) победных очков.

В третьем примере Андрей не может разблокировать ни одну карту и получить победные очки с помощью первой карты.

C. Ожидаемое разрушение

дп Комбинаторика математика Теория вероятностей *2500

У вас есть набор \(S\) из \(n\) различных целых чисел в диапазоне от \(1\) до \(m\).

Каждую секунду вы выполняете следующие действия:

  1. Выбираете элемент \(x\) из \(S\) равномерно случайным образом.
  2. Удаляете \(x\) из \(S\).
  3. Если \(x+1 \leq m\) и \(x+1\) не находится в \(S\), то добавляете \(x+1\) в \(S\).

Каково ожидаемое количество секунд до того момента, когда \(S\) не станет пустым?

Выведите ответ по модулю \(1\,000\,000\,007\).

Формально, пусть \(P = 1\,000\,000\,007\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{a}{b}\), где \(a\) и \(b\) — целые числа, и \(b \not \equiv 0 \pmod{P}\). Выведите целое число, равное \(a \cdot b^{-1} \bmod P\). Другими словами, выведите такое целое число \(z\), что \(0 \le z < P\) и \(z \cdot b \equiv a \pmod{P}\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq m \leq 500\)) — количество элементов в множестве \(S\) и верхнюю границу на значение элементов в \(S\).

Вторая строка содержит \(n\) целых чисел \(S_1,\,S_2,\,\dots,\,S_n\) (\(1 \leq S_1 < S_2 < \ldots < S_n \leq m\)) — элементы множества \(S\).

Выходные данные

Выведите одно целое число — ожидаемое количество секунд до того момента, когда \(S\) станет пустым, по модулю \(1\,000\,000\,007\).

Примечание

Для теста 1 приведен список всех возможных сценариев и их вероятностей:

  1. \([1, 3]\) (вероятность 50%) \(\to\) \([1]\) \(\to\) \([2]\) \(\to\) \([3]\) \(\to\) \([]\)
  2. \([1, 3]\) (вероятность 50%) \(\to\) \([2, 3]\) (вероятность 50%) \(\to\) \([2]\) \(\to\) \([3]\) \(\to\) \([]\)
  3. \([1, 3]\) (вероятность 50%) \(\to\) \([2, 3]\) (вероятность 50%) \(\to\) \([3]\) \(\to\) \([]\)

Сложив их, получим \(\frac{1}{2}\cdot 4 + \frac{1}{4} \cdot 4 + \frac{1}{4} \cdot 3 = \frac{15}{4}\). Мы видим, что \(750000009 \cdot 4 \equiv 15 \pmod{1\,000\,000\,007}\).

E. Комплекты игр

дп жадные алгоритмы Конструктив математика Перебор *3000

Риши разрабатывает игры в 2D-метаверсе и хочет предлагать своим клиентам комплекты игр. Каждая игра имеет соответствующее значение удовольствия. Комплект игр состоит из подмножества игр, суммарное удовольствие которых составляет \(60\).

Ваша задача — выбрать \(k\) игр, где \(1 \leq k \leq 60\), и соответствующие им значения удовольствия \(a_1, a_2, \dots, a_k\) таким образом, чтобы сформировать ровно \(m\) различных комплектов игр.

Входные данные

На вход подается одно целое число \(m\) (\(1 \le m \le 10^{10}\)) — желаемое количество комплектов игр.

Выходные данные

Первая строка должна содержать целое число \(k\) (\(1 \le k \le 60\)) — количество игр.

Вторая строка должна содержать \(k\) целых чисел, \(a_1, a_2, \dots, a_k\) (\(1 \le a_1, a_2, \dots, a_k \le 60\)) — значения удовольствия данных \(k\) игр.

Примечание

В первом примере любое подмножество размера \(3\) является комплектом игр. Таких подмножеств \(4\).

F. Марк и космический корабль

дп Перебор *3500

Марк любит быстро перемещаться. Поэтому он создал космический корабль, перемещающийся в \(4\)-мерном пространстве.

Он хочет использовать космический корабль для выполнения миссий как можно быстрее. В каждой миссии космический корабль стартует из точки \((0, 0, 0, 0)\) и должен оказаться в точке \((a, b, c, d)\). Для этого он дает команду компьютеру корабля выполнить серию перемещений, где каждое перемещение — это единичный шаг по одной из восьми сторон света: \((\pm 1, 0, 0, 0)\), \((0, \pm 1, 0, 0)\), \((0, 0, \pm 1, 0)\), \((0, 0, 0, \pm 1)\).

К сожалению, постройка космического корабля также шла очень быстро, поэтому в коде космического корабля есть ошибка. Первый ход будет выполнен один раз, второй — два, третий — три и так далее. В общем случае \(i\)-й ход будет выполнен \(i\) раз.

Для любых четырех целых чисел \(a, b, c, d\) пусть \(f(a, b, c, d)\) — минимальное количество ходов миссии, которая заканчивается в точке \((a, b, c, d)\). Вычислите сумму \(f(a, b, c, d)\) по всем точкам (с целочисленными координатами), таким, что \(-A\le a\le A\), \(-B\le b\le B\), \(-C\le c\le C\), \(-D\le d\le D\).

Входные данные

Единственная строка входных данных содержит четыре целых числа \(A, B, C, D\) (\(0\le A,B,C,D\le 1000\)).

Выходные данные

Выведите сумму \(f(a, b, c, d)\) по множеству точек, описанному в условии.

Примечание

В первом примере необходимо вычислить \(f(-1, 0, 0, 0)+f(0, 0, 0, 0) + f(1, 0, 0, 0) = 1 + 0 + 1 = 2\).

Во втором примере необходимо вычислить сумму \(f(a, b, c, d)\) по \(27\) различным точкам \((a, b, c, d)\). Опишем значение \(f(a, b, c, d)\) для некоторых из них:

  • Выполняется условие \(f(-1, 0, 0, -1)=3\), которое достигается следующей последовательностью перемещений (стрелка \(\xrightarrow{\pm i}\) обозначает, что перемещение выполняется по \(i\)-й координате): \(\)(0, 0, 0, 0) \xrightarrow{-1} (-1, 0, 0, 0) \xrightarrow{+4} (-1, 0, 0, 2) \xrightarrow{-4} (-1, 0, 0, -1).\(\)
  • Выполняется условие \(f(1, 1, 0, 1) = 5\), и оно достигается следующей последовательностью ходов: \(\)(0, 0, 0, 0) \xrightarrow{+1} (1, 0, 0, 0) \xrightarrow{-2} (1, -2, 0, 0) \xrightarrow{+2} (1, 1, 0, 0) \xrightarrow{-4} (1, 1, 0, -4) \xrightarrow{+4} (1, 1, 0, 1).\(\)

В третьем примере необходимо вычислить сумму \(f(a, b, c, d)\) по \(7\cdot5\cdot 9\cdot 3\) точкам. Одна из них — \((3, 2, 4, 1)\). Она имеет значение \(f(3, 2, 4, 1) = 4\) и может быть достигнута следующей последовательностью ходов: \(\)(0, 0, 0, 0) \xrightarrow{+4} (0, 0, 0, 1) \xrightarrow{+2} (0, 2, 0, 1) \xrightarrow{+1} (3, 2, 0, 1) \xrightarrow{+3} (3, 2, 4, 1).\(\)

C. Стать максимумом

Бинарный поиск дп Перебор Структуры данных *1600

Вам дан массив целых чисел \(a\) длины \(n\).

Одна операция состоит из:

  • Выбора индекса \(i\) такого, что \(1 \le i \le n - 1\) и \(a_i \le a_{i + 1}\).
  • Увеличения \(a_i\) на \(1\).

Найдите максимально возможное значение \(\max(a_1, a_2, \ldots a_n)\), которое можно получить, выполнив эту операцию не более \(k\) раз.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 1000\), \(1 \le k \le 10^{8}\)) — длина массива \(a\) и максимальное количество операций, которых можно выполнить.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 10^{8}\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный максимум массива после выполнения не более \(k\) операций.

Примечание

В первом наборе входных данных одной возможной оптимальной последовательностью операций является: \([\color{red}{1}, 3, 3] \rightarrow [2, \color{red}{3}, 3] \rightarrow [\color{red}{2}, 4, 3] \rightarrow [\color{red}{3}, 4, 3] \rightarrow [4, 4, 3]\).

Во втором наборе вдодных данных одной возможной оптимальной последовательностью операций является: \([1, \color{red}{3}, 4, 5, 1] \rightarrow [1, \color{red}{4}, 4, 5, 1] \rightarrow [1, 5, \color{red}{4}, 5, 1] \rightarrow [1, 5, \color{red}{5}, 5, 1] \rightarrow [1, \color{red}{5}, 6, 5, 1] \rightarrow [1, \color{red}{6}, 6, 5, 1] \rightarrow [1, 7, 6, 5, 1]\).

E1. ПерестановДерево (простая версия)

Деревья дп поиск в глубину и подобное *1800

Это простая версия задачи. Различия между двумя версиями заключаются в ограничении на \(n\) и ограничении по времени. Делать взломы можно только в том случае, если решены обе версии задачи.

Дано дерево с \(n\) вершинами с корнем в вершине \(1\).

Для некоторой перестановки\(^\dagger\) \(a\) длины \(n\) пусть \(f(a)\) — количество пар вершин \((u, v)\) таких, что \(a_u < a_{\operatorname{lca}(u, v)} < a_v\). Здесь \(\operatorname{lca}(u,v)\) обозначает наименьшего общего предка вершин \(u\) и \(v\).

Найдите максимально возможное значение \(f(a)\) по всем перестановкам \(a\) длины \(n\).

\(^\dagger\) Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 5000\)) — количество вершин в дереве.

Вторая строка содержит \(n - 1\) целых чисел \(p_2,p_3,\ldots,p_n\) (\(1 \le p_i < i\)), указывающих на наличие ребра между вершинами \(i\) и \(p_i\).

Выходные данные

Выведите максимальное значение \(f(a)\).

Примечание

Дерево в первом примере:

Одной возможной оптимальной перестановкой \(a\) является \([2, 1, 4, 5, 3]\) с \(4\)-мя подходящими парами вершин:

  • \((2, 3)\), так как \(\operatorname{lca}(2, 3) = 1\) и \(1 < 2 < 4\),
  • \((2, 4)\), так как \(\operatorname{lca}(2, 4) = 1\) и \(1 < 2 < 5\),
  • \((2, 5)\), так как \(\operatorname{lca}(2, 5) = 1\) и \(1 < 2 < 3\),
  • \((5, 4)\), так как \(\operatorname{lca}(5, 4) = 3\) и \(3 < 4 < 5\).

Дерево в третьем примере:

Дерево в четвёртом примере:

E2. ПерестановДерево (сложная версия)

битмаски бпф Деревья дп жадные алгоритмы математика поиск в глубину и подобное реализация *2700

Это сложная версия задачи. Различия между двумя версиями заключаются в ограничении на \(n\) и ограничении по времени. Делать взломы можно только в том случае, если решены обе версии задачи.

Дано дерево с \(n\) вершинами с корнем в вершине \(1\).

Для некоторой перестановки\(^\dagger\) \(a\) длины \(n\) пусть \(f(a)\) — количество пар вершин \((u, v)\) таких, что \(a_u < a_{\operatorname{lca}(u, v)} < a_v\). Здесь \(\operatorname{lca}(u,v)\) обозначает наименьшего общего предка вершин \(u\) и \(v\).

Найдите максимально возможное значение \(f(a)\) по всем перестановкам \(a\) длины \(n\).

\(^\dagger\) Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^6\)) — количество вершин в дереве.

Вторая строка содержит \(n - 1\) целых чисел \(p_2,p_3,\ldots,p_n\) (\(1 \le p_i < i\)), указывающих на наличие ребра между вершинами \(i\) и \(p_i\).

Выходные данные

Выведите максимальное значение \(f(a)\).

Примечание

Дерево в первом примере:

Одной возможной оптимальной перестановкой \(a\) является \([2, 1, 4, 5, 3]\) с \(4\)-мя подходящими парами вершин:

  • \((2, 3)\), так как \(\operatorname{lca}(2, 3) = 1\) и \(1 < 2 < 4\),
  • \((2, 4)\), так как \(\operatorname{lca}(2, 4) = 1\) и \(1 < 2 < 5\),
  • \((2, 5)\), так как \(\operatorname{lca}(2, 5) = 1\) и \(1 < 2 < 3\),
  • \((5, 4)\), так как \(\operatorname{lca}(5, 4) = 3\) и \(3 < 4 < 5\).

Дерево в третьем примере:

Дерево в четвёртом примере:

B. Прогулка по Aллее

дп жадные алгоритмы математика Перебор теория чисел *1500

На Главной Аллее в ЛКШ расположены \(n\) лавочек, пронумерованных целыми числами от \(1\) до \(n\) слева направо. Также на Аллее есть \(m\) торговых палаток, \(i\)-я (\(1 \le i \le m\)) из которых расположена около \(s_i\)-й лавочки.

Петя сейчас находится в начале Аллеи перед \(1\)-й лавочкой и он хочет дойти до \(n\)-й лавочки. Расстояние между последовательными лавочками Петя проходит за \(1\) минуту. У него с собой есть рюкзак с бесконечным количеством вафель. Петя планирует есть вафли из рюкзака и покупать их в торговых палатках во время прогулки.

Петя ест вафли только находясь около лавочек, причём он съест вафлю, находясь около \(i\)-й (\(1 \le i \le n\)) лавочки тогда и только тогда, когда выполняется хотя бы одно из следующих условий:

  • Около \(i\)-й лавочки есть торговая палатка. Тогда Петя купит вафлю в торговой палатке и сразу съест её.
  • Петя ещё ни разу не ел вафлю. Тогда Петя возьмёт вафлю из рюкзака и сразу съест её.
  • После того, как Петя съел последнюю вафлю, прошло хотя бы \(d\) минут. Иными словами, Петя не ел вафли около каждой из лавочек \(i-1, i-2, \ldots, \max(i-d+1, 1)\). Тогда Петя возьмёт вафлю из рюкзака и сразу съест её.

Вы можете считать, что Петя не тратит время на то, чтобы съесть вафлю. Петя никогда не будет есть две или более вафли около одной лавочки.

Вы хотите минимизировать количество вафель, которые съест Петя в течении прогулки. Для этого вы попросите администрацию ЛКШ убрать ровно одну торговую палатку с Аллеи до того как Петя начнёт движение.

Определите минимальное возможное количество вафель, которые съест Петя в течении прогулки. Также найдите количество торговых палаток, таких что если убрать одну из них, Петя съест минимальное возможное число вафель.

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны три целых числа \(n\), \(m\) и \(d\) (\(2 \le d \le n \le 10^9\), \(2 \le m \le \min(10^{5}, n)\)) — количество лавочек, количество торговых палаток и параметр \(d\) из условия, соответственно.

Во второй строке даны \(m\) целых чисел \(s_1, s_2, \ldots, s_m\) (\(1 \le s_i \le n\)) — номера лавочек, около которых расположены торговые палатки. Гарантируется, что \(s_{i} < s_{i+1}\) для всех \(1 \leq i \leq m - 1\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа — минимальное количество вафель, которые съест Петя, если будет убрана ровно одна торговая палатка, и количество торговых палаток, таких что если убрать одну из них, Петя съест минимальное возможное число вафель.

Примечание

В первом наборе данных \(n=6\), \(m=2\), \(d=2\) и \(s=[2, 5]\). При таком расположении торговых палаток Петя съест \(4\) вафли в течении прогулки (обратите внимание, что необходимо убрать ровно одну торговую палатку; этот случай разобран только для того, чтобы показать как Петя принимает решение о том, следует ли съесть вафлю у очередной лавочки):

  • Около \(1\)-й лавочки Петя съест вафлю из рюкзака, так как он ещё ни разу не ел вафлю.
  • Около \(2\)-й лавочки Петя съест вафлю из торговой палатки, так как около этой лавочки есть торговая палатка.
  • Около \(3\)-й лавочки Петя не будет есть вафлю, так как с момента как он съел вафлю прошла \(1<d\) минута.
  • Около \(4\)-й лавочки Петя съест вафлю, так как с момента как он съел вафлю прошло \(2\ge d\) минуты.
  • Около \(5\)-й лавочки Петя съест вафлю из торговой палатки, так как около этой лавочки есть торговая палатка.
  • Около \(6\)-й лавочки Петя не будет есть вафлю, так как с момента как он съел вафлю прошла \(1<d\) минута.

Если убрать \(1\)-ю торговую палатку, то Петя съест \(3\) вафли (около лавочек \(1\), \(3\) и \(5\)). Если же убрать \(2\)-ю торговую палатку, то Петя съест \(4\) вафли (около лавочек \(1\), \(2\), \(4\) и \(6\)).

Таким образом, минимальное количество вафель, которые съест Петя — \(3\); существует только одна палатка, убрав которую можно достигнуть такого количества вафель.

Во втором наборе входных данных

  • если убрать \(1\)-ю или \(2\)-ю палатку, то Петя съест \(5\) вафель около лавочек \(1\), \(3\), \(5\), \(7\), \(8\);
  • если убрать \(3\)-ю палатку, то Петя съест \(4\) вафли около лавочек \(1\), \(3\), \(5\), \(7\).

В третьем наборе входных данных Петя съест \(4\) вафли вне зависимости от вашего выбора.

Обратите внимание, что Петя не заинтересован в минимизации количества вафель, которые он съест, поэтому он будет есть вафли строго в соответствии с правилом, описанным в условии.

D. Деревья и отрезки

дп жадные алгоритмы Перебор Структуры данных *2200

Преподаватели ЛКШ решили посадить \(n\) деревьев в ряд, причём было решено сажать только дубы и ели. Для этого они составили план, который можно представить в виде двоичной строки \(s\) длины \(n\). Если \(s_i = 0\), то \(i\)-м деревом в ряду должен быть дуб, а если \(s_i = 1\), то \(i\)-м деревом в ряду должна быть ель.

День посадки деревьев уже завтра, а послезавтра в ЛКШ приедет проверяющий. Проверяющий очень любит природу, и он оценит красоту ряда деревьев следующим образом:

  • Он вычислит \(l_0\) как максимальное количество подряд идущих дубов в ряду (максимальная подстрока из нулей в плане \(s\)). Если в ряду нет дубов, то \(l_0 = 0\).
  • Он вычислит \(l_1\) как максимальное количество подряд идущих елей в ряду (максимальная подстрока из единиц в плане \(s\)). Если в ряду нет елей, то \(l_1 = 0\).
  • Красота ряда деревьев будет равна \(a \cdot l_0 + l_1\) для некоторого \(a\) — любимого числа проверяющего.

Преподаватели знают значение параметра \(a\), но не могут сказать его вам из соображений безопасности. Они готовы сказать вам лишь то, что \(a\) является целым числом от \(1\) до \(n\).

Поскольку деревья ещё не посажены, преподаватели решили изменить вид не более чем \(k\) деревьев на противоположный (то есть изменить \(s_i\) с \(0\) на \(1\) или с \(1\) на \(0\) в плане), чтобы максимизировать красоту ряда деревьев по мнению проверяющего.

Для каждого целого \(j\) от \(1\) до \(n\) найдите независимо ответ на следующий вопрос:

  • Какой максимальной красоты ряда деревьев могут добиться преподаватели, изменив вид не более чем \(k\) деревьев, если любимое число проверяющего \(a\) равно \(j\)?
Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два целых числа \(n\) и \(k\) (\(1 \le n \le 3000\), \(0 \le k \le n\)) — количество деревьев в ряду и максимальное количество изменений.

Вторая строка содержит строку \(s\) длины \(n\), состоящую из нулей и единиц — описание плана.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел, \(j\)-е (\(1 \le j \le n\)) из которых — максимальная красота ряда деревьев после не более, чем \(k\) изменений, если для вычисления красоты используется \(a = j\).

Примечание

В первом наборе входных данных не разрешаются изменения, поэтому всегда выполняется \(l_0 = 0\) и \(l_1 = 3\). Таким образом, вне зависимости от значения \(a\), красота ряда деревьев будет равна \(3\).

Во втором наборе входных данных для \(a \in \{1, 2\}\) преподаватели могут, например, изменить план \(s\) на \(0111\) (изменив \(s_4\)), а для \(a \in \{3, 4\}\) — на \(0010\) (изменив \(s_2\)). В таком случае, красота аллеи для каждого \(a\) вычисляется следующим образом:

  • Для \(a = 1\): \(l_0 = 1\), \(l_1 = 3\). Красота аллеи равна \(1\cdot 1 + 3 = 4\).
  • Для \(a = 2\): \(l_0 = 1\), \(l_1 = 3\). Красота аллеи равна \(2\cdot 1 + 3 = 5\).
  • Для \(a = 3\): \(l_0 = 2\), \(l_1 = 1\). Красота аллеи равна \(3\cdot 2 + 1 = 7\).
  • Для \(a = 4\): \(l_0 = 2\), \(l_1 = 1\). Красота аллеи равна \(4\cdot 2 + 1 = 9\).

Можно показать, приведённые выше изменения являются оптимальными для всех \(a\) от \(1\) до \(4\).

C. Ещё одна задача про перестановки

дп жадные алгоритмы математика Перебор *1200

Андрей только начинает придумывать задачи, и это ему тяжело даётся. Поэтому он придумал странную задачу про перестановки\(^{\dagger}\), и просит её решить. Получится ли у вас это сделать?

Назовем стоимостью перестановки \(p\) длины \(n\) значение выражения:

\((\sum_{i = 1}^{n} p_i \cdot i) - (\max_{j = 1}^{n} p_j \cdot j)\).

Найдите максимальную стоимость среди всех перестановок длины \(n\).

\(^{\dagger}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 30\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 250\)) — длину перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную стоимость среди всех перестановок длины \(n\).

Примечание

В первом наборе входных данных перестановкой с максимальной стоимостью является \([2, 1]\). Стоимость равна \(2 \cdot 1 + 1 \cdot 2 - \max (2 \cdot 1, 1 \cdot 2)= 2 + 2 - 2 = 2\).

Во втором наборе входных данных перестановкой с максимальной стоимостью является \([1, 2, 4, 3]\). Стоимость равна \(1 \cdot 1 + 2 \cdot 2 + 4 \cdot 3 + 3 \cdot 4 - 4 \cdot 3 = 17\).

D. Андрей и побег из Капиграда

Бинарный поиск дп жадные алгоритмы снм сортировки Структуры данных *1800

В Капиграде, столице Тяголяндии, произошло происшествие, все капибары в городе одичали и стали кидаться мандаринами. Андрей был вынужден сбежать из города максимально далеко, пользуясь порталами.

Тяголяндия представляет из себя числовую прямую, а Капиград находится в точке \(0\). По всей Тяголяндии расставлены \(n\) порталов, каждый из которых характеризуется четырьмя целыми числами \(l_i\), \(r_i\), \(a_i\) и \(b_i\) (\(1 \le l_i \le a_i \le b_i \le r_i \le 10^9\)). Обратите внимание, что отрезок \([a_i, b_i]\) содержится в отрезке \([l_i, r_i]\).

Если Андрей находится на отрезке \([l_i, r_i]\), тогда портал может его телепортировать в любую точку на отрезке \([a_i, b_i]\). У Андрея есть проездной, который позволяет ему пользоваться порталами неограниченное количество раз.

Андрей считает, что точка \(x\) находится на отрезке \([l, r]\), если выполняется неравенство \(l \le x \le r\).

У Андрея есть \(q\) вариантов откуда начать свой побег, каждый вариант характеризуется одним целом числом \(x_i\) — позицией начала побега. Он хочет убежать от Капиграда как можно дальше (в точку с максимально возможной координатой). Помогите Андрею узнать, насколько далеко от Капиграда он может убежать, начиная в каждой из \(q\) позиций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество порталов.

Каждая из следующих \(n\) строк содержит четыре целых числа \(l_i\), \(r_i\), \(a_i\) и \(b_i\) \((1 \le l_i \le a_i \le b_i \le r_i \le 10^9)\) — характеристики порталов.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество позиций.

В следующей строке задано \(q\) целых чисел \(x_1, x_2, \ldots, x_q\) (\(1 \le x_i \le 10^9\)) — позиция, откуда Андрей начнет свой побег в \(i\)-м варианте.

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку из \(q\) целых чисел, содержащую ответы на интересующие Андрея вопросы.

Примечание

В первом наборе входных данных:

Оптимальные действия при старте из каждой позиции:

  1. Воспользуемся порталом \(1\) и телепортируемся в точку \(b_1 = 14\).
  2. Воспользуемся сначала порталом \(2\) и телепортируемся в точку \(6\), находящуюся на отрезке \([l_1, r_1] = [6, 17]\), после чего воспользуемся порталом \(1\) и телепортируемся в точку \(b_1 = 14\).
  3. Останемся в точке \(x_3=23\), не пользуясь порталами.
  4. Останемся в точке \(x_4=15\), не пользуясь порталами.
  5. Точка \(x_5=28\) не находится ни на одном отрезке, поэтому Андрей не сможет никуда телепортироваться.
  6. Точка \(x_6=18\) находится на отрезке \([l_3, r_3] = [16, 24]\), воспользуемся порталом \(3\) и телепортируемся в точку \(b_3 = 22\).

В пятом наборе входных данных:

Оптимальные действия при старте из каждой позиции:

  1. Воспользуемся сначала порталом \(1\) и телепортируемся в точку \(15\) на отрезке \([a_1, b_1] = [14, 20]\), после чего воспользуемся порталом \(2\) и телепортируемся в точку \(21\), находящуюся на отрезке \([l_4, r_4] = [21, 33]\) и на отрезке \([a_2, b_2] = [13, 24]\), после телепортируемся в точку \(b_4 = 32\).
  2. Воспользуемся сначала порталом \(6\) и телепортируемся в точку \(20\) на отрезке \([a_6, b_6] = [20, 21]\), после чего воспользуемся порталом \(2\) и телепортируемся в точку \(22\), находящуюся одновременно на отрезке \([l_4, r_4] = [21, 33]\) и на отрезке \([a_2, b_2] = [13, 24]\), после телепортируемся в точку \(b_4 = 32\).
  3. Сделаем те же самые действия что из с первой позиции.
  4. Останемся в точке \(x_4=5\), не пользуясь порталами.
  5. Точка \(8\) не находится ни на одном отрезке, поэтому Андрей не сможет никуда телепортироваться.
  6. Останемся в точке \(x_6=33\), не пользуясь порталами.
  7. Воспользуемся порталом \(5\) и телепортируемся в точку \(b_5 = 4\).
  8. Сделаем те же самые действия что и из первой позиции.

E. Максимальная моногонность

дп математика Перебор *2500

Вам дан массив \(a\) длины \(n\) и массив \(b\) длины \(n\). Назовем стоимостью отрезка \([l, r]\), \(1 \le l \le r \le n\), значение \(|b_l - a_r| + |b_r - a_l|\).

Напомним, что два отрезка \([l_1, r_1]\), \(1 \le l_1 \le r_1 \le n\), и \([l_2, r_2]\), \(1 \le l_2 \le r_2 \le n\), являются непересекающимися, если выполнено одно из двух условий: \(r_1 < l_2\) или \(r_2 < l_1\).

Также длиной отрезка \([l, r]\), \(1 \le l \le r \le n\), мы называем значение \(r - l + 1\).

Найдите максимально возможную суммарную стоимость попарно непересекающихся отрезков \([l_j, r_j]\), \(1 \le l_j \le r_j \le n\), суммарная длина которых равна \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) \((1 \le t \le 1000)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 3000\)) — длину массива \(a\) и суммарную длину отрезков.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(-10^9 \le b_i \le 10^9\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3000\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимально возможную суммарную стоимость таких отрезков.

Примечание

В первом наборе входных данных стоимость любого отрезка равна \(0\), поэтому суммарная стоимость равна \(0\).

Во втором наборе входных данных можно взять отрезок \([1, 1]\) со стоимостью \(8\) и отрезок \([3, 3]\) со стоимостью \(2\), чтобы получить сумму \(10\). Можно показать, что это оптимальное решение.

В третьем наборе входных данных нас интересуют только отрезки длины \(1\), а стоимость любого такого отрезка равна \(0\).

В четвертом наборе входных данных можно показать, что оптимальная сумма равна \(16\). Например, можно взять отрезки \([3, 3]\) и \([4, 4]\).

C. Игра с перестановкой

дп жадные алгоритмы игры Структуры данных *1400

Алиса и Боб играют в игру. У них есть перестановка \(p\) размера \(n\) (перестановка размера \(n\)  — это массив размера \(n\), где каждый элемент от \(1\) до \(n\) встречается ровно один раз). Также у них есть фишка, которую можно разместить на любом элементе перестановки.

Алиса и Боб делают ходы поочередно: Алиса делает первый ход, затем Боб делает второй ход, затем Алиса делает третий ход и так далее. Во время первого хода Алиса выбирает любой элемент перестановки и ставит фишку на этот элемент. Во время каждого из следующих ходов текущий игрок должен переместить фишку на элемент, который одновременно находится слева и строго меньше текущего элемента (т.е. если фишка находится на \(i\)-м элементе, она может быть перемещена на \(j\)-й элемент, если \(j < i\) и \(p_j < p_i\)). Если игрок не может сделать ход (переместить фишку в соответствии с правилами игры невозможно), этот игрок выигрывает в игре.

Скажем, что \(i\)-й элемент перестановки счастливый, если выполняется следующее условие:

  • если Алиса поставит фишку на \(i\)-й элемент во время своего первого хода, она может выиграть игру независимо от того, как играет Боб (т.е. у нее есть выигрышная стратегия).

Ваша задача — посчитайте количество счастливых элементов в перестановке.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество элементов в перестановке.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)). Все \(p_i\) различны.

Сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество счастливых элементов в перестановке.

Примечание

В первом наборе входных данных из примера \(3\)-й элемент — счастливый.

Во втором наборе входных данных из примера нет счастливых элементов.

В третьем наборе входных данных из примера \(2\)-й элемент — счастливый.

В четвертом наборе входных данных из примера \(3\)-й и \(4\)-й элемент — счастливые.

D. Сбалансированная строка

дп *2200

Задана двоичная строка \(s\) (двоичная строка — это строка, состоящая из символов 0 и/или 1).

Давайте назовем двоичную строку сбалансированной, если число подпоследовательностей 01 (число таких пар индексов \(i\) и \(j\), что \(1 \le i < j \le n\), \(s_i=0\) и \(s_j=1\)) равно числу подпоследовательностей 10 (число таких пар индексов \(k\) и \(l\), что \(1 \le k < l \le n\), \(s_k=1\) и \(s_l=0\)) в строке.

Например, строка 1000110 является сбалансированной, поскольку и количество подпоследовательностей 01, и количество подпоследовательностей 10 равно \(6\). С другой стороны, 11010 не сбалансирована, потому что количество подпоследовательностей 01 равно \(1\), а количество подпоследовательностей 10 равно \(5\).

Вы можете выполнить следующую операцию любое количество раз (возможно, ноль): выбрать два символа в строке \(s\) и поменять их местами. Ваша задача — посчитайте минимальное количество вышеописанных операций, чтобы строка \(s\) стала сбалансированной.

Входные данные

Единственная строка входных данных содержит \(s\) (\(3 \le |s| \le 100\)) — последовательность из символов 0 и/или 1.

Дополнительное ограничение на входные данные: \(s\) можно сделать сбалансированной.

Выходные данные

Выведите одно целое число — минимальное количество операций, чтобы строка \(s\) стала сбалансированной.

Примечание

В первом примере строка уже сбалансированная: и количество 01, и количество 10 равно \(1\).

Во втором примере строка уже сбалансированная: и количество 01, и количество 10 равно \(6\).

В третьем примере один из возможных ответов — следующий: 11010 \(\rightarrow\) 01110. После этого и количество 01, и количество 10 равно \(3\).

В четвертом примере один из возможных ответов — следующий: 11001100 \(\rightarrow\) 11001010 \(\rightarrow\) 11000011. После этого и количество 01, и количество 10 равно \(8\).

B. Две бинарных строки

дп жадные алгоритмы Конструктив *1000

Вам даны две строки \(a\) и \(b\) одинаковой длины, состоящих только из символов 0 и/или 1; обе строки начинаются с символа 0 и заканчиваются символом 1.

Вы можете применять следующую операцию любое количество раз (возможно ноль раз):

  • выбрать какую-то строку и два равных символа в ней; затем превратить все символы между этими двумя в эти символы.

Формально, вы выбираете одну из двух строк (обозначим ее как \(s\)), затем выбираете два символа \(l\) и \(r\), такие, что \(1 \le l < r \le |s|\) и \(s_l = s_r\), затем заменяете все символы \(s_i\), такие что \(l < i < r\) на \(s_l\).

Например, если выбранная строка это 010101, вы можете превратить ее в описанные ниже строки за одну операцию:

  • 000101, если выберете \(l = 1\) и \(r = 3\);
  • 000001, если выберете \(l = 1\) и \(r = 5\);
  • 010001, если выберете \(l = 3\) и \(r = 5\);
  • 010111, если выберете \(l = 4\) и \(r = 6\);
  • 011111, если выберете \(l = 2\) и \(r = 6\);
  • 011101, если выберете \(l = 2\) и \(r = 4\).

Вам нужно определить, можно ли сделать эти две строки одинаковыми при помощи применения к ним любого количества описанной выше операции.

Входные данные

Первая строка содержит одно число \(t\) (\(1 \le t \le 2000\))  — количество наборов входных данных.

Каждый набор входных данных содержит две строки:

  • в первой содержится строка \(a\) (\(2 \le |a| \le 5000\)), состоящая только из символов 0 и/или 1.
  • во второй содержится строка \(b\) (\(2 \le |b| \le 5000\)), состоящая только из символов 0 и/или 1.

Дополнительные ограничения на входные данные:

  • в каждом наборе входных данных \(|a| = |b|\) (строки имеют одинаковую длину);
  • в каждом наборе данных любая из двух строк начинается с символа 0 и заканчивается символом 1;
  • суммарная длина строк \(a\) по всем наборам входных данных не превосходит \(5000\).
Выходные данные

Для каждого набора входных данных выведите YES, если возможно сделать строки равными. Иначе выведите NO. Символы в ответе могут быть в любом регистре.

Примечание

В первом наборе входных данных мы можем выполнить следующие операции:

  1. выбрать строку \(a\), \(l = 2\), \(r = 4\); после этой операции \(a\) равна 01110001, \(b\) равна 01110101;
  2. выбрать строку \(b\), \(l = 5\), \(r = 7\); после этой операции \(a\) равна 01110001, \(b\) равна 01110001.

Во втором наборе входных данных строки уже равны.

В третьем наборе входных данных мы можем выполнить следующие операции:

  1. выбрать строку \(a\), \(l = 4\), \(r = 6\); после этой операции \(a\) равна 000111, \(b\) равна 010111;
  2. выбрать строку \(b\), \(l = 1\), \(r = 3\); после этой операции \(a\) равна 000111, \(b\) равна 000111;

В четвертом и пятом наборах входных данных невозможно сделать строки равными.

D. Сортировка умножением

дп жадные алгоритмы *1800

Вам задан массив \(a\) длины \(n\), состоящий из положительных целых чисел.

Вы можете применять следующую операцию любое количество раз (возможно, ноль раз):

  • выбрать три целых числа \(l\), \(r\) и \(x\), для которых \(1 \le l \le r \le n\), и умножить каждое \(a_i\), для которого \(l \le i \le r\), на \(x\).

Обратите внимание, что вы можете выбрать любое целое число \(x\), не обязательно положительное.

Вам нужно определить минимальное число таких операций, за которое вы можете сделать массив \(a\) отсортированным строго в порядке возрастания (т. е. должно выполняться условие \(a_1 < a_2 < \dots < a_n\)).

Входные данные

Первая строка содержит одно число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — массив \(a\).

Дополнительное ограничение на входные данные: сумма всех \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество операций, необходимых для превращения массива \(a\) в отсортированный в порядке возрастания массив.

Примечание

В первом наборе входных данных мы можем выполнять следующие операции:

  • \(l = 2\), \(r = 4\), \(x = 3\);
  • \(l = 4\), \(r = 4\), \(x = 2\);
  • \(l = 5\), \(r = 5\), \(x = 10\).
После этих операций массив \(a\) превратится в \([1, 3, 6, 12, 20]\).

Во втором наборе входных данных мы можем выполнять следующие операции:

  • \(l = 1\), \(r = 4\), \(x = -2\);
  • \(l = 6\), \(r = 6\), \(x = 1337\).
После этих операций массив \(a\) превратится в \([-10, -8, -6, -4, 5, 1337]\).

В третьем наборе входных данных массив \(a\) уже отсортирован.

E. Непересекающиеся подперестановки

дп Комбинаторика математика реализация *2300

Заданы два целых числа \(n\) и \(k\).

Для массива длины \(n\) давайте определим его стоимость как максимальное количество непрерывных подмассивов этого массива, которые могут быть выбраны следующим образом:

  • каждый элемент массива принадлежит не более чем одному подмассиву;
  • длина каждого подмассива ровно \(k\);
  • каждый подмассив содержит каждое целое число от \(1\) до \(k\) ровно один раз.

Например, если \(n = 10\), \(k = 3\) и массив равен \([1, 2, 1, 3, 2, 3, 2, 3, 1, 3]\), его стоимость равна \(2\), потому что, например, мы можем выбрать два подмассива: от \(2\)-го элемента до \(4\)-го и от \(7\)-го элемента до \(9\)-го, и мы можем показать, что выбрать больше \(2\) подмассивов нельзя.

Посчитайте сумму стоимостей по всем массивам длины \(n\), состоящих из целых чисел от \(1\) до \(k\), и выведите ее по модулю \(998244353\).

Входные данные

Единственная строка входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 4000\)).

Выходные данные

Выведите одно целое число— сумму стоимостей по всем массивам длины \(n\), состоящих из целых чисел от \(1\) до \(k\), по модулю \(998244353\).

A. Ковёр в подарок

дп жадные алгоритмы реализация Строки *800

Недавно Тёма и Вика праздновали день семьи. Их подруга Арина подарила им ковёр, который может быть представлен в виде таблицы \(n \cdot m\) из строчных латинских букв.

Вика ещё не видела подарок, но Тёма знает, какие ковры она любит. Вике понравится ковёр, если она сможет прочитать на нём своё имя слева направо.

Формально, ковёр понравится девушке, если можно выбрать четыре различных столбца в порядке слева направо так, что первый содержит «v», второй — «i», третий — «k» и четвёртый — «a».

Помогите Тёме заранее понять, понравится ли Вике подарок Арины.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке входных содержится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n\), \(m\) (\(1 \le n, m \le 20\)) — размеры ковра.

В следующих \(n\) строках содержится по \(m\) строчных латинских букв в каждой, описывающих подаренный ковёр.

Выходные данные

Для каждого набора входных данных выведите «YES», если ковёр понравится Вике, в противном случае выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере Вика может прочитать своё имя слева направо.

Во втором примере Вика не сможет прочитать символ «v», поэтому ковёр ей не понравится.

F. Волшебство спасёт мир

Бинарный поиск битмаски дп Перебор *1800

На границе миров открылся портал тёмных сил, и теперь всему миру грозит страшная угроза. Чтобы закрыть портал и спасти мир, нужно сперва победить \(n\) чудовищ, что последовательно вылезают из портала.

Справиться с этим может только волшебница Вика. Она владеет двумя магическими силами — магией воды и магией огня. За секунду Вика может сгенерировать \(w\) единиц водяной маны и \(f\) единиц огненной маны. Мана понадобится ей для создания заклинаний. Изначально у Вики \(0\) единиц водяной маны и \(0\) единиц огненной маны.

Каждое из \(n\) чудовищ, что вылезают из портала, имеет свою силу, выраженную натуральным числом. Чтобы победить \(i\)-е чудовище силы \(s_i\), нужно применить заклинание воды или заклинание огня не меньшей силы. Иначе говоря, Вика может потратить не менее единиц \(s_i\) водяной маны на заклинание воды, либо же не менее единиц \(s_i\) огненной маны на заклинание огня.

Вика умеет создавать и применять заклинания мгновенно. Вика может применять любое количество заклинаний каждую секунду, пока у неё хватает на это маны.

Волшебница хочет спасти мир как можно быстрее, подскажите, сколько времени ей на это понадобится.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке входных содержится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(w\), \(f\) (\(1 \le w, f \le 10^9\)) — количество водяной и огненной маны, которое может сгенерировать Вика за секунду.

Во второй строке набора содержится единственное целое число \(n\) (\(1 \le n \le 100\)) — количество чудовищ.

В третьей строке набора содержится \(n\) натуральных чисел \(s_1, s_2, s_3, \dots, s_n\) (\(1 \le s_i \le 10^4\)) — силы чудовищ.

Cумма значений \(n\) по всем наборам входных данных не превосходит \(100\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное время в секундах, за которое Вика сможет победить всех чудовищ.

Примечание

В первом наборе входных данных Вика может после первой секунды потратить \(2\) единицы огненной маны, чтобы убить первое чудовище. После этого у неё останется \(2\) единицы водяной маны и \(1\) единица огненной. После третьей секунды в её распоряжении будет \(6\) единиц водяной маны и \(7\) огненной маны. Этого хватит, чтобы сразу убить второе и третьей чудовище.

E. Спидран

графы дп жадные алгоритмы математика Перебор поиск в глубину и подобное сортировки *2100

Вы играете в компьютерную игру, в которой есть \(n\) заданий, которые вам нужно выполнить. Однако \(j\)-е задание можно выполнить только в начале \(h_j\)-го часа игрового дня. Каждый игровой день длится ровно \(k\) часов. Часы каждого игрового дня пронумерованы числами \(0, 1, \ldots, k - 1\). После конца первого дня начинается следующий, и так далее.

Между заданиями есть зависимости: для некоторых пар \((a_i, b_i)\) задание с номером \(b_i\) может быть выполнено только после выполнения задания с номером \(a_i\). Гарантируется, что циклических зависимостей нет, поскольку иначе игру пройти было бы невозможно и никто не стал бы в неё играть.

Вы очень хорошо умеете играть в эту игру, поэтому вы можете выполнить любое число заданий за пренебрежимо малое время (т. е. вы можете выполнить любое число заданий в начале одного и того же часа, даже если между ними есть зависимости). Вам нужно выполнить все задания как можно быстрее. Вы можете выполнять их в любом доступном порядке. Время прохождения игры равно разнице между временем завершения последнего задания и временем завершения первого задания в этом порядке.

Найдите наименьшее время, за которое можно пройти игру.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 100\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(1\le n\le 200\,000\), \(0\le m\le 200\,000\), \(1\le k\le 10^9\)) — количество заданий, количество зависимостей между ними, а также длительность игрового дня в часах.

Следующая строка содержит \(n\) целых чисел \(h_1, h_2, \ldots, h_n\) (\(0\le h_i < k\)).

Следующие \(m\) строк описывают зависимости. В \(i\)-й из них содержатся два целых числа \(a_i\) и \(b_i\) (\(1\le a_i < b_i\le n\)): это означает, что задание с номером \(b_i\) может быть выполнено только после выполнения задания \(a_i\). Гарантируется, что все зависимости попарно различны.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите одно число — наименьшее время, необходимое для прохождения игры.

Примечание

В первом наборе входных данных задания \(1\) и \(4\) нужно выполнить в начале \(12\)-го часа дня, но они не могут быть выполнены в течение одного часа, поскольку между ними нужно выполнить задания \(2\) и \(3\). Однако всё это можно сделать за \(24\) часа. Для этого можно начать в \(12\) часов первого игрового дня, выполнив первое задание. В \(16\) часов можно выполнить задание \(2\). В \(18\) часов можно выполнить задание \(3\). Наконец, в \(12\) часов следующего дня можно выполнить задание \(4\). С момента выполнения первого задания до момента выполнения последнего прошло \(24\) часа.

В третьем наборе входных данных можно выполнить первое задание, а затем сразу же выполнить второе. Можно начать в \(5\) часов первого дня, выполнив первое задание. Сразу после этого становится доступным второе задание, его можно выполнять немедленно. Суммарное прошедшее время равно \(0\).

В четвёртом наборе входных данных можно начать с третьего задания. Можно начать в \(555\) часов первого дня и закончить в \(35\) часов второго дня. Суммарное прошедшее время равно \(1035-555=480\).

F. Разделяй, считай XOR и властвуй

битмаски дп математика *2600

Вам дан массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\).

За одну операцию вы разбиваете массив на две части: непустой префикс и непустой суффикс. Значение каждой части определяется как побитовое исключающее ИЛИ (XOR) всех элементов в ней. Затем отбросьте часть с меньшим значением. Если обе части имеют одинаковое значение, вы можете сами выбрать, какую часть отбросить. После этого массив становится равен оставшейся части.

Операции выполняются, пока длина массива не станет равна \(1\). Для каждого \(i\) (\(1 \le i \le n\)) определите, можно ли достичь состояния, в котором остаётся только \(i\)-й элемент (в исходной нумерации).

Формально, у вас есть два числа \(l\) и \(r\), изначально \(l = 1\) и \(r = n\). Текущее состояние массива есть \([a_l, a_{l+1}, \ldots, a_r]\).

Пока \(l < r\), вы применяете следующую операцию:

  • Выбрать произвольное \(k\) из множества \(\{l, l + 1, \ldots, r - 1\}\). Пусть \(x = a_l \oplus a_{l + 1} \oplus \ldots \oplus a_k\) и \(y = a_{k + 1} \oplus a_{k + 2} \oplus \ldots \oplus a_{r}\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.
  • Если \(x < y\), то присвойте \(l = k + 1\).
  • Если \(x > y\), то присвойте \(r = k\).
  • Если \(x = y\), то или присвойте \(l = k + 1\), или \(r = k\).

Для каждого \(i\) (\(1 \le i \le n\)) определите, можно ли добиться равенств \(l = r = i\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10\,000\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{60}\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10\,000\).

Выходные данные

Для каждого набора входных данных выведите строку длины \(n\), где \(i\)-й символ равен 1, если можно добиться \(l = r = i\), и 0 в противном случае.

Примечание

В первом тесте возможно добиться равенств \(l = r = i\) для всех \(i\) от \(1\) до \(n\):

  • при \(i=1\): \([1; 6] \rightarrow [1; 4] \rightarrow [1; 1]\);
  • при \(i=2\): \([1; 6] \rightarrow [1; 3] \rightarrow [2; 3] \rightarrow [2; 2]\);
  • при \(i=3\): \([1; 6] \rightarrow [1; 3] \rightarrow [3; 3]\);
  • при \(i=4\): \([1; 6] \rightarrow [1; 4] \rightarrow [4; 4]\);
  • при \(i=5\): \([1; 6] \rightarrow [5; 6] \rightarrow [5; 5]\);
  • при \(i=6\): \([1; 6] \rightarrow [6; 6]\).

Отдельно рассмотрим случай \(i = 2\). Изначально \(l = 1\), \(r = 6\).

  1. Мы можем выбрать \(k = 3\) и присвоить \(r = k = 3\), поскольку \((3 \oplus 2 \oplus 1) = 0 \ge 0 = (3 \oplus 7 \oplus 4)\);
  2. Затем мы можем выбрать \(k = 1\) и присвоить \(l = k + 1 = 2\), так как \(3 \le 3 = (2 \oplus 1)\);
  3. Наконец, мы можем выбрать \(k = 2\) и присвоить \(r = k = 2\), поскольку \(2 \ge 1\).

G. Swaps

графы дп Комбинаторика математика *2800

Дан массив целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)). Вы можете выполнить следующую операцию несколько раз (возможно, ни одного):

  • выбрать произвольное \(i\) и выполнить swap\((a_i, a_{a_i})\).

Сколько различных массивов можно получить? Выведите ответ по модулю \((10^9 + 7)\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^6\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1\le a_i\le n\)).

Выходные данные

Выведите одно число — число достижимых массивов по модулю \((10^9 + 7)\).

Примечание

В первом примере изначально массив равен \([1, 1, 2]\). Если выполнить операцию с \(i = 3\), то местами поменяются значения \(a_3\) и \(a_2\), массив станет равен \([1, 2, 1]\). Можно показать, что других достижимых массивов нет.

Во втором примере четыре достижимых массива суть \([2, 1, 4, 3]\), \([1, 2, 4, 3]\), \([1, 2, 3, 4]\), \([2, 1, 3, 4]\). Можно показать, что других достижимых массивов нет.

H. Машина Голдберга 3

Деревья дп *3500

Дано полное корневое бинарное дерево, то есть корневое дерево, в котором у каждой вершины или \(0\), или \(2\) ребёнка. Корнем этого дерева является вершина \(1\). Вершина без детей называется листом. У каждого листа есть значение голода, обозначим значение голода листа \(v\) через \(h_v\).

В каждой внутренней вершине дерева есть свой переключатель, указывающий на одного из сыновей этой вершины.

Дерево принимает печеньки. Перед запуском процесса вы можете выбрать начальное положение каждого переключателя для всех вершин независимо. Процесс устроен следующим образом:

  • Изначально в вершинах нет печенек.
  • Вы вставляете печеньки по одной в корневую вершину.
  • Пока печенька не спустилась до листа, она падает в ребёнка, на которого указывает переключатель в текущей вершине. Сам переключатель после этого изменяет своё состояние на противоположное, т. е. начинает указывать на другого ребёнка.
  • Вы перестаёте кормить машину печеньем, когда в каждом листе \(v\) будет хотя бы \(h_v\) печенек. В этом случае дерево считается накормленным.

Даны \(q\) запросов. Каждый запрос меняет значение \(h_v\) для какого-то листа \(v\). Вам необходимо вывести \(q + 1\) число, \(i\)-е из которых равно минимальному количеству печенек, необходимых для того, чтобы полностью накормить машину после первых \((i - 1)\) запросов, если перед запуском процесса вы можете выбрать начальное положение каждого переключателя независимо. Поскольку это количество может быть очень большим, выведите его по модулю \(998\,244\,353\).

Обратите внимание, что между запросами вы можете менять начальное состояние переключателей. Однако сами запросы не являются независимыми: при ответе на \(i\)-й запрос нужно также учесть эффект от запросов \(1, 2, \ldots, i - 1\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\le n < 200\,000\)) — количество вершин в дереве.

Вторая строка содержит \(n - 1\) целое число \(p_2, p_3, \ldots, p_n\) (\(1\le p_i < i\)), что означает, что родителем вершины \(i\) является \(p_i\).

Третья строка содержит \(n\) целых чисел \(h_1, h_2, \ldots, h_n\) (\(0\le h_i\le 10^9\)) — значения голода для вершин. Если вершина \(i\) не является листом, то \(h_i = 0\), и это значение не играет роли. Однако \(h_i = 0\) также может выполняться, если \(i\) — лист.

Четвёртая строка содержит одно целое число \(q\) (\(0\le q\le 200\,000\)) — количество запросов.

Каждая из следующих \(q\) строк содержит два целых числа \(v\) и \(x\) (\(1\le v\le n\), \(0\le x\le 10^9\)), задающих очередной запрос: это запрос замены значения голода вершины \(v\) на \(x\).

Гарантируется, что заданное дерево является полным корневым бинарным деревом с корнем в вершине \(1\). Также гарантируется, что во всех запросах вершина \(v\) является листом.

Выходные данные

Выведите \(q + 1\) число, \(i\)-е из которых равно минимальному количеству печенек, необходимых для того, чтобы накормить машину после \((i - 1)\) запросов, взятое по модулю \(998\,244\,353\).

Примечание

Рассмотрим пример. До начала всех запросов нам не нужно вставлять печенье, поскольку все нулевые величины голода автоматически удовлетворены.

После первого запроса можно сделать так, чтобы изначально переключатель в вершине \(1\) указывал на вершину \(3\). Тогда достаточно вставить одну печеньку, она немедленно упадёт в вершину \(3\).

После второго запроса можно сделать так, чтобы изначально переключатель в вершине \(1\) указывал на \(3\), а переключатель в вершине \(2\) — на вершину \(4\). Первая печенька упадёт в вершину \(3\) и изменит состояние переключателя в вершине \(1\): теперь он будет указывать на \(2\). Вторая печенька пройдёт по пути \(1 \to 2 \to 4\).

После третьего запроса можно сделать так, чтобы изначально переключатель в вершине \(1\) указывал на \(2\), а переключатель в вершине \(2\) — на вершину \(4\). Тогда три печеньки пройдут по путям \(1 \to 2 \to 4\), \(1 \to 3\), \(1 \to 2 \to 5\).

После четвёртого запроса можно сделать так, чтобы изначально переключатель в вершине \(1\) указывал на \(3\). Вне зависимости от исходного положения переключателя в вершине \(2\), после того как мы вставим семь печенюшек в дерево, четыре из них окажутся в листе \(3\), а в каждом из листьев \(4\) и \(5\) окажется по одной или две печеньки (обратите внимание, что превышать величины голода разрешается).

После пятого запроса ответ равен \(3\,999\,999\,997\). Не забудьте вывести ответ по модулю \(998\,244\,353\).

I. Избыточные маршруты

Деревья дп Конструктив *3500

Дано дерево из \(n\) вершин, пронумерованных числами \(1, 2, \ldots, n\). Длина простого пути в дереве равна числу вершин в нём.

Вам нужно выбрать некоторое множество простых путей длины хотя бы \(2\) каждый, причём нельзя одновременно выбрать два разных пути, один из которых содержится в другом. Найдите наибольший возможный размер такого множества.

Формально, множество вершин \(S\) называется маршрутом, если в нём по крайней мере две вершины, при этом оно является множеством вершин некоторого простого пути в дереве. Набор попарно различных маршрутов называется расписанием. Маршрут \(S\) в расписании \(T\) называется избыточным, если есть какой-то другой маршрут \(S' \in T\), такой что \(S \subset S'\). Расписание называется эффективным, если в нём нет избыточных маршрутов. Найдите наибольшее возможное количество маршрутов в эффективном расписании.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 3000\)).

Далее следуют \(n - 1\) строк, \(i\)-я из которых содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\)) — номера вершин, соединённых \(i\)-м ребром.

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите единственное число — ответ на задачу.

Примечание

В первом примере возможными эффективными расписаниями являются \(\{\{1, 2\}, \{1, 3\}, \{1, 4\}\}\) и \(\{\{1, 2, 3\}, \{1, 2, 4\}, \{1, 3, 4\}\}\).

Во втором примере можно выбрать \(\{ \{1, 2, 3\}, \{2, 3, 4\}, \{3, 4, 6\}, \{2, 3, 5\}, \{3, 4, 5\}, \{3, 4, 7\}, \{4, 6, 7\}\}\).

D. Матричный каскад

дп жадные алгоритмы Конструктив математика Перебор Структуры данных *1700

Дана матрица размера \(n \times n\), состоящая из 0 и 1. Строки матрицы пронумерованы от \(1\) до \(n\) сверху вниз, столбцы пронумерованы от \(1\) до \(n\) слева направо. Клетку на пересечении \(x\)-й строки и \(y\)-го столбца обозначим как \((x, y)\).

AquaMoon хочет превратить все элементы матрицы в 0. За один шаг она может выполнить следующую операцию:

  • выбрать произвольную клетку, пусть это \((i, j)\), затем инвертировать элемент в клетке \((i, j)\), а также инвертировать все элементы в клетках \((x, y)\), для которых \(x > i\) и \(x - i \ge \left|y - j\right|\). Инвертирование — это замена символа на противоположный: 0 на 1, 1 на 0.

Помогите AquaMoon определить наименьшее число шагов, необходимых для того, чтобы превратить все элементы матрицы в 0. Можно показать, что ответ всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 3000\)).

В \(i\)-й из следующих \(n\) строк содержится бинарная строка, состоящая только из символов 0 и 1, имеющая длину \(n\).

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превосходит \(9\,000\,000\).

Выходные данные

Для каждого набора входных данных выведите наименьшее необходимое число шагов.

Примечание

В первом наборе входных данных можно действовать так:

  1. выполнить операцию для клетки \((1, 3)\).

Очевидно, изначально не все элементы матрицы равны 0, так что необходима как минимум одна операция. Значит, \(1\) и есть ответ.

В втором наборе входных данных можно действовать так:

  1. выполнить операцию для клетки \((3, 3)\);
  2. выполнить операцию для клетки \((1, 1)\).

Можно показать, что невозможно превратить все элементы в 0 за \(0\) шагов или за \(1\) шаг, так что ответ равен \(2\).

H. Поток астеризма

дп математика матрицы *3200

Bogocubic играет в игру с amenotiomoi. Сначала Bogocubic фиксировал целое число \(n\), затем он дал amenotiomoi целое число \(x\), изначально равное \(1\).

За один ход amenotiomoi выполняет одну из следующих операций с равной вероятностью:

  • увеличить \(x\) на \(1\);
  • умножить \(x\) на \(2\).

Bogocubic хочет узнать, чему равно математическое ожидание числа шагов, которое должен сделать amenotiomoi, чтобы сделать \(x\) больше или равным \(n\). Найдите эту величину по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(y\), что \(0 \le y < M\) и \(y \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите одно число — математическое ожидание числа шагов по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных \(n\le x\) без выполнения каких-либо операций, так что ответ равен \(0\).

Во втором наборе входных данных, для \(n = 4\), ниже указан список всех возможных последовательностей операций вместе с вероятностями их реализации:

  • \(1\stackrel{+1}{\longrightarrow}2\stackrel{+1}{\longrightarrow}3\stackrel{+1}{\longrightarrow}4\), вероятность равна \(\frac{1}{8}\);
  • \(1\stackrel{\times 2}{\longrightarrow}2\stackrel{+1}{\longrightarrow}3\stackrel{+1}{\longrightarrow}4\), вероятность равна \(\frac{1}{8}\);
  • \(1\stackrel{+1}{\longrightarrow}2\stackrel{+1}{\longrightarrow}3\stackrel{\times 2}{\longrightarrow}6\), вероятность равна \(\frac{1}{8}\);
  • \(1\stackrel{\times 2}{\longrightarrow}2\stackrel{+1}{\longrightarrow}3\stackrel{\times 2}{\longrightarrow}6\), вероятность равна \(\frac{1}{8}\);
  • \(1\stackrel{+1}{\longrightarrow}2\stackrel{\times 2}{\longrightarrow}4\), вероятность равна \(\frac{1}{4}\);
  • \(1\stackrel{\times 2}{\longrightarrow}2\stackrel{\times 2}{\longrightarrow}4\), вероятность равна \(\frac{1}{4}\).

Значит, математическое ожидание числа шагов равно \(4 \cdot \left(3 \cdot \frac{1}{8}\right) + 2 \cdot \left(2 \cdot \frac{1}{4} \right) =\frac{5}{2} \equiv 499122179 \pmod{998244353}\). В третьем наборе входных данных, для \(n = 8\), математическое ожидание числа шагов равно \(\frac{137}{32}\equiv 717488133\pmod{998244353}\).

В четвёртом наборе входных данных, для \(n = 15\), математическое ожидание числа шагов равно \(\frac{24977}{4096} \equiv 900515847 \pmod{998244353}\).

C. Completely Searching for Inversions

графы дп поиск в глубину и подобное *1900

Pak Chanek has a directed acyclic graph (a directed graph that does not have any cycles) containing \(N\) vertices. Vertex \(i\) has \(S_i\) edges directed away from that vertex. The \(j\)-th edge of vertex \(i\) that is directed away from it, is directed towards vertex \(L_{i,j}\) and has an integer \(W_{i,j}\) (\(0\leq W_{i,j}\leq1\)). Another information about the graph is that the graph is shaped in such a way such that each vertex can be reached from vertex \(1\) via zero or more directed edges.

Pak Chanek has an array \(Z\) that is initially empty.

Pak Chanek defines the function dfs as follows:

// dfs from vertex i
void dfs(int i) {
// iterate each edge of vertex i that is directed away from it
for(int j = 1; j <= S[i]; j++) {
Z.push_back(W[i][j]); // add the integer in the edge to the end of Z
dfs(L[i][j]); // recurse to the next vertex
}
}

Note that the function does not keep track of which vertices have been visited, so each vertex can be processed more than once.

Let's say Pak Chanek does dfs(1) once. After that, Pak Chanek will get an array \(Z\) containing some elements \(0\) or \(1\). Define an inversion in array \(Z\) as a pair of indices \((x, y)\) (\(x < y\)) such that \(Z_x > Z_y\). How many different inversions in \(Z\) are there if Pak Chanek does dfs(1) once? Since the answer can be very big, output the answer modulo \(998\,244\,353\).

Input

The first line contains a single integer \(N\) (\(2 \leq N \leq 10^5\)) — the number of vertices in the graph. The following lines contain the description of each vertex from vertex \(1\) to vertex \(N\).

The first line of each vertex \(i\) contains a single integer \(S_i\) (\(0 \leq S_i \leq N-1\)) — the number of edges directed away from vertex \(i\).

The \(j\)-th of the next \(S_i\) lines of each vertex \(i\) contains two integers \(L_{i,j}\) and \(W_{i,j}\) (\(1 \leq L_{i,j} \leq N\); \(0 \leq W_{i,j} \leq 1\)) — an edge directed away from vertex \(i\) that is directed towards vertex \(L_{i,j}\) and has an integer \(W_{i,j}\). For each \(i\), the values of \(L_{i,1}\), \(L_{i,2}\), ..., \(L_{i,S_i}\) are pairwise distinct.

It is guaranteed that the sum of \(S_i\) over all vertices does not exceed \(2 \cdot 10^5\). There are no cycles in the graph. Each vertex can be reached from vertex \(1\) via zero or more directed edges.

Output

An integer representing the number of inversions in \(Z\) if Pak Chanek does dfs(1) once. Since the answer can be very big, output the answer modulo \(998\,244\,353\).

Note

The following is the dfs(1) process on the graph.

In the end, \(Z=[0,1,0,1,1,0]\). All of its inversions are \((2,3)\), \((2,6)\), \((4,6)\), and \((5,6)\).

D. Digital Wallet

дп жадные алгоритмы *2300

There are \(N\) arrays, each array has \(M\) positive integer elements The \(j\)-th element of the \(i\)-th array is \(A_{i,j}\).

Initially, Chaneka's digital wallet contains \(0\) money. Given an integer \(K\). Chaneka will do \(M-K+1\) operations. In the \(p\)-th operation, Chaneka does the following procedure:

  1. Choose any array. Let's say Chaneka chooses the \(x\)-th array.
  2. Choose an index \(y\) in that array such that \(p \leq y \leq p+K-1\).
  3. Add the value of \(A_{x, y}\) to the total money in the wallet.
  4. Change the value of \(A_{x, y}\) into \(0\).

Determine the maximum total money that can be earned!

Input

The first line contains three integers \(N\), \(M\), and \(K\) (\(1 \leq N \leq 10\); \(1 \leq M \leq 10^5\); \(1 \leq K \leq \min(10, M)\)) — the number of arrays, the size of each array, and the constant that describes the operation constraints.

The \(i\)-th of the next \(N\) lines contains \(M\) integers \(A_{i,1}, A_{i,2}, \ldots, A_{i,M}\) (\(1 \leq A_{i,j} \leq 10^6\)) — the elements of the \(i\)-th array.

Output

Output an integer representing the maximum total money that can be earned.

Note

In the first example, the following is a sequence of operations of one optimal strategy:

  1. Choosing element \(A_{1, 1}\) with a value of \(10\).
  2. Choosing element \(A_{3, 2}\) with a value of \(8\).
  3. Choosing element \(A_{2, 3}\) with a value of \(9\).

So the total money earned is \(10+8+9=27\).

In the second example, the following is a sequence of operations of one optimal strategy:

  1. Choosing element \(A_{3, 2}\) with a value of \(8\).
  2. Choosing element \(A_{1, 2}\) with a value of \(9\).

So the total money earned is \(8+9=17\).

In the third example, the following is a sequence of operations of one optimal strategy:

  1. Choosing element \(A_{1, 3}\) with a value of \(10\).
  2. Choosing element \(A_{1, 2}\) with a value of \(9\).

So the total money earned is \(10+9=19\).

E. Elevators of Tamem

дп *2700

There is a building named Taman Membeku (shortened as Tamem). The building has \(N\) floors numbered from \(1\) to \(N\) from bottom to top. The only way to move between floors in the building is to use elevators. There are \(3\) elevators available in Tamem, namely elevators \(1\), \(2\), and \(3\).

Pak Chanek works as an elevator operator in Tamem. Pak Chanek will work for \(Q\) days. Initially, each elevator is in floor \(1\) and all elevators are on. On each day, exactly one of the following will happen:

  • 1 x y – There is a person currently in floor \(x\) who wants to go to floor \(y\). (\(1\leq x,y\leq N\); \(x\neq y\))
  • 2 p – Elevator \(p\) changes state at the start of the day. If previously it is on, then it will turn off. If previously it is off, then it will turn on. (\(1\leq p\leq3\))

For each day, Pak Chanek can control the movement of all elevators as he pleases. However, for each day where there is a person currently in floor \(x\) who wants to go to floor \(y\), among all elevator movements done by Pak Chanek, the following must happen:

  1. One elevator moves to floor \(x\).
  2. The person gets into the elevator.
  3. The elevator moves to floor \(y\).
  4. The person gets out of the elevator.

For each day, Pak Chanek can only move the elevators that are currently on. Note that, since a change in state happens at the start of the day, this means that an elevator that turns off on some day starts becoming unusable from that day itself. Conversely, an elevator that turns on on some day starts becoming usable from that day itself.

It is known that the electricity fee for each day is different. More specifically, on the \(j\)-th day, the fee needed to move one elevator up or down by one floor is \(A_j\).

From the start, Pak Chanek already knows the electricity fees and the sequence of events that will happen on the \(Q\) days, so Pak Chanek can operate the elevators strategically. What is the minimum possible electricity fee to fulfill all needs of the people who want to move between floors in Tamem? Note: in the end, each elevator does not have to go back to floor \(1\).

Input

The first line contains two integers \(N\) and \(Q\) (\(2\leq N\leq10^5\); \(1\leq Q\leq300\)) — the number of floors and the number of days.

The second line contains \(Q\) integers \(A_1, A_2, A_3 \ldots, A_Q\) (\(1 \leq A_j \leq 10^5\)) — the electricity fee for each day.

The \(j\)-th of the next \(Q\) lines contains the \(j\)-th event as described. At any moment, there will always be at least one elevator that is on.

Output

An integer representing the minimum possible electricity fee to fulfill all needs of the people who want to move between floors in Tamem.

Note

The following is an example of an optimal strategy:

  1. On the \(1\)-st day:
    • Elevator \(2\) moves to floor \(3\).
    • Elevator \(3\) moves to floor \(2\), picks the person up, moves to floor \(7\), then drops the person off.
  2. On the \(2\)-nd day:
    • Elevator \(2\) picks the person up, moves to floor \(9\), then drops the person off.
  3. On the \(3\)-rd day:
    • Elevator \(2\) turns off.
  4. On the \(4\)-th day:
    • Elevator \(3\) moves to floor \(4\), picks the person up, moves to floor \(5\), drops the person off, then moves to floor \(3\).
  5. On the \(5\)-th day:
    • Elevator \(3\) picks the person up, moves to floor \(5\), then drops the person off.
  6. On the \(6\)-th day:
    • Elevator \(2\) turns on.
    • Elevator \(1\) moves to floor \(2\).
    • Elevator \(2\) moves to floor \(7\).
  7. On the \(7\)-th day:
    • Elevator \(2\) picks the person up, moves to floor \(3\), then drops the person off.
  8. On the \(8\)-th day:
    • Elevator \(1\) picks the person up, moves to floor \(1\), then drops the person off.

The total electricity fee for each day from the \(1\)-st day to the \(8\)-th day are \(24\), \(24\), \(0\), \(18\), \(8\), \(6\), \(28\), and \(6\) respectively. Therefore, the total electricity fee for the entire \(Q\) days is \(24+24+0+18+8+6+28+6=114\).

It can be obtained that there is no strategy that requires a smaller electricity fee.

G. Grouped Carriages

Бинарный поиск дп жадные алгоритмы Потоки Структуры данных *2100

Pak Chanek observes that the carriages of a train is always full on morning departure hours and afternoon departure hours. Therefore, the balance between carriages is needed so that it is not too crowded in only a few carriages.

A train contains \(N\) carriages that are numbered from \(1\) to \(N\) from left to right. Carriage \(i\) initially contains \(A_i\) passengers. All carriages are connected by carriage doors, namely for each \(i\) (\(1\leq i\leq N-1\)), carriage \(i\) and carriage \(i+1\) are connected by a two-way door.

Each passenger can move between carriages, but train regulation regulates that for each \(i\), a passenger that starts from carriage \(i\) cannot go through more than \(D_i\) doors.

Define \(Z\) as the most number of passengers in one same carriage after moving. Pak Chanek asks, what is the minimum possible value of \(Z\)?

Input

The first line contains a single integer \(N\) (\(1 \leq N \leq 2\cdot10^5\)) — the number of carriages.

The second line contains \(N\) integers \(A_1, A_2, A_3, \ldots, A_N\) (\(0 \leq A_i \leq 10^9\)) — the initial number of passengers in each carriage.

The third line contains \(N\) integers \(D_1, D_2, D_3, \ldots, D_N\) (\(0 \leq D_i \leq N-1\)) — the maximum limit of the number of doors for each starting carriage.

Output

An integer representing the minimum possible value of \(Z\).

Note

One strategy that is optimal is as follows:

  • \(5\) people in carriage \(1\) move to carriage \(4\) (going through \(3\) doors).
  • \(3\) people in carriage \(5\) move to carriage \(3\) (going through \(2\) doors).
  • \(2\) people in carriage \(6\) move to carriage \(5\) (going through \(1\) door).
  • \(1\) person in carriage \(6\) moves to carriage \(7\) (going through \(1\) door).

The number of passengers in each carriage becomes \([2,4,5,5,4,5,4]\).

I. Imagination Castle

дп игры *2300

Given a chessboard of size \(N \times M\) (\(N\) rows and \(M\) columns). Each row is numbered from \(1\) to \(N\) from top to bottom and each column is numbered from \(1\) to \(M\) from left to right. The tile in row \(r\) and column \(c\) is denoted as \((r,c)\). There exists \(K\) distinct special tiles on the chessboard with the \(i\)-th special tile being tile \((X_i,Y_i)\). It is guaranteed that tile \((1,1)\) is not a special tile.

A new chess piece has been invented, which is the castle. The castle moves similarly to a rook in regular chess, but slightly differently. In one move, a castle that is on some tile can only move to another tile in the same row or in the same column, but only in the right direction or the down direction. Formally, in one move, the castle on tile \((r,c)\) can only move to tile \((r',c')\) if and only if one of the following two conditions is satisfied:

  • \(r'=r\) and \(c'>c\).
  • \(c'=c\) and \(r'>r\).

Chaneka and Bhinneka will play a game. In the beginning of the game, there is a castle in tile \((1,1)\). The two players will play alternatingly with Chaneka going first. In one turn, the player on that turn must move the castle following the movement rules of the castle.

If a player moves the castle to a special tile on her turn, then that player wins the game and the game ends. If on a turn, the castle cannot be moved, the player on that turn loses and the game ends.

Given the size of the board and the locations of each special tile. Determine the winner of this game if Chaneka and Bhinneka plays optimally.

Input

The first line contains three integers \(N\), \(M\), and \(K\) (\(1 \leq N,M \leq 2 \cdot 10^5\); \(0 \leq K \leq \min(N \times M - 1, 2\cdot10^5)\)) — the size of the chessboard and the number of special tiles.

The \(i\)-th of the next \(K\) lines contains two integers \(X_i\) and \(Y_i\) (\(1\leq X_i\leq N\); \(1\leq Y_i\leq M\); \((X_i, Y_i) \neq (1,1)\)) — the location of each special tile. The special tiles are pairwise distinct.

Output

Output Chaneka if Chaneka is the winner, output Bhinneka if Bhinneka is the winner.

Note

In the first example, the following is an illustration of the chessboard in the beginning of the game.

Chaneka can move the castle to special tile \((1,3)\) or \((1,5)\) directly on her first turn. Therefore, Chaneka is the winner.

In the second example, the following is an illustration of the chessboard in the beginning of the game.

Chaneka can only move the castle to tile \((1, 2)\) or \((2, 1)\) on her first turn. Whatever Chaneka does, Bhinneka will be able to directly move the castle to tile \((2, 2)\). After that, on Chaneka's turn, she cannot move the castle, so Chaneka loses. Therefore, Bhinneka is the winner.

J. Jackets and Packets

дп *2800

Pak Chanek has \(N\) jackets that are stored in a wardrobe. Pak Chanek's wardrobe has enough room for two stacks of jackets, namely the left stack and the right stack. Initially, all \(N\) jackets are in the left stack, while the right stack is empty. Initially, the \(i\)-th jacket from the top of the left stack has colour \(C_i\).

Pak Chanek wants to pack all of those jackets into some packets, such that the jackets in the same packet has the same colour. However, it is possible for two jackets with the same colour to be in different packets.

Pak Chanek can do two kinds of operations:

  • Pak Chanek can pick any number of jackets from the top from one stack as long as the colour is the same, then take those jackets out of the stack and pack them into a packet. This packing operation takes \(X\) minutes, no matter how many jackets are packed.
  • Pak Chanek can move one topmost jacket from one stack to the top of the other stack (possibly right to left or left to right). This moving operation takes \(Y\) minutes.

Determine the minimum time to pack all jackets!

Input

The first line contains three integers \(N\), \(X\), and \(Y\) (\(1 \leq N \leq 400\); \(1\leq X,Y\leq10^9\)) — the number of jackets, the time to do a packing operation, and the time to do a movement operation.

The second line contains \(N\) integers \(C_1, C_2, C_3, \ldots, C_N\) (\(1 \leq C_i \leq N\)) — the colour of each jacket.

Output

An integer representing the minimum time to pack all jackets.

Note

Let's denote the contents of the two stacks using arrays that represent the colours of the jackets in the stack from top to bottom. Initially, the two stacks form \([4, 4, 2, 4, 1, 2, 2, 1]\) and \([]\).

Pak Chanek can do the following sequence of operations:

  1. Movement from left to right. The two stacks become \([4, 2, 4, 1, 2, 2, 1]\) and \([4]\).
  2. Movement from left to right. The two stacks become \([2, 4, 1, 2, 2, 1]\) and \([4, 4]\).
  3. Packing for \(1\) jacket from the top of the left stack. The two stacks become \([4, 1, 2, 2, 1]\) and \([4, 4]\).
  4. Movement from left to right. The two stacks become \([1, 2, 2, 1]\) and \([4, 4, 4]\).
  5. Movement from left to right. The two stacks become \([2, 2, 1]\) and \([1, 4, 4, 4]\).
  6. Packing for \(2\) jackets from the top of the left stack. The two stacks become \([1]\) and \([1, 4, 4, 4]\).
  7. Movement from right to left. The two stacks become \([1, 1]\) and \([4, 4, 4]\).
  8. Packing for \(3\) jackets from the top of the right stack. The two stacks become \([1, 1]\) and \([]\).
  9. Packing for \(2\) jackets from the top of the left stack. The two stacks become \([]\) and \([]\).

In total, it requires a time of \(2+2+7+2+2+7+2+7+7=38\) minutes to pack all jackets. It can be proven that there are no other ways that are faster.

K. Keen Tree Calculation

Бинарный поиск геометрия графы Деревья дп реализация Структуры данных *2500

There is a tree of \(N\) vertices and \(N-1\) edges. The \(i\)-th edge connects vertices \(U_i\) and \(V_i\) and has a length of \(W_i\).

Chaneka, the owner of the tree, asks you \(Q\) times. For the \(j\)-th question, the following is the question format:

  • \(X_j\) \(K_j\) – If each edge that contains vertex \(X_j\) has its length multiplied by \(K_j\), what is the diameter of the tree?

Notes:

  • Each of Chaneka's question is independent, which means the changes in edge length do not influence the next questions.
  • The diameter of a tree is the maximum possible distance between two different vertices in the tree.
Input

The first line contains a single integer \(N\) (\(2\leq N\leq10^5\)) — the number of vertices in the tree.

The \(i\)-th of the next \(N-1\) lines contains three integers \(U_i\), \(V_i\), and \(W_i\) (\(1 \leq U_i,V_i \leq N\); \(1\leq W_i\leq10^9\)) — an edge that connects vertices \(U_i\) and \(V_i\) with a length of \(W_i\). The edges form a tree.

The \((N+1)\)-th line contains a single integer \(Q\) (\(1\leq Q\leq10^5\)) — the number of questions.

The \(j\)-th of the next \(Q\) lines contains two integers \(X_j\) and \(K_j\) as described (\(1 \leq X_j \leq N\); \(1 \leq K_j \leq 10^9\)).

Output

Output \(Q\) lines with an integer in each line. The integer in the \(j\)-th line represents the diameter of the tree on the \(j\)-th question.

Note

In the first example, the following is the tree without any changes.

The following is the tree on the \(1\)-st question.

The maximum distance is between vertices \(6\) and \(7\), which is \(6+6+6=18\), so the diameter is \(18\).

The following is the tree on the \(2\)-nd question.

The maximum distance is between vertices \(2\) and \(6\), which is \(3+2+6=11\), so the diameter is \(11\).

M. Mighty Rock Tower

дп Комбинаторика математика Перебор Теория вероятностей *2400

Pak Chanek comes up with an idea in the midst of boredom to play a game. The game is a rock tower game. There is a big rock that is used as a base. There are also \(N\) small identical rocks that Pak Chanek will use to build a rock tower with a height of \(N\) above the base rock.

Initially, there are no small rocks that are located above the base rock. In other words, the height of the tower above the base rock is initially \(0\). In one move, Pak Chanek can place one small rock onto the top of the tower which makes the height of the tower above the base rock increase by \(1\). Each time Pak Chanek place one small rock, the following will happen after the small rock is placed:

  • Let's say \(x\) is the height of the tower above the base rock right after the small rock is placed.
  • There is a probability of \(P_x\) percent that the topmost rock falls.
  • If \(x \geq 2\) and the topmost rock falls, then there is another probability of \(P_x\) percent that the \(2\)-nd topmost rock also falls.
  • If \(x \geq 3\) and the \(2\)-nd topmost rock falls, then there is another probability of \(P_x\) percent that the \(3\)-rd topmost rock also falls.
  • If \(x \geq 4\) and the \(3\)-rd topmost rock falls, then there is another probability of \(P_x\) percent that the \(4\)-th topmost rock also falls.
  • And so on.

If the tower successfully reaches a height of \(N\) without any rocks falling after that, then the game is ended.

If given an integer array \([P_1, P_2, \ldots, P_N]\), what is the expected value of the number of moves that Pak Chanek needs to do to end the game? It can be proven that the expected value can be represented as an simple fraction \(\frac{P}{Q}\) where \(Q\) is coprime to \(998\,244\,353\). Output the value of \(P \times Q^{-1}\) modulo \(998\,244\,353\).

Input

The first line contains a single integer \(N\) (\(1 \leq N \leq 2\cdot10^5\)) — the required height of the rock tower.

The second line contains \(N\) integers \(P_1, P_2, P_3, \ldots, P_N\) (\(0 \leq P_i \leq 99\)).

Output

An integer representing the expected value of the number of moves that Pak Chanek needs to do to end the game, modulo \(998\,244\,353\).

Note

In the first example, the expected value of the number of moves that Pak Chanek needs to do to end the game is \(\frac{19}{2}\).

B2. Конфетная вечеринка (сложная версия)

битмаски дп жадные алгоритмы Конструктив математика реализация *2100

Это сложная версия задачи. Единственное отличие состоит в том, что в этой версии каждый должен дать конфеты не более чем одному человеку и получить конфеты не более чем от одного человека. Обратите внимание, что посылка не может пройти обе версии задачи одновременно. Вы можете делать взломы, только если обе версии задачи решены.

После экзамена Daniel и его друзья собираются устроить вечеринку. Все придут с конфетами.

На вечеринке будут присутствовать \(n\) человек. Изначально у \(i\)-го человека есть \(a_i\) конфет. Во время вечеринки они будут обмениваться конфетами. Для этого они выстроятся в произвольном порядке и каждый из них сделает следующее не более одного раза:

  • Выберет целое число \(p\) (\(1 \le p \le n\)) и неотрицательное целое число \(x\), затем даст \(2^{x}\) конфет \(p\)-му человеку. Заметим, что человек не может отдать больше конфет, чем у него есть в данный момент (он мог получить конфеты от кого-то другого), и он не может отдать конфеты самому себе.

Daniel любит справедливость, поэтому он будет счастлив тогда и только тогда, когда каждый получит конфеты от не более чем одного человека. В то же время его друг Tom любит среднее, поэтому он будет счастлив тогда и только тогда, когда у всех людей будет одинаковое количество конфет после всех обменов.

Определите, существует ли способ обменяться конфетами так, чтобы Daniel и Tom были счастливы после обменов.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — количество человек на вечеринке.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le 10^9\)) — количество конфет у каждого человека.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes» (без кавычек), если существует способ обменяться конфетами так, чтобы Daniel и Tom были счастливы, и выведите «No» (без кавычек) в противном случае.

Вы можете вывести ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes», и «YES» будут распознаны как положительный ответ.

Примечание

В первом наборе входных данных второй человек даёт \(1\) конфету первому человеку, поэтому у всех людей есть по \(3\) конфеты.

Во втором наборе входных данных четвёртый человек даёт \(1\) конфету второму человеку, пятый человек даёт \(2\) конфеты первому человеку, третий человек ничего не делает. После всех обменов у каждого есть по \(3\) конфеты.

В третьем наборе входных данных невозможно сделать так, чтобы у всех людей было одинаковое количество конфет.

В четвёртом наборе входных данных двум людям не нужно ничего делать.

C. План путешествия

Деревья дп Комбинаторика математика реализация *2400

Во время летних каникул после экзамена, Tom и Daniel планировали отправиться в путешествие.

В их стране есть \(n\) городов, пронумерованных от \(1\) до \(n\). И система дорожного движения в стране особенная. Для любого города \(i\) (\(1 \le i \le n\)) есть:

  • дорога между городами \(i\) и \(2i\), если \(2i\le n\);
  • дорога между городами \(i\) и \(2i+1\), если \(2i+1\le n\).

Составляя план путешествия, Daniel выбирает некоторое целое значение от \(1\) до \(m\) для каждого города, для \(i\)-го города обозначим его \(a_i\).

Пусть \(s_{i,j}\) равно максимальному значению для городов на простом\(^\dagger\) пути между городами \(i\) и \(j\). Тогда оценка плана путешествия равна \(\sum_{i=1}^n\sum_{j=i}^n s_{i,j}\).

Tom хочет знать сумму оценок всех возможных планов путешествия. Daniel просит вас помочь ему найти её. Вам нужно сказать ответ по модулю \(998\,244\,353\).

\(^\dagger\) Простым путём между городами \(x\) и \(y\) называется путь между ними, который проходит по каждому городу не более одного раза.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1\le t\le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1\leq n\leq 10^{18}\), \(1\leq m\leq 10^5\)) — количество городов и максимальное значение для города.

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — сумму оценок всех возможных планов путешествия по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных есть только один возможный план путешествия:

Путь \(1\rightarrow 1\): \(s_{1,1}=a_1=1\).

Путь \(1\rightarrow 2\): \(s_{1,2}=\max(1,1)=1\).

Путь \(1\rightarrow 3\): \(s_{1,3}=\max(1,1)=1\).

Путь \(2\rightarrow 2\): \(s_{2,2}=a_2=1\).

Путь \(2\rightarrow 1\rightarrow 3\): \(s_{2,3}=\max(1,1,1)=1\).

Путь \(3\rightarrow 3\): \(s_{3,3}=a_3=1\).

Оценка равна \(1+1+1+1+1+1=6\).

Во втором наборе входных данных есть четыре возможных плана путешествия:

Оценка плана \(1\): \(1+1+1=3\).

Оценка плана \(2\): \(1+2+2=5\).

Оценка плана \(3\): \(2+2+1=5\).

Оценка плана \(4\): \(2+2+2=6\).

Таким образом, сумма оценок равна \(3+5+5+6=19\).

E. Min-Sum-Max

дп жадные алгоритмы Конструктив *3500

Tom ожидает результатов экзамена. Чтобы разрядить напряженную обстановку, его друг Daniel решил сыграть с ним в игру. Игра называется «Раздели массив».

В игре есть массив \(a\), состоящих из \(n\) целых чисел. Обозначим \([l,r]\) как подотрезок, состоящий из целых чисел \(a_l,a_{l+1},\ldots,a_r\).

Tom разобьет массив на подряд идущие подотрезки \([l_1,r_1],[l_2,r_2],\ldots,[l_m,r_m]\), такие, что каждое число находится ровно в одном подотрезке. Более формально:

  • Для всех \(1\le i\le m\), \(1\le l_i\le r_i\le n\);
  • \(l_1=1\), \(r_m=n\);
  • Для всех \(1< i\le m\), \(l_i=r_{i-1}+1\).

Обозначим \(s_{i}=\sum_{k=l_i}^{r_i} a_k\), то есть \(s_i\) — сумма целых чисел в \(i\)-м подотрезке. Для всех \(1\le i\le j\le m\) должно выполняться следующее условие:

\(\) \min_{i\le k\le j} s_k \le \sum_{k=i}^j s_k \le \max_{i\le k\le j} s_k. \(\)

Tom считает, что чем на большее количество подотрезков будет разбит массив \(a\), тем лучший результат он получит. Поэтому он просит Daniel найти максимальное количество подотрезков среди всех возможных способов разделить массив \(a\). Вы должны помочь ему найти это число.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 50\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 300\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^9\le a_i\le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество подотрезков среди всех возможных способов разделить массив \(a\).

Примечание

В первом наборе входных данных Daniel может разделить массив на \([-1]\) и \([5,4]\), и \(s=[-1,9]\). Можно видеть, что при любых \(i=j\), условие выполняется, и для \(i=1,j=2\), мы имеем \(\min(-1,9)\le (-1)+9\le \max(-1,9)\).

Во втором наборе входных данных, если Daniel разделит массив на \([2023]\) и \([2043]\), то для \(i=1,j=2\) мы имеем \(2023+2043>\max(2023,2043)\), поэтому максимальное количество подотрезков равно \(1\).

В третьем наборе входных данных оптимальным способом разделить массив является \([1,4,7],[-1],[5,-4]\).

В четвёртом наборе входных данных оптимальным способом разделить массив является \([-4,0,3,-18],[10]\).

В пятом наборе входных данных Daniel может получить только один подотрезок.

B. Алгогонки

дп кратчайшие пути *1800

PMP готовится стать воином. Он много тренируется, но результаты пока не очень. На этот раз вместо контестов по программированию он решил состязаться в гонках, чтобы поднять дух победы. Он решил выбрать соревнование, которое помимо прочего использует его алгоритмические навыки.

AlgoRace — особая лига гонщиков, где разные команды соревнуются в стране с n городами. Города пронумерованы от 1 до n. Каждые два различных города страны связаны друг с другом двусторонней дорогой. Каждая команда должна представить на соревновании одного водителя и набор автомобилей.

Соревнование проводится в r раундов. На i-м раунде водители стартуют в городе si, а финишируют в городе ti. В течении этого раунда водителям разрешено менять автомобили не более ki раз. Поменять автомобиль можно в любом городе, это действие не занимает времени. Один автомобиль можно использовать несколько раз за раунд, но общее число пересадок не должно превышать ki. Водители могут свободно выбирать свой путь к месту назначения.

PMP-воин подготовил m типов специально сконструированных автомобилей. Кроме того, PMP водит по-разному в зависимости от свойств автомобиля и дороги, следовательно, автомобиль проезжает разные дороги (или одну дорогу в разных направлениях) за разное время.

PMP-воин хочет разработать лучшие стратегии выбора автомобилей и дорог в каждом раунде, чтобы максимизировать шансы выиграть кубок. Для каждого раунда надо найти минимальное время, необходимое для его прохождения.

Входные данные

Первая строка содержит три целых числа, разделенных пробелом n, m, r (2 ≤ n ≤ 60, 1 ≤ m ≤ 60, 1 ≤ r ≤ 105) — количество городов, количество различных типов машин и количество раундов в соревновании, соответственно.

Затем последуют m матриц размера n × n, состоящих из целых чисел от 0 до 106 (включительно), описывающие время, необходимое для одной машины для того, чтобы проехать разные дороги. Целое число, которое следует k-ым в j-ой строке i-й матрицы, обозначает время, за которое i-ый автомобиль проедет дорогу из j-го города в k-ый город. Заданные матрицы необязательно симметричны, но их диагональ всегда нулевая.

В следующих r строках содержатся описания раундов, i-ая из них содержит разделенные пробелом целые числа si, ti, ki (1 ≤ si, ti ≤ n, si ≠ ti, 0 ≤ ki ≤ 1000) — номер города-старта, номер города-финиша и количество допустимых пересадок в i-ом раунде, соответственно.

Выходные данные

Ваша задача — для каждого раунда вывести на отдельной строке минимальное время, необходимое для прохождения раунда.

Примечание

В первом примере во всех раундах PMP проезжает от города #1 до города #2, затем до города #3 и наконец до города #4. Но последовательность типов машин, которые он использует, в первом раунде (1, 2, 1), а во втором раунде (1, 2, 2). В третьем раунде он может поменять машину три раза. Здесь PMP использует такую же стратегию как и в первом раунде, меняя машину только два раза.

C. Разноцветная таблица

Бинарный поиск дп математика реализация Структуры данных *1300

Вам даны два целых числа \(n\) и \(k\). Также вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) размера \(n\). Известно, что для всех \(1 \leq i \leq n\) верно, что \(1 \leq a_i \leq k\).

Определим двумерный массив \(b\) размера \(n \times n\) так: \(b_{i, j} = \min(a_i, a_j)\). Представим массив \(b\) как квадрат, где верхняя левая клетка — это \(b_{1, 1}\), строки нумеруются сверху вниз от \(1\) до \(n\), столбцы — слева направо от \(1\) до \(n\). Назовём цветом клетки число, которое в ней записано (для клетки с координатами \((i, j)\) это \(b_{i, j}\)).

Для каждого цвета от \(1\) до \(k\) найдём минимальный прямоугольник в массиве \(b\), содержащий все клетки этого цвета. Выведите сумму ширины и высоты этого прямоугольника.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n, k \leq 10^5\)) — размер массива \(a\), а также количество цветов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq k\)) — массив \(a\).

Гарантируется, что суммы значений \(n\) и \(k\) по всем наборам входных данных не превосходят \(10^5\).

Выходные данные

На каждый набор входных данных выведите \(k\) чисел: сумму ширины и высоты минимального прямоугольника, содержащего все клетки одного цвета, для цветов от \(1\) до \(k\).

Примечание

В первом наборе входных данных весь массив \(b\) состоит из цвета \(1\), поэтому минимальный прямоугольник для цвета \(1\) имеет размер \(2 \times 2\), сумма его сторон это \(4\).

Во втором наборе входных данных массив \(b\) выглядит так:

11
12

Одна из угловых клеток имеет цвет \(2\), три остальные клетки имеют цвет \(1\). Поэтому для цвета \(1\) минимальный прямоугольник имеет размер \(2 \times 2\), а для цвета \(2\)\(1 \times 1\).

В последнем наборе входных данных \(b\) выглядит так:

11111
12221
12321
12221
11111

E. Очередная задача на MEX

битмаски дп кратчайшие пути Перебор *2300

Вам дан массив целых чисел \(a\) размера \(n\). Вы можете выбрать некое множество непересекающихся подотрезков данного массива (заметим, что некоторые элементы могут не попасть ни в один из отрезков, это не запрещено), для каждого выбранного подотрезка посчитать MEX его элементов, а затем посчитать побитовое исключающее ИЛИ (XOR) всех полученных значений MEX. Какое наибольшее значение XOR может получиться?

MEX (minimum excluded, минимальное отсутствующее) массива — это наименьшее целое неотрицательное целое число, которое не принадлежит массиву. Например:

  • MEX массива \([2,2,1]\) равен \(0\), потому что \(0\) не принадлежит массиву.
  • MEX массива \([3,1,0,1]\) равен \(2\), потому что \(0\) и \(1\) принадлежат массиву, а \(2\) — нет.
  • MEX массива \([0,3,1,2]\) равен \(4\), потому что \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) — нет.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 5000\)) — размер массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq n\)) — массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

На каждый набор входных данных выведите одно число — наибольший возможный XOR значений MEX элементов выбранных отрезков.

Примечание

В первом наборе входных данных максимальный XOR равен \(2\), если взять весь массив, \(\operatorname{MEX}([1, 0]) = 2\).

Во втором наборе входных данных максимальный XOR равен \(6\), если выделить отрезки \([1, 2, 0]\) и \([7, 1, 2, 0, 2, 4, 3]\):

  • \(\operatorname{MEX}([1, 2, 0]) = 3\),
  • \(\operatorname{MEX}([7, 1, 2, 0, 2, 4, 3]) = 5\),
таким образом, побитовое исключающее ИЛИ равно \(5 \oplus 3=6\).

В третьем наборе входных данных максимальный XOR равен \(7\), если выделить отрезки \([1, 0]\) и \([7, 1, 2, 0, 2, 4, 3]\):

  • \(\operatorname{MEX}([1, 0]) = 2\),
  • \(\operatorname{MEX}([7, 1, 2, 0, 2, 4, 3]) = 5\),
таким образом, побитовое исключающее ИЛИ равно \(5 \oplus 2 = 7\).

E. Фанат структур данных

Бинарный поиск битмаски дп Структуры данных *1500

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\), а также бинарная строка\(^{\dagger}\) \(s\), состоящая из \(n\) символов

Августин — большой фанат структур данных. Поэтому он попросил вас реализовать структуру данных, способную ответить на \(q\) запросов. Запросы бывают двух типов:

  • «1 \(l\) \(r\)» (\(1\le l \le r \le n\)) — для всех \(l \le i \le r\) заменить символ \(s_i\) на противоположный. То есть, заменить все \(\texttt{0}\) на \(\texttt{1}\), а все \(\texttt{1}\) на \(\texttt{0}\).
  • «2 \(g\)» (\(g \in \{0, 1\}\)) — вычислить значение побитового XORа чисел \(a_i\) по всем индексам \(i\) таким, что \(s_i = g\). Обратите внимание, что \(\operatorname{XOR}\) от пустого набора чисел считается равным \(0\).

Пожалуйста, помогите Августину ответить на все запросы!

Например, если \(n = 4\), \(a = [1, 2, 3, 6]\), \(s = \texttt{1001}\), рассмотрим серию запросов:

  1. «2 \(0\)» — нас интересуют индексы \(i\), для которых \(s_i = \tt{0}\), так как \(s = \tt{1001}\) — это индексы \(2\) и \(3\), а значит, ответом на запрос будет \(a_2 \oplus a_3 = 2 \oplus 3 = 1\).
  2. «1 \(1\) \(3\)» — нужно заменить символы \(s_1, s_2, s_3\) на противоположные, таким образом до запроса \(s = \tt{1001}\), а после запроса: \(s = \tt{0111}\).
  3. «2 \(1\)» — нас интересуют индексы \(i\), для которых \(s_i = \tt{1}\), так как \(s = \tt{0111}\) — это индексы \(2\), \(3\) и \(4\), а значит, ответом на запрос будет \(a_2 \oplus a_3 \oplus a_4 = 2 \oplus 3 \oplus 6 = 7\).
  4. «1 \(2\) \(4\)» — \(s = \tt{0111}\) \(\to\) \(s = \tt{0000}\).
  5. «2 \(1\)» — \(s = \tt{0000}\), индексов с \(s_i = \tt{1}\) нет, а значит, так как \(\operatorname{XOR}\) от пустого набора чисел считается равным \(0\), ответ на этот запрос: \(0\).

\(^{\dagger}\) Бинарная строка — это строка, содержащая только символы \(\texttt{0}\) или \(\texttt{1}\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива.

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка набора входных данных содержит бинарную строку \(s\) длины \(n\).

Четвёртая строка набора входных данных содержит целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Последующие \(q\) строк набора входных данных описывают запросы. Первое число каждого запроса, \(tp \in \{1, 2\}\) характеризует тип запроса: если \(tp = 1\), далее следует \(2\) целых числа \(1 \le l \le r \le n\), означающее, что нужно выполнить операцию типа \(1\) с параметрами \(l, r\), если \(tp = 2\), далее следует целое число \(g \in \{0, 1\}\), означающее, что нужно выполнить операцию типа \(2\) с параметром \(g\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(10^5\), а также сумма \(q\) по всем наборам не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных, и для каждого запроса типа \(2\) в нём, выведите ответ на соответствующий запрос.

Примечание

Разберём первый набор входных данных примера:

  1. «2 \(0\)» — нас интересуют индексы \(i\), для которых \(s_i = \tt{0}\), так как \(s = \tt{01000}\) — это индексы \(1, 3, 4\) и \(5\), а значит, ответом на запрос будет \(a_1 \oplus a_3 \oplus a_4 \oplus a_5 = 1 \oplus 3 \oplus 4 \oplus 5 = 3\).
  2. «2 \(1\)» — нас интересуют индексы \(i\), для которых \(s_i = \tt{1}\), так как \(s = \tt{01000}\) — единственный подходящий индекс: \(2\), а значит, ответом на запрос будет \(a_2 = 2\).
  3. «1 \(2\) \(4\)» — нужно заменить символы \(s_2, s_3, s_4\) на противоположные, таким образом до запроса \(s = \tt{01000}\), а после запроса: \(s = \tt{00110}\).
  4. «2 \(0\)» — нас интересуют индексы \(i\), для которых \(s_i = \tt{0}\), так как \(s = \tt{00110}\) — это индексы \(1, 2\) и \(5\), а значит, ответом на запрос будет \(a_1 \oplus a_2 \oplus a_5 = 1 \oplus 2 \oplus 5 = 6\).
  5. «2 \(1\)» — нас интересуют индексы \(i\) для которых \(s_i = \tt{1}\), так как \(s = \tt{00110}\) — это индексы \(3\) и \(4\), а значит ответом на запрос будет \(a_3 \oplus a_4 = 3 \oplus 4 = 7\).
  6. «1 \(1\) \(3\)» — \(s = \tt{00110}\) \(\to\) \(s = \tt{11010}\).
  7. «2 \(1\)» — нас интересуют индексы \(i\), для которых \(s_i = \tt{1}\), так как \(s = \tt{11010}\) — это индексы \(1, 2\) и \(4\), а значит, ответом на запрос будет \(a_1 \oplus a_2 \oplus a_4 = 1 \oplus 2 \oplus 4 = 7\).

B. Медуза и математика

битмаски графы дп кратчайшие пути Перебор поиск в глубину и подобное *2400

Медузе даны целые неотрицательные числа \(a\), \(b\), \(c\), \(d\) и \(m\). Первоначально \((x,y)=(a,b)\). Медуза хочет выполнить несколько операций так, чтобы получилось \((x,y)=(c,d)\).

Одна операция заключается в выполенении одного из следующих действий:

  • \(x := x\,\&\,y\),
  • \(x := x\,|\,y\),
  • \(y := x \oplus y\),
  • \(y := y \oplus m\).

Здесь \(\&\) обозначает побитовую операцию И, \(|\) обозначает побитовую операцию ИЛИ, \(\oplus\) обозначает побитовое исключающее ИЛИ.

Медуза хочет узнать минимальное количество операций, после которого можно получить \((x,y)=(c,d)\).

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указывается количество наборов входных данных \(t\) (\(1 \leq t \leq 10^5\)). Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит пять целых чисел \(a\), \(b\), \(c\), \(d\) и \(m\) (\(0 \leq a, b, c, d, m < 2^{30}\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций. Если требуемые значения не достижимы, то вместо этого выведите \(-1\).

Примечание

В первом наборе входных данных мы можем выполнить операцию \(y = x \oplus y\).

Во втором наборе входных данных получить \((x,y)=(1,2)\) с помощью какой-либо последовательности операций невозможно.

В третьем наборе входных данных можно выполнить операцию \(x = x\,\&\,y\), а после \(y = y \oplus m\).

C. Медуза и EVA

графы дп жадные алгоритмы математика Теория вероятностей *2300

Монстры снова вторглись в город! Асука приглашает свою хорошую подругу, Медузу, сесть за руль EVA вместе с ней.

В стране есть \(n\) городов. Все монстры находятся в городе \(n\). Медуза и Асука сейчас находятся в городе \(1\) и должны переместиться в город \(n\), чтобы победить монстров.

Существует \(m\) дорог. По \(i\)-й дороге можно попасть из города \(a_i\) в город \(b_i\). Все дороги являются направленными. То есть из города \(b_i\) в город \(a_i\) по \(i\)-й дороге попасть нельзя. Интересно, что все дороги удовлетворяют условию \(a_i<b_i\).

Вождение EVA требует совместной работы двух человек. Однако Асука и Медуза ранее не проводили совместных тренировок.

Предположим, что в данный момент EVA находится в городе \(u\). Медуза и Асука выберут неразрушенную дорогу, которая начинается в городе \(u\). Предположим, что Медуза и Асука выбирают дороги, которые заканчиваются в городах \(v_1\) и \(v_2\) соответственно. Если \(v_1 = v_2\), то EVA успешно перемещается в город \(v_1\). В противном случае EVA остается в городе \(u\), а обе выбранные ими дороги будут уничтожены.

Возможна ситуация, когда EVA находится в городе \(u\) (\(u \neq n\)) и нет неразрушенных дорог, начинающихся в городе \(u\). В этом случае миссия будет провалена. А если в итоге они достигнут города \(n\), то миссия будет считаться успешной.

Каждый раз, когда они выбирают дороги, Медуза знает, что Асука выберет дорогу случайным образом. Теперь Медуза хочет знать, если она выбирает дороги оптимально, то какова максимальная вероятность того, что миссия будет успешной.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке содержится количество наборов входных данных \(t\) (\(1 \leq t \leq 2000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа, \(n\) и \(m\) (\(2 \leq n \leq 5000\), \(0 \leq m \leq \min(\frac{n(n-1)}{2}, 2 \cdot 10^5)\)) — количество городов и количество дорог.

В следующих \(m\) строках каждого набора входных данных содержатся по два целых числа \(a\) и \(b\) (\(1 \leq a < b \leq n\)) — дорога из города \(a\) в город \(b\).

Гарантируется, что для каждого набора входных данных каждая дорога встречается не более одного раза.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\), а сумма \(m\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите максимальную вероятность того, что миссия будет успешной, если Медуза выбирает дороги оптимально.

Ваш ответ будет принят, если абсолютная или относительная погрешность не превышает \(10^{-9}\). Формально пусть ваш ответ равен \(a\), а ответ жюри — \(b\). Ваш ответ считается правильным, если \(\frac{|a-b|}{\max(1,|b|)} \leq 10^{-9}\).

Примечание

В первом наборе входных данных Медуза выберет \(v_1=3\), а Асука выберет \(v_2=2\) с вероятностью \(0.5\) и \(v_2=3\) с вероятностью \(0.5\). Миссия будет успешной с вероятностью \(0.5\).

D. Медуза и Мику

дп математика разделяй и властвуй Теория вероятностей *2800

Имеется \(n + 1\) городов с номерами от \(0\) до \(n\), соединенные \(n\) дорогами. Дорога \(i\)-го города \((1 \leq i \leq n)\) соединяет города \(i-1\) и \(i\) двунаправленно. После того, как Медуза прилетела обратно в город \(0\), она обнаружила, что оставила свою фуфу Мику в городе \(n\).

Каждая дорога имеет целый положительный уровень красоты. Обозначим красоту \(i\)-й дороги как \(a_i\).

Медуза пытается найти свою фуфу. Из-за плохого чувства направления она не знает, в какую сторону идти. Каждый день она наугад выбирает дорогу, связанную с городом, в котором находится в данный момент, и идет по ней. Пусть \(s\) — сумма красот дорог, ведущих в текущий город. Для каждой дороги, связанной с текущим городом, Медуза пройдет ее с вероятностью \(\frac x s\), где \(x\) — красота дороги, и достигнет города, расположенного на другом конце дороги.

Медуза стартует из города \(0\), и, только достигнув города \(n\), она может воссоединиться со своей фуфу.

Вы хотите выбрать такую красоту дорог, чтобы ожидаемое количество дней, которые потребуются Медузе для поиска своей фуфу, было минимально возможным. Однако из-за ограниченного финансирования сумма красот всех дорог должна быть меньше или равна \(m\).

Найдите минимальное ожидаемое количество дней, которое потребуется Медузе для возвращения своей фуфу, если красота дорог выбрана оптимально.

Входные данные

Первая и единственная строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq m \leq 3000\)) — количество дорог и максимальную сумму красоты дорог.

Выходные данные

Выведите минимальное ожидаемое количество дней, необходимое Медузе для возвращения своей фуфу, если красота дорог выбрана оптимально.

Ваш ответ будет принят, если абсолютная или относительная погрешность не превышает \(10^{-9}\). Формально пусть ваш ответ будет \(a\), а ответ жюри - \(b\). Ваш ответ считается правильным, если \(\frac{|a-b|}{\max(1,|b|)} \leq 10^{-9}\).

Примечание

В первом примере оптимальным назначением красоты является \(a=[1, 2, 5]\). Ожидаемое количество дней, необходимое Медузе для возвращения своей фуфу, составляет \(5.2\).

E. Медуза и взлом

дп математика *3000

Известно, что быстрая сортировка работает путем случайного выбора «разделяющего» элемента из массива и разбиения остальных элементов на два подмассива в зависимости от того, меньше они или больше разделяющего. Но Медуза считает, что выбор случайного элемента — это пустая трата времени, поэтому она всегда выбирает первый элемент в качестве разделяющего. Время, необходимое для выполнения ее кода, можно вычислить с помощью следующего псевдокода:


function fun(A)
if A.length > 0
пусть L[1 ... L.length] и R[1 ... R.length] будут новыми массивами
L.length = R.length = 0
for i = 2 to A.length
if A[i] < A[1]
L.length = L.length + 1
L[L.length] = A[i]
else
R.length = R.length + 1
R[R.length] = A[i]
return A.length + fun(L) + fun(R)
else
return 0

Теперь вы хотите показать ей, что ее код работает медленно. Когда функция \(\mathrm{fun(A)}\) будет больше или равна \(lim\), ее код получит вердикт \(\text{Time Limit Exceeded}\). Вы хотите узнать, сколько различных перестановок \(P\) массива \([1, 2, \dots, n]\) удовлетворяет \(\mathrm{fun(P)} \geq lim\). Поскольку ответ может быть большим, вам нужно найти ответ только по модулю \(10^9+7\).

Входные данные

Единственная строка входных данных содержит два целых числа \(n\) и \(lim\) (\(1 \leq n \leq 200\), \(1 \leq lim \leq 10^9\)).

Выходные данные

Выведите количество различных перестановок, удовлетворяющих условию по модулю \(10^9+7\).

Примечание

В первом примере \(P = [1, 4, 2, 3]\) удовлетворяет условию, так как: \(\mathrm{fun([1, 4, 2, 3]) = 4 + fun([4, 2, 3]) = 7 + fun([2, 3]) = 9 + fun([3]) = 10}\).

Не забудьте вывести ответ по модулю \(10^9+7\).

F. Медуза и OEIS

дп *3500

Медуза всегда использует OEIS для решения математических задач, но сейчас она нашла задачу, которую нельзя решить с помощью OEIS:

Подсчитайте количество перестановок \(p\) из \([1, 2, \dots, n]\) таких, что для всех \((l, r)\) таких, что \(l \leq r \leq m_l\), подмассив \([p_l, p_{l+1}, \dots, p_r]\) не является перестановкой \([l, l+1, \dots, r]\).

Поскольку ответ может быть большим, необходимо найти ответ по модулю \(10^9+7\).

Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(1 \leq n \leq 200\)) — длину перестановки.

Вторая строка ввода содержит \(n\) целых чисел \(m_1, m_2, \dots, m_n\) (\(0 \leq m_i \leq n\)).

Выходные данные

Выведите количество различных перестановок, удовлетворяющих условиям, по модулю \(10^9+7\).

Примечание

В первом примере условию удовлетворяют \([2, 3, 1]\) и \([3, 1, 2]\).

G. Медуза и шифрование

дп *3500

Медуза любит играть в игру «Inscryption», которая проводится на направленном ациклическом графе с \(n\) вершинами и \(m\) ребрами. Все ребра \(a \to b\) удовлетворяют условию \(a < b\).

Вам необходимо переместиться из вершины \(1\) в вершину \(n\) по направленным ребрам, а затем сразиться с финальным боссом.

При этом Вы будете собирать карточки и предметы.

Каждая карта имеет два атрибута: HP и урон. Если HP карты составляет \(a\), а урон — \(b\), то сила карты равна \(a \times b\).

Каждый предмет имеет только один атрибут: силу.

Попадание в некоторые вершины (не равные \(1\) и \(n\)) может вызывать неторые события. События бывают следующих типов:

  1. Вы получите карту с \(a\) HP и \(b\) уроном.
  2. Если у вас есть хотя бы одна карта, выберите одну из ваших карт и увеличьте ее HP на \(x\).
  3. Если у вас есть хотя бы одна карта, выберите одну из ваших карт и увеличьте ее урон на \(y\).
  4. Вы получите предмет с силой \(w\).

Когда вы доберетесь до вершины \(n\), вы можете выбрать не более одной из ваших карт и умножить ее урон на \(10^9\).

Финальный босс очень силен, поэтому вы хотите максимизировать сумму сил всех ваших карт и предметов. Найдите максимально возможную сумму сил всех ваших карт и предметов, если вы играете оптимально.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 200\), \(n - 1\leq m \leq \min(\frac{n(n-1)}2, 2000)\)) — количество вершин и количество ребер.

В следующих \(n\) строках \(i\)\((1 \leq i \leq n)\) строка описывает специальное событие, которое сработает на вершине \(i\):

  • 0 — никаких особых событий.
  • 1 a b (\(1 \leq a, b \leq 200\)) — вы получите карту с \(a\) HP и \(b\) урона.
  • 2 x (\(1 \leq x \leq 200\)) — если у вас есть хотя бы одна карта, выберите одну из своих карт и увеличьте её HP на \(x\).
  • 3 y (\(1 \leq y \leq 200\)) — если у вас есть хотя бы одна карта, выберите одну из своих карт и увеличьте ее урон на \(y\).
  • 4 w (\(1 \leq w \leq 10^6\)) — вы получите реквизит с силой \(w\).

В следующих \(m\) строках каждая строка содержит два целых числа \(u\) и \(v\) (\(1 \leq u < v \leq n\)), представляющих собой направленное ребро из вершины \(u\) в вершину \(v\).

Гарантируется, что каждое ребро \((u,v)\) встречается не более одного раза.

Гарантируется, что в вершине \(1\) и вершине \(n\) нет особых событий.

Гарантируется, что для всех \(i\) существует путь из вершины \(1\) в вершину \(n\), проходящий через вершину \(i\).

Выходные данные

Выведите одно целое число — максимальную сумму мощностей всех ваших карт и предметов.

Примечание

В первом примере можно играть в игру в следующем порядке:

  • переместиться из вершины \(1\) в вершину \(2\), получить карту с HP \(2\) и уроном \(10\).
  • переместиться из вершины \(2\) в вершину \(4\), выбрать карту, полученную из вершины \(2\), и увеличить её HP на \(8\).
  • переместиться из вершины \(4\) в вершину \(6\), выбрать карту, полученную из вершины \(2\), и умножить её урон на \(10^9\).

В итоге мы получим карту с \((2+8)=10\) HP и \(10 \times 10^9=10^{10}\) урона, ее сила равна \(10 \times 10^{10}=10^{11}\). Поскольку у нас есть только карта, полученная из вершины \(2\), то сумма мощностей всех карт и предметов равна \(10^{11}\).

D. Медуза и Mex

дп *1600

Вам дан массив из \(n\) целых неотрицательных чисел \(a_1, a_2, \dots, a_n\).

Пусть \(m\) — переменная, изначально равная \(0\). Медуза выполняет следующую операцию \(n\) раз:

  • выбрать индекс \(i\) (\(1 \leq i \leq |a|\)) и удалить \(a_i\) из \(a\).
  • прибавить \(\operatorname{MEX}(a)^{\dagger}\) к \(m\).

Медуза хочет узнать минимально возможное конечное значение \(m\) при оптимальном выполнении всех операций.

\(^{\dagger}\) MEX (minimum excluded) массива — это наименьшее целое неотрицательное число, которое не принадлежит массиву.

Например:

  • MEX массива \([2,2,1]\) равен \(0\), так как \(0\) не принадлежит массиву.
  • MEX массива \([3,1,0,1]\) равен \(2\), так как \(0\) и \(1\) принадлежат массиву, а \(2\) - нет.
  • MEX массива \([0,3,1,2]\) равен \(4\), так как \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) - нет.
Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указывается количество наборов входных данных \(t\) (\(1 \leq t \leq 5000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 5000\)) — размер массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \leq a_i \leq 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное значение \(m\) при оптимальном выполнении операций.

Примечание

В первом наборе исходных данных мы удаляем элементы из \(a\) в следующем порядке: \([5,2,\color{red}{1},0,3,0,4,0] \to [5,2,0,3,\color{red}{0},4,0] \to [5,2,\color{red}{0},3,4,0] \to [5,2,3,4,\color{red}{0}] \to [5,2,\color{red}{3},4] \to [\color{red}{5},2,4] \to [\color{red}{2},4] \to [\color{red}{4}] \to [~]\). Значение \(m\) будет равно \(1+1+1+0+0+0+0+0=3\).

E. Шаро-стек

Деревья дп Конструктив Структуры данных *3300

С таким названием задача точно не может быть задачей на графы...

У Чанеки есть граф с \(n\) вершинами и \(n-1\) ребрами. Некоторые ребра являются направленными, а некоторые — неориентированными. Ребро \(i\) соединяет вершину \(u_i\) с вершиной \(v_i\). Если \(t_i=0\), то ребро \(i\) является ненаправленным. Если \(t_i=1\), то ребро \(i\) направлено в сторону от \(u_i\) к \(v_i\). Известно, что если сделать все ребра ненаправленными, то граф превратится в дерево\(^\dagger\).

Чанека хочет направить все ненаправленные ребра и раскрасить каждое ребро (разные ребра могут иметь один и тот же цвет).

После этого, предположим, что Чанека начинает прогулку из произвольной вершины \(x\) в произвольную вершину \(y\) (возможно, что \(x=y\)), проходя через одно или несколько ребер. Ей разрешается проходить через каждое ребро, следуя направлению ребра или в противоположную от направления сторону. Также ей разрешается посещать вершину или ребро более одного раза. Во время прогулки Чанека хранит стек шаров, который изначально пуст до начала прогулки. Каждый раз, когда Чанека проходит через ребро, она делает следующее:

  • Если Чанека проходит его в правильном направлении, она кладет на вершину стека новый шар, цвет которого совпадает с цветом ребра.
  • Если Чанека проходит по нему в обратном направлении, то она убирает шар, находящийся на вершине стека.

Прогулка называется стековой тогда и только тогда, когда стек не пуст перед каждым проходом Чанеки по ребру в обратном направлении.

Прогулка называется шаро-стековой тогда и только тогда, когда она стековая и каждый раз, когда Чанека проходит через ребро в обратном направлении, цвет шарика, вынутого из стека, совпадает с цветом пройденного ребра.

Можно ли направить все неориентированные ребра и раскрасить все рёбра так, чтобы все стековые прогулки были также шаро-стековыми? Если это возможно, то найдите пример, в котором используется максимальное количество различных цветов среди всех допустимых способов направления и раскраски. Если таких решений несколько, выведите любое из них.

\(^\dagger\) Дерево — это связный граф, не имеющий циклов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2\leq n\leq10^5\)) — количество вершин в графе.

В \(i\)-й из следующих \(n-1\) строк содержится три целых числа \(u_i\), \(v_i\) и \(t_i\) (\(1 \leq u_i,v_i \leq n\); \(0\leq t_i\leq1\)) — ненаправленное ребро, соединяющее вершины \(u_i\) и \(v_i\), если \(t_i=0\), или направленное ребро из вершины \(u_i\) в вершину \(v_i\), если \(t_i=1\). Если сделать все ребра ненаправленными, то граф станет деревом.

Выходные данные

Выведите одно число \(-1\), если искомой конструкции не существует.

В противном случае вывод состоит из \(n\) строк, описывающих вашу конструкцию. Первая строка содержит целое число \(z\), равное количеству используемых цветов. В \(i\)-й из следующих \(n-1\) строк содержится три целых числа \(p\), \(q\) и \(c\) (\(1\leq p,q\leq n\); \(1\leq c\leq z\)) — ребро, соединяющее вершины \(p\) и \(q\) в графе, направлено от вершины \(p\) к вершине \(q\) и окрашено в цвет \(c\). Если таких решений несколько, выведите любое из них.

Обратите внимание, что поскольку в вашей конструкции должно быть \(z\) различных цветов, это означает, что каждый цвет от \(1\) до \(z\) должен встречаться в графе хотя бы один раз.

Примечание

Ниже приведен заданный граф.

Чанека может направить все неориентированные ребра и раскрасить каждое ребро следующим образом:

В качестве примера рассмотрим путь \(3→1→5→2→5→4→5\). Покажем, что этот путь является шаро-стековым.

  1. Чанека начинается в вершине \(3\). Стеком является \([]\).
  2. Чанека переходит в вершину \(1\). Она кладет шар цвета \(3\). В стеке \([3]\).
  3. Чанека перемещается в вершину \(5\). Она кладет шар цвета \(2\). В стеке \([3,2]\).
  4. Чанека перемещается в вершину \(2\). Она убирает шар цвета \(2\) (того же цвета, что и ребро). В стеке оказывается \([3]\).
  5. Чанека перемещается в вершину \(5\). Она кладет шар цвета \(2\). В стеке \([3,2]\).
  6. Чанека перемещается в вершину \(4\). Она кладет шар цвета \(1\). В стеке \([3,2,1]\).
  7. Чанека перемещается в вершину \(5\). Она убирает шар цвета \(1\) (того же цвета, что и ребро). В стеке оказывается \([3,2]\).

Поскольку каждый раз, когда Чанека снимает шар со стека, он имеет тот же цвет, что и пройденное ребро, то вышеописанная прогулка является шаро-стековой. Можно показать, что если мы направим и раскрасим ребра так, как показано выше, то любая возможная стековая прогулка будет также шаро-стековой.

C. Чередуй!

дп жадные алгоритмы Комбинаторика *1300

Дана двоичная строка \(s\). Двоичная строка — это строка, состоящая из символов 0 и/или 1.

Вы можете производить следующую операцию со строкой \(s\) любое количество раз (даже ноль):

  • выбрать целое число \(i\) такое, что \(1 \le i \le |s|\), затем удалить символ \(s_i\).

Вам нужно сделать строку \(s\) чередующейся, т. е. после выполнения операций каждые два соседних символа в \(s\) должны быть разными.

Ваша задача — вычислить два значения:

  • минимальное количество операций, необходимых для того, чтобы сделать строку \(s\) чередующейся;
  • количество различных кратчайших последовательностей операций, которые делают строку \(s\) чередующейся. Две последовательности операций считаются различными, если хотя бы в одной операции выбранное целое число \(i\) отличается в этих двух последовательностях.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)). Строка \(s\) состоит только из символов 0 и/или 1.

Дополнительное ограничение на входные данные:

  • суммарная длина строк \(s\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите два целых числа: минимальное количество операций, которые вам нужно выполнить, и количество различных кратчайших последовательностей операций. Поскольку второе число может быть большим, выведите его остаток по модулю \(998244353\).

Примечание

В первом наборе входных данных примера кратчайшими последовательностями операций являются:

  • \([2]\) (удалить \(2\)-й символ);
  • \([3]\) (удалить \(3\)-й символ).

Во втором наборе входных данных примера кратчайшими последовательностями операций являются:

  • \([2, 1]\) (удалить \(2\)-й символ, затем удалить \(1\)-й символ);
  • \([2, 2]\);
  • \([1, 1]\);
  • \([1, 2]\);
  • \([3, 1]\);
  • \([3, 2]\).

В третьем наборе входных данных примера единственной кратчайшей последовательностью операций является \([]\) (пустая последовательность).

D. Сумма функций XOR

битмаски дп Комбинаторика математика разделяй и властвуй *1700

Дан массив \(a\) длины \(n\), состоящий из неотрицательных целых чисел.

Необходимо вычислить значение \(\sum_{l=1}^{n} \sum_{r=l}^{n} f(l, r) \cdot (r - l + 1)\), где \(f(l, r)\) равно \(a_l \oplus a_{l+1} \oplus \dots \oplus a_{r-1} \oplus a_r\) (символ \(\oplus\) обозначает побитовое исключающее ИЛИ).

Так как ответ может быть очень большим, выведите его по модулю \(998244353\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длину массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9)\).

Выходные данные

Выведите одно целое число — значение \(\sum_{l=1}^{n} \sum_{r=l}^{n} f(l, r) \cdot (r - l + 1)\), взятое по модулю \(998244353\).

Примечание

В первом примере ответ равен \(f(1, 1) + 2 \cdot f(1, 2) + 3 \cdot f(1, 3) + f(2, 2) + 2 \cdot f(2, 3) + f(3, 3) = \) \(= 1 + 2 \cdot 2 + 3 \cdot 0 + 3 + 2 \cdot 1 + 2 = 12\).

E. Блоковая последовательность

дп *1500

Дана последовательность целых чисел \(a\) длины \(n\).

Назовём последовательность красивой, если она имеет вид ряда блоков, каждый из которых начинается со своей длины, то есть сначала идёт длина блока, а потом его элементы. Например, последовательности [\(\color{red}{3},\ \color{red}{3},\ \color{red}{4},\ \color{red}{5},\ \color{green}{2},\ \color{green}{6},\ \color{green}{1}\)] и [\(\color{red}{1},\ \color{red}{8},\ \color{green}{4},\ \color{green}{5},\ \color{green}{2},\ \color{green}{6},\ \color{green}{1}\)] являются красивыми (разные блоки покрашены разными цветами), а [\(1\)], [\(1,\ 4,\ 3\)], [\(3,\ 2,\ 1\)] — нет.

За одну операцию вы можете удалить из последовательности любой элемент. Какое минимальное количество операций нужно сделать, чтобы данная последовательность стала красивой.

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину последовательности \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы последовательности \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\)

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество удалений, которые нужно совершить чтобы последовательность \(a\) стала красивой.

Примечание

В первом наборе входных данных примера данная последовательность уже является красивой, как и показано в условии.

Во втором наборе входных данных примера можно сделать последовательность красивой только удалив из неё все элементы.

В пятом наборе входных данных примера можно сделать последовательность красивой, удалив первый и последний элемент. Тогда последовательность станет [\(2,\ 3,\ 4\)].

F. Минимальное максимальное расстояние

графы Деревья дп кратчайшие пути поиск в глубину и подобное *1700

У вас есть дерево из \(n\) вершин, некоторые вершины которого помечены. Дерево — это связный неориентированный граф без циклов.

Обозначим за \(f_i\) максимальное расстояние от вершины с номером \(i\) до какой-то из помеченных вершин.

Ваша задача — найти минимальное значение \(f_i\) среди всех вершин.

Например, в дереве из примера раскрашены вершины с номерами \(2\), \(6\) и \(7\). Тогда массив \(f(i) = [2, 3, 2, 4, 4, 3, 3]\). \(f_i\) минимальна для вершин с номерами \(1\) и \(3\).

Входные данные

В первой строке записано число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — количество вершин в дереве и количество помеченных вершин соответственно.

Во второй строке каждого набора входных данных записаны \(k\) целых чисел \(a_i\) (\(1 \le a_i \le n, a_{i-1} < a_i\)) — номера помеченных вершин.

Следующие \(n - 1\) строк содержат по два челых числа \(u_i\) и \(v_i\) — номера вершин, соединяемых \(i\)-м ребром.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное значение \(f_i\) по всем вершинам.

D. XOR на дереве

битмаски Деревья дп жадные алгоритмы поиск в глубину и подобное *1900

Дано дерево с \(n\) вершинами, пронумерованными от \(1\) до \(n\). В вершине \(i\) записано целое число \(a_{i}\) для каждого \(i = 1, 2, \ldots, n\). Ваша цель — сделать все \(a_{i}\) одинаковыми, выполнив несколько заклинаний (возможно, ни одного).

Предположим, что корнем дерева выбрана некоторая вершина. Чтобы выполнить заклинание, можно выбрать произвольную вершину \(v\) и произвольное неотрицательное целое число \(c\). Затем для каждой вершины \(i\) в поддереве\(^{\dagger}\) \(v\) нужно заменить \(a_{i}\) на \(a_{i} \oplus c\). Стоимость такого заклинания равна \(s \cdot c\), где \(s\) — число вершин в поддереве. Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Пусть \(m_r\) — минимально возможная суммарная стоимость, за которую можно сделать все \(a_i\) равными, в случае если вершина \(r\) выбрана корнем дерева. Найдите \(m_{1}, m_{2}, \ldots, m_{n}\).

\(^{\dagger}\) Пусть вершина \(r\) выбрана корнем дерева. Тогда вершина \(i\) принадлежит поддереву \(v\), если простой путь от \(i\) до \(r\) содержит \(v\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^{5}\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{20}\)).

Каждая из следующих \(n-1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)), означающих наличие ребра между вершинами \(u\) и \(v\).

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите \(m_1, m_2, \ldots, m_n\) на отдельной строке.

Примечание

В первом наборе входных данных, чтобы найти \(m_1\), подвесим дерево за вершину \(1\).

  1. На первом заклинании выберем \(v=2\) и \(c=1\). После выполнения этого заклинания \(a\) станет равным \([3, 3, 0, 1]\). Стоимость этого заклинания равна \(3\).
  2. На втором заклинании выберем \(v=3\) и \(c=3\). После выполнения этого заклинания \(a\) станет равным \([3, 3, 3, 1]\). Стоимость этого заклинания равна \(3\).
  3. На третьем заклинании выберем \(v=4\) и \(c=2\). После выполнения этого заклинания \(a\) станет равным \([3, 3, 3, 3]\). Стоимость этого заклинания равна \(2\).

Теперь все значения в массиве \(a\) одинаковы, а суммарная стоимость равна \(3 + 3 + 2 = 8\).

Значения \(m_2\), \(m_3\), \(m_4\) находятся аналогично.

Во втором наборе входных данных цель уже достигнута, поскольку в дереве всего одна вершина.

C. Малинки

дп математика *1000

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) и число \(k\) (\(2 \leq k \leq 5\)). За одну операцию вы можете сделать следующее:

  • Выбрать индекс \(1 \leq i \leq n\),
  • Сделать \(a_i = a_i + 1\).

Найдите наименьшее количество операций, которые нужно сделать, чтобы произведение всех чисел массива \(a_1 \cdot a_2 \cdot \ldots \cdot a_n\) делилось на \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \leq n \leq 10^5\), \(2 \leq k \leq 5\)) — размер массива \(a\) и число \(k\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите наименьшее количество операций, которое нужно сделать, чтобы произведение всех чисел массива делилось на \(k\).

Примечание

В первом наборе входных данных нужно два раза выбрать индекс \(i = 2\). После этого массив будет равен \(a = [7, 5]\). Произведение всех чисел массива равно \(35\).

В четвертом наборе входных данных произведение чисел массива равно \(120\), что уже делится на \(5\), поэтому не нужно применять операции.

В восьмом наборе входных данных можно сделать две операции, выбрав \(i = 2\) и \(i = 3\) в любом порядке. После этого массив будет равен \(a = [1, 6, 10]\). Произведение чисел массива равно \(60\).

C. Средняя конструкция

дп жадные алгоритмы Перебор сортировки Структуры данных *1700

Массив \(a_1, a_2, \ldots, a_m\) изначально заполнен нулями. Вам даны \(n\) попарно различных отрезков \(1 \le l_i \le r_i \le m\). Вы должны выбрать произвольное подмножество этих отрезков (в частности, можно выбрать пустое множество). После этого происходит следующее:

  • Для каждого \(i = 1, 2, \ldots, n\), если отрезок \((l_i, r_i)\) выбран в подмножество, то для каждого индекса \(l_i \le j \le r_i\) вы увеличиваете \(a_j\) на \(1\) (то есть \(a_j\) заменяете на \(a_j + 1\)). Если отрезок \((l_i, r_i)\) не выбран, массив не изменяется.
  • После этого (после обработки всех значений \(i = 1, 2, \ldots, n\)) вы считаете \(\max(a)\) как максимальное значение среди всех элементов \(a\). Аналогично, \(\min(a)\) считается как минимальное значение.
  • Наконец, стоимость выбранного подмножества отрезков объявляется равной \(\max(a) - \min(a)\).

Найдите наибольшую стоимость по всем подмножествам данного множества отрезков.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^5\), \(1 \le m \le 10^9\)) — количество отрезков и длина массива.

Следующие \(n\) строк каждого набора входных данных описывают отрезки: \(i\)-я из них содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le m\)). Гарантируется, что все отрезки попарно различны.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите наибольшую стоимость среди всех подмножеств данного множества отрезков.

Примечание

В первом наборе входных данных доступен всего один отрезок. Если его не выбирать, то массив будет равен \(a = [0, 0, 0]\), стоимость такого (пустого) подмножества отрезков равна \(0\). Если же выбрать единственный доступный отрезок, то массив станет равен \(a = [0, 1, 0]\), и стоимость будет равна \(1 - 0 = 1\).

Во втором наборе входных данных можно выбрать все отрезки: массив в таком случае будет равен \(a = [0, 1, 2, 3, 2, 1, 0, 0]\). Стоимость будет равна \(3 - 0 = 3\).

D. Считалочка

дп математика теория чисел *2100

Дан массив целых чисел \(a_1, a_2, \ldots, a_n\).

Пару целых чисел \((i, j)\), таких что \(1 \le i < j \le n\), назовём хорошей, если не существует числа \(k\) (\(1 \le k \le n\)), такого что одновременно \(a_i\) делится на \(a_k\) и \(a_j\) делится на \(a_k\).

Найдите количество хороших пар.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите количество хороших пар.

Примечание

В первом наборе входных данных нет хороших пар.

Во втором наборе входных данных хорошими являются пары \((1, 2)\), \((2, 3)\) и \((2, 4)\).

E. I Wanna be the Team Leader

битмаски дп жадные алгоритмы Конструктив математика сортировки *2400

Монокарп является руководителем команды в крупной IT-компании.

Его команде программистов поручены \(m\) проектов, пронумерованных от \(1\) до \(m\). У \(i\)-го проекта уровень сложности \(b_i\).

В команде \(n\) программистов, пронумерованных от \(1\) до \(n\). У \(j\)-го программиста уровень стрессоустойчивости \(a_j\).

Монокарп хочет назначить программистов на проекты таким образом, чтобы:

  • каждый программист был назначен на не более чем один проект;
  • на каждый проект был назначен хотя бы один программист;
  • пусть на \(i\)-й проект назначены \(k\) программистов; тогда все назначенные программисты должны иметь уровень стрессоустойчивости, больший или равный \(\frac{b_i}{k}\).

Помогите Монокарпу назначить программистов на проекты. Если есть несколько ответов, выведите любой из них.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le m \le 20\)) — количество программистов и количество проектов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — уровень стрессоустойчивости каждого программиста.

В третьей строке записаны \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_i \le 10^9\)) — уровень сложности каждого проекта.

Выходные данные

Если нельзя назначить программистов, выведите «NO».

В противном случае, в первой строке выведите «YES». В \(i\)-й из следующих \(m\) строк выведите список программистов, назначенных на \(i\)-й проект: сначала количество программистов, затем их индексы в произвольном порядке.

Если есть несколько ответов, выведите любой из них.

C1. План осушения от Дореми (простая версия)

дп жадные алгоритмы Перебор сортировки Структуры данных *2000

Единственное различие между двумя версиями этой задачи — ограничение на \(k\), ограничение по времени и ограничение по памяти. Делать взломы можно только в том случае, если решены обе версии задачи.

Дореми живет в дождливой стране, состоящей из \(n\) городов, пронумерованных от \(1\) до \(n\).

По метеорологической трансляции было предсказано распределение дождей в ближайшие \(m\) дней. В \(i\)-й день дождь пойдет в городах, находящихся на отрезке \([l_i, r_i]\). Город называется сухим, если в ближайшие \(m\) дней в нем не будет дождя.

Оказалось, что Дореми обладает особой способностью. Она может выбрать \(k\) (в простой версии: \(k = 2\)) дней, и в течение этих дней дождя не будет. Дореми хочет вычислить максимальное количество сухих городов после использования специальной силы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1\le n\le 2\cdot 10^5\), \(2 \le m \le 2\cdot 10^5\), \(k = 2\)) — количество городов, количество дней и количество дней дождя, которые может предотвратить Дореми.

Далее следуют \(m\) строк. В \(i\)-й строке содержатся два целых числа \(l_i\), \(r_i\) (\(1\le l_i\le r_i\le n\)) — отрезок городов, в которых будет дождь в день \(i\).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество сухих городов.

Примечание

В первом наборе входных данных, если Дореми использует свою силу в дни

  • \(1,2\), то город \(2\) будет сухим;
  • \(2,3\), то ни один город не будет сухим;
  • \(1,3\), то ни один город не будет сухим;

Таким образом, существует не более \(1\) сухого города.

Во втором наборе входных данных, если Дореми предотвращает

  • дождь в дни \(1,2\), то города \(1,2\) будут сухими;
  • дождь в дни \(2,3\), то города \(4,5\) будут сухими;
  • дождь в дни \(1,3\), то города \(1,5\) будут сухими.

Таким образом, существует не более \(2\) сухих городов.

В третьем наборе входных данных оптимальным является предотвращение дождя в дни \(2,5\).

В четвертом наборе входных данных всегда есть \(4\) дня дождя, которые промочат все города, вне зависимости от использования силы.

C2. План осушения от Дореми (сложная версия)

дп Структуры данных *2600

Единственное различие между двумя версиями этой задачи — ограничение на \(k\), ограничение по времени и ограничение по памяти. Делать взломы можно только в том случае, если решены обе версии задачи.

Дореми живет в дождливой стране, состоящей из \(n\) городов, пронумерованных от \(1\) до \(n\).

По метеорологической трансляции было предсказано распределение дождей в ближайшие \(m\) дней. В \(i\)-й день дождь пойдет в городах, находящихся на отрезке \([l_i, r_i]\). Город называется сухим, если в ближайшие \(m\) дней в нем не будет дождя.

Оказалось, что Дореми обладает особой способностью. Она может выбрать \(k\) дней, и в течение этих дней дождя не будет. Дореми хочет вычислить максимальное количество сухих городов после использования специальной силы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1\le n\le 2\cdot 10^5\), \(2 \le m \le 2\cdot 10^5\), \(2 \le k \le \min(10, m)\)) — количество городов, количество дней и количество дней дождя, которые может предотвратить Дореми.

Далее следуют \(m\) строк. В \(i\)-й строке содержатся два целых числа \(l_i\), \(r_i\) (\(1\le l_i\le r_i\le n\)) — отрезок городов, в которых будет дождь в день \(i\).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество сухих городов.

Примечание

В первом наборе входных данных, если Дореми использует свою силу в дни

  • \(1,2\), то город \(2\) будет сухим;
  • \(2,3\), то ни один город не будет сухим;
  • \(1,3\), то ни один город не будет сухим;

Таким образом, существует не более \(1\) сухого города.

Во втором наборе входных данных, если Дореми предотвращает

  • дождь в дни \(1,2\), то города \(1,2\) будут сухими;
  • дождь в дни \(2,3\), то города \(4,5\) будут сухими;
  • дождь в дни \(1,3\), то города \(1,5\) будут сухими.

Таким образом, существует не более \(2\) сухих городов.

В третьем наборе входных данных оптимальным является предотвращение дождя в дни \(1,2,4,5\).

В четвертом наборе входных данных всегда есть день дождя, который промочит все города, вне зависимости от использования силы.

F. Усреднённое дерево Дореми

Деревья дп жадные алгоритмы Структуры данных *3500

У Дореми есть корневое дерево размера \(n\), корнем которого является вершина \(r\). Изначально на вершине \(i\) записано число \(w_i\). Дореми может использовать свою силу, чтобы выполнить данную операцию не более \(k\) раз:

  1. Выберем вершину \(x\) (\(1 \leq x \leq n\)).
  2. Пусть \(s = \frac{1}{|T|}\sum_{i \in T} w_i\), где \(T\) — множество всех вершин в поддереве \(x\).
  3. Для всех \(i \in T\) присваиваем \(w_i := s\).

Дореми хочет узнать, каким будет лексикографически минимальный\(^\dagger\) массив \(w\) после выполнения всех операций. Можете ли вы ей помочь?

Если ответов несколько, вы можете вывести любой из них.

\(^\dagger\) Для массивов \(a\) и \(b\) длины \(n\), \(a\) лексикографически меньше \(b\) тогда и только тогда, когда существует индекс \(i\) (\(1 \leq i \le n\)) такой, что \(a_i < b_i\) и для всех индексов \(j\) таких, что \(j<i\), выполняется условие \(a_j=b_j\).

Входные данные

Входные данные состоят из нескольких наборов исходных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит три целых числа \(n\), \(r\), \(k\) (\(2 \le n \le 5000\), \(1 \le r \le n\), \(0 \le k \le \min(500,n)\)).

Вторая строка содержит \(n\) целых чисел \(w_1,w_2,\ldots,w_n\) (\(1 \le w_i \le 10^6\)).

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n\)), представляющих собой ребро между \(u_i\) и \(v_i\).

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(50\,000\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одно целое число \(cnt\) (\(0 \le cnt \le k\)) — количество выполняемых операций.

Затем во второй строке выведите \(cnt\) целых чисел \(p_1,p_2,\ldots,p_{cnt}\) — \(x\) выбирается равным \(p_i\) для \(i\)-й операции.

Если ответов несколько, то можно вывести любой из них.

Примечание

В первом наборе входных данных:

Изначально \(w=[1,9,2,6,1,8]\). Можно выбрать некоторую вершину \(x\) для выполнения не более одной операции.

  • Если \(x=1\), то \(w=[\frac{9}{2},\frac{9}{2},\frac{9}{2},\frac{9}{2},\frac{9}{2},\frac{9}{2}]\).
  • Если \(x=2\), то \(w=[1,\frac{15}{2},2,\frac{15}{2},1,8]\).
  • Если \(x=3\), то \(w=[1,9,\frac{11}{3},6,\frac{11}{3},\frac{11}{3}]\).
  • Если \(x \in \{4, 5, 6\}\), то \(w=[1,9,2,6,1,8]\).
  • Если вы не выполняете никаких операций, то \(w=[1,9,2,6,1,8]\).

\(w\) является лексикографически наименьшим, если \(x=2\).

A. Разрежь ленточку

дп Перебор *1300

У Поликарпа есть ленточка длины n. Он хочет разрезать ее так, чтобы выполнялись два условия:

  • После разрезания, каждый кусочек ленточки должен быть длины a, b или c.
  • Количество кусочков ленточки после разрезания должно быть как можно больше.

Помогите Поликарпу, найдите количество кусочков ленточки после требуемого разрезания.

Входные данные

В первой строке записано через пробел четыре целых числа n, a, b и c (1 ≤ n, a, b, c ≤ 4000) — длина исходной ленточки и разрешенные длины кусочков ленточки после разрезания, соответственно. Числа a, b и c могут совпадать.

Выходные данные

Выведите одно число — максимально возможное количество кусочков ленточки. Гарантируется, что существует хотя бы одно корректное разрезание ленточки.

Примечание

В первом тестовом примере нужно разрезать ленточку на два кусочка: один из них длины 2, второй длины 3.

Во втором примере нужно разрезать ленточку на два кусочка: один из них длины 5, второй длины 2.

E. Симфония кактусов

графы дп Комбинаторика поиск в глубину и подобное *3500

Вам дан связный неориентированный граф, в котором любые два различных простых цикла не имеют общих вершин. Так как граф может быть очень большим, он дан вам в сжатом виде: для каждого ребра вам также дано некое число \(d\), обозначающее, что на этом ребре дополнительно находится \(d\) вершин.

Требуется назначить каждой вершине и каждому ребру графа вес — целое число от \(1\) до \(3\).

Ребро графа назовём хорошим, если побитовый XOR весов смежных ему вершин не равен \(0\) и не равен весу этого ребра.

Аналогично вершину графа назовём хорошей, если побитовый XOR весов смежных ей рёбер не равен \(0\) и не равен весу этой вершины.

Вам нужно определить, сколько существует способов назначить веса вершинам и рёбрам графа, чтобы все вершины и все рёбра были хорошими. Так как ответ может быть достаточно большим, нужно вычислить остаток от деления ответа на \(998\,244\,353\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) — количество вершин и количество рёбер в графе (\(2 \le n \le 5 \cdot 10^5\), \(n - 1 \le m \le 10^6\)).

Каждая из следующих \(m\) строк содержит три целых числа \(a_i, b_i\) и \(d_i\) (\(1 \le a_i, b_i \le n\), \(a_i \ne b_i\), \(0 \le d_i \le 10^9\)), означающих, что в графе существует ребро, соединяющее вершины \(a_i\) и \(b_i\). Также, на этом ребре, дополнительно находятся \(d_i\) вершин. Гарантируется, что заданный граф является связным, в нем нет кратных рёбер, петель, а также любые два различных простых цикла графа не имеют общих вершин.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю \(998\,244\,353\).

Примечание

В первом тесте граф имеет вид простого цикла из \(3\) вершин. Можно показать, что есть ровно \(12\) способов назначить веса вершинам и рёбрам, чтобы все они были хорошими.

Во втором тесте граф имеет вид двух простых циклов из \(3\) вершин, соединённых ребром. Можно показать, что для такого графа нет ни одного способа расставить веса, чтобы все вершины и рёбра были хорошими.

C. Порванный счастливый билет

дп математика Перебор реализация хэши *1400

Билет — это непустая строка из цифр от \(1\) до \(9\).

Счастливый билет — это такой билет, у которого:

  • четная длина;
  • сумма цифр в первой половине равна сумме цифр во второй половине.

У вас есть \(n\) частей билетов \(s_1, s_2, \dots, s_n\). Сколько пар \((i, j)\) (для \(1 \le i, j \le n\)) существует таких, что \(s_i + s_j\) является счастливым билетом? Обратите внимание, что возможно \(i=j\).

Здесь оператор + обозначает конкатенацию двух строк. Например, если \(s_i\) — это 13, а \(s_j\) — это 37, то \(s_i + s_j\) будет 1337.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество частей билетов.

Вторая строка содержит \(n\) непустых строк \(s_1, s_2, \dots, s_n\), каждая длиной не более \(5\) и состоящая только из цифр от \(1\) до \(9\).

Выходные данные

Выведите одно целое число — количество пар \((i, j)\) (для \(1 \le i, j \le n\)), таких что \(s_i + s_j\) является счастливым билетом.

E. Бесконечная карточная игра

Бинарный поиск графы дп жадные алгоритмы игры Перебор поиск в глубину и подобное снм сортировки Структуры данных *2300

Монокарп и Бикарп играют в карточную игру. Каждая карта имеет два параметра: значение атаки и значение защиты. Карта \(s\) бьет карту \(t\), если значение атаки карты \(s\) строго больше значения защиты карты \(t\).

У Монокарпа есть \(n\) карт, \(i\)-я из которых имеет значение атаки \(\mathit{ax}_i\) и значение защиты \(\mathit{ay}_i\). У Бикарпа есть \(m\) карт, \(j\)-я из которых имеет значение атаки \(\mathit{bx}_j\) и значение защиты \(\mathit{by}_j\).

На первом ходе Монокарп выбирает одну из своих карт и кладет ее на стол. Бикарп должен побить эту карту своей картой. Затем Монокарп должен побить карту Бикарпа. Затем ход переходит к Бикарпу, и так далее.

После того, как карта побита, она возвращается в руку игрока, который ее сыграл. Это подразумевает, что у игрока, который сейчас ходит, всегда на руках те же карты, что и в начале игры. Игра заканчивается, когда у текущего игрока нет карт, которые побеждают карту, которую только что сыграл его оппонент, и текущий игрок проигрывает.

Если игра длится \(100^{500}\) ходов, объявляется ничья.

И Монокарп, и Бикарп играют оптимально. То есть, если у игрока есть выигрышная стратегия независимо от ходов его оппонента, он играет на победу. В противном случае, если у него есть стратегия для ничьи, он играет на ничью.

Вам нужно вычислить три значения:

  • количество начальных ходов Монокарпа, которые приводят к победе Монокарпа;
  • количество начальных ходов Монокарпа, которые приводят к ничьей;
  • количество начальных ходов Монокарпа, которые приводят к победе Бикарпа.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество карт у Монокарпа.

Вторая строка содержит \(n\) целых чисел \(\mathit{ax}_1, \mathit{ax}_2, \dots, \mathit{ax}_n\) (\(1 \le \mathit{ax}_i \le 10^6\)) — значения атаки карт Монокарпа.

Третья строка содержит \(n\) целых чисел \(\mathit{ay}_1, \mathit{ay}_2, \dots, \mathit{ay}_n\) (\(1 \le \mathit{ay}_i \le 10^6\)) — значения защиты карт Монокарпа.

Четвертая строка содержит одно целое число \(m\) (\(1 \le m \le 3 \cdot 10^5\)) — количество карт у Бикарпа.

Пятая строка содержит \(m\) целых чисел \(\mathit{bx}_1, \mathit{bx}_2, \dots, \mathit{bx}_m\) (\(1 \le \mathit{bx}_j \le 10^6\)) — значения атаки карт Бикарпа.

Шестая строка содержит \(m\) целых чисел \(\mathit{by}_1, \mathit{by}_2, \dots, \mathit{by}_m\) (\(1 \le \mathit{by}_j \le 10^6\)) — значения защиты карт Бикарпа.

Дополнительные ограничения на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), сумма \(m\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите три целых числа:

  • количество начальных ходов Монокарпа, которые приводят к победе Монокарпа;
  • количество начальных ходов Монокарпа, которые приводят к ничьей;
  • количество начальных ходов Монокарпа, которые приводят к победе Бикарпа.

F. Красивые массивы

дп Комбинаторика математика матрицы *2600

Назовем массив \(a\) из \(n\) неотрицательных целых чиселкрасивым, если выполняются следующие условия:

  • массив содержит хотя бы одно из чисел \(x\), \(x + 1\), ..., \(x+k-1\);
  • последовательные элементы массива отличаются не более чем на \(k\) (т.е. \(|a_i-a_{i-1}| \le k\) для каждого \(i \in [2, n]\)).

Даны значения \(n\), \(x\) и \(k\). Ваша задача — посчитать количество красивых массивов длины \(n\). Поскольку ответ может быть большим, выведите его по модулю \(10^9+7\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных.

Единственная строка каждого набора содержит три целых числа \(n\), \(x\) и \(k\) (\(1 \le n, k \le 10^9\); \(0 \le x \le 40\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество красивых массивов длины \(n\), взятое по модулю \(10^9+7\).

Примечание

В первом наборе входных данных примера следующие массивы являются красивыми:

  • \([0, 0, 0]\);
  • \([0, 0, 1]\);
  • \([0, 1, 0]\);
  • \([0, 1, 1]\);
  • \([0, 1, 2]\);
  • \([1, 0, 0]\);
  • \([1, 0, 1]\);
  • \([1, 1, 0]\);
  • \([2, 1, 0]\).

G. Два символа, два цвета

Бинарный поиск дп жадные алгоритмы Потоки Структуры данных *3100

Дана строка, состоящая из символов 0 и/или 1. Вам нужно покрасить каждый символ этой строки в один из двух цветов: красный или синий.

Если вы покрасите \(i\)-й символ в красный цвет, вы получите \(r_i\) монет. Если вы покрасите его в синий цвет, вы получите \(b_i\) монет.

После покраски строки из нее удаляются все символы синего цвета. Затем в полученной строке подсчитывается количество инверсий (т. е. количество пар символов, в которых левый символ в паре — 1, а правый символ — 0). За каждую инверсию вы должны заплатить \(1\) монету.

Какое максимальное количество монет вы можете заработать?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из четырех строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 4 \cdot 10^5\)) — длину строки;
  • вторая строка содержит \(s\) — последовательность из \(n\) символов, где каждый символ либо 0, либо 1;
  • третья строка содержит \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(1 \le r_i \le 10^{12}\));
  • четвертая строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^{12}\)).

Дополнительное ограничение на входные данные: сумма значений \(n\) по всем наборам входных данных не превышает \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество монет, которое вы можете заработать.

Примечание

Пояснения для наборов входных данных в примере из условия (синие символы подчеркнуты, красные — нет):

  1. \(0100\underline{0}1\underline{0}\);
  2. \(10\underline{11}1\);
  3. \(\underline{0}1\underline{00000000}\);
  4. \(0\underline{1}010000\).

H1. Цикличный Хэмминг (простая версия)

бпф дп математика Перебор разделяй и властвуй теория чисел *3400

Это простая версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(k\). Делать взломы можно только в том случае, если решены обе версии задачи.

В этой задаче все строки индексируются с \(0\).

Для двух строк \(a\), \(b\) одинаковой длины \(p\) определим следующие термины:

  • Расстояние Хэмминга между \(a\) и \(b\), обозначаемое как \(h(a, b)\), определяется как количество позиций \(i\) таких, что \(0 \le i < p\) и \(a_i \ne b_i\).
  • \(b\) является циклическим сдвигом \(a\), если существует некоторое число \(0 \leq k < p\) такое, что \(b_{(i+k) \bmod p} = a_i\) для всех \(0 \le i < p\). Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Даны две бинарные строки \(s\) и \(t\) длиной \(2^{k+1}\) каждая. Обе строки могут содержать пропущенные символы (обозначаются символом «?»). Ваша задача — подсчитать количество способов заменить отсутствующие символы в обеих строках на символы «0» или «1» таким образом, чтобы:

  • каждая строка \(s\) и \(t\) содержала ровно \(2^k\) вхождений каждого символа «0» и «1»;
  • \(h(s, c) \ge 2^k\) для всех строк \(c\), являющихся циклическим сдвигом \(t\).

Поскольку результат может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(k\) (\(1 \le k \le 7\)).

Вторая строка содержит строку \(s\) длины \(2^{k+1}\), состоящую из символов «0», «1» и «?».

Третья строка содержит строку \(t\) длины \(2^{k+1}\), состоящую из символов «0», «1» и «?».

Гарантируется, что обе строки \(s\) и \(t\) содержат не более \(2^k\) символов «0» или «1».

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(998\,244\,353\).

Примечание

В первом примере можно проверить, что для всех циклических сдвигов \(c\) из \(t\) выполняется условие \(h(s, c) \ge 2^k\). В частности:

  • Для \(c = \mathtt{0101}\), \(h(s, c) = h(\mathtt{0110}, \mathtt{0101}) = 2 \ge 2^1\).
  • Для \(c = \mathtt{1010}\), \(h(s, c) = h(\mathtt{0110}, \mathtt{1010}) = 2 \ge 2^1\).

Во втором примере существует циклический сдвиг \(c\) строки \(t\) такой, что \(h(s, c) < 2^k\) (в частности, \(c = \mathtt{0011}\), и \(h(s, c) = h(\mathtt{0011}, \mathtt{0011}) = 0\)).

В третьем примере существует \(2\) возможных способа восстановления недостающих символов:

  • \(s = \mathtt{0101}\), \(t = \mathtt{0110}\);
  • \(s = \mathtt{0011}\), \(t = \mathtt{0101}\).

В четвертом примере существует \(3\) возможных способа восстановления пропущенных символов:

  • \(s = \mathtt{00011110}\), \(t = \mathtt{01010101}\);
  • \(s = \mathtt{00011011}\), \(t = \mathtt{01010101}\);
  • \(s = \mathtt{00001111}\), \(t = \mathtt{01010101}\).

H2. Цикличный Хэмминг (сложная версия)

бпф дп математика Перебор теория чисел *3500

Это сложная версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(k\). Делать взломы можно только в том случае, если решены обе версии задачи.

В этой задаче все строки индексируются с \(0\).

Для двух строк \(a\), \(b\) одинаковой длины \(p\) определим следующие термины:

  • Расстояние Хэмминга между \(a\) и \(b\), обозначаемое как \(h(a, b)\), определяется как количество позиций \(i\) таких, что \(0 \le i < p\) и \(a_i \ne b_i\).
  • \(b\) является циклическим сдвигом \(a\), если существует некоторое число \(0 \leq k < p\) такое, что \(b_{(i+k) \bmod p} = a_i\) для всех \(0 \le i < p\). Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Даны две бинарные строки \(s\) и \(t\) длиной \(2^{k+1}\) каждая. Обе строки могут содержать пропущенные символы (обозначаются символом «?»). Ваша задача — подсчитать количество способов заменить отсутствующие символы в обеих строках на символы «0» или «1» таким образом, чтобы:

  • каждая строка \(s\) и \(t\) содержала ровно \(2^k\) вхождений каждого символа «0» и «1»;
  • \(h(s, c) \ge 2^k\) для всех строк \(c\), являющихся циклическим сдвигом \(t\).

Поскольку результат может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(k\) (\(1 \le k \le 12\)).

Вторая строка содержит строку \(s\) длины \(2^{k+1}\), состоящую из символов «0», «1» и «?».

Третья строка содержит строку \(t\) длины \(2^{k+1}\), состоящую из символов «0», «1» и «?».

Гарантируется, что обе строки \(s\) и \(t\) содержат не более \(2^k\) символов «0» или «1».

Выходные данные

Выведите одно целое число — ответ на задачу по модулю \(998\,244\,353\).

Примечание

В первом примере можно проверить, что для всех циклических сдвигов \(c\) из \(t\) выполняется условие \(h(s, c) \ge 2^k\). В частности:

  • Для \(c = \mathtt{0101}\), \(h(s, c) = h(\mathtt{0110}, \mathtt{0101}) = 2 \ge 2^1\).
  • Для \(c = \mathtt{1010}\), \(h(s, c) = h(\mathtt{0110}, \mathtt{1010}) = 2 \ge 2^1\).

Во втором примере существует циклический сдвиг \(c\) строки \(t\) такой, что \(h(s, c) < 2^k\) (в частности, \(c = \mathtt{0011}\), и \(h(s, c) = h(\mathtt{0011}, \mathtt{0011}) = 0\)).

В третьем примере существует \(2\) возможных способа восстановления недостающих символов:

  • \(s = \mathtt{0101}\), \(t = \mathtt{0110}\);
  • \(s = \mathtt{0011}\), \(t = \mathtt{0101}\).

В четвертом примере существует \(3\) возможных способа восстановления пропущенных символов:

  • \(s = \mathtt{00011110}\), \(t = \mathtt{01010101}\);
  • \(s = \mathtt{00011011}\), \(t = \mathtt{01010101}\);
  • \(s = \mathtt{00001111}\), \(t = \mathtt{01010101}\).

C. Ярик и массив

дп жадные алгоритмы *1100

Подотрезок — это непрерывная часть массива.

Ярик недавно нашёл массив \(a\) из \(n\) элементов, и ему стало очень интересно найти сумму непустого подотрезка с максимальной суммой. Но Ярик не любит числа одной чётности, стоящие рядом, так что у подотрезка, который он выберет, чётности соседних элементов должны различаться.

Например, массив \([1, 2, 3]\) подойдёт, но \([1, 2, 4]\) не подойдёт, так как \(2\) и \(4\) — чётные числа и стоят рядом.

Вам нужно помочь Ярику и вывести максимальную сумму такого подотрезка.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 10^4)\) —количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно целое число \(n\) \((1 \le n \le 2 \cdot 10^5)\) — длина массива.

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((-10^3 \le a_i \le 10^3)\) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора данных выведите одно число — ответ на задачу.

B. Кассир

дп *1900

Вася пришел в магазин cash-n-carry, положил в корзину n товаров и пошел на кассу оплачивать покупку. Каждый товар характеризуется ценой ci и временем ti в секундах, в течение которого кассир пробивает этот товар. За время, пока кассир пробивает товар, Вася может украсть некоторые другие свои покупки из корзины. На то, чтобы своровать один товар, Вася тратит ровно 1 секунду. Какое наименьшее количество денег Васе придется заплатить? Помните, что порядок, в котором кассир будет пробивать товар, определяет Вася.

Входные данные

В первой строке задано число n (1 ≤ n ≤ 2000). В каждой из n следующих строк задано описание одного товара парой чисел ti, ci (0 ≤ ti ≤ 2000, 1 ≤ ci ≤ 109). Если ti равно 0, то у Васи не получится украсть ни одного товара за время, пока кассир обрабатывает товар номер i.

Выходные данные

Выведите одно число — ответ на задачу: какое наименьшее количество денег придется заплатить Васе.

B. Лаура и операции

дп математика *900

Лауре не нравится комбинаторика. Неманья попытается убедить ее в обратном.

Неманья написал на доске несколько цифр. Каждая из них равняется либо \(1\), либо \(2\), либо \(3\). Количество цифр \(1\) равно \(a\), количество цифр \(2\) — \(b\), а количество цифр \(3\) — \(c\). Он сказал Лауре, что за одну операцию она может сделать следующее:

  • Выбрать две различные цифры и стереть их с доски. После этого записать цифру (\(1\), \(2\) или \(3\)), которая отличается от обеих стертых цифр.

Например, пусть были выписаны цифры \(1\), \(1\), \(1\), \(2\), \(3\), \(3\). Она может выбрать цифры \(1\) и \(3\) и стереть их. Тогда доска будет выглядеть следующим образом: \(1\), \(1\), \(2\), \(3\). После этого она должна написать еще одну цифру \(2\), и в конце операции доска будет выглядеть так: \(1\), \(1\), \(2\), \(3\), \(2\).

Неманья спросил Лауру, возможно ли, чтобы после некоторой последовательности операций все цифры на доске оказались одинаковыми. Если да, то какие это могут быть цифры?

Лаура не смогла решить эту задачу и обратилась к вам за помощью. В награду за помощь она уговорит Неманью дать вам немного баллов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(a\), \(b\), \(c\) (\(1 \le a, b, c \le 100\)) — количество единиц, количество двоек и количество троек, соответственно.

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(3\) целых числа.

Первое из них должно быть равно \(1\), если существует последовательность операций, которая оставляет на доске только цифры \(1\), и \(0\) в противном случае.

Аналогично, второе число должно быть равно \(1\), если существует последовательность операций, которая оставляет на доске только цифры \(2\), и \(0\) в противном случае.

Аналогично, третье должно быть равно \(1\), если существует последовательность операций, которая оставляет на доске только цифры \(3\), и \(0\) в противном случае.

Примечание

В первом наборе входных данных Лаура может удалить цифры \(2\) и \(3\) и записать цифру \(1\). После этого на доске останется \(2\) цифры \(1\). Проделав аналогичную операцию, она может сделать так, чтобы на доске остались только цифры \(2\) или \(3\).

Во втором наборе входных данных она может удалить цифры \(1\) и \(3\) и записать цифру \(2\). После выполнения этой операции \(2\) раза на доске останутся только цифры \(2\). Можно доказать, что на доске не могут остаться только цифры \(1\) или только цифры \(3\).

В третьем наборе входных данных имеется последовательность операций, в результате которой на доске остаются только цифры \(1\). Можно доказать, что на доске не могут остаться только цифры \(2\) или только цифры \(3\).

C. Аньи и двоичное дерево

Деревья дп поиск в глубину и подобное *1300

Аньи продолжает игнорировать сообщения Кексика. Через общего друга Кексик выяснил, что Аньи очень любит бинарные деревья, и захотел решить ее задачу, чтобы привлечь ее внимание.

Аньи задала Кексику двоичное дерево с \(n\) вершинами. Вершина \(1\) является корнем и не имеет родителя. Все остальные вершины имеют ровно одного родителя. Каждая вершина может иметь до \(2\) детей — левого и правого. Для каждой вершины Аньи сообщает Кексику индекс ее левого и правого ребенка или говорит, что их не существует.

Кроме того, на каждой из вершин написана буква \(s_i\), которая является либо «U», либо «L», либо «R».

Кексик начинает свой путь с корня и на каждом ходу делает следующее:

  • Если он находится в вершине, на которой написана буква «U», то он переходит к ее родителю. Если он не существует, то Кексик ничего не делает.
  • Если он находится в вершине, на которой написана буква «L», то он переходит к ее левому ребенку. Если его не существует, то он ничего не делает.
  • Если он находится в вершине, на которой написана буква «R», то он переходит к ее правому ребенку. Если его не существует, то он ничего не делает.

Перед тем, как отправиться в путь, он может выполнять следующие операции: выбрать любую вершину и заменить написанную на ней букву на другую.

Вас интересует минимальное количество операций, которые он должен выполнить перед путешествием, чтобы, начав путешествие, он в какой-то момент оказался в листе. Лист — это вершина, у которой нет детей. Не имеет значения, какого листа он достигнет. Заметим, что не имеет значения, останется ли он в листе — ему нужно только переместиться в лист. Кроме того, неважно, сколько раз он должен переместиться, прежде чем достигнет листа.

Помогите Кексику решить задачу Аньи, чтобы он смог завоевать ее сердце, и Анья приехала в Чачак.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество вершин в дереве.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\) — буквы, написанные на вершинах. Гарантируется, что \(s\) состоит только из букв «U», «L» и «R».

В \(i\)-й из следующих \(n\) строк содержатся два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i, r_i \le n\)) — индексы левого и правого детей вершины \(i\). Если \(l_i = 0\), то это означает, что вершина \(i\) не имеет левого ребенка. Если \(r_i = 0\), то вершина \(i\) не имеет правого ребенка. Гарантируется, что данные значения задают корректное бинарное дерево с корнем в \(1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, которое необходимо выполнить Кексику, чтобы он смог достичь листа.

Примечание

В первом наборе входных данных вершина \(1\) имеет левого ребенка \(2\) и правого — \(3\). Вершины \(2\) и \(3\) не имеют детей и поэтому являются листьями. Поскольку в вершине \(1\) написана буква «L», то Кексик перейдет в вершину \(2\), поэтому ему не нужно выполнять никаких операций.

Во втором наборе входных данных вершина \(1\) имеет левого ребенка \(3\) и правого — \(2\). Вершины \(2\) и \(3\) являются листьями. Поскольку в вершине \(1\) написана буква «U», то для того, чтобы добраться до листа, Кексику необходимо изменить эту букву на «L» или «R».

В третьем наборе вершина \(1\) имеет только правого ребенка, которым является вершина \(2\). Поскольку на корневой вершине написана буква «L», Кексик должен изменить букву на «R», иначе он застрянет в вершине \(1\).

В четвертом наборе он может изменить \(3\) буквы так, чтобы буквы на вершинах были «LURL», что позволит ему достичь вершины \(2\).

В пятом наборе имеется \(3\) листа: \(3\), \(6\) и \(7\). Чтобы добраться до листа \(6\) или листа \(7\), ему нужно поменять \(2\) буквы. Однако, если он поменяет букву на вершине \(1\) на «R», то достигнет листа \(3\), поэтому ответ — \(1\).

Изначальное дерево в пятом наборе входных данных.

D. НОД меньших

битмаски дп математика Перебор теория чисел *2000

Пусть \(a\), \(b\) и \(c\) — целые числа. Определим функцию \(f(a, b, c)\) следующим образом.

Упорядочить числа \(a\), \(b\), \(c\) таким образом, чтобы выполнялось \(a \le b \le c\). Затем вернуть \(\gcd(a, b)\), где \(\gcd(a, b)\) обозначает наибольший общий делитель (НОД) чисел \(a\) и \(b\).

Иными словами, мы берем \(\gcd\) из \(2\) меньших значений и игнорируем наибольшее.

Вам дан массив \(a\) длины \(n\). Вычислите сумму \(f(a_i, a_j, a_k)\) для всех \(i\), \(j\), \(k\) таких, что \(1 \le i < j < k \le n\).

Более формально, вычислите \(\)\sum_{i = 1}^n \sum_{j = i+1}^n \sum_{k =j +1}^n f(a_i, a_j, a_k).\(\)

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 8 \cdot 10^4\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(8 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите одно число — сумму из условия.

Примечание

В первом наборе входных данных значения \(f\) следующие:

  • \(i=1\), \(j=2\), \(k=3\), \(f(a_i,a_j,a_k)=f(2,3,6)=\gcd(2,3)=1\);
  • \(i=1\), \(j=2\), \(k=4\), \(f(a_i,a_j,a_k)=f(2,3,12)=\gcd(2,3)=1\);
  • \(i=1\), \(j=2\), \(k=5\), \(f(a_i,a_j,a_k)=f(2,3,17)=\gcd(2,3)=1\);
  • \(i=1\), \(j=3\), \(k=4\), \(f(a_i,a_j,a_k)=f(2,6,12)=\gcd(2,6)=2\);
  • \(i=1\), \(j=3\), \(k=5\), \(f(a_i,a_j,a_k)=f(2,6,17)=\gcd(2,6)=2\);
  • \(i=1\), \(j=4\), \(k=5\), \(f(a_i,a_j,a_k)=f(2,12,17)=\gcd(2,12)=2\)
  • \(i=2\), \(j=3\), \(k=4\), \(f(a_i,a_j,a_k)=f(3,6,12)=\gcd(3,6)=3\);
  • \(i=2\), \(j=3\), \(k=5\), \(f(a_i,a_j,a_k)=f(3,6,17)=\gcd(3,6)=3\);
  • \(i=2\), \(j=4\), \(k=5\), \(f(a_i,a_j,a_k)=f(3,12,17)=\gcd(3,12)=3\);
  • \(i=3\), \(j=4\), \(k=5\), \(f(a_i,a_j,a_k)=f(6,12,17)=\gcd(6,12)=6\).
Сумма по всем тройкам равна \(1+1+1+2+2+2+3+3+3+6=24\).

Во втором наборе входных данных существует \(56\) способов выбора значений \(i\), \(j\), \(k\). Сумма по всем \(f(a_i,a_j,a_k)\) равна \(203\).

E. Транзитивный граф

графы дп поиск в глубину и подобное реализация снм *2100

Дан ориентированный граф \(G\) с \(n\) вершинами и \(m\) ребрами.

Изначально граф \(H\) совпадает с графом \(G\). Затем вы решили выполнить следующие действия:

  • Если в графе \(H\) существует тройка вершин \(a\), \(b\), \(c\) такая, что есть ребро из \(a\) в \(b\) и ребро из \(b\) в \(c\), но нет ребра из \(a\) в \(c\), то добавить ребро из \(a\) в \(c\).
  • Повторять предыдущий шаг до тех пор, пока существуют такие тройки.

Заметим, что после выполнения этих действий количество ребер в \(H\) может достигать \(n^2\).

Вы также записали некоторые значения на вершинах графа \(H\): на вершине \(i\) записано значение \(a_i\).

Рассмотрим простой путь, состоящий из \(k\) различных вершин с номерами \(v_1, v_2, \ldots, v_k\). Длина такого пути равняется \(k\). Значение этого пути определим как \(\sum_{i = 1}^k a_{v_i}\).

Простой путь считается самым длинным, если в графе нет другого простого пути с большей длиной.

Среди всех самых длинных простых путей в \(H\) найдите тот, который имеет наименьшее значение.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 2 \cdot 10^5\)) — количество вершин и количество ребер.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — числа, записанные на вершинах графа \(H\).

В \(i\)-й из следующих \(m\) строк записаны два целых числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\)) — в графе \(G\) есть ребро, идущее от вершины \(v_i\) к вершине \(u_i\). Заметим, что ребра являются ориентированными. Также заметим, что в графе могут быть петли и кратные рёбра.

Гарантируется, сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два числа — длину самого длинного простого пути в \(H\) и минимально возможное значение такого пути.

Примечание

В первом наборе входных данных самый длинный путь в обоих графах равен \(1 \to 3 \to 4 \to 5 \to 2\). Поскольку путь включает все вершины, то минимально возможное значение самого длинного пути равно сумме значений по всем вершинам, которое равняется \(12\).

Во втором наборе входных данных самый длинный путь равен \(1 \to 2 \to 3 \to 4 \to 6 \to 7\). Поскольку самых длинных путей с вершиной \(5\) не существует, то такой путь имеет минимально возможное значение \(5\,999\,999\,995\).

В третьем наборе входных данных можно доказать, что не существует пути длиннее \(11\) и что значение самого длинного пути не может быть меньше \(37\). Также заметим, что данный граф содержит петли и кратные ребра.

D. Очередное сражение с монстрами

Бинарный поиск дп жадные алгоритмы математика реализация *1700

Вася — волшебник, который сражается с монстрами. В очередной раз. В ряд расположены \(n\) монстров, количество очков здоровья \(i\)-го монстра равно \(a_i\).

Вася — очень могущественный волшебник и знает очень много мощных заклинаний. В этом сражении он решил использовать цепную молнию, чтобы победить всех монстров. Давайте посмотрим, как работает это заклинание.

Сначала Вася выбирает индекс какого-то монстра \(i\) (\(1 \le i \le n\)) и изначальную силу заклинания \(x\). Затем заклинание поражает монстров ровно \(n\) раз, каждого монстра ровно один раз. Первой целью заклинания всегда является монстр \(i\). Каждой целью заклинания, за исключением первой, выбирается случайный монстр, который еще не был поражен заклинанием и является соседним к одному из пораженных монстров. Таким образом, каждый из монстров будет поражен ровно единожды. Первый монстр, пораженный заклинанием, получает \(x\) единиц урона, второй получает \((x-1)\) единиц урона, третий получает \((x-2)\) единиц урона, и так далее.

Вася хочет показать, насколько он силен, поэтому он хочет убить всех монстров за одно применение цепной молнии. Монстр считается мертвым тогда, когда его количество очков здоровья меньше либо равно урону, который он получил. С другой стороны, Вася хочет показать, что он не настолько сильно переживает за сражение, поэтому он хочет выбрать минимальную изначальную силу заклинания \(x\), способную убить всех монстров вне зависимости от того, какой монстр (среди тех, кто может получить урон) получит урон на каждом из шагов.

Вася, конечно же, является волшебником, но количество вычислений, необходимое для нахождения оптимального варианта применения заклинания, выше его возможностей, поэтому вам поручено помочь ему найти минимальную силу заклинания, необходимую для убийства всех монстров.

Заметьте, что Вася выбирает изначальную цель и силу заклинания, другие события являются случайными и Вася хочет убить всех монстров даже в худшем из возможных исходов.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество монстров.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно количеству очков здоровья \(i\)-го монстра.

Выходные данные

Выведите одно целое число — минимальную силу заклинания, необходимую для убийства всех монстров, если Вася выберет первую цель заклинания оптимально, а порядок ударов заклинания может быть любым возможным, удовлетворяющим правилам задачи.

E. Сжатие дерева

графы Деревья дп жадные алгоритмы поиск в глубину и подобное сортировки *2200

Вам дано дерево, состоящее из \(n\) вершин. На каждой вершине записано число; число на вершине \(i\) равно \(a_i\).

Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • выбрать вершину, имеющую не более \(1\) инцидентного ребра, и удалить ее из дерева.

Обратите внимание, что вы можете удалить все вершины.

После выполнения всех операций происходит сжатие дерева. Процесс сжатия выполняется следующим образом. Пока в дереве есть вершина, имеющая ровно \(2\) инцидентных ребра, выполняется следующую операцию:

  • удалить эту вершину, а ее соседей соединить ребром.

Можно показать, что если существует несколько способов выбрать вершину для удаления в процессе сжатия, итоговое дерево остается тем же самым.

Ваша задача — вычислить максимально возможную сумму чисел, записанных на вершинах, после применения вышеописанной операции любое количество раз, а затем сжатия дерева.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 5 \cdot 10^5\)) — количество вершин.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Каждая из следующих \(n - 1\) строк описывает ребра дерева. Ребро \(i\) описывается двумя целыми числами \(v_i\) и \(u_i\), номерами вершин, которые оно соединяет (\(1 \le v_i, u_i \le n\), \(v_i \ne u_i\)). Данные ребра образуют дерево.

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите одно целое число — максимально возможную сумму чисел, записанных на вершинах, после применения вышеописанной операции любое количество раз, а затем сжатия дерева.

D. Запросы робота

Бинарный поиск дп реализация Структуры данных *1900

В точке \((0, 0)\) \(2\)-мерной плоскости стоит робот. Робот может выполнять четыре команды:

  • U — переместиться из точки \((x, y)\) в \((x, y + 1)\);
  • D — переместиться из точки \((x, y)\) в \((x, y - 1)\);
  • L — переместиться из точки \((x, y)\) в \((x - 1, y)\);
  • R — переместиться из точки \((x, y)\) в \((x + 1, y)\).

Задана последовательность команд \(s\) длины \(n\). Ваша задача — ответить на \(q\) независимых запросов: для четырех целых чисел \(x\), \(y\), \(l\) и \(r\) определить, посетит ли робот точку \((x, y)\), выполняя последовательность \(s\), где подстрока с \(l\) по \(r\) перевернута (то есть робот выполняет команды в порядке \(s_1 s_2 s_3 \dots s_{l-1} s_r s_{r-1} s_{r-2} \dots s_l s_{r+1} s_{r+2} \dots s_n\)).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — длину последовательности команд и количество запросов соответственно.

Вторая строка содержит строку \(s\) длины \(n\), состоящую из символов U, D, L и/или R.

Затем следуют \(q\) строк, \(i\)-я из них содержит четыре целых числа \(x_i\), \(y_i\), \(l_i\) и \(r_i\) (\(-n \le x_i, y_i \le n\); \(1 \le l \le r \le n\)), описывающие \(i\)-й запрос.

Выходные данные

Для каждого запроса выведите YES, если робот посещает точку \((x, y)\), выполняя последовательность \(s\), где подстрока с \(l\) по \(r\) перевернута; в противном случае выведите NO.

Примечание

В первом запросе первого примера путь робота выглядит следующим образом:

Во втором запросе первого примера путь робота выглядит следующим образом:

В третьем запросе первого примера путь робота выглядит следующим образом:

D2. Максимум и запросы (сложная версия)

битмаски дп жадные алгоритмы разделяй и властвуй *2500

Это сложная версия задачи. Единственное различие между двумя версиями — это ограничения на \(n\) и \(q\), а также ограничения по времени и памяти. Вы можете делать взломы, только если обе версии задачи решены.

Теофанису очень нравится играть с битами чисел. У него есть массив \(a\) длины \(n\) и целое число \(k\). Он может совершить не более \(k\) операций с массивом, в каждой из которых он выбирает один элемент и увеличивает его на \(1\).

Он нашел максимальное побитовое И, которое может иметь массив \(a\) после выполнения не более чем \(k\) операций.

Теофанис приложил много усилий, чтобы найти это значение, и был очень доволен своим результатом. К сожалению, Адас, будучи злым человеком, решил поиздеваться над ним, неоднократно меняя значение \(k\).

Помогите Теофанису, вычислив максимально возможное побитовое И для \(q\) различных значений \(k\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^6\)) — длину массива и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^6\)) — элементы массива.

Следующие \(q\) строк описывают запросы. В \(i\)-й строке содержится одно целое число \(k_i\) (\(0 \le k_i \le 10^{18}\)) — количество операций, которое может быть выполнено в \(i\)-м запросе.

Выходные данные

Для каждого запроса выведите одно целое число — максимальное побитовое И, которое может иметь массив \(a\) после выполнения не более чем \(k_i\) операций.

Примечание

В первом наборе входных данных, в первом запросе, мы добавляем \(1\) к первому и последнему элементу массива.

Таким образом, массив становится равен \([2,3,7,6]\) с побитовым И, равным \(2\).

Во втором наборе входных данных, в первом запросе, мы добавляем \(1\) к первому элементу, \(5\) ко второму и \(3\) к третьему, после чего все элементы становятся равны \(5\).

B. Игра в коллекционирование

Бинарный поиск дп жадные алгоритмы сортировки *1100

Вам дан массив \(a\) из \(n\) целых положительных чисел и счет. Если ваш счет больше или равен \(a_i\), то вы можете увеличить свой счет на \(a_i\) и удалить \(a_i\) из массива.

Для каждого индекса \(i\) выведите максимальное количество дополнительных элементов массива, которые вы можете удалить, если удалите \(a_i\) и начнёте со счетом, равным \(a_i\). Обратите внимание, что удаление \(a_i\) не должно учитываться в ответе.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, \(i\)-е из которых обозначает максимальное количество дополнительных элементов массива, которые можно удалить, если удалить из массива \(a_i\) и начать со счетом \(a_i\).

Примечание

В первом наборе входных данных ответы выглядят следующим образом:

Если мы начинаем с \(i=4\), то наш изначальный счет равен \(a_4=4\) и \(a=[20,5,1,2]\). Мы можем удалить \(3\) дополнительных элемента в следующем порядке:

  1. Поскольку \(4 \ge 1\), мы можем удалить \(1\), и наш счет станет равен \(5\). После этого \(a=[20,5,2]\).
  2. Поскольку \(5 \ge 5\), мы можем удалить \(5\) и наш счет станет \(10\). После этого \(a=[20,2]\).
  3. Поскольку \(10 \ge 2\), мы можем удалить \(2\), и наш счет станет \(12\). После этого \(a=[20]\).

Если мы начнем с \(i=1\), то сможем удалить все оставшиеся элементы массива, поэтому ответ будет \(4\).

Если мы начнем с \(i=2\), то сможем удалить \(3\) дополнительных элемента в следующем порядке: \(1\), \(4\), \(2\).

Если мы начнем с \(i=3\), то не сможем удалить ни одного дополнительного элемента.

Если мы начинаем с \(i=5\), то можем удалить \(1\) дополнительный элемент: \(1\).

E. One-X

Деревья дп Комбинаторика математика поиск в глубину и подобное *2400

В этом грустном мире, полном недостатков, существуют уродливые деревья отрезков.

Дерево отрезков — это дерево, где каждая вершина соответствует некоторому отрезку и имеет свой номер. Дерево отрезков для массива из \(n\) элементов можно построить рекурсивно. Пусть функция \(\operatorname{build}(v,l,r)\) строит дерево отрезков, корневая вершина которого имеет номер \(v\) и соответствует отрезку \([l,r]\).

Теперь давайте определим \(\operatorname{build}(v,l,r)\):

  • Если \(l=r\), то вершина \(v\) является листом, поэтому мы прекращаем добавление новых рёбер;
  • Иначе, мы добавляем рёбра \((v, 2v)\) и \((v, 2v+1)\). Пусть \(m=\lfloor \frac{l+r}{2} \rfloor\). Затем мы вызываем \(\operatorname{build}(2v,l,m)\) и \(\operatorname{build}(2v+1,m+1,r)\).

Таким образом, всё дерево строится путём вызова \(\operatorname{build}(1,1,n)\).

Теперь Ибти построит дерево отрезков для массива из \(n\) элементов. Он хочет найти сумму всех \(\operatorname{lca}^\dagger(S)\), где \(S\) — непустое подмножество листьев. Обратите внимание, что существует ровно \(2^n - 1\) возможных подмножеств. Поскольку эта сумма может быть очень большой, выведите её по модулю \(998\,244\,353\).

\(^\dagger\operatorname{lca}(S)\) — номер наименьшего общего предка для вершин, находящихся в \(S\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^{18}\)) — длина массива, для которого строится дерево отрезков.

Выходные данные

Для каждого набора входных данных выведите одно целое число — требуемую сумму по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных:

Давайте рассмотрим все подмножества листьев.

  • \(\operatorname{lca}(\{2\})=2\);
  • \(\operatorname{lca}(\{3\})=3\);
  • \(\operatorname{lca}(\{2,3\})=1\).

Таким образом, ответ равен \(2+3+1=6\).

Во втором наборе входных данных:

Давайте рассмотрим все подмножества листьев.

  • \(\operatorname{lca}(\{4\})=4\);
  • \(\operatorname{lca}(\{5\})=5\);
  • \(\operatorname{lca}(\{3\})=3\);
  • \(\operatorname{lca}(\{4,5\})=2\);
  • \(\operatorname{lca}(\{4,3\})=1\);
  • \(\operatorname{lca}(\{5,3\})=1\);
  • \(\operatorname{lca}(\{4,5,3\})=1\);

Таким образом, ответ равен \(4+5+3+2+1+1+1=17\).

E. Merge Not Sort

дп Конструктив *1900

You are currently researching the Merge Sort algorithm. Merge Sort is a sorting algorithm that is based on the principle of Divide and Conquer. It works by dividing an array into two subarrays of equal length, sorting each subarrays, then merging the sorted subarrays back together to form the final sorted array.

You are particularly interested in the merging routine. Common merge implementation will combine two subarrays by iteratively comparing their first elements, and move the smaller one to a new merged array. More precisely, the merge algorithm can be presented by the following pseudocode.


Merge(A[1..N], B[1..N]):
C = []
i = 1
j = 1
while i <= N AND j <= N:
if A[i] < B[j]:
append A[i] to C
i = i + 1
else:
append B[j] to C
j = j + 1
while i <= N:
append A[i] to C
i = i + 1
while j <= N:
append B[j] to C
j = j + 1
return C

During your research, you are keen to understand the behaviour of the merge algorithm when arrays \(A\) and \(B\) are not necessarily sorted. For example, if \(A = [3, 1, 6]\) and \(B = [4, 5, 2]\), then \(\text{Merge}(A, B) = [3, 1, 4, 5, 2, 6]\).

To further increase the understanding of the merge algorithm, you decided to work on the following problem. You are given an array \(C\) of length \(2 \cdot N\) such that it is a permutation of \(1\) to \(2 \cdot N\). Construct any two arrays \(A\) and \(B\) of the same length \(N\), such that \(\text{Merge}(A, B) = C\), or determine if it is impossible to do so.

Input

The first line consists of an integer \(N\) (\(1 \leq N \leq 1000\)).

The following line consists of \(2 \cdot N\) integers \(C_i\). The array \(C\) is a permutation of \(1\) to \(2 \cdot N\).

Output

If it is impossible to construct two arrays \(A\) and \(B\) of length \(N\) such that \(\text{Merge}(A, B) = C\), then output -1.

Otherwise, output the arrays \(A\) and \(B\) in two lines. The first line consists of \(N\) integers \(A_i\). The second line consists of \(N\) integers \(B_i\). If there are several possible answers, output any of them.

Note

Explanation for the sample input/output #1

The solution \(A = [3, 1, 4]\) and \(B = [5, 2, 6]\) is also correct.

Explanation for the sample input/output #2

The solution \(A = [1, 2, 3, 4]\) and \(B = [5, 6, 7, 8]\) is also correct.

H. Twin Friends

дп Комбинаторика *2200

You meet two new friends who are twins. The name of the elder twin is \(A\), which consists of \(N\) characters. While the name of the younger twin is \(B\), which consists of \(M\) characters. It is known that \(N \leq M\).

You want to call each of them with a nickname. For the elder twin, you want to pick any permutation of \(A\) as the nickname. For the younger twin, you want to remove exactly \(M - N\) characters from any permutation of \(B\). Denote the nicknames of the elder twin and the younger twin as \(A'\) and \(B'\), respectively.

You want the nicknames to satisfy the following requirement. For each \(i\) that satisfies \(1 \leq i \leq N\), \(B'_i\) must be equal to either \(A'_i\) or the next letter that follows alphabetically after \(A'_i\) (if such a next letter exists).

Determine the number of different pairs of nicknames \((A', B')\) that satisfy the requirement. Two pairs of nicknames are considered different if at least one of the nicknames are different. As the result might be large, find the answer modulo \(998\,244\,353\).

Input

The first line consists of two integers \(N\) \(M\) (\(1 \leq N \leq M \leq 200\,000\)).

The second line consists of a string \(A\) of length \(N\).

The third line consists of a string \(B\) of length \(M\).

All strings consist of only upper-case letters.

Output

Output a single integer representing number of different pairs \((A', B')\) that satisfy the requirement, modulo \(998\,244\,353\).

Note

Explanation for the sample input/output #1

The \(9\) pairs are:

  • (AAM, AAN),
  • (AAM, ABN),
  • (AAM, BAN),
  • (AMA, ANA),
  • (AMA, ANB),
  • (AMA, BNA),
  • (MAA, NAA),
  • (MAA, NAB), and
  • (MAA, NBA).

Explanation for the sample input/output #2

The \(120\) pairs are the pairs where \(A'\) is a permutation of BINUS and \(B' = A'\).

J. Count BFS Graph

дп Комбинаторика *2100

You are currently researching a graph traversal algorithm called the Breadth First Search (BFS). Suppose you have an input graph of \(N\) nodes (numbered from \(1\) to \(N\)). The graph is represented by an adjacency matrix \(M\), for which node \(u\) can traverse to node \(v\) if \(M_{u, v}\) is \(1\), otherwise it is \(0\). Your algorithm will output the order the nodes are visited in the BFS. The pseudocode of the algorithm is presented as follows.


BFS(M[1..N][1..N]):
let A be an empty array
let Q be an empty queue

append 1 to A
push 1 to Q

while Q is not empty:
pop the front element of Q into u
for v = 1 to N:
if M[u][v] == 1 and v is not in A:
append v to A
push v to Q

return A

During your research, you are interested in the following problem. Given an array \(A\) such that \(A\) is a permutation of \(1\) to \(N\) and \(A_1 = 1\). How many simple undirected graph with \(N\) nodes and adjacency matrix \(M\) such that \(\text{BFS}(M) = A\)? Since the answer can be very large, calculate the answer modulo \(998\,244\,353\).

A simple graph has no self-loop (\(M_{i, i} = 0\) for \(1 \leq i \leq N\)) and there is at most one edge that connects a pair of nodes. In an undirected graph, if node \(u\) is adjacent to node \(v\), then node \(v\) is also adjacent to node \(u\); formally, \(M_{u, v} = M_{v, u}\) for \(1 \leq u < v \leq N\).

Two graphs are considered different if there is an edge that exists in one graph but not the other. In other words, two graphs are considered different if their adjacency matrices are different.

Input

The first line consists of an integer \(N\) (\(2 \leq N \leq 5000\)).

The second line consists of \(N\) integers \(A_i\). The array \(A\) is a permutation of \(1\) to \(N\) and \(A_1 = 1\).

Output

Output an integer representing the number of simple undirected graphs with \(N\) nodes and adjacency matrix \(M\) such that \(\text{BFS}(M) = A\). Since the answer can be very large, output the answer modulo \(998\,244\,353\).

Note

Explanation for the sample input/output #1

The following illustration shows all graphs that satisfy the requirements.

Explanation for the sample input/output #2

The only graph that satisfies the requirements is a graph with two edges: one that connects nodes \(1\) and \(3\), and another one that connects nodes \(3\) and \(2\).

F1. Небольшая задачка про перестановки (простая версия)

дп Комбинаторика математика Перебор *2200

В простой версии задачи \(a_i\) находятся в диапазоне \([0, n]\); в сложной версии \(a_i\) находятся в диапазоне \([-1, n]\) и определение хорошей перестановки немного отличается. Вы можете делать взломы, только если обе версии задачи решены.

Вам дано целое число \(n\) и массив \(a_1, a_2 \dots, a_n\) целых чисел в диапазоне \([0, n]\).

Перестановка \(p_1, p_2, \dots, p_n\) элементов \([1, 2, \dots, n]\) называется хорошей, если для каждого \(i\) верно следующее утверждение:

  • количество значений \(\leq i\) в \([p_1, p_2, \dots, p_i]\) в точности равно \(a_i\).

Посчитайте количество хороших перестановок \([1, 2, \dots, n]\) по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n\)), которые описывают критерии хорошей перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую количество хороших перестановок по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных единственной хорошей перестановкой является \([1, 2, 3, 4, 5]\).

Во втором наборе входных данных существует \(4\) хороших перестановки: \([2, 1, 5, 6, 3, 4]\), \([2, 1, 5, 6, 4, 3]\), \([2, 1, 6, 5, 3, 4]\), \([2, 1, 6, 5, 4, 3]\). Например, \([2, 1, 5, 6, 3, 4]\) — хорошая, потому что:

  • \(a_1 = 0\), и в \([p_1] = [2]\) есть \(0\) значений \(\leq 1\);
  • \(a_2 = 2\), и есть \(2\) значения \(\leq 2\) в \([p_1, p_2] = [2, 1]\);
  • \(a_3 = 2\), и есть \(2\) значения \(\leq 3\) в \([p_1, p_2, p_3] = [2, 1, 5]\);
  • \(a_4 = 2\), и есть \(2\) значения \(\leq 4\) в \([p_1, p_2, p_3, p_4] = [2, 1, 5, 6]\);
  • \(a_5 = 4\), и есть \(4\) значения \(\leq 5\) в \([p_1, p_2, p_3, p_4, p_5] = [2, 1, 5, 6, 3]\);
  • \(a_6 = 6\), и есть \(6\) значений \(\leq 6\) в \([p_1, p_2, p_3, p_4, p_5, p_6] = [2, 1, 5, 6, 3, 4]\).

В третьем наборе входных данных нет хороших перестановок, потому что не существует перестановок с \(a_6 = 5\) значениями \(\leq 6\) в \([p_1, p_2, p_3, p_4, p_5, p_6]\).

F2. Небольшая задачка про перестановки (сложная версия)

дп Комбинаторика математика *2500

В простой версии задачи \(a_i\) находятся в диапазоне \([0, n]\); в сложной версии \(a_i\) находятся в диапазоне \([-1, n]\) и определение хорошей перестановки немного отличается. Вы можете делать взломы, только если обе версии задачи решены.

Вам дано целое число \(n\) и массив \(a_1, a_2, \dots, a_n\) целых чисел в диапазоне \([-1, n]\).

Перестановка \(p_1, p_2, \dots, p_n\) в \([1, 2, \dots, n]\) называется хорошей, если для каждого \(i\) верно следующее утверждение:

  • если \(a_i \neq -1\), то количество значений \(\leq i\) в \([p_1, p_2, \dots, p_i]\) в точности равно \(a_i\).

Посчитайте количество хороших перестановок \([1, 2, \dots, n]\) по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-1 \le a_i \le n\)), которые описывают критерии хорошей перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую количество хороших перестановок по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных все перестановки длины \(5\) являются хорошими, поэтому существует \(120\) хороших перестановок.

Во втором наборе входных данных единственной хорошей перестановкой является \([1, 2, 3, 4, 5]\).

В третьем наборе входных данных существует \(4\) хороших перестановки: \([2, 1, 5, 6, 3, 4]\), \([2, 1, 5, 6, 4, 3]\), \([2, 1, 6, 5, 3, 4]\), \([2, 1, 6, 5, 4, 3]\). Например, \([2, 1, 5, 6, 3, 4]\) — хорошая, потому что:

  • \(a_1 = 0\), и в \([p_1] = [2]\) есть \(0\) значений \(\leq 1\);
  • \(a_2 = 2\), и есть \(2\) значения \(\leq 2\) в \([p_1, p_2] = [2, 1]\);
  • \(a_3 = 2\), и есть \(2\) значения \(\leq 3\) в \([p_1, p_2, p_3] = [2, 1, 5]\);
  • \(a_4 = 2\), и есть \(2\) значения \(\leq 4\) в \([p_1, p_2, p_3, p_4] = [2, 1, 5, 6]\);
  • \(a_5 = -1\), поэтому на \([p_1, p_2, p_3, p_4, p_5]\) нет ограничений;
  • \(a_6 = -1\), поэтому на \([p_1, p_2, p_3, p_4, p_5, p_6]\) нет ограничений;

I. Короткая задача о перестановке

бпф дп Комбинаторика математика *1900

Вам дано целое число \(n\).

Для каждой пары \((m, k)\) такой, что \(3 \leq m \leq n+1\) и \(0 \leq k \leq n-1\), посчитайте количество перестановок элементов \([1, 2, ..., n]\) таких, что \(p_i + p_{i+1} \geq m\) для ровно \(k\) индексов \(i\), по модулю \(998\,244\,353\).

Входные данные

Входные данные состоят из одной строки, которая содержит два целых числа \(n\), \(x\) (\(2 \leq n \leq 4000\), \(1 \leq x < 1\,000\,000\,007\)).

Выходные данные

Пусть \(a_{m,k}\) - ответ для пары \((m, k)\), по модулю \(998\,244\,353\).

Пусть \(\)\large S = \sum_{m=3}^{n+1} \sum_{k=0}^{n-1} a_{m,k}x^{mn+k}\phantom{0}.\(\)

Выведите единственную строку с целым числом: \(S\) по модулю \(1\,000\,000\,007\).

Обратите внимание, что использование двух разных модулей является намеренным. Мы хотим, чтобы вы вычислили все \(a_{m,k}\) по модулю \(998\,244\,353\), затем обработали их как целые числа в диапазоне \([0, 998\,244\,352]\), и хэшировали их по модулю \(1\,000\,000\,007\).

Примечание

В первом примеры ответы для всех \((m, k)\) приведены в следующей таблице:

\(k = 0\)\(k = 1\)\(k = 2\)
\(m = 3\)\(0\)\(0\)\(6\)
\(m = 4\)\(0\)\(4\)\(2\)
  • Ответ для \((m, k) = (3, 2)\) равен \(6\), потому что для каждой перестановки длины \(3\), \(a_i + a_{i+1} \geq 3\) ровно \(2\) раза.
  • Ответ для \((m, k) = (4, 2)\) равен \(2\). Действительно, существует \(2\) перестановки длины \(3\) такие, что \(a_i + a_{i+1} \geq 4\) ровно \(2\) раза: \([1, 3, 2]\), \([2, 3, 1]\).

Таким образом, значение для вывода равно \(2^9 \cdot 0 + 2^{10} \cdot 0 + 2^{11} \cdot 6 + 2^{12} \cdot 0 + 2^{13} \cdot 4 + 2^{14} \cdot 2 \equiv 77\,824 \phantom{0} (\text{mod} \phantom{0} 1\,000\,000\,007)\).

Во втором примере ответы для всех \((m, k)\) приведены в следующей таблице:

\(k = 0\)\(k = 1\)\(k = 2\)\(k = 3\)
\(m = 3\)\(0\)\(0\)\(0\)\(24\)
\(m = 4\)\(0\)\(0\)\(12\)\(12\)
\(m = 5\)\(0\)\(4\)\(16\)\(4\)
  • Ответ для \((m, k) = (5, 1)\) — \(4\). Действительно, существует \(4\) перестановки длины \(4\) такие, что \(a_i + a_{i+1} \geq 5\) ровно \(1\) раз: \([2, 1, 3, 4]\), \([3, 1, 2, 4]\), \([4, 2, 1, 3]\), \([4, 3, 1, 2]\).

В третьем примере ответы для всех \((m, k)\) представлены в следующей таблице:

\(k = 0\)\(k = 1\)\(k = 2\)\(k = 3\)\(k = 4\)\(k = 5\)\(k = 6\)\(k = 7\)
\(m = 3\)\(0\)\(0\)\(0\)\(0\)\(0\)\(0\)\(0\)\(40320\)
\(m = 4\)\(0\)\(0\)\(0\)\(0\)\(0\)\(0\)\(10080\)\(30240\)
\(m = 5\)\(0\)\(0\)\(0\)\(0\)\(0\)\(1440\)\(17280\)\(21600\)
\(m = 6\)\(0\)\(0\)\(0\)\(0\)\(480\)\(8640\)\(21600\)\(9600\)
\(m = 7\)\(0\)\(0\)\(0\)\(96\)\(3456\)\(16416\)\(16896\)\(3456\)
\(m = 8\)\(0\)\(0\)\(48\)\(2160\)\(12960\)\(18240\)\(6480\)\(432\)
\(m = 9\)\(0\)\(16\)\(1152\)\(9648\)\(18688\)\(9648\)\(1152\)\(16\)

A. Династические головоломки

дп *1500

Древние берляндцы считали, что чем длиннее имя, тем важнее человек, его носящий. Берляндские цари славились своими длинными именами. Но длинные имена — это несколько неудобно, поэтому берляндцы стали сокращать имена своих царей. Каждого царя они называли по первым буквам всех его имен. Например, царя, которого звали Великий Василий Пупкин, берляндцы всегда зовут ВВП.

В Берляндии за её долгую историю сменилось немало династий царей, но все они были объединены общими традициями. Так, согласно одной из берляндских традиций, для поддержания стабильности в государстве, первое имя наследника должно совпадать с последним именем предшественника (следовательно, первая буква сокращенного имени наследника совпадает с последней буквой сокращенного имени предшественника). Берляндцы очень ценят стабильность, поэтому эта традиция никогда не нарушалась. Еще берляндцы любят завершенность, поэтому еще одна традиция требует того, чтобы первое имя первого царя в династии совпадало с последним именем последнего царя в этой династии (следовательно первая буква сокращенного имени первого царя совпадает с последней буквой сокращенного имени последнего царя). Эта традиция, естественно, тоже всегда соблюдалась.

Название династии образуется по очень простым правилам: берутся все сокращенные имена царей в том порядке, в котором они правили, и выписываются в одну строчку. К примеру, династия из царей «аb» и «ba» называется «abba», а династия, в которой был только царь «abca», называется «abca».

Историк Вася недавно нашел список сокращенных имен всех берляндских царей и их родственников. Помогите Васе найти максимально длинное название династии, которая могла существовать в Берляндии.

Заметим, что в списке все имена упорядочены по времени, то есть если имя A идет в списке раньше, чем имя B, то если A и B были царями, то царь A правил раньше, чем царь B.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 5·105) — количество имен в списке Васи. В следующих n сроках записано n кратких имен по одному в строке. Краткое имя — это непустая последовательность маленьких латинских букв. Его длина не превосходит 10 символов.

Выходные данные

Выведите единственное число — длину названия искомой династии в буквах.

Если список Васи оказался неправильным и ни одной династии в нем найти нельзя, выведите единственное число 0.

Примечание

В первом примере может существовать две династии: с названием «abcca» (в нее входят первый и второй цари) и с названием «abccba» (в нее входят первый и третий).

Во втором примере допустимых династий нет.

Единственная династия в третьем примере состоит из одного царя с именем «c».

E. Максимальная сумма подмассивов

*особая задача дп *2100

Заданы два массива целых чисел \(a\) и \(b\) длины \(n\).

Вы можете выполнить следующую операцию любое количество раз (возможно ноль): поменять местами \(a_i\) и \(b_i\).

Пусть \(f(c)\) – наибольшая сумма среди всех непрерывных подотрезков массива \(c\) (включая пустой подотрезок, сумма которого равна \(0\)).

Ваша задача — посчитать максимально возможное значение \(f(a) + f(b)\), используя вышеупомянутую операцию любое количество раз.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(-10^9 \le b_i \le 10^9\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное значение \(f(a) + f(b)\), используя вышеупомянутую операцию любое количество раз.

I. Обратная задача

*особая задача дп Комбинаторика *2700

Рассмотрим следующую задачу.

Дана строка \(s\), состоящая из \(n\) строчных латинских букв, и целое число \(k\) (\(n\) не делится на \(k\)). Каждая буква — это одна из \(c\) первых букв алфавита.

Вы применяете следующую операцию, пока длина строки больше \(k\): выбрать непрерывную подстроку строки длины ровно \(k\), удалить ее из строки и склеить полученные части вместе, не меняя порядка.

Пусть полученная строка длины строго меньше \(k\) будет \(t\). Какую лексикографически наименьшую строку \(t\) можно получить?

Вам же дается обратная задача. По двум целым числам \(n\) и \(k\) (\(n\) не делится на \(k\)) и строке \(t\), состоящей из (\(n \bmod k\)) строчных латинских букв, посчитайте количество строк \(s\), которые дают \(t\), как лексикографически наименьшее решение.

Выведите это количество по модулю \(998\,244\,353\).

Входные данные

В первой строке записаны три целых числа \(n, k\) и \(c\) (\(1 \le n \le 10^6\); \(2 \le k \le 10^6\); \(1 \le c \le 26\); \(n\) не делится на \(k\)) — длина строки \(s\), длина удаляемой подстроки и количество первых букв алфавита.

Во второй строке записана \(t\), состоящая из ровно (\(n \bmod k\)) строчных латинских букв. Каждая буква — это одна из \(c\) первых букв алфавита.

Выходные данные

Выведите одно целое число — количество строк \(s\), которые дают \(t\), как лексикографически наименьшее решение.

Примечание

Строки \(s\) в первом примере: «aaa», «aab», «aba», «abb», «baa», «bba».

Строки \(s\) во втором примере: «bcabc», «bcacc», «bcbbc», «bcbcc», «bccbc», «bcccc», «caabc», «cabbc», «cacbc», «cbabc», «cbbbc», «cbcbc», «ccabc», «ccbbc», «cccbc».

D. Схлопывание массива

Деревья дп разделяй и властвуй Структуры данных *2100

Вам дан массив \([p_1, p_2, \dots, p_n]\), где все элементы различны.

Вы можете выполнить несколько (возможно, ни одной) операций с ним. В одной операции вы можете выбрать непрерывный подотрезок \(p\) и удалить все элементы из этого подотрезка, кроме минимального элемента в этом подотрезке. Например, если \(p = [3, 1, 4, 7, 5, 2, 6]\) и вы выберете подотрезок от \(3\)-го элемента до \(6\)-го элемента, полученный массив будет \([3, 1, 2, 6]\).

Массив \(a\) называется достижимым, если его можно получить из \(p\) с помощью нескольких (возможно, нуля) вышеупомянутых операций. Вычислите количество достижимых массивов и выведите его по модулю \(998244353\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)). Вторая строка содержит \(n\) различных целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le 10^9\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — количество достижимых массивов, взятое по модулю \(998244353\).

D. Три активности

дп жадные алгоритмы Перебор реализация сортировки *1200

Приближаются зимние каникулы. Они будут длиться \(n\) дней.

Во время каникул Монокарп с друзьями хочет ровно по одному разу:

  • пойти кататься на лыжах;
  • посмотреть фильм в кинотеатре;
  • поиграть в настольные игры.

Монокарп знает, что в \(i\)-й день ровно \(a_i\) друзей соберутся на катание на лыжах, \(b_i\) друзей — на просмотр фильма и \(c_i\) друзей — на настольные игры.

Монокарп также знает, что он не может заниматься более чем одной активностью в течение одного дня.

Поэтому он просит вас помочь ему выбрать три различных дня \(x, y, z\) таким образом, чтобы общее количество друзей, присоединившихся к нему на активности (\(a_x + b_y + c_z\)), было максимальным.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого теста содержит одно целое число \(n\) (\(3 \le n \le 10^5\)) — продолжительность зимних каникул в днях.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^8\)) — количество друзей, которые присоединятся к Монокарпу для катания на лыжах в \(i\)-й день.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^8\)) — количество друзей, которые присоединятся к Монокарпу для просмотра фильма в \(i\)-й день.

Четвертая строка содержит \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^8\)) — количество друзей, которые присоединятся к Монокарпу для настольных игры в \(i\)-й день.

Сумма \(n\) по всем тестам не превышает \(10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — максимальное суммарное количество друзей, которые могут присоединиться к Монокарпу за три различных дня.

Примечание

В первом наборе входных данных Монокарп может выбрать день \(2\) для катания на лыжах, день \(1\) для просмотра фильма и день \(3\) для настольных игр. Таким образом, \(a_2 = 10\) друзей присоединятся к нему для катания на лыжах, \(b_1 = 10\) друзей присоединятся к нему для просмотра фильма и \(c_3 = 10\) друзей присоединятся к нему для настольных игр. Общее количество друзей составляет \(30\).

Во втором наборе Монокарп может выбрать день \(1\) для катания на лыжах, день \(4\) для просмотра фильма и день \(2\) для настольных игр. Всего соберется \(30 + 20 + 25 = 75\) друзей. Обратите внимание, что Монокарп не может выбрать день \(1\) для всех активностей, потому что он не может заниматься более чем одной активностью в течение одного дня.

В третьем наборе Монокарп может выбрать день \(2\) для катания на лыжах, день \(3\) для просмотра фильма и день \(7\) для настольных игр. Всего соберется \(19 + 19 + 17 = 55\) друзей.

В третьем наборе Монокарп может выбрать день \(1\) для катания на лыжах, день \(4\) для просмотра фильма и день \(9\) для настольных игр. Всего соберется \(17 + 19 + 20 = 56\) друзей.

F. Соревнование по программированию

Деревья дп жадные алгоритмы Паросочетания поиск в глубину и подобное *1900

BerSoft — крупнейшая IT-корпорация в Берляндии. В компании BerSoft работает \(n\) сотрудников, пронумерованных от \(1\) до \(n\).

Первый сотрудник является руководителем компании и у него нет начальника. У каждого другого сотрудника \(i\) есть ровно один непосредственный начальник \(p_i\).

Сотрудник \(x\) считается начальником (непосредственным или косвенным) сотрудника \(y\), если выполняется одно из следующих условий:

  • сотрудник \(x\) является непосредственным начальником сотрудника \(y\);
  • сотрудник \(x\) является начальником непосредственного начальника сотрудника \(y\).

Структура BerSoft организована таким образом, что руководитель компании является начальником для каждого сотрудника.

Скоро будет проведено соревнование по программированию. Для этой цели будут созданы команды из двух человек. Однако, если в команде один сотрудник является начальником другого, им будет некомфортно вместе. Поэтому команды из двух человек должны быть созданы таким образом, что никто не был начальником для другого. Обратите внимание, что никакой сотрудник не может участвовать более чем в одной команде.

Ваша задача — посчитать максимально возможное количество команд в соответствии с вышеописанными правилами.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество сотрудников.

Вторая строка содержит \(n-1\) целых чисел \(p_2, p_3, \dots, p_n\) (\(1 \le p_i \le n\)), где \(p_i\) — номер непосредственного начальника \(i\)-го сотрудника.

Сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное количество команд в соответствии с вышеописанными правилами.

Примечание

В первом примере можно создать команду \((3, 4)\).

Во втором примере команда не может быть создана, потому что здесь всего \(2\) сотрудника и один является начальником другого.

В третьем примере можно создать команду \((2, 3)\).

В четвертом примере можно создать команды \((2, 4)\), \((3, 5)\) и \((6, 7)\).

В пятом примере можно создать команды \((2, 3)\), \((6, 4)\) и \((5, 7)\).

G1. Лампочки (простая версия)

графы Деревья дп Комбинаторика математика Перебор поиск в глубину и подобное снм *2100

Простая и сложная версии этой задачи отличаются друг от друга только ограничениями на \(n\). В простой версии сумма значений \(n^2\) по всем наборам входных данных не превосходит \(10^6\). Кроме того, \(n\) не превосходит \(1000\) в каждом наборе входных данных.

В ряд расположены \(2n\) лампочек. У каждой лампочки есть цвет от \(1\) до \(n\) (ровно по две лампочки каждого цвета).

Изначально все лампочки выключены. Вы выбираете некоторое множество лампочек \(S\), которое вы изначально включите. После этого вы можете выполнять следующие операции в любом порядке любое количество раз:

  • выбрать две лампочки \(i\) и \(j\) одинакового цвета, ровно одна из которых включена, и включить вторую из них;
  • выбрать три лампочки \(i, j, k\), такие, что обе лампочки \(i\) и \(k\) включены и имеют одинаковый цвет, а лампочка \(j\) находится между ними (\(i < j < k\)), и включить лампочку \(j\).

Вы хотите выбрать такое множество лампочек \(S\), которые вы изначально включаете, чтобы путем выполнения описанных операций можно было добиться того, чтобы все лампочки оказались включены.

Посчитайте два числа:

  • минимальный размер множества \(S\), которое вы изначально включаете;
  • количество множеств \(S\) минимального размера (по модулю \(998244353\)).
Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 1000\)) — количество пар лампочек.

Во второй строке каждого набора заданы \(2n\) целых чисел \(c_1, c_2, \dots, c_{2n}\) (\(1 \le c_i \le n\)), где \(c_i\) — цвет \(i\)-й лампочки. Для каждого цвета от \(1\) до \(n\) ровно две лампочки имеют этот цвет.

Дополнительное ограничение на входные данные: сумма значений \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите два целых числа:

  • минимальный размер множества \(S\), которое вы изначально включаете;
  • количество множеств \(S\) минимального размера (по модулю \(998244353\)).

G2. Лампочки (сложная версия)

графы дп Комбинаторика поиск в глубину и подобное Структуры данных хэши *2300

Простая и сложная версии этой задачи отличаются друг от друга только ограничениями на \(n\). В сложной версии сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Кроме того, никаких дополнительных ограничений на значение \(n\) в одиночном наборе входных данных нет.

В ряд расположены \(2n\) лампочек. У каждой лампочки есть цвет от \(1\) до \(n\) (ровно по две лампочки каждого цвета).

Изначально все лампочки выключены. Вы выбираете некоторое множество лампочек \(S\), которое вы изначально включите. После этого вы можете выполнять следующие операции в любом порядке любое количество раз:

  • выбрать две лампочки \(i\) и \(j\) одинакового цвета, ровно одна из которых включена, и включить вторую из них;
  • выбрать три лампочки \(i, j, k\), такие, что обе лампочки \(i\) и \(k\) включены и имеют одинаковый цвет, а лампочка \(j\) находится между ними (\(i < j < k\)), и включить лампочку \(j\).

Вы хотите выбрать такое множество лампочек \(S\), которые вы изначально включаете, чтобы путем выполнения описанных операций можно было добиться того, чтобы все лампочки оказались включены.

Посчитайте два числа:

  • минимальный размер множества \(S\), которое вы изначально включаете;
  • количество множеств \(S\) минимального размера (по модулю \(998244353\)).
Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество пар лампочек.

Во второй строке каждого набора заданы \(2n\) целых чисел \(c_1, c_2, \dots, c_{2n}\) (\(1 \le c_i \le n\)), где \(c_i\) — цвет \(i\)-й лампочки. Для каждого цвета от \(1\) до \(n\) ровно две лампочки имеют этот цвет.

Дополнительное ограничение на входные данные: сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа:

  • минимальный размер множества \(S\), которое вы изначально включаете;
  • количество множеств \(S\) минимального размера (по модулю \(998244353\)).

G. Оптимизации из ЧелГУ

Деревья дп разделяй и властвуй теория чисел *3500

Вам дано дерево на \(n\) вершинах, вершины которого пронумерованы числами от \(1\) до \(n\). На каждом ребре записано некоторое целое число \(w_i\).

Определим \(len(u, v)\) как количество ребер в простом пути между вершинами \(u\) и \(v\), \(gcd(u, v)\) как Наибольший Общий Делитель всех чисел, записанных на ребрах простого пути между вершинами \(u\) и \(v\). Например, \(len(u, u) = 0\) и \(gcd(u, u) = 0\) для любого \(1 \leq u \leq n\).

Вам нужно найти наибольшее значение \(len(u, v) \cdot gcd(u, v)\) по всем парам вершин в дереве.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Во первой строке каждого набора входных данных дано число \(n\) (\(2 \leq n \leq 10^5\)) — количество вершин дерева.

В следующих \(n-1\) строках заданы ребра в формате \(u\), \(v\), \(w\) (\(1 \leq u, v \leq n\), \(1 \leq w \leq 10^{12}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число равное наибольшему значению \(len(u, v) \cdot gcd(u, v)\) по всем парам вершин в дереве.

H1. Ранг матрицы (Простая версия)

дп Комбинаторика математика матрицы Перебор *2700

Это простая версия задачи. Единственное отличие между двумя версиями этой задачи в ограничениях на \(k\). Вы можете делать взломы только если сданы обе версии задачи.

Вам даны целые числа \(n\), \(p\) и \(k\). Гарантируется, что \(p\) является простым числом.

Для каждого \(r\) от \(0\) до \(k\) найдите количество \(n \times n\) матриц \(A\) над полем\(^\dagger\) целых чисел по модулю \(p\), таких что ранг\(^\ddagger\) матрицы \(A\) в точности равен \(r\). Поскольку эти значения могут быть большими, вам требуется вывести их по модулю \(998\,244\,353\).

\(^\dagger\) https://en.wikipedia.org/wiki/Field_(mathematics)

\(^\ddagger\) https://en.wikipedia.org/wiki/Rank_(linear_algebra)

Входные данные

Первая строка ввода содержит три целых числа \(n\), \(p\) и \(k\) (\(1 \leq n \leq 10^{18}\), \(2 \leq p < 998\,244\,353\), \(0 \leq k \leq 5000\)).

Гарантируется, что \(p\) является простым числом.

Выходные данные

Выведите \(k+1\) целое число, ответы для каждого \(r\) от \(0\) до \(k\).

H2. Ранг матрицы (сложная версия)

дп Комбинаторика математика матрицы строковые суфф. структуры *2700

Это сложная версия задачи. Единственное различие между двумя версиями этой задачи в ограничениях на \(k\). Вы можете использовать взломы только если сданы обе версии задачи.

Вам даны целые числа \(n\), \(p\) и \(k\). Гарантируется, что \(p\) является простым числом.

Для каждого \(r\) от \(0\) до \(k\) найдите количество \(n \times n\) матриц \(A\) над полем\(^\dagger\) целых чисел по модулю \(p\), таких что ранг\(^\ddagger\) матрицы \(A\) в точности равен \(r\). Поскольку эти значения могут быть большими, вам требуется вывести их по модулю \(998\,244\,353\).

\(^\dagger\) https://en.wikipedia.org/wiki/Field_(mathematics)

\(^\ddagger\) https://en.wikipedia.org/wiki/Rank_(linear_algebra)

Входные данные

Первая строка ввода содержит три целых числа \(n\), \(p\) и \(k\) (\(1 \leq n \leq 10^{18}\), \(2 \leq p < 998\,244\,353\), \(0 \leq k \leq 5 \cdot 10^5\)).

Гарантируется, что \(p\) является простым числом.

Выходные данные

Выведите \(k+1\) целое число, ответы для каждого \(r\) от \(0\) до \(k\).

B. Удалить первый или второй символ

дп Комбинаторика Перебор Строки Структуры данных *1100

Вам дана строка \(s\) длины \(n\). Определим две операции, которые можно применить к строке:

  • удалить первый символ строки;
  • удалить второй символ строки.

Ваша задача — найти количество различных непустых строк, которые можно получить, применяя заданные операции над исходной строкой любое количество раз (возможно, нулевое), в любом порядке.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \leq n \leq 10^5\)) — длину строки.

Вторая строка каждого набора входных данных содержит строку \(s\). Гарантируется, что строка содержит только строчные буквы латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: количество различных непустых строк, которые вы можете получить.

Примечание

В первом наборе входных данных мы можем получить следующие строки: \(a\), \(aa\), \(aaa\), \(aaaa\), \(aaaaa\).

В третьем наборе входных данных, например, слово \(ba\) можно получить следующим образом:

  • удалить первый символ текущей строки \(ababa\), получив \(baba\);
  • удалить второй символ текущей строки \(baba\), получив \(bba\);
  • удалить второй символ текущей строки \(bba\), получив \(ba\).

D. Очередная задача про инверсии

дп Комбинаторика математика реализация Структуры данных теория чисел *2300

Вам даны перестановка \(p_0, p_1, \ldots, p_{n-1}\) нечётных чисел от \(1\) до \(2n-1\) и перестановка \(q_0, q_1, \ldots, q_{k-1}\) целых чисел от \(0\) до \(k-1\).

Определим массив \(a_0, a_1, \ldots, a_{nk-1}\) длины \(nk\) в соответствии со следующим правилом:

\(a_{i \cdot k+j}=p_i \cdot 2^{q_j}\) для всех \(0 \le i < n\) и всех \(0 \le j < k\)

Например, если \(p = [3, 5, 1]\) и \(q = [0, 1]\), то \(a = [3, 6, 5, 10, 1, 2]\).

Обратите внимание, что все массивы в условии нумеруются с нуля. Также обратите внимание, что каждый элемент массива \(a\) определён однозначно.

Найдите количество инверсий в массиве \(a\). Так как ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

Инверсией в массиве \(a\) называется пара \((i, j)\) (\(0 \le i < j < nk\)), такая что \(a_i > a_j\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два числа \(n\) и \(k\) (\(1 \le n, k \le 2 \cdot 10^5\)) — длины массивов \(p\) и \(q\).

Вторая строка каждого набора содержит \(n\) различных целых чисел \(p_0, p_1, \ldots, p_{n-1}\) (\(1 \le p_i \le 2n-1\), \(p_i\) нечётно) — массив \(p\).

Третья строка каждого набора содержит \(k\) различных целых чисел \(q_0, q_1, \ldots, q_{k-1}\) (\(0 \le q_i < k\)) — массив \(q\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), и что сумма \(k\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — количество инверсий в массиве \(a\) по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных массив \(a\) равен \([3, 6, 5, 10, 1, 2]\). В нём есть \(9\) инверсий: \((0, 4)\), \((0, 5)\), \((1, 2)\), \((1, 4)\), \((1, 5)\), \((2, 4)\), \((2, 5)\), \((3, 4)\), \((3, 5)\). Обратите внимание, что здесь перечислены пары \((i, j)\), такие что \(i < j\) и \(a_i > a_j\).

Во втором наборе входных данных массив \(a\) равен \([8, 4, 1, 2, 24, 12, 3, 6, 40, 20, 5, 10]\). В нём \(25\) инверсий.

В третьем наборе входных данных массив \(a\) равен \([1, 2, 4, 8, 16]\). В нём нет инверсий.

F. Постройте дерево

битмаски Деревья дп Конструктив *2500

Вам дан массив целых чисел \(l_1, l_2, \dots, l_n\) и целое число \(d\). Можно ли построить дерево, удовлетворяющее следующим трем условиям?

  • Дерево содержит \(n + 1\) вершину.
  • Длина \(i\)-го ребра равна \(l_i\).
  • (Взвешенный) диаметр дерева равен \(d\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 250\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(d\) (\(2 \leq n \leq 2000, 1 \leq d \leq 2000\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(1 \leq l_i \leq d\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите \(\texttt{Yes}\), если возможно построить дерево, удовлетворяющее всем условиям, и \(\texttt{No}\) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Ниже приведены иллюстрации деревьев для первого и третьего наборов входных данных. Один из диаметров выделен путем окрашивания его ребер в красный цвет.

D. Блокировка элементов

Бинарный поиск дп реализация Структуры данных *1900

Вам дан массив чисел \(a_1, a_2, \ldots, a_n\). Ваша задача — заблокировать некоторые элементы массива так, чтобы минимизировать его стоимость. Допустим, вы заблокировали элементы с индексами \(1 \leq b_1 < b_2 < \ldots < b_m \leq n\). Тогда стоимость массива вычисляется как максимум из:

  • суммы заблокированных элементов, то есть \(a_{b_1} + a_{b_2} + \ldots + a_{b_m}\).
  • максимума из сумм на частях, на которые распадается массив, если удалить заблокированные элементы. То есть максимум из сумм на следующем (\(m + 1\))-ом подотрезке: [\(1, b_1 − 1\)], [\(b_1 + 1, b_2 − 1\)], [\(\ldots\)], [\(b_{m−1} + 1, b_m - 1\)], [\(b_m + 1, n\)] (сумма чисел на подотрезке вида [\(x,x − 1\)] полагается равной \(0\)).

К примеру, если \(n = 6\), исходный массив равен [\(1, 4, 5, 3, 3, 2\)], и вы заблокировали элементы на позициях \(2\) и \(5\), то стоимость массива будет равна максимуму из суммы заблокированных элементов (\(4 + 3 = 7\)) и сумм на отрезках (\(1\), \(5 + 3 = 8\), \(2\)) что равно \(\max(7,1,8,2) = 8\).

Вам нужно вывести минимальную стоимость массива после блокировки.

Входные данные

В первой строке входных данных вводится одно число \(t\) (\(1 \leq t \leq 30\,000\)) — количество запросов.

Каждый набор входных данных состоит из двух строк. В первой строке вводится число \(n\) (\(1 \leq n \leq 10^5\)) — длина массива \(a\). Во второй строке вводится \(n\) элементов \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальную стоимость блокировки массива.

Примечание

Первый набор совпадает с массивом из условия. Чтобы получить стоимость \(7\) нужно заблокировать элементы на позициях \(2\) и \(4\), В таком случае стоимость массива вычислится как максимум из:

  • суммы заблокированных элементов, которая равна \(a_2 + a_4 = 7\).
  • максимума из сумм на частях, на которые распадается массив, если убрать заблокированные, то есть максимум из \(a_1\), \(a_3\), \(a_5 + a_6 = \max(1,5,5) = 5\).

То есть стоимость равна \(\max(7,5) = 7\).

Во втором наборе можно заблокировать элементы на позициях \(1\) и \(4\).

В третьем наборе чтобы получить ответ \(11\) можно заблокировать элементы на позициях \(2\) и \(5\). Есть и другие способы получить такой ответ, например заблокировать позиции \(4\) и \(6\).

C. Увеличения в группах

дп жадные алгоритмы Структуры данных *1400

Дан массив \(a\) длины \(n\). Чтобы вычислить штраф, нужно выполнить следующие действия:

  1. Разбить массив \(a\) на две (возможно, пустых) подпоследовательности \(^\dagger\) \(s\) и \(t\) такие, что каждый элемент \(a\) находится либо в \(s\), либо в \(t^\ddagger\).
  2. Для массива \(b\) длины \(m\) определим штраф \(p(b)\) массива \(b\) как количество индексов \(i\) между \(1\) и \(m - 1\) таких, что \(b_i < b_{i + 1}\).
  3. Общий штраф, который вы получите, равен \(p(s) + p(t)\).

Найдите минимально возможный штраф, который вы получите, если выполните вышеописанные действия оптимально.

\(^\dagger\) Последовательность \(x\) является подпоследовательностью \(y\), если \(x\) может быть получена из \(y\) удалением нескольких (возможно, ни одного или всех) элементов.

\(^\ddagger\) Некоторыми допустимыми способами разбиения массива \(a=[3,1,4,1,5]\) на \((s,t)\) являются \(([3,4,1,5],[1])\), \(([1,1],[3,4,5])\) и \(([\,],[3,1,4,1,5])\), в то время как некоторыми недопустимыми способами разбиения \(a\) являются \(([3,4,5],[1])\), \(([3,1,4,1],[1,5])\) и \(([1,3,4],[5,1])\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число, представляющее собой минимальный возможный штраф, который вы можете получить.

Примечание

В первом наборе входных данных возможный способ разбиения \(a\) — \(s=[2,4,5]\) и \(t=[1,3]\). Штраф равняется \(p(s)+p(t)=2 + 1 =3\).

Во втором наборе входных данных возможный способ разбиения \(a\) — \(s=[8,3,1]\) и \(t=[2,1,7,4,3]\). Штраф равняется \(p(s)+p(t)=0 + 1 =1\).

В третьем наборе входных данных возможным способом разбиения \(a\) является \(s=[\,]\) и \(t=[3,3,3,3,3]\). Штраф равняется \(p(s)+p(t)=0 + 0 =0\).

E. Подсчёт префиксов

дп Комбинаторика Конструктив математика реализация *2600

Есть неизвестный массив \(a\) длины \(n\), состоящий только из \(1\) и \(-1\). Пусть \(p\) — массив префиксных сумм массива \(a\). Более формально, \(p\) — это массив длины \(n\), в котором \(p_i = a_1 + a_2 + \ldots + a_i\). После этого массив \(p\) сортируется в неубывающем порядке. Например, если \(a = [1, -1, -1, 1, 1]\), то \(p = [1, 0, -1, 0, 1]\) до сортировки и \(p = [-1, 0, 0, 1, 1]\) после сортировки.

Вам дан массив префиксных сумм \(p\) после сортировки, но вы не знаете, чему был равен массив \(a\). Ваша задача — посчитать количество исходных массивов \(a\), для которых в результате сортировки массива префиксных сумм получается заданный массив \(p\). Поскольку это число может быть большим, от вас требуется только найти его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — длину неизвестного массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(|p_i| \le n\)) — \(n\) префиксных сумм массива \(a\), отсортированных в порядке неубывания.

Гарантируется, что \(p_1 \le p_2 \le \ldots \le p_n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите ответ по модулю \(998\,244\,353\).

Примечание

В первых двух наборах входных данных единственными возможными массивами \(a\) для \(n = 1\) являются \(a = [1]\) и \(a = [-1]\). Соответствующие им отсортированные массивы префиксных сумм \(p\) — \(p = [1]\) и \(p = [-1]\). Следовательно, не существует массива \(a\), который может привести к отсортированному массиву префиксных сумм \(p = [0]\). Но существует ровно \(1\) массив \(a\), который может привести к отсортированному массиву префиксных сумм \(p = [1]\).

В третьем наборе входных данных можно доказать, что не существует массива \(a\), который мог бы привести к отсортированному массиву префиксных сумм \(p = [-1, 1, 2]\).

В четвертом наборе входных данных существует \(3\) возможных массива \(a\), которые могут привести к отсортированному массиву префиксных сумм \(p = [-1, 0, 0, 1, 1]\).

  • \(a = [1, -1, 1, -1, -1]\). Массив префиксных сумм до сортировки равен \(p = [1, 0, 1, 0, -1]\), а после сортировки \(p = [-1, 0, 0, 1, 1]\).
  • \(a = [1, -1, -1, 1, 1]\). Массив префиксных сумм до сортировки равен \(p = [1, 0, -1, 0, 1]\), а после сортировки \(p = [-1, 0, 0, 1, 1]\).
  • \(a = [-1, 1, 1, -1, 1]\). Массив префиксных сумм до сортировки равен \(p = [-1, 0, 1, 0, 1]\), а после сортировки \(p = [-1, 0, 0, 1, 1]\).

Для пятого набора входных данных единственным возможным массивом \(a\), который может привести к отсортированному массиву префиксных сумм \(p = [-4, -3, -3, -2, -1]\), является \(a = [-1, -1, -1, -1, 1]\).

F2. Винный завод (сложная версия)

дп жадные алгоритмы матрицы Потоки Структуры данных *2800

Это сложная версия задачи. Единственное различие между двумя версиями заключается в ограничениях на \(c_i\) и \(z\). Вы можете делать взломы, только если обе версии задачи решены.

Даны три массива \(a\), \(b\) и \(c\). \(a\) и \(b\) имеют длину \(n\), а \(c\) — длину \(n-1\). Обозначим за \(W(a,b,c)\) количество литров вина, произведённых в результате следующего процесса.

Построим \(n\) водонапорных башен. Изначально \(i\)-я водонапорная башня имеет \(a_i\) литров воды, и перед ней стоит волшебник с силой \(b_i\). Кроме того, для каждого \(1 \le i \le n - 1\) существует клапан, соединяющий водонапорную башню \(i\) с \(i + 1\), и имеющий пропускную способность \(c_i\).

Для каждого \(i\) от \(1\) до \(n\) в этом порядке происходит следующее:

  1. Волшебник, стоящий перед водонапорной башней \(i\), забирает из башни не более \(b_i\) литров воды и превращает забранную воду в вино.
  2. Если \(i \neq n\), то не более \(c_i\) литров воды, оставшейся в водонапорной башне \(i\), вытекает через клапан в водонапорную башню \(i + 1\).

Дано \(q\) обновлений. В каждом обновлении вам будут даны целые числа \(p\), \(x\), \(y\) и \(z\), означающие следующие изменения: \(a_p := x\), \(b_p := y\) и \(c_p := z\). После каждого обновления найдите значение \(W(a,b,c)\). Обратите внимание, что предыдущие обновления массивов \(a\), \(b\) и \(c\) сохраняются во всех последующих обновлениях.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 5\cdot 10^5\), \(1 \le q \le 5\cdot 10^5\)) — количество водонапорных башен и количество обновлений.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — количество литров воды в водонапорной башне \(i\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i \le 10^9\)) — сила волшебника перед водонапорной башней \(i\).

Четвертая строка содержит \(n - 1\) целых чисел \(c_1, c_2, \ldots, c_{n - 1}\) (\(0 \le c_i \color{red}{\le} 10^{18}\)) — пропускная способность трубы, соединяющей водонапорную башню \(i\) с \(i + 1\).

Каждая из следующих \(q\) строк содержит четыре целых числа \(p\), \(x\), \(y\) и \(z\) (\(1 \le p \le n\), \(0 \le x, y \le 10^9\), \(0 \le z \color{red}{\le} 10^{18}\)) — обновления массивов \(a\), \(b\) и \(c\).

Заметим, что \(c_n\) не существует, поэтому величина \(z\) не имеет значения при \(p = n\).

Выходные данные

Выведите \(q\) строк, каждая из которых содержит одно целое число, равняющееся \(W(a, b, c)\) после каждого обновления.

Примечание

Первое обновление не вносит никаких изменений в массивы.

  • Для \(i = 1\), в башне 1 находится \(3\) литра воды, и \(1\) литр воды превращается в вино. Оставшиеся \(2\) литра воды перетекают в башню 2.
  • Для \(i = 2\), в башне 2 находится \(5\) литров воды, и \(4\) литра воды превращаются в вино. Оставшийся \(1\) литр воды попадает в башню 3.
  • Для \(i = 3\), в башне 3 находится \(4\) литра воды, и \(2\) литра воды превращаются в вино. Несмотря на то, что осталось \(2\) литра воды, в башню 4 может попасть только \(1\) литр воды.
  • Для \(i = 4\), в башне 4 находится \(4\) литра воды. Все \(4\) литра воды превращаются в вино.

Следовательно, \(W(a,b,c)=1 + 4 + 2 + 4 = 11\) после первого обновления.

Второе обновление изменяет массивы на \(a = [3, 5, 3, 3]\), \(b = [1, 1, 2, 8]\) и \(c = [5, 1, 1]\).

  • Для \(i = 1\), в башне 1 находится \(3\) литра воды, и \(1\) литр воды превращается в вино. Оставшиеся \(2\) литра воды перетекают в башню 2.
  • Для \(i = 2\), в башне 2 находится \(7\) литров воды, и \(1\) литр воды превращается в вино. Несмотря на то, что осталось \(6\) литров воды, только \(1\) литр воды может попасть в башню 3.
  • Для \(i = 3\), в башне 3 находится \(4\) литра воды, и \(2\) литра воды превращаются в вино. Несмотря на то, что осталось \(2\) литра воды, только \(1\) литр воды может попасть в башню 4.
  • Для \(i = 4\), в башне 4 находится \(4\) литра воды. Все \(4\) литра воды превращаются в вино.

Следовательно, \(W(a,b,c)=1 + 1 + 2 + 4 = 8\) после второго обновления.

Третье обновление изменяет массивы на \(a = [3, 5, 0, 3]\), \(b = [1, 1, 0, 8]\) и \(c = [5, 1, 0]\).

  • Для \(i = 1\), в башне 1 находится \(3\) литра воды, и \(1\) литр воды превращается в вино. Оставшиеся \(2\) литра воды перетекают в башню 2.
  • Для \(i = 2\), в башне 2 находится \(7\) литров воды, и \(1\) литр воды превращается в вино. Несмотря на то, что осталось \(6\) литров воды, только \(1\) литр воды может попасть в башню 3.
  • Для \(i = 3\) в башне 3 находится \(1\) литр воды, и \(0\) литров воды превращается в вино. Несмотря на то, что в башне остался \(1\) литр воды, в башню 4 вода не поступает.
  • Для \(i = 4\), в башне 4 находится \(3\) литра воды. Все \(3\) литра воды превращаются в вино.

Следовательно, \(W(a,b,c)=1 + 1 + 0 + 3 = 5\) после третьего обновления.

E. Подсчёт бинарных строк

дп Комбинаторика математика *2100

Патрик называет подстроку\(^\dagger\) бинарной строки\(^\ddagger\) хорошей, если эта подстрока содержит ровно одну 1.

Помогите Патрику посчитать количество бинарных строк \(s\), таких что \(s\) содержит ровно \(n\) хороших подстрок и не имеет хороших подстрок длины строго больше \(k\). Обратите внимание, что подстроки различаются по их расположению в строке, например, если \(s =\) 1010, вы должны посчитать оба вхождения 10.

\(^\dagger\) Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

\(^\ddagger\) Бинарная строка — это строка, которая содержит только символы 0 и 1.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 2500\), \(1 \leq k \leq n\)) — количество требуемых хороших подстрок и максимальная допустимая длина хорошей подстроки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество бинарных строк \(s\), таких что \(s\) содержит ровно \(n\) хороших подстрок и не имеет хороших подстрок длины строго больше \(k\). Поскольку это число может быть слишком большим, выведите его по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных единственной подходящей бинарной строкой является 1. Строка 01 не подходит, потому что она содержит подстроку 01 длины \(2 > 1\).

Во втором наборе входных данных подходящими бинарными строками являются 011, 110 и 111.

В третьем наборе входных данных подходящими бинарными строками являются 101, 0110, 0111, 1110, 1111.

F. Сумма на прогрессии

дп математика Перебор реализация Структуры данных *1900

Дан массив \(a\) из \(n\) чисел. Также есть \(q\) запросов вида \(s, d, k\).

Для каждого из \(q\) запросов найдите сумму элементов \(a_s + a_{s+d} \cdot 2 + \dots + a_{s + d \cdot (k - 1)} \cdot k\). Иными словами, для каждого запроса нужно найти сумму \(k\) элементов массива с индексами начиная с \(s\)-го, делая шаги, равные \(d\), умножая на порядковый номер элемента в полученной последовательности.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит два числа \(n, q\) (\(1 \le n \le 10^5, 1 \le q \le 2 \cdot 10^5\)) — количество чисел в массиве \(a\) и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1, ... a_n\) (\(-10^8 \le a_1, ..., a_n \le 10^8\)) — элементы массива \(a\).

Следующие \(q\) строк содержат по три целых числа \(s\), \(d\) и \(k\) (\(1 \le s, d, k \le n\), \(s + d\cdot (k - 1) \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам не превосходит \(10^5\), и что сумма значений \(q\) по всем наборам не превосходит \(2 \cdot 10^5 \).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(q\) чисел — желаемые суммы, разделенные пробелом.

G. Озорной стрелок

дп Перебор разделяй и властвуй реализация Структуры данных *2200

Однажды непутёвый озорной стрелок по имени Шел попал на прямоугольное поле размером \(n \times m\), разбитое на единичные квадратики. В каждой из клеток либо стоит мишень, либо нет.

С собой у Шел оказался только счастливый дробовик, из которого можно выстрелить в одну из четырёх сторон: вправо-вниз, влево-вниз, влево-вверх или вправо-вверх. При выстреле дробовик поражает все мишени в выбранном направлении, Манхэттенское расстояние до которых не больше фиксированной для дробовика константы \(k\). Манхэттенское расстояние между двумя точками \((x_1, y_1)\) и \((x_2, y_2)\) равно \(|x_1 - x_2| + |y_1 - y_2|\).

Возможные области поражения для \(k = 3\).

Цель Шел — поразить как можно большее количество мишеней. Помогите ему, пожалуйста, найти это значение.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

На ввод в первой строчке даются размеры поля \(n\), \(m\) и константа для мощности дробовика \(k\) (\(1 \le n, m, k \le 10^5, 1 \le n \cdot m \le 10^5\)).

В следующих \(n\) строках даётся \(m\) символов — описание очередной строки поля, где символ '.' означает, что клетка пуста, а символ '#' означает наличие мишени. Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно число, которое равно максимально возможному количеству поражённых мишеней за один выстрел.

Примечание

Возможные оптимальные выстрелы для примеров из условия:

F. Замена на подотрезке

дп Паросочетания *2500

Вам дан массив \(a_1, a_2, \dots, a_n\), где каждый элемент является целым числом от \(1\) до \(x\).

Вы можете выполнять следующую операцию любое количество раз:

  • выберите три целых числа \(l\), \(r\) и \(k\) таких, что \(1 \le l \le r \le n\), \(1 \le k \le x\) и каждый элемент \(a_i\), для которого \(l \le i \le r\), отличается от \(k\). Затем для каждого \(i \in [l, r]\) замените \(a_i\) на \(k\).

Другими словами, вы выбираете подотрезок массива и целое число от \(1\) до \(x\), которое не встречается в этом подотрезке, и заменяете каждый элемент в подотрезке на это выбранное число.

Ваша цель — сделать все элементы в массиве равными. Какое минимальное количество операций вам нужно выполнить?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит два целых числа \(n\) и \(x\) (\(1 \le x \le n \le 100\));
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le x\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(500\).

Выходные данные

Для каждого теста выведите одно целое число — минимальное количество операций, которые вам нужно выполнить.

B. Монстры атакуют!

дп жадные алгоритмы реализация *1100

Вы играете в компьютерную игру. Текущий уровень этой игры можно представить в виде прямой линии. Ваш персонаж находится в точке \(0\). Есть \(n\) монстров, пытающихся убить вашего персонажа; у \(i\)-го монстра здоровье равно \(a_i\) и изначально он находится в точке \(x_i\).

Каждую секунду происходит следующее:

  • сначала вы стреляете до \(k\) пуль в монстров. Каждая пуля нацеливается только на одного монстра и уменьшает его здоровье на \(1\). Для каждой пули вы выбираете ее цель произвольно (например, вы можете выстрелить все пули в одного монстра, выстрелить все пули в разных монстров или выбрать любую другую комбинацию). Любой монстр может быть целью для пули, независимо от его положения и других факторов;
  • затем все живые монстры со здоровьем \(0\) или менее умирают;
  • затем все живые монстры перемещаются на \(1\) точку ближе к вам (монстры слева от вас увеличивают свои координаты на \(1\), монстры справа от вас уменьшают свои координаты на \(1\)). Если какой-либо монстр достигает вашего персонажа (перемещается в точку \(0\)), вы проигрываете.

Сможете ли вы выжить и убить всех \(n\) монстров, не дав им достичь вашего персонажа?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 3 \cdot 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 3 \cdot 10^5\); \(1 \le k \le 2 \cdot 10^9\));
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\));
  • третья строка содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(-n \le x_1 < x_2 < x_3 < \dots < x_n \le n\); \(x_i \ne 0\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите YES, если вы можете убить всех \(n\) монстров до того, как они достигнут вашего персонажа, или NO в противном случае.

Вы можете выводить каждую букву в любом регистре (как строчную или как заглавную). Например, строки yEs, yes, Yes и YES будут приняты как положительный ответ.

Примечание

В первом примере вы можете поступить следующим образом:

  • в течение \(1\)-й секунды выстрелить \(1\) пулю в \(1\)-го монстра и \(1\) пулю в \(3\)-го монстра. Затем \(1\)-й монстр умирает, \(2\)-й и \(3\)-й монстры приближаются;
  • в течение \(2\)-й секунды выстрелить \(2\) пули во \(2\)-го монстра. Затем \(2\)-й монстр умирает, \(3\)-й монстр приближается;
  • в течение \(3\)-й секунды выстрелить \(2\) пули в \(3\)-го монстра. Затем \(3\)-й монстр умирает.

Во втором примере вы можете выстрелить только \(1\) пулю, поэтому вы можете убить только одного из двух монстров в течение \(1\)-й секунды. Затем оставшийся монстр приближается и убивает вашего персонажа.

E. Посчитай пути

графы Деревья дп поиск в глубину и подобное снм Структуры данных *2000

Вам дано дерево, состоящее из \(n\) вершин, пронумерованных от \(1\) до \(n\). Каждая вершина окрашена в некоторый цвет, обозначенный целым числом от \(1\) до \(n\).

Простой путь в дереве называется красивым, если:

  • он состоит хотя бы из \(2\) вершин;
  • первая и последняя вершины пути имеют одинаковый цвет;
  • ни одна другая вершина на пути не имеет такой же цвет, как и первая вершина.

Посчитайте количество красивых простых путей в дереве. Обратите внимание, что пути считаются ненаправленными (то есть путь из \(x\) в \(y\) — это то же самое, что и путь из \(y\) в \(x\)).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого теста записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Во второй строке записаны \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le n\)) — цвет каждой вершины.

В \(i\)-й из следующих \(n - 1\) строк записаны два целых числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\); \(v_i \neq u_i\)) — \(i\)-е ребро дерева.

Данные ребра образуют валидное дерево. Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество красивых простых путей в дереве.

A. Покрыли ли мы всё?

дп жадные алгоритмы Конструктив кратчайшие пути Строки *1500

Вам дано два целых числа \(n\) и \(k\) вместе со строкой \(s\).

Ваша задача состоит в том, чтобы проверить, входят ли все возможные строки длины \(n\), которые могут быть получены из первых \(k\) прописных букв латинского алфавита, как подпоследовательности в \(s\). Если ответ NO, вам необходимо также найти строку длины \(n\) из первых \(k\) прописных букв латинского алфавита такую, что она не входит как подпоследовательность в \(s\).

Если существует несколько ответов — выведите любой.

Примечание: Строка \(a\) называется подпоследовательностью другой строки \(b\), если \(a\) может быть получена удалением нескольких (возможно нуля) символов из \(b\) без изменения порядка оставшихся символов.

Входные данные

В первой строке содержится одно целое число \(t \, (1 \le t \le 10^5)\) количество наборов входных данных.

Первая строка каждого набора входных данных содержит \(3\) целых числа \(n \, (1 \le n \le 26), \: k \, (1 \le k \le 26), \: m \, (1 \le m \le 1000)\) где \(n\) и \(k\) означают то же, что и в условии, а \(m\) означает длину строки \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(m\), состоящую только из первых \(k\) прописных букв латинского алфавита.

Гарантируется, что сумма \(m\) и сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите YES если все возможные строки длины \(n\) состоящие только из первых \(k\) прописных букв латинского алфавита присутствуют как подпоследовательность в \(s\), а иначе выведите NO.

Если ваш ответ NO, дополнительно выведите строку длины \(n\), которая состоит только из первых \(k\) прописных букв латинского алфавита, и не входит как подпоследовательность \(s\), в следующей строке.

Вы можете писать каждую букву YES и NO в любом регистре (например, YES, yES, YeS будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных все возможные строки (aa, ab, ba, bb) длины \(2\), которые могут быть получены из первых \(2\) прописных букв латинского алфавита, присутствуют как подпоследовательности в строке abba.

Во втором наборе входных данных строка aa не является подпоследовательностью abb.

D. Сбалансированные подпоследовательности

дп Комбинаторика математика *2700

Последовательность скобок называется сбалансированной, если ее можно превратить в правильное математическое выражение, добавив символы '+' и '1'. Например, последовательности '(())()', '()', и '(()(()))' сбалансированы, в то время как ')(', '(()', и '(()))(' — нет.

Подпоследовательность — это последовательность, которую можно получить из данной последовательности, удалив ноль или более элементов, и не меняя порядок оставшихся элементов.

Даны три целых числа \(n\), \(m\) и \(k\). Найдите количество последовательностей, состоящих из \(n\) '(' и \(m\) ')', таких, что самая длинная сбалансированная подпоследовательность имеет длину \(2 \cdot k\). Поскольку ответ может быть большим, вычислите его по модулю \(1\,000\,000\,007\) (\(10^9 + 7\)).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов \(t\) (\(1 \le t \le 3 \cdot 10^3\)). Затем следуют их описания.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \le n, m, k \le 2 \cdot 10^3\)).

Выходные данные

Для каждого тестового случая выведите одно целое число — ответ на задачу.

Примечание

Для первого тестового случая "()()", "(())"\(2\) последовательности

Для второго тестового случая невозможна ни одна последовательность.

Для третьего тестового случая "))()(", "))(()", ")())(", "()))("\(4\) последовательности.

F. Анти-прокси посещаемость

дп интерактив Конструктив Тернарный поиск *3500

Это интерактивная задача!

Мистер 1048576 — один из тех преподавателей, который ненавидит тратить время на ведение посещаемости. Вместо того чтобы вести посещаемость традиционным способом, он решил попробовать что-то новое сегодня.

В его классе \(n\) студентов с номерами от \(1\) до \(n\). Он точно знает, что сегодня отсутствует ровно \(1\) студент. Чтобы определить, кто отсутствует, он может задать некоторые запросы классу. В каждом запросе он может указать два целых числа \(l\) и \(r\) (\(1\leq l\leq r\leq n\)), и все студенты, чьи номера от \(l\) до \(r\) (включительно), поднимут руки. Затем он подсчитывает их, чтобы определить, лежит ли номер отсутствующего студента между этими значениями.

Все было хорошо, пока его ассистент не заметил что-то странное — студенты нечестные! Некоторые студенты, чьи номера находятся в указанном диапазоне, могут не поднимать руки, в то время как другие студенты, чьи номера не находятся в указанном диапазоне, могут поднять руки и дать прокси-посещаемость за кого-то другого. Но они не хотят вызывать подозрений. Таким образом, возможны только следующие \(4\) случая для конкретного запроса \((l,r)\)

  1. Истинно положительный: присутствуют \(r-l+1\) студент и \(r-l+1\) студент подняли руки.
  2. Истинно отрицательный: присутствуют \(r-l\) студентов и \(r-l\) студентов подняли руки.
  3. Ложно положительный: присутствуют \(r-l\) студентов, но \(r-l+1\) студент поднял руку.
  4. Ложно отрицательный: присутствуют \(r-l+1\) студент, но \(r-l\) студентов поднял руку.

В первых двух случаях студенты считаются отвечающими честно, в то время как в последних двух случаях студенты считаются отвечающими нечестно. Студенты могут взаимно решить свою стратегию, неизвестную мистеру 1048576. Кроме того, студенты не хотят вызывать подозрений и в то же время хотят создать много путаницы. Поэтому их стратегия всегда соответствует следующим двум условиям —

  1. Студенты никогда не будут отвечать честно \(3\) раза подряд.
  2. Студенты никогда не будут отвечать нечестно \(3\) раза подряд.

Мистер 1048576 раздосадован таким поведением студентов. Поэтому он готов отметить как минимум \(2\) студентов как отсутствующих (хотя он знает, что отсутствует только один). Посещаемость считается успешной, если отсутствующий студент находится среди этих двух. Кроме того, из-за ограниченного времени на занятия, он может задать не более \(\lceil\log_{1.116}{n}\rceil-1\) запросов (странное число, но ладно). Помогите ему завершить успешную посещаемость.

Протокол взаимодействия

Сначала прочтите строку, содержащую одно целое число \(t\) (\(1\leq t\leq 2048\)), обозначающее количество независимых тестов, которые вы должны решить.

Для каждого теста сначала прочтите строку, содержащую одно целое число \(n\) (\(3\leq n\leq 10^5\)). Затем вы можете задать до \(\lceil\log_{1.116}{n}\rceil-1\) запросов.

Чтобы задать запрос, напечатайте одну строку в формате "? l r" (без кавычек) \((1\leq l\leq r\leq n)\). Затем прочтите одну строку, содержащую одно целое число \(x\) (\(r-l\leq x\leq r-l+1\)), обозначающее количество студентов, поднявших руки в ответ на запрос.

Чтобы отметить студента как отсутствующего, напечатайте одну строку в формате "! a" (без кавычек) \((1\leq a\leq n)\). Затем прочтите одно целое число \(y\) (\(y\in\{0,1\}\)). Если студент с номером \(a\) отсутствовал, \(y=1\), в противном случае, \(y=0\). Обратите внимание, что эта операция не считается запросом, но вы можете выполнить эту операцию не более \(2\) раз.

Чтобы завершить тест, напечатайте одну строку в формате "#" (без кавычек). Затем вы должны продолжить решать оставшиеся тесты.

Обратите внимание, что если вы зададите больше запросов, или запрос будет невалидным — вы получите вердикт Wrong answer.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(10^5\).

После вывода ответов не забудьте вывести конец строки и очистить буфер вывода. В противном случае вы получите вердикт Idleness limit exceeded. Чтобы очистить буфер, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • Прочтите документацию для других языков.

Формат ввода для взломов

Тесты для этой задачи используют как неадаптивные, так и адаптивные тесты. Вы можете использовать неадаптивный тест для проведения взломов.

Первая строка ввода содержит одно целое число \(t\) (\(1\leq t\leq 2048\)).

Первая строка каждого теста содержит три целых числа \(g\), \(n\) и \(x\), где \(g=1\) (для идентификации того, что этот тест должен использовать неадаптивный алгоритм), \(n\) (\(3\leq n\leq 10^5\)) означает количество студентов в классе, и \(x\) (\(1\leq x\leq n\)) означает номер студента, который отсутствует. Вы должны учесть, что сумма \(n\) по всем тестам не превышает \(10^5\).

Вторая строка каждого теста содержит одну строку \(S\) (\(1\leq\vert S\vert\leq 120, S_i\in \{\texttt{T},\texttt{F}\}\)). Эта строка представляет последовательность истины. Если \(S_{(i-1)\bmod \vert S\vert+1}= \texttt{T}\), студенты будут действовать честно во время \(i\)-го запроса, в противном случае они будут действовать нечестно. Вы также должны учесть, что не должно быть индекса \(i\), для которого \(S_{(i-1)\bmod \vert S\vert+1} = S_{i\bmod \vert S\vert+1} = S_{(i+1)\bmod \vert S\vert+1}\).

Примечание

Для первого теста отсутствует студент с номером \(2\), и последовательность истины (см. раздел для взломов) — TFFTFTTF. Во время выполнения вашего решения этот тест будет использовать неадаптивный алгоритм.

Для второго теста отсутствует студент с номером \(4\), и последовательность истины — FFTFTTFT. Во время выполнения вашего решения этот тест будет использовать адаптивный алгоритм. Таким образом, фактический ответ может измениться в зависимости от ваших запросов, но всегда будет согласован с ответом на предыдущие запросы.

D. Хорошее путешествие

дп Комбинаторика математика Теория вероятностей *1900

В классе есть \(n\) детей, \(m\) пар среди них — друзья. \(i\)-я пара друзей имеет значение дружбы \(f_i\).

Учитель должен посетить \(k\) экскурсий, на каждой из которых она выбирает пару детей случайно, равновероятно и независимо. Если выбрана пара друзей, их значение дружбы увеличивается на \(1\) для всех последующих экскурсий (учитель может выбрать пару детей более одного раза). Значение дружбы пары детей, не являющихся друзьями, остается \(0\), и не изменяется для следующих экскурсий.

Найдите ожидаемое значение суммы значений дружбы по всем \(k\) парам, выбранным для экскурсий (в момент времени их выбора). Можно показать, что этот ответ всегда может быть выражен в виде дроби \(\dfrac{p}{q}\) где \(p\) и \(q\) взаимопростые целые числа. Посчитайте \(p\cdot q^{-1} \bmod (10^9+7)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) означающее количество этих наборов. Далее следует описание наборов входных данных.

Первая строка набора входных данных содержит \(3\) целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 10^5\), \(0 \le m \le \min \Big(10^5\), \( \frac{n(n-1)}{2} \Big)\), \(1 \le k \le 2 \cdot 10^5\)) — количество детей, количество пар друзей и количество экскурсий соответственно.

Следующие \(m\) строк содержат по три целых числа — \(a_i\), \(b_i\), \(f_i\) — номера детей, которые дружат, и их изначальное значение дружбы. (\(a_i \neq b_i\), \(1 \le a_i,b_i \le n\), \(1 \le f_i \le 10^9\)). Гарантируется, что все дружащие пары детей различны.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходит \(10^5\) и сумма \(k\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — ответ на задачу.

Примечание

В первом наборе входных данных, нет пар друзей, а значит значение дружбы всегда равно \(0\) и остается \(0\) после выбора экскурсий, следовательно, сумма значений по всем экскурсиям равна \(0\).

Во втором наборе входных данных, только одна возможная пара для выбора \((1, 2)\), и их значение дружбы изначально \(1\), значит их значение дружбы увеличивается каждую экскурсию на \(1\). Таким образом, сумма это \(1+2+3+\ldots+10 = 55\).

В третьем наборе входных данных ответ это \(\frac{7}{9} = 777\,777\,784\bmod (10^9+7)\).

C. Влад и сумма сумм цифр

дп реализация *1200

Обратите внимание, что ограничение по времени в этой задаче составляет всего 0.5 секунды на тест.

Владислав записал целые числа от \(1\) до \(n\), включительно, на доске. Затем он заменил каждое число суммой его цифр.

Какова сумма чисел на доске сейчас?

Например, если \(n=12\), то изначально числа на доске равны: \(\)1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12.\(\) Затем после замены числа становятся равными: \(\)1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3.\(\) Сумма этих чисел равна \(1+2+3+4+5+6+7+8+9+1+2+3=51\). Таким образом, для \(n=12\) ответ равен \(51\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — наибольшее число, записанное Владиславом.

Выходные данные

Для каждого набора входных данных выведите одно целое число — сумму чисел в конце процесса.

E. Влад и нечётное упорядочение

Бинарный поиск битмаски дп математика реализация Структуры данных теория чисел *1500

У Владислава есть \(n\) карт с номерами \(1, 2, \dots, n\). Он хочет выложить их в ряд следующим образом:

  • Сначала он выкладывает все карты с нечетными номерами от наименьшего к наибольшему.
  • Затем он выкладывает все карты, которые являются удвоенными нечетными числами, от наименьшего к наибольшему (т.е., \(2\) умноженное на нечётное число).
  • Затем он выкладывает все карты, которые являются нечетными числами, умноженными на \(3\), от наименьшего к наибольшему (т.е., \(3\) умноженное на нечётное число).
  • Затем он выкладывает все карты, которые являются нечетными числами, умноженными на \(4\), от наименьшего к наибольшему (т.е., \(4\) умноженное на нечётное число).
  • И так далее, пока все карты не будут выложены.
Какая карта будет \(k\)-й, которую он выложит в этом процессе? После того, как Влад положил карту, он не может использовать ее снова.
Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^9\)) — количество карт у Влада и позицию карты, которую нужно вывести.

Выходные данные

Для каждого набора входных данных выведите одно целое число — \(k\)-ю карту, которую выложит Влад.

Примечание

В первых семи наборах входных данных примера \(n=7\). Влад выкладывает карты следующим образом:

  • Сначала — все карты с нечетными номерами в порядке \(1\), \(3\), \(5\), \(7\).
  • Затем — все карты, которые являются удвоенными нечетными числами, в порядке \(2\), \(6\).
  • Затем нет оставшихся карт, которые являются нечетными числами, умноженными на \(3\). (У Влада есть только по одной карте каждого числа.)
  • Затем — все карты, которые являются нечетными числами, умноженными на \(4\), и есть только одна такая карта: \(4\).
  • Больше карт не осталось, поэтому Влад останавливается.
Таким образом, порядок карт будет \(1\), \(3\), \(5\), \(7\), \(2\), \(6\), \(4\).

F. Влад и избегание X

битмаски дп Перебор поиск в глубину и подобное реализация *2200

У Владислава есть квадратное клетчатое поле размером \(7 \times 7\), где каждая клетка окрашена в черный или белый цвет. За одну операцию можно выбрать любую клетку и изменить её цвет (черный \(\leftrightarrow\) белый).

Найдите минимальное количество операций, необходимых для того, чтобы гарантировать, что нет черных клеток, у которых все четыре диагональных соседа также черные.

На левом изображении показано, что изначально есть две черные клетки, нарушающие условие. Переворачивая одну клетку, поле будет соответствовать требованию.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 200\)) — количество наборов входных данных. Затем следует описание наборов.

Каждый набор состоит из \(7\) строк, каждая содержит \(7\) символов. Каждый из этих символов либо \(\texttt{W}\), либо \(\texttt{B}\), обозначая белую или черную клетку соответственно.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для того, чтобы гарантировать, что нет черных клеток, у которых все четыре диагональных соседа также черные.

Примечание

Первый набор входных данных изображен в условии.

Второй набор входных данных изображен ниже:

В третьем наборе входных данных поле уже удовлетворяет условию.

G. Влад и проблемы в МИТ

графы Деревья дп жадные алгоритмы поиск в глубину и подобное Потоки реализация *1900

У Владислава есть сын, который очень хотел поступить в МИТ. Общежитие колледжа в МИТ (Молдавский институт технологий) можно представить в виде дерева с \(n\) вершинами, где каждая вершина представляет собой комнату с ровно одним студентом. Дерево — это связный неориентированный граф с \(n\) вершинами и \(n-1\) ребром.

Сегодня ночью есть три типа студентов:

  • студенты, которые хотят веселиться и слушать музыку (обозначены \(\texttt{P}\)),
  • студенты, которые хотят спать и наслаждаться тишиной (обозначены \(\texttt{S}\)), и
  • студенты, которым не важно, что делать ночью (обозначены \(\texttt{C}\)).

Изначально все рёбра представляют собой тонкие стены, которые позволяют музыке проходить через них, поэтому когда веселящийся студент включает музыку, её можно услышать в каждой комнате. Однако мы можем установить толстые стены на любые рёбра — толстые стены не позволяют музыке проходить через них.

Университет хочет установить несколько толстых стен, чтобы каждый веселящийся студент мог слушать музыку, и ни один спящий студент не мог её услышать.

Поскольку университет потерял много денег в судебном процессе о правах на наименование, они просят вас найти минимальное количество толстых стен, которые им придется использовать.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(2 \leq n \leq 10^5\)) — количество вершин в дереве.

Вторая строка каждого набора входных данных содержит \(n-1\) целых чисел \(a_2, \dots , a_n\) (\(1 \leq a_i < i\)) — это означает, что есть ребро между \(i\) и \(a_i\) в дереве.

Третья строка каждого набора входных данных содержит строку \(s\) длиной \(n\), состоящую из символов \(\texttt{P}\), \(\texttt{S}\) и \(\texttt{C}\), обозначающих, что студент \(i\) относится к типу \(s_i\).

Сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — искомое минимальное количество толстых стен.

Примечание

В первом случае мы можем установить одну толстую стену между комнатами \(1\) и \(2\), как показано ниже. Мы не можем установить \(0\) стен, так как тогда музыка из комнаты 3 дойдет до комнаты 2, где студент хочет спать, поэтому ответ равен \(1\). Существуют и другие допустимые решения.

D. Найди различные!

Бинарный поиск дп жадные алгоритмы Перебор снм Структуры данных *1300

Вам дан массив \(a\) из \(n\) целых чисел, а также \(q\) запросов.

Каждый запрос представлен двумя числами \(l\) и \(r\) (\(1 \le l \le r \le n\)). Ваша задача для каждого запроса найти такие два индекса \(i\) и \(j\) (или сообщить, что их не существует), что:

  • \(l \le i \le r\);
  • \(l \le j \le r\);
  • \(a_i \ne a_j\).

Иными словами, вам нужно для каждого запроса найти пару различных элементов среди \(a_l, a_{l+1}, \dots, a_r\) или сообщить, что такой пары не существует.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — элементы массива \(a\).

Третья строка каждого набора содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \le l < r \le n\)) — границы запроса.

Гарантируется, что сумма значений \(n\) по всем наборам не превышает \(2 \cdot 10^5\). Аналогично, гарантируется, что сумма значений \(q\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите два числа: искомые \(i\) и \(j\) (\(l \le i, j \le r\)), для которых \(a_i \ne a_j\). Если такой пары не существует, выведите \(i=-1\) и \(j=-1\).

Вы можете разделять выводы для наборов входных данных пустыми строками. Это не является обязательным требованием.

G. Заряды с краской

дп жадные алгоритмы математика Структуры данных *2300

Задана горизонтальная клетчатая полоса из \(n\) клеток. В \(i\)-й клетке находится заряд краски величины \(a_i\). Этот заряд можно:

  • либо использовать влево — тогда все клетки налево на расстоянии меньше \(a_i\) (то есть с \(\max(i - a_i + 1, 1)\) по \(i\) включительно) окажутся покрашены,
  • либо использовать вправо — тогда все клетки направо на расстоянии меньше \(a_i\) (то есть с \(i\) по \(\min(i + a_i - 1, n)\) включительно) окажутся покрашены,
  • либо не использовать заряд.

Обратите внимание, что заряд можно использовать не более одного раза (то есть его нельзя использовать одновременно и влево и вправо). Допустимо, что клетка окажется покрашена более одного раза.

Какое минимальное количество раз заряд необходимо использовать, чтобы покрасить все клетки полосы?

Входные данные

В первой строке входных данных содержится целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

Каждый набор входных данных задаётся двумя строками. Первая из них содержит целое число \(n\) (\(1 \le n \le 100\)) — количество клеток в полосе. Вторая строка содержит \(n\) положительных целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)), где \(a_i\) — величина заряда краски в \(i\)-й слева клетке полосы.

Гарантируется, что сумма значений \(n\) в тесте не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество раз, сколько необходимо использовать заряды, чтобы покрасить все клетки полосы.

Примечание

В третьем наборе входных данных примера достаточно использовать заряд из \(1\)-й клетки вправо, тогда он покроет обе клетки \(1\) и \(2\).

В девятом наборе входных данных примера нужно:

  • использовать заряд из \(3\)-й клетки влево, покрыв клетки от \(1\)-й до \(3\)-й;
  • использовать заряд из \(5\)-й клетки влево, покрыв клетки от \(4\)-й до \(5\)-й;
  • использовать заряд из \(7\)-й клетки влево, покрыв клетки от \(6\)-й до \(7\)-й.

В одиннадцатом наборе входных данных примера нужно:

  • использовать заряд из \(5\)-й клетки вправо, покрыв клетки от \(5\)-й до \(10\)-й;
  • использовать заряд из \(7\)-й клетки влево, покрыв клетки от \(1\)-й до \(7\)-й.

E. Модообразная последовательность

графы дп жадные алгоритмы Конструктив математика Перебор теория чисел *2300

Даны два целых числа \(x\) и \(y\). Назовем последовательность \(a\) длины \(n\) модообразной, если \(a_1=x\), и для всех \(1 < i \le n\) значение \(a_{i}\) равно либо \(a_{i-1} + y\), либо \(a_{i-1} \bmod y\). Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Определите, существует ли модообразная последовательность длины \(n\), сумма элементов которой равна \(S\), и если существует, то найдите любую такую последовательность.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит четыре целых числа \(n\), \(x\), \(y\) и \(s\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le x \le 2 \cdot 10^5\), \(1 \le y \le 2 \cdot 10^5\), \(0 \le s \le 2 \cdot 10^5\)) — длина последовательности, параметры \(x\) и \(y\), и необходимая сумма элементов последовательности.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), а также сумма \(s\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если искомая последовательность существует, выведите в первой строке «Yes» (без кавычек). Далее, во второй строке выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) через пробел — элементы последовательности \(a\). Если подходящих последовательностей несколько, выведите любую из них.

Если же последовательность не существует, выведите в единственной строке «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных условиям удовлетворяет последовательность \([8, 11, 2, 5, 2]\). Таким образом, \(a_1 = 8 = x\), \(a_2 = 11 = a_1 + 3\), \(a_3 = 2 = a_2 \bmod 3\), \(a_4 = 5 = a_3 + 3\), \(a_5 = 2 = a_4 \bmod 3\).

Во втором наборе входных данных первый элемент последовательности должен равняться \(5\), поэтому последовательность \([2, 2, 2]\) не подходит.

D. Саша и прогулка по городу

Деревья дп Комбинаторика математика *1900

Саша хочет прогуляться со своей девушкой по городу. Город состоит из \(n\) перекрёстков, пронумерованных от \(1\) до \(n\). Некоторые из них соединены дорогами, причём от любого перекрёстка существует ровно один простой путь\(^{\dagger}\) до любого другого перекрёстка. Другими словами, перекрёстки и дороги между ними образуют дерево.

Некоторые из перекрёстков являются опасными. И так как гулять одним по городу небезопасно, то Саша не хочет за время прогулки посещать три и более опасных перекрёстков.

Саша называет множество перекрёстков хорошим, если выполняется следующее условие:

  • Если в городе опасными являются те и только те перекрёстки, которые содержатся в этом множестве, то любой простой путь в городе содержит не более двух опасных перекрёстков.

Однако Саша не знает, какие из перекрёстков являются опасными, поэтому его интересует количество различных хороших множеств перекрёстков, которые есть в городе. Поскольку это количество может быть очень большим, выведите его по модулю \(998\,244\,353\).

\(^{\dagger}\)Простой путь — это путь, проходящий через каждый перекрёсток не более одного раза.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \leq 3 \cdot 10^5\)) — количество перекрёстков в городе.

Следующие \((n - 1)\) строка описывают дороги. \(i\)-я из них содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \ne v_i\)) — номера перекрёстков, которые соединяет \(i\)-я дорога.

Гарантируется, что данные дороги образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество хороших множеств перекрёстков по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных всего есть \(2^3 = 8\) множеств перекрёстков. Все из них являются хорошими, кроме множества \(\{1, 2, 3\}\), потому что, если перекрёстки \(1, 2\) и \(3\) являются опасными, то простой путь \(1 - 2 - 3\) содержит \(3\) опасных перекрёстка. Таким образом, всего есть \(7\) хороших множеств.

Во втором наборе входных данных всего есть \(2^4 = 16\) множеств перекрёстков. При этом множества \(\{1, 2, 3, 4\}\), \(\{1, 2, 3\}\), \(\{1, 3, 4\}\), \(\{2, 3, 4\}\) не являются хорошими. Таким образом, всего есть \(12\) хороших множеств. Ниже изображена схема города:

E. Саша и веселая нарезка дерева

битмаски графы Деревья дп жадные алгоритмы математика Перебор поиск в глубину и подобное *2300

Саше за победу на очередной олимпиаде подарили дерево\(^{\dagger}\) из \(n\) вершин. Но, вернувшись домой после празднования очередной победы, он заметил его потерю. Саша помнит, что он покрасил некоторые рёбра этого дерева. При этом он точно знает, что для любой из \(k\) пар вершин \((a_1, b_1), \ldots, (a_k, b_k)\) он покрасил хотя бы одно ребро на простом пути\(^{\ddagger}\) между вершинами \(a_i\) и \(b_i\).

Саша не помнит, сколько рёбер он точно покрасил, так что он просит вас сказать, какое минимальное количество рёбер он мог покрасить, чтобы выполнялось описанное выше условие.

\(^{\dagger}\)Деревом называется неориентированный связный граф без циклов.

\(^{\ddagger}\)Простой путь — это путь, проходящий через каждую вершину не более одного раза.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — количество вершин в дереве.

Следующие \((n - 1)\) строка описывают рёбра дерева. \(i\)-я из них содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \ne v_i\)) — номера вершин, которые соединяет \(i\)-е ребро.

Следующая строка содержит одно целое число \(k\) (\(1 \leq k \leq 20\)) — количество пар вершин, на простом пути между которыми Саша покрасил хотя бы одно ребро.

Следующие \(k\) строк описывают пары. \(j\)-я из них содержит два целых числа \(a_j\) и \(b_j\) (\(1 \leq a_j, b_j \leq n, a_j \neq b_j\)) — вершины в \(j\)-й паре.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\). Гарантируется, что сумма \(2^k\) по всем наборам входных данных не превосходит \(2^{20}\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество рёбер, которое мог покрасить Саша.

Примечание

В первом наборе входных данных Саша мог покрасить только одно ребро \((1, 2)\). Тогда на простом пути между вершинами \(1\) и \(3\) и вершинами \(4\) и \(1\) будет хотя бы одно покрашенное ребро.

Во втором наборе входных данных Саша мог покрасить рёбра \((1, 6)\) и \((1, 3)\).

D1. Сумма по всем подстрокам (простая версия)

дп жадные алгоритмы Перебор Строки *1800

Это простая версия задачи. Единственное отличие между версиями заключается в ограничениях на \(t\) и \(n\). Вы можете делать взломы только тогда, когда обе версии задачи решены.

Для бинарного\(^\dagger\) шаблона \(p\) и бинарной строки \(q\) одинаковой длины \(m\), скажем, что строка \(q\) называется \(p\)-хорошей, если для каждого \(i\) (\(1 \leq i \leq m\)) существуют индексы \(l\) и \(r\) такие, что:

  • \(1 \leq l \leq i \leq r \leq m\), и
  • \(p_i\) является модой\(^\ddagger\) строки \(q_l q_{l+1} \ldots q_{r}\).

Для шаблона \(p\) определим \(f(p)\) как минимально возможное количество \(\mathtt{1}\) в \(p\)-хорошей бинарной строке (такой же длины, как и шаблон).

Вам дана бинарная строка \(s\) длины \(n\). Найдите \(\)\sum_{i=1}^{n} \sum_{j=i}^{n} f(s_i s_{i+1} \ldots s_j).\(\) Другими словами, вам нужно просуммировать значения \(f\) по всем \(\frac{n(n+1)}{2}\) подстрокам \(s\).

\(^\dagger\) Бинарный шаблон — это строка, состоящая только из символов \(\mathtt{0}\) и \(\mathtt{1}\).

\(^\ddagger\) Символ \(c\) является модой строки \(t\) длины \(m\), если число вхождений \(c\) в \(t\) не меньше \(\lceil \frac{m}{2} \rceil\). Например, \(\mathtt{0}\) является модой \(\mathtt{010}\), \(\mathtt{1}\) не является модой \(\mathtt{010}\), и оба символа \(\mathtt{0}\) и \(\mathtt{1}\) являются модами \(\mathtt{011010}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длина двоичной строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\), состоящую только из символов \(\mathtt{0}\) и \(\mathtt{1}\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите сумму значений \(f\) по всем подстрокам \(s\).

Примечание

В первом наборе входных данных единственной \(\mathtt{1}\)-хорошей строкой является \(\mathtt{1}\). Таким образом, \(f(\mathtt{1})=1\).

Во втором наборе входных данных \(f(\mathtt{10})=1\), так как \(\mathtt{01}\) является \(\mathtt{10}\)-хорошей, а \(\mathtt{00}\) не является \(\mathtt{10}\)-хорошей. Таким образом, ответ равен \(f(\mathtt{1})+f(\mathtt{10})+f(\mathtt{0}) = 1 + 1 + 0 = 2\).

В третьем наборе входных данных \(f\) равна \(0\) для всех \(1 \leq i \leq j \leq 5\). Таким образом, ответ равен \(0\).

D2. Сумма по всем подстрокам (сложная версия)

битмаски дп жадные алгоритмы разделяй и властвуй реализация снм Строки *2100

Это простая версия задачи. Единственное отличие между версиями заключается в ограничениях на \(t\) и \(n\). Вы можете делать взломы только тогда, когда обе версии задачи решены.

Для бинарного\(^\dagger\) шаблона \(p\) и бинарной строки \(q\) одинаковой длины \(m\), скажем, что строка \(q\) называется \(p\)-хорошей, если для каждого \(i\) (\(1 \leq i \leq m\)) существуют индексы \(l\) и \(r\) такие, что:

  • \(1 \leq l \leq i \leq r \leq m\), и
  • \(p_i\) является модой\(^\ddagger\) строки \(q_l q_{l+1} \ldots q_{r}\).

Для шаблона \(p\) определим \(f(p)\) как минимально возможное количество \(\mathtt{1}\) в \(p\)-хорошей бинарной строке (такой же длины, как и шаблон).

Вам дана бинарная строка \(s\) длины \(n\). Найдите \(\)\sum_{i=1}^{n} \sum_{j=i}^{n} f(s_i s_{i+1} \ldots s_j).\(\) Другими словами, вам нужно просуммировать значения \(f\) по всем \(\frac{n(n+1)}{2}\) подстрокам \(s\).

\(^\dagger\) Бинарный шаблон — это строка, состоящая только из символов \(\mathtt{0}\) и \(\mathtt{1}\).

\(^\ddagger\) Символ \(c\) является модой строки \(t\) длины \(m\), если число вхождений \(c\) в \(t\) не меньше \(\lceil \frac{m}{2} \rceil\). Например, \(\mathtt{0}\) является модой \(\mathtt{010}\), \(\mathtt{1}\) не является модой \(\mathtt{010}\), и оба символа \(\mathtt{0}\) и \(\mathtt{1}\) являются модами \(\mathtt{011010}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — длина двоичной строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\), состоящую только из символов \(\mathtt{0}\) и \(\mathtt{1}\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите сумму значений \(f\) по всем подстрокам \(s\).

Примечание

В первом наборе входных данных единственной \(\mathtt{1}\)-хорошей строкой является \(\mathtt{1}\). Таким образом, \(f(\mathtt{1})=1\).

Во втором наборе входных данных \(f(\mathtt{10})=1\), так как \(\mathtt{01}\) является \(\mathtt{10}\)-хорошей, а \(\mathtt{00}\) не является \(\mathtt{10}\)-хорошей. Таким образом, ответ равен \(f(\mathtt{1})+f(\mathtt{10})+f(\mathtt{0}) = 1 + 1 + 0 = 2\).

В третьем наборе входных данных \(f\) равна \(0\) для всех \(1 \leq i \leq j \leq 5\). Таким образом, ответ равен \(0\).

E. 2...3...4.... Замечательно! Замечательно!

дп Комбинаторика математика *2400

У Стека есть массив \(a\) длины \(n\) такой, что \(a_i = i\) для всех \(i\) (\(1 \leq i \leq n\)). Он выберет целое положительное число \(k\) (\(1 \leq k \leq \lfloor \frac{n-1}{2} \rfloor\)) и выполнит следующую операцию над \(a\) любое число раз (возможно, \(0\)):

  • Выбрать из \(a\) подпоследовательность\(^\dagger\) \(s\) длины \(2 \cdot k + 1\). Далее, удалить первые \(k\) элементов \(s\) из \(a\). Чтобы все было идеально сбалансировано (как и должно быть), также удалить последние \(k\) элементов \(s\) из \(a\).

Стеку стало интересно, сколько массивов \(a\) он может получить в итоге для каждого \(k\) (\(1 \leq k \leq \lfloor \frac{n-1}{2} \rfloor\)). Поскольку Стек плохо справляется с математическими задачами, ему нужна ваша помощь.

Поскольку количество массивов может быть слишком большим, выведите его по модулю \(998\,244\,353\).

\(^\dagger\) Последовательность \(x\) является подпоследовательностью \(y\), если \(x\) может быть получена из \(y\) удалением нескольких (возможно, ни одного или всех) элементов. Например, \([1, 3]\), \([1, 2, 3]\) и \([2, 3]\) являются подпоследовательностями \([1, 2, 3]\). С другой стороны, \([3, 1]\) и \([2, 1, 3]\) не являются подпоследовательностями \([1, 2, 3]\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \leq n \leq 10^6\)) — длину массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(\lfloor \frac{n-1}{2} \rfloor\) целых чисел, разделенных пробелами, где \(i\)-е число равняется количеству (по модулю \(998\,244\,353\)) массивов, которые Стек может получить, если выберет \(k=i\).

Примечание

В первом наборе входных данных для \(k=1\) возможны два \(a\):

  • \([1,2,3]\);
  • \([2]\).

Во втором наборе входных данных для \(k=1\) возможны четыре \(a\):

  • \([1,2,3,4]\);
  • \([1,3]\);
  • \([2,3]\);
  • \([2,4]\).

В третьем наборе входных данных для \(k=2\) возможны два \(a\):

  • \([1,2,3,4,5]\);
  • \([3]\).

G. Подсчет множества префиксных максимумов

Деревья дп Структуры данных *3100

Определим для массива \(b\) функцию \(f\) такую, что \(f(b)\) возвращает массив префиксных максимумов \(b\). Другими словами, \(f(b)\) — это массив, содержащий только такие элементы \(b_i\), для которых \(b_i=\max(b_1,b_2,\ldots,b_i)\), без изменения их порядка. Например, \(f([3,10,4,10,15,1])=[3,10,10,15]\).

Вам дано дерево, состоящее из \(n\) вершин с корнем \(1\).

Перестановка\(^\dagger\) \(p\) является прямым обходом дерева, если для всех \(i\) выполняется следующее условие:

  • Пусть \(k\) — число потомков\(^\ddagger\) вершины \(p_i\).
  • Для всех \(x\) таких, что \(i < x \leq i+k\), \(p_x\) — потомок вершины \(p_i\).

Найдите количество различных значений \(f(a)\) среди всех возможных прямых обходов \(a\). Так как это значение может быть большим, вам нужно найти его по модулю \(998\,244\,353\).

\(^\dagger\) Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

\(^\ddagger\) Вершина \(t\) является потомком вершины \(s\), если \(s \neq t\) и \(s\) находится на единственном простом пути из \(t\) в \(1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — количество вершин.

Следующие \(n-1\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)), обозначающие ребро между вершинами \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите количество различных значений \(f(a)\), которые вы можете получить, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных единственным допустимым прямым обходом является \(a=[1]\). Поэтому единственное возможное значение \(f(a)\) — \([1]\).

Во втором наборе входных данных единственным допустимым прямым обходом является \(a=[1,2]\). Поэтому единственное возможное значение \(f(a)\) — \([1,2]\).

В третьем наборе входных данных два допустимых прямых обхода — \(a=[1,2,3]\) и \(a=[1,3,2]\). Таким образом, возможные значения \(f(a)\) — \([1,2,3]\) и \([1,3]\).

В пятом наборе входных данных возможными значениями \(f(a)\) являются:

  • \([1,5]\);
  • \([1,2,5]\);
  • \([1,3,5]\);
  • \([1,4,5]\);
  • \([1,2,3,5]\);
  • \([1,2,4,5]\);
  • \([1,3,4,5]\);
  • \([1,2,3,4,5]\).

A. Шипы и монеты

дп жадные алгоритмы реализация *800

Во время вашего путешествия по компьютерным вселенным вы наткнулись на очень интересный мир. Это путь с \(n\) последовательными ячейками, каждая из которых может быть пустой, содержать шипы или монету. За один ход вы можете переместиться на одну или две ячейки вдоль пути, при условии, что конечная ячейка не содержит шипов (и принадлежит пути). Если вы перемещаетесь на ячейку с монетой, вы ее забираете.

Здесь зеленые стрелки соответствуют допустимым ходам, а красная стрелка соответствует недопустимому ходу.

Вы хотите собрать как можно больше монет. Найдите максимальное количество монет, которое вы можете собрать в этом мире, если начнете с самой левой ячейки пути.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — длина пути.

Вторая строка каждого набора входных данных содержит строку из \(n\) символов, описание пути. Символ '.' обозначает пустую ячейку, '@' обозначает ячейку с монетой, а '*' обозначает ячейку с шипами. Гарантируется, что первая ячейка пуста.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество монет, которое вы можете собрать.

Примечание

Иллюстрацию первого примера показана в условии задачи.

Вот иллюстрация второго примера:

И иллюстрация третьего примера:

F. Кормление кошек

дп сортировки Структуры данных *1900

Существует увлекательная игра, в которой вам нужно кормить кошек, которые приходят и уходят. Уровень игры состоит из \(n\) шагов. Есть \(m\) кошек; кошка \(i\) присутствует на шагах от \(l_i\) до \(r_i\), включительно. На каждом шаге вы можете покормить всех кошек, которые в данный момент присутствуют, или ничего не делать.

Если вы кормите одну и ту же кошку более одного раза, она переест, и вы сразу проиграете игру. Ваша цель — покормить как можно больше кошек, не заставив ни одну из них переесть.

Найдите максимальное количество кошек, которых вы можете покормить.

Формально вы должны выбрать несколько целочисленных точек из отрезка от \(1\) до \(n\) так, чтобы среди данных отрезков ни один не покрывал две или более из выбранных точек и как можно больше отрезков покрывали одну из выбранных точек.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^6\), \(1 \le m\le 2\cdot 10^5\)).

\(i\)-я из следующих \(m\) строк содержит пару целых чисел \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)).

Сумма \(n\) для всех тестов не превышает \(10^6\), сумма \(m\) для всех тестов не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество кошек, которых вы можете покормить.

Примечание

В первом примере один из способов покормить пять кошек — это покормить их на шагах \(4\) и \(11\).

  • На шаге \(4\) будут покормлены кошки \(1\), \(2\) и \(3\).
  • На шаге \(11\) будут покормлены кошки \(5\) и \(6\).

F. Робот и подземные толчки

графы дп кратчайшие пути поиск в глубину и подобное *2100

Мир представляет собой прямоугольную таблицу с \(n\) строками и \(m\) столбцами. Строки нумеруются \(0, 1, \ldots, n-1\), а столбцы нумеруются \(0, 1, \ldots, m-1\). В этом мире столбцы циклические (т.е. верхние и нижние ячейки в каждом столбце смежны). Ячейка в \(i\)-й строке и \(j\)-м столбце (\(0 \le i < n, 0 \le j < m\)) обозначается как \((i,j)\).

В момент времени \(0\) ячейка \((i,j)\) (где \(0 \le i < n, 0 \le j < m\)) содержит либо камень, либо ничего. Состояние ячейки \((i,j)\) можно описать с помощью целого числа \(a_{i,j}\):

  • Если \(a_{i,j} = 1\), в \((i,j)\) есть камень.
  • Если \(a_{i,j} = 0\), в \((i,j)\) ничего нет.

В результате подземных толчков от землетрясения, столбцы следуют за движениями тектонических плит: каждый столбец циклически двигается вверх со скоростью \(1\) ячейка за единицу времени. Формально, для некоторых \(0 \le i < n, 0 \le j < m\), если в данный момент времени в \((i,j)\) есть камень, он переместится из \((i, j)\) в \((i - 1, j)\) (или в \((n - 1, j)\), если \(i=0\)).

Робот по имени RT изначально находится в позиции \((0,0)\). Ему нужно добраться до \((n-1,m-1)\) для проведения операции спасения от землетрясения (в правый нижний угол поля). Подземные толчки не изменяют положения робота, они только изменяют положение камней в мире.

Пусть текущее положение RT имеет координаты \((x,y)\) (\(0 \le x < n, 0 \le y < m\)), он может выполнить следующие операции:

  • Перейти на одну ячейку циклически вверх, т.е. из \((x,y)\) в \(((x+n-1) \bmod n, y)\) за \(1\) единицу времени.
  • Перейти на одну ячейку циклически вниз, т.е. из \((x,y)\) в \(((x+1) \bmod n, y)\) за \(1\) единицу времени.
  • Перейти на одну ячейку вправо, т.е. из \((x,y)\) в \((x, y+1)\) за \(1\) единицу времени. (RT может выполнить эту операцию только если \(y < m-1\).)

Обратите внимание, что RT не может ни двигаться влево с помощью этих операций, ни оставаться на месте.

К сожалению, RT взорвется при столкновении с камнем. Поэтому, когда RT находится в \((x,y)\) и есть камень в \(((x+1) \bmod n, y)\) или \(((x+2) \bmod n, y)\), RT не может двигаться вниз, иначе он столкнется с камнем.

Аналогично, если \(y+1 < m\) и есть камень в \(((x+1) \bmod n, y+1)\), RT не может двигаться вправо, иначе он столкнется с камнем.

Стоит отметить, что если на клетках \((x \bmod n, y+1)\) и \(((x+1) \bmod n, y)\) находится камень, RT всё равно может безопасно перейти вправо.

Найдите минимальное количество времени, которое RT нужно, чтобы добраться до \((n-1,m-1)\) без столкновения с камнями. Если это невозможно, выведите \(-1\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В каждом наборе первая строка содержит два целых числа \(n\), \(m\) (\(3 \le n, m \le 10^3\)) — размеры планеты.

Каждая из следующих \(n\) строк содержит \(m\) целых чисел. \((j+1)\)-е целое число в \((i+1)\)-й строке (\(0 \le i < n, 0 \le j < m\)) — это \(a_{i,j}\) (\(0 \le a_{i,j} \le 1\)), которое обозначает, есть ли камень в \((i,j)\) в момент времени \(0\).

Кроме того, гарантируется, что \(a_{0,0} = 0\), и \(a_{i, m-1} = 0\) для \(0 \le i < n\). Другими словами, в начальной позиции RT также нет камня, а в столбце \(m-1\) его также нет.

Сумма \(n \cdot m\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных:

  • Если конечная точка может быть достигнута без столкновения с камнями, выведите одно целое число — минимальное количество времени, которое RT нужно, чтобы добраться до \((n-1,m-1)\).
  • В противном случае выведите \(-1\).
Примечание

Визуальное объяснение первого теста в примере:

B. Еще одна задача о монетах

дп жадные алгоритмы математика Перебор *1200

У вас есть \(5\) различных типов монет, каждый из которых имеет значение равное одному из первых \(5\) треугольных чисел: \(1\), \(3\), \(6\), \(10\) и \(15\). Все типы монет имеются в неограниченном количестве. Ваша задача — определить, какого минимального количества монет достаточно, чтобы набрать сумму ровно \(n\).

Можно показать, что ответ всегда существует.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора входных данных содержится одно целое число \(n\) (\(1 \leq n \leq 10^9\)) — требуемое значение.

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное необходимое число монет.

Примечание

В первом наборе тестовых данных, где \(n = 1\), ответ \(1\), поскольку достаточно использовать одну монету стоимости \(1\). \(1 = 1 \cdot 1\).

В четвертом наборе входных данных, где \(n = 5\), ответ \(3\), который может быть достигнут, используя две монеты стоимости \(1\) и одну монету стоимости \(3\). \(5 = 2 \cdot 1 + 1 \cdot 3\).

В седьмом наборе входных данных, где \(n = 12\), ответ \(2\), который может быть достигнут, используя две монеты стоимости \(6\).

В девятом наборе входных данных, где \(n = 16\), ответ \(2\), который может быть достигнут, используя одну монету стоимости \(1\) и одну монету стоимости \(15\). Альтернативным решением может быть использование одной монеты стоимости \(10\) и одной монеты стоимости \(6\). \(16 = 1 \cdot 1 + 1 \cdot 15 = 1 \cdot 6 + 1 \cdot 10\).

C. Мессенджер в ЦПМ

Бинарный поиск дп жадные алгоритмы Конструктив Перебор сортировки Структуры данных *1800

В новом мессенджере для учащихся Центра Помощи Магистрам, Кефтемерум, планируется обновление, в котором разработчики хотят оптимизировать набор сообщений, показываемых пользователю. Всего есть \(n\) сообщений, каждое сообщение характеризуется двумя целыми числами \(a_i\) и \(b_i\). Время, потраченное на прочтение набора сообщений с номерами \(p_1, p_2, \ldots, p_k\) (\(1 \le p_i \le n\), все \(p_i\) различны) рассчитывается по формуле:

\(\)\Large \sum_{i=1}^{k} a_{p_i} + \sum_{i=1}^{k - 1} |b_{p_i} - b_{p_{i+1}}|\(\)

Обратите внимание, что время прочтения набора сообщений, состоящего из одного сообщения с номером \(p_1\), равно \(a_{p_1}\). Также время прочтения пустого набора сообщений считается равным \(0\).

Пользователь может сам определить время \(l\), которое он готов провести в мессенджере. Мессенджер же должен сообщить пользователю максимально возможный размер набора сообщений, время прочтения которого не превышает \(l\). Обратите внимание, что максимальный размер набора сообщений может быть равен \(0\).

Разработчики популярного мессенджера не справились внедрить данную функцию, поэтому попросили вас решить эту задачу.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(l\) (\(1 \leq n \leq 2000\), \(1 \leq l \leq 10^9\)) — количество сообщений и время, которое пользователь готов провести в мессенджере.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^9\)) — характеристики \(i\)-го сообщения.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(4 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный размер набора сообщений, время прочтения которого не превышает \(l\).

Примечание

В первом наборе входных данных, можно взять набор из трёх сообщений с номерами \(p_1 = 3\), \(p_2 = 2\) и \(p_3 = 5\). Время, затрачиваемое на прочтение данного набора, равно \(a_3 + a_2 + a_5 + |b_3 - b_2| + |b_2 - b_5| = 2 + 1 + 2 + |4 - 5| + |5 - 3| = 8\).

Во втором наборе входных данных, можно взять набор из одного сообщения со номером \(p_1 = 1\). Время, затрачиваемое на прочтение данного набора, равно \(a_1 = 4\).

В пятом наборе входных данных можно показать, что не существует такого непустого набора сообщений, затрачиваемое время на прочтение которого не превышает \(l\).

B. Бинарный путь

дп жадные алгоритмы реализация *1300

Дана таблица размера \(2 \times n\), заполненная нулями и единицами. Пусть число, стоящее на пересечении \(i\)-й строки и \(j\)-го столбца, равно \(a_{ij}\).

В левой верхней клетке \((1, 1)\) находится кузнечик, который может прыгать только на одну клетку вправо или вниз. Ему нужно добраться до правой нижней клетки \((2, n)\). Рассмотрим бинарную строку длины \(n+1\), состоящую из чисел, записанных в клетках пути, без изменения их относительного порядка.

Вам необходимо:

  1. Найти лексикографически наименьшую\(^\dagger\) строку, которую можно получить, выбрав один из доступных путей;
  2. Найти количество путей, которые дают эту лексикографически наименьшую строку.

\(^\dagger\) Если строки \(s\) и \(t\) имеют равную длину, то строка \(s\) лексикографически меньше строки \(t\), если и только если в первой позиции, где \(s\) и \(t\) различны, в строке \(s\) элемент меньше, чем соответствующий элемент в \(t\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит бинарную строку \(a_{11} a_{12} \ldots a_{1n}\) (\(a_{1i}\) равно либо \(0\), либо \(1\)).

Третья строка каждого набора входных данных содержит бинарную строку \(a_{21} a_{22} \ldots a_{2n}\) (\(a_{2i}\) равно либо \(0\), либо \(1\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  1. Лексикографически наименьшую строку, которую можно получить;
  2. Число путей, дающих эту строку.
Примечание

В первом наборе входных данных лексикографически наименьшей строкой является \(\mathtt{000}\). Есть два пути, движение по которым даст эту строку:

Во втором наборе входных данных лексикографически наименьшей строкой является \(\mathtt{11000}\). Существует всего один путь, дающий такую строку:

B. Рудольф и 121

дп жадные алгоритмы математика Перебор *1000

У Рудольфа есть массив \(a\) из \(n\) целых чисел, элементы которого пронумерованы от \(1\) до \(n\).

За одну операцию он может выбрать индекс \(i\) (\(2 \le i \le n - 1\)) и присвоить:

  • \(a_{i - 1} = a_{i - 1} - 1\);
  • \(a_i = a_i - 2\);
  • \(a_{i + 1} = a_{i + 1} - 1\).

Рудольф может применить эту операцию любое число раз. Любой индекс \(i\) может быть использован ноль или более раз.

Может ли он с помощью этой операции сделать все элементы массива равными нулю?

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество элементов массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_j \le 10^9\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если с помощью описанных операций можно сделать все элементы массива нулями. Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере исходный массив равен \([1, 3, 5, 5, 2]\), чтобы сделать все его элементы равными нулю, Рудольф может действовать так:

  • применить операцию на \(i=4\) и получить массив \([1, 3, 4, 3, 1]\);
  • применить операцию на \(i=3\) и получить массив \([1, 2, 2, 2, 1]\);
  • применить операцию на \(i=2\) и получить массив \([0, 0, 1, 2, 1]\);
  • применить операцию на \(i=4\) и получить массив \([0, 0, 0, 0, 0]\).

C. Рудольф и некрасивая строка

дп жадные алгоритмы Строки *900

У Рудольфа есть строка \(s\) длины \(n\). Рудольф считает, что строка \(s\) является некрасивой, если содержит в качестве подстроки\(^\dagger\) хотя бы одну строку «pie» или хотя бы одну строку «map», в противном случае строка \(s\) будет красивой.

Например, «ppiee», «mmap», «dfpiefghmap» — некрасивые строки, а «mathp», «ppiiee» — красивые строки.

Рудольф хочет сократить строку \(s\), удалив некоторые символы, чтобы она стала красивой.

Главный герой не любит напрягаться, поэтому просит вас сделать строку красивой, удалив при этом минимальное количество символов. Он может удалять символы из любых позиций в строке (а не только с начала/конца строки).

\(^\dagger\) Строка \(a\) является подстрокой \(b\), если в строке \(b\) существует последовательный отрезок символов равный \(a\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка набора содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — длину строки \(s\).

Следующая строка набора содержит строку \(s\) длины \(n\). Строка \(s\) состоит исключительно из строчных латинских букв.

Сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество символов, которые нужно удалить, чтобы строка \(s\) стала красивой. Если строка изначально красивая, то выведите \(0\).

Примечание

В первом наборе можно удалить, например, \(4\)-й и \(9\)-й символы, чтобы строка стала красивой.

Во втором наборе строка уже является красивой.

D. Рудольф и игра с мячом

дп поиск в глубину и подобное реализация *1200

Рудольф и Бернард решили сыграть с друзьями в игру. В круг встают \(n\) человек и начинают бросать друг другу мяч. Они пронумерованы от \(1\) до \(n\) по часовой стрелке.

Назовём переходом в игре перемещение мяча от некоторого игрока к его соседу. Переход может быть выполнен по часовой стрелке или против часовой стрелки.

Назовём расстоянием по часовой стрелке (против часовой стрелки) от игрока \(y_1\) до игрока \(y_2\) число переходов по часовой стрелке (против часовой стрелки), которые нужно выполнить, чтобы переместить мяч от игрока \(y_1\) к игроку \(y_2\). Например, если \(n=7\), тогда расстояние по часовой стрелке от \(2\) до \(5\) равно \(3\), а расстояние против часовой стрелки от \(2\) до \(5\) равно \(4\).

Изначально мяч находится у игрока номер \(x\) (нумерация игроков осуществляется по часовой стрелке). Во время \(i\)-го хода тот, у кого мяч, бросает его на расстояние \(r_i\) (\(1 \le r_i \le n - 1\)) по или против часовой стрелки. Например, если играет \(7\) человек, и \(2\)-й игрок, получив мяч, бросает его на расстояние \(5\), то мяч получит либо \(7\)-й игрок (бросок по часовой стрелке), либо \(4\)-й игрок (бросок против часовой стрелки). Иллюстрация этого примера приведена ниже.

Игра прервалась после \(m\) бросков из-за неожиданного дождя. Когда дождь закончился, ребята вновь собрались, чтобы продолжить. Однако никто не мог вспомнить, у кого остался мяч. Как оказалось, Бернард запомнил расстояния каждого из бросков и направление для некоторых бросков (по часовой стрелке или против часовой стрелки).

Рудольф просит вас помочь ему и на основе информации от Бернарда вычислить номера игроков, у которых мог оказаться мяч после \(m\) бросков.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит три целых числа \(n, m, x\) (\(2 \le n \le 1000\), \(1 \le m \le 1000\), \(1 \le x \le n\)) — количество игроков, число совершённых бросков и номер игрока, который бросил мяч первым, соответственно.

Следующие \(m\) строк содержат информацию о каждом броске по порядку. Каждая из них содержит целое число \(r_i\) (\(1 \le r_i \le n - 1\)) — расстояние, на которое был совершен \(i\)-й бросок, и символ \(c_i\), равный «0», «1» или «?»:

  • если \(c_i\)='0', то \(i\)-й бросок был совершен по часовой стрелке,
  • если \(c_i\)='1', то \(i\)-й бросок был совершен против часовой стрелки,
  • если \(c_i\)='?', то Бернард не помнит направление, и \(i\)-й бросок мог быть совершен как по часовой стрелке так и против часовой стрелки.

Гарантируется, что сумма \(n \cdot m\) (\(n\) умноженное на \(m\)) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите по две строки.

В первой строке выведите количество игроков \(k\) (\(1 \le k \le n\)), у которых в конце игры мог оказаться мяч.

В следующей строке выведите \(k\) чисел \(b_i\) (\(1 \le b_i \le n\)) — номера игроков в возрастающем порядке. Все номера должны быть различными.

Примечание

Ниже приведена иллюстрация трёх бросков для первого набора входных данных примера. Стрелки обозначают возможные направления броска. Серым цветом обозначены игроки, у которых мог оказаться мяч после броска.

E. Рудольф и k мостов

Бинарный поиск дп Структуры данных *1600

Бернард любит ездить к Рудольфу в гости, но постоянно опаздывает. Проблема в том, что Бернард вынужден переплывать реку на пароме. Рудольф решил помочь своему другу решить эту проблему.

Река представляет собой клетчатое поле из \(n\) строк и \(m\) столбцов. На пересечении \(i\)-й строки и \(j\)-го столбца записано число \(a_{i,j}\) — глубина в соответствующей клетке. Все клетки первого и последнего столбцов соответствуют берегам реки, поэтому глубина в них \(0\).

Река может выглядеть так.

Рудольф может выбрать строку \((i,1), (i,2), \ldots, (i,m)\) и построить над ней мост. В каждой клетке строки он может установить опору для моста. Стоимость установки опоры в клетке \((i,j)\) равна \(a_{i,j}+1\). Опоры необходимо установить так, чтобы были выполнены следующие условия:

  1. В клетке \((i,1)\) должна быть установлена опора;
  2. В клетке \((i,m)\) должна быть установлена опора;
  3. Расстояние между любой парой соседних опор должно быть не больше \(d\). Расстояние между опорами \((i, j_1)\) и \((i, j_2)\) равно \(|j_1 - j_2| - 1\).

Построить один мост это скучно. Поэтому Рудольф решил построить \(k\) мостов на последовательных строках реки, то есть выбрать некоторое \(i\) (\(1 \le i \le n - k + 1\)) и независимо построить по мосту на каждой из строк \(i, i + 1, \ldots, i + k - 1\). Помогите Рудольфу минимизировать суммарную стоимость установки опор.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 10^3)\) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора данных содержит четыре целых числа \(n\), \(m\), \(k\) и \(d\) (\(1 \le k \le n \le 100\), \(3 \le m \le 2 \cdot 10^5\), \(1 \le d \le m\)) — количество строк и столбцов поля, количество мостов, максимальное расстояние между опорами.

Далее следует \(n\) строк, \(i\)-я строка содержит \(m\) целых положительных чисел \(a_{i, j}\) (\(0 \le a_{i, j} \le 10^6\), \(a_{i, 1} = a_{i, m} = 0\)) — глубины клеток реки.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальную суммарную стоимость опор.

Примечание

В первом наборе тестовых данных выгоднее всего построить мост на второй строке.

Это не вид сверху, а вид сбоку: серые ячейки — сам мост, белые ячейки — пустые, черные ячейки — опоры, синие ячейки — вода, коричневые ячейки — дно реки.

Во втором наборе мост выгоднее всего построить на второй и третьей строках. Опоры будут стоять в клетках \((2, 3)\), \((3, 2)\) и на берегах.

В третьем наборе опоры можно расположить по берегам.

D. Учимся рисовать

Бинарный поиск дп жадные алгоритмы поиск в глубину и подобное реализация сортировки Структуры данных *2100

Элси учится рисовать. У нее есть холст из \(n\) клеток, пронумерованных от \(1\) до \(n\), и она может раскрасить любое (возможно, пустое) подмножество клеток.

У Элси есть двумерный массив \(a\), который она будет использовать для оценки картин. Пусть максимальные непрерывные отрезки закрашенных клеток в картине равны \([l_1,r_1],[l_2,r_2],\ldots,[l_x,r_x]\). Красота картины — это сумма \(a_{l_i,r_i}\) по всем \(1 \le i \le x\). На изображении выше максимальные непрерывные отрезки закрашенных клеток равны \([2,4],[6,6],[8,9]\), а красота картины равна \(a_{2,4}+a_{6,6}+a_{8,9}\).

Всего есть \(2^n\) различных способов раскрасить холст. Помогите Элси найти \(k\) наибольших значений красоты картины, которые она может получить, среди всех способов. Обратите внимание, что эти \(k\) значений не обязательно должны быть различными. Гарантируется, что существует не менее \(k\) различных способов раскрасить холст.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит \(2\) целых числа \(n\) и \(k\) (\(1 \leq n \leq 10^3\), \(1 \leq k \leq \min(2^n, 5 \cdot 10^3)\)) — количество клеток и количество наибольших значений красоты картины, которые вы должны найти.

Следующие \(n\) строк каждого набора входных данных описывают двумерный массив \(a\), \(i\)-я строка содержит \(n-i+1\) целых чисел \(a_{i,i},a_{i,i+1},\ldots,a_{i,n}\) (\(-10^6 \leq a_{i,j} \leq 10^6\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^3\), а сумма \(k\) по всем наборам входных данных не превосходит \(5 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке \(k\) целых чисел: \(i\)-е из них должно равняться \(i\)-му наибольшему значение красоты картины, которое может получить Элси.

Примечание

В первом наборе входных данных Элси может либо закрасить единственную клетку, либо не закрашивать ее. Если она раскрасит единственную клетку, красота картины составит \(-5\). Если она решит не раскрашивать ее, красота картины составит \(0\). Таким образом, наибольшая красота, которую она может получить, равна \(0\), а вторая по величине красота, которую она может получить, равна \(-5\).

Ниже приведена иллюстрация третьего набора входных данных.

G. Бесси и карты

дп Комбинаторика математика *2800

Бесси недавно начала играть в известную карточную игру. В игре участвует одна колода карт, состоящая из \(a\) карт «взять \(0\) карт», \(b\) карт «взять \(1\) карту», \(c\) карт «взять \(2\) карты» и \(5\) специальных карт. В начале игры все карты лежат в одной перемешанной случайным образом колоде.

Бесси начинает игру, взяв верхние \(5\) карт из колоды. Затем она может играть с руки карты вида «взять \(x\) карт», чтобы взять следующие \(x\) карт с верха колоды. Обратите внимание, что каждая карта может быть сыграна только один раз, специальные карты играть нельзя, а если Бесси использует карту «взять \(2\) карты», когда в колоде осталось всего \(1\) карта, то она просто вытянет оставшуюся карту. Бесси выиграет, если вытянет все \(5\) специальных карт.

Поскольку Бесси не очень хорошо разбирается в математических задачах, она хочет, чтобы вы нашли вероятность того, что она выиграет, учитывая, что колода тасуется случайным образом по всем \((a + b + c + 5)!\) возможным тасовкам. Можно показать, что ответ всегда можно выразить в виде дроби \(\frac{p}{q}\), где \(p\) и \(q\) — взаимно простые целые числа. Выведите \(p \cdot q^{-1}\) по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит три целых числа \(a\), \(b\) и \(c\) (\(0 \le a, b, c \le 2 \cdot 10^5\)) — количество карт «взять \(0\) карт», «взять \(1\) карту» и «взять \(2\) карты», соответственно.

Гарантируется, что сумма \(a\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), сумма \(b\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), и сумма \(c\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — вероятность того, что Бесси выиграет, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных у нас есть по \(1\) карте каждого типа «взять» и \(5\) специальных карт. Существует \(30\,720\) стартовых колод, в которых Бесси выиграет, вытянув верхние \(5\) карт, и \(40\,320\) стартовых колод в целом. Таким образом, вероятность выигрыша Бесси равна \(\frac{30\,720}{40\,320} = \frac{16}{21}\).

Одним из примеров выигрышной стартовой колоды является следующая (карты перечислены сверху вниз):

  1. «Специальная»,
  2. «Взять \(1\) карту»,
  3. «Специальная»,
  4. «Специальная»,
  5. «Взять \(0\) карт»,
  6. «Взять \(2\) карты»,
  7. «Специальная»,
  8. «Специальная».

Одним из примеров проигрышной стартовой колоды является:

  1. «Специальная»,
  2. «Взять \(1\) карту»,
  3. «Специальная»,
  4. «Специальная»,
  5. «Взять \(0\) карт»,
  6. «Специальная»,
  7. «Специальная»,
  8. «Взять \(2\) карты».

H. Лучший стажер фермера Джона

Деревья дп Потоки Структуры данных *3500

Руби только что получила место стажера на ферме Фермера Джона, победив в соревновании по программированию! В обязанности Руби входит обслуживание персикового дерева Фермера Джона — дерева, состоящего из \(n\) вершин, с корнем в вершине \(1\). В каждой вершине изначально содержится \(a_i = 0\) персиков. Могут происходить два вида событий:

  1. Событие роста в вершине \(x\): Руби должна выбрать либо родителя \(x\), либо любую вершину в поддереве \(x\), и увеличить количество персиков в ней на единицу.
  2. Событие сбора урожая в вершине \(x\): Руби должна выбрать одну вершину, которая находится в поддереве \(x\), и уменьшить количество содержащихся в ней персиков на единицу. Обратите внимание, что это не тот же набор вершин, что и в событии роста.
Обратите внимание, поддерево вершины \(x\) включает в себя саму вершину \(x\).

Руби также дан массив \(b\) длины \(n\). Персиковое дерево считается здоровым, если \(a_i \ge b_i\) для каждой вершины \(i\).

Руби предлагается выполнить \(q\) операций двух типов:

  • 1 x v — Выполнить \(v\) событий роста на вершине \(x\). Руби не обязательно выбирать одну и ту же вершину для увеличения в каждом событии роста.
  • 2 x v — Выполнить \(v\) событий сбора урожая на вершине \(x\). Руби не обязательно выбирать одну и ту же вершину для уменьшения в каждом событии сбора урожая.

Для каждого префикса операций она просит вас определить, может ли она выполнить эти операции в некотором порядке так, чтобы получившееся (после всех этих операций) персиковое дерево было здоровым. Обратите внимание, что Руби не может выполнять событие сбора урожая, которое сделает некоторое \(a_i\) отрицательным.

Каждый префикс операций независим, то есть для данной операции Руби может выбрать разные вершины для выполнения событий на каждом префиксе, содержащем эту операцию.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — размер дерева и количество операций.

Вторая строка содержит \(n - 1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \le p_i < i\)) — родителей вершин.

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i \le 10^6\)) — минимальное количество персиков, необходимое каждой вершине для того, чтобы персиковое дерево считалось здоровым.

Следующие \(q\) строк описывают операции, которые будет выполнять Руби. Каждая строка содержит три целых числа \(t\), \(x\) и \(v\) (\(1 \le t \le 2\), \(1 \le x \le n\), \(1 \le v \le 10^6\)). Если \(t = 1\), это означает, что Руби должна выполнить \(v\) событий роста на вершине \(x\). Если \(t = 2\), это означает, что Руби должна выполнить \(v\) событий урожая на вершине \(x\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), и сумма \(q\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) строк. Строка \(i\) должна содержать «YES», если Руби может сделать персиковое дерево здоровым после выполнения операций \(1, 2, \ldots, i\) в любом порядке. В противном случае она должна содержать «NO».

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «YEs», «Yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

Для префикса, содержащего операции \(1, 2, \ldots, 5\) в первом примере, Руби может выполнять операции в следующем порядке:

  1. Руби выполняет операцию \(2\) и решает увеличить \(a_4\) на \(9\) и \(a_5\) на \(8\).
  2. Руби выполняет операцию \(1\) и решает увеличить \(a_1\) на \(5\), \(a_3\) на \(2\), \(a_6\) на \(4\) и \(a_8\) на \(3\).
  3. Руби выполняет операцию \(3\) и решает увеличить \(a_2\) на \(7\).
  4. Руби выполняет операцию \(4\) и решает уменьшить \(a_2\) на \(1\).
  5. Руби выполняет операцию \(5\) и решает увеличить \(a_7\) на \(1\).

D1. Считать всегда весело (простая версия)

дп Комбинаторика математика Перебор *2400

Это простая версия задачи. Единственное различие между двумя версиями — ограничение на \(n\). Вы можете делать взломы, только если обе версии задачи решены.

Массив \(b\) из \(m\) целых неотрицательных чисел считается хорошим, если все элементы \(b\) можно сделать равными \(0\) с помощью применения следующей операции несколько (возможно, ноль) раз:

  • Выбрать два различных индекса \(l\) и \(r\) (\(1 \leq l \color{red}{<} r \leq m\)) и вычесть \(1\) из всех \(b_i\) таких, что \(l \leq i \leq r\).

Вам даны три целых положительных числа \(n\), \(k\) и простое число \(p\).

Среди всех \((k+1)^n\) массивов длины \(n\), таких, что \(0 \leq a_i \leq k\) для всех \(1 \leq i \leq n\), посчитайте количество хороших массивов.

Поскольку число может быть очень большим, от вас требуется найти его только по модулю \(p\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых положительных числа \(n\), \(k\) и \(p\) (\(3 \leq n \leq 400\), \(1 \leq k \leq n\), \(10^8 < p < 10^9\)) — длина массива \(a\), верхняя граница на элементы \(a\) и модуль \(p\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), а \(p\) является простым.

Выходные данные

Для каждого набора входных данных в новой строке выведите количество хороших массивов по модулю \(p\).

Примечание

В первом наборе входных данных \(4\) хорошими массивами \(a\) являются:

  • \([0,0,0]\);
  • \([0,1,1]\);
  • \([1,1,0]\);
  • \([1,1,1]\).

D2. Считать всегда весело (сложная версия)

дп Комбинаторика *2800

Это сложная версия задачи. Единственное различие между двумя версиями — ограничение на \(n\). Вы можете делать взломы, только если обе версии задачи решены.

Массив \(b\) из \(m\) целых неотрицательных чисел считается хорошим, если все элементы \(b\) можно сделать равными \(0\) с помощью применения следующей операции несколько (возможно, ноль) раз:

  • Выбрать два различных индекса \(l\) и \(r\) (\(1 \leq l \color{red}{<} r \leq m\)) и вычесть \(1\) из всех \(b_i\) таких, что \(l \leq i \leq r\).

Вам даны три целых положительных числа \(n\), \(k\) и простое число \(p\).

Среди всех \((k+1)^n\) массивов длины \(n\), таких, что \(0 \leq a_i \leq k\) для всех \(1 \leq i \leq n\), посчитайте количество хороших массивов.

Поскольку число может быть очень большим, от вас требуется найти его только по модулю \(p\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых положительных числа \(n\), \(k\) и \(p\) (\(3 \leq n \leq 3000\), \(1 \leq k \leq n\), \(10^8 < p < 10^9\)) — длина массива \(a\), верхняя граница на элементы \(a\) и модуль \(p\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(10^7\), а \(p\) является простым.

Выходные данные

Для каждого набора входных данных в новой строке выведите количество хороших массивов по модулю \(p\).

Примечание

В первом наборе входных данных \(4\) хорошими массивами \(a\) являются:

  • \([0,0,0]\);
  • \([0,1,1]\);
  • \([1,1,0]\);
  • \([1,1,1]\).

F. Минимальное расстояние Хэмминга

дп *3500

Вам дана бинарная строка\(^\dagger\) \(s\) длины \(n\).

Бинарная строка \(p\) той же длины \(n\) называется хорошей, если для каждого \(i\) (\(1 \leq i \leq n\)) существуют индексы \(l\) и \(r\) такие, что:

  • \(1 \leq l \leq i \leq r \leq n\)
  • \(s_i\) является модой\(^\ddagger\) строки \(p_lp_{l+1}\ldots p_r\)

Вам дана другая бинарная строка \(t\) длины \(n\). Найдите минимальное расстояние Хэмминга\(^\S\) между \(t\) и любой хорошей строкой \(g\).

\(^\dagger\) Бинарная строка — это строка, состоящая только из символов \(\mathtt{0}\) и \(\mathtt{1}\).

\(^\ddagger\) Символ \(c\) является модой строки \(p\) длины \(m\), если число вхождений \(c\) в \(p\) не меньше \(\lceil \frac{m}{2} \rceil\). Например, \(\mathtt{0}\) является модой \(\mathtt{010}\), \(\mathtt{1}\) не является модой \(\mathtt{010}\), и оба \(\mathtt{0}\) и \(\mathtt{1}\) являются модами \(\mathtt{011010}\).

\(^\S\) Расстояние Хэмминга между строками \(a\) и \(b\) длины \(m\) — это количество индексов \(i\) таких, что \(1 \leq i \leq m\) и \(a_i \neq b_i\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \le n \le 10^4\)) — длина бинарной строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\), состоящую из символов 0 и 1.

Третья строка каждого набора входных данных содержит бинарную строку \(t\) длины \(n\), состоящую из символов 0 и 1.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\), а также сумма \(n^2\) по всем наборам входных данных не превосходит \(10^8\).

Выходные данные

Для каждого набора входных данных выведите минимальное расстояние Хэмминга между \(t\) и любой хорошей строкой \(g\).

Примечание

В первом наборе входных данных \(g=\mathtt{000}\) — это хорошая строка, которая имеет расстояние Хэмминга \(0\) от \(t\).

Во втором наборе входных данных \(g=\mathtt{0011}\) — хорошая строка, имеющая расстояние Хэмминга \(2\) от \(t\). Можно доказать, что не существует хороших строк с расстоянием Хэмминга меньше \(2\) от \(t\).

В третьем наборе входных данных \(g=\mathtt{001100}\) — хорошая строка, имеющая расстояние Хэмминга \(1\) от \(t\).

D. Филин Серафим

дп жадные алгоритмы *1300

Ребята выстроились в очередь из \(n\) человек, начинающуюся с человека под номером \(i = 1\), чтобы узнать у филина Серафима, в чем смысл жизни. К сожалению, Кирилл был очень занят написанием легенды к этой задаче, поэтому пришел чуть позже и встал в конец очереди после \(n\)-го человека. Кирилла такое положение совершенно не устраивает, поэтому он решил подкупить некоторых людей впереди себя.

Для \(i\)-го человека в очереди Кирилл знает два значения: \(a_i\) и \(b_i\). Если в данный момент Кирилл стоит на позиции \(i\), то он может выбрать любую позицию \(j\) такую, что \(j < i\) и поменяться с человеком на позиции \(j\) местами. При этом Кириллу придется заплатить ему \(a_j\) монет. А для каждого \(k\) такого, что \(j < k < i\) Кириллу придется заплатить \(b_k\) монет человеку на позиции \(k\). Кирилл может выполнить это действие любое количество раз.

Кирилл человек бережливый, поэтому он хочет потратить как можно меньше монет, но он не хочет ждать слишком долго, поэтому Кирилл считает должен оказаться среди первых \(m\) человек в очереди.

Помогите Кириллу определить минимальное количество монет, которое ему придется потратить, чтобы не ждать слишком долго.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le m \le n \le 200\,000\)) — количество людей в очереди помимо Кирилла и максимальная допустимая финальная позиция Кирилла соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество монет, которое нужно потратить Кириллу.

B. Максимальная сумма

дп жадные алгоритмы математика *1100

У вас есть массив \(a\) из \(n\) целых чисел.

Вы выполняете ровно \(k\) операций над ним. В одной операции вы выбираете любой непрерывный подотрезок массива \(a\) (возможно, пустой) и вставляете сумму этого подотрезка в любое место массива.

Ваша задача — найти максимально возможную сумму массива после \(k\) таких операций.

Поскольку это число может быть очень большим, выведите ответ по модулю \(10^9 + 7\).

Напомним, что остаток от числа \(x\) по модулю \(p\) — это наименьшее неотрицательное \(y\), такое что существует целое число \(q\) и \(x = p \cdot q + y\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 2 \cdot 10^5\)) — длина массива \(a\) и количество операций, соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — сам массив \(a\).

Гарантируется, что сумма значений \(n\) и \(k\) для всех наборов входных данных случаев не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — максимальную сумму массива, которую можно получить после \(k\) операций по модулю \(10^9 + 7\).

Примечание

В первом наборе входных нам выгодно взять пустой подотрезок массива дважды и вставить сумму пустого подотрезка(ноль) куда угодно, тогда сумма полученного массива будет \((-4) + (-7) + 0 + 0 = -11\), по модулю \(10^9 + 7\) это \(999\,999\,996\).

Во втором наборе входных данных нам выгодно взять сумму всего массива трижды и разместить ее где угодно в массиве, тогда одна из возможных последовательностей действий: [\(2, 2, 8\)] \(\rightarrow\) [\(2, 2, 8, 12\)] \(\rightarrow\) [\(2, 2, 8, 12, 24\)] \(\rightarrow\) [\(2, 2, 8, 12, 24, 48\)], сумма конечного массива составляет \(2 + 2 + 8 + 12 + 24 + 48 = 96\).

В четвертом наборе входных данных нам выгодно взять подотрезок массива, состоящий из первых трех чисел (т.е. состоящий из чисел \(4, -2\) и \(8\)) и вставить его сумму в начало массива, тем самым получив массив [\(10, 4, -2, 8, -12, 9\)], сумма этого массива составляет \(17\).

В седьмом наборе входных данных нам всегда будет выгодно брать пустой подотрезок массива. В таком случае сумма получившегося массива не будет отличаться от суммы исходного. Ответом будет сумма исходного массива, взятая по модулю — \(42\), так как \((-6 \cdot (10^9 + 7) + 42 = -6\,000\,000\,000)\).

C. Разрезание дерева

Бинарный поиск Деревья дп жадные алгоритмы реализация *1600

Вам дано дерево из \(n\) вершин.

Ваша задача — найти такое максимальное число \(x\), что можно удалить из этого дерева ровно \(k\) ребер так, чтобы размер каждой оставшейся компоненты связности\(^{\dagger}\) был не менее \(x\).

\(^{\dagger}\) Две вершины \(v\) и \(u\) находятся в одной компоненте связности, если существует такая последовательность чисел \(t_1, t_2, \ldots, t_k\) произвольной длины \(k\), такая что \(t_1 = v\), \(t_k = u\), и для каждого \(i\) от \(1\) до \(k - 1\) вершины \(t_i\) и \(t_{i+1}\) соединены ребром.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k < n \le 10^5\)) — количество вершин в дереве и количество ребер, которое нужно удалить.

Каждая из следующих \(n - 1\) строк каждого набора входных данных содержит два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\)) — очередное ребро дерева.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите такое максимальное число \(x\), что можно удалить ровно \(k\) ребер дерева так, чтобы размер каждой оставшейся компоненты связности был равен не менее \(x\).

Примечание

Дерево в первом наборе входных данных:

После удаления ребра \(1\) — \(3\) дерево будет выглядеть следующим образом:

Дерево распалось на две компоненты связности. Первая компонента состоит из двух вершин: \(1\) и \(2\). Вторая компонента связности состоит из трех вершин: \(3, 4\) и \(5\). В обоих компонентах связности не менее двух вершин. Можно показать, что ответ \(3\) не достижим, поэтому ответ \(2\).

E. Девочка-перестановочка

дп Комбинаторика математика теория чисел *2200

Загадана какая-то перестановочка длины \(n\).

Вам даны индексы её префиксных максимумов и суффиксных максимумов.

Напомним, что перестановка длины \(k\) — это такой массив размера \(k\), что в нем встречается каждое целое число от \(1\) до \(k\) ровно один раз.

Префиксные максимумы — элементы, которые являются максимумом на префиксе, заканчивающемся в этом элементе. Более формально, элемент \(a_i\) является префиксным максимумом, если \(a_i > a_j\) для каждого \(j < i\).

Аналогично определяются суффиксные максимумы, элемент \(a_i\) является суффиксным максимумом, если \(a_i > a_j\) для каждого \(j > i\).

Требуется вывести количество различных перестановок, которые могли бы быть загаданы.

Так как это число может быть очень большим, выведите ответ по модулю \(10^9 + 7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, m_1\) и \(m_2\) (\(1 \le m_1, m_2 \le n \le 2 \cdot 10^5\)) — длина перестановки, количество префиксных и количество суффиксных максимумов соответственно.

Вторая строка каждого набора входных данных содержит \(m_1\) целых чисел \(p_1 < p_2 < \ldots < p_{m_1}\) (\(1 \le p_i \le n\)) — индексы префиксных максимумов в порядке возрастания.

Третья строка каждого набора входных данных содержит \(m_2\) целых чисел \(s_1 < s_2 < \ldots < s_{m_2}\) (\(1 \le s_i \le n\)) — индексы суффиксных максимумов в порядке возрастания.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — количество подходящих перестановок по модулю \(10^9 + 7\).

Примечание

Во втором наборе входных данных подходят следующие перестановки:

  • \([1, 4, 3, 2]\)
  • \([2, 4, 3, 1]\)
  • \([3, 4, 2, 1]\)

В шестом наборе входных данных подходят следующие перестановки:

  • \([2, 1, 6, 5, 3, 4]\)
  • \([3, 1, 6, 5, 2, 4]\)
  • \([3, 2, 6, 5, 1, 4]\)
  • \([4, 1, 6, 5, 2, 3]\)
  • \([4, 2, 6, 5, 1, 3]\)
  • \([4, 3, 6, 5, 1, 2]\)
  • \([5, 1, 6, 4, 2, 3]\)
  • \([5, 2, 6, 4, 1, 3]\)
  • \([5, 3, 6, 4, 1, 2]\)
  • \([5, 4, 6, 3, 1, 2]\)

F. Никто не нужен

2-sat дп поиск в глубину и подобное Структуры данных *2500

Олег в подарок на день рождения получил перестановку \(a\) длины \(n\).

Друг Олега Нечипор задает Олегу \(q\) вопросов, каждый вопрос характеризуется двумя числами \(l\) и \(r\), в ответ на вопрос Олег должен сказать количество наборов индексов \((t_1, t_2, \ldots, t_k)\) произвольной длины \(k \ge 1\) таких, что:

  • \(l \le t_i \le r\) для каждого \(i\) от \(1\) до \(k\).
  • \(t_i < t_{i+1}\) для каждого \(i\) от \(1\) до \(k-1\).
  • \(a_{t_{i+1}}\) делится на \(a_{t_i}\) для каждого \(i\) от \(1\) до \(k-1\).

Помогите Олегу и ответьте на все вопросы Нечипора.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^6\)) — длина перестановки и количество вопросов Нечипора.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — сама перестановка \(a\).

В каждой из следующих \(q\) строк каждого набора входных данных содержатся два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — очередной вопрос Нечипора.

Гарантируется, что сумма значений \(n\) и сумма значений \(q\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите ответы на все вопросы Нечипора.

Примечание

Все подходящие массивы в первом наборе входных данных: (\(1\)), (\(2\)), (\(3\)), (\(4\)), (\(5\)), (\(6\)), (\(7\)), (\(8\)), (\(1, 3\)), (\(1, 6\)), (\(1, 7\)), (\(1, 6, 7\)), (\(2, 3\)), (\(2, 4\)), (\(2, 5\)), (\(2, 6\)), (\(2, 7\)), (\(2, 8\)), (\(2, 6, 7\)), (\(6, 7\)).

Все подходящие массивы в четвертом наборе входных данных: (\(1\)), (\(2\)), (\(3\)), (\(4\)), (\(5\)), (\(6\)), (\(7\)), (\(8\)), (\(1, 2\)), (\(1, 3\)), (\(1, 4\)), (\(1, 5\)), (\(1, 6\)), (\(1, 7\)), (\(1, 8\)), (\(1, 2, 4\)), (\(1, 2, 6\)), (\(1, 2, 8\)), (\(1, 2, 4, 8\)), (\(1, 3, 6\)), (\(1, 4, 8\)), (\(2, 4\)), (\(2, 6\)), (\(2, 8\)), (\(2, 4, 8\)), (\(3, 6\)), (\(4, 8\)).

B. Исправление массива

дп жадные алгоритмы Перебор реализация *1100

Вам задан массив целых чисел \(a\) размера \(n\).

Вы можете выполнять следующую операцию любое количество раз (возможно, ни разу): взять любой элемент массива \(a\), который больше или равен \(10\), удалить его и вставить вместо него цифры, из которых состоял этот элемент, на ту же позицию, в том же порядке, в котором они шли в этом элементе.

Например:

  • если мы применим эту операцию к \(3\)-му элементу массива \([12, 3, 45, 67]\), то массив станет равен \([12, 3, 4, 5, 67]\).
  • если мы применим эту операцию ко \(2\)-му элементу массива \([2, 10]\), то массив станет равен \([2, 1, 0]\).

Ваша задача — определить, возможно ли сделать массив \(a\) отсортированным в неубывающем порядке, используя вышеописанную операцию любое количество раз (возможно, ни разу). Другими словами, вам нужно определить, возможно ли преобразовать массив \(a\) таким образом, чтобы выполнялось \(a_1 \le a_2 \le \dots \le a_k\), где \(k\) — текущая длина массива \(a\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(2 \le n \le 50\)).
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 99\)).
Выходные данные

Для каждого набора входных данных выведите YES, если возможно сделать \(a\) отсортированным в неубывающем порядке, используя вышеописанную операцию; в противном случае выведите NO.

Вы можете печатать каждую букву в любом регистре. Например, yes, Yes, YeS будут распознаны как положительный ответ.

Примечание

В первом примере вы можете разделить первый элемент, тогда массив станет равен \([1, 2, 3, 45, 67]\).

Во втором примере нет способа получить отсортированный массив.

В третьем примере массив уже отсортирован.

C. Стрелочный путь

графы дп Конструктив кратчайшие пути Перебор поиск в глубину и подобное *1300

Задано поле, состоящее из \(2\) строк и \(n\) столбцов. Строки нумеруются от \(1\) до \(2\) сверху вниз. Столбцы нумеруются от \(1\) до \(n\) слева направо. Каждая клетка поля содержит стрелку, указывающую либо влево, либо вправо. Ни одна стрелка не указывает за пределы поля.

Есть робот, который начинает в клетке \((1, 1)\). Каждую секунду происходят следующие два действия одно за другим:

  1. сначала робот двигается влево, вправо, вниз или вверх (он не может попытаться выйти за пределы поля и не может пропустить ход);
  2. затем он двигается по направлению стрелки, которая находится в текущей ячейке (в ячейке, в которой он окажется после своего хода).

Ваша задача — определить, может ли робот достичь клетки \((2, n)\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число (\(2 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит строку, состоящую ровно из \(n\) символов < и/или > — первая строка поля.

Третья строка содержит строку, состоящую ровно из \(n\) символов < и/или > — вторая строка поля.

Дополнительные ограничения на входные данные:

  • \(n\) — четное число;
  • нет стрелок, указывающих за пределы поля;
  • сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите YES, если робот может достичь клетки \((2, n)\); в противном случае выведите NO.

Вы можете печатать каждую букву в любом регистре. Например, yes, Yes, YeS будут распознаны как положительный ответ.

Примечание

В первом примере один из возможных путей выглядит следующим образом: \((1, 1) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3) \rightarrow (2, 4)\).

Во втором примере один из возможных путей выглядит следующим образом: \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2)\).

В третьем примере нет способа достичь клетки \((2, 4)\).

В четвертом примере один из возможных путей выглядит следующим образом: \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3) \rightarrow (2, 4) \rightarrow (2, 5) \rightarrow (2, 6)\).

A. Grove

геометрия дп Перебор поиск в глубину и подобное Теория вероятностей *3300

You want to plant trees in a square lawn of size \(n \times n\) whose corners have Cartesian coordinates \((0, 0)\), \((n, 0)\), \((0, n)\), and \((n, n)\). Trees can only be planted at locations with integer coordinates. Every tree will grow roots within a disk of radius \(r\) centered at the location where the tree was planted; such disks must be fully contained in the lawn (possibly touching the boundary of the lawn) and can only intersect each other on their boundaries.

Find a configuration that maximizes the number of trees.

Input

The first and only line contains an integer \(n\) (\(1 \leq n \leq 20\)) and a real number \(r\) (\(0 < r \leq n/2\)) — the length of the sides of the lawn, and the radius of the disks where each tree will grow roots. The real number \(r\) is given in decimal notation with at least \(1\) and at most \(3\) digits after the decimal point.

Output

In the first line, print the maximum number \(m\) of trees that can be planted.

In the next \(m\) lines, print a configuration that maximizes the number of trees. Specifically, in the \((i+1)\)-th line, print two integers \(x\) and \(y\) — the coordinates of the location where the \(i\)-th tree should be planted. You can print the trees in any order.

If there are multiple solutions, print any of them.

Note

For the first sample, the sample output is shown in the following figure. Note that this is not the only configuration that maximizes the number of trees.

For the second sample, the sample output is shown in the following figure. Note that this is not the only configuration that maximizes the number of trees.

C. Annual Ants' Gathering

Деревья дп жадные алгоритмы поиск в глубину и подобное *1900

Deep within a forest lies an ancient tree, home to \(n\) ants living in \(n\) tiny houses, indexed from \(1\) to \(n\), connected by the branches of the tree.

Once a year, all the ants need to gather to watch the EUC. For this, all ants move along the \(n-1\) branches of the tree they live on to meet at the home of one ant.

However, this year the ants could not agree on where to meet and need your help to gather up. You can tell all the ants currently at house \(u\) to move to house \(v\) if there is a branch directly connecting those two houses. However, the ants ignore your command if there are fewer ants gathered in house \(v\) than in house \(u\), i.e., if it would be easier for the ants from house \(v\) to move. This even holds true if no ant at all is currently in house \(v\). You can give this kind of commands as many times as you want.

Is it possible for you to gather all the ants in a single house?

Input

The first line contains one integer \(n\) (\(1\leq n\leq 200\,000\)) — the number of ant homes.

Each of the following \(n-1\) lines contains two integers \(u\) and \(v\) (\(1\leq u, v\leq n\)) — there is a branch directly connecting the house \(u\) and house \(v\). It is guaranteed that every ant can reach the house of any other ant just by following the branches of the tree.

Output

Print \(\texttt{YES}\) if it is possible to gather all the ants in a single house. Otherwise, print \(\texttt{NO}\).

Note

In the first sample, you can gather all the ants at house \(3\) as follows:

  • You tell to the ant at house \(4\) to move to house \(6\).
  • You tell to the ant at house \(2\) to move to house \(3\).
  • You tell to the two ants at house \(6\) to move to house \(3\) (which already contains two ants).
  • You tell to the ant at house \(5\) to move to house \(1\).
  • You tell to the ant at house \(7\) to move to house \(1\) (which already contains two ants).
  • You tell to the three ants at house \(1\) to move to house \(3\) (which already contains four ants).

In the second sample, it is impossible to gather all the ants in a single house.

D. Произведение двоичных десятичных чисел

дп Перебор реализация теория чисел *1100

Давайте назовем число двоичным десятичным, если это положительное целое число, и все цифры в его десятичной записи равны \(0\) или \(1\). Например, \(1\,010\,111\) является двоичным десятичным числом, в то время как \(10\,201\) и \(787\,788\) не являются таковыми.

Дано число \(n\), вам нужно определить, возможно ли представить \(n\) в виде произведения некоторых (не обязательно различных) двоичных десятичных чисел.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если \(n\) можно представить в виде произведения двоичных десятичных чисел, и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yES», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

Первые пять примеров можно представить в виде произведения двоичных десятичных чисел следующим образом:

  • \(121 = 11 \times 11\).
  • \(1 = 1\) уже является двоичным десятичным числом.
  • \(14\,641 = 11 \times 11 \times 11 \times 11\).
  • \(12\,221 = 11 \times 11 \times 101\).
  • \(10\,110 = 10\,110\) уже является двоичным десятичным числом.

G. Перемешивание песен

битмаски графы дп поиск в глубину и подобное реализация Строки хэши *1900

У Владислава есть плейлист, состоящий из \(n\) песен, пронумерованных от \(1\) до \(n\). Песня \(i\) имеет жанр \(g_i\) и автора \(w_i\). Он хочет составить плейлист таким образом, чтобы каждая пара соседних песен либо имела одного и того же автора, либо была из того же жанра (или и то, и другое). Он называет такой плейлист захватывающим. И \(g_i\), и \(w_i\) являются строками, длины не более \(10^4\).

Не всегда возможно составить захватывающий плейлист, используя все песни, поэтому процесс перемешивания происходит в два этапа. Сначала удаляются некоторое количество (возможно, нулевое) песен, а затем оставшиеся песни в плейлисте переставляются, чтобы сделать его захватывающим.

Поскольку Владислав не любит, когда песни удаляются из его плейлиста, он хочет, чтобы составление плейлиста выполнялось с минимальным количеством удалений. Помогите ему найти минимальное количество удалений, которые необходимо выполнить, чтобы можно было переставить оставшиеся песни, чтобы сделать плейлист захватывающим.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество тестов. Затем следует описание тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(1 \le n \le 16\)) — количество песен в исходном плейлисте.

Затем следуют \(n\) строк, \(i\)-я из которых содержит две строки строчных букв \(g_i\) и \(w_i\) (\(1 \leq |g_i|, |w_i| \leq 10^4\)) — жанр и автор \(i\)-й песни. Где \(|g_i|\) и \(|w_i|\) — длины строк.

Сумма \(2^n\) по всем тестам не превышает \(2^{16}\).

Сумма \(|g_i| + |w_i|\) по всем наборам входных данных не превышает \(4 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — минимальное количество удалений, необходимых для того, чтобы получившийся плейлист можно было сделать захватывающим.

Примечание

В первом тесте плейлист уже захватывающий.

Во втором тесте, если у вас есть песни в порядке \(4, 3, 1, 2\), это захватывающий плейлист, поэтому вам не нужно удалять никакие песни.

В третьем тесте вы можете удалить песни \(4, 5, 6, 7\). Тогда плейлист с песнями в порядке \(1, 2, 3\) будет захватывающим.

H. Щелчок Таноса

Бинарный поиск Деревья дп жадные алгоритмы игры *3200

Имеется массив \(a\) длины \(2^k\), который изначально является перестановкой значений от \(1\) до \(2^k\) для некоторого целого положительного числа \(k\). Алиса и Боб играют в следующую игру на массиве \(a\). Сначала Алисе и Бобу даётся значение \(t\) между \(1\) и \(k\). Затем, ровно \(t\) ходов происходит следующее:

  • Алиса либо ничего не делает, либо выбирает два различных элемента массива \(a\) и меняет их местами.
  • Боб выбирает либо левую половину, либо правую половину массива \(a\), и стирает её.

Счет игры определяется как максимальное значение в \(a\) после всех \(t\) ходов. Алиса хочет максимизировать этот счет, а Боб — минимизировать.

Вам нужно вывести \(k\) чисел: счет игры, если и Алиса, и Боб играют оптимально, для всех \(t\) от \(1\) до \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(k\) (\(1 \le k \le 20\)) — параметр длины массива \(a\).

Вторая строка каждого набора входных данных содержит \(2^k\) целых чисел \(a_1, a_2, \ldots, a_{2^k}\) (\(1 \le a_i \le 2^k\), \(a_i\) попарно различны) — заданный массив \(a\).

Гарантируется, что сумма \(2^k\) по всем наборам входных данных не превосходит \(2^{20}\).

Выходные данные

Для каждого набора входных данных выведите \(k\) чисел, где \(i\)-е число — это счет игры, если Алиса и Боб играют оптимально, а игра длится \(t = i\) ходов.

Примечание

В третьем наборе входных данных, для \(t = 2\), игра могла бы проходить следующим образом:

  • Изначально, \(a = [5, 1, 6, 4, 7, 2, 8, 3]\).
  • Алиса меняет местами \(a_6\) и \(a_8\), \(a\) становится \([5, 1, 6, 4, 7, 3, 8, 2]\).
  • Боб стирает правую половину массива, \(a\) становится \([5, 1, 6, 4]\).
  • Алиса ничего не делает, \(a\) остается \([5, 1, 6, 4]\).
  • Боб стирает правую половину массива, \(a\) становится \([5, 1]\).
  • Игра заканчивается со счётом \(5\).

D. Цветные шары

дп Комбинаторика математика сортировки *1800

Существуют шары \(n\) различных цветов; количество шаров \(i\)-го цвета равно \(a_i\).

Шары можно объединять в группы. Каждая группа должна содержать не более \(2\) шаров и не более \(1\) шара каждого цвета.

Рассмотрим все \(2^n\) множеств цветов. Для множества цветов обозначим его значение как минимальное количество групп, на которые могут быть разделены шары этих цветов. Например, если есть три цвета с \(3\), \(1\) и \(7\) шарами соответственно, их можно объединить в \(7\) групп (и не менее \(7\)), поэтому значение этого множества цветов равно \(7\).

Ваша задача — вычислить сумму значений по всем \(2^n\) возможным множествам цветов. Поскольку ответ может быть слишком большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — количество цветов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 5000\)) — количество шаров \(i\)-го цвета.

Дополнительное ограничение на входные данные: общее количество шаров не превышает \(5000\).

Выходные данные

Выведите одно целое число — сумму значений всех \(2^n\) множеств цветов, взятую по модулю \(998\,244\,353\).

Примечание

Рассмотрим первый пример. Есть \(8\) множеств цветов:

  • значение пустого множества равно \(0\);
  • значение множества \(\{1\}\) равно \(1\);
  • значение множества \(\{2\}\) равно \(1\);
  • значение множества \(\{3\}\) равно \(2\);
  • значение множества \(\{1,2\}\) равно \(1\);
  • значение множества \(\{1,3\}\) равно \(2\);
  • значение множества \(\{2,3\}\) равно \(2\);
  • значение множества \(\{1,2,3\}\) равно \(2\).

Таким образом, сумма значений по всем \(2^n\) множествам цветов равна \(11\).

F. Уникальные строки

дп Комбинаторика математика *3100

Назовем две строки \(a\) и \(b\) равными, если можно получить строку \(b\) циклическим сдвигом строки \(a\). Например, строки 0100110 и 1100100 — равны, а строки 1010 и 1100 — не равны.

Вам задана бинарная строка \(s\) длины \(n\). Каждый из ее первых \(c\) символов — это 1, а каждый из последних \(n - c\) символов — это 0.

За одну операцию вы можете заменить один 0 на 1.

Посчитайте количество уникальных строк, которые вы можете получить, используя не более \(k\) операций. Поскольку ответ может быть слишком большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая и единственная строка содержит три целых числа \(n\), \(c\) и \(k\) (\(1 \le n \le 3000\); \(1 \le c \le n\); \(0 \le k \le n - c\)) — длина строки \(s\), длина префикса из 1 и максимальное количество операций.

Выходные данные

Выведите одно целое число — количество уникальных строк, которые вы можете получить, выполнив не более \(k\) операций, по модулю \(10^9 + 7\).

Примечание

В первом тесте возможная строка: 1.

Во втором тесте возможные строки: 100, 110 и 111. Строка 101 равна 110, поэтому мы ее не учитываем.

В третьем тесте возможные строки: 10000, 11000, 10100. Строка 10010 равна 10100, а 10001 равна 11000.

F. Нечестная игра

дп жадные алгоритмы игры математика расписания *1800

Алиса и Боб собрались вечером, чтобы поиграть в увлекательную игру на последовательности из \(n\) натуральных чисел, не превосходящих \(4\). Правила игры слишком сложны для их описания, поэтому просто опишем критерий победы — Алиса побеждает, если исключающее ИЛИ всех чисел последовательности отлично от нуля, в противном случае же побеждает Боб.

Ребята позвали Еву, чтобы она выступала в качестве судьи. Изначально Алиса и Боб играют с \(n\) числами. После одной игры Ева удаляет одно из чисел из последовательности, затем Алиса и Боб играют с \(n-1\) числами, Ева снова удаляет одно из чисел, после чего Алиса и Боб играют с \(n - 2\) числами. Так продолжается до тех пор, пока последовательность чисел не пуста.

Еве кажется, что в такой игре Алиса почти всегда побеждает, поэтому она хочет, чтобы Боб выиграл как можно больше раз. Определите, какое максимальное количество раз Боб сможет победить Алису, если Ева будет удалять числа оптимально.

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит четыре целых числа \(p_i\) (\(0 \le p_i \le 200\)) — количество единиц, двоек, троек и четвёрок в последовательности в начале игры.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите максимальное количество раз, когда выиграет Боб, если Ева будет удалять числа оптимально.

Примечание

В первом примере Боб выигрывает, когда Ева ещё не убрала ни одного числа.

Во втором примере Боб выигрывает, если Ева уберёт одну единицу и одну тройку.

G. НОД на клетчатом поле

дп математика Перебор поиск в глубину и подобное реализация теория чисел *1900

Совсем недавно Егор узнал про алгоритм Евклида нахождения наибольшего общего делителя двух чисел. Наибольшим общим делителем двух чисел \(a\) и \(b\) называется наибольшее число, на которое \(a\) и \(b\) делятся без остатка. С помощью этих знаний Егор может решить задачу, которую он когда-то не решил.

У Василия есть клетчатое поле \(n\) строк на \(m\) столбцов, на пересечении \(i\)-й строки и \(j\)-го столбца находится число \({a_i}_j\). Егор хочет попасть из левого верхнего угла (на пересечении первой строки и первого столбца) в правый нижний угол (на пересечении последней строки и последнего столбца) и узнать, какой НОД у всех чисел на пути. Разрешается двигаться только вниз и вправо. Егор выписал несколько путей и получил разные значения НОД, ему стало интересно, какой максимальный НОД можно получить.

К сожалению, Егор устал считать НОД чисел и поэтому просит Вас помочь ему найти максимальный НОД чисел на пути из левого верхнего угла в правый нижний угол клетчатого поля.

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le {10}^{4}\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100\)) — количество строк и столбцов клетчатого поля.

Далее следует \(n\) строк, \(i\)-я строка содержит \(m\) целых чисел \((1 \le a_{i,j} \le {10}^{6}\)) — числа, записанные в \(i\)-й строке и \(j\)-м столбце клетчатого поля.

Гарантируется, что сумма \(n \cdot m\) не превосходит \(2 \cdot {10}^{5}\) по всем тестовым случаям.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите максимальное возможный НОД на пути из клетки левой верхней клетки в правую нижнюю клетку.

H. Самая безбашенная оборона

битмаски дп Конструктив кратчайшие пути Паросочетания Перебор Потоки *2300

Вы играете в очень популярную игру в жанре Tower Defense «Runnerfield 2». В ней игрок выставляет защитные башни, которые атакуют врагов, идущих от некоторой начальной точки до базы игрока.

Вам дано клетчатое поле размера \(n \times m\), на котором уже расставлены \(k\) башен и проложен маршрут, через который будут идти враги. Клетка на пересечении \(x\)-й строки и \(y\)-го столбца обозначается как \((x, y)\).

Каждую секунду башня наносит \(p_i\) единиц урона всем врагам в радиусе её действия. Например, если враг расположен в клетке \((x, y)\), а башня в \((x_i, y_i)\), и её радиус равен \(r\), тогда врагу будет нанесён урон \(p_i\), если \((x - x_i) ^ 2 + (y - y_i) ^ 2 \le r ^ 2\).

Враги идут из клетки \((1, 1)\) в клетку \((n, m)\), посещая каждую клетку пути ровно один раз. Враг моментально перемещается на соседнюю по горизонтали или вертикали клетку, однако перед этим он проводит в текущей клетке одну секунду. Если в эту секунду его здоровье стало равно нулю или ниже нуля, то враг больше не может перемещаться. Игрок проигрывает, если враг смог добраться до клетки \((n, m)\) и может сделать ещё одно перемещение.

По умолчанию все башни обладают нулевым радиусом действия, но игрок может сделать радиус башни равным целому числу \(r\) (\(r > 0\)) за это здоровье всех врагов увеличится на \(3^r\), однако каждое \(r\) может быть использовано не более чем для одной башни.

Допустим, враг имел \(h\) единиц базового здоровья. Если радиусы башен \(2\), \(4\) и \(5\), то его здоровье в начале пути будет \(h + 3 ^ 2 + 3 ^ 4 + 3 ^ 5 = h + 9 + 81 + 243 = h + 333\). Выбор радиусов происходит один раз до появления врагов и не может быть изменён после начала игры.

Найдите максимальное количество базового здоровья \(h\), при котором возможно установить радиусы так, чтобы игрок не проиграл при прохождении врага со здоровьем \(h\) (без учёта прибавок за радиусы башен).

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n, m \le 50, 1 \le k < n \cdot m\)) — размеры поля и количество башен на нём.

В следующих \(n\) строках даётся по \(m\) символов — описание очередной строки поля, где символ «.» обозначает пустую клетку, символ «#» клетку пути, по которой пройдут враги.

Далее следует \(k\) строк — описание башен. Каждая строка описания содержит три целых числа \(x_i\), \(y_i\) и \(p_i\) (\(1 \le x_i \le n, 1 \le y_i \le m, 1 \le p_i \le 500\)) — координаты башни и её параметр атаки. Все координаты соответствуют пустым клеткам на игровом поле, а так же все пары \((x_i, y_i)\) попарно различны.

Гарантируется, что сумма \(n \cdot m\) не превосходит \(2500\) по всем тестовым случаям.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите максимальное количество базового здоровья \(h\), при котором возможно установить радиусы так, чтобы игрок не проиграл при прохождении врага со здоровьем \(h\) (без учёта прибавок за радиусы башен).

Если невозможно выбрать радиусы даже для врага с \(1\) единицей базового здоровья, выведите «0».

Примечание

В первом примере нет смысла увеличивать радиус башни, так как она не сможет нанести достаточное количество урона монстру даже с \(1\) единицей здоровья.

Во втором примере радиус башни равен \(1\), она наносит урон монстру в клетках \((1, 1)\) и \((2, 2)\).

В третьем примере радиус башни равен \(2\), она наносит урон монстру на всех клетках пути. Если базовое здоровье врага \(1491\), то после прибавки за радиус башни его здоровье будет \(1491 + 3 ^ 2 = 1500\), что в точности будет равно урону, который ему нанесёт башня за три секунды.

В четвёртом примере у башни \((1, 2)\) радиус \(1\), а у башни \((3, 1)\) радиус \(2\).

D. Нина и MEX

битмаски дп жадные алгоритмы Конструктив математика Перебор разделяй и властвуй реализация *2000

Нина дала вам массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\).

Вы можете выполнить следующую операцию не более \(5\cdot 10^5\) раз (возможно, ноль):

  • Выбрать два целых числа \(l\) и \(r\) таких, что \(1 \le l \le r \le n\), вычислить \(x\) как \(\operatorname{MEX}(\{a_l, a_{l+1}, \ldots, a_r\})\), и одновременно присвоить \(a_l:=x, a_{l+1}:=x, \ldots, a_r:=x\).

Здесь \(\operatorname{MEX}\) множества целых чисел \(\{c_1, c_2, \ldots, c_k\}\) определяется как наименьшее неотрицательное целое число \(m\), которое не встречается в множестве \(c\).

Ваша цель — максимизировать сумму элементов массива \(a\). Найдите максимальную сумму и постройте последовательность операций, которая достигает этой суммы. Обратите внимание, что вам не нужно минимизировать количество операций в этой последовательности, вам лишь нужно использовать не более \(5\cdot 10^5\) операций в вашем решении.

Входные данные

В первой строке дано одно целое число \(n\) (\(1 \le n \le 18\)) — длина массива \(a\).

Во второй строке даны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0\leq a_i \leq 10^7\)) — массив \(a\).

Выходные данные

В первой строке выведите два целых числа \(s\) и \(m\) (\(0\le m\le 5\cdot 10^5\)) — максимальную сумму элементов массива \(a\) и количество операций в вашем решении.

В \(i\)-й из следующих \(m\) строк выведите два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)), представляющие параметры \(i\)-й операции.

Можно показать, что максимальная сумма элементов массива \(a\) всегда может быть получена не более чем за \(5 \cdot 10^5\) операций.

Примечание

В первом примере, после операции с \(l=1\) и \(r=2\) массив \(a\) становится равным \([2,2]\). Можно показать, что невозможно достичь большей суммы элементов \(a\), поэтому ответ \(4\).

Во втором примере, начальная сумма элементов равна \(13\), а достичь большей суммы невозможно.

В третьем примере массив \(a\) изменяется следующим образом:

  • после первой операции (\(l=3\), \(r=3\)), массив \(a\) становится равным \([1,100,0,1]\);
  • после второй операции (\(l=3\), \(r=4\)), массив \(a\) становится равным \([1,100,2,2]\).

Можно показать, что большей суммы элементов \(a\) достичь невозможно, поэтому ответ \(105\).

C. Как ходит ладья?

дп Комбинаторика математика *1600

Вам дана шахматная доска размером \(n \times n\), на которой вы и компьютер поочередно расставляете белые и черные ладьи соответственно. Расставляя ладьи, вы должны следить за тем, чтобы никакие две ладьи не атаковали друг друга. Две ладьи атакуют друг друга, если они находятся в одной строке или столбце независимо от цвета.

Правильный ход — установка ладьи на позиции (\(r\), \(c\)) так, чтобы она не атаковала никакую другую ладью.

Вы начинаете первым, и когда вы в свой ход сделаете правильный ход, поставив белую ладью на позицию (\(r\), \(c\)), компьютер отзеркалит ваш ход и в свой ход поставит черную ладью на позицию (\(c\), \(r\)). Если \(r = c\), то компьютер не сможет отзеркалить ваш ход и пропустит его.

Вы уже сыграли с компьютером \(k\) ходов (компьютер отразил и эти ходы), и вы должны продолжать игру, пока не останется ни одного правильного хода. Сколько различных конечных конфигураций можно получить, если продолжить игру после данных \(k\) ходов? Гарантируется, что \(k\) сделанных ходов были правильными. Так как ответ может быть большим, выведите его по модулю \(10^9+7\).

Две конфигурации считаются различными, если существует координата (\(r\), \(c\)), в которой ладья есть в одной конфигурации, но нет в другой, или цвет ладьи на координате отличается.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 3 \cdot 10^5\), \(0 \leq k \leq n\)) — размер шахматной доски и количество ходов, которое вы уже сыграли соответственно.

Каждая из следующих \(k\) строк набора входных данных содержит по два целых числа \(r_i\) и \(c_i\), описывающих ваш \(i\)-й ход.

Гарантируется, что все \(k\) ходов являются правильными.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно число — общее количество возможных конечных конфигураций по модулю \(10^9+7\).

Примечание

В первом наборе входных данных у нас есть поле \(4 \times 4\), и вы уже сыграли \(1\) ход. После того как вы и компьютер сыграли по одному ходу, на поле есть белая ладья на (\(1\), \(2\)) и черная ладья на (\(2\), \(1\)). Из этого состояния возможны три конфигурации —

  1. Вы ставите белую ладью на (\(3\), \(4\)), а компьютер в ответ ставит черную ладью на (\(4\), \(3\)).
  2. Вы ставите белую ладью на (\(4\), \(3\)), а компьютер в ответ ставит черную ладью на (\(3\), \(4\)).
  3. Вы ставите белую ладью на (\(3\), \(3\)), а затем на (\(4\), \(4\)), или наоборот. Оба варианта приводят к одной и той же конфигурации.

D. Битовое неравенство

битмаски дп математика Перебор *1900

Вам дан массив \(a_1, a_2, \ldots, a_n\). Найдите количество троек чисел (\(x, y, z\)) таких, что:

  • \(1 \leq x \leq y \leq z \leq n\), и
  • \(f(x, y) \oplus f(y, z) > f(x, z)\).

Определим \(f(l, r) = a_l \oplus a_{l + 1} \oplus \ldots \oplus a_{r}\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — количество подходящих троек.

Примечание

В первом наборе входных данных для массива \([6, 2, 4]\) есть 4 подходящие тройки чисел:

  • (\(1\), \(2\), \(2\)): \((a_1 \oplus a_2) \oplus (a_2) = 4 \oplus 2 > (a_1 \oplus a_2) = 4\)
  • (\(1\), \(1\), \(3\)): \((a_1) \oplus (a_1 \oplus a_2 \oplus a_3) = 6 \oplus 0 > (a_1 \oplus a_2 \oplus a_3) = 0\)
  • (\(1\), \(2\), \(3\)): \((a_1 \oplus a_2) \oplus (a_2 \oplus a_3) = 4 \oplus 6 > (a_1 \oplus a_2 \oplus a_3) = 0\)
  • (\(1\), \(3\), \(3\)): \((a_1 \oplus a_2 \oplus a_3) \oplus (a_3) = 0 \oplus 4 > (a_1 \oplus a_2 \oplus a_3) = 0\)

Во втором наборе входных данных подходящих троек нет.

E. Карусель комбинаций

дп Комбинаторика математика Перебор теория чисел *2400

Вам дано целое число \(n\). Значение функции \(C(i,k)\) представляет собой количество различных способов, которыми можно выбрать \(k\) различных чисел из множества {\(1, 2, \ldots, i\)} и расположить их по кругу\(^\dagger\).

Найдите значение \(\) \sum\limits_{i=1}^n \sum\limits_{j=1}^i \left( C(i,j) \bmod j \right). \(\) Здесь операция \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Поскольку это значение может быть очень большим, найдите его по модулю \(10^9+7\).

\(^\dagger\) Две последовательности считаются одинаковыми расстановками чисел по кругу, если одну из последовательностей можно циклически сдвинуть так, чтобы она совпала с другой. Например, \([1, 2, 3]\) и \([2, 3, 1]\) являются одинаковыми расстановками по кругу.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^6\)).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке одно число — значение вычисляемого выражения по модулю \(10^9+7\).

Примечание

В первом наборе входных данных \(C(1,1) \bmod 1 = 0\).

Во втором наборе входных данных:

  • \(C(1,1)=1\) (способы: \([1]\));
  • \(C(2,1)=2\) (способы: \([1]\), \([2]\));
  • \(C(2,2)=1\) (способы: \([1, 2]\));
  • \(C(3,1)=3\) (способы: \([1]\), \([2]\), \([3]\));
  • \(C(3,2)=3\) (способы: \([1, 2]\), \([2, 3]\), \([3, 1]\));
  • \(C(3,3)=2\) (способы: \([1, 2, 3]\), \([1, 3, 2]\)).
Итого, \(\left(C(1,1) \bmod 1\right) + \left(C(2,1) \bmod 1\right) + \left(C(2,2) \bmod 2\right) + \left(C(3,1) \bmod 1\right) + \left(C(3,2) \bmod 2\right) + \left(C(3,3) \bmod 3\right) = 4\).

A. 1-3-5

*особая задача дп *1100

В Берляндии обычно используются монеты номиналом в \(1\), \(3\) и \(5\) бурлей (бурли — местная валюта).

Еве нужно заплатить ровно \(n\) бурлей в магазине. У нее бесконечное количество монет всех трех типов. Однако ей не нравится платить монетами номиналом в \(1\) бурль.

Помогите Еве рассчитать минимальное количество монет номиналом в \(1\) бурль, которые ей нужно использовать, если она должна заплатить ровно \(n\) бурлей. Обратите внимание, что она может потратить любое количество монет номиналом в \(3\) и/или \(5\) бурлей.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей одно целое число \(n\) (\(1 \le n \le 100\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество монет номиналом в \(1\) бурль, которые должна использовать Ева.

Примечание

В первом наборе входных данных Ева может использовать \(1\) монету номиналом в \(1\) бурль и \(2\) монеты номиналом в \(3\) бурля.

Во втором наборе входных данных Ева может использовать \(1\) монету номиналом в \(3\) бурля и \(1\) монету номиналом в \(5\) бурлей.

В третьем наборе входных данных Ева может использовать \(14\) монет номиналом в \(3\) бурля.

В четвертом наборе входных данных Ева может использовать \(2\) монеты номиналом в \(1\) бурль.

В пятом наборе входных данных Ева может использовать \(2\) монеты номиналом в \(3\) бурля и \(1\) монету номиналом в \(5\) бурлей.

H. Составные заклинания

*особая задача дп *2600

Монокарп играет в фэнтезийную РПГ. Его персонаж — маг, поэтому он колдует заклинания. Существует два типа заклинаний, которые он знает — базовые заклинания и составные заклинания.

В книге заклинаний Монокарпа есть \(n\) базовых заклинаний, пронумерованных от \(1\) до \(n\). Каждое базовое заклинание просто изменяет здоровье цели: либо уменьшает его, либо увеличивает. \(i\)-е базовое заклинание изменяет значение здоровья цели на \(b_i\) (увеличивает на \(b_i\), если \(b_i\) неотрицательное, или уменьшает на \(|b_i|\), если \(b_i\) отрицательное). Если значение здоровья цели становится равным \(0\) или ниже, она умирает, и все следующие заклинания, нацеленные на нее, ничего не делают.

Также в книге заклинаний есть \(m\) составных заклинаний, пронумерованных от \(n+1\) до \(n+m\). Каждое составное заклинание — это последовательность других заклинаний, колдуемых в определенном порядке. Составное заклинание может состоять как из базовых заклинаний, так и из составных заклинаний; \(i\)-е заклинание состоит из \(s_i\) других заклинаний, и каждое из этих заклинаний имеет индекс строго меньший \(i\) (таким образом, не возникает ситуации, когда составные заклинания бесконечно колдуют друг друга). Таким образом, каждое составное заклинание можно рассматривать как конечную последовательность базовых заклинаний, хотя его длина может быть огромной. Обратите внимание, что одно и то же заклинание может появляться в сложном заклинании несколько раз.

Монокарп решил колдовать \((n+m)\)-е заклинание из своей книги заклинаний. Цель этого заклинания — монстр с начальным значением здоровья \(hp\). Монокарп хочет знать, умрет ли монстр или нет, и если он умрет, какое базовое заклинание его убьет.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных представлен следующим образом:

  • первая строка содержит два целых числа \(n\) и \(hp\) (\(1 \le n \le 5000\); \(1 \le hp \le 10^{9}\)) — количество базовых заклинаний и начальное значение здоровья монстра;
  • вторая строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(-10^9 \le b_i \le 10^9\)) — описания базовых заклинаний;
  • третья строка содержит одно целое число \(m\) (\(1 \le m \le 5000\)) — количество составных заклинаний;
  • затем следуют \(m\) строк, \(i\)-я из которых описывает \((n+i)\)-е заклинание: она начинается с целого числа \(s_{n+i}\) (\(1 \le s_{n+i} \le 5000\)), обозначающего длину заклинания (количество заклинаний, из которых оно состоит); затем следует последовательность целых чисел от \(1\) до \((n+i-1)\), обозначающих последовательность заклинаний.

Дополнительные ограничения на ввод:

  • сумма \(n\) по всем тестам не превышает \(5000\);
  • сумма \(m\) по всем тестам не превышает \(5000\);
  • общая длина всех сложных заклинаний по всем тестам не превышает \(5000\).
Выходные данные

Для каждого набора входных данных выведите одно целое число:

  • если монстр умирает, выведите индекс базового заклинания, которое его убьет;
  • в противном случае выведите \(-1\).

C. Дерево Фенвика

битмаски Деревья дп Комбинаторика математика Перебор Структуры данных *2300

Пусть \(\operatorname{lowbit}(x)\) обозначает значение младшего двоичного бита \(x\), например, \(\operatorname{lowbit}(12)=4\), \(\operatorname{lowbit}(8)=8\).

Для массива \(a\) длины \(n\), если массив \(s\) длины \(n\) удовлетворяет условию \(s_k=\left(\sum\limits_{i=k-\operatorname{lowbit}(k)+1}^{k}a_i\right)\bmod 998\,244\,353\) для всех \(k\), то \(s\) называется Деревом Фенвика массива \(a\). Обозначим его как \(s=f(a)\).

Для целого положительного числа \(k\) и массива \(a\), \(f^k(a)\) определяется следующим образом:

\(\) f^k(a)= \begin{cases} f(a)&\textrm{если }k=1\\ f(f^{k-1}(a))&\textrm{иначе.}\\ \end{cases} \(\)

Вам дан массив \(b\) длины \(n\) и целое положительное число \(k\). Найдите массив \(a\), который удовлетворяет условию \(0\le a_i < 998\,244\,353\) и \(f^k(a)=b\). Можно доказать, что ответ всегда существует. Если существует несколько ответов, вы можете вывести любой из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых положительных числа \(n\) (\(1 \leq n \leq 2\cdot 10^5\)) и \(k\) (\(1\le k\le 10^9\)), обозначающих длину массива и количество раз выполнения функции \(f\).

Вторая строка каждого набора входных данных содержит массив \(b_1, b_2, \ldots, b_n\) (\(0\le b_i < 998\,244\,353\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую корректный массив \(a\) длины \(n\).

Примечание

Из первого набора входных данных видно, что \(f^1([1,1,1,1,1,1,1,1])=[1,2,1,4,1,2,1,8]\).

Во втором наборе входных данных видно, что \(f^2([1,2,3,4,5,6])=f^1([1,3,3,10,5,11])=[1,4,3,17,5,16]\).

E1. Снова считаем массивы (простая версия)

бпф дп Комбинаторика математика *3100

Это простая версия задачи. Разница между двумя версиями заключается в ограничениях на \(n, m, b_0\) и ограничении по времени. Вы можете делать взломы, только если обе версии решены.

Малышка R уже посчитала множество множеств, и теперь она решила посчитать массивы.

Малышка R считает, что массив \(b_0, \ldots, b_n\), состоящий из целых неотрицательных чисел, является непрерывным тогда и только тогда, когда для каждого \(i\), такого что \(1 \leq i \leq n\), выполняется \(\lvert b_i - b_{i-1} \rvert = 1\). Ей нравится непрерывность, поэтому она хочет генерировать только непрерывные массивы.

Если малышке R даны \(b_0\) и \(a_1, \ldots, a_n\), то она попытается сгенерировать неотрицательный непрерывный массив \(b\), который не имеет сходства с \(a\). Более формально, для всех \(1 \leq i \leq n\), \(a_i \neq b_i\).

Однако у малышки R нет никакого массива \(a\). Вместо этого она дала вам \(n\), \(m\) и \(b_0\). Она хочет посчитать количество различных целочисленных массивов \(a_1, \ldots, a_n\), удовлетворяющих условиям:

  • \(1 \leq a_i \leq m\);
  • Можно сгенерировать хотя бы один неотрицательный непрерывный массив \(b_0, \ldots, b_n\).

Заметим, что \(b_i \geq 0\), но \(b_i\) может быть произвольно большим.

Поскольку ответ может быть очень большим, выведите ответ по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке указано количество наборов входных данных \(t\ (1 \leq t \leq 10^4)\). Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(b_0\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq m \leq 2 \cdot 10^5\), \(0 \leq b_0 \leq 2\cdot 10^5\)) — длина массива \(a_1, \ldots, a_n\), максимально возможный элемент в \(a_1, \ldots, a_n\), и начальный элемент массива \(b_0, \ldots, b_n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую целое число: количество различных массивов \(a_1, \ldots, a_n\), удовлетворяющих условиям, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных, например, когда \(a = [1, 2, 1]\), мы можем задать \(b = [1, 0, 1, 0]\). Когда \(a = [1, 1, 2]\), мы можем задать \(b = [1, 2, 3, 4]\). Всего существует \(6\) допустимых вариантов \(a_1, \ldots, a_n\): можно доказать, что только \(a = [2, 1, 1]\) и \(a = [2, 1, 2]\) делают невозможным построение неотрицательной непрерывного \(b_0, \ldots, b_n\), поэтому ответ равен \(2^3 - 2 = 6\).

E2. Снова считаем массивы (сложная версия)

дп Комбинаторика математика *3500

Это сложная версия задачи. Разница между двумя версиями заключается в ограничениях на \(n, m, b_0\) и ограничении по времени. Вы можете делать взломы, только если обе версии решены.

Малышка R уже посчитала множество множеств, и теперь она решила посчитать массивы.

Малышка R считает, что массив \(b_0, \ldots, b_n\), состоящий из целых неотрицательных чисел, является непрерывным тогда и только тогда, когда для каждого \(i\), такого что \(1 \leq i \leq n\), выполняется \(\lvert b_i - b_{i-1} \rvert = 1\). Ей нравится непрерывность, поэтому она хочет генерировать только непрерывные массивы.

Если малышке R даны \(b_0\) и \(a_1, \ldots, a_n\), то она попытается сгенерировать неотрицательный непрерывный массив \(b\), который не имеет сходства с \(a\). Более формально, для всех \(1 \leq i \leq n\), \(a_i \neq b_i\).

Однако у малышки R нет никакого массива \(a\). Вместо этого она дала вам \(n\), \(m\) и \(b_0\). Она хочет посчитать количество различных целочисленных массивов \(a_1, \ldots, a_n\), удовлетворяющих условиям:

  • \(1 \leq a_i \leq m\);
  • Можно сгенерировать хотя бы один неотрицательный непрерывный массив \(b_0, \ldots, b_n\).

Заметим, что \(b_i \geq 0\), но \(b_i\) может быть произвольно большим.

Поскольку ответ может быть очень большим, выведите ответ по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке указано количество наборов входных данных \(t\ (1 \leq t \leq 10^4)\). Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(b_0\) (\(1 \leq n \leq 2 \cdot 10^6\), \(1 \leq m \leq 2 \cdot 10^6\), \(0 \leq b_0 \leq 2\cdot 10^6\)) — длина массива \(a_1, \ldots, a_n\), максимально возможный элемент в \(a_1, \ldots, a_n\), и начальный элемент массива \(b_0, \ldots, b_n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^7\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую целое число: количество различных массивов \(a_1, \ldots, a_n\), удовлетворяющих условиям, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных, например, когда \(a = [1, 2, 1]\), мы можем задать \(b = [1, 0, 1, 0]\). Когда \(a = [1, 1, 2]\), мы можем задать \(b = [1, 2, 3, 4]\). Всего существует \(6\) допустимых вариантов \(a_1, \ldots, a_n\): можно доказать, что только \(a = [2, 1, 1]\) и \(a = [2, 1, 2]\) делают невозможным построение неотрицательной непрерывного \(b_0, \ldots, b_n\), поэтому ответ равен \(2^3 - 2 = 6\).

G1. Деление + LCP (простая версия)

Бинарный поиск дп Строки строковые суфф. структуры Структуры данных хэши *1900

Это простая версия задачи. В этой версии \(l=r\).

Дана строка \(s\). Для фиксированного \(k\) рассмотрим деление \(s\) на ровно \(k\) непрерывных подстрок \(w_1,\dots,w_k\). Пусть \(f_k\) — максимально возможное \(LCP(w_1,\dots,w_k)\) среди всех делений.

\(LCP(w_1,\dots,w_m)\) — это длина самого длинного общего префикса строк \(w_1,\dots,w_m\).

Например, если \(s=abababcab\) и \(k=4\), то возможное деление \(\color{red}{ab}\color{blue}{ab}\color{orange}{abc}\color{green}{ab}\). \(LCP(\color{red}{ab},\color{blue}{ab},\color{orange}{abc},\color{green}{ab})\) равно \(2\), так как \(ab\) — самый длинный общий префикс этих четырех строк. Обратите внимание, что каждая подстрока состоит из непрерывного сегмента символов, и каждый символ принадлежит ровно одной подстроке.

Ваша задача — найти \(f_l,f_{l+1},\dots,f_r\). В этой версии \(l=r\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого теста содержит три целых числа \(n\), \(l\) и \(r\) (\(1 \le l = r \le n \le 2 \cdot 10^5\)) — длина строки и заданный диапазон.

Вторая строка каждого набора содержит строку \(s\) из \(n\) символов, все символы — строчные буквы английского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(r-l+1\) значений: \(f_l,\dots,f_r\).

Примечание

В первом примере \(n=k\), поэтому единственное деление \(aba\)\(\color{red}a\color{blue}b\color{orange}a\). Ответ — ноль, потому что у этих строк нет общего префикса.

Во втором примере единственное деление — \(\color{red}a\color{blue}a\color{orange}a\). Их самый длинный общий префикс равен одному.

G2. Деление + LCP (сложная версия)

Бинарный поиск дп математика Перебор Строки строковые суфф. структуры Структуры данных хэши *2200

Это cложная версия задачи. В этой версии \(l\le r\).

Дана строка \(s\). Для фиксированного \(k\) рассмотрим деление \(s\) на ровно \(k\) непрерывных подстрок \(w_1,\dots,w_k\). Пусть \(f_k\) — максимально возможное \(LCP(w_1,\dots,w_k)\) среди всех делений.

\(LCP(w_1,\dots,w_m)\) — это длина самого длинного общего префикса строк \(w_1,\dots,w_m\).

Например, если \(s=abababcab\) и \(k=4\), то возможное деление \(\color{red}{ab}\color{blue}{ab}\color{orange}{abc}\color{green}{ab}\). \(LCP(\color{red}{ab},\color{blue}{ab},\color{orange}{abc},\color{green}{ab})\) равно \(2\), так как \(ab\) — самый длинный общий префикс этих четырех строк. Обратите внимание, что каждая подстрока состоит из непрерывного сегмента символов, и каждый символ принадлежит ровно одной подстроке.

Ваша задача — найти \(f_l,f_{l+1},\dots,f_r\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого теста содержит три целых числа \(n\), \(l\) и \(r\) (\(1 \le l \le r \le n \le 2 \cdot 10^5\)) — длина строки и заданный диапазон.

Вторая строка каждого набора содержит строку \(s\) из \(n\) символов, все символы — строчные буквы английского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(r-l+1\) значений: \(f_l,\dots,f_r\).

C. Минимизация суммы

дп реализация *1700

Задан целочисленный массив \(a\) размера \(n\).

Вы можете выполнить следующую операцию: выбрать элемент массива и заменить его значением любого из его соседей.

Например, если \(a=[3, 1, 2]\), вы можете получить один из массивов \([3, 3, 2]\), \([3, 2, 2]\) и \([1, 1, 2]\) за одну операцию, но не \([2, 1, 2\)] и \([3, 4, 2]\).

Ваша задача — посчитать минимально возможную сумму массива, если вы можете выполнить вышеописанную операцию не более \(k\) раз.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 3 \cdot 10^5\); \(0 \le k \le 10\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможную сумму массива, если вы можете выполнить вышеописанную операцию не более \(k\) раз.

Примечание

В первом примере одна из возможных последовательностей операций: \([3, 1, 2] \rightarrow [1, 1, 2\)].

Во втором примере не нужно применять операцию.

В третьем примере одна из возможных последовательностей операций: \([2, 2, 1, 3] \rightarrow [2, 1, 1, 3] \rightarrow [2, 1, 1, 1]\).

В четвертом примере одна из возможных последовательностей операций: \([4, 1, 2, 2, 4, 3] \rightarrow [1, 1, 2, 2, 4, 3] \rightarrow [1, 1, 1, 2, 4, 3] \rightarrow [1, 1, 1, 2, 2, 3]\).

E. Уникальный массив

Бинарный поиск дп жадные алгоритмы разделяй и властвуй Структуры данных *2400

Задан целочисленный массив \(a\) размера \(n\). Подмассивом массива \(a\) назовем его непрерывную подпоследовательность (то есть массив \([a_l, a_{l+1}, \dots, a_r]\) для некоторых \(l\) и \(r\), удовлетворяющих условию \(1 \le l < r \le n\)). Назовем подмассив уникальным, если в нем есть целое число, которое встречается ровно один раз.

Вы можете выполнять следующую операцию любое количество раз (возможно, ни разу): выберите элемент массива и замените его любым целым числом.

Ваша задача — посчитать минимальное количество вышеописанных операций, чтобы все подмассивы массива \(a\) стали уникальными.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество вышеописанных операций, чтобы все подмассивы массива \(a\) стали уникальными.

Примечание

Во втором наборе входных данных можно заменить \(1\)-й и \(3\)-й элемент, например, следующим образом: \([3, 4, 1, 4]\).

В третьем наборе входных данных можно заменить \(4\)-й элемент, например, следующим образом: \([3, 1, 2, 3, 2]\).

F. Пары карт

дп жадные алгоритмы реализация хэши *3000

Есть колода из \(n\) карт, каждая из которых имеет один из \(k\) типов. Вам дана последовательность \(a_1, a_2, \dots, a_n\), обозначающая типы карт в колоде сверху вниз. И \(n\), и \(k\) — четные числа.

Вы играете с этими картами. Сначала вы берете \(k\) верхних карт из колоды. Затем происходит следующее на каждом ходу игры:

  • вы выбираете ровно две карты из вашей руки и играете их. Если у этих карт одинаковый тип, вы зарабатываете монету;
  • затем, если колода не пуста, вы берете ровно две верхние карты из нее;
  • затем, если и ваша рука, и ваша колода пусты, игра заканчивается. В противном случае начинается новый ход.

Вам нужно посчитать максимальное количество монет, которое вы можете заработать во время игры.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 1000\), оба \(n\) и \(k\) — четные).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le k\)).

Выходные данные

Выведите одно целое число — максимальное количество монет, которое вы можете заработать.

C2. Game on Tree (Medium)

Деревья дп игры поиск в глубину и подобное *1700

This is the medium version of the problem. The difference in this version is that \(t=1\) and we work on trees.

Ron and Hermione are playing a game on a tree of \(n\) nodes that are initially inactive. The game consists of \(t\) rounds, each of which starts with a stone on exactly one node, which is considered as activated. A move consists of picking an inactive neighbor of the node with a stone on it and moving the stone there (thus activating this neighbor). Ron makes the first move, after which he alternates with Hermione until no valid move is available. The player that cannot make a move loses the round. If both players play optimally, who wins each round of this game?

Note that all the rounds are played with the same tree; only the starting node changes. Moreover, after each round, all active nodes are considered inactive again.

Input

The first line contains integers \(n\) (\(2 \leq n \leq 2\times 10^5\)), \(t\) (\(t=1\)), the number of nodes in the tree and the number of rounds, respectively.

The next \(n-1\) lines contain two integers \(1 \leq u, v \leq n\) each, corresponding to an edge of the tree.

The next line contains \(t\) integers \(1 \leq u_1 , \dots, u_t \leq n\), corresponding to the node where the stone is initially put.

Output

The output consists of \(t=1\) line which is either "Ron" or "Hermione".

C3. Game on Tree (Hard)

Деревья дп игры поиск в глубину и подобное *1900

This is the hard version of the problem. The only difference in this version is the constraint on \(t\).

Ron and Hermione are playing a game on a tree of \(n\) nodes that are initially inactive. The game consists of \(t\) rounds, each of which starts with a stone on exactly one node, which is considered as activated. A move consists of picking an inactive neighbor of the node with a stone on it and moving the stone there (thus activating this neighbor). Ron makes the first move, after which he alternates with Hermione until no valid move is available. The player that cannot make a move loses the round. If both players play optimally, who wins each round of this game?

Note that all the rounds are played with the same tree; only the starting node changes. Moreover, after each round, all active nodes are considered inactive again.

Input

The first line contains integers \(n\) (\(2 \leq n \leq 2\times 10^5\)), \(t\) (\(1 \leq t \leq n\)), the number of nodes in the tree and the number of rounds, respectively.

The next \(n-1\) lines contain two integers \(1 \leq u, v \leq n\) each, corresponding to an edge of the tree.

The next line contains \(t\) integers \(1 \leq u_1 , \dots , u_t \leq n\), corresponding to the node where the stone is initially put.

Output

The output consists of \(t\) lines, each line being either "Ron" or "Hermione".

E1. Trails (Easy)

дп *1800

Harry Potter is hiking in the Alps surrounding Lake Geneva. In this area there are \(m\) cabins, numbered 1 to \(m\). Each cabin is connected, with one or more trails, to a central meeting point next to the lake. Each trail is either short or long. Cabin \(i\) is connected with \(s_i\) short trails and \(l_i\) long trails to the lake.

Each day, Harry walks a trail from the cabin where he currently is to Lake Geneva, and then from there he walks a trail to any of the \(m\) cabins (including the one he started in). However, as he has to finish the hike in a day, at least one of the two trails has to be short.

How many possible combinations of trails can Harry take if he starts in cabin 1 and walks for \(n\) days?

Give the answer modulo \(10^9 + 7\).

Input

The first line contains the integers \(m\) and \(n\).

The second line contains \(m\) integers, \(s_1, \dots, s_m\), where \(s_i\) is the number of short trails between cabin \(i\) and Lake Geneva.

The third and last line contains \(m\) integers, \(l_1, \dots, l_m\), where \(l_i\) is the number of long trails between cabin \(i\) and Lake Geneva.

We have the following constraints:

\(0 \le s_i, l_i \le 10^3\).

\(1 \le m \le 10^2\).

\(1 \le n \le 10^3\).

Output

The number of possible combinations of trails, modulo \(10^9 + 7\).

E2. Trails (Medium)

дп матрицы *2000

Harry Potter is hiking in the Alps surrounding Lake Geneva. In this area there are \(m\) cabins, numbered 1 to \(m\). Each cabin is connected, with one or more trails, to a central meeting point next to the lake. Each trail is either short or long. Cabin \(i\) is connected with \(s_i\) short trails and \(l_i\) long trails to the lake.

Each day, Harry walks a trail from the cabin where he currently is to Lake Geneva, and then from there he walks a trail to any of the \(m\) cabins (including the one he started in). However, as he has to finish the hike in a day, at least one of the two trails has to be short.

How many possible combinations of trails can Harry take if he starts in cabin 1 and walks for \(n\) days?

Give the answer modulo \(10^9 + 7\).

Input

The first line contains the integers \(m\) and \(n\).

The second line contains \(m\) integers, \(s_1, \dots, s_m\), where \(s_i\) is the number of short trails between cabin \(i\) and Lake Geneva.

The third and last line contains \(m\) integers, \(l_1, \dots, l_m\), where \(l_i\) is the number of long trails between cabin \(i\) and Lake Geneva.

We have the following constraints:

\(0 \le s_i, l_i \le 10^3\).

\(1 \le m \le 10^2\).

\(1 \le n \le 10^9\).

Output

The number of possible combinations of trails, modulo \(10^9 + 7\).

E3. Trails (Hard)

дп матрицы *2200

Harry Potter is hiking in the Alps surrounding Lake Geneva. In this area there are \(m\) cabins, numbered 1 to \(m\). Each cabin is connected, with one or more trails, to a central meeting point next to the lake. Each trail is either short or long. Cabin \(i\) is connected with \(s_i\) short trails and \(l_i\) long trails to the lake.

Each day, Harry walks a trail from the cabin where he currently is to Lake Geneva, and then from there he walks a trail to any of the \(m\) cabins (including the one he started in). However, as he has to finish the hike in a day, at least one of the two trails has to be short.

How many possible combinations of trails can Harry take if he starts in cabin 1 and walks for \(n\) days?

Give the answer modulo \(10^9 + 7\).

Input

The first line contains the integers \(m\) and \(n\).

The second line contains \(m\) integers, \(s_1, \dots, s_m\), where \(s_i\) is the number of short trails between cabin \(i\) and Lake Geneva.

The third and last line contains \(m\) integers, \(l_1, \dots, l_m\), where \(l_i\) is the number of long trails between cabin \(i\) and Lake Geneva.

We have the following constraints:

\(0 \le s_i, l_i \le 10^3\).

\(1 \le m \le 10^5\).

\(1 \le n \le 10^9\).

Output

The number of possible combinations of trails, modulo \(10^9 + 7\).

G2. Min-Fund Prison (Medium)

графы Деревья дп Перебор поиск в глубину и подобное *2200

In the medium version, \(2 \leq \sum n \leq 300\) and \(1 \leq \sum m \leq 300\)

After a worker's strike organized by the Dementors asking for equal rights, the prison of Azkaban has suffered some damage. After settling the spirits, the Ministry of Magic is looking to renovate the prison to ensure that the Dementors are kept in check. The prison consists of \(n\) prison cells and \(m\) bi-directional corridors. The \(i^{th}\) corridor is from cells \(u_i\) to \(v_i\). A subset of these cells \(S\) is called a complex if any cell in \(S\) is reachable from any other cell in \(S\). Formally, a subset of cells \(S\) is a complex if \(x\) and \(y\) are reachable from each other for all \(x, y \in S\), using only cells from \(S\) on the way. The funding required for a complex \(S\) consisting of \(k\) cells is defined as \(k^2\).

As part of your Intro to Magical Interior Design course at Hogwarts, you have been tasked with designing the prison. The Ministry of Magic has asked that you divide the prison into \(2\) complexes with \(\textbf{exactly one corridor}\) connecting them, so that the Dementors can't organize union meetings. For this purpose, you are allowed to build bi-directional corridors. The funding required to build a corridor between any \(2\) cells is \(c\).

Due to budget cuts and the ongoing fight against the Death Eaters, you must find the \(\textbf{minimum total funding}\) required to divide the prison as per the Ministry's requirements or \(-1\) if no division is possible.

Note: The total funding is the sum of the funding required for the \(2\) complexes and the corridors built. If after the division, the two complexes have \(x\) and \(y\) cells respectively and you have built a total of \(a\) corridors, the total funding will be \(x^2 + y^2 + c \times a\). Note that \(x+y=n\).

Input

The first line contains one integer \(t\) (\(1 \leq t \leq 300\)) — the number of test cases. Then \(t\) test cases follow.

The first line of each test case consists of three integers \(n, m\) and \(c\) (\(2 \leq n \leq 300\), \(1 \leq m \leq 300\), \(1 \leq c \leq 10^9\))

\(m\) lines follow, each consisting of 2 integers — \(u_i, v_i\) indicating a corridor is present between cells \(u_i\) and \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\))

It is guaranteed that the sum of \(n\) over all test cases does not exceed \(300\).

It is guaranteed that the sum of \(m\) over all test cases does not exceed \(300\).

It is guaranteed that there exists at most one corridor between any two cells.

Output

Print the \(\textbf{minimum funding}\) required to divide the prison as per the Ministry's requirements or \(-1\) if no division is possible.

Note

In the first test case of the sample input, there is no way to divide the prison according to the Ministry's requirements.

In the second test case, consider the corridor between cells \(1\) and \(5\) as the connection between the \(2\) complexes consisting of \(\{2, 3, 5, 6\}\) and \(\{1, 4\}\) cells respectively. There are no new corridors built. The total funding is \(4^2 + 2^2 = 20\). You can verify this is the minimum funding required.

In the third test case, build a corridor between \(2\) and \(4\). Consider the corridor between cells \(1\) and \(5\) as the connection between the \(2\) complexes consisting of \(\{3, 5, 6\}\) and \(\{1, 2, 4\}\) cells respectively. The total funding is \(3^2 + 3^2 + 7 \times 1 = 25\). You can verify this is the minimum funding required.

In the fourth test case, build a corridor between \(2\) and \(4\) and between \(5\) and \(7\). Consider the corridor between cells \(5\) and \(7\) as the connection between the \(2\) complexes consisting of \(\{1, 2, 4, 7\}\) and \(\{3, 5, 6\}\) cells respectively. The total funding is \(4^2 + 3^2 + 4 \times 2 = 33\). You can verify this is the minimum funding required.

Note for all test cases that there may be multiple ways to get the same funding but there is no other division which will have a more optimal minimum funding.

G3. Min-Fund Prison (Hard)

битмаски графы Деревья дп поиск в глубину и подобное *2400

In the hard version, \(2 \leq \sum n \leq 10^5\) and \(1 \leq \sum m \leq 5 \times 10^{5}\)

After a worker's strike organized by the Dementors asking for equal rights, the prison of Azkaban has suffered some damage. After settling the spirits, the Ministry of Magic is looking to renovate the prison to ensure that the Dementors are kept in check. The prison consists of \(n\) prison cells and \(m\) bi-directional corridors. The \(i^{th}\) corridor is from cells \(u_i\) to \(v_i\). A subset of these cells \(S\) is called a complex if any cell in \(S\) is reachable from any other cell in \(S\). Formally, a subset of cells \(S\) is a complex if \(x\) and \(y\) are reachable from each other for all \(x, y \in S\), using only cells from \(S\) on the way. The funding required for a complex \(S\) consisting of \(k\) cells is defined as \(k^2\).

As part of your Intro to Magical Interior Design course at Hogwarts, you have been tasked with designing the prison. The Ministry of Magic has asked that you divide the prison into \(2\) complexes with \(\textbf{exactly one corridor}\) connecting them, so that the Dementors can't organize union meetings. For this purpose, you are allowed to build bi-directional corridors. The funding required to build a corridor between any \(2\) cells is \(c\).

Due to budget cuts and the ongoing fight against the Death Eaters, you must find the \(\textbf{minimum total funding}\) required to divide the prison as per the Ministry's requirements or \(-1\) if no division is possible.

Note: The total funding is the sum of the funding required for the \(2\) complexes and the corridors built. If after the division, the two complexes have \(x\) and \(y\) cells respectively and you have built a total of \(a\) corridors, the total funding will be \(x^2 + y^2 + c \times a\). Note that \(x+y=n\).

Input

The first line contains one integer \(t\) (\(1 \leq t \leq 10^5\)) — the number of test cases. Then \(t\) test cases follow.

The first line of each test case consists of three integers \(n, m\) and \(c\) (\(2 \leq n \leq 10^5\), \(1 \leq m \leq 5 \times 10^{5}\), \(1 \leq c \leq 10^9\))

\(m\) lines follow, each consisting of 2 integers — \(u_i, v_i\) indicating a corridor is present between cells \(u_i\) and \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\))

It is guaranteed that the sum of \(n\) over all test cases does not exceed \(10^5\).

It is guaranteed that the sum of \(m\) over all test cases does not exceed \(5 \times 10^5\).

It is guaranteed that there exists at most one corridor between any two cells.

Output

Print the \(\textbf{minimum funding}\) required to divide the prison as per the Ministry's requirements or \(-1\) if no division is possible.

Note

In the first test case of the sample input, there is no way to divide the prison according to the Ministry's requirements.

In the second test case, consider the corridor between cells \(1\) and \(5\) as the connection between the \(2\) complexes consisting of \(\{2, 3, 5, 6\}\) and \(\{1, 4\}\) cells respectively. There are no new corridors built. The total funding is \(4^2 + 2^2 = 20\). You can verify this is the minimum funding required.

In the third test case, build a corridor between \(2\) and \(4\). Consider the corridor between cells \(1\) and \(5\) as the connection between the \(2\) complexes consisting of \(\{3, 5, 6\}\) and \(\{1, 2, 4\}\) cells respectively. The total funding is \(3^2 + 3^2 + 7 \times 1 = 25\). You can verify this is the minimum funding required.

In the fourth test case, build a corridor between \(2\) and \(4\) and between \(5\) and \(7\). Consider the corridor between cells \(5\) and \(7\) as the connection between the \(2\) complexes consisting of \(\{1, 2, 4, 7\}\) and \(\{3, 5, 6\}\) cells respectively. The total funding is \(4^2 + 3^2 + 4 \times 2 = 33\). You can verify this is the minimum funding required.

Note for all test cases that there may be multiple ways to get the same funding but there is no other division which will have a more optimal minimum funding.

D. Бинарное разбиение

дп жадные алгоритмы реализация сортировки Строки *1100

Вам дана бинарная строка\(^{\dagger}\). Пожалуйста, найдите минимальное количество частей, которые вам нужно отрезать, чтобы полученные части можно было переставить в отсортированную бинарную строку.

Обратите внимание, что:

  • каждый символ должен принадлежать ровно одной из частей;
  • части должны быть непрерывными подстроками исходной строки;
  • вам нужно использовать все части при перестановке.

\(^{\dagger}\) Бинарная строка — это строка, состоящая из символов \(\texttt{0}\) и \(\texttt{1}\). Отсортированная бинарная строка — это бинарная строка, в которой все символы \(\texttt{0}\) идут перед всеми символами \(\texttt{1}\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных.

Единственная строка каждого набора содержит одну строку \(s\) (\(1 \leq |s| \leq 500\)), состоящую из символов \(\texttt{0}\) и \(\texttt{1}\), где \(|s|\) обозначает длину строки \(s\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество частей, необходимое для того, чтобы можно было переставить строку в отсортированную бинарную строку.

Примечание

Первый пример изображен в условии. Можно доказать, что вам понадобится не менее \(3\) частей.

Во втором и третьем примерах случаях бинарная строка уже отсортирована, поэтому нужна только \(1\) часть.

В четвертом примере вам нужно сделать один разрез между двумя символами и переставить их, чтобы получить строку \(\texttt{01}\).

A. Шахматы на троих

дп математика Перебор реализация *900

Три друга собрались, чтобы сыграть несколько партий в шахматы.

В каждой партии двое из них играют друг против друга, победитель получает \(2\) очка, а проигравший — \(0\). В случае ничьей оба игрока получают по \(1\) очку. Обратите внимание, что одна и та же пара игроков могла сыграть любое неотрицательное число раз (возможно, ноль). Также возможно, что игр не было вообще.

Вам известно, что их счета после всех игр были равны \(p_1\), \(p_2\) и \(p_3\). Кроме того, гарантируется, что \(p_1 \leq p_2 \leq p_3\).

Найдите максимальное количество игр вничью, которое могли сыграть друзья, и выведите его. Если не существует способа получить \(p_1\), \(p_2\) и \(p_3\) в результате неотрицательного числа партий между тремя игроками, выведите \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(p_1\), \(p_2\) и \(p_3\) (\(0 \leq p_1 \leq p_2 \leq p_3 \leq 30\)) — счета трех игроков, отсортированные по неубыванию.

Выходные данные

Для каждого набора входных данных выведите одно число — максимальное возможное количество игр вничью, которые могли сыграть друзья, или \(-1\), если значения не соответствуют ни одному набору игр и результатов.

Примечание

В первом наборе входных данных не было сыграно ни одной партии, поэтому ничьих также не могло быть.

Во втором наборе входных данных между вторым и третьим игроком была сыграна ровно одна партия, которая закончилась вничью, поэтому ответом будет \(1\).

В третьем наборе входных данных не существует набора партий, в результате которых достигаются такие счета, поэтому ответом будет \(-1\).

F. Запросы максимальной суммы НОД

битмаски дп Перебор реализация теория чисел *3100

Для \(k\) целых положительных чисел \(x_1, x_2, \ldots, x_k\) значение \(\gcd(x_1, x_2, \ldots, x_k)\) является наибольшим общим делителем чисел \(x_1, x_2, \ldots, x_k\) — наибольшим целым числом \(z\) таким, что все числа \(x_1, x_2, \ldots, x_k\) делятся на \(z\).

Вам даны три массива \(a_1, a_2, \ldots, a_n\), \(b_1, b_2, \ldots, b_n\) и \(c_1, c_2, \ldots, c_n\) длины \(n\), содержащие положительные целые числа.

У вас также есть автомат, который позволяет вам менять местами \(a_i\) и \(b_i\) для любого \(i\) (\(1 \le i \le n\)). Каждый обмен стоит вам \(c_i\) монет.

Найдите максимальное возможное значение \(\)\gcd(a_1, a_2, \ldots, a_n) + \gcd(b_1, b_2, \ldots, b_n)\text{,}\(\) которое вы можете получить, поменяв местами несколько элементов, и заплатив при этом не более \(d\) монет в сумме. Количество монет у вас меняется, поэтому найдите ответ на этот вопрос для каждого из \(q\) возможных значений \(d_1, d_2, \ldots, d_q\).

Входные данные

В первой строке находятся два целых числа \(n\) и \(q\) (\(1 \leq n \leq 5 \cdot 10^5\), \(1 \leq q \leq 5 \cdot 10^5\)).

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^8\)).

В третьей строке находятся \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 10^8\)).

В четвертой строке находятся \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \leq c_i \leq 10^9\)).

В пятой строке находятся \(q\) целых чисел \(d_1, d_2, \ldots, d_q\) (\(0 \leq d_i \leq 10^{15}\)).

Выходные данные

Выведите \(q\) целых чисел — максимальное значение, которое можно получить для каждого из \(q\) возможных значений \(d\).

Примечание

В первом запросе из первого примера нам вообще не разрешается делать никаких обменов, поэтому ответом будет \(\gcd(1, 2, 3) + \gcd(4, 5, 6) = 2\). Во втором запросе одним из способов достижения оптимального значения является обмен \(a_2\) и \(b_2\), тогда ответом будет \(\gcd(1, 5, 3) + \gcd(4, 2, 6) = 3\).

Во втором запросе из второго примера оптимально сделать обмены на позициях \(1\) и \(3\), тогда ответом будет \(\gcd(3, 3, 6, 9, 3) + \gcd(8, 4, 4, 8, 4) = 7\), и нам суммарно придется заплатить \(40\) монет.

E. Деньги покупают счастье

дп *1800

Будучи физиком, Чарли любит планировать свою жизнь в простых и точных терминах.

В течение следующих \(m\) месяцев, начиная с нулевой суммы денег, Чарли будет усердно работать и зарабатывать \(x\) фунтов в месяц. Для \(i\)-го месяца \((1 \le i \le m)\) будет одна возможность потратить сумму \(c_i\) фунтов, чтобы получить счастье \(h_i\).

Запрещено брать в долг. Заработанные деньги в \(i\)-м месяце можно тратить только в более поздний месяц \(j\) (\(j>i\)).

Поскольку физики не пишут код, помогите Чарли найти максимально возможную сумму счастья.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа, \(m\) и \(x\) (\(1 \le m \le 50\), \(1 \le x \le 10^8\)) — общее количество месяцев и ежемесячная зарплата.

\(i\)-я из следующих \(m\) строк содержит два целых числа, \(c_i\) и \(h_i\) (\(0 \le c_i \le 10^8\), \(1 \le h_i \le 10^3\)) — стоимость и предлагаемое счастье за \(i\)-й месяц. Обратите внимание, что иногда счастье может быть бесплатным (\(c_i=0\) для некоторых \(i\)).

Гарантируется, что сумма \(\sum_i h_i\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число, максимальную сумму счастья, которую мог бы получить Чарли.

Примечание

В первом примере Чарли получает зарплату только в конце месяца, поэтому не может позволить себе ничего купить.

Во втором примере Чарли получает бесплатное счастье в первом месяце.

В третьем примере для Чарли оптимально купить счастье во втором месяце. Даже оставшись с деньгами в конце, Чарли не сможет вернуться назад во времени, чтобы получить предлагаемое счастье в первом месяце.

D. Раскрасьте дерево

Деревья дп жадные алгоритмы кратчайшие пути Перебор поиск в глубину и подобное *1700

У 378QAQ есть дерево с \(n\) вершинами. Изначально все вершины белые.

На дереве есть две шахматные фигуры с названиями \(P_A\) и \(P_B\). \(P_A\) и \(P_B\) изначально расположены на вершинах \(a\) и \(b\) соответственно. За один шаг 378QAQ выполняет следующие действия по порядку:

  1. Переместить \(P_A\) в соседнюю вершину. Если вершина, в которую переместилась фигура, белая, то перекрасить эту вершину в красный цвет.
  2. Переместить \(P_B\) в соседнюю вершину. Если вершина, в которую переместилась фигура, красная, то перекрасить эту вершину в синий цвет.

Изначально вершина \(a\) окрашена в красный цвет. Если \(a=b\), то вместо этого вершина \(a\) окрашена в синий цвет. Обратите внимание, что на каждом шаге обе шахматные фигуры должны быть перемещены. Две фигуры могут находиться в одной вершине в любой момент времени.

378QAQ хочет узнать минимальное количество шагов, которое требуется, чтобы покрасить все вершины в синий цвет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\leq n\leq 2\cdot 10^5\)).

Вторая строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1\leq a,b\leq n\)).

Затем следует \(n - 1\) строка, каждая из которых содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i,y_i \le n\)), обозначающие ребро между вершинами \(x_i\) и \(y_i\). Гарантируется, что данные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество шагов, которое требуется, чтобы покрасить все вершины в синий цвет.

Примечание

В первом наборе входных данных 378QAQ может покрасить все вершины в синий цвет следующим образом:

  • Изначально \(P_A\) находится в вершине \(1\), а \(P_B\) — в вершине \(2\). Вершина \(1\) окрашена в красный цвет, а вершина \(2\) — в белый.
  • 378QAQ перемещает \(P_A\) в вершину \(2\) и красит ее в красный цвет. Затем 378QAQ перемещает \(P_B\) в вершину \(1\) и красит её в синий цвет.
  • 378QAQ перемещает \(P_A\) в вершину \(1\). Затем 378QAQ перемещает \(P_B\) в вершину \(2\) и закрашивает её синим цветом.

F. Множество

битмаски дп Комбинаторика математика Перебор поиск в глубину и подобное разделяй и властвуй *2600

Определим бинарное кодирование конечного множества целых неотрицательных чисел \(T \subseteq \{0,1,2,\ldots\}\) как \(f(T) = \sum\limits_{i \in T} 2^i\). Например, \(f(\{0,2\}) = 2^0 + 2^2 = 5\) и \(f(\{\}) = 0\). Обратите внимание, что \(f\) — это биекция от всех таких множеств ко всем неотрицательным целым числам. Таким образом, \(f^{-1}\) также определено.

Дано целое число \(n\) и \(2^n-1\) множество \(V_1,V_2,\ldots,V_{2^n-1}\).

Найдите все множества \(S\), которые удовлетворяют следующим ограничениям:

  • \(S \subseteq \{0,1,\ldots,n-1\}\). Заметим, что \(S\) может быть пустым.
  • Для всех непустых \(T \subseteq \{0,1,\ldots,n-1\}\) выполнено \(|S \cap T| \in V_{f(T)}\).

Для экономии входные и выходные данные будут заданы в терминах двоичных кодировок множеств.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 20\)).

Вторая строка содержит \(2^n-1\) целое число \(v_1,v_2,\ldots,v_{2^n-1}\) (\(0 \leq v_i < 2^{n+1}\)) — множества \(V_i\), заданные их двоичными кодированиями, где \(V_i = f^{-1}(v_i)\).

Выходные данные

Первая строка вывода должна содержать целое число \(k\), обозначающее количество подходящих \(S\).

В следующих \(k\) строках вы должны вывести \(f(S)\) для всех подходящих \(S\) в порядке возрастания.

Примечание

В первом примере одним из возможных \(S\) является \(f^{-1}(3) = \{0,1\}\). Все непустые подмножества \(T \subseteq \{0,1,2\}\) и соответствующие им \(|S \cap T|\), \(f(T)\) и \(V_f(T)\) имеют следующий вид:

\(T\)\(|S\cap T|\)\(f(T)\)\(V_{f(T)}\)
\(\{0\}\)\(1\)\(1\)\(\{0,1,2,3\}\)
\(\{1\}\)\(1\)\(2\)\(\{0,1,2,3\}\)
\(\{2\}\)\(0\)\(4\)\(\{0,1,2,3\}\)
\(\{0,1\}\)\(2\)\(3\)\(\{0,1,2,3\}\)
\(\{0,2\}\)\(1\)\(5\)\(\{0,1,2,3\}\)
\(\{1,2\}\)\(1\)\(6\)\(\{0,1,2,3\}\)
\(\{0,1,2\}\)\(2\)\(7\)\(\{2,3\}\)

I. Mind Bloom

дп *3500

This is the way it always was.
This is the way it always will be.
All will be forgotten again soon...

Jellyfish играет в карточную игру для одного игрока под названием «Slay the Spire». Всего есть \(n\) карт, пронумерованных от \(1\) до \(n\). У \(i\)-й карты есть сила \(c_i\).

Дана бинарная строка \(s\) длины \(n\). Если \(s_i = \texttt{0}\), то \(i\)-я карта изначально находится в колоде. Если \(s_i = \texttt{1}\), то \(i\)-я карта изначально находится в руке Jellyfish.

Jellyfish будет повторять следующий процесс до тех пор, пока либо её рука, либо колода не опустеют:

  1. Пусть \(x\) — это сила карты с наибольшей силой в руке.
  2. Поместить одну карту с силой \(x\) обратно в колоду.
  3. Случайным образом взять \(x\) карт из колоды. Все подмножества \(x\) карт из колоды имеют равные шансы быть вытянутыми. Если в колоде меньше \(x\) карт, Jellyfish вытянет все карты.

Найдите вероятность того, что Jellyfish сможет опустошить колоду в конце этого процесса, по модулю \(1\,000\,000\,007\).

Формально, пусть \(M=1\,000\,000\,007\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 120\)) — количество карт.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1,c_2,\ldots,c_n\) (\(0 \leq c_i \leq n\)) — силы карт. Гарантируется, что \(c_1 \leq c_2 \leq \ldots \leq c_n\).

Третья строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\). Если \(s_i = \texttt{0}\), то \(i\)-я карта изначально находится в колоде. Если \(s_i = \texttt{1}\), то \(i\)-я карта изначально находится в руке Jellyfish.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(120^2\).

Выходные данные

Для каждого набора входных данных выведите вероятность того, что Jellyfish сможет опустошить колоду, по модулю \(1\,000\,000\,007\).

Примечание

В первом наборе входных данных Jellyfish будет продолжать играть картами с силой \(1\) до тех пор, пока не вытянет карту с силой \(0\) или с силой \(2\). Если Jellyfish вытянет карту с силой \(0\), она в конце концов опустошит свою руку. Если Jellyfish вытянет карту с силой \(2\), она в итоге опустошит колоду. Поскольку шансы вытянуть \(0\) или \(2\) равны, ответ будет \(\frac{1}{2}\), а \(2 \cdot 500\,000\,004 \equiv 1 \pmod {10^9+7}\).

C. Собеседование на работу

Бинарный поиск дп жадные алгоритмы реализация *1600

Монокарп открывает свою IT-компанию. Он хочет нанять \(n\) программистов и \(m\) тестировщиков.

На собеседование придут \(n+m+1\) кандидатов, пронумерованных от \(1\) до \(n+m+1\) в хронологическом порядке их прибытия. У \(i\)-го кандидата есть навык программирования \(a_i\) и навык тестирования \(b_i\) (навык программирования человека отличается от его навыка тестирования). Навык команды — это сумма навыков программирования всех нанятых в качестве программистов и сумма навыков тестирования всех нанятых в качестве тестировщиков.

Когда кандидат приходит на собеседование, Монокарп пытается назначить его на наиболее подходящую должность (если его навык программирования выше, то как программиста, в противном случае как тестировщика). Если все места для этой должности заняты, Монокарп назначает его на другую должность.

Ваша задача — для каждого кандидата рассчитать навык команды, если на собеседование придут все, кроме него. Обратите внимание, что это означает, что придут ровно \(n+m\) кандидатов, и все \(n+m\) мест в компании будут заняты.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • первая строка содержит два целых числа \(n\) и \(m\) (\(0 \le n, m \le 2 \cdot 10^5\); \(2 \le n + m + 1 \le 2 \cdot 10^5\)) — количество программистов и количество тестировщиков, которых Монокарп хочет нанять, соответственно;
  • вторая строка содержит \(n + m + 1\) целых чисел \(a_1, a_2, \dots, a_{n+m+1}\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — навык программирования \(i\)-го кандидата;
  • третья строка содержит \(n + m + 1\) целых чисел \(b_1, b_2, \dots, b_{n+m+1}\) (\(1 \le b_i \le 10^9\); \(b_i \ne a_i\)), где \(b_i\) — навык тестирования \(i\)-го кандидата.

Дополнительное ограничение на входные данные: сумма \((n + m + 1)\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n + m + 1\) целых чисел, где \(i\)-е число должно быть равно навыку команды, если на собеседование придут все, кроме \(i\)-го кандидата.

Примечание

Рассмотрим третий набор входных данных в примере:

  • если \(1\)-й кандидат не придет, \(2\)-го кандидата возьмут тестировщиком, \(3\)-го кандидата возьмут программистом, \(4\)-го кандидата возьмут тестировщиком. Суммарный навык команды будет \(2 + 5 + 1 = 8\);
  • если \(2\)-й кандидат не придет, \(1\)-го кандидата возьмут тестировщиком, \(3\)-го кандидата возьмут программистом, \(4\)-го кандидата возьмут тестировщиком. Суммарный навык команды будет \(5 + 5 + 1 = 11\);
  • если \(3\)-й кандидат не придет, \(1\)-го кандидата возьмут тестировщиком, \(2\)-го кандидата возьмут тестировщиком, \(4\)-го кандидата возьмут программистом. Суммарный навык команды будет \(5 + 2 + 4 = 11\);
  • если \(4\)-й кандидат не придет, \(1\)-го кандидата возьмут тестировщиком, \(2\)-го кандидата возьмут тестировщиком, \(3\)-го кандидата возьмут программистом. Суммарный навык команды будет \(5 + 2 + 5 = 12\).

F. Удаление мостов

Деревья дп жадные алгоритмы поиск в глубину и подобное сортировки Структуры данных *2800

Вам дано корневое дерево, состоящее из \(n\) вершин, пронумерованных от \(1\) до \(n\). Вершина \(1\) является корнем. Кроме того, у корня есть только один ребенок.

Требуется добавить ровно \(k\) рёбер в дерево (возможно, кратные рёбра и/или рёбра, уже существующие в дереве).

Напомним, что мост — это такое ребро, что после его удаления количество компонент связности в графе увеличивается. Таким образом, изначально все рёбра дерева являются мостами.

После добавления \(k\) рёбер некоторые изначальные рёбра дерева остаются мостами, а некоторые перестают ими быть. Необходимо удовлетворить два условия:

  • для каждого моста все рёбра дерева в поддереве нижней вершины этого моста также должны быть мостами;
  • количество мостов должно быть как можно меньше.

Решите задачу для всех значений \(k\) от \(1\) до \(n - 1\) и выведите наименьшее количество мостов.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество вершин дерева.

В каждой из следующих \(n - 1\) строк записаны два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\)) — описание рёбер дерева. Гарантируется, что заданные рёбра образуют валидное дерево.

Дополнительное ограничение на входные данные: корень (вершина \(1\)) имеет ровно одного ребенка.

Сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n - 1\) целое число. Для каждого \(k\) от \(1\) до \(n - 1\) выведите наименьшее количество мостов, которые могут остаться после добавления \(k\) рёбер в дерево.

C. Никита и ТЧ

дп жадные алгоритмы математика Перебор сортировки Структуры данных теория чисел *1900

Никита — студент, увлеченный теорией чисел и алгоритмами. Он столкнулся с интересной задачей, связанной с массивом чисел.

Допустим, у Никиты есть массив целых чисел \(a\) длины \(n\). Назовём подпоследовательность\(^\dagger\) массива особенной, если её наименьшее общее кратное (НОК) не содержится в \(a\). НОК пустой подпоследовательности равен \(0\).

Никита задался вопросом: какова длина самой длинной особенной подпоследовательности массива \(a\)? Помогите ему ответить на этот важный вопрос!

\(^\dagger\) Последовательность \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена из \(a\) путем удаления нескольких (возможно, нуля или всех) элементов, не изменяя порядок оставшихся элементов. Например, \([5,2,3]\) является подпоследовательностью \([1,5,7,8,2,4,3]\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2000\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора выведите одно целое число — максимальную длину особенной подпоследовательности \(a\).

Примечание

В первом наборе входных данных НОК любой непустой подпоследовательности будет содержаться в \(a\), поэтому ответ \(0\).

Во втором наборе входных данных можно взять подпоследовательность \([3, 2, 10, 1]\), ее НОК — число \(30\), которое не содержится в \(a\).

В третьем наборе входных данных можно взять подпоследовательность \([2, 3, 6, 100\,003]\), ее НОК — число \(600\,018\), которое не содержится в \(a\).

E. Вычислительная машина

дп жадные алгоритмы Перебор реализация Структуры данных *2000

У Саши есть две бинарные строки \(s\) и \(t\) одинаковой длины \(n\), состоящие из символов 0 и 1.

Также есть вычислительная машина, которая умеет выполнять два вида операций с бинарными строками \(a\) и \(b\) одинаковой длины \(k\):

  1. Если \(a_{i} = a_{i + 2} =\) 0, то можно присвоить \(b_{i + 1} :=\) 1 (\(1 \le i \le k - 2\)).
  2. Если \(b_{i} = b_{i + 2} =\) 1, то можно присвоить \(a_{i + 1} :=\) 1 (\(1 \le i \le k - 2\)).

Саше стало интересно следующее: если рассмотреть строку \(a=s_ls_{l+1}\ldots s_r\) и строку \(b=t_lt_{l+1}\ldots t_r\), то какое максимальное количество символов 1 в строке \(a\) можно получить с помощью вычислительной машины. Так как Саша очень любознательный, но ленивый, то вам предстоит ответить на этот вопрос для нескольких интересующих его пар \((l_i, r_i)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина строк \(s\) и \(t\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\), состоящую из символов 0 и 1.

Третья строка каждого набора входных данных содержит бинарную строку \(t\) длины \(n\), состоящую из символов 0 и 1.

Четвертая строка каждого набора входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

\(i\)-я из следующих строк содержит два целых числа \(l_{i}\) и \(r_{i}\) (\(1 \le l_{i} \le r_{i} \le n\)) — границы \(i\)-й пары подстрок, которые интересуют Сашу.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\) и сумма \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел — ответы на все запросы.

Примечание

В первом наборе входных данных:

  • В первом запросе \(a =\) 11, поэтому максимальное количество символов 1 равно \(2\).
  • Во втором запросе \(a =\) 111, поэтому максимальное количество символов 1 равно \(3\).

Во втором наборе входных данных:

  • В первом запросе \(a =\) 101 и \(b =\) 110. Никаких операций сделать нельзя, поэтому максимальное количество символов 1 равно \(2\).
  • Во втором запросе \(a =\) 1010 и \(b =\) 1101. Так как \(a_2 = a_4 =\) 0, то можно присвоить \(b_3 :=\) 1. Теперь \(b_1 = b_3 =\) 1, поэтому можно присвоить \(a_2 :=\) 1. Строка \(a\) стала равна 1110, поэтому максимальное количество символов 1 равно \(3\).

D. Исправление бинарной строки

битмаски дп жадные алгоритмы Конструктив Перебор Строки хэши *1800

Вам дана бинарная строка \(s\) длины \(n\), состоящая из нулей и единиц. Вы можете сделать следующую операцию ровно один раз:

  1. Выбрать целое число \(p\) (\(1 \le p \le n\)).
  2. Перевернуть подстроку \(s_1 s_2 \ldots s_p\). После выполнения этого шага строка \(s_1 s_2 \ldots s_n\) превратится в строку \(s_p s_{p-1} \ldots s_1 s_{p+1} s_{p+2} \ldots s_n\).
  3. После этого сделать циклический сдвиг строки \(s\) влево \(p\) раз. После выполнения этого шага изначальная строка \(s_1s_2 \ldots s_n\) превратится в строку \(s_{p+1}s_{p+2} \ldots s_n s_p s_{p-1} \ldots s_1\).

Например, если применить операцию к строке 110001100110 при \(p=3\), то после второго шага получится строка 011001100110, а после третьего шага 001100110011.

Строка \(s\) называется \(k\)-правильной, если выполняются два условия:

  • \(s_1=s_2=\ldots=s_k\);
  • \(s_{i+k} \neq s_i\) для любого \(i\) (\(1 \le i \le n - k\)).

Например, при \(k=3\) строки 000, 111000111 и 111000 являются \(k\)-правильными, а строки 000000, 001100 и 1110000 нет.

Дано целое число \(k\), которое является делителем \(n\). Найдите целое число \(p\) (\(1 \le p \le n\)), после выполнения операции с которым строка \(s\) станет \(k\)-правильной или определите, что это невозможно. Обратите внимание, что если строка изначально является \(k\)-правильной, то к ней всё равно нужно применить ровно одну операцию.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n\), \(2 \le n \le 10^5\)) — длина строки \(s\) и значение \(k\). Гарантируется, что \(k\) является делителем \(n\).

Вторая строка каждого набора содержит бинарную строку \(s\) длины \(n\), состоящую из символов 0 и 1.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — значение \(p\), чтобы сделать строку \(k\)-правильной, или \(-1\), если это невозможно.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных, если применить операцию при \(p=3\), то после второго шага операции строка станет равна 11100001, а после третьего 00001111. Эта строка является \(4\)-правильной.

Во втором наборе входных данных можно показать, что не существует операции, после которой строка становится \(2\)-правильной.

В третьем наборе входных данных, если применить операцию при \(p=7\), то после второго шага операции строка станет равна 100011100011, а после третьего 000111000111. Эта строка является \(3\)-правильной.

В четвертом наборе входных данных после операции c любым \(p\) строка является \(5\)-правильной.

F. Черепаха и пути на дереве

Деревья дп Структуры данных *3000

Обратите внимание на необычное определение \(\text{MEX}\) в этой задаче.

Свинка подарила Черепахе бинарное дерево\(^{\dagger}\) с \(n\) вершинами и последовательностью \(a_1, a_2, \ldots, a_n\) на ее день рождения. Бинарное дерево имеет корень в вершине \(1\).

Если набор путей \(P = \{(x_i, y_i)\}\) в дереве покрывает каждое ребро ровно один раз, то Черепаха считает, что набор путей хороший. Обратите внимание, что хороший набор путей может покрывать вершину дважды или более.

Черепаха определяет значение набора путей как \(\sum\limits_{(x, y) \in P} f(x, y)\), где \(f(x, y)\) обозначает \(\text{MEX}^{\ddagger}\) всех \(a_u\), таких что вершина \(u\) лежит на простом пути от \(x\) до \(y\) в дереве (включая начальную вершину \(x\) и конечную вершину \(y\)).

Черепаха задается вопросом о минимальном значении среди всех хороших наборов путей. Пожалуйста, помогите ему вычислить ответ!

\(^{\dagger}\)Бинарное дерево — это дерево, в котором у каждой вершины есть не более \(2\) сыновей.

\(^{\ddagger}\text{MEX}\) набора целых чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее положительное целое число \(x\), которое не встречается в наборе \(c\). Например, \(\text{MEX}\) для \([3, 3, 1, 4]\) равно \(2\), \(\text{MEX}\) для \([2, 3]\) равно \(1\).

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^4\)). Затем следует описание тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(2 \le n \le 2.5 \cdot 10^4\)) — количество вершин в дереве.

Вторая строка каждого теста содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы последовательности \(a\).

Третья строка каждого теста содержит \(n - 1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \le p_i < i\)) — родитель каждой вершины в дереве.

Дополнительное ограничение на ввод: заданное дерево является бинарным деревом, то есть у каждой вершины не более \(2\) сыновей.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(10^5\).

Выходные данные

Для каждого тестового случая выведите одно целое число — минимальное значение среди всех хороших наборов путей.

Примечание

В первом тестовом случае дерево выглядит следующим образом. Число в скобках обозначает вес вершины:

Хороший набор путей с минимальным значением — \(\{(2, 3), (4, 5)\}\).

Обратите внимание, что в этом тестовом случае \(\{(4, 5)\}\) и \(\{(3, 4), (4, 5)\}\) не являются хорошими наборами путей, потому что каждое ребро должно быть покрыто ровно один раз.

Во втором тестовом случае дерево выглядит следующим образом:

Набор хороших путей с минимальным значением — \(\{(1, 2), (1, 3), (4, 5)\}\).

В третьем тестовом случае дерево выглядит следующим образом:

Набор хороших путей с минимальным значением — \(\{(1, 6), (3, 5)\}\).

C. Скучный день

Бинарный поиск дп жадные алгоритмы Структуры данных *1200

В очередной день Егору стало скучно, и он решил чем-нибудь заняться. Но так как у него нет друзей, он придумал игру, в которую и хочет сыграть.

У Егора есть колода из \(n\) карт, на \(i\)-й карте сверху написано какое-то число \(a_i\). Егор хочет сыграть в игру некоторое количество раундов, пока не закончатся карты. В каждом раунде он берет некоторое ненулевое количество карт с верха колоды и заканчивает раунд. Если сумма чисел на набранных за раунд картах находится между \(l\) и \(r\) включительно, то раунд считается выигранным, иначе проигранным.

Егор знает, в каком порядке идут числа на картах в колоде. Помогите Егору узнать, какое наибольшее количество раундов он сможет выиграть в такой игре. Обратите внимание, что Егор не обязан выигрывать раунды подряд.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(l\) и \(r\) (\(1 \le n \le 10^{5}\), \(1 \le l \le r \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — числа на картах сверху вниз.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите одно число — наибольшее количество раундов, которое сможет выиграть Егор.

Примечание

В первом наборе входных данных Егор может выиграть \(3\) раунда:

  • В первом раунде взять \(2\) верхние карты со значениями \(2\) и \(1\) и выиграть, так как в сумме они дают \(3\). Колода после этого будет выглядеть так: \([11, 3, 7]\).
  • Во втором раунде взять верхнюю карту и проиграть, так как ее значение \(11\) больше \(r = 10\). Колода после этого будет выглядеть так: \([3, 7]\).
  • В третьем раунде взять верхнюю карту со значением \(3\) и выиграть. Колода после этого будет выглядеть так: \([7]\).
  • После этого в четвертом раунде Егору остается только взять последнюю карту в колоде со значением \(7\) и снова выиграть.

Во втором наборе входных данных Егор не сможет выиграть ни одного раунда, как бы он не старался.

В третьем наборе входных данных можно каждый раунд брать по одной карте, тогда первый и третий раунд будут проигрышными, а второй — выигрышным.

В четвертом наборе данных можно брать по две карты каждый раунд и всегда выигрывать.

E. Количество k-хороших подотрезков

meet-in-the-middle битмаски дп Комбинаторика математика Перебор разделяй и властвуй *2300

Обозначим за \(bit(x)\) количество единичных бит в двоичной записи неотрицательного целого числа \(x\).

Назовем подотрезок массива \(k\)-хорошим, если он состоит только из чисел, в которых не более \(k\) единичных бит, то есть подотрезок \((l, r)\) массива \(a\) хороший, если для любого \(i\), такого, что \(l \le i \le r\) выполняется \(bit(a_{i}) \le k\).

У вас есть массив \(a\) длины \(n\), состоящий из последовательных неотрицательных целых чисел начиная с \(0\), то есть \(a_{i} = i\) для \(0 \le i \le n - 1\)\(0\)-индексации). Вам необходимо посчитать количество \(k\)-хороших подотрезков в этом массиве.

Поскольку ответ может быть очень большим, выведите его по модулю \(10^{9} + 7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\), \(k\) (\(1 \le n \le 10^{18}, 1 \le k \le 60\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — количество \(k\)-хороших подотрезков по модулю \(10^{9} + 7\).

Примечание

Для первого набора входных данных \(a = [0, 1, 2, 3, 4, 5]\), \(k = 1\).

Чтобы найти ответ, давайте запишем все числа в двоичной записи:

\(\)a = [\color{green}{000}, \color{green}{001}, \color{green}{010}, \color{red}{011}, \color{green}{100}, \color{red}{101}]\(\)

Отсюда видно, что числа \(3\) и \(5\) имеют \(2 \ge (k = 1)\) единичных бита в двоичной записи, поэтому в ответ должны войти все подотрезки, в которых нет ни \(3\), ни \(5\), это отрезки (в \(0\)-индексации): (\(0\), \(0\)), (\(0\), \(1\)), (\(0\), \(2\)), (\(1\), \(1\)), (\(1\), \(2\)), (\(2\), \(2\)), (\(4\), \(4\)).

G. Ваша потеря

битмаски Деревья дп Перебор *3000

Вам дано дерево с \(n\) вершинами, пронумерованными от \(1\) до \(n\), а также массив длины \(n\). Значение \(i\)-й вершины — \(a_{i}\). Имеется \(q\) запросов. В каждом запросе даны 2 вершины с номерами \(x\) и \(y\).

Рассмотрим путь от вершины с номером \(x\) до вершины с номером \(y\). Пусть путь представлен в виде \(x = p_0, p_1, p_2, \ldots, p_r = y\), где \(p_i\) — промежуточные вершины. Вычислите сумму \(a_{p_i}\oplus i\) по всем \(i\) таким, что \(0 \le i \le r\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Более формально, вычислите \(\)\sum_{i =0}^{r} a_{p_i}\oplus i\(\)

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество вершин.

Следующие \(n-1\) строк каждого набора входных данных содержат по \(2\) целых числа \(u\) и \(v\), представляющих собой ребро между вершиной с номером \(u\) и вершиной с номером \(v\). Гарантируется, что \(u \ne v\), и что ребра образуют дерево.

Следующая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 5 \cdot 10^5\)) — значения вершин.

Следующая строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов.

Следующие \(q\) строк описывают запросы. В \(i\)-м запросе содержится \(2\) целых числа \(x\) и \(y\) (\(1 \le x,y \le n\)), обозначающих начальную и конечную вершину пути.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\), а сумма \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого запроса выведите одно число — искомую сумму.

C1. Величина (простая версия)

дп жадные алгоритмы математика *1300

Две версии этой задачи отличаются друг от друга. Возможно, вы захотите прочитать обе версии. Вы сможете делать взломы, только если обе версии решены.

Вам дан массив \(a\) длины \(n\). Изначально \(c = 0\). Для каждого \(i\) от \(1\) до \(n\) (в порядке возрастания) выполните ровно одно из следующих действий:

  • Вариант \(1\): сделать \(c\) равным \(c + a_i\).
  • Вариант \(2\): сделать \(c\) равным \(|c + a_i|\), где \(|x|\) — абсолютное значение \(x\).

Пусть максимальное возможное конечное значение \(c\) после описанной выше процедуры равно \(k\). Найдите \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)).

Вторая строка каждого случая содержит \(n\) целых чисел \(a_1\), \(a_2\), \(a_3\), \(\ldots\), \(a_n\) (\(-10^9 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — значение \(k\).

Примечание

В первом наборе входных данных, если при каждом прибавлении брать абсолютное значение \(c\), то в итоге получится \(6\). Можно показать, что это максимальный результат.

Во втором наборе входных данных присвоение абсолютного значения ничего не изменит, поэтому мы можем просто просуммировать массив, ничего не делая, чтобы получить \(24\).

В третьем наборе входных данных оптимально взять абсолютное значение \(c\) только один раз в конце, в результате чего мы получим ответ \(6\).

C2. Величина (сложная версия)

дп жадные алгоритмы Комбинаторика математика *1700

Две версии этой задачи отличаются друг от друга. Возможно, вы захотите прочитать обе версии. Вы сможете делать взломы, только если обе версии решены.

Вам дан массив \(a\) длины \(n\). Изначально \(c = 0\). Для каждого \(i\) от \(1\) до \(n\) (в порядке возрастания) выполните ровно одно из следующих действий:

  • Вариант \(1\): сделать \(c\) равным \(c + a_i\).
  • Вариант \(2\): сделать \(c\) равным \(|c + a_i|\), где \(|x|\) — абсолютное значение \(x\).

Пусть максимальное возможное конечное значение \(c\) после описанной выше процедуры равно \(k\). Найдите количество уникальных процедур, в результате которых получается \(c = k\). Две процедуры различны, если при каком-либо индексе \(i\) одна процедура выбрала вариант \(1\), а другая — вариант \(2\), даже если после этого хода значение \(c\) для обеих процедур одинаково.

Поскольку ответ может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)).

Вторая строка каждого случая содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество уникальных процедур, в результате которых получается \(c = k\), по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных можно показать, что максимальное конечное значение \(c\) равно \(3\). Существует \(12\) способов достичь этого, потому что для получения \(3\) мы должны взять абсолютное значение при индексах \(2\) или \(4\), или при обоих, что дает \(3\) способа. Для двух других индексов значение не меняется от того, берем мы абсолютное значение или нет, поэтому для них у нас есть \(2 \cdot 2 = 4\) способа. Итого, у нас есть \(3 \cdot 4 = 12\) способов.

Во втором наборе входных данных взятие абсолютного значения ничего не изменит, поэтому мы можем либо брать абсолютное значение, либо нет, для каждого индекса. Это дает нам \(2^8 = 256\) возможных способов.

E. Перемешивание

Деревья дп жадные алгоритмы *2400

Две голодные красные панды, Оскар и Лура, получили в подарок дерево \(T\) с \(n\) вершинами. Они хотят выполнить следующую процедуру перемешивания для всего дерева \(T\) ровно один раз. С помощью этой процедуры они создадут новое дерево из вершин старого дерева:

  1. Выбрать любую вершину \(V\) из исходного дерева \(T\). Создать новое дерево \(T_2\) с \(V\) в качестве корня.
  2. Удалить \(V\) из \(T\) так, чтобы исходное дерево было разбито на одно или несколько поддеревьев (или ноль поддеревьев, если \(V\) является единственной вершиной в \(T\)).
  3. Перемешать каждое поддерево с помощью той же процедуры (снова выбирая любую вершину в качестве корня), затем соединить корни всех перетасованных поддеревьев с \(V\), чтобы закончить построение \(T_2\).

После этого у Оскара и Луры остается новое дерево \(T_2\). Они могут есть только листья и очень голодны. Поэтому они просят вас помочь им найти максимальное количество листьев среди всех деревьев, которое можно получить за ровно одно перемешивание.

Обратите внимание, что листья — это все вершины со степенью \(1\). Таким образом, корень может считаться листом, если у него есть только один ребенок.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество вершин в исходном дереве \(T\).

Следующие \(n - 1\) строка содержат по два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\)), обозначающие ребро в исходном дереве \(T\). Гарантируется, что данные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество листьев, достижимое с помощью одной операции.

Примечание

В первом наборе входных данных можно показать, что максимальное количество листьев равно \(4\). Для этого мы можем начать перемешивание с выбора вершины \(3\) в качестве нового корня.

Далее у нас остается только одно поддерево, в котором мы можем выбрать вершину \(2\) в качестве нового корня этого поддерева.
Это заставит все оставшиеся \(3\) вершины стать листьями, и когда мы присоединим их обратно к нашему новому корню, перемешанное поддерево будет выглядеть так:
Мы соединяем перемешанное поддерево обратно с корнем нашего нового дерева. Наше конечное дерево имеет четыре листа (включая корень) и выглядит следующим образом:

Во втором наборе входных данных у нас есть бамбук из пяти вершин. Можно показать, что максимальное количество листьев после одного перемешивания составляет \(3\). Мы можем начать с вершины \(2\), которая заставит вершину \(1\) стать листом. Затем, если мы выберем вершину \(4\) с правой стороны, вершины \(3\) и \(5\) также окажутся листьями.

Третий набор входных данных представляет собой граф-звезду с шестью вершинами. Количество листьев не может увеличиться, поэтому наш ответ будет равен \(5\) (если мы начнем перемешивание с исходной корневой вершины).

F. Реконструкция

дп математика Перебор *2500

Имеется секретный массив \(a_1, a_2, \ldots, a_n\) длины \(n\), элементами которого являются целые числа от \(-m\) до \(m\) включительно.

Даны массивы \(b_1, b_2, \ldots, b_n\) длины \(n\) и строка \(s\) длины \(n\), состоящая из символов \(\texttt{P}\), \(\texttt{S}\) и \(\texttt{?}\).

Для каждого \(i\) от \(1\) до \(n\) включительно, должно выполняться следующее:

  • Если \(s_i = \texttt{P}\), то \(b_i\) — это сумма элементов с \(a_1\) по \(a_i\).
  • Если \(s_i = \texttt{S}\), то \(b_i\) — это сумма элементов с \(a_i\) по \(a_n\).

Выведите количество способов заменить все \(\texttt{?}\) в \(s\) на \(\texttt{P}\) или \(\texttt{S}\) так, чтобы существовал массив \(a_1, a_2, \ldots, a_n\) с элементами, не превышающими \(m\) по абсолютному значению, удовлетворяющий ограничениям, заданным массивом \(b_1, b_2, \ldots, b_n\) и строкой \(s\).

Поскольку ответ может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 2 \cdot 10^3\), \(2 \leq m \leq 10^{9}\)) — длина секретного массива \(a_1, a_2, \ldots, a_n\) и максимальное абсолютное значение элемента \(a_i\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из символов \(\texttt{P}\), \(\texttt{S}\) и \(\texttt{?}\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(|b_i| \leq m \cdot n\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество способов заменить все \(\texttt{?}\) в \(s\) на \(\texttt{P}\) или \(\texttt{S}\), которые приводят к существованию допустимого массива \(a_1, a_2, \ldots, a_n\), по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных мы видим, что следующий массив удовлетворяет всем ограничениям, поэтому ответ — \(1\):

  1. \(\texttt{P}\) — \({[\color{red}{\textbf{1}},3,4,2]}\): сумма \(1\).
  2. \(\texttt{S}\) — \({[1,\color{red}{\textbf{3},4,2}]}\): сумма \(9\).
  3. \(\texttt{P}\) — \({[\color{red}{1,3,\textbf{4}},2]}\): сумма \(8\).
  4. \(\texttt{P}\) — \({[\color{red}{1,3,4,\textbf{2}}]}\): сумма \(10\).

Во втором наборе входных данных можно показать, что ни один массив \(a\) со всеми \(|a_i| \leq m = 10^9\) не удовлетворяет ограничениям.

H. Захват башни

геометрия дп Комбинаторика *3300

В \(n\) различных точках \((x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\) существует \(n\) башен, причем никакие три из них не являются коллинеарными, а четыре — конциклическими. Изначально вы владеете башнями \((x_1, y_1)\) и \((x_2, y_2)\), и хотите захватить их все. Для этого вы можете проделать следующую операцию любое количество раз:

  • Выбрать две башни \(P\) и \(Q\), которыми вы владеете, и одну башню \(R\), которой вы не владеете, так, чтобы окружность, проходящая через точки \(P\), \(Q\) и \(R\) содержала все \(n\) башен внутри себя.
  • После этого захватить все башни в или на треугольнике \(\triangle PQR\), включая сам \(R\).

План атаки — это последовательность выборов \(R\) (\(R_1, R_2, \ldots, R_k\)) в рамках вышеописанных операций, после которых вы захватываете все башни. Обратите внимание, что два плана атаки считаются различными, только если они отличаются выбором \(R\) в некоторой операции; в частности, два плана атаки с одинаковым выбором \(R\), но разными выборами \(P\) и \(Q\) считаются одинаковыми.

Подсчитайте количество планов атаки минимальной длины. Обратите внимание, что захватить все башни может быть невозможно, и в этом случае ответ будет равен \(0\).

Поскольку ответ может быть большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 250\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(4 \leq n \leq 100\)) — количество башен.

В \(i\)-й из следующих \(n\) строк содержатся два целых числа \(x_i\) и \(y_i\) (\(-10^4 \leq x_i, y_i \leq 10^4\)) — местоположение \(i\)-й башни. Изначально вы владеете башнями \((x_1, y_1)\) и \((x_2, y_2)\).

Все башни находятся в разных местах, никакие три башни не коллинеарны и никакие четыре башни не лежат на одной окружности.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество планов атаки минимальной длины, после которых вы захватите все башни, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных существует только один возможный план атаки наименьшей длины, показанный ниже.

  • Использовать операцию с башней \(P =\) \(1\), башней \(Q =\) \(2\) и башней \(R =\) \(5\). Окружность, проходящая через эти три башни, содержит все башни внутри себя, в результате чего башни \(3\) и \(5\) оказываются захваченными.
  • Использовать операцию с башней \(P =\) \(5\), башней \(Q =\) \(1\) и башней \(R =\) \(4\). Окружность, проходящая через эти три башни, содержит все башни внутри себя, в результате чего башня \(4\) оказывается захваченной.

Во втором наборе входных данных, например, вы никогда не сможете захватить башню в точке \((3, 10\,000)\).

H2. Максимизация наибольшей компоненты (сложная версия)

дп поиск в глубину и подобное реализация снм Структуры данных *2200

Простая и сложная версии фактически представляют собой разные задачи, поэтому внимательно прочитайте условия обеих задач. Единственное различие между двумя версиями — это применяемая операция.

У Алекса есть матрица из \(n\) строк и \(m\) столбцов, состоящая из символов '.' и '#'. Набор '#' ячеек формирует компоненту связности, если из любой ячейки в этом наборе можно достичь любую другую ячейку в этом наборе, перемещаясь только в другую ячейку набора, которая имеет общую сторону. Размер компоненты связности — это количество ячеек в наборе.

За одну операцию Алекс выбирает любую строку \(r\) (\(1 \le r \le n\)) и любой столбец \(c\) (\(1 \le c \le m\)), затем устанавливает каждую ячейку в строке \(r\) и столбце \(c\) равной '#'. Помогите Алексу найти максимально возможный размер наибольшей компоненты связности из ячеек '#', который он может достичь после выполнения операции не более одного раза.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n \cdot m \le 10^6\)) — количество строк и столбцов матрицы.

Следующие \(n\) строк содержат по \(m\) символов. Каждый символ может быть '.' или '#'.

Гарантируется, что сумма \(n \cdot m\) по всем наборам не превышает \(10^6\).

Выходные данные

Для каждого теста выведите одно целое число — максимально возможный размер связного компонента из ячеек '#', который может достичь Алекс.

Примечание

В четвертом тесте для Алекса оптимально установить все ячейки в строке \(4\) и столбце \(2\) равными '#'. Это приведет к наибольшей компоненте связности из ячеек '#' размером \(16\).

В пятом тесте для Алекса оптимально установить все ячейки в строке \(2\) и столбце \(4\) равными '#'. Это приведет к наибольшей компоненте связности из ячеек '#' размером \(22\).

D. Математическая проблема

дп жадные алгоритмы математика Перебор реализация *1400

Вам дана строка \(s\) длины \(n > 1\), состоящая из цифр от \(0\) до \(9\). Вы должны вставить в эту строку ровно \(n - 2\) знака \(+\) (сложение) или \(\times\) (умножение), чтобы получилось корректное арифметическое выражение.

В этой задаче нельзя, чтобы знаки были перед первым или после последнего символа строки \(s\), а также не может быть записано два каких-либо знака подряд. Также обращаем ваше внимание на то, что вы не меняете порядок цифр в строке. Рассмотрим \(s = 987009\):

  • Из этой строки можно получить следующие математические выражения: \(9 \times 8 + 70 \times 0 + 9 = 81\), \(98 \times 7 \times 0 + 0 \times 9 = 0\), \(9 + 8 + 7 + 0 + 09 = 9 + 8 + 7 + 0 + 9 = 33\). Обратите внимание, что число \(09\) считается корректным и преобразуется просто в \(9\).
  • Из этой строки нельзя получить следующие математические выражения: \(+9 \times 8 \times 70 + 09\) (знаки должны стоять только между цифрами), \(98 \times 70 + 0 + 9\) (так как цифр \(6\), должно быть ровно \(4\) знака).

Результат математического выражения считается по правилам математики — сначала выполняются все операции умножения, затем сложения. Вам нужно найти минимальный результат, который можно получить, вставив в данную строку \(s\) ровно \(n - 2\) знака сложения или умножения.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 20\)) — длина строки \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из цифр от \(0\) до \(9\).

Выходные данные

Для каждого набора входных данных выведите минимальный результат математического выражения, который можно получить, вставив в данную строку ровно \(n - 2\) знака сложения или умножения.

Примечание

В первых четырех наборах входных данных мы не можем добавлять знаки, поэтому ответом будет исходное число.

В пятом наборе входных данных оптимальный ответ выглядит следующим образом \(9 \times 01 = 9 \times 1 = 9\).

В шестом наборе входных данных оптимальный ответ выглядит следующим образом \(1 \times 01 = 1 \times 1 = 1\).

В седьмом наборе входных данных оптимальный ответ выглядит следующим образом \(2 + 3 + 3 + 11 = 19\).

В восьмом наборе входных данных один из оптимальных ответов выглядит следующим образом \(98 \times 7 \times 0 + 0 \times 9 = 0\).

C. Сад Бейзила

дп жадные алгоритмы *1200

Есть ряд из \(n\) цветов, у \(i\)-го из них изначально высота \(h_i\) метров.

Каждую секунду порыв ветра слева будет понижать высоты некоторых цветов.

А именно, каждую секунду, для каждого \(i\) от \(1\) до \(n\) в этом порядке, происходит следующее:

  • Если \(i = n\) или \(h_i > h_{i + 1}\), значение \(h_i\) меняется на \(\max(0, h_i - 1)\).

Сколько секунд пройдёт перед тем, как \(h_i=0\) будет впервые верно для всех \(1 \le i \le n\)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество цветов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le 10 ^ 9\)) — высоты цветов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных, выведите одно целое число — количество секунд, которое пройдёт перед тем, как \(h_i=0\) будет впервые верно для всех \(1 \le i \le n\).

Примечание

В первом наборе входных данных высоты цветов меняются следующим образом: \([1, 1, 2] \rightarrow [1, 1, 1] \rightarrow [1, 1, 0] \rightarrow [1, 0, 0] \rightarrow [0, 0, 0]\).

Во втором наборе входных данных высоты цветов меняются следующим образом: \([3, 1] \rightarrow [2, 0] \rightarrow [1, 0] \rightarrow [0, 0]\).

D. Мир мой

дп игры *1800

Алиса и Боб играют в игру. Изначально есть \(n\) тортов, у \(i\)-го из них вкусность равна \(a_i\).

Алиса и Боб по очереди их едят, первой начинает Алиса:

  • В свой ход Алиса выбирает и ест любой из оставшихся тортов, вкусность которого строго выше максимальной вкусности любого из съеденных ею до этого тортов. Обратите внимание, что в первый ход Алиса может съесть любой торт.
  • В свой ход Боб выбирает любой из оставшихся тортов и ест его.

Игра заканчивается, когда текущий игрок не может съесть подходящий торт. Пусть \(x\) это число тортов, съеденных Алисой. Тогда Алиса хочет максимизировать \(x\), в то время как Боб хочет минимизировать \(x\).

Сколько тортов съест Алиса, если оба игрока будут выбирать торты оптимально?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — количество тортов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — значения вкусностей тортов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество тортов, съеденных Алисой, если оба игрока будут играть оптимально.

Примечание

В первом наборе входных данных одна возможная последовательность ходов — следующая:

  1. Алиса съедает торт со вкусностью \(1\). Остались торты со вкусностями \([4, 2, 3]\).
  2. Боб съедает торт со вкусностью \(2\). Остались торты со вкусностями \([4, 3]\).
  3. Алиса съедает торт со вкусностью \(3\). Остались торты со вкусностями \([4]\).
  4. Боб съедает торт со вкусностью \(4\). Остались торты со вкусностями \([]\).
  5. Так как больше тортов нет, игра на этом заканчивается.

Во втором наборе входных данных одна возможная последовательность ходов — следующая:

  1. Алиса съедает торт со вкусностью \(1\). Остались торты со вкусностями \([1, 1]\).
  2. Боб съедает торт со вкусностью \(1\). Остались торты со вкусностями \([1]\).
  3. Так как Алиса уже съела торт со вкусностью \(1\), она не может сделать ход, поэтому игра на этом заканчивается.

F1. Интересная задача (простая версия)

дп *2500

Это простая версия задачи. Разница между простой и сложной версиями задачи заключается только в ограничении на \(n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Дан массив целых чисел \(a\) длины \(n\).

Вы можете выполнять следующую двухшаговую операцию:

  1. Выбрать индекс \(i\) такой, что \(1 \le i < |a|\) и \(a_i = i\).
  2. Удалить \(a_i\) и \(a_{i+1}\) из массива и соединить оставшиеся части.

Найдите максимальное количество раз, которое можно применить данную операцию.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(100\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество раз, которое можно применить операцию из условия.

Примечание

В первом наборе входных данных одна из возможных оптимальных последовательностей применения операций такая: \([ 1, 5, \color{red}{3}, \color{red}{2}, 4 ] \rightarrow [\color{red}{1}, \color{red}{5}, 4] \rightarrow [4]\).

В третьем наборе входных данных, одна из возможных оптимальных последовательностей применения операций такая: \([1, \color{red}{2}, \color{red}{3}] \rightarrow [1]\).

F2. Интересная задача (сложная версия)

дп *2600

Это сложная версия задачи. Разница между простой и сложной версиями задачи заключается только в ограничении на \(n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Дан массив целых чисел \(a\) длины \(n\).

Вы можете выполнять следующую двухшаговую операцию:

  1. Выбрать индекс \(i\) такой, что \(1 \le i < |a|\) и \(a_i = i\).
  2. Удалить \(a_i\) и \(a_{i+1}\) из массива и соединить оставшиеся части.

Найдите максимальное количество раз, которое можно применить данную операцию.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 800\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(800\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество раз, которое можно применить операцию из условия.

Примечание

В первом наборе входных данных одна из возможных оптимальных последовательностей применения операций такая: \([ 1, 5, \color{red}{3}, \color{red}{2}, 4 ] \rightarrow [\color{red}{1}, \color{red}{5}, 4] \rightarrow [4]\).

В третьем наборе входных данных, одна из возможных оптимальных последовательностей применения операций такая: \([1, \color{red}{2}, \color{red}{3}] \rightarrow [1]\).

G1. Очень круглый спин (простая версия)

Деревья дп разделяй и властвуй *2900

Это простая версия задачи. Разница между простой и сложной версиями задачи заключается только в допустимых символах в \(s\). В простой версии строка \(s\) содержит только символ ?. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Дана перестановка \(p\) длины \(n\). Также дана строка \(s\) длины \(n\), содержащая только символ ?.

Для каждого \(i\) от \(1\) до \(n\):

  • Определим \(l_i\) как наибольший индекс \(j < i\) такой, что \(p_j > p_i\). Если такого индекса не существует, \(l_i := i\).
  • Определим \(r_i\) как наименьший индекс \(j > i\) такой, что \(p_j > p_i\). Если такого индекса не существует, \(r_i := i\).

Изначально есть неориентированный граф с \(n\) вершинами (пронумерованными от \(1\) до \(n\)) и без рёбер. Затем для каждого \(i\) от \(1\) до \(n\) в граф добавляется одно ребро:

  • Если \(s_i =\) L, в граф добавляется ребро \((i, l_i)\).
  • Если \(s_i =\) R, в граф добавляется ребро \((i, r_i)\).
  • Если \(s_i =\) ?, в граф добавляется либо ребро \((i, l_i)\), либо ребро \((i, r_i)\) по вашему выбору.

Найдите максимально возможный диаметр\(^{\text{∗}}\) среди всех связных графов, которые вы можете получить. Выведите \(-1\), если невозможно получить ни один связный граф.

\(^{\text{∗}}\) Пусть \(d(s, t)\) это наименьшее возможное число рёбер на пути от \(s\) до \(t\).

Диаметр графа определяется как наибольшее значение \(d(s, t)\) по всем парам вершин \(s\) и \(t\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 4 \cdot 10^5\)) — длину перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(p_1,p_2,\ldots, p_n\) (\(1 \le p_i \le n\)) — элементы \(p\), которые гарантированно являются перестановкой.

Третья строка каждого набора входных данных содержит строку \(s\) длины \(n\). Гарантируется, что строка содержит только символы ?.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальный диаметр среди всех связных графов, которые вы можете получить, или \(-1\), если таковых нет.

Примечание

Для первого набора входных данных ниже показаны примеры некоторых графов, которые можно получить (в вершинах написаны индексы):

Во втором наборе входных данных у единственного связного графа диаметр равен \(1\).

G2. Очень круглый спин (сложная версия)

Деревья дп разделяй и властвуй *3500

Это сложная версия задачи. Разница между простой и сложной версиями задачи заключается только в допустимых символах в \(s\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Дана перестановка \(p\) длины \(n\). Также дана строка \(s\) длины \(n\), содержащая только символы L, R и ?.

Для каждого \(i\) от \(1\) до \(n\):

  • Определим \(l_i\) как наибольший индекс \(j < i\) такой, что \(p_j > p_i\). Если такого индекса не существует, \(l_i := i\).
  • Определим \(r_i\) как наименьший индекс \(j > i\) такой, что \(p_j > p_i\). Если такого индекса не существует, \(r_i := i\).

Изначально есть неориентированный граф с \(n\) вершинами (пронумерованными от \(1\) до \(n\)) и без рёбер. Затем для каждого \(i\) от \(1\) до \(n\) в граф добавляется одно ребро:

  • Если \(s_i =\) L, в граф добавляется ребро \((i, l_i)\).
  • Если \(s_i =\) R, в граф добавляется ребро \((i, r_i)\).
  • Если \(s_i =\) ?, в граф добавляется либо ребро \((i, l_i)\), либо ребро \((i, r_i)\) по вашему выбору.

Найдите максимально возможный диаметр\(^{\text{∗}}\) среди всех связных графов, которые вы можете получить. Выведите \(-1\), если невозможно получить ни один связный граф.

\(^{\text{∗}}\) Пусть \(d(s, t)\) это наименьшее возможное число рёбер на пути от \(s\) до \(t\).

Диаметр графа определяется как наибольшее значение \(d(s, t)\) по всем парам вершин \(s\) и \(t\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 4 \cdot 10^5\)) — длину перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(p_1,p_2,\ldots, p_n\) (\(1 \le p_i \le n\)) — элементы \(p\), которые гарантированно являются перестановкой.

Третья строка каждого набора входных данных содержит строку \(s\) длины \(n\). Гарантируется, что строка состоит только из символов L, R и ?.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальный диаметр среди всех связных графов, которые вы можете получить, или \(-1\), если таковых нет.

Примечание

В первом наборе входных данных можно получить два связных графа (в вершинах написаны индексы):

У графа слева диаметр равен \(2\), а у графа справа диаметр равен \(3\), поэтому ответ \(3\).

Во втором наборе входных данных нельзя получить связный граф, поэтому ответ \(-1\).

D. Универсальный убийца монстров

Деревья дп Перебор поиск в глубину и подобное *2000

Вы, убийца монстров, хотите убить группу монстров. Монстры находятся в дереве с \(n\) вершинами. В вершине с номером \(i\) (\(1\le i\le n\)) находится монстр с \(a_i\) очками атаки. Вы хотите сражаться с монстрами в течение \(10^{100}\) раундов.

В каждом раунде происходит следующее по порядку:

  1. Все живые монстры атакуют вас. Ваше здоровье уменьшается на сумму очков атаки всех живых монстров.
  2. Вы выбираете некоторых (возможно, всех или ни одного) монстров и убиваете их. После убийства монстр больше не сможет совершать атаки в будущем.

Также есть следующее ограничение: за один раунд вы не можете убить двух монстров, находящихся в соединенных ребром вершинах.

Если вы оптимально выбираете, каких монстров атаковать на каждом шагу, на какую минимальную величину может уменьшиться ваше здоровье за все раунды?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^4\)). Затем следует описание наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1\le n\le 3\cdot 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,\ldots,a_n\) (\(1\le a_i\le 10^{12}\)).

Следующие \(n-1\) строк каждого набора содержат по два целых числа \(x,y\) (\(1\le x,y\le n\)), обозначающих ребро в дереве, соединяющее вершину \(x\) и \(y\).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможное уменьшение здоровья.

Примечание

В первом наборе оптимальная последовательность операций следующая:

  • В первом раунде: сначала получите атаку от монстра в вершине \(1\), поэтому ваше здоровье уменьшается на \(10^{12}\). Затем убейте монстра в вершине \(1\).
  • Во втором раунде до \(10^{100}\)-го раунда: все монстры были убиты, поэтому ничего не происходит.

Общее уменьшение здоровья составляет \(10^{12}\).

Во втором наборе оптимальная последовательность операций следующая:

  • В первом раунде: сначала получите атаку от монстров в вершинах \(1,2,3,4,5\), поэтому ваше здоровье уменьшается на \(47+15+32+29+23=146\). Затем убейте монстров в вершинах \(1,4,5\).
  • Во втором раунде: сначала получите атаку от монстров в вершинах \(2,3\), поэтому ваше здоровье уменьшается на \(15+32=47\). Затем убейте монстров в вершинах \(2,3\).
  • В третьем раунде до \(10^{100}\)-го раунда: все монстры были убиты, поэтому ничего не происходит.

Общее уменьшение здоровья составляет \(193\).

В третьем наборе оптимальная последовательность операций следующая:

  • В первом раунде: сначала получите атаку от монстров в вершинах \(1,2,3,4,5,6,7\), поэтому ваше здоровье уменьшается на \(8+10+2+3+5+7+4=39\). Затем убейте монстров в вершинах \(1,3,6,7\).
  • Во втором раунде: сначала получите атаку от монстров на вершинах \(2,4,5\), поэтому ваше здоровье уменьшается на \(10+3+5=18\). Затем убейте монстров на вершинах \(2,4,5\).
  • В третьем раунде до \(10^{100}\)-го раунда: все монстры были убиты, поэтому ничего не происходит.

Общее уменьшение здоровья составляет \(57\).

F. Пульс

бпф дп Комбинаторика математика *3000

Для массива \(u_1, u_2, \ldots, u_n\) определим

  • префиксный максимум как такой индекс \(i\), что \(u_i>u_j\) для всех \(j<i\);
  • суффиксный максимум как такой индекс \(i\), что \(u_i>u_j\) для всех \(j>i\);
  • подъем как такой индекс \(i\) (\(i>1\)), что \(u_i>u_{i-1}\).

У вас есть три массива стоимостей: \([a_1, a_2, \ldots, a_n]\), \([b_1, b_2, \ldots, b_n]\) и \([c_0, c_1, \ldots, c_{n-1}]\).

Определим стоимость массива, имеющего \(x\) префиксных максимумов, \(y\) суффиксных максимумов и \(z\) подъемов, как \(a_x\cdot b_y\cdot c_z\).

Пусть сумма стоимости всех перестановок \(1,2,\ldots,n\) равна \(f(n)\). Найдите \(f(1)\), \(f(2)\), ..., \(f(n)\) по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит целое число \(n\) (\(1\le n\le 700\)).

Вторая строка содержит \(n\) целых чисел \(a_1,\ldots,a_n\) (\(0\le a_i<998\,244\,353\)).

Третья строка содержит \(n\) целых чисел \(b_1,\ldots,b_n\) (\(0\le b_i<998\,244\,353\)).

Четвертая строка содержит \(n\) целых чисел \(c_0,\ldots,c_{n-1}\) (\(0\le c_i<998\,244\,353\)).

Выходные данные

Выведите \(n\) целых чисел: \(i\)-е из них — \(f(i)\) по модулю \(998\,244\,353\).

Примечание

Во втором примере:

  • Рассмотрим перестановку \([1,2,3]\). Индексы \(1,2,3\) являются префиксными максимумами. Индекс \(3\) — единственный суффиксный максимум. Индексы \(2,3\) — подъемы. В итоге, у нее \(3\) префиксных максимума, \(1\) суффиксный максимум и \(2\) подъема. Поэтому ее стоимость равна \(a_3b_1c_2=12\).
  • Перестановка \([1,3,2]\) имеет \(2\) префиксных максимума, \(2\) суффиксных максимума и \(1\) подъем. Ее стоимость равна \(6\).
  • Перестановка \([2,1,3]\) имеет \(2\) префиксных максимума, \(1\) суффиксный максимум и \(1\) подъем. Ее стоимость равна \(4\).
  • Перестановка \([2,3,1]\) имеет \(2\) префиксных максимума, \(2\) суффиксных максимума и \(1\) подъем. Ее стоимость равна \(6\).
  • Перестановка \([3,1,2]\) имеет \(1\) префиксный максимум, \(2\) суффиксных максимума и \(1\) подъем. Ее стоимость равна \(3\).
  • Перестановка \([3,2,1]\) имеет \(1\) префиксный максимум, \(3\) суффиксных максимума и \(0\) подъемов. Ее стоимость равна \(3\).

Сумма стоимостей всех перестановок равна \(34\), поэтому \(f(3)=34\).

D. Кузнечное дело

дп жадные алгоритмы математика Перебор сортировки Структуры данных *1900

Вы играете в одну известную игру (которая «просто работает»), в которой у вас есть различные навыки, которые можно прокачивать. Сегодня вы сосредоточились на навыке «Кузнечное дело». Ваша тактика довольно проста: ковать оружие из слитков, а затем их переплавлять, чтобы вернуть часть материалов. Для простоты, каждый раз, когда вы создаете предмет, вы получаете \(1\) очко опыта, и каждый раз, когда вы переплавляете предмет, вы также получаете \(1\) очко опыта.

В игре есть \(n\) классов оружия, которые вы можете создать, и \(m\) типов металлических слитков.

Вы можете создать одно оружие \(i\)-го класса, затратив \(a_i\) слитков металла одного типа. Переплавка одного оружия \(i\)-го класса (которое вы ранее создали) возвращает вам \(b_i\) слитков металла, из которого оно было изготовлено.

У вас есть \(c_j\) слитков металла \(j\)-го типа, и вы знаете, что можете создать оружие любого класса из любого типа металла. Каждую комбинацию класса оружия и типа металла можно использовать любое количество раз.

Какое максимальное количество очков опыта вы можете заработать, создавая и переплавляя оружие?

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^6\)) — количество классов оружия и типов металла.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)), где \(a_i\) — это количество слитков, необходимых для создания одного оружия \(i\)-го класса.

В третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \le b_i < a_i\)), где \(b_i\) — количество слитков, возвращаемых при переплавке одного оружия \(i\)-го класса, которое вы ранее создали.

В четвертой строке заданы \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \le c_j \le 10^9\)) — количество слитков металла соответствующего типа, которые у вас есть.

Выходные данные

Выведите одно целое число — максимальное общее количество очков опыта, которое вы можете заработать, многократно создавая и переплавляя оружие.

Примечание

В первом тесте вы можете сделать следующее:

  1. создать одно оружие \(1\)-го класса из \(1\)-го типа металла, потратив \(9\) слитков;
  2. переплавить это оружие, вернув \(8\) слитков \(1\)-го типа металла;
  3. снова создать и переплавить одно оружие \(1\)-го класса из \(1\)-го типа металла;
  4. создать и переплавить одно оружие \(3\)-го класса из \(1\)-го типа металла;
  5. создать и переплавить одно оружие \(3\)-го класса из \(3\)-го типа металла;
  6. создать и переплавить одно оружие \(4\)-го класса из \(1\)-го типа металла;
  7. создать и переплавить одно оружие \(5\)-го класса из \(3\)-го типа металла;
В конце у вас останется \(c = [2, 4, 2]\) слитков. Всего вы создали \(6\) оружий и переплавили \(6\) оружий, заработав в общей сложности \(12\) очков опыта.

E. Расстояние до различных

дп Комбинаторика математика *2300

Рассмотрим массив \(a\) из \(n\) целых чисел, где каждый элемент находится в диапазоне от \(1\) до \(k\), и каждое целое число от \(1\) до \(k\) встречается как минимум один раз.

Массив \(b\) строится следующим образом: для \(i\)-го элемента массива \(a\) значение \(b_i\) — это расстояние до ближайшего элемента в \(a\), который не равен \(a_i\). Другими словами, \(b_i = \min \limits_{j \in [1, n], a_j \ne a_i} |i - j|\).

Например, если \(a = [1, 1, 2, 3, 3, 3, 3, 1]\), то \(b = [2, 1, 1, 1, 2, 2, 1, 1]\).

Вычислите количество различных массивов \(b\), которые можно получить, если рассмотреть все возможные массивы \(a\), и выведите его по модулю \(998244353\).

Входные данные

В единственной строке входных данных содержатся два целых числа \(n\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\); \(2 \le k \le \min(n, 10)\)).

Выходные данные

Выведите одно целое число — количество различных массивов \(b\), которые можно получить, взятое по модулю \(998244353\).

D. Задачка на сетке

битмаски дп жадные алгоритмы Перебор реализация *1800

Дан массив \(a\) размера \(n\).

Есть сетка размером \(n \times n\). В \(i\)-й строке первые \(a_i\) ячеек черные, а остальные ячейки белые. Другими словами, через \((i,j)\) обозначим ячейку в \(i\)-й строке и \(j\)-м столбце, ячейки \((i,1), (i,2), \ldots, (i,a_i)\) черные, а ячейки \((i,a_i+1), \ldots, (i,n)\) белые.

Вы можете выполнять следующие операции любое количество раз в любом порядке:

  • Покрасить подсетку размера \(2 \times 2\) в белый цвет;
  • Покрасить всю строку в белый цвет. Обратите внимание, что вы не можете покрасить всю колонку в белый цвет.

Найдите минимальное количество операций, которое необходимо, чтобы покрасить все ячейки в белый цвет.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Для каждого набора входных данных:

  • Первая строка содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — размер массива \(a\).
  • Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, которое необходимо, чтобы покрасить все ячейки в белый цвет.

Примечание

В первом наборе входных данных вам не нужно выполнять никаких операций.

Во втором наборе входных данных вы можете выполнить следующие операции:

  • Покрасить \((1,1), (1,2), (2,1)\) и \((2,2)\) в белый цвет;
  • Покрасить \((2,3), (2,4), (3,3)\) и \((3,4)\) в белый цвет;
  • Покрасить \((3,1), (3,2), (4,1)\) и \((4,2)\) в белый цвет.

Можно доказать, что минимальное количество операций равно \(3\).

В третьем наборе входных данных вы можете выполнить следующие операции:

  • Покрасить первую строку в белый цвет;
  • Покрасить \((2,1), (2,2), (3,1)\) и \((3,2)\) в белый цвет.

Можно доказать, что минимальное количество операций равно \(2\).

F. Многоугольные отрезки

дп жадные алгоритмы Перебор разделяй и властвуй Структуры данных *2800

У вас есть массив \(a\) размера \(n\).

Отрезок \([l, r](1 \le l < r \le n)\) называется многоугольным отрезком в том случае, если выполняются следующие условия:

  • \((r-l+1) \geq 3\);
  • Используя \(a_l, a_{l+1}, \ldots, a_r\) в качестве длин сторон, эти стороны могут образовать многоугольник с \((r-l+1)\) стороной.

Обработайте \(q\) запросов двух типов:

  • «1 l r»: найти длину самого длинного отрезка среди всех многоугольных отрезков \([l_0,r_0]\), удовлетворяющих условию \(l \le l_0 \le r_0 \le r\). Если такого многоугольного отрезка нет, выведите вместо этого \(-1\);
  • «2 i x»: присвоить \(a_i := x\).
Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Для каждого набора входных данных:

  • Первая строка каждого набора входных данных содержит два целых числа \(n\), \(q\) (\(4 \le n \le 2\cdot 10^5\), \(1 \le q \le 10^5\));
  • Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots, a_n\) (\(1 \le a_i \le 10^{12}\));
  • Следующие \(q\) строк содержат описание запросов. Каждая строка имеет один из двух типов:
    • «1 l r» (\(1 \le l < r \le n\), \(r-l+1\ge 3\));
    • «2 i x» (\(1 \le i \le n\), \(1 \le x \le 10^{12}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), а сумма \(q\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого запроса, если подходящего отрезка нет, выведите в отдельной строке \(-1\). В противном случае выведите длину самого длинного отрезка, удовлетворяющего вышеприведенному условию.

Примечание

В первом запросе первого набора входных данных не существует многоугольного отрезка. Например, если взять отрезок \([1,3]\), нельзя сделать треугольник со сторонами \(a_1=3\), \(a_2=1\) и \(a_3=2\).

Во втором запросе первого набора входных данных самый длинный многоугольный отрезок — \([1,4]\). Вы можете сделать четырехугольник со сторонами \(a_1=3\), \(a_2=1\), \(a_3=2\) и \(a_4=2\).

Пример четырехугольника со сторонами \(3\), \(1\), \(2\) и \(2\).

H. Игра в простые разделения

битмаски бпф дп игры математика теория чисел *3300

Алиса и Боб играют в игру с \(n\) кучками камней, где \(i\)-я кучка содержит \(a_i\) камней. Игроки делают ходы по очереди, причем Алиса ходит первой.

На каждом ходу игрок выполняет следующие три шага:

  1. Выбирает целое число \(k\) (\(1 \leq k \leq \frac n 2\)). Обратите внимание, что значение \(k\) может быть разным для разных ходов.
  2. Удаляет \(k\) куч камней.
  3. Выбирает еще \(k\) кучек камней и разделяет каждую кучку на две кучки. Количество камней в каждой новой куче должно быть простым числом.

Игрок, который не сможет сделать ход, проигрывает.

Определите, кто выиграет, если оба игрока играют оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество куч камней.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — количество камней в кучах.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «Alice» (без кавычек), если Алиса выиграет, и «Bob» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «alIcE», «Alice» и «alice» будут считаться одинаковыми.

Примечание

В первом наборе входных данных есть \(2\) кучи камней с количествами камней \(2\) и \(1\) соответственно. Поскольку ни \(1\), ни \(2\) не могут быть разделены на два простых числа, Алиса не может сделать ход, поэтому Боб выигрывает.

Во втором наборе входных данных есть \(3\) кучи камней с \(3\), \(5\) и \(7\) камнями соответственно. Алиса может выбрать \(k = 1\), удалить кучу из \(7\) камней, а затем разделить кучу из \(5\) камней на две кучи камней с простыми количествами \(2\) и \(3\). В итоге получится \(3\) кучки камней с \(3\), \(2\) и \(3\) камнями соответственно, в результате чего у Боба не остается ни одного допустимого хода, и Алиса выигрывает.

В третьем наборе входных данных есть \(4\) кучи камней с \(4\), \(6\), \(8\) и \(10\) камнями соответственно. Алиса может выбрать \(k = 2\) и удалить две кучи камней \(8\) и \(10\). Далее она делит кучу камней \(4\) на две кучи камней с простыми количествами \(2\) и \(2\), а кучу камней \(6\) — на две кучи камней \(3\) и \(3\). После этого у Боба не остается допустимых ходов, и Алиса выигрывает.

В четвертом наборе входных данных есть \(5\) куч камней, каждая из которых содержит \(8\) камней. Можно показать, что если оба игрока играют оптимально, то победит Боб.

D. Испытание любви

дп жадные алгоритмы реализация *1200

ErnKor ради жюльена готов на всё, даже плыть через болота, кишащие крокодилами. Мы решили проверить эту любовь. ErnKor нужно будет проплыть речку шириной \(1\) метр и длиной \(n\) метров.

Река очень холодная. Поэтому, суммарно (то есть на протяжении всего заплыва от \(0\) до \(n+1\)) ErnKor в воде может проплыть не более чем \(k\) метров. В реку для гуманности мы добавили не только крокодилов, но и бревна, по которым он может прыгать. Наше испытание заключается в следующем:

Изначально ErnKor находится на левом берегу, а попасть ему надо на правый. Они находятся на \(0\) и на \(n+1\)-м метре соответственно. Реку можно представить как \(n\) участков, каждый длиной в \(1\) метр. В каждом участке есть или бревно 'L', или крокодил 'C', или просто вода 'W'. ErnKor может передвигаться следующим образом:

  • Если он на поверхности (то есть на берегу или на бревне), он может прыгнуть вперед не более чем на \(m\) (\(1 \le m \le 10\)) метров (можно прыгать на берег, на бревно или в воду).
  • Если он в воде, он может только переплыть на следующий участок реки (или на берег, если он на \(n\)-м метре).
  • ErnKor нельзя попадать в участок с крокодилом каким-либо образом.

Определите, сможет ли ErnKor добраться до правого берега.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных.

В первой строке каждого набора вводится три числа \(n, m, k\) (\(0 \le k \le 2 \cdot 10^5\), \(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le 10\)) — длина реки, дальность прыжка ErnKor и количество метров, которое может проплыть ErnKor не замерзнув.

Во второй строке каждого набора вводится одна строка \(a\) длины \(n\). \(a_i\) обозначает объект, находящийся на \(i\)-м метре. (\(a_i \in \{\)'W','C','L'\(\}\))

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если ErnKor сможет выполнить испытание, и выведите «NO» в обратном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Рассмотрим примеры:

  • Первый пример: С берега прыгаем на первое бревно (\(0 \rightarrow 1\)), с первого бревна прыгаем на второе (\(1 \rightarrow 3\)), со второго прыгаем на четвертое (\(3 \rightarrow 5\)), с последнего бревна прыгаем на берег (\(5 \rightarrow 7\)). Итого, пусть есть, \(0 \rightarrow 1 \rightarrow 3 \rightarrow 5 \rightarrow 7\). Так как мы не заплыли на крокодила и проплыли в воде не больше k метров, ответ «YES».
  • Второй пример: \(0 \rightarrow 1\), с первого бревна прыгаем в воду (\(1 \rightarrow 2\)), плывем клетку до бревна (\(2 \leadsto 3\)), \(3 \rightarrow 4 \rightarrow 5 \rightarrow 6 \rightarrow 7\). Так как мы не заплыли на крокодила и проплыли в воде не больше k метров, ответ «YES».
  • В третьем примере ErnKor необходимо проплыть две клетки 'W', а может проплыть только одну. Поэтому ответ «NO»
  • Шестой пример: прыгаем с берега в воду (\(0 \rightarrow 6\)) и проплываем одну клетку воды (\(6 \leadsto 7\)). Так как мы не заплыли на крокодила и проплыли в воде не больше k метров, ответ «YES».

F. Ценные карточки

дп жадные алгоритмы Перебор теория чисел *1900

В своём любимом кафе Kmes захотел в очередной раз отведать селёдку под шубой. Раньше ему бы не доставило труда сделать это, однако кафе недавно выдвинуло новую политику покупки.

Теперь для её совершения Kmes надо решить следующую задачу: перед ним на стол выкладывают \(n\) карточек с ценами на разные позиции, на \(i\)-й карточке написано число \(a_i\), среди этих цен нет целого положительного числа \(x\).

Kmes просят разбить эти карточки на минимальное количество плохих отрезков (так, чтобы каждая карточка принадлежала ровно одному отрезку). Плохим считается такой отрезок, что в нём нельзя выбрать подмножество карточек с произведением, равным \(x\). Все отрезки, на которые Kmes разобьёт карточки, должны быть плохими.

Формально, отрезок \((l, r)\) плохой, если не существует индексов \(i_1 < i_2 < \ldots < i_k\), что \(l \le i_1, i_k \le r\), и \(a_{i_1} \cdot a_{i_2} \ldots \cdot a_{i_k} = x\). Помогите Kmes определить минимальное количество плохих отрезков, чтобы насладиться любимым блюдом.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\))  — количество наборов тестовых данных.

В первой строке каждого набора входных данных вам даны \(2\) числа \(n\) и \(x\) (\(1 \le n \le 10^5, 2 \le x \le 10^5\))  — количество карточек и число соответственно.

Во второй строке каждого набора входных данных содержится \(n\) чисел \(a_i\) (\(1 \le a_i \le 2 \cdot 10^5, a_i \neq x\)) — цены на карточках.

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество плохих отрезков.

G. Ультра-мяу

дп Комбинаторика математика *2000

K1o0n подарил вам массив \(a\) длины \(n\), состоящий из чисел \(1, 2, \ldots, n\). Принять? Конечно, да! Но что с ним делать? Конечно же посчитать \(\text{MEOW}(a)\).

Пусть \(\text{MEX}(S, k)\) — \(k\)-е целое положительное число в порядке возрастания, отсутствующее в множестве \(S\). Обозначим за \(\text{MEOW}(a)\) сумму \(\text{MEX}(b, |b| + 1)\), по всем различным подмножествам \(b\) массива \(a\).

Примеры значений \(\text{MEX}(S, k)\) для множеств:

  • \(\text{MEX}(\{3,2\}, 1) = 1\), т. к. \(1\) — первое целое положительное число, отсутствующее в множестве;
  • \(\text{MEX}(\{4,2,1\}, 2) = 5\), т. к. первые два целые положительные числа, которых нет в множестве, это \(3\) и \(5\);
  • \(\text{MEX}(\{\}, 4) = 4\), т. к. в пустом множестве нет никаких чисел, следовательно первые целые положительные \(4\) числа, которых в нём нет, это \(1, 2, 3, 4\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных вводится целое число \(n\) (\(1 \le n \le 5000\)), размер массива подаренных чисел.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(25 \cdot 10^6\)

Выходные данные

Для каждого набора входных данных выведите одно число — \(\text{MEOW}(a)\). Поскольку оно может оказаться очень большим, выведите его по модулю \(10^9 + 7\).

D. Медизация

Бинарный поиск дп жадные алгоритмы *2200

Даны два положительных целых числа \(n\) и \(k\), а также массив \(a\) из \(n\) целых чисел.

При выполнении операции вы можете выбрать любой подмассив размера \(k\) из \(a\), а затем удалить его из массива, не меняя порядок других элементов. Более формально, пусть \((l, r)\) — это операция над подпорядком \(a_l, a_{l+1}, \ldots, a_r\), такая что \(r-l+1=k\), тогда выполнение этой операции означает замену \(a\) на \([a_1, \ldots, a_{l-1}, a_{r+1}, \ldots, a_n]\).

Например, если \(a=[1,2,3,4,5]\) и мы выполним операцию \((3,5)\) над этим массивом, он станет \(a=[1,2]\). Помимо того, операция \((2, 4)\) приведет к \(a=[1,5]\), а операция \((1,3)\) приведет к \(a=[4,5]\).

Вам нужно повторять операцию, пока длина \(a\) больше \(k\) (что означает \(|a| \gt k\)). Какова наибольшая возможная медиана\(^\dagger\) всех оставшихся элементов массива \(a\) после процесса?

\(^\dagger\)Медиана массива длины \(n\) — это элемент, индекс которого равен \(\left \lfloor (n+1)/2 \right \rfloor\) после сортировки элементов в неубывающем порядке. Например: \(median([2,1,5,4,3]) = 3\), \(median([5]) = 5\), и \(median([6,8,2,4]) = 4\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k \le 5 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наибольшая возможная медиана после выполнения операций.

Примечание

В первом наборе входных данных подмассив \((l, r)\) может быть либо \((1, 3)\), либо \((2, 4)\). Таким образом, два получаемых конечных массива — это \([3]\) и \([2]\). Первый имеет большую медиану (\(3 > 2\)), поэтому ответ — \(3\).

Во втором наборе входных данных три получаемых конечных массива — это \([6, 4]\), \([3, 4]\) и \([3, 2]\). Их медианы равны \(4\), \(3\) и \(2\) соответственно. Ответ — \(4\).

В третьем наборе входных данных в конечном массиве остается только один элемент, и это может быть любой элемент начального массива. Наибольший из них — \(9\), поэтому ответ — \(9\).

E. Xpinxor Grix

битмаски дп Конструктив реализация *2700

Дана матрица \(a\) размера \(n \times m\), каждая ячейка которой содержит неотрицательное целое число. Число, находящееся на пересечении \(i\)-й строки и \(j\)-го столбца матрицы, называется \(a_{i,j}\).

Определим \(f(i)\) и \(g(j)\) как XOR всех чисел в \(i\)-й строке и \(j\)-м столбце соответственно. За одну операцию вы можете либо:

  • Выбрать любую строку \(i\), затем присвоить \(a_{i,j} := g(j)\) для каждого \(1 \le j \le m\); либо
  • Выбрать любой столбец \(j\), затем присвоить \(a_{i,j} := f(i)\) для каждого \(1 \le i \le n\).
Пример применения операции к столбцу \(2\) матрицы.

В этом примере, когда мы применяем операцию к столбцу \(2\), все элементы в этом столбце изменяются следующим образом:

  • \(a_{1,2} := f(1) = a_{1,1} \oplus a_{1,2} \oplus a_{1,3} \oplus a_{1,4} = 1 \oplus 1 \oplus 1 \oplus 1 = 0\)
  • \(a_{2,2} := f(2) = a_{2,1} \oplus a_{2,2} \oplus a_{2,3} \oplus a_{2,4} = 2 \oplus 3 \oplus 5 \oplus 7 = 3\)
  • \(a_{3,2} := f(3) = a_{3,1} \oplus a_{3,2} \oplus a_{3,3} \oplus a_{3,4} = 2 \oplus 0 \oplus 3 \oplus 0 = 1\)
  • \(a_{4,2} := f(4) = a_{4,1} \oplus a_{4,2} \oplus a_{4,3} \oplus a_{4,4} = 10 \oplus 11 \oplus 12 \oplus 16 = 29\)

Вы можете применять операции любое количество раз. Затем мы вычислим \(\textit{красоту}\) финальной матрицы, суммируя абсолютные разности между всеми парами её соседних ячеек.

Более формально, \(\textit{красота}(a) = \sum|a_{x,y} - a_{r,c}|\) для всех ячеек \((x, y)\) и \((r, c)\), если они соседние. Две ячейки считаются соседними, если они имеют общую сторону.

Найдите минимальную \(\textit{красоту}\) среди всех достижимых матриц.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 250\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 15\)) — количество строк и столбцов матрицы \(a\) соответственно.

Далее идут \(n\) строк, каждая из которых содержит \(m\) целых чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,m}\) (\(0 \le a_{i,j} < 2^{20}\)) — описание матрицы \(a\).

Гарантируется, что сумма \((n^2 + m^2)\) по всем наборам входных данных не превышает \(500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(b\) — наименьшая возможная \(\textit{красота}\) матрицы.

Примечание

Обозначим \(r(i)\) как операцию первого типа, примененную к \(i\)-й строке, и \(c(j)\) как операцию второго типа, примененную к \(j\)-му столбцу.

В первом наборе входных данных вы можете применить операцию \(c(1)\), которая присвоит \(a_{1,1} := 1 \oplus 3 = 2\). Затем мы получим эту матрицу:

23

Во втором наборе входных данных вы можете применить операцию \(r(1)\), которая присвоит:

  • \(a_{1,1} := g(1) = 0 \oplus 5 = 5\)
  • \(a_{1,2} := g(2) = 1 \oplus 4 = 5\)
  • \(a_{1,3} := g(3) = 0 \oplus 4 = 4\)

Финальная матрица после выполнения операции:

554
544

В третьем наборе входных данных лучший способ достичь минимальной \(\textit{красота}\) — применить три операции: \(c(3)\), \(r(2)\) и \(c(2)\). Финальная матрица:

046
456

C. Голодные игры

Бинарный поиск дп *1600

Ярослав играет в компьютерную игру, и на одном из уровней перед ним оказалось \(n\) выстроенных в ряд грибов. Каждый гриб имеет свой уровень ядовитости, \(i\)-й с начала гриб имеет уровень ядовитости \(a_i\). Ярослав может выбрать два целых числа \(1 \le l \le r \le n\), а затем его персонаж будет по очереди слева направо поедать грибы из этого подотрезка, то есть грибы с номерами \(l, l+1, l+2, \ldots, r\).

У персонажа есть уровень отравленности \(g\), изначально равный \(0\). Компьютерная игра определяется числом \(x\) — максимальным уровнем отравленности в любой момент времени. При поедании гриба с ядовитостью \(k\) происходит следующее:

  1. К отравленности персонажа добавляется \(k\).
  2. Если \(g \leq x\), процесс продолжается, иначе \(g\) становится равным нулю и процесс продолжается.

Ярославу стало интересно, сколько существует способов выбрать значения \(l\) и \(r\) таких, что итоговое значение \(g\) не равно нулю. Помогите Ярославу найти это число!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(x\) (\(1 \leq n \leq 2 \cdot 10^5, 1 \le x \le 10^9\)) — количество грибов и максимальный уровень отравленности.

Вторая строка каждого набора входных данных содержит \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — количество подотрезков, таких что итоговое значение \(g\) будет не равно нулю.

Примечание

В первом наборе входных данных подходят подотрезки \((1, 1)\), \((1, 2)\), \((1, 4)\), \((2, 2)\), \((2, 3)\), \((3, 3)\), \((3, 4)\) и \((4, 4)\).

Во втором наборе входных данных ненулевое \(g\) останется только на подотрезках \((1, 1)\) и \((2, 2)\).

В третьем наборе входных данных на единственном возможном подотрезке \(g\) будет равно нулю.

G. Minecraft

битмаски графы дп математика Перебор *2600

После победы в очередной игре в Bed Wars, Маша и Оля захотели отдохнуть и решили поиграть в новую игру. Маша дает Оле массив \(a\) длины \(n\) и число \(s\). Теперь задача Оли найти такое неотрицательное число \(x\), что \(\displaystyle\sum_{i=1}^{n} a_i \oplus x = s\). Но она очень устала после напряженного раунда, поэтому, пожалуйста, помогите ей в этом.

Но такая задача показалась им слишком простой, поэтому они решили сделать числа большими (до \(2^k\)) и предоставить вам их двоичное представление.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n, k, n \cdot k \le 2 \cdot 10^6\)) — длина массива \(a\) и длина битовой записи всех чисел.

Вторая строка содержит строку длины \(k\), состоящую из нулей и единиц — битовая запись числа \(s\), начиная со старших битов.

Следующие \(n\) строк также содержат строки длины \(k\), состоящие из нулей и единиц, \(i\)-я из этих строк содержит битовую запись числа \(a_i\), начиная со старших битов.

Гарантируется, что сумма значений \(n \cdot k\) по всем наборам входных данных не превосходит \(2 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите строку длины \(k\), состоящую из нулей или единиц — битовую запись любого подходящего числа \(x\) (\(x \ge 0\)), начиная со старших битов, или \(-1\), если такого \(x\) не существует.

Примечание

В первом наборе входных данных \(s = 11, a = [14, 6, 12, 15]\), если \(x = 14\), то \(\displaystyle\sum_{i=1}^{n} a_i \oplus x = (14 \oplus 14) + (6 \oplus 14) + (12 \oplus 14) + (15 \oplus 14) = 0 + 8 + 2 + 1 = 11 = s\).

Во втором наборе входных данных \(s = 41, a = [191, 158]\), если \(x = 154\), то \(\displaystyle\sum_{i=1}^{n} a_i \oplus x = (191 \oplus 154) + (158 \oplus 154) = 37 + 4 = 41 = s\).

D. Падежи

битмаски дп Перебор Строки *2300

Вы лингвист, изучающий загадочный древний язык. Вы знаете, что

  1. Его слова состоят только из первых \(c\) букв латинского алфавита.
  2. Каждое слово имеет падеж, который можно однозначно определить по его последней букве (разные буквы соответствуют разным падежам). Например, слова "ABACABA" и "ABA" (если они существуют) имеют одинаковый падеж в этом языке, потому что у них обоих одинаковое окончание 'A', в то время как "ALICE" и "BOB" принадлежат разным падежам. Если в языке нет падежа, соответствующего какой-либо букве, это означает, что слово не может заканчиваться на эту букву.
  3. Длина каждого слова составляет \(k\) или меньше.

У вас есть один текст, написанный на этом языке. К сожалению, поскольку язык действительно древний, пробелы между словами отсутствуют, и все буквы заглавные. Вам интересно, каково минимальное количество падежей может быть в этом языке. Можете ли вы это выяснить?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. За ним следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(c\), \(k\) (\(1 \le k \le n \le 2^{18}\), \(1 \le c \le 18\)) — длина текста, количество букв в языке и максимальная длина слова.

Вторая строка содержит строку из \(n\) символов — сам текст. Каждый символ является одной из первых \(c\) заглавных букв латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2^{18}\) и сумма \(2^c\) по всем наборам входных данных не превышает \(2^{18}\).

Выходные данные

Для каждого набора входных данных выведите одну строку, состоящую из одного целого числа, — минимальное количество падежей в языке.

Примечание

В первом наборе входных данных в языке должно быть пять падежей (для каждой из букв 'A', 'B', 'C', 'D', и 'E' должен быть падеж, который имеет соответствующее окончание).

В четвертом наборе входных данных достаточно одного падежа с окончанием 'B'.

E1. Позвольте мне преподать вам урок (легкая версия)

2-sat дп матрицы Структуры данных *2700

Это простая версия задачи. Единственное отличие между простой и сложной версиями заключается в ограничениях на \(t\) и \(n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Артур проводит урок для своих знаменитых \(2 n\) рыцарей. Как и все другие студенты, они сидят за партами парами, но по привычке по кругу. Рыцарь \(2 i - 1\) сидит за партой с рыцарем \(2 i\).

Каждый рыцарь имеет интеллект, который можно измерить целым числом. Обозначим интеллект \(i\)-го рыцаря как \(a_i\). Артур хочет, чтобы максимальная разница в общем интеллекте по всем парам парт была как можно меньше. Более формально, он хочет минимизировать \(\max\limits_{1 \le i \le n} (a_{2 i - 1} + a_{2 i}) - \min\limits_{1 \le i \le n} (a_{2 i - 1} + a_{2 i})\).

Однако рыцарский кодекс позволяет менять местами только противоположных рыцарей в круге, т.е. Артур может одновременно выполнять \(a_i := a_{i + n}\), \(a_{i + n} := a_i\) для любого \(1 \le i \le n\). Артур может делать любое количество таких обменов. Какой наилучший результат он может себе обеспечить?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. За ним следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2000\)) — количество парт.

Вторая строка состоит из \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2 n}\) (\(1 \le a_i \le 10^9\)) — значения интеллекта рыцарей.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую одно целое число — минимальная разница, которую Артур может достичь.

Примечание

В первом наборе входных данных Артур может поменять местами второго и четвертого рыцарей. Тогда общий интеллект на обеих партах составит \(10\).

В третьем наборе входных данных Артур может сделать \(0\) операций, что приведет к общему интеллекту \(11\) за каждой из парт.

В четвертом наборе входных данных Артур может поменять местами рыцарей с индексами \(2\) и \(5\) и достичь разницы \(2\). Можно доказать, что он не может улучшить свой результат дальше.

E2. Позвольте мне преподать вам урок (сложная версия)

дп матрицы Структуры данных *2900

Это сложная версия задачи. Единственное отличие между простой и сложной версиями заключается в ограничениях на \(t\) и \(n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Артур проводит урок для своих знаменитых \(2 n\) рыцарей. Как и все другие студенты, они сидят за партами парами, но по привычке по кругу. Рыцарь \(2 i - 1\) сидит за партой с рыцарем \(2 i\).

Каждый рыцарь имеет интеллект, который можно измерить целым числом. Обозначим интеллект \(i\)-го рыцаря как \(a_i\). Артур хочет, чтобы максимальная разница в общем интеллекте по всем парам парт была как можно меньше. Более формально, он хочет минимизировать \(\max\limits_{1 \le i \le n} (a_{2 i - 1} + a_{2 i}) - \min\limits_{1 \le i \le n} (a_{2 i - 1} + a_{2 i})\).

Однако рыцарский кодекс позволяет менять местами только противоположных рыцарей в круге, т.е. Артур может одновременно выполнять \(a_i := a_{i + n}\), \(a_{i + n} := a_i\) для любого \(1 \le i \le n\). Артур может делать любое количество таких обменов. Какой наилучший результат он может себе обеспечить?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. За ним следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\,000\)) — количество парт.

Вторая строка состоит из \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2 n}\) (\(1 \le a_i \le 10^9\)) — значения интеллекта рыцарей.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(100\,000\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую одно целое число — минимальная разница, которую Артур может достичь.

Примечание

В первом наборе входных данных Артур может поменять местами второго и четвертого рыцарей. Тогда общий интеллект на обеих партах составит \(10\).

В третьем наборе входных данных Артур может сделать \(0\) операций, что приведет к общему интеллекту \(11\) за каждой из парт.

В четвертом наборе входных данных Артур может поменять местами рыцарей с индексами \(2\) и \(5\) и достичь разницы \(2\). Можно доказать, что он не может улучшить свой результат дальше.

C. Сортировка

дп жадные алгоритмы сортировки Строки *1200

Вам даны две строки \(a\) и \(b\) длиной \(n\). Затем вам (против вашей воли) придется ответить на \(q\) запросов.

Для каждого запроса вам дан отрезок, ограниченный позициями \(l\) и \(r\). За одну операцию вы можете выбрать целое число \(i\) (\(l \leq i \leq r\)) и установить \(a_i = x\), где \(x\) — любой символ, который вы захотите. Выведите минимальное количество операций, которые вам нужно выполнить, чтобы \(\texttt{sorted(a[l..r])} = \texttt{sorted(b[l..r])}\). Операции, которые вы выполняете в одном запросе, не влияют на другие запросы.

Для произвольной строки \(c\), \(\texttt{sorted(c[l..r])}\) обозначает подстроку, состоящую из символов \(c_l, c_{l+1}, ... , c_r\), отсортированных в лексикографическом порядке.

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 2 \cdot 10^5\)) — длина обеих строк и количество запросов.

Следующая строка содержит строку \(a\) длины \(n\). Гарантируется, что \(a\) содержит только строчные латинские буквы.

Следующая строка содержит строку \(b\) длины \(n\). Гарантируется, что \(b\) содержит только строчные латинские буквы.

Следующие \(q\) строк содержат два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)) — отрезок запроса.

Гарантируется, что сумма \(n\) и \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите целое число, минимальное количество операций, которые вам нужно выполнить, на новой строке.

Примечание

Для первого запроса \(\texttt{sorted(a[1..5])} =\) abcde и \(\texttt{sorted(b[1..5])} =\) abcde, поэтому операции не требуются.

Для второго запроса вам нужно установить \(a_1 = \) e. Тогда \(\texttt{sorted(a[1..4])} = \texttt{sorted(b[1..4])} = \) bcde.

D. Максимизация корня

Бинарный поиск Деревья дп жадные алгоритмы поиск в глубину и подобное *1500

Задано корневое дерево, состоящее из \(n\) вершин. Вершины в дереве пронумерованы от \(1\) до \(n\), вершина \(1\) — корень. Значение \(a_i\) записано в \(i\)-й вершине.

Вы можете выполнять следующую операцию любое количество раз (возможно, ноль): выбрать вершину \(v\), у которой есть хотя бы один сын; увеличить \(a_v\) на \(1\); и уменьшить \(a_u\) на \(1\) для всех вершин \(u\), которые находятся в поддереве \(v\) (за исключением самой \(v\)). Но после каждой операции значения на всех вершинах должны быть неотрицательными.

Ваша задача — посчитать максимальное возможное значение в корне, используя вышеописанную операцию.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)) — начальные значения, записанные в вершинах.

Третья строка содержит \(n-1\) целых чисел \(p_2, p_3, \dots, p_n\) (\(1 \le p_i \le n\)), где \(p_i\) — родитель \(i\)-й вершины в дереве. Вершина \(1\) является корнем.

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное возможное значение в корне, используя вышеописанную операцию.

Примечание

В первом наборе входных данных возможна следующая последовательность операций:

  • провести операцию на \(v=3\), тогда значения на вершинах станут \([0, 1, 1, 1]\);
  • провести операцию на \(v=1\), тогда значения на вершинах станут \([1, 0, 0, 0]\).

F. Фишки на прямой

дп жадные алгоритмы Комбинаторика математика Перебор *2700

У вас есть \(n\) фишек, и вы собираетесь разместить каждую из них в одной из \(x\) точек, пронумерованных от \(1\) до \(x\). В каждой точке может находиться несколько фишек.

После размещения фишек вы можете выполнять следующие четыре операции (в любом порядке, любое количество раз):

  • выбрать фишку в точке \(i \ge 3\), удалить ее и разместить две новых фишки: одну в \(i-1\), одну в \(i-2\);
  • выбрать две фишки в соседних точках \(i\) и \(i+1\), удалить их и разместить новую фишку в \(i+2\);
  • выбрать фишку в точке \(1\) и переместить ее в \(2\);
  • выбрать фишку в точке \(2\) и переместить ее в \(1\).

Обратите внимание, что координаты фишек, которые вы размещаете во время операций, не могут быть меньше \(1\), но могут быть больше \(x\).

Обозначим стоимость размещения фишек как минимальное количество фишек, которое может остаться на прямой после выполнения этих операций, начиная с выбранного вами размещения.

Например, стоимость размещения двух фишек в точках \(3\) и одной фишки в точке \(5\) равна \(2\), потому что вы можете уменьшить количество фишек до \(2\) следующим образом:

  • выбрать фишку в точке \(3\), удалить ее, разместить одну фишку в \(1\) и одну фишку в \(2\);
  • выбрать по одной фишке в точках \(2\) и \(3\), удалить их и разместить фишку в \(4\);
  • выбрать по одной фишке в точках \(4\) и \(5\), удалить их и разместить фишку в \(6\).

Вам даны три целых числа \(n\), \(x\) и \(m\). Вычислите количество размещений ровно \(n\) фишек в точках от \(1\) до \(x\), имеющих стоимость, равную \(m\), и выведите его по модулю \(998244353\). Два размещения считаются разными, если количество фишек в какой-либо точке отличается между этими размещениями.

Входные данные

Единственная строка содержит три целых числа \(n\), \(x\) и \(m\) (\(1 \le m \le n \le 1000\); \(2 \le x \le 10\)).

Выходные данные

Выведите одно целое число — количество размещений со стоимостью, равной \(m\), взятое по модулю \(998244353\).

Примечание

В первом примере существует пять способов разместить \(2\) фишки в точках от \(1\) до \(3\), чтобы стоимость равнялась \(1\):

  • \((1, 1)\);
  • \((1, 2)\);
  • \((1, 3)\);
  • \((2, 2)\);
  • \((2, 3)\).

D. Определите победные острова в гонке

графы дп жадные алгоритмы кратчайшие пути Структуры данных *2100

МУУУУУУУУУУУУУУУУУ
— Корова Бесси, Искусство гонок по островам

Две коровы фермера Джона, Бесси и Элси, планируют участвовать в гонках по \(n\) островам. Существует \(n - 1\) основных мостов, соединяющих остров \(i\) с островом \(i + 1\) для всех \(1 \leq i \leq n - 1\). Кроме того, существует \(m\) альтернативных мостов. Элси может использовать и основные, и альтернативные мосты, а Бесси — только основные. Все мосты являются односторонними и могут использоваться только для перемещения с острова с меньшим индексом на остров с большим индексом.

Изначально Элси находится на острове \(1\), а Бесси — на острове \(s\). Коровы ходят по очереди, причем Бесси ходит первой. Предположим, что корова находится на острове \(i\). Во время хода коровы, если есть мост, соединяющий остров \(i\) с островом \(j\), то корова может переместиться на остров \(j\). Затем остров \(i\) разрушается, и все мосты, соединяющие остров \(i\), также разрушаются. Обратите внимание на следующее:

  • Если нет мостов, соединяющих остров \(i\) с другим островом, то остров \(i\) разрушается, и эта корова выбывает из гонки.
  • Если другая корова также находится на острове \(i\), то после того, как эта корова переместится на другой остров, остров разрушится, и другая корова выбывает из гонки.
  • После того, как остров или мост разрушились, ни одна корова не может ими воспользоваться.
  • Если корова выбывает из гонки, ее ход пропускается до конца гонки.

Гонка заканчивается, как только одна из коров достигнет острова \(n\). Можно показать, что независимо от стратегий коров, хотя бы одна из них достигнет острова \(n\). Бесси побеждает тогда и только тогда, когда она первой достигает острова \(n\).

Для каждого \(1 \leq s \leq n - 1\) определите, выиграет ли Бесси, если она начнет гонку на острове \(s\). Предположим, что обе коровы следуют оптимальным стратегиям, чтобы обеспечить себе победу.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два числа \(n\) и \(m\) (\(2 \leq n \leq 2 \cdot 10^5\), \(0 \leq m \leq 2 \cdot 10^5\)) — количество островов и количество альтернативных мостов.

Следующие \(m\) строк каждого набора входных данных содержат по два числа \(u\) и \(v\) (\(1 \leq u < v \leq n\)) — острова, которые соединяет альтернативный мост. Гарантируется, что все альтернативные мосты различны и не совпадают с основными мостами.

Гарантируется, что ни сумма \(n\), ни сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке бинарную строку длины \(n - 1\). \(i\)-й символ равен \(1\), если Бесси может выиграть, если она начнет с острова \(i\). В противном случае он равен \(0\).

Примечание

В первом наборе входных данных нет альтернативных мостов, по которым Элси могла бы обогнать Бесси и первой достичь острова \(n\), поэтому Бесси выиграет на всех островах, потому что она всегда ходит первой.

Во втором случае Бесси проиграет, если начнет с острова \(3\), потому что:

  • Ход Бесси: Перейти по основному мосту с острова \(3\) на остров \(4\).
  • Ход Элси: Перейти по основному мосту с острова \(1\) на остров \(2\).
  • Ход Бесси: Перейти по основному мосту с острова \(4\) на остров \(5\).
  • Ход Элси: Перейти по альтернативному мосту с острова \(2\) на остров \(6\). Элси первой достигает острова \(n\).

E. Тройные операции

дп математика реализация *1300

На доске Иви записаны все целые числа от \(l\) до \(r\), включительно.

В операции она делает следующее:

  • выбирает два числа \(x\) и \(y\) на доске, стирает их и на их месте записывает числа \(3x\) и \(\lfloor \frac{y}{3} \rfloor\). (Здесь \(\lfloor \bullet \rfloor\) обозначает округление вниз до ближайшего целого числа).

Какое минимальное количество операций необходимо Иви, чтобы сделать все числа на доске равными \(0\)? У нас есть доказательство, что это всегда возможно.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(l\) и \(r\) (\(1 \leq l < r \leq 2 \cdot 10^5\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для того, чтобы сделать все числа на доске равными \(0\).

Примечание

В первом наборе входных данных мы можем выполнить \(5\) операций следующим образом: \(\) 1,2,3 \xrightarrow[x=1,\,y=2]{} 3,0,3 \xrightarrow[x=0,\,y=3]{} 1,0,3 \xrightarrow[x=0,\,y=3]{} 1,0,1 \xrightarrow[x=0,\,y=1]{} 0,0,1 \xrightarrow[x=0,\,y=1]{} 0,0,0 .\(\)

B. Наименее круглый путь

дп математика *2000

Задана квадратная матрица n × n, состоящая из неотрицательных целых чисел. Вам надо найти такой путь на ней, который

  1. начинается в левой верхней ячейке матрицы;
  2. каждой следующей ячейкой имеет правую или нижнюю от текущей;
  3. заканчивается в правой нижней клетке.

Кроме того, если перемножить все числа вдоль пути и посмотреть на получившиеся произведение, то это число должно быть как можно менее «круглым». Иными словами оно должно заканчиваться на наименьшее возможное количество нулей.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 1000), n — размер заданной матрицы. Далее в n строках содержатся элементы матрицы (целые неотрицательные числа, не превосходящие 109).

Выходные данные

В первую строку выведите искомое наименьшее количество концевых нулей в произведении чисел вдоль пути. Во вторую выведите сам путь.

F. Закрась строки и столбцы

дп жадные алгоритмы математика реализация *1900

У вас есть \(n\) прямоугольников, \(i\)-й из которых имеет ширину \(a_i\) и высоту \(b_i\).

Вы можете неограниченное количество раз выполнить следующую операцию: выбрать прямоугольник и клетку в нём, а затем закрасить её.

Каждый раз, когда вы закрашиваете целиком какую-либо строку или столбец, вы получаете \(1\) балл. Ваша задача — набрать хотя бы \(k\) баллов за как можно меньшее число операций.

Допустим, у вас есть прямоугольник ширины \(6\) и высоты \(3\). Вы можете набрать \(4\) очка, закрасив все клетки в \(4\)-х любых столбцах, выполнив таким образом \(12\) операций.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 1000, 1 \le k \le 100\)) — количество прямоугольников в наборе и требуемое количество баллов.

Следующие \(n\) строк содержат описания прямоугольников. \(i\)-я строка содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 100\)) — ширину и высоту \(i\)-го прямоугольника.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимое для того, чтобы набрать хотя бы \(k\) очков. Если набрать хотя бы \(k\) очков невозможно, выведите -1.

E1. Детерминированная куча (простая версия)

Деревья дп Комбинаторика математика *2400

Это простая версия задачи. Разница между двумя версиями заключается в определении детерминированной max-кучи, ограничении на время и ограничениях на \(n\) и \(t\). Вы можете совершать взломы только в том случае, если решены обе версии задачи..

Рассмотрим полное бинарное дерево размером \(2^n - 1\), с вершинами, пронумерованными от \(1\) до \(2^n-1\), и корнем в \(1\). Для каждой вершины \(v\) (\(1 \le v \le 2^{n - 1} - 1\)) вершина \(2v\) является ее левым ребенком, а вершина \(2v + 1\) — ее правым ребенком. Каждой вершине \(v\) также присвоено значение \(a_v\).

Определим операцию \(\mathrm{pop}\) следующим образом:

  1. инициализировать переменную \(v\) как \(1\);
  2. повторять следующий процесс до тех пор, пока вершина \(v\) не станет листом (т.е. пока не выполняется \(2^{n - 1} \le v \le 2^n - 1\)):
    1. среди дочерних вершин \(v\) выбрать ту, значение которой больше, и обозначить такую вершину \(x\); если значения на них равны (то есть \(a_{2v} = a_{2v + 1}\)), то можно выбрать любую из них;
    2. присвоить \(a_x\) значению \(a_v\) (т.е. \(a_v := a_x\));
    3. присвоить \(x\) переменной \(v\) (т.е. \(v := x\));
  3. присвоить \(-1\) значению \(a_v\) (т.е. \(a_v := -1\)).

Мы говорим, что операция \(\mathrm{pop}\) является детерминированной, если существует единственный способ выполнить такую операцию. Другими словами, \(a_{2v} \neq a_{2v + 1}\) выполняется на каждом шаге операции.

Бинарное дерево называется max-кучей, если для каждой вершины \(v\) (\(1 \le v \le 2^{n - 1} - 1\)) выполняется \(a_v \ge a_{2v}\) и \(a_v \ge a_{2v + 1}\).

Максимальная куча является детерминированной, если операция \(\mathrm{pop}\) детерминирована для кучи, когда мы выполняем ее в первый раз.

Изначально \(a_v := 0\) для каждой вершины \(v\) (\(1 \le v \le 2^n - 1\)), и ваша цель — посчитать количество различных детерминированных max-куч, которые можно получить в результате применения следующей операции \(\mathrm{add}\) ровно \(k\) раз:

  • Выбрать целое число \(v\) (\(1 \le v \le 2^n - 1\)), и для каждой вершины \(x\) на пути между \(1\) и \(v\) прибавить \(1\) к \(a_x\).

Две кучи считаются разными, если есть вершина, которая имеет разные значения в этих кучах.

Поскольку ответ может быть очень большим, выведите его по модулю \(p\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, k, p\) (\(1 \le n, k \le 500\), \(10^8 \le p \le 10^9\), \(p\) — простое).

Гарантируется, что сумма \(n\) и сумма \(k\) по всем наборам входных данных не превосходят \(500\).

Выходные данные

Для каждого набора входных данных выведите единственную строку, содержащую целое число: количество различных детерминированных max-куч, которое можно получить в результате применения вышеупомянутой операции \(\mathrm{add}\) ровно \(k\) раз, по модулю \(p\).

Примечание

Для первого набора входных данных существует только один способ сгенерировать \(a\), и такая последовательность является детерминированной max-кучей, поэтому ответ — \(1\).

Для второго набора входных данных, если мы выберем \(v = 1\) и выполним операцию, у нас будет \(a = [1, 0, 0]\), а поскольку \(a_2 = a_3\), мы можем выбрать любой из них при выполнении первой операции \(\mathrm{pop}\), поэтому такая куча не является детерминированной max-кучей.

А если мы выберем \(v = 2\), у нас будет \(a = [1, 1, 0]\), то при выполнении первой операции \(\mathrm{pop}\) произойдет следующее:

  • инициализировать \(v\) как \(1\)
  • поскольку \(a_{2v} > a_{2v + 1}\), выбрать \(2v\) как \(x\), тогда \(x = 2\)
  • присвоить \(a_x\) значению \(a_v\), тогда \(a = [1, 1, 0]\)
  • присвоить \(x\) переменной \(v\), тогда \(v = 2\)
  • поскольку \(v\) является листом, присвоить \(-1\) значению \(a_v\), тогда \(a = [1, -1, 0]\)

Так как первая операция \(\mathrm{pop}\) детерминирована, то это детерминированная max-куча. Также, если мы выберем \(v = 3\), то \(a\) будет детерминированной max-кучей, так что ответ — \(2\).

E2. Детерминированная куча (сложная версия)

Деревья дп Комбинаторика *2900

Это сложная версия задачи. Разница между двумя версиями заключается в определении детерминированной max-кучи, ограничении на время и ограничениях на \(n\) и \(t\). Вы можете совершать взломы только в том случае, если решены обе версии задачи..

Рассмотрим полное бинарное дерево размером \(2^n - 1\), с вершинами, пронумерованными от \(1\) до \(2^n-1\), и корнем в \(1\). Для каждой вершины \(v\) (\(1 \le v \le 2^{n - 1} - 1\)) вершина \(2v\) является ее левым ребенком, а вершина \(2v + 1\) — ее правым ребенком. Каждой вершине \(v\) также присвоено значение \(a_v\).

Определим операцию \(\mathrm{pop}\) следующим образом:

  1. инициализировать переменную \(v\) как \(1\);
  2. повторять следующий процесс до тех пор, пока вершина \(v\) не станет листом (т.е. пока не выполняется \(2^{n - 1} \le v \le 2^n - 1\)):
    1. среди дочерних вершин \(v\) выбрать ту, значение которой больше, и обозначить такую вершину \(x\); если значения на них равны (то есть \(a_{2v} = a_{2v + 1}\)), то можно выбрать любую из них;
    2. присвоить \(a_x\) значению \(a_v\) (т.е. \(a_v := a_x\));
    3. присвоить \(x\) переменной \(v\) (т.е. \(v := x\));
  3. присвоить \(-1\) значению \(a_v\) (т.е. \(a_v := -1\)).

Мы говорим, что операция \(\mathrm{pop}\) является детерминированной, если существует единственный способ выполнить такую операцию. Другими словами, \(a_{2v} \neq a_{2v + 1}\) выполняется на каждом шаге операции.

Бинарное дерево называется max-кучей, если для каждой вершины \(v\) (\(1 \le v \le 2^{n - 1} - 1\)) выполняется \(a_v \ge a_{2v}\) и \(a_v \ge a_{2v + 1}\).

Максимальная куча является детерминированной, если операция \(\mathrm{pop}\) детерминирована для кучи, когда мы выполняем ее в первый и второй раз.

Изначально \(a_v := 0\) для каждой вершины \(v\) (\(1 \le v \le 2^n - 1\)), и ваша цель — посчитать количество различных детерминированных max-куч, которые можно получить в результате применения следующей операции \(\mathrm{add}\) ровно \(k\) раз:

  • Выбрать целое число \(v\) (\(1 \le v \le 2^n - 1\)), и для каждой вершины \(x\) на пути между \(1\) и \(v\) прибавить \(1\) к \(a_x\).

Две кучи считаются разными, если есть вершина, которая имеет разные значения в этих кучах.

Поскольку ответ может быть очень большим, выведите его по модулю \(p\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, k, p\) (\(2 \le n \le 100\), \(1 \le k \le 500\), \(10^8 \le p \le 10^9\), \(p\) — простое).

Гарантируется, что сумма \(n\) не превышает \(100\), а сумма \(k\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите единственную строку, содержащую целое число: количество различных детерминированных max-куч, которое можно получить в результате применения вышеупомянутой операции \(\mathrm{add}\) ровно \(k\) раз, по модулю \(p\).

Примечание

Для первого набора входных данных, если мы выберем \(v = 1\) и выполним операцию, у нас будет \(a = [1, 0, 0]\), а поскольку \(a_2 = a_3\), мы можем выбрать любой из них при выполнении первой операции \(\mathrm{pop}\), поэтому такая куча не является детерминированной max-кучей.

А если мы выберем \(v = 2\), у нас будет \(a = [1, 1, 0]\), то при выполнении первой операции \(\mathrm{pop}\) произойдет следующее:

  • инициализировать \(v\) как \(1\)
  • поскольку \(a_{2v} > a_{2v + 1}\), выбрать \(2v\) как \(x\), тогда \(x = 2\)
  • присвоить \(a_x\) значению \(a_v\), тогда \(a = [1, 1, 0]\)
  • присвоить \(x\) переменной \(v\), тогда \(v = 2\)
  • поскольку \(v\) является листом, присвоить \(-1\) значению \(a_v\), тогда \(a = [1, -1, 0]\)

А во время второго \(\mathrm{pop}\) произойдет следующее:

  • инициализировать \(v\) как \(1\)
  • поскольку \(a_{2v} < a_{2v + 1}\), выбрать \(2v + 1\) в качестве \(x\), тогда \(x = 3\)
  • присвоить \(a_x\) значению \(a_v\), тогда \(a = [0, -1, 0]\)
  • присвоить \(x\) переменной \(v\), тогда \(v = 3\)
  • поскольку \(v\) является листом, присвоить \(-1\) значению \(a_v\), тогда \(a = [0, -1, -1]\)

Поскольку и первая, и вторая операция \(\mathrm{pop}\) детерминированы, это детерминированная max-куча. Также, если мы выберем \(v = 3\), то \(a\) будет детерминированной max-кучей, так что ответ — \(2\).

E. Космические лучи

дп Перебор Структуры данных *2300

Дан массив целых чисел \(s_1, s_2, \ldots, s_l\). Каждую секунду, под действием космических лучей, все \(s_i\), такие что \(i=1\) или \(s_i\neq s_{i-1}\), будут одновременно удалены, а оставшиеся части массива будут конкатенированы вместе, чтобы образовать новый массив \(s_1, s_2, \ldots, s_{l'}\).

Определим силу массива как число секунд, которое требуется ему, чтобы стать пустым.

Вам дан массив целых чисел, сжатых в виде \(n\) пар, описывающих массив слева направо. Каждая пара \((a_i,b_i)\) представляет собой \(a_i\) копий \(b_i\), то есть \(\underbrace{b_i,b_i,\cdots,b_i}_{a_i\textrm{ раз}}\).

Для каждого \(i=1,2,\dots,n\) найдите силу последовательности, описываемой первыми \(i\) парами.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(1\le n\le3\cdot10^5\)) — длина последовательности \(a\).

Каждая из следующих \(n\) строк содержит два целых числа \(a_i\), \(b_i\) (\(1\le a_i\le10^9,0\le b_i\le n\)) — пары, которые описывают последовательность.

Гарантируется, что сумма всех \(n\) не превышает \(3\cdot10^5\).

Гарантируется, что для всех \(1\le i<n\) выполняется \(b_i\neq b_{i+1}\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(n\) целых чисел — ответ для каждого префикса пар.

Примечание

В первом наборе входных данных, для префикса длины \(4\), изменения будут следующими: \([0,0,1,0,0,0,1,1,1,1,1]\rightarrow[0,0,0,1,1,1,1]\rightarrow[0,0,1,1,1]\rightarrow[0,1,1]\rightarrow[1]\rightarrow[]\), поэтому массив станет пустым через \(5\) секунд.

Во втором наборе входных данных, для префикса длины \(4\), изменения будут следующими:\([6,6,6,6,3,6,6,6,6,0,0,0,0]\rightarrow[6,6,6,6,6,6,0,0,0]\rightarrow[6,6,6,6,6,0,0]\rightarrow[6,6,6,6,0]\rightarrow[6,6,6]\rightarrow[6,6]\rightarrow[6]\rightarrow[]\), поэтому массив станет пустым через \(7\) секунд.

F1. Синий двор (простая версия)

дп математика Перебор поиск в глубину и подобное теория чисел *2600

Это простая версия задачи. В этой версии \(n=m\) и ограничение по времени меньше. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Во дворе Синего короля Лелль и Фламм устраивают матч. Матч состоит из нескольких раундов. В каждом раунде побеждает либо Лелль, либо Фламм.

Пусть \(W_L\) и \(W_F\) обозначают количество побед Лелли и Фламма, соответственно. Синий король считает матч успешным тогда и только тогда, когда:

  • после каждого раунда, \(\gcd(W_L,W_F)\le 1\);
  • в конце матча \(W_L\le n, W_F\le m\).

Обратите внимание, что \(\gcd(0,x)=\gcd(x,0)=x\) для каждого целого неотрицательного числа \(x\).

Лелль и Фламм могут прекратить матч, когда захотят, а итоговый счет матча будет следующим: \(l \cdot W_L + f \cdot W_F\).

Пожалуйста, помогите Лелле и Фламму скоординировать свои победы и поражения так, чтобы матч был успешным, а итоговый счет за матч был максимальным.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\leq t \leq 10^3\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит 4 целых числа \(n\), \(m\), \(l\), \(f\) (\(2\leq n\leq m \leq 2\cdot 10^7\), \(1\leq l,f \leq 10^9\), \(\bf{n=m}\)): \(n\), \(m\) обозначают верхнюю границу числа побед Лелли и Фламма соответственно, \(l\) и \(f\) определяют финальный счет матча.

Необычное дополнительное ограничение: гарантируется, что для каждого теста не существует двух наборов входных данных с одинаковой парой \(n\), \(m\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальный итоговый счет успешного матча.

Примечание

В первом наборе входных данных возможный матч выглядит так:

  • Фламм выигрывает, \(\gcd(0,1)=1\).
  • Лелль выигрывает, \(\gcd(1,1)=1\).
  • Фламм выигрывает, \(\gcd(1,2)=1\).
  • Фламм выигрывает, \(\gcd(1,3)=1\).
  • Лелль выигрывает, \(\gcd(2,3)=1\).
  • Лелль и Фламм соглашаются прекратить матч.

Итоговый счет: \(2\cdot2+3\cdot5=19\).

В четвертом наборе входных данных возможный матч выглядит так:

  • Фламм выигрывает, \(\gcd(0,1)=1\).
  • Лелль выигрывает, \(\gcd(1,1)=1\).
  • Лелль выигрывает, \(\gcd(2,1)=1\).
  • Лелль выигрывает, \(\gcd(3,1)=1\).
  • Лелль выигрывает, \(\gcd(4,1)=1\).
  • Лелль выигрывает, \(\gcd(5,1)=1\).
  • Фламм выигрывает, \(\gcd(5,2)=1\).
  • Фламм выигрывает, \(\gcd(5,3)=1\).
  • Фламм выигрывает, \(\gcd(5,4)=1\).
  • Лелль и Фламм соглашаются прекратить матч.

Итоговый счет: \(5\cdot2+4\cdot2=18\). Обратите внимание, что Лелль и Фламм могут прекратить матч, даже если ни у одного из них нет \(n\) выигрышей.

F2. Синий двор (сложная версия)

дп математика Перебор теория чисел *2800

Это сложная версия задачи. В этой версии не гарантируется, что \(n=m\), и ограничение по времени выше. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Во дворе Синего короля Лелль и Фламм устраивают матч. Матч состоит из нескольких раундов. В каждом раунде побеждает либо Лелль, либо Фламм.

Пусть \(W_L\) и \(W_F\) обозначают количество побед Лелли и Фламма, соответственно. Синий король считает матч успешным тогда и только тогда, когда:

  • после каждого раунда, \(\gcd(W_L,W_F)\le 1\);
  • в конце матча \(W_L\le n, W_F\le m\).

Обратите внимание, что \(\gcd(0,x)=\gcd(x,0)=x\) для каждого целого неотрицательного числа \(x\).

Лелль и Фламм могут прекратить матч, когда захотят, а итоговый счет матча будет следующим: \(l \cdot W_L + f \cdot W_F\).

Пожалуйста, помогите Лелле и Фламму скоординировать свои победы и поражения так, чтобы матч был успешным, а итоговый счет за матч был максимальным.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\leq t \leq 10^3\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит 4 целых числа \(n\), \(m\), \(l\), \(f\) (\(2\leq n\leq m \leq 2\cdot 10^7\), \(1\leq l,f \leq 10^9\)): \(n\), \(m\) обозначают верхнюю границу числа побед Лелли и Фламма соответственно, \(l\) и \(f\) определяют финальный счет матча.

Необычное дополнительное ограничение: гарантируется, что для каждого теста не существует двух наборов входных данных с одинаковой парой \(n\), \(m\).

Выходные данные

Для каждого набора входных данных, выведите одно целое число — максимальный итоговый счет успешного матча.

Примечание

В первом наборе входных данных возможный матч выглядит так:

  • Фламм выигрывает, \(\gcd(0,1)=1\).
  • Лелль выигрывает, \(\gcd(1,1)=1\).
  • Фламм выигрывает, \(\gcd(1,2)=1\).
  • Фламм выигрывает, \(\gcd(1,3)=1\).
  • Фламм выигрывает, \(\gcd(1,4)=1\).
  • Лелль и Фламм соглашаются прекратить матч.

Итоговый счет: \(1\cdot2+4\cdot5=22\).

D2. Черепаха и задача MEX (сложная версия)

графы дп жадные алгоритмы математика поиск в глубину и подобное реализация *2100

Две версии — это разные задачи. В этой версии задачи нельзя выбирать одно и то же целое число дважды или более. Можно делать взломы только в том случае, если обе версии решены.

Однажды Черепаха играла с \(n\) последовательностями. Пусть длина \(i\)-й последовательности равна \(l_i\). Тогда \(i\)-я последовательность была \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, l_i}\).

Свинка дала Черепахе задачу, когда Черепаха играла. Условие задачи было следующим:

  • Сначала было неотрицательное целое число \(x\). Черепаха могла выполнять произвольное количество (возможно, ноль) операций с этим числом.
  • В каждой операции Черепаха могла выбрать целое число \(i\), такое что \(1 \le i \le n\) и \(i\) не было выбрано ранее, и сделать \(x\) равным \(\text{mex}^{\dagger}(x, a_{i, 1}, a_{i, 2}, \ldots, a_{i, l_i})\).
  • Черепаха должна была найти ответ, который был максимальным значением \(x\) после выполнения произвольного количества операций.

Черепаха без труда решила вышеуказанную задачу. Она определила \(f(k)\) как ответ на вышеуказанную задачу, когда начальное значение \(x\) было \(k\).

Затем Свинка дала Черепахе неотрицательное целое число \(m\) и попросил Черепаху найти значение \(\sum\limits_{i = 0}^m f(i)\) (т.е. значение \(f(0) + f(1) + \ldots + f(m)\)). К сожалению, она не смогла решить эту задачу. Пожалуйста, помогите ей!

\(^{\dagger}\text{mex}(c_1, c_2, \ldots, c_k)\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в последовательности \(c\). Например, \(\text{mex}(2, 2, 0, 3)\) равно \(1\), \(\text{mex}(1, 2)\) равно \(0\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1 \le n \le 2 \cdot 10^5, 0 \le m \le 10^9\)).

Каждая из следующих \(n\) строк содержит несколько целых чисел. Первое целое число \(l_i\) (\(1 \le l_i \le 2 \cdot 10^5\)) представляет длину \(i\)-й последовательности, а следующие \(l_i\) целых числа \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, l_i}\) (\(0 \le a_{i, j} \le 10^9\)) представляют элементы \(i\)-й последовательности.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\), а сумма \(\sum l_i\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — значение \(\sum\limits_{i = 0}^m f(i)\).

Примечание

В первом наборе входных данных, когда \(x\) изначально равен \(2\), Черепаха может выбрать \(i = 3\) и сделать \(x\) равным \(\text{mex}(x, a_{3, 1}, a_{3, 2}, a_{3, 3}, a_{3, 4}) = \text{mex}(2, 7, 0, 1, 5) = 3\). Можно доказать, что Черепаха не может сделать значение \(x\) больше \(3\), поэтому \(f(2) = 3\).

Можно увидеть, что \(f(0) = 3\), \(f(1) = 3\), \(f(2) = 3\), \(f(3) = 3\), и \(f(4) = 4\). Таким образом, \(f(0) + f(1) + f(2) + f(3) + f(4) = 3 + 3 + 3 + 3 + 4 = 16\).

Во втором наборе входных данных, когда \(x\) изначально равен \(1\), Черепаха может выбрать \(i = 1\) и сделать \(x\) равным \(\text{mex}(x, a_{1, 1}, a_{1, 2}, a_{1, 3}, a_{1, 4}, a_{1, 5}) = \text{mex}(1, 0, 2, 0, 4, 11) = 3\). Можно доказать, что Черепаха не может сделать значение \(x\) больше \(3\), поэтому \(f(1) = 3\).

Можно увидеть, что \(f(0) = 4\), \(f(1) = 3\), \(f(2) = 4\), \(f(3) = 3\), и \(f(4) = 4\). Таким образом, \(f(0) + f(1) + f(2) + f(3) + f(4) = 4 + 3 + 4 + 3 + 4 = 18\).

В четвертом наборе входных данных можно увидеть, что \(f(0) = 3\) и \(f(1) = 1\). Таким образом, \(f(0) + f(1) = 3 + 1 = 4\).

E1. Черепаха и инверсии (легкая версия)

дп жадные алгоритмы математика Перебор разделяй и властвуй *2600

Это легкая версия данной задачи. Различия между версиями заключаются в ограничении на \(m\) и в том, что \(r_i < l_{i + 1}\) выполняется для каждого \(i\) от \(1\) до \(m - 1\) в легкой версии. Вы можете взломы только в том случае, если обе версии задачи решены.

Черепаха дает вам \(m\) отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_m, r_m]\). Она считает, что перестановка \(p\) интересна, если существуют целые числа \(k_i\) для каждого отрезка (\(l_i \le k_i < r_i\)), такие что если она вычислит \(a_i = \max\limits_{j = l_i}^{k_i} p_j, b_i = \min\limits_{j = k_i + 1}^{r_i} p_j\) для каждого целого числа \(i\) от \(1\) до \(m\), то будет выполняться следующее условие:

\(\)\max\limits_{i = 1}^m a_i < \min\limits_{i = 1}^m b_i\(\)

Черепаха хочет, чтобы вы вычислили максимальное количество инверсий среди всех интересных перестановок длины \(n\), или сказали ей, если интересной перестановки не существует.

Инверсией перестановки \(p\) называется пара целых чисел \((i, j)\) (\(1 \le i < j \le n\)) такая, что \(p_i > p_j\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)). Описание наборов входных данных следует далее.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(2 \le n \le 5 \cdot 10^3, 0 \le m \le \frac{n}{2}\)) — длина перестановки и количество отрезков.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(l_i, r_i\) (\(1 \le l_i < r_i \le n\)) — \(i\)-й отрезок.

Дополнительное ограничение на входные данные в этой версии: \(r_i < l_{i + 1}\) выполняется для каждого \(i\) от \(1\) до \(m - 1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных, если интересной перестановки не существует, выведите единственное целое число \(-1\).

В противном случае выведите единственное целое число — максимальное количество инверсий.

Примечание

В третьем наборе входных данных интересная перестановка с максимальным количеством инверсий это \([5, 2, 4, 3, 1]\).

В четвертом наборе входных данных интересная перестановка с максимальным количеством инверсий это \([4, 8, 7, 6, 3, 2, 1, 5]\). В этом случае мы можем задать \([k_1, k_2] = [1, 7]\).

В пятом наборе входных данных интересная перестановка с максимальным количеством инверсий это \([4, 7, 6, 3, 2, 1, 5]\).

В шестом наборе входных данных интересная перестановка с максимальным количеством инверсий это \([4, 7, 3, 6, 2, 5, 1]\).

E2. Черепаха и инверсии (сложная версия)

дп жадные алгоритмы математика Перебор разделяй и властвуй Структуры данных *2700

Это сложная версия этой задачи. Различия между версиями заключаются в ограничении на \(m\) и условии \(r_i < l_{i + 1}\), которое выполняется для каждого \(i\) от \(1\) до \(m - 1\) в простой версии. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Черепаха дает вам \(m\) отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_m, r_m]\). Она считает, что перестановка \(p\) интересна, если существуют целые числа \(k_i\) для каждого отрезка (\(l_i \le k_i < r_i\)), такие что если она вычислит \(a_i = \max\limits_{j = l_i}^{k_i} p_j, b_i = \min\limits_{j = k_i + 1}^{r_i} p_j\) для каждого целого числа \(i\) от \(1\) до \(m\), то будет выполняться следующее условие:

\(\)\max\limits_{i = 1}^m a_i < \min\limits_{i = 1}^m b_i\(\)

Черепаха хочет, чтобы вы вычислили максимальное количество инверсий среди всех интересных перестановок длины \(n\), или сказали ей, если интересной перестановки не существует.

Инверсией перестановки \(p\) называется пара целых чисел \((i, j)\) (\(1 \le i < j \le n\)), такая что \(p_i > p_j\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)). Далее следует описание наборов.

Первая строка каждого набора содержит два целых числа \(n, m\) (\(2 \le n \le 5 \cdot 10^3, 0 \le m \le 5 \cdot 10^3\)) — длину перестановки и количество отрезков.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(l_i, r_i\) (\(1 \le l_i < r_i \le n\)) — \(i\)-й отрезок. Обратите внимание, что могут существовать пары одинаковых отрезков (т.е. могут существовать два разных индекса \(i, j\), такие что \(l_i = l_j\) и \(r_i = r_j\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(5 \cdot 10^3\), а также сумма \(m\) по всем наборам не превышает \(5 \cdot 10^3\).

Выходные данные

Для каждого набора, если интересной перестановки не существует, выведите одно целое число \(-1\).

В противном случае выведите одно целое число — максимальное количество инверсий.

Примечание

В третьем наборе интересная перестановка с максимальным количеством инверсий это \([5, 2, 4, 3, 1]\).

В четвертом наборе интересная перестановка с максимальным количеством инверсий это \([4, 3, 8, 7, 6, 2, 1, 5]\). В этом случае мы можем задать \([k_1, k_2, k_3] = [2, 2, 7]\).

В пятом и шестом наборе можно доказать, что интересной перестановки не существует.

В седьмом наборе интересная перестановка с максимальным количеством инверсий это \([4, 7, 6, 3, 2, 1, 5]\). В этом случае мы можем задать \([k_1, k_2, k_3, k_4] = [1, 6, 1, 6]\).

В восьмом наборе интересная перестановка с максимальным количеством инверсий это \([4, 7, 3, 6, 2, 5, 1]\).

F. Черепаха и три последовательности

дп жадные алгоритмы математика Перебор Структуры данных Теория вероятностей *2800

Свинка дает Черепахе три последовательности \(a_1, a_2, \ldots, a_n\), \(b_1, b_2, \ldots, b_n\) и \(c_1, c_2, \ldots, c_n\).

Черепаха выберет подпоследовательность из \(1, 2, \ldots, n\) длины \(m\), пусть это будет \(p_1, p_2, \ldots, p_m\). Подпоследовательность должна удовлетворять следующим условиям:

  • \(a_{p_1} \le a_{p_2} \le \cdots \le a_{p_m}\);
  • Все \(b_{p_i}\) для всех индексов \(i\) попарно различны, т.е. не существует двух различных индексов \(i\), \(j\), таких что \(b_{p_i} = b_{p_j}\).

Помогите ему найти максимальное значение \(\sum\limits_{i = 1}^m c_{p_i}\), или скажите ему, что невозможно выбрать подпоследовательность длины \(m\), которая удовлетворяет вышеуказанным условиям.

Напомним, что последовательность \(a\) является подпоследовательностью последовательности \(b\), если \(a\) может быть получена из \(b\) путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 3000\), \(1 \le m \le 5\)) — длины трех последовательностей и требуемая длина подпоследовательности.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы последовательности \(a\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — элементы последовательности \(b\).

Четвертая строка содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 10^4\)) — элементы последовательности \(c\).

Выходные данные

Выведите единственное целое число — максимальное значение \(\sum\limits_{i = 1}^m c_{p_i}\). Если невозможно выбрать подпоследовательность длины \(m\), которая удовлетворяет вышеуказанным условиям, выведите \(-1\).

Примечание

В первом тесте мы можем выбрать \(p = [1, 2]\), тогда \(c_{p_1} + c_{p_2} = 1 + 4 = 5\). Мы не можем выбрать \(p = [2, 4]\), так как \(a_2 > a_4\), что нарушает первое условие. Мы также не можем выбрать \(p = [2, 3]\), так как \(b_2 = b_3\), что нарушает второе условие. Мы можем выбрать \(p = [1, 4]\), но \(c_1 + c_4 = 4\), что не является максимальным.

Во втором тесте мы можем выбрать \(p = [4, 6, 7]\).

В третьем тесте невозможно выбрать подпоследовательность длины \(3\), которая удовлетворяет обоим условиям.

G. Сжатие подстрок

дп матрицы Структуры данных *3200

Определим операцию сжатия строки \(t\), состоящей из хотя бы \(2\) цифр от \(1\) до \(9\), следующим образом:

  • разобьем ее на четное количество непустых подстрок — пусть эти подстроки будут \(t_1, t_2, \dots, t_m\) (то есть, \(t = t_1 + t_2 + \dots + t_m\), где \(+\) является операцией конкатенации);
  • запишем строку \(t_2\) \(t_1\) раз, потом строку \(t_4\) \(t_3\) раз, и так далее.

Например, для строки «12345» можно сделать так: разбить на («1», «23», «4», «5»), записать «235555».

Пусть функция \(f(t)\) для строки \(t\) возвращает минимальную длину строки, которую можно будет получить в результате такого процесса.

Дана строка \(s\), состоящая из \(n\) цифр от \(1\) до \(9\), и целое число \(k\). Посчитайте значение функции \(f\) для всех последовательных подстрок \(s\) длины ровно \(k\).

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 2 \cdot 10^5\)).

Во второй строке записана строка \(s\) (\(|s| = n\)), состоящая только из цифр от \(1\) до \(9\).

Выходные данные

Выведите \(n - k + 1\) целое число — \(f(s_{1,k}), f(s_{2,k+1}), \dots, f(s_{n - k + 1, n})\).

C. Лентяй Нарек

дп реализация Строки *1800

Нареку лень придумывать третью задачу этого контеста, поэтому его друг Артур предложил использовать ChatGPT. ChatGPT сгенерировал \(n\) задач, каждая из которых состоит из \(m\) букв, и Нарек рассматривает их как \(n\) строк. Чтобы усложнить задачу, он комбинирует задачи, выбирая некоторые из \(n\) строк (возможно, ни одной) и располагая их без изменения порядка. Его шанс решить задачу определяется как \(score_n - score_c\), где \(score_n\) — счёт Нарека, а \(score_c\) — счёт ChatGPT.

Нарек вычисляет \(score_n\), изучая выбранную строку (он двигается слева направо). Изначально он ищет букву \(\texttt{«n»}\), после неё буквы \(\texttt{«a»}\), \(\texttt{«r»}\), \(\texttt{«e»}\) и \(\texttt{«k»}\). Найдя все вхождения этих букв, он увеличивает \(score_n\) на \(5\) и возобновляет поиск \(\texttt{«n»}\) (он не возвращается назад, а просто продолжает с того места, на котором остановился).

После того как Нарек закончит, ChatGPT просматривает строку и увеличивает \(score_c\) на \(1\) для каждой буквы \(\texttt{«n»}\), \(\texttt{«a»}\), \(\texttt{«r»}\), \(\texttt{«e»}\), или \(\texttt{«k»}\), которые Нарек не смог использовать. Обратите внимание, что если Нарек не смог завершить последнее вхождение, найдя все \(5\) букв, то использованные им буквы учитываются в счёте ChatGPT \(score_c\), а Нарек не получает никаких очков, если он не закончил поиск всех 5 букв.

Помогите Нареку максимизировать значение \(score_n - score_c\), выбрав наиболее оптимальное подмножество начальных строк.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных даны два целых числа \(n, m\) (\(1 \le n, m \le 10^3\)) — количество строк и длина строк.

В следующих \(n\) строках даны \(n\) строк, каждая из которых имеет длину \(m\). В строках содержатся только строчные буквы латинского алфавита.

Сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимально возможное значение \(score_n - score_c\).

Примечание

В первом наборе входных данных один из оптимальных ответов — когда Нарек не выбирает ни одну из строк, поэтому ответ равен \(0\). В качестве альтернативы он может выбрать все строки. В этом случае полная строка становится «nnaarreekk». Нарек может выбрать первые появления всех букв и добавить к счету \(5\). Его соперник добавит по \(1\) за все вторые появления, что в сумме составит \(5\). Поэтому ответ будет \(5 - 5 = 0\).

В третьем наборе входных данных единственный оптимальный ответ — когда Нарек не выбирает строку. Обратите внимание, что если бы он выбрал строку, то не смог бы найти последнюю букву «k», поэтому его счёт остался бы на уровне \(0\), а не стал бы \(5\). Затем ChatGPT добавил бы \(4\) за \(4\) буквы, и разница счётов стала бы \(0 - 4 = -4\).

В последнем наборе входных данных Нареку нужно выбрать первую и последнюю строки. Поместив эти две строки рядом друг с другом, он получает «\({\color{red}{n}}rr{\color{red}{a}}{\color{red}{r}}{\color{red}{e}}{\color{red}{k}}{\color{red}{n}}k{\color{red}{a}}{\color{red}{r}}{\color{red}{e}}{\color{red}{k}}{\color{blue}{z}}\)». Нарек может выбрать буквы, отмеченные красным цветом, и добавить к своему счету \(10\). Так как буквы чёрного цвета, которые оставил Нарек, может забрать соперник (они используются в слове «Нарек»), то он прибавляет к счету все остальные буквы и получает счет \(3\). Таким образом, ответ составляет \(10 - 3 = 7\).

E1. Игра Подугольник (простая версия)

дп жадные алгоритмы игры реализация *2100

Это простая версия задачи. Разница между двумя версиями заключается в ограничениях на переменные. Вы можете делать взломы, только если решены обе версии задачи.

Цовак и Нарек играют в игру. У них есть массив \(a\) и матрица целых чисел \(b\) с \(n\) строками и \(m\) столбцами, пронумерованных с \(1\). Ячейка в \(i\)-й строке и \(j\)-м столбце обозначается \((i, j)\).

Они ищут элементы \(a\) по очереди; первым начинает Цовак. Каждый раз игрок ищет в матрице клетку, содержащую текущий элемент \(a\) (Цовак ищет первый, Нарек — второй и т.д.). Допустим, игрок выбрал клетку \((r, c)\). Следующий игрок должен выбрать свою клетку в подматрице, начинающейся в \((r + 1, c + 1)\) и заканчивающейся в \((n, m)\) (подматрица может быть пустой, если \(r=n\) или \(c=m\)). Если игрок не может найти такую клетку (или оставшаяся подматрица пуста) или массив заканчивается (предыдущий игрок выбрал последний элемент), то он проигрывает.

Ваша задача — определить победителя, если игроки играют оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 300\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(l\), \(n\) и \(m\) (\(1 \le l, n, m \le 300\)) – длина массива и размер матрицы.

Вторая строка содержит \(l\) целых чисел \(a_1, a_2, a_3, \ldots a_l\) (\(1 \le a_i \le \min(7, n \cdot m)\)) – элементы массива \(a\).

В \(i\)-й из последующих \(n\) строк содержится \(m\) целых чисел \(b_{i,1}, b_{i,2}, b_{i,3}, \ldots b_{i,m}\) (\(1 \le b_{i,j} \le \min(7, n \cdot m)\), представляющих \(i\)-ю строку матрицы.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^5\).

Гарантируется, что сумма \(l\) по всем наборам входных данных не превосходит \(300\).

Выходные данные

Вы должны вывести \(t\) строк, \(i\)-я из которых содержит символ, представляющий ответ на \(i\)-й набор входных данных: «T», если победил Цовак, или «N», в противном случае (без кавычек).

Примечание

В первом наборе входных данных Цовак начинает с поиска \(1\). Существует только одно вхождение \(1\) в \((1,1)\), поэтому он выбирает его. Затем Нареку нужно найти \(2\) в подматрице \((2, 2)\), которая состоит только из двух последних элементов: \(5\) и \(2\). Он выбирает \(2\), и Цовак проигрывает, так как массив закончился.

Во втором наборе входных данных Цовак должен выбрать \(1\). В клетке \((n,m)\) есть \(1\), поэтому он выбирает эту клетку. Затем, поскольку подматрица \((n + 1, m + 1)\) пуста, Нарек не может найти \(2\), поэтому он проигрывает.

E2. Игра Подугольник (сложная версия)

дп жадные алгоритмы игры реализация Структуры данных *2500

Это простая версия задачи. Разница между двумя версиями заключается в ограничениях на переменные. Вы можете делать взломы, только если решены обе версии задачи.

Цовак и Нарек играют в игру. У них есть массив \(a\) и матрица целых чисел \(b\) с \(n\) строками и \(m\) столбцами, пронумерованных с \(1\). Ячейка в \(i\)-й строке и \(j\)-м столбце обозначается \((i, j)\).

Они ищут элементы \(a\) по очереди; первым начинает Цовак. Каждый раз игрок ищет в матрице клетку, содержащую текущий элемент \(a\) (Цовак ищет первый, Нарек — второй и т.д.). Допустим, игрок выбрал клетку \((r, c)\). Следующий игрок должен выбрать свою клетку в подматрице, начинающейся в \((r + 1, c + 1)\) и заканчивающейся в \((n, m)\) (подматрица может быть пустой, если \(r=n\) или \(c=m\)). Если игрок не может найти такую клетку (или оставшаяся подматрица пуста) или массив заканчивается (предыдущий игрок выбрал последний элемент), то он проигрывает.

Ваша задача — определить победителя, если игроки играют оптимально.

Примечание: поскольку входные данные велики, вам может потребоваться оптимизация ввода/вывода для этой задачи.

Например, в C++ достаточно использовать следующие строки в начале функции main():

int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
}
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(l\), \(n\) и \(m\) (\(1 \le l, n, m \le 1500\)) – длина массива и размер матрицы.

Вторая строка содержит \(l\) целых чисел \(a_1, a_2, a_3, \ldots a_l\) (\(1 \le a_i \le n \cdot m\)) – элементы массива \(a\).

В \(i\)-й из последующих \(n\) строк содержится \(m\) целых чисел \(b_{i,1}, b_{i,2}, b_{i,3}, \ldots b_{i,m}\) (\(1 \le b_{i,j} \le n \cdot m\), представляющих \(i\)-ю строку матрицы.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(3 \cdot 10^6\).

Гарантируется, что сумма \(l\) по всем наборам входных данных не превосходит \(1500\).

Выходные данные

Вы должны вывести \(t\) строк, \(i\)-я из которых содержит символ, представляющий ответ на \(i\)-й набор входных данных: «T», если победил Цовак, или «N», в противном случае (без кавычек).

Примечание

В первом наборе входных данных Цовак начинает с поиска \(1\). Существует только одно вхождение \(1\) в \((1,1)\), поэтому он выбирает его. Затем Нареку нужно найти \(2\) в подматрице \((2, 2)\), которая состоит только из двух последних элементов: \(6\) и \(2\). Он выбирает \(2\), и Цовак проигрывает, так как массив закончился.

Во втором наборе входных данных Цовак должен выбрать \(1\). В клетке \((n,m)\) есть \(1\), поэтому он выбирает эту клетку. Затем, поскольку подматрица \((n + 1, m + 1)\) пуста, Нарек не может найти \(2\), поэтому он проигрывает.

D. Хобби Сакурако

графы дп математика снм *1100

Для некоторой перестановки \(p\)\(^{\text{∗}}\) Сакурако называет целое число \(j\) достижимым из целого числа \(i\), если можно сделать так, чтобы \(i\) стало равным \(j\), присваивая \(i=p_i\) некоторое количество раз.

Если \(p=[3,5,6,1,2,4]\), то, например, \(4\) достижимо из \(1\), потому что: \(i=1\) \(\rightarrow\) \(i=p_1=3\) \(\rightarrow\) \(i=p_3=6\) \(\rightarrow\) \(i=p_6=4\). Теперь \(i=4\), так что \(4\) достижимо из \(1\).

Каждое число перестановки окрашено либо в чёрный, либо в белый цвет.

Сакурако определяет функцию \(F(i)\) как количество целых чисел чёрного цвета, которые достижимы из \(i\).

Сакурако интересует \(F(i)\) для каждого \(1\le i\le n\), но вычислить все значения становится очень сложно, поэтому она просит вас, как своего хорошего друга, вычислить это.

\(^{\text{∗}}\)Перестановка длины \(n\) — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (число \(2\) встречается дважды в массиве), а \([1,3,4]\) также не является перестановкой ( \(n=3\), но в массиве есть \(4\)).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\le t\le 10^4\))  — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\))  — количество элементов массива.

Вторая строка каждого набора содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1\le p_i\le n\))  — элементы перестановки.

Третья строка каждого набора содержит строку \(s\) длины \(n\), состоящую из '0' и '1'. Если \(s_i=0\), то число \(p_i\) окрашено в чёрный цвет, если \(s_i=1\), то число \(p_i\) окрашено в белый цвет.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(F(1), F(2), \dots, F(n)\).

E. Чередующаяся строка

дп жадные алгоритмы Перебор реализация Строки Структуры данных *1500

Сакурако очень любит чередующиеся строки. Она называет строку \(s\) из строчных латинских букв чередующейся строкой, если символы на четных позициях одинаковы, если символы на нечетных позициях одинаковы и длина строки четная.

Например, строки 'abab' и 'gg' являются чередующимися, а строки 'aba' и 'ggwp' — нет.

Как хороший друг, вы решили подарить такую строку, но не смогли её найти. К счастью, вы можете выполнить два типа операций над строкой:

  1. Выберите индекс \(i\) и удалите из строки \(i\)-й символ, что уменьшит длину строки на \(1\). Такую операцию можно выполнить не более \(1\) раза;
  2. Выберите индекс \(i\) и замените \(s_i\) на любую другую букву.

Поскольку вы торопитесь, вам нужно определить минимальное количество операций, необходимых для превращения строки в чередующуюся.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных.

Первая строка каждого набора содержит одно число \(n\) (\(1 \le n\le 2\cdot 10^5\))  — длина строки.

Вторая строка каждого набора содержит строку \(s\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая выведите одно целое число — минимальное количество операций, необходимых для превращения строки \(s\) в чередующуюся.

Примечание

Для строки ababa можно удалить первый символ, чтобы получить baba, что является чередующейся строкой.

Для строки acdada можно изменить первые два символа, чтобы получить dadada, что является чередующейся строкой.

G2. Запросы подмассивов Юнли (сложная версия)

Бинарный поиск дп Структуры данных *2200

Это сложная версия задачи. В этой версии гарантируется, что \(r \geq l+k-1\) для всех запросов.

Для произвольного массива \(b\) Юнли может выполнять следующую операцию любое количество раз:

  • Выбрать индекс \(i\). Присвоить \(b_i = x\), где \(x\) — любое целое число, которое она хочет (\(x\) не ограничено интервалом \([1,n]\)).

Обозначим \(f(b)\) как минимальное количество операций, которые ей нужно выполнить, чтобы в массиве \(b\) существовал последовательный подмассив\(^{\text{∗}}\) длиной не менее \(k\).

Юнли дан массив \(a\) размером \(n\), и она задает вам \(q\) запросов. В каждом запросе вы должны вывести \(\sum_{j=l+k-1}^{r} f([a_l, a_{l+1}, \ldots, a_j])\).

\(^{\text{∗}}\)Если существует последовательный подмассив длиной \(k\), который начинается с индекса \(i\) (\(1 \leq i \leq |b|-k+1\)), то \(b_j = b_{j-1} + 1\) для всех \(i < j \leq i+k-1\).

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(q\) (\(1 \leq k \leq n \leq 2 \cdot 10^5\), \(1 \leq q \leq 2 \cdot 10^5\)) — длину массива, длину последовательного подмассива и количество запросов.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) (\(1 \leq a_i \leq n\)).

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n\), \(r \geq l+k-1\)) — границы запроса.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\), а сумма \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите \(\sum_{j=l+k-1}^{r} f([a_l, a_{l+1}, \ldots, a_j])\) для каждого запроса на новой строке.

Примечание

Во втором запросе первого набора входных данных мы вычисляем следующие значения функции:

  • \(f([2,3,2,1,2])=3\), потому что Юнли может присвоить \(b_3=4\), \(b_4=5\) и \(b_5=6\), сделав последовательный подмассив размером \(5\) за \(3\) хода.
  • \(f([2,3,2,1,2,3])=2\), потому что мы можем присвоить \(b_3=0\) и \(b_2=-1\), сделав последовательный подмассив размером \(5\) за \(2\) хода (начиная с позиции \(2\)).

Ответ на этот запрос равен \(3+2=5\).

G3. Запросы подмассивов Юнли (экстремальная версия)

дп реализация Структуры данных *2700

Это экстремальная версия задачи. В этой версии выход для каждого запроса отличается от легкой и сложной версий. Также гарантируется, что \(r \geq l+k-1\) для всех запросов.

Для произвольного массива \(b\) Юнли может выполнять следующую операцию любое количество раз:

  • Выбрать индекс \(i\). Установить \(b_i = x\), где \(x\) — любое целое число, которое она желает (\(x\) не ограничено интервалом \([1,n]\)).

Обозначим \(f(b)\) как минимальное количество операций, которые ей нужно выполнить, чтобы в массиве \(b\) существовал последовательный подмассив\(^{\text{∗}}\) длиной не менее \(k\).

Юнли дан массив \(a\) размером \(n\), и она задает вам \(q\) запросов. В каждом запросе вы должны вывести \(\sum_{i=l}^{r-k+1} \sum_{j=i+k-1}^{r} f([a_i, a_{i+1}, \ldots, a_j])\).

\(^{\text{∗}}\)Если существует последовательный подмассив длины \(k\), который начинается с индекса \(i\) (\(1 \leq i \leq |b|-k+1\)), то \(b_j = b_{j-1} + 1\) для всех \(i < j \leq i+k-1\).

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(q\) (\(1 \leq k \leq n \leq 2 \cdot 10^5\), \(1 \leq q \leq 2 \cdot 10^5\)) — длину массива, длину последовательного подмассива и количество запросов.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) (\(1 \leq a_i \leq n\)).

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n\), \(r \geq l+k-1\)) — границы запроса.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\), а сумма \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Выведите \(\sum_{i=l}^{r-k+1} \sum_{j=i+k-1}^{r} f([a_i, a_{i+1}, \ldots, a_j])\) для каждого запроса на новой строке.

Примечание

В первом запросе первого набора входных данных мы можем вычислить ответ на запрос следующим образом:

  • \(i = 4\) и \(j = 5\): \(f([2, 1])=1\), потому что Юнли может установить \(b_2=3\), что создаст последовательный подмассив размером \(2\) за \(1\) ход.
  • \(i = 4\) и \(j = 6\): \(f([2, 1, 2])=0\), потому что уже существует последовательный массив размером \(2\).
  • \(i = 5\) и \(j = 6\): \(f([1, 2])=0\), потому что уже существует последовательный массив размером \(2\).

Ответ на этот запрос равен \(1+0+0=1\).

A. Четкая симметрия

дп Конструктив математика *1700

Рассмотрим некоторую квадратную матрицу A со стороной n, состоящую из нулей и единиц. Пронумеруем ее строки от 1 до n сверху вниз и столбцы от 1 до n слева направо. Элемент матрицы, находящийся на пересечении i-ой строки и j-го столбца, будем обозначать Ai, j.

Назовем матрицу A четкой, если никакие две клетки, в которых стоят единицы, не имеют общей стороны.

Назовем матрицу A симметричной, если она в точности совпадает с матрицами, образованными из нее горизонтальным и/или вертикальным отражением. Формально, для любой пары (i, j) (1 ≤ i, j ≤ n) оба следующих условия должны быть выполнены: Ai, j = An - i + 1, j и Ai, j = Ai, n - j + 1.

Остротой матрицы A назовем количество единиц в ней.

Ваша задача — по заданному числу x найти минимальное натуральное число n такое, что существует четкая симметричная матрица A со стороной n и остротой x.

Входные данные

В единственной строке записано целое число x (1 ≤ x ≤ 100) — требуемая острота матрицы.

Выходные данные

Выведите единственное число — искомое значение n.

Примечание

Соответствующие примерам матрицы приведены на рисунке:

C. Хрупкие мосты

дп *2000

Вы играете в компьютерную игру и только что дошли до бонусного уровня, единственная возможная цель которого — набрать как можно больше очков. Будучи максималистом, вы решили, что не уйдете с этого уровня, не набрав максимально возможное количество очков на нем.

Бонусный уровень состоит из n небольших платформ, расположенных в ряд и пронумерованных слева направо от 1 до n, и (n - 1) мостов, соединяющих каждую пару соседних платформ. Мосты между платформами весьма хрупкие, и для каждого моста заранее известно количество раз, которое можно пройти по этому мосту от одного конца до другого перед тем, как этот мост рухнет навсегда.

Действия игрока заключаются в следующем. Сначала он выбирает одну из платформ, на которой и располагает своего героя. После этого игрок может свободно перемещать своего героя между платформами, двигаясь по еще не разрушенным мостам. Как только оказывается, что от платформы, на которой находится герой, не отходит ни одного нерухнувшего моста, уровень автоматически заканчивается. Количество очков, набранное игроком, по окончании уровня вычисляется как количество переходов, сделанных героем между платформами. Учтите, что если герой начал движение по некоторому мосту, то он обязан его продолжить в том же направлении, пока не окажется на платформе.

Определите, какое количество очков вам нужно набрать, чтобы быть уверенным, что ваш рекорд никто не побьет, и со спокойной душой перейти к следующему уровню.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 105) — количество платформ на бонусном уровне. Вторая строка содержит (n - 1) целых чисел ai (1 ≤ ai ≤ 109, 1 ≤ i < n) — количество переходов от одного конца до другого, которое может выдержать мост между платформами i и i + 1.

Выходные данные

Выведите единственное число — максимальное количество очков, которое можно набрать на бонусном уровне.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

Один из вариантов получить 5 очков в примере — начав с платформы 3, последовательно переходить на платформы 4, 3, 2, 1 и 2. После этого единственным нерухнувшим мостом останется мост между платформами 4 и 5, однако этот мост слишком далек от платформы 2, на которой расположен герой.

D. Инновационно новая задача

битмаски дп Перебор *2600

Широко известный в узких кругах белорусский олимпиадник Леша решил немного подзаработать, чтобы купить себе квартиру площадью на один квадратный метр больше. Для этого он хочет составить и провести Super Rated Match (SRM) на сайте Torcoder.com. Но вот беда — суровый торкодерский координатор Иван не принимает ни одной Лешиной задачи, называя каждую обидным словом «боян». И вот после очередной предложенной задачи дело чуть не дошло до взаимной обиды.

Вам предлагается выступить в роли справедливого судьи и определить, действительно ли задача является настолько инновационно новой, как уверен в этом Леша, или все-таки Иван прав, и похожая задача уже встречалась в прошедших SRM.

Вам даны описания Лешиной задачи и задач из архива сайта Torcoder.com. Описание каждой задачи представляет собой последовательность слов. При этом гарантируется, что слова в Лешиной задаче не повторяются, в то время как описание задачи из архива может содержать произвольное количество повторяющихся слов.

«Похожесть» Лешиной задачи на некоторую задачу из архива определим следующим образом. Среди всех перестановок слов предлагаемой задачи выберем ту, которая встречается в задаче из архива в качестве подпоследовательности. Если таких перестановок несколько, выберем ту, число инверсий в которой минимально. Тогда «похожесть» задачи можно записать в виде , где n — количество слов в задаче Леши, а x — количество инверсий в выбранной перестановке. Обратите внимание, что «похожесть» p — положительное число.

Задачу назовем инновационно новой, если среди задач из архива Ивана не найдется ни одной задачи, которая содержит в себе в качестве подпоследовательности некоторую перестановку слов Лешиной задачи.

Рассудите ребят, определив, является ли предлагаемая задача новой, либо указав задачу из архива, которая больше всего напоминает Лешину задачу.

Входные данные

Первая строка содержит число n (1 ≤ n ≤ 15) — количество слов в Лешиной задаче. Во второй строке находятся n слов, разделенных пробелом — краткое описание задачи.

Третья строка содержит число m (1 ≤ m ≤ 10) — количество задач в архиве Torcoder.com. Следующие m строк содержат описания задач в формате «k s1 s2 ... sk», где k (1 ≤ k ≤ 500000) — количество слов в задаче, а si — слово задачи.

Слова из описаний всех задач содержат не более 10 строчных латинских букв. Гарантируется, что суммарная длина слов в описаниях всех задач не превышает 500015.

Выходные данные

В случае, если Лешина задача является инновационно новой, выведите строку «Brand new problem!» (без кавычек).

В противном случае в первой строке выведите номер задачи из архива, наиболее похожей на Лешину задачу. Если таких задач несколько, выведите ту, номер которой минимальный. Во второй строке выведите строку из символов [:, символа |, повторенного p раз, и символов :], где p — «похожесть» этой задачи на Лешину. Задачи нумеруются начиная с единицы в том порядке, в котором они заданы во входных данных.

Примечание

Напомним, что количество инверсий — это количество пар слов, которые в перестановке идут не в том порядке, в котором они шли в исходной задаче. Так, например, если исходная задача была «add two numbers», то перестановка «numbers add two» содержит две инверсии — пары слов «numbers» и «add», а также «numbers» и «two».

Последовательность b1,  b2,  ...,  bk называется подпоследовательностью последовательности a1, a2,  ...,  an, если найдется такой набор индексов 1 ≤ i1 <  i2 < ...   < ik ≤ n, что aij  =  bj. Иными словами, последовательность b может быть получена из a путем вычеркивания некоторых элементов.

В первом тесте первая задача содержит в качестве подпоследовательности перестановку «find the palindrome next», в которой количество инверсий равно 1 (слова «palindrome» и «next»).

Во втором тесте ни одна из задач не содержит в себе в качестве подпоследовательности перестановку слов задачи, предлагаемой Лешей.

E. Префиксные НОД

дп жадные алгоритмы математика Перебор теория чисел *2200

Так как Мансур устал делать легенды, легенды на эту задачу не будет.

Дан массив натуральных чисел \(a_1, a_2, \ldots, a_n\). В нём можно переставить элементы произвольным образом. Требуется узнать минимально возможное значение выражения \(\)\gcd(a_1) + \gcd(a_1, a_2) + \ldots + \gcd(a_1, a_2, \ldots, a_n),\(\) где \(\gcd(a_1, a_2, \ldots, a_n)\) обозначает наибольший общий делитель (НОД) чисел \(a_1, a_2, \ldots, a_n\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное число \(n\) (\(1 \le n \le 10^5\)) — размер массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)) — исходный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Гарантируется, что сумма \(\max(a_1, a_2, \ldots, a_n)\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число в отдельной строке — ответ на задачу.

Примечание

В первом наборе входных данных можно переставить элементы следующим образом: \([2, 4, 2]\), тогда ответом будет \(\gcd(2) + \gcd(2, 4) + \gcd(2, 4, 2) = 2 + 2 + 2 = 6\).

В третьем наборе входных данных можно переставить элементы следующим образом: \([6, 10, 15]\), тогда ответом будет \(\gcd(6) + \gcd(6, 10) + \gcd(6, 10, 15) = 6 + 2 + 1 = 9\).

F1. Игра на дереве (простая версия)

Бинарный поиск Деревья дп жадные алгоритмы игры Перебор реализация Структуры данных *2700

Это простая версия задачи. В этой версии \(\mathbf{u = v}\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Алиса и Боб играют в забавную игру на дереве. В эту игру играют на дереве из \(n\) вершин, пронумерованных от \(1\) до \(n\). Напомним, что дерево на \(n\) вершинах — это неориентированный связный граф с \(n - 1\) ребрами.

Алиса и Боб ходят по очереди, причём Алиса ходит первой. Каждый игрок начинает с какой-то вершины.

В свой ход игрок должен перейти из текущей вершины в соседнюю, которая ещё не была никем посещена до этого. Первый игрок, который не может сделать ход, проигрывает.

Вам даны две вершины \(u\) и \(v\). Представим простой путь из вершины \(u\) в \(v\) как массив \(p_1, p_2, p_3, \ldots, p_m\), где \(p_1 = u\), \(p_m = v\), между \(p_i\) и \(p_{i + 1}\) есть ребро для всех \(i\) (\(1 \le i < m\)).

Вы должны определить победителя игры, если Алиса начнёт в вершине \(1\), а Боб в вершине \(p_j\) для каждого \(j\) (где \(1 \le j \le m\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин дерева.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(a\), \(b\) (\(1 \le a, b \le n\)), обозначающих неориентированное ребро между вершинами \(a\) и \(b\). Гарантируется, что данные ребра образуют дерево.

Последняя строка каждого набора входных данных содержит два целых числа \(u\) и \(v\) (\(2 \le u, v \le n\), \(\mathbf{u = v}\)).

Гарантируется, что путь между \(u\) и \(v\) не проходит через вершину \(1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(m\) строк.

В \(i\)-й строке выведите победителя игры, если Алиса начинает с вершины \(1\), а Боб с вершины \(p_i\), выведите «Alice» (без кавычек), если выиграет Алиса, или «Bob» (без кавычек) в противном случае.

Примечание
Дерево из первого и второго примера.

В первом наборе входных данных путь будет иметь вид (\(2,2\)). Боб начинает в вершине \(2\), Алиса в своём первом ходу не сможет никуда пойти, и она проиграет.

Во втором наборе входных данных путь будет иметь вид (\(3,3\)). Боб начинает в вершине \(3\), Алиса переместится в вершину \(2\), и у Боба не останется вершин, которые можно посетить, и он проиграет.

F. Защита шерифа

Деревья дп жадные алгоритмы поиск в глубину и подобное *2000

"Почему, мастер," сказал Маленький Джон, беря мешки и взвешивая их в руке, "вот блеск золота."

Народный герой Робин Гуд сильно беспокоит шерифа Ноттингема. Шериф знает, что Робин Гуд собирается атаковать его лагеря, и он хочет быть готовым.

Шериф Ноттингема построил лагеря с учетом стратегии, и поэтому есть ровно \(n\) лагерей, пронумерованных от \(1\) до \(n\), и \(n-1\) троп, каждая из которых соединяет два лагеря. Любой лагерь можно достичь из любого другого лагеря. Каждый лагерь \(i\) изначально имеет \(a_i\) золота.

Шериф может укрепить лагерь, вычитая ровно \(c\) золота из каждого из его соседних лагерей и использовать это для строительства лучших защит для этого лагеря. Укрепление лагеря не изменяет его золото, только золото его соседей. Лагерь может иметь отрицательное количество золота.

После атаки Робина Гуда все лагеря, которые не были укреплены, будут уничтожены.

Какое максимальное количество золота шериф может сохранить в своих лагерях после атаки Робина Гуда, если он оптимально укрепляет свои лагеря?

Лагерь \(a\) является соседним лагерем \(b\), если и только если существует тропа, соединяющая \(a\) и \(b\). Только укрепленные лагеря учитываются в ответе, так как остальные будут уничтожены.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных начинается с двух целых чисел \(n\), \(c\) (\(1 \le n \le 2\cdot10^5, 1 \le c \le 10^9\)) — количество лагерей и золота, взимаемого с каждого соседнего лагеря для укрепления.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(-10^9 \le a_i \le 10^9\)) — начальное золото каждого лагеря.

Затем следуют \(n-1\) строк, каждая с целыми числами \(u\), \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — что означает, что существует тропа между \(u\) и \(v\).

Сумма \(n\) по всем наборам входных данных не превышает \(2\cdot10^5\).

Гарантируется, что любой лагерь достижим из любого другого лагеря.

Выходные данные

Выведите одно целое число, максимальное золото, которое шериф Ноттингема может сохранить в своих выживших лагерях после атаки Робина Гуда.

Примечание

В первом наборе входных данных оптимально укрепить второй лагерь. Конечное золото в каждом лагере составляет \([1,3,0]\).

Во втором наборе входных данных оптимально укрепить все лагеря. Конечное золото в каждом лагере составляет \([2,4,2]\).

В третьем наборе входных данных оптимально не укреплять ни один лагерь.

B. Сверхскорость

Бинарный поиск дп жадные алгоритмы реализация Структуры данных *1900

В ряд стоят \(n\) городов, пронумерованных \(1, 2, \ldots, n\) слева направо.

  • В момент времени \(1\) вы захватываете ровно один город, называемый начальным городом.
  • В моменты времени \(2, 3, \ldots, n\) вы можете выбрать город, соседний с уже захваченным, и захватить его.

Вы выиграете, если для каждого \(i\) вы захватите город \(i\) в момент времени не позже, чем \(a_i\). Выигрышная стратегия может существовать, а может и не существовать, в том числе в зависимости от стартового города. Сколько стартовых городов позволяют вам выиграть?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество городов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — сроки завоевания городов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: количество стартовых городов, которые позволяют вам выиграть.

Примечание

В первом наборе входных данных города \(2\), \(3\) и \(4\) являются подходящими стартовыми городами.

Во втором наборе входных данных нет подходящих стартовых городов.

В третьем наборе входных данных единственным подходящим стартовым городом является город \(5\).

D. Максимум + минимум + количество

дп жадные алгоритмы матрицы реализация снм сортировки Структуры данных *2200

Дан массив целых положительных чисел \(a_1, a_2, \ldots, a_n\).

Вы можете раскрасить некоторые элементы массива в красный цвет, но при этом в нем не должно оказаться двух соседних красных элементов (т.е. для \(1 \leq i \leq n-1\) хотя бы один из \(a_i\) и \(a_{i+1}\) должен не быть красным).

Ваш счет — это максимальное значение красного элемента, плюс минимальное значение красного элемента, плюс количество красных элементов. Найдите максимальный счет, который вы можете получить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — заданный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимально возможный счет, который можно получить, раскрасив некоторые элементы в красный цвет в соответствии с условием.

Примечание

В первом наборе входных данных вы можете раскрасить массив следующим образом: \([\color{red}{5}, 4, \color{red}{5}]\). Ваш счет составит \(\max([5, 5]) + \min([5, 5]) + \text{size}([5, 5]) = 5+5+2 = 12\). Это максимальный счет, который вы можете получить.

Во втором наборе входных данных вы можете раскрасить массив следующим образом: \([4, \color{red}{5}, 4]\). Ваш счет составит \(\max([5]) + \min([5]) + \text{size}([5]) = 5+5+1 = 11\). Это максимальный счет, который вы можете получить.

В третьем наборе входных данных вы можете раскрасить массив следующим образом: \([\color{red}{3}, 3, \color{red}{3}, 3, \color{red}{4}, 1, 2, \color{red}{3}, 5, \color{red}{4}]\). Ваш счет составит \(\max([3, 3, 4, 3, 4]) + \min([3, 3, 4, 3, 4]) + \text{size}([3, 3, 4, 3, 4]) = 4+3+5 = 12\). Это максимальный счет, который вы можете получить.

F1. Сверхскоростной подсчёт (простая версия)

дп жадные алгоритмы Комбинаторика математика *2900

Это простая версия задачи. В трех версиях ограничения на \(n\) и ограничение по времени отличаются. Вы можете совершать взломы только в том случае, если решены все версии задачи.

Это условие задачи D1B:

  • В ряд стоят \(n\) городов, пронумерованных \(1, 2, \ldots, n\) слева направо.
    • В момент времени \(1\) вы захватываете ровно один город, называемый начальным городом.
    • В моменты времени \(2, 3, \ldots, n\) вы можете выбрать город, соседний с уже захваченным, и захватить его.

    Вы выиграете, если для каждого \(i\) вы захватите город \(i\) в момент времени не позже, чем \(a_i\). Выигрышная стратегия может существовать, а может и не существовать, в том числе в зависимости от стартового города. Сколько стартовых городов позволяют вам выиграть?

Для каждого \(0 \leq k \leq n\) подсчитайте количество массивов целых положительных чисел \(a_1, a_2, \ldots, a_n\) таких, что

  • \(1 \leq a_i \leq n\) для каждого \(1 \leq i \leq n\);
  • ответом на задачу D1B будет \(k\).

Ответ может быть очень большим, поэтому вы должны вычислить его по модулю заданного простого числа \(p\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 80\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\), \(p\) (\(1 \le n \le 80\), \(10^8 \leq p \leq 10^9\), \(p\) — простое) — количество городов и модуль.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(80\).

Выходные данные

Для каждого набора входных данных выведите \(n+1\) целых чисел: \(i\)-е целое число должно равняться количеству массивов, удовлетворяющих условиям для \(k = i-1\).

Примечание

В первом наборе входных данных,

  • массивы с \(1\) хорошим начальным городом: \([1]\).

Во втором наборе входных данных,

  • массивы с \(0\) хорошими начальными городами: \([1, 1]\);
  • массивы с \(1\) хорошим начальным городом: \([1, 2]\), \([2, 1]\);
  • массивы с \(2\) хорошими начальными городами: \([2, 2]\).

В третьем наборе входных данных,

  • массивы с \(0\) хороших начальных городов: \([1, 1, 1]\), \([1, 1, 2]\), \([1, 1, 3]\), \([1, 2, 1]\), \([1, 2, 2]\), \([1, 3, 1]\), \([1, 3, 2]\), \([2, 1, 1]\), \([2, 1, 2]\), \([2, 2, 1]\), \([2, 2, 2]\), \([2, 3, 1]\), \([2, 3, 2]\), \([3, 1, 1]\);
  • массивы с \(1\) хорошим начальным городом: \([1, 2, 3]\), \([1, 3, 3]\), \([2, 1, 3]\), \([3, 1, 2]\), \([3, 1, 3]\), \([3, 2, 1]\), \([3, 3, 1]\);
  • массивы с \(2\) хорошими начальными городами: \([2, 2, 3]\), \([2, 3, 3]\), \([3, 2, 2]\), \([3, 3, 2]\);
  • массивы с \(3\) хорошими начальными городами: \([3, 2, 3]\), \([3, 3, 3]\).

F2. Сверхскоростной подсчёт (средняя версия)

дп жадные алгоритмы математика *3000

Это средняя версия задачи. В трёх версиях ограничения на \(n\) и ограничение по времени отличаются. Вы можете совершать взломы только в том случае, если решены все версии задачи.

Это условие задачи D1B:

  • В ряд стоят \(n\) городов, пронумерованных \(1, 2, \ldots, n\) слева направо.
    • В момент времени \(1\) вы захватываете ровно один город, называемый начальным городом.
    • В моменты времени \(2, 3, \ldots, n\) вы можете выбрать город, соседний с уже захваченным, и захватить его.

    Вы выиграете, если для каждого \(i\) вы захватите город \(i\) в момент времени не позже, чем \(a_i\). Выигрышная стратегия может существовать, а может и не существовать, в том числе в зависимости от стартового города. Сколько стартовых городов позволяют вам выиграть?

Для каждого \(0 \leq k \leq n\) подсчитайте количество массивов целых положительных чисел \(a_1, a_2, \ldots, a_n\) таких, что

  • \(1 \leq a_i \leq n\) для каждого \(1 \leq i \leq n\);
  • ответом на задачу D1B будет \(k\).

Ответ может быть очень большим, поэтому вы должны вычислить его по модулю заданного простого числа \(p\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\), \(p\) (\(1 \le n \le 500\), \(10^8 \leq p \leq 10^9\), \(p\) — простое) — количество городов и модуль.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите \(n+1\) целых чисел: \(i\)-е целое число должно равняться количеству массивов, удовлетворяющих условиям для \(k = i-1\).

Примечание

В первом наборе входных данных,

  • массивы с \(1\) хорошим начальным городом: \([1]\).

Во втором наборе входных данных,

  • массивы с \(0\) хорошими начальными городами: \([1, 1]\);
  • массивы с \(1\) хорошим начальным городом: \([1, 2]\), \([2, 1]\);
  • массивы с \(2\) хорошими начальными городами: \([2, 2]\).

В третьем наборе входных данных,

  • массивы с \(0\) хороших начальных городов: \([1, 1, 1]\), \([1, 1, 2]\), \([1, 1, 3]\), \([1, 2, 1]\), \([1, 2, 2]\), \([1, 3, 1]\), \([1, 3, 2]\), \([2, 1, 1]\), \([2, 1, 2]\), \([2, 2, 1]\), \([2, 2, 2]\), \([2, 3, 1]\), \([2, 3, 2]\), \([3, 1, 1]\);
  • массивы с \(1\) хорошим начальным городом: \([1, 2, 3]\), \([1, 3, 3]\), \([2, 1, 3]\), \([3, 1, 2]\), \([3, 1, 3]\), \([3, 2, 1]\), \([3, 3, 1]\);
  • массивы с \(2\) хорошими начальными городами: \([2, 2, 3]\), \([2, 3, 3]\), \([3, 2, 2]\), \([3, 3, 2]\);
  • массивы с \(3\) хорошими начальными городами: \([3, 2, 3]\), \([3, 3, 3]\).

F3. Сверхскоростной подсчёт (сложная версия)

дп жадные алгоритмы математика *3100

Это сложная версия задачи. В трёх версиях ограничения на \(n\) и ограничение по времени отличаются. Вы можете совершать взломы только в том случае, если решены все версии задачи.

Это условие задачи D1B:

  • В ряд стоят \(n\) городов, пронумерованных \(1, 2, \ldots, n\) слева направо.
    • В момент времени \(1\) вы захватываете ровно один город, называемый начальным городом.
    • В моменты времени \(2, 3, \ldots, n\) вы можете выбрать город, соседний с уже захваченным, и захватить его.

    Вы выиграете, если для каждого \(i\) вы захватите город \(i\) в момент времени не позже, чем \(a_i\). Выигрышная стратегия может существовать, а может и не существовать, в том числе в зависимости от стартового города. Сколько стартовых городов позволяют вам выиграть?

Для каждого \(0 \leq k \leq n\) подсчитайте количество массивов целых положительных чисел \(a_1, a_2, \ldots, a_n\) таких, что

  • \(1 \leq a_i \leq n\) для каждого \(1 \leq i \leq n\);
  • ответом на задачу D1B будет \(k\).

Ответ может быть очень большим, поэтому вы должны вычислить его по модулю заданного простого числа \(p\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 3000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\), \(p\) (\(1 \le n \le 3000\), \(10^8 \leq p \leq 10^9\), \(p\) — простое) — количество городов и модуль.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных выведите \(n+1\) целых чисел: \(i\)-е целое число должно равняться количеству массивов, удовлетворяющих условиям для \(k = i-1\).

Примечание

В первом наборе входных данных,

  • массивы с \(1\) хорошим начальным городом: \([1]\).

Во втором наборе входных данных,

  • массивы с \(0\) хорошими начальными городами: \([1, 1]\);
  • массивы с \(1\) хорошим начальным городом: \([1, 2]\), \([2, 1]\);
  • массивы с \(2\) хорошими начальными городами: \([2, 2]\).

В третьем наборе входных данных,

  • массивы с \(0\) хороших начальных городов: \([1, 1, 1]\), \([1, 1, 2]\), \([1, 1, 3]\), \([1, 2, 1]\), \([1, 2, 2]\), \([1, 3, 1]\), \([1, 3, 2]\), \([2, 1, 1]\), \([2, 1, 2]\), \([2, 2, 1]\), \([2, 2, 2]\), \([2, 3, 1]\), \([2, 3, 2]\), \([3, 1, 1]\);
  • массивы с \(1\) хорошим начальным городом: \([1, 2, 3]\), \([1, 3, 3]\), \([2, 1, 3]\), \([3, 1, 2]\), \([3, 1, 3]\), \([3, 2, 1]\), \([3, 3, 1]\);
  • массивы с \(2\) хорошими начальными городами: \([2, 2, 3]\), \([2, 3, 3]\), \([3, 2, 2]\), \([3, 3, 2]\);
  • массивы с \(3\) хорошими начальными городами: \([3, 2, 3]\), \([3, 3, 3]\).

A. Максимум + количество

дп жадные алгоритмы Перебор *800

Дан массив целых положительных чисел \(a_1, a_2, \ldots, a_n\).

Вы можете раскрасить некоторые элементы массива в красный цвет, но при этом в нем не должно оказаться двух соседних красных элементов (т.е. для \(1 \leq i \leq n-1\) хотя бы один из \(a_i\) и \(a_{i+1}\) должен не быть красным).

Ваш счет — это максимальное значение красного элемента плюс количество красных элементов. Найдите максимальный счет, который вы можете получить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 1000\)) — заданный массив.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный счет, который можно получить, раскрасив некоторые элементы в красный цвет в соответствии с условием.

Примечание

В первом наборе входных данных вы можете раскрасить массив следующим образом: \([\color{red}{5}, 4, \color{red}{5}]\). Ваш счет составит \(\max([5, 5]) + \text{size}([5, 5]) = 5+2 = 7\). Это максимальный счет, который вы можете получить.

Во втором наборе входных данных вы можете раскрасить массив следующим образом: \([\color{red}{4}, 5, \color{red}{4}]\). Ваш счет составит \(\max([4, 4]) + \text{size}([4, 4]) = 4+2 = 6\). Это максимальный счет, который вы можете получить.

В третьем наборе входных данных вы можете раскрасить массив следующим образом: \([\color{red}{3}, 3, \color{red}{3}, 3, \color{red}{4}, 1, 2, \color{red}{3}, 4, \color{red}{5}]\). Ваш счет составит \(\max([3, 3, 4, 3, 5]) + \text{size}([3, 3, 4, 3, 5]) = 5+5 = 10\). Это максимальный счет, который вы можете получить.

D. Соедини точки

графы Деревья дп математика Перебор снм *1800

Одним уютным вечером Алиса решила сыграть в классическую игру «Соедини точки», но с подвохом.

Чтобы начать игру, Алиса рисует прямую линию и отмечает на ней \(n\) точек, проиндексированных числами от \(1\) до \(n\). Изначально между точками нет рёбер, так что все они попарно не соединены. Затем Алиса выполняет \(m\) операций следующего типа:

  • Она выбирает три целых числа \(a_i\), \(d_i\) (\(1 \le d_i \le 10\)) и \(k_i\).
  • Затем для точек \(a_i, a_i+d_i, a_i+2d_i, a_i+3d_i, \ldots, a_i+k_i\cdot d_i\) Алиса соединяет ребром каждую пару из них.

Алиса хочет узнать, сколько компонент связности\(^\dagger\) образуют эти точки после выполнения всех \(m\) операций.

\(^\dagger\) Считается, что две точки лежат в одной компоненте связности, если между ними есть путь, использующий несколько (возможно, ноль) промежуточных рёбер и вершин.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le 2 \cdot 10^5\)).

В \(i\)-й из следующих \(m\) строк содержится три целых числа \(a_i\), \(d_i\) и \(k_i\) (\(1 \le a_i \le a_i + k_i\cdot d_i \le n\), \(1 \le d_i \le 10\), \(0 \le k_i \le n\)).

Гарантируется, что сумма значений \(n\), а также сумма значений \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\) каждая.

Выходные данные

Для каждого набора входных данных выведите количество компонент связности.

Примечание

В первом наборе входных данных есть \(n = 10\) точек. Первая операция соединяет точки \(1\), \(3\), \(5\), \(7\) и \(9\). Вторая операция соединяет точки \(2\), \(4\), \(6\), \(8\) и \(10\). В итоге получаем две компоненты связности: \(\{1, 3, 5, 7, 9\}\) и \(\{2, 4, 6, 8, 10\}\).

Во втором наборе входных данных есть \(n = 100\) точек. Единственная операция соединяет точки \(19\), \(21\), \(23\), \(25\) и \(27\). Теперь они образуют одну компоненту связности размера \(5\). Остальные \(95\) точек ни с кем не соединены, так что каждая из них образует отдельную компоненту связности. Значит, ответ равен \(1 + 95 = 96\).

В третьем наборе входных данных есть \(n = 100\) точек. После выполнения всех операций все точки с нечётными номерами от \(1\) до \(79\) образуют одну компоненту связности размера \(40\). Остальные \(60\) точек ни с кем не соединены, так что каждая из них образует отдельную компоненту связности. Значит, ответ равен \(1 + 60 = 61\).

E. Матожидание квадрата

битмаски дп математика Теория вероятностей *2000

Дан массив, состоящий из \(n\) целых чисел \(a_1,a_2,\ldots,a_n\). Также дан массив \(p_1, p_2, \ldots, p_n\).

Через \(S\) обозначим случайное мультимножество (т. е. оно может содержать равные элементы), которое строится следующим образом:

  • Изначально \(S\) пусто.
  • Для каждого \(i\) от \(1\) до \(n\) добавить \(a_i\) в \(S\) с вероятностью \(\frac{p_i}{10^4}\). Обратите внимание, что каждый элемент добавляется независимо.

Пусть \(f(S)\) равно результату применения побитового исключающего ИЛИ ко всем элементам \(S\). Найдите математическое ожидание величины \((f(S))^2\). Выведите ответ по модулю \(10^9 + 7\).

Формально, пусть \(M = 10^9 + 7\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 1023\)).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(p_1,p_2,\ldots,p_n\) (\(1 \le p_i \le 10^4\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите математическое ожидание \((f(S))^2\) по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных \(a = [1, 2]\), и каждый элемент добавляется в \(S\) с вероятностью \(\frac{1}{2}\), поскольку \(p_1 = p_2 = 5000\) и \(\frac{p_i}{10^4} = \frac{1}{2}\). Поэтому есть всего \(4\) возможных исхода для \(S\), каждый из которых получается с вероятностью \(\frac{1}{4}\):

  • \(S = \varnothing\). В этом случае \(f(S) = 0\), \((f(S))^2 = 0\).
  • \(S = \{1\}\). В этом случае \(f(S) = 1\), \((f(S))^2 = 1\).
  • \(S = \{2\}\). В этом случае \(f(S) = 2\), \((f(S))^2 = 4\).
  • \(S = \{1,2\}\). В этом случае \(f(S) = 1 \oplus 2 = 3\), \((f(S))^2 = 9\).

Значит, ответ равен \(0 \cdot \frac{1}{4} + 1 \cdot \frac{1}{4} + 4\cdot \frac{1}{4} + 9 \cdot \frac{1}{4} = \frac{14}{4} = \frac{7}{2} \equiv 500\,000\,007 \pmod{10^9 + 7}\).

Во втором наборе входных данных \(a = [1, 1]\), \(a_1\) добавляется в \(S\) с вероятностью \(0.1\), а \(a_2\) добавляется в \(S\) с вероятностью \(0.2\). Есть всего \(3\) исхода для \(S\):

  • \(S = \varnothing\). В этом случае \(f(S) = 0\), \((f(S))^2 = 0\). Это происходит с вероятностью \((1-0.1) \cdot (1-0.2) = 0.72\).
  • \(S = \{1\}\). В этом случае \(f(S) = 1\), \((f(S))^2 = 1\). Это происходит с вероятностью \((1-0.1) \cdot 0.2 + 0.1 \cdot (1-0.2) = 0.26\).
  • \(S = \{1, 1\}\). В этом случае \(f(S) = 0\), \((f(S))^2 = 0\). Это происходит с вероятностью \(0.1 \cdot 0.2 = 0.02\).

Значит, ответ равен \(0 \cdot 0.72 + 1 \cdot 0.26 + 0 \cdot 0.02 = 0.26 = \frac{26}{100} \equiv 820\,000\,006 \pmod{10^9 + 7}\).

F. Число листьев

дп математика теория чисел *2900

Пусть \(n\) и \(d\) — положительные целые числа. Построим дерево делителей \(T_{n,d}\) следующим образом:

  • Корень дерева — вершина, в которой записано число \(n\). Она образует \(0\)-й уровень дерева.
  • Для каждого \(i\) от \(0\) до \(d - 1\), для каждой вершины на \(i\)-м уровне, сделаем следующее. Если в текущей вершине записано число \(x\), то нужно создать её детей и записать в них все возможные различные делители\(^\dagger\) числа \(x\). Эти дети будут находиться уже на \((i+1)\)-м уровне.
  • Вершины на \(d\)-м уровне являются листьями дерева.

Например, дерево \(T_{6,2}\) (дерево делителей для \(n = 6\) и \(d = 2\)) выглядит так:

Через \(f(n,d)\) обозначим число листьев в \(T_{n,d}\).

По заданным \(n\), \(k\) и \(d\), найдите \(\sum\limits_{i=1}^{n} f(i^k,d)\), по модулю \(10^9+7\).

\(^\dagger\) В этой задаче мы считаем, что целое число \(y\) является делителем числа \(x\), если \(y \ge 1\) и существует целое \(z\), такое что \(x = y \cdot z\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(d\) (\(1 \le n \le 10^9\), \(1 \le k,d \le 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^9\).

Выходные данные

Для каждого набора входных данных выведите \(\sum\limits_{i=1}^{n} f(i^k,d)\), по модулю \(10^9+7\).

Примечание

В первом наборе входных данных \(n = 6\), \(k = 1\), \(d = 1\). Значит, нам нужно найти суммарное количество листьев во всех следующих деревьях: \(T_{1,1}\), \(T_{2,1}\), \(T_{3,1}\), \(T_{4,1}\), \(T_{5,1}\), \(T_{6,1}\).

  • В \(T_{1,1}\) есть только один лист, в котором записано число \(1\).
  • В \(T_{2,1}\) есть два листа, в них записаны числа \(1\) и \(2\).
  • В \(T_{3,1}\) есть два листа, в них записаны числа \(1\) и \(3\).
  • В \(T_{4,1}\) есть три листа, в них записаны числа \(1\), \(2\) и \(4\).
  • В \(T_{5,1}\) есть два листа, в них записаны числа \(1\) и \(5\).
  • В \(T_{6,1}\) есть четыре листа, в них записаны числа \(1\), \(2\), \(3\) и \(6\).

Суммарное число листьев равно \(1 + 2 + 2 + 3 + 2 + 4 = 14\).

Во втором наборе входных данных \(n = 1\), \(k = 3\), \(d = 3\). Значит, нам нужно найти количество листьев в дереве \(T_{1,3}\), поскольку \(1^3 = 1\). В этом дереве всего один лист, так что ответ равен \(1\).

D. Я хочу пить, босс

дп жадные алгоритмы реализация *2500

У Пака Чанека есть друг, который владеет киоском с напитками в столовой. Его друг продает напитки в течение \(n\) дней, начиная с дня \(1\) и заканчивая днем \(n\). Существует \(m\) видов напитков, пронумерованных от \(1\) до \(m\).

Прибыль от продажи напитка в конкретный день может быть разной. В день \(i\) прогнозируемая прибыль от продажи напитка типа \(j\) равна \(A_{i, j}\). Обратите внимание, что \(A_{i, j}\) может быть отрицательной, то есть продажа напитка фактически приведет к убыткам.

Пак Чанек хочет помочь своему другу спланировать продажи на \(n\) дней. В день \(i\) Пак Чанек должен выбрать для продажи как минимум один тип напитка. Более того, типы напитков, продаваемых в один день, должны образовывать подотрезок. Другими словами, в каждый день Пак Чанек будет выбирать \(i\) и \(j\) так, что \(1 \leq i \leq j \leq m\). Тогда будут проданы все виды напитков от \(i\) до \(j\) (включительно).

Однако для того, чтобы клиенты с предыдущего дня продолжали возвращаться, выбор типов напитков, проданных в день \(i\) (\(i>1\)), должен удовлетворять следующим условиям:

  • Хотя бы один тип напитка, проданный в день \(i\), должен быть продан и в день \(i-1\).
  • Хотя бы один тип напитка, проданный в день \(i\), должен не быть продан в день \(i-1\).

Дневная прибыль — это сумма прибылей от всех типов напитков, проданных в этот день. Общая прибыль по плану продаж — это сумма прибылей за \(n\) дней. Какую максимальную общую прибыль можно получить, если Пак Чанек оптимально спланирует продажи?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\); \(3 \leq m \leq 2 \cdot 10^5\); \(n \cdot m \leq 2 \cdot 10^5\)) — количество строк и столбцов в таблице.

Следующие \(n\) строк каждого набора входных данных содержат по \(m\) целых чисел, где \(i\)-я строка содержит целые числа \(A_{i,1} A_{i,2}, \ldots, A_{i,m}\) (\(-10^9 \leq A_{i,j} \leq 10^9\)) — прибыль каждого типа напитков в \(i\)-й день.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: максимальную прибыль, которую может получить Пак Чанек.

Примечание

Оптимальный план Пак Чанека:

  • В день \(1\) Пак Чанек продаст напитки с \(1\) по \(3\). Прибыль составит \(79+20+49 = 148\).
  • В день \(2\) Пак Чанек продаст напитки с \(2\) по \(4\). Прибыль составит \(9+109+24 = 142\).
  • В день \(3\) Пак Чанек продаст напитки с \(1\) по \(6\). Прибыль составит \(185\).

Таким образом, общая прибыль плана Пак Чанека составит \(148 + 142 + 185 = 475\).

E1. Цифровая деревня (простая версия)

бпф графы Деревья дп жадные алгоритмы математика Перебор поиск в глубину и подобное реализация снм Структуры данных *2300

Это простая версия задачи. В трех версиях отличаются ограничения на \(n\) и \(m\). Вы можете совершать взломы только в том случае, если решены все версии задачи.

Пак Чанек устанавливает интернет-связь в деревне Кхунтиен. Деревню можно представить как связный простой граф с \(n\) домами и \(m\) интернет-кабелями, соединяющими дом \(u_i\) и дом \(v_i\), каждый с задержкой \(w_i\).

Существует \(p\) домов, которым требуется интернет. Пак Чанек может установить серверы не более чем в \(k\) домов. Дома, которым нужен интернет, будут подключены к одному из серверов. Однако, поскольку каждый кабель имеет свою задержку, задержка, которую испытывает дом \(s_i\), нуждающийся в интернете, будет равна максимальной задержке кабелей между этим домом и сервером, к которому он подключен.

Для каждого \(k = 1,2,\ldots,n\), помогите Пак Чанеку определить минимальную суммарную задержку, которая может быть достигнута для всех домов, требующих интернет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(p\) (\(2 \le n \le 400\); \(n-1 \le m \le 400\); \(1 \le p \le n\)) — количество домов, количество кабелей и количество домов, которым нужен интернет.

Вторая строка каждого набора входных данных содержит \(p\) целых чисел \(s_1, s_2, \ldots, s_p\) (\(1 \le s_i \le n\)) — номера домов, которым нужен интернет. Гарантируется, что все элементы \(s\) различны.

В \(i\)-й из следующих \(m\) строк каждого набора входных данных содержатся три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i < v_i \le n\); \(1 \le w_i \le 10^9\)) — интернет-кабель, соединяющий дом \(u_i\) и дом \(v_i\) с задержкой \(w_i\). Гарантируется, что заданные ребра образуют простой связный граф.

Гарантируется, что сумма \(n^3\) и сумма \(m^3\) не превосходят \(10^8\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел: минимальное общее время ожидания, которое может быть достигнуто для всех домов, нуждающихся в интернете для каждого \(k = 1,2,\ldots,n\).

Примечание

В первом наборе входных данных для \(k=3\) одним из лучших решений является установка серверов в вершинах \(2\), \(6\) и \(8\) и получение следующей задержки:

  • задержка\((2) = 0\)
  • задержка\((5) = \max(3, 5) = 5\)
  • задержка\((6) = 0\)
  • задержка\((8) = 0\)
  • задержка\((9) = \max(2, 4) = 4\)

Таким образом, общая задержка составит \(9\).

E2. Цифровая деревня (сложная версия)

графы Деревья дп математика снм Структуры данных *2500

Это сложная версия задачи. В трех версиях отличаются ограничения на \(n\) и \(m\). Вы можете совершать взломы только в том случае, если решены все версии задачи.

Пак Чанек устанавливает интернет-связь в деревне Кхунтиен. Деревню можно представить как связный простой граф с \(n\) домами и \(m\) интернет-кабелями, соединяющими дом \(u_i\) и дом \(v_i\), каждый с задержкой \(w_i\).

Существует \(p\) домов, которым требуется интернет. Пак Чанек может установить серверы не более чем в \(k\) домов. Дома, которым нужен интернет, будут подключены к одному из серверов. Однако, поскольку каждый кабель имеет свою задержку, задержка, которую испытывает дом \(s_i\), нуждающийся в интернете, будет равна максимальной задержке кабелей между этим домом и сервером, к которому он подключен.

Для каждого \(k = 1,2,\ldots,n\), помогите Пак Чанеку определить минимальную суммарную задержку, которая может быть достигнута для всех домов, требующих интернет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(p\) (\(2 \le n \le 5000\); \(n-1 \le m \le 5000\); \(1 \le p \le n\)) — количество домов, количество кабелей и количество домов, которым нужен интернет.

Вторая строка каждого набора входных данных содержит \(p\) целых чисел \(s_1, s_2, \ldots, s_p\) (\(1 \le s_i \le n\)) — номера домов, которым нужен интернет. Гарантируется, что все элементы \(s\) различны.

В \(i\)-й из следующих \(m\) строк каждого набора входных данных содержатся три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i < v_i \le n\); \(1 \le w_i \le 10^9\)) — интернет-кабель, соединяющий дом \(u_i\) и дом \(v_i\) с задержкой \(w_i\). Гарантируется, что заданные ребра образуют простой связный граф.

Гарантируется, что сумма \(n\) и сумма \(m\) не превосходят \(5000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел: минимальное общее время ожидания, которое может быть достигнуто для всех домов, нуждающихся в интернете для каждого \(k = 1,2,\ldots,n\).

Примечание

В первом наборе входных данных для \(k=3\) одним из лучших решений является установка серверов в вершинах \(2\), \(6\) и \(8\) и получение следующей задержки:

  • задержка\((2) = 0\)
  • задержка\((5) = \max(3, 5) = 5\)
  • задержка\((6) = 0\)
  • задержка\((8) = 0\)
  • задержка\((9) = \max(2, 4) = 4\)

Таким образом, общая задержка составит \(9\).

E3. Цифровая деревня (экстремальная версия)

графы Деревья дп жадные алгоритмы математика поиск в глубину и подобное снм Структуры данных *2800

Это экстремальная версия задачи. В трех версиях отличаются ограничения на \(n\) и \(m\). Вы можете совершать взломы только в том случае, если решены все версии задачи.

Пак Чанек устанавливает интернет-связь в деревне Кхунтиен. Деревню можно представить как связный простой граф с \(n\) домами и \(m\) интернет-кабелями, соединяющими дом \(u_i\) и дом \(v_i\), каждый с задержкой \(w_i\).

Существует \(p\) домов, которым требуется интернет. Пак Чанек может установить серверы не более чем в \(k\) домов. Дома, которым нужен интернет, будут подключены к одному из серверов. Однако, поскольку каждый кабель имеет свою задержку, задержка, которую испытывает дом \(s_i\), нуждающийся в интернете, будет равна максимальной задержке кабелей между этим домом и сервером, к которому он подключен.

Для каждого \(k = 1,2,\ldots,n\), помогите Пак Чанеку определить минимальную суммарную задержку, которая может быть достигнута для всех домов, требующих интернет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(p\) (\(2 \le n \le 2 \cdot 10^5\); \(n-1 \le m \le 2 \cdot 10^5\); \(1 \le p \le n\)) — количество домов, количество кабелей и количество домов, которым нужен интернет.

Вторая строка каждого набора входных данных содержит \(p\) целых чисел \(s_1, s_2, \ldots, s_p\) (\(1 \le s_i \le n\)) — номера домов, которым нужен интернет. Гарантируется, что все элементы \(s\) различны.

В \(i\)-й из следующих \(m\) строк каждого набора входных данных содержатся три целых числа \(u_i\), \(v_i\) и \(w_i\) (\(1 \le u_i < v_i \le n\); \(1 \le w_i \le 10^9\)) — интернет-кабель, соединяющий дом \(u_i\) и дом \(v_i\) с задержкой \(w_i\). Гарантируется, что заданные ребра образуют простой связный граф.

Гарантируется, что сумма \(n\) и сумма \(m\) не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел: минимальное общее время ожидания, которое может быть достигнуто для всех домов, нуждающихся в интернете для каждого \(k = 1,2,\ldots,n\).

Примечание

В первом наборе входных данных для \(k=3\) одним из лучших решений является установка серверов в вершинах \(2\), \(6\) и \(8\) и получение следующей задержки:

  • задержка\((2) = 0\)
  • задержка\((5) = \max(3, 5) = 5\)
  • задержка\((6) = 0\)
  • задержка\((8) = 0\)
  • задержка\((9) = \max(2, 4) = 4\)

Таким образом, общая задержка составит \(9\).

C. Джерримендеринг

дп реализация *1800

Все мы понемногу воруем. Но у меня только одна рука, а у моих противников — две.
Álvaro Obregón, бывший президент Мексики

Альваро и Хосе — единственные кандидаты, претендующие на пост президента Тепито — прямоугольной сетки из \(2\) строк и \(n\) столбцов, где каждая клетка представляет собой дом. Гарантируется, что \(n\) кратно \(3\).

Согласно системе голосования Тепито, сетка будет разбита на округа, состоящие из любых \(3\) домов, которые связаны между собой\(^{\text{∗}}\). Каждый дом будет принадлежать ровно одному округу.

Каждый округ будет голосовать один раз. Округ будет голосовать за Альваро или Хосе соответственно, если их выберут не менее \(2\) домов в этом округе. Таким образом, всего будет подано \(\frac{2n}{3}\) голосов.

Поскольку Альваро является действующим президентом, он точно знает, какого кандидата выберет каждый дом. Определите максимальное количество голосов, которое Альваро может получить, если он оптимально распределит дома по округам.

\(^{\text{∗}}\)Набор клеток является связанным, если между любыми \(2\) клетками существует путь, который требует только перемещения вверх, вниз, влево и вправо по клеткам набора.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 10^5\); \(n\) кратно \(3\)) — количество столбцов в Тепито.

В следующих двух строках содержится по строке длины \(n\). В \(i\)-й строке содержится строка \(s_i\), состоящая из символов \(\texttt{A}\) и \(\texttt{J}\). Если \(s_{i,j}=\texttt{A}\), то дом на пересечении \(i\)-й строки и \(j\)-го столбца выберет Альваро. В противном случае, если \(s_{i,j}=\texttt{J}\), дом проголосует за Хосе.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество округов, которое может выиграть Альваро, оптимально разделив дома на округа.

Примечание

На изображении ниже показано оптимальное разбиение на округа, которое Альваро может использовать для каждого набора входных данных в примере.

D2. Ассасин (сложная версия)

дп интерактив Конструктив *2700

Это сложная версия задачи. В этой версии вы должны использовать минимально возможное количество запросов. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Это интерактивная задача.

На сборах сборной Мексики к IOI существует традиция играть в игру «Ассасин», которая похожа на «Among Us» или «Мафию».

Сегодня \(n\) игроков, пронумерованных от \(1\) до \(n\), будут играть в «Ассасин» со следующими тремя ролями:

  • Рыцарь: Рыцарь — это тот, кто всегда говорит правду.
  • Лжец: Лжец — это тот, кто всегда лжет.
  • Предатель: Предатель — это тот, кого все считают Рыцарем, а на самом деле он Лжец.

Каждому игроку будет назначена своя роль в игре. В игре будет ровно один Предатель, но может быть любое (возможно нулевое) количество Рыцарей и Лжецов.

Вы были ведущим игры, но случайно забыли роли всех игроков, поэтому вам нужно определить игрока, который является Предателем.

Чтобы определить Предателя, вы зададите несколько вопросов. В каждом вопросе вы выбираете двух игроков \(i\) и \(j\) (\(1 \leq i, j \leq n\); \(i \neq j\)) и спрашиваете, считает ли игрок \(i\), что игрок \(j\) — Рыцарь. Результаты этого вопроса приведены в таблице ниже.

РыцарьЛжецПредатель
РыцарьДаНетДа
ЛжецНетДаНет
ПредательНетДа
Значение ячейки в строке \(a\) и столбце \(b\) — это ответ на вопрос, когда \(i\) имеет роль \(a\), а \(j\) — роль \(b\). Например, «Да» в правой верхней ячейке принадлежит строке «Рыцарь» и столбцу «Предатель», поэтому это ответ на вопрос, когда \(i\) — Рыцарь, а \(j\) — Предатель.

Найти Предателя за минимально возможное количество запросов. Иными словами, пусть \(f(n)\) — минимальное число, такое, что для \(n\) игроков существует стратегия, позволяющая определить Предателя, используя не более \(f(n)\) вопросов. Тогда для определения Предателя нужно использовать не более \(f(n)\) вопросов.

Заметьте, что итерактор адаптивен: роли игроков не фиксированы изначально и могут меняться в зависимости от ваших вопросов. Однако гарантируется, что существует такое распределение ролей, которое соответствует всем ранее заданным вопросам в ограничениях этой задачи.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 10^5\)) — количество людей, играющих в игру.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Протокол взаимодействия

Чтобы задать вопрос, выведите строку в следующем формате:

  • «? i j» (\(1 \leq i,j \leq n\); \(i \neq j\)) — спросить игрока \(i\), считает ли он игрока \(j\) Рыцарем.

Жюри выдаст «1», если игрок \(i\) считает игрока \(j\) Рыцарем, и «0» в противном случае.

Когда вы определите, какой игрок является Предателем, выведите строку в следующем формате:

  • «! i» (\(1 \leq i \leq n\)) — Предателем является игрок \(i\).

Обратите внимание, что ответы не учитываются в ограничении в \(f(n)\) вопросов.

Если вы сделали некорректный вывод, использовали более \(f(n)\) вопросов или неверно определили Предателя, жюри ответит «-1», и вы получите вердикт Неправильный ответ. Получив «-1», ваша программа должна немедленно завершиться. В противном случае вы можете получить произвольный вердикт, поскольку ваше решение продолжит чтение из закрытого потока.

После каждого вывода не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • sys.stdout.flush() в Python;
  • std::io::stdout().flush() в Rust;
  • смотрите документацию для других языков.

Формат взломов

Для взломов используйте следующий формат.

Первая строка должна содержать одно целое число \(t\) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать целое число \(n\), за которым следует строка «manual».

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-1 \le a_i \le 1\)) — роли каждого игрока. \(1\) обозначает Рыцаря, \(0\) — Лжеца, а \(-1\) — Предателя. Предатель должен быть ровно один, то есть должен быть ровно один индекс \(i\) такой, что \(a_i=-1\).

В качестве примера приводим взлом, аналогичный примеру из условия:

2
7 manual
0 1 0 -1 0 1 0
4 manual
0 1 -1 0
Примечание

Обратите внимание, что примеры не представляют собой оптимальную стратегию задавания вопросов и приведены только для демонстрации формата взаимодействия. В частности, мы не можем определить, кто из игроков является Предателем, по вопросам, заданным в примерах.

В первом наборе входных данных игроки с индексами \(2\) и \(6\) — Рыцари, игроки с индексами \(1\), \(3\), \(5\) и \(7\) — Лжецы, а Предатель имеет индекс \(4\). Ниже приводится объяснение заданных вопросов:

  • В первом вопросе игрок \(i\) является Лжецом, и игрок \(j\) также Лжец. Ответ — «да», так как Лжецы всегда лгут.
  • Во втором вопросе игрок \(i\) — Лжец, а игрок \(j\) — Рыцарь. Ответ — «нет», так как Лжецы всегда лгут.
  • В третьем вопросе игрок \(i\) — Рыцарь, а игрок \(j\) — Лжец. Ответ — «нет», так как Рыцари всегда говорят правду.
  • В четвертом вопросе игрок \(i\) — Рыцарь, и игрок \(j\) также Рыцарь. Ответ — «да», так как Рыцари всегда говорят правду.
  • В пятом вопросе игрок \(i\) — Предатель, а игрок \(j\) — Лжец. Ответ — «да», так как Предатель всегда лжет.
  • В шестом вопросе игрок \(i\) — Предатель, а игрок \(j\) — Рыцарь. Ответ — «нет», так как Предатель всегда лжет.
  • В седьмом вопросе игрок \(i\) — Лжец, а игрок \(j\) — Предатель. Ответ — «нет», так как Лжецы всегда лгут, и Лжецы думают, что Предатель является Рыцарем.

B. Пропуск

Бинарный поиск графы дп кратчайшие пути *1700

На улице уже \(3024\) год, идеи для задач давно закончились, а олимпиады теперь проходят в изменённом индивидуальном формате. Олимпиада состоит из \(n\) задач, пронумерованных от \(1\) до \(n\). \(i\)-я задача имеет свою стоимость \(a_i\) и некоторый параметр \(b_i\) (\(1 \le b_i \le n\)).

Изначально тестирующая система выдаёт участнику первую задачу. Когда участнику выдают \(i\)-ю задачу, у него есть два варианта:

  • Либо он сдаёт задачу и получает \(a_i\) баллов;
  • Либо он может пропустить задачу, тогда он никогда не сможет её сдать.

Далее тестирующая система выбирает для участника следующую задачу среди задач с номерами \(j\), такими что:

  • Если он сдал \(i\)-ю задачу, она смотрит на задачи с номерами \(j < i\);
  • Если он пропустил \(i\)-ю задачу, она смотрит на задачи с номерами \(j \leq b_i\).

Среди этих задач она выбирает задачу с максимальным номером, которую она ранее не выдавала участнику (до этого он её не сдавал и не пропускал). Если такой задачи нет, то соревнование для участника завершается, и его результат равен сумме баллов за все сданные задачи. В частности, если участник сдаёт первую задачу, то соревнование для него завершается. Заметьте, что участник получает каждую задачу максимум один раз.

Прохор тщательно готовился к олимпиаде, и теперь он может сдать любую задачу. Помогите ему определить, какое максимальное количество баллов он может получить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 4 \cdot 10^5\)) — количество задач на олимпиаде.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — стоимости задач.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq n\)) — параметры задач.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальное количество баллов, которое может получить Прохор.

Примечание

В первом наборе входных данных Прохор может пропустить первую задачу, тогда он получит задачу с номером \(b_1 = 2\). Прохор может сдать её и получить \(a_2 = 16\) баллов. После этого соревнование завершится, потому что Прохор уже получал все задачи. Обратите внимание, что если Прохор сдаст первую задачу, то он получит \(a_1 = 15\) баллов, но соревнование сразу завершится.

Во втором наборе входных данных Прохор может пропустить первую задачу, тогда он получит задачу с номером \(b_1 = 3\). Прохор может сдать её и получить \(a_3 = 100\) баллов. После этого Прохор получит вторую задачу, которую он может пропустить и получить задачу с номером \(b_2 = 4\). Прохор может сдать четвёртую задачу и получить ещё \(a_4 = 100\) баллов. После этого соревнование завершается, потому что Прохор уже получал все задачи с номерами, не превосходящими \(4\). Таким образом, суммарно Прохор получит \(200\) баллов.

В третьем наборе входных данных Прохор может сдать первую задачу и получить \(100\) баллов, после чего соревнование сразу завершится.

D. Много игр

дп жадные алгоритмы математика Перебор Теория вероятностей *2900

Недавно вы получили редчайший билет в единственное казино в мире, в котором и правда можно что-то заработать, и вы хотите на полную воспользоваться этой возможностью.

Условия в этом казино следующие:

  • Всего в казино есть \(n\) игр.
  • В каждую игру можно сыграть не более одного раза.
  • Каждая игра характеризуется двумя параметрами: \(p_i\) (\(1 \le p_i \le 100\)) и \(w_i\) — вероятность победы в игре в процентах и выигрыш за победу.
  • Если вы проиграете хоть в одной игре, в которую решите сыграть, то вы не получите вообще ничего (даже за выигранные игры).

Вам нужно заранее выбрать набор игр, в которые вы будете играть, таким образом, чтобы максимизировать математическое ожидание вашего выигрыша.

В данном случае, если вы выберите сыграть в игры с индексами \(i_1 < i_2 < \ldots < i_k\), то вы выиграете во все из них с вероятностью \(\prod\limits_{j=1}^k \frac{p_{i_j}}{100}\), и в таком случае ваш выигрыш будет равен \(\sum\limits_{j=1}^k w_{i_j}\).

То есть математическое ожидание вашего выигрыша будет равно \(\left(\prod\limits_{j=1}^k \frac{p_{i_j}}{100}\right) \cdot \left(\sum\limits_{j=1}^k w_{i_j}\right)\).

Чтобы не разориться, владельцы казино ограничили математическое ожидание выигрыша каждой отдельной игры. Таким образом, для всех \(i\) (\(1 \le i \le n\)) выполнено \(w_i \cdot p_i \le 2 \cdot 10^5\).

Ваша задача — найти максимальное математическое ожидание выигрыша, которое можно получить, выбрав какой-то набор игр в казино.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество игр, в которые предлагается сыграть.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(p_i\) и \(w_i\) (\(1 \leq p_i \leq 100\), \(1 \leq w_i, p_i \cdot w_i \leq 2 \cdot 10^5\)) — вероятность победы и размер выигрыша в \(i\)-й игре.

Выходные данные

Выведите одно число — максимальное математическое ожидание выигрыша в казино, которое можно получить, выбрав некоторое подмножество игр.

Ваш ответ будет засчитан, если относительная или абсолютная погрешность не будет превышать \(10^{-6}\). Формально, если \(a\) — ваш ответ, а \(b\) — ответ жюри, то он будет засчитан, если \(\frac{|a-b|}{\max(b, 1)} \le 10^{-6}\).

Примечание

В первом примере можно выбрать первую и третью игры. В таком случае математическое ожидание выигрыша будет равно \(\left(\frac{p_1}{100}\cdot \frac{p_3}{100}\right) \cdot (w_1 + w_3) = \left(\frac{80}{100}\cdot \frac{50}{100}\right) \cdot (80 + 200) = 112\).

Во втором примере можно выбрать первую и вторую игры. В таком случае математическое ожидание выигрыша будет равно \(\left(\frac{p_1}{100}\cdot \frac{p_2}{100}\right) \cdot (w_1 + w_2) = \left(\frac{100}{100}\cdot \frac{100}{100}\right) \cdot (1 + 1) = 2\).

В третьем примере можно выбрать только вторую игру. В таком случае математическое ожидание выигрыша будет равно \(\frac{p_2}{100} \cdot w_2 = \frac{2}{100} \cdot 1000 = 20\).

E. Древо жизни

Деревья дп жадные алгоритмы *3300

В сердце древнего королевства растет легендарное Древо Жизни — единственное в своем роде и источник магической силы всего мира. Дерево состоит из \(n\) узлов. Каждый узел этого дерева — это волшебный источник, связанный с другими такими же источниками через магические каналы (ребра). Всего в дереве \(n-1\) каналов, \(i\)-й из которых соединяет узлы \(v_i\) и \(u_i\). Также между любыми двумя узлами в дереве существует единственный простой путь по каналам.

Однако магическая энергия, текущая через эти каналы, должна быть сбалансирована, иначе мощь Древа Жизни может нарушить естественный порядок и вызвать катастрофические последствия. Мудрецы королевства обнаружили, что когда два магических канала сходятся в одном узле, между ними возникает опасная «магическая резонансная вибрация». Чтобы защитить Древо Жизни и сохранить его баланс, необходимо выбрать несколько путей и провести через них специальные ритуалы. Путь — это последовательность различных узлов \(v_1, v_2, \ldots, v_k\), где каждая пара соседних узлов \(v_i\) и \(v_{i+1}\) соединена ребром. При проведении мудрецами ритуала через такой путь блокируются все резонансные вибрации между парами соседних каналов в пути, а именно между каналами \((v_i, v_{i+1})\) и \((v_{i+1}, v_{i+2})\) для каждого \(1 \leq i \leq k - 2\).

Задача мудрецов: выбрать минимальное количество путей и провести через них ритуалы, чтобы заблокировать все резонансные вибрации. Это означает, что для каждой пары каналов, исходящих из одного узла, должен существовать хотя бы один выбранный путь, который содержит оба этих канала.

Помогите мудрецам найти минимальное количество таких путей, чтобы магический баланс Древа Жизни был сохранен, и его сила продолжала питать весь мир!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 4 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 5 \cdot 10^5\)) — количество узлов в Древе Жизни.

\(i\)-я из следующих \(n - 1\) строк каждого набора входных данных содержит два целых числа \(v_i\) и \(u_i\) (\(1 \leq v_i < u_i \leq n\)) — канал, соединяющий узлы \(v_i\) и \(u_i\).

Гарантируется, что между любыми двумя узлами существует единственный простой путь по каналам.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество путей, которое нужно выбрать мудрецам, чтобы предотвратить катастрофу.

Примечание

В первом наборе входных данных есть две пары каналов, исходящих из одного узла: \((1, 2)\) и \((2, 3)\), \((2, 3)\) и \((3, 4)\). Достаточно провести ритуал через путь \(1-2-3-4\). Таким образом, ответ \(1\).

Во втором наборе входных данных нет пар каналов, исходящих из одного узла, поэтому ответ \(0\).

В третьем наборе входных данных можно провести ритуалы через пути \(2-1-3\), \(2-1-4\) и \(3-1-4\).

B. Биномиальные коэффициенты, ну типа

дп Комбинаторика математика *1100

Недавно акшиМ столкнулся с задачей, для решения которой нужны были биномиальные коэффициенты. Он написал код, который выглядел так:

    for (int n = 0; n < N; n++) { // цикл по n от 0 до N-1 включительно
C[n][0] = 1;
C[n][n] = 1;
for (int k = 1; k < n; k++) // цикл по k от 1 до n-1 включительно
C[n][k] = C[n][k - 1] + C[n - 1][k - 1];
}

К сожалению, он допустил ошибку, так как правильная формула следующая:

            C[n][k] = C[n - 1][k] + C[n - 1][k - 1];

Но его сокомандник, кеблидА, заинтересовался значениями, которые были получены с использованием неправильной формулы. Пожалуйста, помогите ему вычислить эти коэффициенты для \(t\) различных пар \((n_i, k_i)\). Обратите внимание: их необходимо вычислить в соответствии с первой (неправильной) формулой.

Поскольку значения \(C[n_i][k_i]\) могут быть слишком большими, выводите их по модулю \(10^9 + 7\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество пар. Далее в двух строках заданы сами \(t\) пар.

Во второй строке заданы \(t\) целых чисел \(n_1, n_2, \dots, n_t\) (\(2 \le n_i \le 10^5\)).

В третьей строке заданы \(t\) целых чисел \(k_1, k_2, \dots, k_t\) (\(1 \le k_i < n_i\)).

Выходные данные

Выведите \(t\) целых чисел \(C[n_i][k_i]\) по модулю \(10^9 + 7\).

D. Проверка характеристик

дп математика Перебор реализация Структуры данных *1800

Представьте себе игру, в которой вы играете за персонажа с двумя характеристиками: «Сила» и «Интеллект», которые изначально находятся на нулевом уровне.

В ходе игры вы получите \(m\) очков характеристик, которые позволят вам поднять их уровни — одно очко увеличивает одну из характеристик на один уровень. Но в процессе игры вы также сталкиваетесь с так называемыми «Проверками характеристик»: если ваша соответствующая характеристика достаточно высока, вы пройдете проверку; в противном случае вы провалите проверку.

Потратив некоторое время, вы наконец подготовили список, который содержит записи обо всех очках, которые вы получили, и всех проверках, с которыми столкнулись. И теперь вы задаетесь вопросом: каково максимальное количество проверок характеристик, которые вы можете пройти за одну игру, если будете разумно тратить очки?

Обратите внимание, что вы не можете изменить порядок записей.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le m \le 5000\); \(m < n \le 2 \cdot 10^6\)) — количество записей в списке и общее количество очков, которые вы получите в ходе игры.

Во второй строке заданы \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(-m \le r_i \le m\)), где \(r_i\) кодирует \(i\)-ю запись:

  • Если \(r_i = 0\), то \(i\)-я запись является записью о получении одного очка характеристик. Вы можете потратить его на повышение уровня либо Силы, либо Интеллекта;
  • Если \(r_i > 0\), то это проверка Интеллекта: если ваш уровень Интеллекта больше или равен \(|r_i|\), вы проходите проверку.
  • Если \(r_i < 0\), то это проверка Силы: если ваш уровень Силы больше или равен \(|r_i|\), вы проходите проверку.

Дополнительное ограничение на входные данные: в заданной последовательности \(r_1, r_2, \dots, r_n\) ровно \(m\) элементов, равных \(0\).

Выходные данные

Выведите одно целое число — максимальное количество проверок, которые вы можете пройти.

Примечание

В первом тесте оптимально вложить каждое очко в Силу, поэтому вы провалите \(2\) проверки Интеллекта, но пройдете \(3\) проверки Силы.

Во втором тесте вы провалите обе проверки, так как первое очко характеристик приходит только после проверок.

В третьем тесте одной из оптимальных стратегий является:

  1. вложить первое очко в Интеллект;
  2. вложить второе очко в Силу;
  3. вложить третье очко в Силу;
В результате вы пройдете \(2\) проверки Интеллекта \(r_3\) и \(r_9\) и \(2\) проверки Силы \(r_7\) и \(r_8\).

E. Карточная игра

бпф дп жадные алгоритмы Комбинаторика математика *2200

В самой популярной карточной игре в Берляндии используется колода из \(n \times m\) карт. У каждой карты есть два параметра: масть и ранг. Масти в игре пронумерованы от \(1\) до \(n\), а ранги пронумерованы от \(1\) до \(m\). Для каждой комбинации масти и ранга существует ровно одна карта в колоде.

Карта с мастью \(a\) и рангом \(b\) может побить карту с мастью \(c\) и рангом \(d\) в одном из двух случаев:

  • \(a = 1\), \(c \ne 1\) (карта масти \(1\) может побить карту любой другой масти);
  • \(a = c\), \(b > d\) (карта может побить любую другую карту той же масти, но ниже рангом).

В игру играют два игрока. Перед началом игры они получают ровно по половине колоды. Первый игрок выигрывает, если для каждой карты второго игрока он может выбрать свою карту, которая ее может побить, и при этом не будет выбирать свои карты повторно (то есть существует такое разбиение на пары карт первого игрока с картами второго игрока так, чтобы в каждой паре карта первого игрока била карту второго игрока). Иначе выигрывает второй игрок.

Ваша задача — посчитать количество способов распределить карты так, чтобы выиграл первый игрок. Два способа считаются различными, если существует такая карта, что в одном она принадлежит первому игроку, а в другом — второму. Количество способов может быть очень большим, поэтому выведите его по модулю \(998244353\).

Входные данные

Единственная строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 500\)).

Дополнительное ограничение на входные данные: \(m\) четно.

Выходные данные

Выведите единственное целое число — количество способов распределить карты так, чтобы выиграл первый игрок, взятое по модулю \(998244353\).

F. Выбери свои запросы

графы Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное *2700

Дан массив \(a\), состоящий из \(n\) целых чисел (нумеруемых от \(1\) до \(n\)). Изначально все они равны нулю.

Необходимо обработать \(q\) запросов \(i\)-й запрос состоит из двух различных целых чисел \(x_i\) и \(y_i\). В ходе \(i\)-го запроса нужно выбрать целое число \(p\) (которое равно либо \(x_i\), либо \(y_i\)) и целое число \(d\) (которое равно либо \(1\), либо \(-1\)), и присвоить \(a_p = a_p + d\).

После каждого запроса каждый элемент массива \(a\) должен быть неотрицательным целым числом.

Необходимо обработать все запросы таким образом, чтобы сумма всех элементов массива \(a\) после последнего запроса была минимально возможной.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 3 \cdot 10^5\); \(1 \le q \le 3 \cdot 10^5\)) — количество элементов в массиве \(a\) и количество запросов соответственно.

Затем следуют \(q\) строк. \(i\)-я из этих строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\)) — описание \(i\)-го запроса.

Выходные данные

Для каждого запроса выведите строку, содержащую два символа:

  • первый символ должен быть x, если вы выбрали \(p=x_i\), или y, если вы выбрали \(p=y_i\);
  • второй символ должен быть +, если вы выбрали \(d=1\), или -, если вы выбрали \(d=-1\).

Если существует несколько ответов, выведите любой из них.

D. Суммы на отрезках

Бинарный поиск дп математика реализация Структуры данных *1900

Дана последовательность целых чисел \([a_1, a_2, \dots, a_n]\). Обозначим \(s(l,r)\) как сумму элементов от \(a_l\) до \(a_r\) (т. е. \(s(l,r) = \sum\limits_{i=l}^{r} a_i\)).

Построим другую последовательность \(b\) размером \(\frac{n(n+1)}{2}\) следующим образом: \(b = [s(1,1), s(1,2), \dots, s(1,n), s(2,2), s(2,3), \dots, s(2,n), s(3,3), \dots, s(n,n)]\).

Например, если \(a = [1, 2, 5, 10]\), то \(b = [1, 3, 8, 18, 2, 7, 17, 5, 15, 10]\).

Вам даны \(q\) запросов. В \(i\)-м запросе вам даны два целых числа \(l_i\) и \(r_i\), и вам нужно вычислить \(\sum \limits_{j=l_i}^{r_i} b_j\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10 \le a_i \le 10\)).

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^5\)).

Затем следуют \(q\) строк, \(i\)-я из которых содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le \frac{n(n+1)}{2}\)).

Выходные данные

Выведите \(q\) целых числа, \(i\)-е из которых должно быть равно \(\sum \limits_{j=l_i}^{r_i} b_j\).

F. Мороженое в Бермарте

Деревья дп поиск в глубину и подобное разделяй и властвуй реализация Структуры данных *2700

В сети магазинов Бермарт продается мороженое. У каждого сорта мороженого есть два параметра: цена и вкусность.

Изначально есть один магазин с номером \(1\), в котором ничего не продаётся. Требуется обработать \(q\) запросов следующих типов:

  • \(1~x\) — открывается новый магазин, в котором продаются те же сорта мороженого, что и в магазине \(x\). Он получает первый свободный порядковый номер. Порядок появления сортов мороженого в новом магазине тот же, что и в магазине \(x\).
  • \(2~x~p~t\) — в магазине \(x\) в продаже появляется сорт мороженого с ценой \(p\) и вкусностью \(t\).
  • \(3~x\) — в магазине \(x\) исчезает из продажи сорт мороженого, который там появился раньше всего.
  • \(4~x~p\) — для магазина \(x\) надо найти максимальную суммарную вкусность поднабора сортов, которые там продаются, так, чтобы суммарная цена не превышала \(p\) (каждый сорт можно использовать в поднаборе не более одного раз).
Входные данные

В первой строке записано одно целое число \(q\) (\(1 \le q \le 3 \cdot 10^4\)) — количество запросов.

В каждой из \(q\) следующих строк записан очередной запрос в формате, описанном в условии:

  • \(1~x\);
  • \(2~x~p~t\) (\(1 \le p, t \le 2000\));
  • \(3~x\);
  • \(4~x~p\) (\(1 \le p \le 2000\)).

Дополнительные ограничения на входные данные:

  • \(x\) в каждом запросе не превышает текущего количества магазинов (то есть, \(1\) плюс количество запросов типа \(1\));
  • запрос типа \(3\) не применяется к магазину, в котором нет ни одного типа мороженого;
  • есть хотя бы один запрос типа \(4\).
Выходные данные

На каждый запрос типа \(4\) выведите одно целое число — для магазина \(x\) найдите максимальную суммарную вкусность поднабора сортов, которые там продаются, так, чтобы суммарная цена не превышала \(p\) (каждый сорт можно использовать в поднаборе не более одного раз).

C. Добавьте нули

графы дп жадные алгоритмы Перебор поиск в глубину и подобное Структуры данных *1500

Вам дан массив \(a\), изначально содержащий \(n\) целых чисел. За одну операцию вы можете сделать следующее:

  • Выбрать позицию \(i\) такую, что \(1 < i \le |a|\) и \(a_i = |a| + 1 - i\), где \(|a|\) — текущая длина массива.
  • Добавить \(i - 1\) нулей в конец \(a\).

Какова максимально возможная длина массива \(a\) после выполнения данной операции некоторое количество раз (возможно, нулевое)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{12}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможную длину \(a\) после выполнения некоторой последовательности операций.

Примечание

В первом наборе входных данных мы можем сначала выбрать \(i = 4\), так как \(a_4 = 5 + 1 - 4 = 2\). После этого массив станет равен \([2, 4, 6, 2, 5, 0, 0, 0]\). Затем мы можем выбрать \(i = 3\), так как \(a_3 = 8 + 1 - 3 = 6\). После этого массив станет равен \([2, 4, 6, 2, 5, 0, 0, 0, 0, 0]\), то есть будет иметь длину \(10\). Можно показать, что нельзя получить более длинный массив.

Во втором наборе входных данных мы можем выбрать \(i=2\), затем \(i=3\), затем \(i=4\). Итоговый массив будет равен \([5, 4, 4, 5, 1, 0, 0, 0, 0, 0, 0]\), и его длина будет равняться \(11\).

D1. Финальный диалог (простая версия)

Бинарный поиск графы дп жадные алгоритмы реализация *1700

Это простая версия задачи. Единственное отличие заключается в том, что в этой версии вам нужно вывести только минимальную суммарную стоимость операций. Вы можете делать взломы, только если обе версии задачи решены.

Даны массив \(a\) длины \(n\) и массив \(b\) длины \(m\) (\(b_i > b_{i+1}\) для всех \(1 \le i < m\)). Изначально значение \(k\) равно \(1\). Ваша цель — сделать массив \(a\) пустым, выполняя операции двух типов:

  • \(1\) тип: Если значение \(k\) меньше \(m\) и массив \(a\) не пуст, вы можете увеличить значение \(k\) на \(1\). Это не влечет за собой никаких затрат.
  • \(2\) тип: Удалить непустой префикс массива \(a\), такой, что его сумма не превосходит \(b_k\). Стоимость этой операции равна \(m - k\).

Вам нужно минимизировать суммарную стоимость последовательности операций, в результате которой массив \(a\) станет пустым. Если сделать массив пустым невозможно, выведите \(-1\). В противном случае выведите минимальную суммарную стоимость операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\), \(\boldsymbol{1 \le n \cdot m \le 3 \cdot 10^5}\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le 10^9\)). Гарантируется, что \(b_i > b_{i+1}\) для всех \(1 \le i < m\).

Гарантируется, что сумма \(\boldsymbol{n \cdot m}\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если возможно сделать \(a\) пустым, выведите минимальную суммарную стоимость операций.

Если не существует последовательности операций, которая делает \(a\) пустым, то выведите одно число \(-1\).

Примечание

В первом наборе входных данных оптимальная последовательность операций, имеющая стоимость \(1\), выглядит следующим образом:

  • Выполните операцию типа \(2\). Выберите префикс \([9]\). Эта операция стоит \(1\).
  • Выполните операцию типа \(1\). Значение \(k\) теперь равно \(2\). Это не влечет за собой никаких затрат.
  • Выполните операцию типа \(2\). Выберите префикс \([3, 4]\). Эта операция стоит \(0\).
  • Выполните операцию типа \(2\). Выберите префикс \([3]\). Эта операция стоит \(0\).
  • Массив \(a\) стал пустым, а суммарная стоимость всех операций равна \(1\).

Во втором наборе входных данных невозможно удалить ни одного префикса массива, так как \(a_1 > b_1\), поэтому массив \(a\) нельзя сделать пустым ни одной последовательностью операций.

D2. Финальный диалог (сложная версия)

Бинарный поиск дп жадные алгоритмы реализация Структуры данных *2200

Это сложная версия задачи. Единственное отличие заключается в том, что в этой версии вам также нужно вывести количество оптимальных последовательностей операций. Вы можете делать взломы, только если обе версии задачи решены.

Даны массив \(a\) длины \(n\) и массив \(b\) длины \(m\) (\(b_i > b_{i+1}\) для всех \(1 \le i < m\)). Изначально значение \(k\) равно \(1\). Ваша цель — сделать массив \(a\) пустым, выполняя операции двух типов:

  • \(1\) тип: Если значение \(k\) меньше \(m\) и массив \(a\) не пуст, вы можете увеличить значение \(k\) на \(1\). Это не влечет за собой никаких затрат.
  • \(2\) тип: Удалить непустой префикс массива \(a\), такой, что его сумма не превосходит \(b_k\). Стоимость этой операции равна \(m - k\).

Вам нужно минимизировать суммарную стоимость последовательности операций, в результате которой массив \(a\) станет пустым. Если сделать массив пустым невозможно, выведите \(-1\). В противном случае выведите минимальную суммарную стоимость операций, а также количество последовательностей операций, имеющих минимальную стоимость. Так как это количество может быть очень большим, выведите остаток от его деления на \(10^9 + 7\).

Две последовательности операций считаются различными, если на любом шаге выбран другой тип операции или отличается размер удаляемого префикса.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\), \(\boldsymbol{1 \le n \cdot m \le 3 \cdot 10^5}\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le 10^9\)). Гарантируется, что \(b_i > b_{i+1}\) для всех \(1 \le i < m\).

Гарантируется, что сумма \(\boldsymbol{n \cdot m}\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если можно сделать \(a\) пустым, выведите два целых числа. Первое должно быть минимальной общей стоимостью операций, а второе — количеством последовательностей операций, которые достигают этой минимальной стоимости, по модулю \(10^9 + 7\).

Если не существует последовательности операций, которая делает \(a\) пустым, то выведите одно число \(-1\).

Примечание

В первом наборе входных данных существует \(3\) оптимальных последовательностей операций, которые имеют стоимость \(1\):

  • Все \(3\) последовательности начинаются с операции типа \(2\), удаляющей префикс \([9]\), чтобы сделать \(a = [3, 4, 3]\), и данная операция имеет стоимость \(1\). Затем мы выполняем операцию типа \(1\), чтобы увеличить значение \(k\) на \(1\). Все последующие операции теперь имеют стоимость \(0\).
  • Одна последовательность продолжается удалением префикса \([3, 4]\), затем \([3]\).
  • Другая последовательность продолжается удалением префикса \([3]\), затем \([4, 3]\).
  • Другая последовательность продолжается удалением префикса \([3]\), затем \([4]\), затем \([3]\).

Во втором наборе входных данных невозможно удалить ни одного префикса массива, так как \(a_1 > b_1\), поэтому массив \(a\) нельзя сделать пустым ни одной последовательностью операций.

E2. Битовая игра (сложная версия)

битмаски дп математика *3100

Это сложная версия задачи. Единственное отличие заключается в том, что в этой версии количество камней в каждой кучке не фиксировано, и вам нужно вывести количество вариантов игры, в которых выигрывает Боб. Вы можете совершать взломы только если обе версии задачи решены.

Алиса и Боб играют в знакомую игру, в которой они по очереди вынимают камни из \(n\) кучек. Изначально в \(i\)-й куче находится \(x_i\) камней, и она имеет значение \(a_i\). Игрок может забрать \(d\) камней из \(i\)-й кучи тогда и только тогда, когда выполняются оба следующих условия:

  • \(1 \le d \le a_i\), и
  • \(x \, \& \, d = d\), где \(x\) — текущее количество камней в \(i\)-й куче, а \(\&\) обозначает операцию побитового И.

Алиса ходит первой. Игрок, который не может сделать ход, проигрывает.

Вам даны значения \(a_i\) для каждой кучи, но количество камней в \(i\)-й куче еще не определено. Для \(i\)-й кучи \(x_i\) может быть любым целым числом от \(1\) до \(b_i\) включительно. То есть можно выбрать массив \(x_1, x_2, \ldots, x_n\) такой, что условие \(1 \le x_i \le b_i\) выполняется для всех куч.

Ваша задача — найти количество игр, в которых Боб выигрывает, если оба игрока играют оптимально. Две игры считаются различными, если количество камней хотя бы в одной кучке разное, то есть массивы \(x\) различаются хотя бы в одной позиции.

Поскольку ответ может быть очень большим, выведите результат по модулю \(10^9 + 7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \le n \le 10^4\)) — количество кучек.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i < 2^{30}\)).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i < 2^{30}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество игр, в которых Боб выигрывает, по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных, какие бы значения \(x_2\) и \(x_3\) мы ни выбрали, вторая и третья кучи всегда будут выбраны ровно один раз, прежде чем из них больше нельзя будет взять ни одного камня. Если \(x_1 = 2\), то ни один камень не может быть взят из нее, поэтому Боб сделает последний ход. Если \(x_1 = 1\) или \(x_1 = 3\), то на этой куче можно сделать ровно один ход, поэтому последний ход сделает Алиса. Таким образом, Боб выигрывает, если \(x = [2, 1, 1]\) или \(x = [2, 1, 2]\) или \(x = [2, 2, 1]\) или \(x = [2, 2, 2]\).

Во втором наборе входных данных Боб выигрывает, если \(x_1 = 14\) или \(x_1 = 30\), убрав \(14 - k\) камней, где \(k\) — количество камней, убранных Алисой в свой ход. Боб также выигрывает в случае \(x_1 = 16\) или \(x_1 = 32\), поскольку у Алисы нет ни одного хода в начале.

C. Приключения Алисы в нарезании торта

Бинарный поиск дп жадные алгоритмы *1600

Алиса на чаепитии у Безумного Шляпника! Есть длинный прямоугольный торт, состоящий из \(n\) секций с вкусностями \(a_1, a_2, \ldots, a_n\). На чаепитии присутствуют \(m\) существ, не считая Алисы.

Алиса нарежет торт на \(m + 1\) кусочков. Формально, она разделит торт на \(m + 1\) подмассивов, где каждый подмассив состоит из некоторого количества смежных секций. Вкусность кусочка равна сумме вкусностей секций в нем. После этого она распределит эти \(m + 1\) кусочков между \(m\) существами и собой (её кусок может быть пустым). Однако каждое из \(m\) существ будет довольно только в случае, если вкусность его кусочка будет \(v\) или больше.

Алиса хочет, чтобы каждое существо было довольно. При этом условии она хочет максимизировать вкусность своего собственного куска. Можете ли вы помочь Алисе найти максимальную вкусность, которую может иметь её кусок? Если нет способа сделать так, чтобы каждое существо было довольно, выведите \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, m, v\) (\(1\le m\le n\le 2\cdot 10^5\); \(1\le v\le 10^9\)) — количество секций, количество существ и минимальные требования существ к вкусу.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — вкусности секций.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальную вкусность, которую Алиса может достичь для своего куска, или \(-1\), если нет способа сделать так, чтобы каждое существо было довольно.

Примечание

Для первого набора входных данных Алиса может отдать первую и вторую секции как отдельные куски, а затем взять оставшиеся секции общей вкусностью \(10 + 1 + 1 + 10 = 22\) себе. Мы можем показать, что лучше она сделать не может.

Для второго набора входных данных Алиса может отдать первую и вторую секции как один кусок, а шестую секцию как один кусок. Она может затем взять секции общей стоимостью \(10 + 1 + 1 = 12\) вкусностью себе. Мы можем показать, что лучше она сделать не может.

Для седьмого набора входных данных Алиса не может дать каждому существу кусок вкусностью не менее \(12\).

D. Приключения Алисы в картах

графы дп жадные алгоритмы Конструктив реализация Структуры данных Тернарный поиск *2000

Алиса играет в карты с Дамой Червей, Королем Червей и Валетом Червей. В их карточной игре есть \(n\) различных типов карт. В данный момент у Алисы есть карта типа \(1\), и ей нужна карта типа \(n\), чтобы сбежать из Страны Чудес. У остальных игроков есть по одной карте каждого типа.

В этой карточной игре Алиса может обмениваться картами с тремя другими игроками. У каждого игрока есть свои предпочтения среди этих \(n\) типов, которые можно описать перестановками\(^{\text{∗}}\) \(q\), \(k\) и \(j\) для Дамы, Короля и Валета соответственно.

Игрок оценивает карту \(a\) больше, чем карту \(b\), если для их перестановки \(p\), \(p_a > p_b\). Тогда этот игрок готов обменять карту \(b\) с Алисой в обмен на карту \(a\). Предпочтения Алисы просты: она оценивает карту \(a\) больше, чем карту \(b\) если \(a > b\), и она будет обмениваться картами только в соответствии с этими предпочтениями.

Определите, может ли Алиса обменять карту типа \(1\) на карту типа \(n\), учитывая эти предпочтения. Если это возможно, приведите возможный набор обменов для этого.

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — количество типов карт.

Следующие три строки содержат предпочтения Дамы, Короля и Валета соответственно. Каждая из этих строк содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1\le p_i\le n\)) — перестановка, соответствующая предпочтениям игрока.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одну строку «YES» или «NO» (без кавычек), обозначающую, может ли Алиса обменяться на карту \(n\).

Если первая строка была «YES», то на следующей строке выведите \(k\) — количество обменов, которые сделает Алиса. На следующих \(k\) строках выведите через пробел символ \(c\in \{\texttt{q}, \texttt{k}, \texttt{j}\}\) и целое число \(x\), обозначающее, что Алиса обменивается с игроком \(c\), чтобы получить карту \(x\). Должно быть так, что на \(k\)-й строке \(x = n\). Если существует несколько решений, выведите любое из них.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ. То же самое касается символа \(c\), обозначающего игрока в обмене (\(\texttt{Q}, \texttt{K}, \texttt{J}\) будут приняты наряду с их строчными вариантами).

Примечание

В первом наборе входных данных Алиса может обменяться с Королем, чтобы получить карту \(2\). Затем она может обменяться с Дамой, чтобы получить карту \(3\).

Во втором наборе входных данных, хотя Алиса может обменяться с Дамой, чтобы получить карту \(3\), с Королем, чтобы получить карту \(2\), а затем с Валетом, чтобы получить карту \(4\), это не является допустимым решением, так как оно не соответствует предпочтениям Алисы. Мы можем показать, что нет способа для Алисы получить карту \(4\).

E. Приключения Алисы в кроличьей норе

Деревья дп жадные алгоритмы игры Комбинаторика математика поиск в глубину и подобное Теория вероятностей *2300

Алиса находится на дне кроличьей норы! Кроличья нора может быть смоделирована как дерево\(^{\text{∗}}\), у которого выход находится на вершине \(1\), а Алиса начинает с некоторой вершины \(v\). Она хочет выбраться из норы, но, к сожалению, Дама Червей приказала её казнить.

Каждую минуту подбрасывается обычная монета. Если выпадает орёл, Алиса может переместиться в любую вершину, смежную со своим текущим положением, а если решка, Дама Червей может перетащить Алису на смежную вершину по своему выбору. Если Алиса когда-либо окажется на любом из некорневых листьев\(^{\text{†}}\) дерева, Алиса проигрывает.

Предполагая, что они обе действуют оптимально, для каждой начальной вершины \(1\le v\le n\) вычислите вероятность того, что Алиса сможет убежать. Поскольку эти вероятности могут быть очень малыми, выведите их по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что точный ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

\(^{\text{∗}}\)Дерево — это связный простой граф, который имеет \(n\) вершин и \(n-1\) рёбер.

\(^{\text{†}}\)Лист — это вершина, соединённая ровно с одним ребром.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — количество вершин в дереве.

\(i\)-я из следующих \(n - 1\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\) и \(x_i \neq y_i\)) — рёбра дерева. Гарантируется, что заданные ребра образуют дерево.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел в одной строке — вероятности того, что Алиса убежит, начиная с вершины \(1, 2, \ldots, n\). Поскольку эти вероятности могут быть очень малыми, выведите их по модулю \(998\,244\,353\).

Примечание

Для первого набора входных данных:

  1. Алиса убегает из корня (вершина \(1\)) по определению с вероятностью \(1\).
  2. Алиса немедленно проигрывает из вершин \(4\) и \(5\), так как они являются листьями.
  3. Из других двух вершин Алиса убегает с вероятностью \(\frac 12\), так как Дама перетащит её к листьям.

F. Приключения Алисы в сложении

битмаски дп Перебор реализация *2700

Обратите внимание на необычное ограничение по памяти.

Чеширский Кот задал Алисе загадку: даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) и цель \(m\), существует ли способ вставить \(+\) и \(\times\) в круги выражения \(\)a_1 \circ a_2 \circ \cdots \circ a_n = m\(\) так, чтобы оно стало истинным? Мы следуем обычному порядку операций: \(\times\) выполняется перед \(+\).

Алиса отлично играет в шахматы, но она не сильна в математике. Пожалуйста, помогите ей найти выход из Страны Чудес!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1\le n\le 2\cdot 10^5\); \(1\le m\le 10^4\)) — количество целых чисел и цель, соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0\le a_i\le 10^4\)) — элементы массива \(a\).

Сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно достичь цель, вставив \(+\) или \(\times\), и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Возможные решения для первых четырех наборов входных данных приведены ниже. \(\)\begin{align*} 2 \times 1 + 1 \times 1 \times 2 &= 4 \\ 2 \times 1 + 1 + 1 \times 2 &= 5 \\ 2 \times 1 + 1 + 1 + 2 &= 6 \\ 2 + 1 + 1 + 1 + 2 &= 7 \\ \end{align*}\(\) В пятом наборе входных данных невозможно получить \(8\).

C. Новый рейтинг

Бинарный поиск дп жадные алгоритмы Структуры данных *1700

Привет, Codeforces Forcescode!
 

Кевин раньше был участником Codeforces. Недавно команда KDOI разработала новый сайт под названием Forcescode.

Кевин принял участие в \(n\) соревнованиях на Forcescode. В \(i\)-м соревновании его рейтинг выступления равен \(a_i\).

Теперь он взломал бэкенд Forcescode и выберет отрезок \([l,r]\) (\(1\le l\le r\le n\)), после чего он пропустит все соревнования в этом отрезке. После этого его рейтинг будет пересчитан следующим образом:

  • Изначально его рейтинг равен \(x=0\);
  • Для каждого \(1\le i\le n\), после \(i\)-го соревнования,
    • Если \(l\le i\le r\), это соревнование будет пропущено, и рейтинг не изменится;
    • В противном случае его рейтинг будет обновлен в соответствии со следующими правилами:
      • Если \(a_i>x\), его рейтинг \(x\) увеличится на \(1\);
      • Если \(a_i=x\), его рейтинг \(x\) останется без изменений;
      • Если \(a_i<x\), его рейтинг \(x\) уменьшится на \(1\).

Вам нужно помочь Кевину найти его максимальный возможный рейтинг после пересчета, если он оптимально выберет отрезок \([l,r]\). Обратите внимание, что Кевин должен пропустить как минимум одно соревнование.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 5\cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 3\cdot 10^5\)) — количество соревнований.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le n\)) — рейтинги выступления Кевина в соревнованиях.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальный возможный рейтинг после пересчета, если Кевин выберет интервал оптимально.

Примечание

В первом наборе входных данных Кевин должен пропустить как минимум одно соревнование. Если он выберет любой отрезок длины \(1\), его рейтинг после пересчета будет равен \(5\).

Во втором наборе входных данных оптимальный выбор Кевина — отрезок \([3,5]\). Во время пересчета его рейтинг изменяется следующим образом:

\(\) 0 \xrightarrow{a_1=1} 1 \xrightarrow{a_2=2} 2 \xrightarrow{\mathtt{skip}} 2 \xrightarrow{\mathtt{skip}} 2 \xrightarrow{\mathtt{skip}} 2 \xrightarrow{a_6=3} 3 \xrightarrow{a_7=4} 4 \(\)

В третьем наборе входных данных Кевин должен пропустить единственное соревнование, поэтому его рейтинг останется равным \(0\).

В четвертом наборе входных данных оптимальный выбор Кевина — отрезок \([7,9]\). Во время пересчета его рейтинг изменяется следующим образом:

\(\) 0 \xrightarrow{a_1=9} 1 \xrightarrow{a_2=9} 2 \xrightarrow{a_3=8} 3 \xrightarrow{a_4=2} 2 \xrightarrow{a_5=4} 3 \xrightarrow{a_6=4} 4 \xrightarrow{\mathtt{skip}} 4 \xrightarrow{\mathtt{skip}} 4 \xrightarrow{\mathtt{skip}} 4 \(\)

В пятом наборе входных данных оптимальный выбор Кевина — отрезок \([5,9]\).

G. Сбалансированная задача

дп Структуры данных *3000

Существует массив \(a\), состоящий из \(n\) целых чисел. Изначально все элементы массива \(a\) равны \(0\).

Кевин может выполнять над массивом операции следующих двух типов:

  • Прибавление на префиксе — Кевин сначала выбирает индекс \(x\) (\(1\le x\le n\)), а затем для каждого \(1\le j\le x\) увеличивает \(a_j\) на \(1\);
  • Прибавление на суффиксе — Кевин сначала выбирает индекс \(x\) (\(1\le x\le n\)), а затем для каждого \(x\le j\le n\) увеличивает \(a_j\) на \(1\).

В стране KDOI люди считают, что целое число \(v\) является сбалансированным. Таким образом, Айрис даёт Кевину массив \(c\), состоящий из \(n\) целых чисел, и определяет красоту массива \(a\) следующим образом:

  • Изначально \(b=0\);
  • Для каждого \(1\le i\le n\), если \(a_i=v\), следует увеличить \(b\) на \(c_i\);
  • Красота массива \(a\) равна конечному значению \(b\).

Кевин хочет максимизировать красоту массива \(a\) после операций. Однако он уже выполнил \(m\) операций, когда был сонным. Теперь он может выполнить произвольное количество (возможно, ноль) новых операций.

Вам нужно помочь Кевину найти максимальную возможную красоту, если он оптимально выполнит новые операции.

Однако, чтобы убедиться, что вы не просто гадаете по костям, Кевин даст вам целое число \(V\), и вам нужно будет решить задачу для каждого \(1\le v\le V\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(V\) (\(1\le n, m\le 2\cdot 10^5\), \(1\le V\le 2000\)) — длина массива \(a\), количество начальных операций и число, которое вам дал Кевин.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1\le c_i\le 10^9\)) — элементы массива \(c\).

Затем следуют \(m\) строк, \(i\)-я из которых содержит символ \(op\) и целое число \(x\) (\(op=\mathtt{L}\) или \(\mathtt{R}\), \(1\le x\le n\)) — тип \(i\)-й операции и выбранный индекс.

  • Если \(op=\mathtt{L}\), то эта операция является прибавлением на префиксе по индексу \(x\);
  • Если \(op=\mathtt{R}\), то эта операция является прибавлением на суффиксе по индексу \(x\).

Гарантируется, что:

  • сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\);
  • сумма \(m\) по всем наборам входных данных не превышает \(2\cdot 10^5\);
  • сумма \(V^2\) по всем наборам входных данных не превышает \(4\cdot 10^6\).
Выходные данные

Для каждого набора входных данных выведите \(V\) целых числа в одной строке, где \(i\)-е целое число обозначает максимальную возможную красоту после того, как Кевин выполнит некоторые новые операции, когда \(v=i\).

Примечание

В первом наборе входных данных массив \(a\) под начальными операциями изменяется следующим образом: \([0, 0, 0] \xrightarrow{\mathtt{L}\ 3} [1, 1, 1] \xrightarrow{\mathtt{R}\ 3} [1, 1, 2] \xrightarrow{\mathtt{L}\ 1} [2, 1, 2]\).

  • Для \(v=1\) оптимально не выполнять никаких новых операций, и красота равна \(b=c_2=2\);
  • Для \(v=2\) оптимально выполнить операцию прибавления префикса по индексу \(2\). После этого массив \(a\) становится \([3,2,2]\), и красота равна \(b=c_2+c_3=6\).

Во втором наборе входных данных для \(v=1\) и \(v=2\) оптимально не выполнять никаких новых операций.

H. Распространение сообщения

битмаски дп Комбинаторика Перебор *3500

Дан неориентированный граф с \(n\) вершинами и \(m\) рёбрами. Каждое ребро соединяет две вершины \((u, v)\) и каждый день появляется с вероятностью \(\frac{p}{q}\).

Изначально в вершине \(1\) есть сообщение. В конце дня вершина имеет сообщение тогда и только тогда, когда сама она или хотя бы одна из смежных с ней вершин имела сообщение в прошлый день. Обратите внимание, что каждый день ребро выбирает своё появление независимо.

Вычислите математическое ожидание количества дней, прежде чем все вершины получат сообщение, по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1\leq n\leq 21\), \(n-1\leq m\leq\frac{n(n-1)}{2}\)).

Затем следуют \(m\) строк, каждая из которых содержит четыре целых числа \(u\), \(v\), \(p\) и \(q\) (\(1\leq u\neq v\leq n\), \(1\leq p<q<998\,244\,353\), \(\gcd(p,q)=1\)) — существует неориентированное ребро между вершинами \(u\) и \(v\), и оно каждый день появляется с вероятностью \(\frac{p}{q}\).

Гарантируется, что в графе нет петель или кратных рёбер и что граф связен, если все рёбра появились.

Дополнительное ограничение на входные данные: Пусть \(g_{i,j}\) — вероятность появления ребра между вершинами \(i\) и \(j\) (\(g_{i,j}=0\), если между \(i\) и \(j\) нет ребра). Гарантируется, что для любого \(S\subseteq\{1,2,\ldots,n\}\) (\(|S|\ge 1\)), \(\) \prod_{i\in S}\left(\prod_{j\in\{1,2,\ldots,n\}\setminus S}(1-g_{i,j})\right)\not\equiv1\pmod{998\,244\,353}. \(\)

Выходные данные

Выведите одно целое число в единственной строке вывода — математическое ожидание количества дней, по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что точный ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

В первом тесте ответ равен математическому ожиданию количества дней, прежде чем появится единственное ребро в графе, и оно равно \(\frac{1}{0.1}=10\).

Во втором тесте ответ равен \(\frac{20}{9}\), прежде чем он будет взят по модулю \(998\,244\,353\).

В третьем тесте единственная вершина уже имеет сообщение, поэтому ответ равен \(0\).

E. MEXимизируйте счёт

дп жадные алгоритмы Комбинаторика математика реализация Структуры данных *2200

Предположим, что мы разбиваем элементы массива \(b\) на \(k\) непустых мультимножеств \(S_1, S_2, \ldots, S_k\), где \(k\) — произвольное целое положительное число. Определим счёт \(b\) как максимальное значение \(\operatorname{MEX}(S_1)\)\(^{\text{∗}}\)\( + \operatorname{MEX}(S_2) + \ldots + \operatorname{MEX}(S_k)\) среди всех возможных разбиений \(b\) для любого целого числа \(k\).

Вашему завистнику дан массив \(a\) длины \(n\). Поскольку он знает, что вычислить счёт массива \(a\) для вас слишком просто, он просит вас вычислить сумму счётов всех \(2^n - 1\) непустых подпоследовательностей массива \(a\).\(^{\text{†}}\) Поскольку ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

\(^{\text{∗}}\)\(\operatorname{MEX}\) набора целых чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе \(c\). Например, \(\operatorname{MEX}([0,1,2,2]) = 3\) и \(\operatorname{MEX}([1,2,2]) = 0\)

\(^{\text{†}}\)Последовательность \(x\) является подпоследовательностью последовательности \(y\), если \(x\) можно получить из \(y\), удалив несколько (возможно, ноль или все) элементов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i < n\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных мы должны рассмотреть семь подпоследовательностей:

  • \([0]\): Счёт равен \(1\).
  • \([0]\): Счёт равен \(1\).
  • \([1]\): Счёт равен \(0\).
  • \([0,0]\): Счёт равен \(2\).
  • \([0,1]\): Счёт равен \(2\).
  • \([0,1]\): Счёт равен \(2\).
  • \([0,0,1]\): Счёт равен \(3\).
Ответ для первого набора входных данных составляет \(1+1+2+2+2+3=11\).

В последнем наборе входных данных все подпоследовательности имеют счёт \(0\).

F. Орангутано-одобренный массив

Бинарный поиск дп жадные алгоритмы реализация Структуры данных *2400

Предположим, у вас есть массив \(b\). Изначально у вас также есть множество \(S\), которое содержит все различные элементы массива \(b\). Массив \(b\) называется орангутано-одобренным, если его можно сделать пустым, выполняя следующую операцию:

  • Выбрать индексы \(l\) и \(r\) (\(1 \leq l \leq r \leq |b|\)) такие, что \(v = b_l = b_{l+1} = \ldots = b_r\) и \(v\) присутствует в \(S\). Удалить \(v\) из \(S\), а также удалить все \(b_i\), для которых \(l \leq i \leq r\). Затем подвинуть элементы \(b_{r+1}, b_{r+2}, \ldots\) влево на позиции \(b_l, b_{l+1}, \ldots\) соответственно.

Вам дан массив \(a\) длины \(n\) и \(q\) запросов.

Каждый запрос состоит из двух индексов \(l\) и \(r\) (\(1 \le l \le r \le n\)), и вам нужно определить, является ли подмассив \(a_{l}, a_{l+1}, \ldots, a_r\) орангутано-одобренным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \leq n,q \leq 2 \cdot 10^5\)) — длину \(a\) и количество запросов, соответственно.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — элементы массива \(a\).

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) — концы подмассивов для каждого запроса (\(1 \leq l \leq r \leq n\)).

Гарантируется, что сумма \(n\) и \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите «YES» (без кавычек), если подмассив от \(l\) до \(r\) является орангутано-одобренным, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом запросе первого набора входных данных ответ — YES.

  • Изначально \(S=\{1,2\}\) и \(b=[1,2,2,1]\).
  • Выберите \(l=2\) и \(r=3\). Поскольку \(b_2=b_3=2\) находится в \(S\), мы можем удалить \(b_2\) и \(b_3\) из массива, а также удалить \(2\) из \(S\). Множество \(S\) становится \(\{1\}\), а массив — \([1,1]\).
  • Выберите \(l=1\) и \(r=2\). Поскольку \(b_1=b_2=1\) находится в \(S\), мы можем удалить \(b_1\) и \(b_2\) из массива, а также удалить \(1\) из \(S\). Множество \(S\) становится \(\{\}\), а массив — \([]\).
  • Поскольку массив теперь пуст, мы можем сказать, что исходный массив — орангутано-одобренный

В первом запросе второго набора входных данных ответ — NO, потому что можно показать, что подмассив \([2,1,2,1]\) не может стать пустым ни при какой последовательности корректных операций.

A. Пенчик и современная статуя

дп жадные алгоритмы Конструктив математика *800

Среди небоскребов в шумном городе Манила только что завершилось строительство самого современного на Филиппинах торгового центра Нойф! Руководитель Пенчик заказал строительство ультрасовременной статуи с \(n\) колоннами.

Высоты колонн статуи можно представить в виде массива \(h\) из \(n\) целых положительных чисел, где \(h_i\) — высота \(i\)-й колонны для всех \(i\) от \(1\) до \(n\).

Пенчик хочет, чтобы высоты колонн шли в неубывающем порядке, то есть выполнялось \(h_i \le h_{i + 1}\) для всех \(i\) от \(1\) до \(n - 1\). Однако из-за путаницы памятник был построен так, что высоты колонн находятся в невозрастающем порядке, то есть \(h_i \ge h_{i + 1}\) для всех \(i\) от \(1\) до \(n - 1\).

К счастью, Пенчик может модифицировать памятник и проделать следующую операцию над колоннами столько раз, сколько потребуется:

  • Сделать высоту колонны равной любому целому положительному числу. Формально, выбрать индекс \(1\le i\le n\) и положительное целое число \(x\), а затем присвоить \(h_i := x\).

Помогите Пенчику определить минимальное количество операций, необходимых для того, чтобы высота колонн памятника неубывала.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 50\)) — количество колонн.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le n\) и \(h_i\ge h_{i+1}\)) — высоты колонн.

Обратите внимание, что данный массив \(h\) является невозрастающим.

Заметим, что на сумму \(n\) по всем наборам входных данных не накладываются дополнительные ограничения.

Выходные данные

Для каждого набора входных данных выведите одно целое число, представляющее собой минимальное количество операций, необходимых для того, чтобы высота колонн неубывала.

Примечание

В первом наборе входных данных начальные высоты колонн равны \(h = [5, 4, 3, 2, 1]\).

  • В первой операции Пенчик изменяет высоту колонны \(1\): \(h_1 := 2\).
  • Во второй операции он изменяет высоту колонны \(2\): \(h_2 := 2\).
  • В третьей операции он изменяет высоту колонны \(4\): \(h_4 := 4\).
  • В четвертой операции он изменяет высоту колонны \(5\): \(h_5 := 4\).

После этих операций высоты колонн \(h = [2, 2, 3, 4, 4]\), то есть они неубывают. Можно доказать, что Пенчик не может сделать высоты колонн неубывающими менее чем за \(4\) операции.

Во втором наборе входных данных Пенчик может сделать высоты колонн неубывающими, сделав высоту колонны \(3\) равной \(h_3 := 2\).

В третьем наборе входных данных высоты колонн уже являются неубывающими, поэтому никаких операций не требуется.

D. Пенчик и пустынный кролик

Бинарный поиск дп жадные алгоритмы поиск в глубину и подобное реализация снм Структуры данных *1700

Пенчик бросил себе вызов — выжить под полуденным солнцем в Аравийской пустыне!

На линейном оазисе в ряд растёт \(n\) пальм, обозначим их высоты \(a_i\). Во время прогулки Пенчик заметил пустынного кролика, который готовится прыгнуть вдоль линии пальм.

Кролик может перепрыгнуть с \(i\)-го дерева на \(j\)-е, если верно ровно одно из следующих условий:

  • \(j < i\) и \(a_j > a_i\): кролик может прыгнуть назад на более высокое дерево.
  • \(j > i\) и \(a_j < a_i\): кролик может прыгнуть вперёд на более низкое дерево.

Для каждого \(i\) от \(1\) до \(n\) определите максимальную высоту среди всех деревьев, которые может достичь кролик, если он начнёт с \(i\)-го дерева.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)) — количество деревьев.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — высоты деревьев.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел. \(i\)-е число должно равняться максимальной высоте среди всех деревьев, которые может достичь кролик, если он начнёт с дерева \(i\).

Примечание

В первом наборе входных данных высоты деревьев равны \(a = [2, 3, 1, 4]\).

  • Если кролик стартует с первого дерева, то он может перепрыгнуть на третье дерево, так как \(3 > 1\) и \(1 < 2\). Затем кролик может перепрыгнуть на второе дерево, так как \(2 < 3\) и \(3 > 1\). Можно доказать, что кролик не может допрыгнуть до четвёртого дерева; следовательно, максимальная высота дерева, до которого может допрыгнуть кролик, равна \(a_2 = 3\).
  • Если кролик стартует с четвёртого дерева, ему не нужно никуда прыгать, так как он уже находится на самом высоком дереве.

Во втором наборе входных данных кролик может прыгнуть на первое дерево независимо от того, с какого дерева он стартует.

В пятом наборе входных данных, если кролик начинает с пятого дерева, он может прыгнуть на четвёртое дерево. Затем кролик может перепрыгнуть на седьмое дерево и, наконец, достичь шестого дерева. Таким образом, максимальная высота дерева, до которого может добраться кролик, равна \(8\).

E. Деревья Пенчика и Хлои

Деревья дп жадные алгоритмы математика поиск в глубину и подобное реализация сортировки Структуры данных *2100

До отъезда Пенчика и Хлои в Сингапур оставалось всего несколько часов, и им не терпелось увидеть высоченные деревья в Сингапурском ботаническом саду! Пытаясь сдержать свое волнение, Пенчик смастерил дерево с корнями, чтобы занять Хлою и себя.

У Пенчика есть корневое дерево\(^{\text{∗}}\), состоящее из \(n\) вершин, пронумерованных от \(1\) до \(n\), с вершиной \(1\) в качестве корня. Хлоя может выбрать целое неотрицательное число \(d\), чтобы создать совершенное бинарное дерево\(^{\text{†}}\) глубины \(d\).

Поскольку Пенчик и Хлоя — хорошие друзья, Хлоя хочет, чтобы ее дерево было изоморфно\(^{\text{‡}}\) дереву Пенчика. Чтобы достичь этого, Хлоя может выполнить следующую операцию над своим деревом любое количество раз:

  • Выбрать ребро \((u,v)\), где \(u\) является родителем \(v\).
  • Удалить вершину \(v\) и все ребра, связанные с \(v\), а затем соединить всех бывших детей \(v\) непосредственно с \(u\).

В частности, операция над ребром \((u, v)\), где \(v\) — лист, удалит вершину \(v\) без добавления новых ребер.

Поскольку построение совершенного бинарного дерева может занять много времени, Хлоя хочет выбрать минимальное \(d\), такое, чтобы совершенное бинарное дерево глубины \(d\) можно было сделать изоморфным дереву Пенчика с помощью вышеописанной операции. Обратите внимание, что Хлоя не может менять корни деревьев.

\(^{\text{∗}}\)Деревом называется связный граф без циклов. Корневым деревом называется дерево, в котором одна из вершин специальная и называется корнем. Родителем вершины \(v\) называется первая вершина на простом пути от \(v\) до корня. У корня нет родителя. Ребенком вершины \(v\) называется любая вершина \(u\), для которой \(v\) является родителем. Листом называется любая вершина, у которой нет детей.

\(^{\text{†}}\)Полным бинарным деревом называется корневое дерево, в котором у каждой вершины \(0\) или \(2\) детей. Совершенное бинарное дерево — это полное бинарное дерево, в котором каждый лист находится на одинаковом расстоянии от корня. Глубина такого дерева равна расстоянию от корня до листа.

\(^{\text{‡}}\)Два дерева с корнями, равными \(r_1\) и \(r_2\) соответственно, считаются изоморфными, если существует такая перестановка вершин \(p\), что ребро \((u, v)\) существует в первом дереве тогда и только тогда, когда ребро \((p_u, p_v)\) существует во втором дереве, и \(p_{r_1} = r_2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^6\)) — количество вершин в дереве Пенчика.

Вторая строка каждого набора входных данных содержит \(n-1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \leq p_i \leq i-1\)) — родитель вершины \(i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число: минимальную глубину совершенного бинарного дерева Хлои.

Примечание

В первом наборе входных данных можно создать совершенное бинарное дерево глубины \(2\).

Рассмотрим выполнение операции на ребре \(AC\). Рёбра \(AC\), \(CF\) и \(CG\) удаляются, а рёбра \(AF\) и \(AG\) добавляются.

Полученное дерево изоморфно дереву, заданному на входе. Можно доказать, что никакая последовательность операций над бинарным деревом глубины менее \(2\) не может привести к дереву, изоморфному дереву, заданному на входе.

Во втором наборе входных данных дерево уже изоморфно совершенному бинарному дереву глубины \(3\).

F. Арахис

дп игры Комбинаторика математика *2700

Имея волшебную бобовую палку, Джек в последнее время собирал много арахисов. В конечном итоге он получил \(n\) мешков с арахисом, удобно пронумерованных от \(1\) до \(n\) слева направо. В \(i\)-м мешке находится \(a_i\) арахисов.

Джек и его подруга детства Алиса решили сыграть в игру с арахисом. Сначала Алиса делит мешки на несколько коробок; каждая коробка будет содержать ненулевое количество последовательных мешков, и каждый мешок, очевидно, будет лежать в ровно одной коробке. При этом Алиса не меняет порядок коробок, то есть коробки пронумерованы в порядке возрастания номеров мешков в них.

После этого Алиса и Джек будут по очереди делать ходы, при этом Алиса ходит первой.

На каждом ходе текущий игрок будет забирать положительное количество арахисов из ровно одного мешка, который лежит в самой левой непустой коробке (т.е. самой левой коробке, содержащей хотя бы один непустой мешок). Другими словами, если мы пронумеруем коробки слева направо, то каждый игрок может забирать арахисы из мешка в \(j\)-й коробке (\(j \ge 2\)) только в том случае, если в \((j - 1)\)-й коробке не осталось арахисов. Игрок, который не может сделать допустимый ход, проигрывает.

Алиса уверена, что она выиграет, так как у нее есть преимущество в том, что она сама делит мешки на коробки. Она хочет знать, сколько существует способов разделить мешки на коробки в начале игры, чтобы она выиграла, предполагая, что оба игрока играют оптимально. Можете помочь ей с расчетами?

Поскольку результат может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)) — количество мешков.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — количество арахисов в каждом мешке.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество способов для Алисы разделить мешки на коробки в начале игры, чтобы гарантировать ее победу, предполагая, что оба игрока играют оптимально, по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных единственный способ для Алисы выиграть — это разделить мешки на две коробки следующим образом: \(([1, 2], [3])\) (первая коробка содержит первые два мешка, а вторая коробка содержит третий мешок). Алиса выигрывает, забирая оба арахиса из второго мешка, оставляя Джеку \(([1], [3])\). Джек вынужден забрать единственный оставшийся арахис в первой коробке, что позволяет Алисе забрать оставшиеся в второй коробке.

Во втором наборе входных данных выигрышные разделения для Алисы — это \(([1], [2, 3, 1])\), \(([1, 2, 3, 1])\), \(([1, 2], [3], [1])\) и \(([1, 2], [3, 1])\).

В третьем наборе входных данных Алиса всегда выигрывает, независимо от того, как она разделяет мешки на коробки.

В четвертом наборе входных данных Алиса всегда проигрывает, независимо от того, как она разделяет мешки на коробки.

C. Экскурсия Сакурако

дп жадные алгоритмы *1400

Даже в университете студентам нужно отдыхать. Именно поэтому учитель Сакурако решил организовать экскурсию. Известно, что все студенты будут идти в одну линию.

Студент с индексом \(i\) имеет некоторую тему интереса, которая описывается как \(a_i\). Как учитель, вы хотите минимизировать отвлечение в линии студентов.

Отвлечение линии определяется как количество соседей с одинаковой темой интереса. Другими словами, отвлечение — это количество индексов \(j\) (\(1 \le j < n\)), таких что \(a_j = a_{j + 1}\).

Чтобы сделать это, вы можете выбрать индекс \(i\) (\(1\le i\le n\)) и поменять местами студентов на позициях \(i\) и \(n-i+1\). Вы можете выполнять любое количество обменов.

Ваша задача — определить минимальное отвлечение, которое вы можете достичь, выполняя описанную выше операцию любое количество раз.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных описывается двумя строками.

  • Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — длина линии студентов.
  • Вторая строка содержит \(n\) целых чисел \(a_i\) (\(1\le a_i\le n\)) — темы интереса студентов в линии.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимально возможное отвлечение линии, которое вы можете достичь.

Примечание

В первом примере нужно применить операцию к \(i=2\), таким образом массив станет равен \([1, \textbf{2}, 1, \textbf{1}, 3]\), жирным выделены элементы, которые поменялись местами. Отвлечение этого массива равна \(1\).

В четвёртом примере достаточно применить операцию к \(i=3\), таким образом массив станет равен \([2, 1, \textbf{2}, \textbf{1}, 2, 4]\). Отвлечение этого массива равна \(0\).

В восьмом примере достаточно применить операцию к \(i=3\), таким образом массив станет равен \([1, 4, \textbf{1}, 5, \textbf{3}, 1, 3]\). Отвлечение этого массива равна \(0\).

D. Задание Косукэ

дп жадные алгоритмы математика снм Структуры данных *1300

После поездки с Сакурако Косукэ очень испугался, потому что забыл о своем задании по программированию. В этом задании учитель дал ему массив \(a\) из \(n\) целых чисел и попросил вычислить количество непересекающихся отрезков массива \(a\), таких что каждый отрезок считается красивым.

Отрезок \([l,r]\) считается красивым, если \(a_l + a_{l+1} + \dots + a_{r-1} + a_r=0\).

Для фиксированного массива \(a\) ваша задача состоит в том, чтобы вычислить максимальное количество непересекающихся красивых сегментов.

Входные данные

Первая строка входных данных содержит число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Каждый набор состоит из \(2\) строк.

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину массива.
  • Вторая строка содержит \(n\) целых чисел \(a_i\) (\(-10^5 \le a_i \le 10^5\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3\cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число: максимальное количество непересекающихся красивых отрезков.

G. Сакурако и Чефир

Деревья дп жадные алгоритмы поиск в глубину и подобное Структуры данных *2200

Дано дерево из \(n\) вершин с корнем в вершине \(1\). Гуляя по нему со своим котом Чефиром, Сакурако отвлеклась, и Чефир убежал.

Чтобы помочь Сакурако, Косукэ записал свои \(q\) предположений. В \(i\)-м предположении он считает, что Чефир потерялся в вершине \(v_i\) и имел \(k_i\) выносливости.

Также для каждого предположения Косукэ считает, что Чефир мог переместиться по рёбрам произвольное число раз:

  • из вершины \(a\) в вершину \(b\), если \(a\) является предком\(^{\text{∗}}\) \(b\), выносливость от этого не изменится;
  • из вершины \(a\) в вершину \(b\), если \(a\) не является предком \(b\), тогда выносливость Чефира понизится на \(1\).

Если выносливость Чефира равна \(0\), то он не сможет сделать перемещение второго типа.

Для каждого предположения ваша задача — вычислить расстояние до самой дальней вершины, в которую Чефир мог уйти от вершины \(v_i\), имея \(k_i\) выносливости.

\(^{\text{∗}}\)Вершина \(a\) является предком вершины \(b\), если кратчайший путь от \(b\) к корню проходит через \(a\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных описывается следующим образом:

  • Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.
  • Следующие \(n-1\) строки содержат ребра дерева. Гарантируется, что заданные ребра образуют дерево.
  • Следующая строка состоит из одного целого числа \(q\) \((1\le q\le 2 \cdot 10^5)\), которое обозначает количество предположений Косукэ.
  • Следующие \(q\) строк описывают предположения, которые сделал Косукэ, двумя целыми числами \(v_i\), \(k_i\) \((1\le v_i \le n, 0 \le k_i\le n)\).

Гарантируется, что сумма \(n\) и сумма \(q\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого теста и для каждого предположения выведите расстояние до самой дальней вершины, в которую Чефир мог пройти от начальной точки \(v_i\) имея \(k_i\) выносливости.

Примечание

В первом примере:

  • В первом запросе можно пройти из вершины \(5\) в вершину \(3\) (после этого выносливость уменьшится на \(1\) и станет равна \(0\)), после этого можно пройти в вершину \(4\);
  • Во втором запросе из вершины \(3\) имея \(1\) выносливости можно добраться только до вершин \(2\), \(3\), \(4\) и \(5\);
  • В третьем запросе из вершины \(2\) имея \(0\) выносливости можно добраться только до вершин \(2\), \(3\), \(4\) и \(5\);

F1. Хайям и Королевский указ (простая версия)

дп Комбинаторика математика сортировки *2500

Это простая версия задачи. В двух версиях отличаются ограничения на \(k\) и на сумму \(k\).

В древней Персии Хайям, умный купец и математик, играет в игру со своим драгоценным сундуком с сокровищами. Сундук содержит \(n\) красных рубинов стоимостью \(2\) динара каждый и \(m\) синих сапфиров стоимостью \(1\) динар каждый. У него также есть мешок, в котором изначально ничего нет, и \(k\) свитков с парами \((r_1, b_1), (r_2, b_2), \ldots, (r_k, b_k)\), описывающими особые состояния.

Игра состоит из \(n + m\) таких ходов:

  1. Хайям случайно равновероятно достает драгоценный камень из сундука.
  2. Он кладет данный камень в свой мешок.
  3. Если существует свиток \(i\) (\(1 \leq i \leq k\)), для которого в сундуке находятся ровно \(r_i\) красных рубинов и \(b_i\) синих сапфиров, то по королевскому указу стоимость всех драгоценных камней в его мешке удваивается в качестве награды за достижение особого состояния.

Обратите внимание, что стоимость некоторых драгоценных камней может быть изменена несколькими указами, и тогда она удваивается несколько раз.

Определите математическое ожидание стоимости камней в мешке Хайяма в конце игры по модулю \(998,244,353\).

Формально, пусть \(M = 998,244,353\). Можно показать, что точный ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), и \(k\) (\(1 \leq n, m \leq 2 \cdot 10^5\), \(0 \leq k \leq 500\)) — количество красных рубинов, количество синих сапфиров и количество свитков, описывающих особые состояния, соответственно.

Каждая из следующих \(k\) строк содержит по два целых числа \(r_i\), \(b_i\) (\(0 \leq r_i \leq n\), \(0 \leq b_i \leq m\), \(1 \leq r_i + b_i \leq n+m-1\)). Гарантируется, что все пары \((r_i, b_i)\) различны.

Гарантируется, что и сумма \(n\), и сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\), а сумма \(k\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: математическое ожидание стоимости камней в мешке Хайяма в конце процесса по модулю \(998,244,353\).

Примечание

В первом наборе входных данных, в конце процесса всегда будет \(3\) красных рубина и \(4\) синих сапфира. Ни одно из особых состояний, описанных в свитках, не соблюдено, поэтому стоимость мешка Хайяма остается неизменной. Общая стоимость мешка в конце всегда равна \(2 \cdot 3 + 1 \cdot 4 = 10\).

Во втором наборе входных данных рассмотрим два случая:

  • С вероятностью \(1/2\) Хайям вытянет красный рубин, и стоимость его мешка станет равна \(2\). Затем, с вероятностью \(1\) он вытянет синий сапфир, и стоимость его мешка станет равной \(3\).
  • С вероятностью \(1/2\) Хайям вытянет синий сапфир, и стоимость его мешка станет равной \(1\). На данный момент в сундуке находятся \(r_1 = 1\) красный рубин и \(b_1 = 0\) синих сапфиров, что соответствует особому состоянию, описанному в свитке. В результате стоимость мешка удваивается до \(2 \cdot 1 = 2\). Затем, с вероятностью \(1\), он вытянет красный рубин, и стоимость его мешка возрастёт до \(4\).

Таким образом, ожидаемая стоимость в конце равна \(\frac{1}{2} \cdot 3 + \frac{1}{2} \cdot 4 = \frac{7}{2}\), что равно \(499,122,180\) по модулю \(998,244,353\).

F2. Хайям и Королевский указ (сложная версия)

дп Комбинаторика математика сортировки *2800

Это сложная версия задачи. В двух версиях отличаются ограничения на \(k\) и на сумму \(k\).

В древней Персии Хайям, умный купец и математик, играет в игру со своим драгоценным сундуком с сокровищами. Сундук содержит \(n\) красных рубинов стоимостью \(2\) динара каждый и \(m\) синих сапфиров стоимостью \(1\) динар каждый. У него также есть мешок, в котором изначально ничего нет, и \(k\) свитков с парами \((r_1, b_1), (r_2, b_2), \ldots, (r_k, b_k)\), описывающими особые состояния.

Игра состоит из \(n + m\) таких ходов:

  1. Хайям случайно равновероятно достает драгоценный камень из сундука.
  2. Он кладет данный камень в свой мешок.
  3. Если существует свиток \(i\) (\(1 \leq i \leq k\)), для которого в сундуке находятся ровно \(r_i\) красных рубинов и \(b_i\) синих сапфиров, то по королевскому указу стоимость всех драгоценных камней в его мешке удваивается в качестве награды за достижение особого состояния.

Обратите внимание, что стоимость некоторых драгоценных камней может быть изменена несколькими указами, и тогда она удваивается несколько раз.

Определите математическое ожидание стоимости камней в мешке Хайяма в конце игры по модулю \(998,244,353\).

Формально, пусть \(M = 998,244,353\). Можно показать, что точный ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), и \(k\) (\(1 \leq n, m \leq 2 \cdot 10^5\), \(0 \leq k \leq 5000\)) — количество красных рубинов, количество синих сапфиров и количество свитков, описывающих особые состояния, соответственно.

Каждая из следующих \(k\) строк содержит по два целых числа \(r_i\), \(b_i\) (\(0 \leq r_i \leq n\), \(0 \leq b_i \leq m\), \(1 \leq r_i + b_i \leq n+m-1\)). Гарантируется, что все пары \((r_i, b_i)\) различны.

Гарантируется, что и сумма \(n\), и сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\), а сумма \(k\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: математическое ожидание стоимости камней в мешке Хайяма в конце процесса по модулю \(998,244,353\).

Примечание

В первом наборе входных данных, в конце процесса всегда будет \(3\) красных рубина и \(4\) синих сапфира. Ни одно из особых состояний, описанных в свитках, не соблюдено, поэтому стоимость мешка Хайяма остается неизменной. Общая стоимость мешка в конце всегда равна \(2 \cdot 3 + 1 \cdot 4 = 10\).

Во втором наборе входных данных рассмотрим два случая:

  • С вероятностью \(1/2\) Хайям вытянет красный рубин, и стоимость его мешка станет равна \(2\). Затем, с вероятностью \(1\) он вытянет синий сапфир, и стоимость его мешка станет равной \(3\).
  • С вероятностью \(1/2\) Хайям вытянет синий сапфир, и стоимость его мешка станет равной \(1\). На данный момент в сундуке находятся \(r_1 = 1\) красный рубин и \(b_1 = 0\) синих сапфиров, что соответствует особому состоянию, описанному в свитке. В результате стоимость мешка удваивается до \(2 \cdot 1 = 2\). Затем, с вероятностью \(1\), он вытянет красный рубин, и стоимость его мешка возрастёт до \(4\).

Таким образом, ожидаемая стоимость в конце равна \(\frac{1}{2} \cdot 3 + \frac{1}{2} \cdot 4 = \frac{7}{2}\), что равно \(499,122,180\) по модулю \(998,244,353\).

H. Райан против Райанех

дп Перебор поиск в глубину и подобное теория чисел *3300

Райан прилагает последние усилия, чтобы завоевать сердце Рейхане, утверждая, что он сильнее Райанех (то есть компьютера на персидском). Чтобы проверить это, Рейхане обращается за помощью к Хорезми. Хорезми объясняет, что множество является целочисленно линейно независимым, если ни один элемент в наборе не может быть получен как целочисленная линейная комбинация остальных. Райану задается набор целых чисел, и он должен найти одно из максимально возможных целочисленных линейно независимых подмножеств.

Обратите внимание, что один элемент всегда является целочисленным линейно независимым подмножеством.

Целочисленная линейная комбинация чисел \(a_1, \ldots, a_k\) — это любая сумма вида \(c_1 \cdot a_1 + c_2 \cdot a_2 + \ldots + c_k \cdot a_k\) где \(c_1, c_2, \ldots, c_k\) — целые числа (которые могут быть нулевыми, положительными или отрицательными).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 10^5\)) — размер множества. Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^5\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^6\).

Выходные данные

В первой строке каждого набора входных данных выведите размер наибольшего целочисленного линейно независимого подмножества.

В следующей строке выведите одно такое подмножество. Если существует несколько ответов, выведите любой из них.

Примечание

В 1 наборе входных данных: \(\{4, 6\}\) — это целочисленное линейно независимое подмножество. Можно доказать, что не существует целочисленного линейно независимого подмножества, состоящего по крайней мере \(3\) из элементов.

Во 2 наборе входных данных: \(\{35, 21, 30\}\) — это целочисленное линейно независимое подмножество, поскольку никакая целочисленная линейная комбинация любых двух элементов не может создать третий. Не существует целочисленного линейно независимого подмножества, содержащего по крайней мере \(4\) элемента.

В 3 наборе входных данных: \(\{2, 3, 6\}\) не является целочисленным линейно независимым подмножеством, поскольку \(6\) может быть записано как \(6 \cdot 2 + (-2) \cdot 3\), что является целочисленной линейной комбинацией из \(\{2, 3\}\).

F. Операции с деревом

Бинарный поиск Деревья дп Перебор поиск в глубину и подобное *2500

Это многое говорит об обществе.

Однажды черепаха подарила вам дерево с \(n\) вершинами и корнем в вершине \(x\). Вершина \(i\) имеет начальное целое неотрицательное значение \(a_i\).

Вы хотите сделать так, чтобы значения всех вершин стали равны \(0\). Для этого вы выполните ряд операций над деревом, где каждая операция будет выполняться над определенной вершиной. Определим операцию над вершиной \(u\) как выбор одной вершины в поддереве\(^{\text{∗}}\) \(u\), и увеличение или уменьшение ее значения на \(1\). Порядок выполнения операций над вершинами следующий:

  • Для \(1 \le i \le n\), \(i\)-я операция будет выполнена над вершиной \(i\).
  • Для \(i > n\), \(i\)-я операция будет выполнена над той же вершиной, что и операция \(i - n\).

Более формально, \(i\)-я операция будет выполнена над \((((i - 1) \bmod n) + 1)\)-й вершиной.\(^{\text{†}}\)

Обратите внимание, что нельзя пропускать операции; то есть нельзя выполнить \(i\)-ю операцию, не выполнив сначала операции \(1, 2, \ldots, i - 1\).

Найдите минимальное количество операций, которое необходимо выполнить, чтобы значения всех вершин стали равны \(0\), при условии, что вы выполняете операции оптимально. Если после конечного числа операций невозможно сделать значения всех вершин равными \(0\), выведите \(-1\).

\(^{\text{∗}}\)Поддерево вершины \(u\) — это множество вершин, для которых \(u\) лежит на кратчайшем пути от этой вершины до корня, включая саму \(u\)

\(^{\text{†}}\)Здесь \(a \bmod b\) обозначает остаток от деления \(a\) на \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 2000\), \(1 \le x \le n\)) — количество вершин и корень дерева.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — начальное значение каждой вершины.

В следующих \(n - 1\) строках каждого набора входных данных содержится по два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)), представляющих собой ненаправленное ребро из \(u\) в \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число, обозначающее минимальное количество операций, необходимое для того, чтобы сделать значения всех вершин равными \(0\). Если невозможно сделать значения всех вершин равными \(0\), выведите \(-1\).

Примечание

В первом наборе входных данных вы можете выполнить следующую последовательность операций:

  • На \(1\) операции уменьшите значение вершины \(1\). Эта операция корректна, потому что \((((1 - 1) \bmod n) + 1) = 1\), и вершина \(1\) находится в поддереве вершины \(1\).
  • На \(2\) операции уменьшите значение вершины \(2\). Эта операция корректна, потому что \((((2 - 1) \bmod n) + 1) = 2\), и вершина \(2\) находится в поддереве вершины \(2\).
  • На \(3\) операции уменьшите значение вершины \(2\). Эта операция корректна, потому что \((((3 - 1) \bmod n) + 1) = 1\), а вершина \(2\) находится в поддереве вершины \(1\).

G1. Учись! (простая версия)

Деревья дп *3300

Это простая версия задачи. Различия между версиями заключаются в ограничениях на \(n\) и сумму \(n\). В этой версии \(n \leq 3000\), а сумма \(n\) не превосходит \(10^4\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Так-так-так, посмотрим, как Бесси распоряжается своими финансами. Похоже, она в финансовой яме! К счастью, чтобы решить эту проблему, она устраивается на работу в Moogle. Собеседования в Moogle требуют глубокого знания непонятных алгоритмов и сложных структур данных, но Бесси получила от легендарного гроссмейстера наводку на то, что именно ей нужно изучить.

Бесси написала следующий код для бинарного поиска определенного элемента \(k\) в возможно несортированном массиве \([a_1, a_2,\ldots,a_n]\) с \(n\) элементами.

let l = 1
let h = n

while l < h:
let m = floor((l + h) / 2)

if a[m] < k:
l = m + 1
else:
h = m

return l

Бесси отправила свой код в задачу фермера Джона с \(m\) (\(1 \leq m \leq n\)) тестами. \(i\)-й тест имеет вид \((x_i, k_i)\) (\(1 \leq x, k \leq n\)). Гарантируется, что все \(x_i\) различны и все \(k_i\) различны.

Тест \(i\) корректен, если выполняются следующие условия:

  1. \(x_i\)-й элемент в массиве — \(k_i\).
  2. Если Бесси вызовет двоичный поиск, как показано в коде выше, для \(k_i\), то он вернет \(x_i\).

Возможно, не все \(m\) тестов будут корректны на одном и том же массиве, поэтому фермер Джон удалит некоторые из них, чтобы Бесси могла пройти все тесты. Пусть \(r\) — это минимальное количество тестов, которое нужно удалить, чтобы существовал массив \([a_1, a_2,\ldots,a_n]\), в котором \(1 \leq a_i \leq n\), чтобы все оставшиеся тесты были корректными.

Помимо нахождения \(r\), фермер Джон хочет, чтобы вы подсчитали количество массивов \([a_1, a_2,\ldots,a_n]\), в которых \(1 \leq a_i \leq n\), таких, что существует способ удалить ровно \(r\) тестов так, чтобы все оставшиеся тесты были корректными. Поскольку это число может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq m \leq n \leq 3000\)), обозначающих длину массива и количество тестов.

Следующие \(m\) строк содержат по два целых числа, описывающих тесты. В \(i\)-й строке содержится два целых числа \(x_i\) и \(k_i\) (\(1 \leq x_i, k_i \leq n\)), обозначающих индекс и значение данного теста. Гарантируется, что все \(x_i\) различны и все \(k_i\) различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите два целых числа: \(r\) — минимальное количество удаленных тестов, чтобы существовал массив, в котором все оставшиеся тесты корректны; и количество массивов, для которых можно удалить \(r\) тестов, чтобы все оставшиеся тесты были корректны, по модулю \(998\,244\,353\).

Примечание

Рассмотрим первый пример.

В первом наборе входных данных массив \([1,2,2,3,4]\) удовлетворяет всем \(m\) тестам, поэтому минимальное количество тестов, которые должна удалить Бесси, равно \(0\). Обратите внимание, что это также единственный массив, который удовлетворяет всем \(m\) тестам.

Во втором наборе входных данных минимальное количество тестов, которое Бесси должна удалить, равняется \(1\). Единственный тест, который Бесси может удалить, это \((2,5)\). Если Бесси удалит тест \((2,5)\), то массивами, удовлетворяющими оставшимся \(m-1\) тестам, будут \([2,2,3,1,4]\), \([2,2,3,2,4]\), \([2,2,3,3,4]\).

G2. Учись! (сложная версия)

дп разделяй и властвуй *3500

Это сложная версия задачи. Различия между версиями заключаются в ограничениях на \(n\) и сумму \(n\). В этой версии \(n \leq 3\cdot 10^5\), а сумма \(n\) не превосходит \(10^6\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Так-так-так, посмотрим, как Бесси распоряжается своими финансами. Похоже, она в финансовой яме! К счастью, чтобы решить эту проблему, она устраивается на работу в Moogle. Собеседования в Moogle требуют глубокого знания непонятных алгоритмов и сложных структур данных, но Бесси получила от легендарного гроссмейстера наводку на то, что именно ей нужно изучить.

Бесси написала следующий код для бинарного поиска определенного элемента \(k\) в возможно несортированном массиве \([a_1, a_2,\ldots,a_n]\) с \(n\) элементами.

let l = 1
let h = n

while l < h:
let m = floor((l + h) / 2)

if a[m] < k:
l = m + 1
else:
h = m

return l

Бесси отправила свой код в задачу фермера Джона с \(m\) (\(1 \leq m \leq n\)) тестами. \(i\)-й тест имеет вид \((x_i, k_i)\) (\(1 \leq x, k \leq n\)). Гарантируется, что все \(x_i\) различны и все \(k_i\) различны.

Тест \(i\) корректен, если выполняются следующие условия:

  1. \(x_i\)-й элемент в массиве — \(k_i\).
  2. Если Бесси вызовет двоичный поиск, как показано в коде выше, для \(k_i\), то он вернет \(x_i\).

Возможно, не все \(m\) тестов будут корректны на одном и том же массиве, поэтому фермер Джон удалит некоторые из них, чтобы Бесси могла пройти все тесты. Пусть \(r\) — это минимальное количество тестов, которое нужно удалить, чтобы существовал массив \([a_1, a_2,\ldots,a_n]\), в котором \(1 \leq a_i \leq n\), чтобы все оставшиеся тесты были корректными.

Помимо нахождения \(r\), фермер Джон хочет, чтобы вы подсчитали количество массивов \([a_1, a_2,\ldots,a_n]\), в которых \(1 \leq a_i \leq n\), таких, что существует способ удалить ровно \(r\) тестов так, чтобы все оставшиеся тесты были корректными. Поскольку это число может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq m \leq n \leq 3 \cdot 10^5\)), обозначающих длину массива и количество тестов.

Следующие \(m\) строк содержат по два целых числа, описывающих тесты. В \(i\)-й строке содержится два целых числа \(x_i\) и \(k_i\) (\(1 \leq x_i, k_i \leq n\)), обозначающих индекс и значение данного теста. Гарантируется, что все \(x_i\) различны и все \(k_i\) различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите два целых числа: \(r\) — минимальное количество удаленных тестов, чтобы существовал массив, в котором все оставшиеся тесты корректны; и количество массивов, для которых можно удалить \(r\) тестов, чтобы все оставшиеся тесты были корректны, по модулю \(998\,244\,353\).

Примечание

Рассмотрим первый пример.

В первом наборе входных данных массив \([1,2,2,3,4]\) удовлетворяет всем \(m\) тестам, поэтому минимальное количество тестов, которые должна удалить Бесси, равно \(0\). Обратите внимание, что это также единственный массив, который удовлетворяет всем \(m\) тестам.

Во втором наборе входных данных минимальное количество тестов, которое Бесси должна удалить, равняется \(1\). Единственный тест, который Бесси может удалить, это \((2,5)\). Если Бесси удалит тест \((2,5)\), то массивами, удовлетворяющими оставшимся \(m-1\) тестам, будут \([2,2,3,1,4]\), \([2,2,3,2,4]\), \([2,2,3,3,4]\).

F. XORофикатор 3000

битмаски дп теория чисел *1900

Алиса уже много лет дарит подарки Бобу, а потому знает, что больше всего ему нравится делать побитовый XOR интересных чисел, при этом интересными Боб считает такие целые положительные числа \(x\), для которых выполнено \(x \not\equiv k (\bmod 2^i)\). Поэтому в этом году на его очередной день рождения она подарила ему сверхмощный «XORофикатор 3000», самую последнюю модель.

Бобу подарок очень понравился, ведь благодаря нему он мог мгновенно делать XOR всех интересных чисел на любом отрезке от \(l\) до \(r\) включительно, а что, в самом деле, ещё нужно человеку для счастья? Но, к сожалению, прибор оказался настолько мощным, что в какой-то момент сделал XOR с самим собой и исчез. Боб был очень расстроен, и Алиса, чтобы хоть как-то подбодрить его, попросила вас написать свою версию «XORофикатора».

Входные данные

Первая строка входных данных содержит одно целое число \(t\) \((1 \leq t \leq 10^4)\) — количество запросов XOR на отрезке. Далее следуют ровно \(t\) строчек запросов, состоящих из чисел \(l\), \(r\), \(i\), \(k\) \((1 \leq l \leq r \leq 10^{18}\), \(0 \leq i \leq 30\), \(0 \leq k < 2^i)\).

Выходные данные

Для каждого запроса выведите одно число — XOR всех чисел \(x\) на отрезке \([l, r]\) таких, что \(x \not\equiv k \mod 2^i\).

Примечание

В первом запросе на отрезке \([1, 3]\) интересными являются числа \(1\) и \(3\), поэтому ответом будет число \(1 \oplus 3 = 2\).

E. Любимая двоичная строка Качины

дп жадные алгоритмы интерактив *1600

Это интерактивная задача.

Качина бросает вам вызов угадать её любимую двоичную строку\(^{\text{∗}}\) \(s\) длины \(n\). Она определяет \(f(l, r)\) как количество подпоследовательностей\(^{\text{†}}\) \(\texttt{01}\) в \(s_l s_{l+1} \ldots s_r\). Две подпоследовательности считаются различными, если они образованы путём удаления символов из разных позиций в исходной строке, даже если получившиеся подпоследовательности состоят из одних и тех же символов.

Чтобы определить \(s\), вы можете задать ей несколько вопросов. В каждом вопросе вы можете выбрать два индекса \(l\) и \(r\) (\(1 \leq l < r \leq n\)) и спросить её о значении \(f(l, r)\).

Определите и выведите \(s\), задав Качине не более \(n\) вопросов. Однако может случиться так, что \(s\) невозможно определить. В этом случае вам нужно будет вывести \(\texttt{IMPOSSIBLE}\) вместо этого.

Формально, \(s\) считается невозможно определить, если после того, как вы задали \(n\) вопросов, всегда существует несколько возможных строк для \(s\), независимо от того, какие вопросы задаются. Обратите внимание, что если вы сообщите \(\texttt{IMPOSSIBLE}\) в то время, когда существует последовательность из не более чем \(n\) запросов, которая уникально определит двоичную строку, вы получите вердикт Неправильный ответ.

\(^{\text{∗}}\)Двоичная строка содержит только символы \(\texttt{0}\) и \(\texttt{1}\).

\(^{\text{†}}\)Последовательность \(a\) является подпоследовательностью последовательности \(b\), если \(a\) может быть получена из \(b\) путём удаления нескольких (возможно, нуля или всех) элементов. Например, подпоследовательностями \(\mathtt{1011101}\) являются \(\mathtt{0}\), \(\mathtt{1}\), \(\mathtt{11111}\), \(\mathtt{0111}\), но не \(\mathtt{000}\) и не \(\mathtt{11100}\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 10^4\)) — длина \(s\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^4\).

Протокол взаимодействия

Чтобы задать вопрос, выведите строку в следующем формате (не включайте кавычки)

  • «\(\texttt{? l r}\)» (\(1 \leq l < r \leq n\))
Жюри вернёт целое число \(f(l, r)\).

Когда вы будете готовы напечатать ответ, выведите одну строку в следующем формате

  • Если \(s\) невозможно определить, выведите «\(\texttt{! IMPOSSIBLE}\)»
  • В противном случае выведите «\(\texttt{! s}\)»

После этого продолжайте обрабатывать следующий набор входных данных или завершите программу, если это был последний набор входных данных. Печать ответа не считается запросом.

Интерактор не адаптивен, что означает, что ответ известен до того, как участник задаст запросы и не зависит от заданных участником запросов.

Если ваша программа делает более \(n\) запросов для одного набора входных данных, ваша программа должна немедленно завершиться, чтобы получить вердикт Неправильный ответ. В противном случае вы можете получить произвольный вердикт, потому что ваше решение продолжит читать из закрытого потока.

После печати запроса не забудьте вывести конец строки и сбросить вывод. В противном случае вы можете получить вердикт Превышен лимит бездействия. Для этого используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы сделать Взлом, используйте следующий формат.

Первая строка должна содержать одно целое число \(t\) (\(1 \leq t \leq 10^3\)) – количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать целое число \(n\) (\(2 \leq n \leq 10^4\)) — длина \(s\).

Следующая строка должна содержать \(s\), двоичную строку длины \(n\).

Сумма \(n\) по всем наборам входных данных не должна превышать \(10^4\).

Примечание

В первом наборе входных данных:

В первом запросе вы спрашиваете Качину о значении \(f(1, 5)\), и она отвечает \(4\) в потоке ввода.

Во втором запросе вы спрашиваете Качину о значении \(f(2, 4)\). Поскольку в строке \(\texttt{100}\) нет подпоследовательностей \(\texttt{01}\), она отвечает \(0\) в потоке ввода.

После того, как вы задали \(4\) вопроса, вы сообщаете \(\texttt{01001}\) как \(s\), и это правильно.

Во втором наборе входных данных:

В первом запросе вы спрашиваете Качину о значении \(f(1, 2)\), и она отвечает \(0\) в потоке ввода. Обратите внимание, что это единственный различный вопрос, который вы можете задать.

Однако обратите внимание, что строки \(00\) и \(11\) обе имеют ответ \(0\), и невозможно различить между ними. Поэтому мы сообщаем IMPOSSIBLE.

Обратите внимание, что этот пример служит только для демонстрации формата взаимодействия. Он не гарантирует, что предоставленные запросы являются оптимальными или однозначно определяют ответ. Тем не менее, можно показать, что существует последовательность из не более чем \(5\) запросов, которая однозначно определяет пример теста \(1\).

G. Исследование Натлана

битмаски дп Комбинаторика математика Структуры данных теория чисел *2000

Вы исследуете потрясающий регион Натлан! Этот регион состоит из \(n\) городов, и каждый город имеет рейтинг привлекательности \(a_i\). Направленное ребро существует от города \(i\) к городу \(j\) тогда и только тогда, когда \(i < j\) и \(\gcd(a_i,a_j)\neq 1\), где \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) целых чисел \(x\) и \(y\).

Начав с города \(1\), ваша задача — определить общее количество различных путей, которыми вы можете добраться до города \(n\), по модулю \(998\,244\,353\). Два пути различны тогда и только тогда, когда множество посещённых городов различно.

Входные данные

Первая строка содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество городов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(2 \leq a_i \leq 10^6\)) — привлекательность каждого города.

Выходные данные

Выведите общее количество различных путей, которыми вы можете добраться до города \(n\), по модулю \(998\,244\,353\).

Примечание

В первом примере пять путей следующие:

  • Город \(1\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(2\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(2\rightarrow\) Город \(3\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(2\rightarrow\) Город \(4\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(4\rightarrow\) Город \(5\)

Во втором примере два пути следующие:

  • Город \(1\rightarrow\) Город \(3\rightarrow\) Город \(5\)
  • Город \(1\rightarrow\) Город \(2\rightarrow\) Город \(3\rightarrow\) Город \(5\)

D. Divide OR Conquer

Бинарный поиск битмаски дп реализация Структуры данных *2400

You are given an array \([a_1, a_2, \ldots a_n]\) consisting of integers between \(0\) and \(10^9\). You have to split this array into several segments (possibly one) in such a way that each element belongs to exactly one segment.

Let the first segment be the array \([a_{l_1}, a_{l_1 + 1}, \ldots, a_{r_1}]\), the second segment be \([a_{l_2}, a_{l_2+ 1}, \ldots, a_{r_2}]\), ..., the last segment be \([a_{l_k}, a_{l_k+ 1}, \ldots, a_{r_k}]\). Since every element should belong to exactly one array, \(l_1 = 1\), \(r_k = n\), and \(r_i + 1 = l_{i+1}\) for each \(i\) from \(1\) to \(k-1\). The split should meet the following condition: \(f([a_{l_1}, a_{l_1 + 1}, \ldots, a_{r_1}]) \le f([a_{l_2}, a_{l_2+ 1}, \ldots, a_{r_2}]) \le \dots \le f([a_{l_k}, a_{l_k+1}, \ldots, a_{r_k}])\), where \(f(a)\) is the bitwise OR of all elements of the array \(a\).

Calculate the number of ways to split the array, and print it modulo \(998\,244\,353\). Two ways are considered different if the sequences \([l_1, r_1, l_2, r_2, \ldots, l_k, r_k]\) denoting the splits are different.

Input

The first line contains an integer \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — the length of the array \(a\).

The second line contains \(n\) integers \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10 ^9\)) — the elements of the given array.

Output

Print one integer — the number of ways to split the array, taken modulo \(998\,244\,353\).

Note

In the first two examples, every way to split the array is valid.

In the third example, there are three valid ways to split the array:

  • \(k = 3\); \(l_1 = 1, r_1 = 1, l_2 = 2, r_2 = 2, l_3 = 3, r_3 = 3\); the resulting arrays are \([3]\), \([4]\), \([6]\), and \(3 \le 4 \le 6\);
  • \(k = 2\); \(l_1 = 1, r_1 = 1, l_2 = 2, r_2 = 3\); the resulting arrays are \([3]\) and \([4, 6]\), and \(3 \le 6\);
  • \(k = 1\); \(l_1 = 1, r_1 = 3\); there will be only one array: \([3, 4, 6]\).

If you split the array into two arrays \([3, 4]\) and \([6]\), the bitwise OR of the first array is \(7\), and the bitwise OR of the second array is \(6\); \(7 > 6\), so this way to split the array is invalid.

K. Grid Walk

дп жадные алгоритмы математика Перебор теория чисел *2100

You have an \(n \times n\) grid and two integers \(a\) and \(b\). Both the rows and the columns are numbered from \(1\) to \(n\). Let's denote the cell at the intersection of the \(i\)-th row and the \(j\)-th column as \((i, j)\).

You are standing in the cell \((1, 1)\) and want to move into the cell \((n, n)\).

Suppose you are in the cell \((i, j)\); in one step, you can move either into the cell \((i, j + 1)\) or into the cell \((i + 1, j)\) if the corresponding cells exist.

Let's define the cost of the cell \((i, j)\) as \(c(i, j) = \gcd(i, a) + \gcd(j, b)\) (here, \(\gcd(x,y)\) denotes the greatest common divisor of \(x\) and \(y\)). The cost of the route from \((1, 1)\) to \((n, n)\) is the sum of costs of the visited cells (including the starting cell and the finishing cell).

Find the route with minimum possible cost and print its cost.

Input

The only line contains three integers \(n\), \(a\), and \(b\) (\(2 \le n \le 10^6\); \(1 \le a, b \le 10^6\)).

Output

Print one integer — the cost of the cheapest route from \((1, 1)\) to \((n, n)\).

Note

The first example is described in the picture above.

L. Bridge Renovation

дп жадные алгоритмы математика Перебор *1400

Recently, Monocarp started working as a director of a park located near his house. The park is quite large, so it even has a small river splitting it into several zones. Several bridges are built across this river. Three of these bridges are especially old and need to be repaired.

All three bridges have the same length but differ in width. Their widths are \(18\), \(21\) and \(25\) units, respectively.

During the park renovation process, Monocarp has to replace the old planks that served as the surface of the bridges with the new ones.

Planks are sold with a standard length of \(60\) units. Monocarp already knows that he needs \(n\) planks for each bridge. But since the bridges have different widths, he needs \(n\) planks of length \(18\) for the first bridge, \(n\) planks of length \(21\) for the second one, and \(n\) planks of length \(25\) for the last one.

Workers in charge of renovation have no problem with cutting planks into parts but refuse to join planks, since it creates weak spots and looks ugly.

Monocarp wants to buy as few planks as possible but struggles to calculate the required number of planks. Can you help him?

Input

The first and only line contains a single integer \(n\) (\(1 \le n \le 1000\)) — the number of planks required for each of the three bridges.

Output

Print a single integer — the minimum number of planks of standard length (\(60\) units) Monocarp needs to cover all three bridges if the planks can be cut into parts.

Note

In the first example, it is possible to cut one plank of length \(60\) into three planks with lengths \(25\), \(18\) and \(17\), and cut another plank of length \(60\) into two planks with lengths \(39\) and \(21\). That way, Monocarp will have all the required planks.

M. Royal Flush

дп реализация *2800

Consider the following game. There is a deck, which consists of cards of \(n\) different suits. For each suit, there are \(13\) cards in the deck, all with different ranks (the ranks are \(2\), \(3\), \(4\), ..., \(10\), Jack, Queen, King and Ace).

Initially, the deck is shuffled randomly (all \((13n)!\) possible orders of cards have the same probability). You draw \(5\) topmost cards from the deck. Then, every turn of the game, the following events happen, in the given order:

  1. if the cards in your hand form a Royal Flush (a \(10\), a Jack, a Queen, a King, and an Ace, all of the same suit), you win, and the game ends;
  2. if you haven't won yet, and the deck is empty, you lose, and the game ends;
  3. if the game hasn't ended yet, you may choose any cards from your hand (possibly, all of them) and discard them. When a card is discarded, it is removed from the game;
  4. finally, you draw cards from the deck, until you have \(5\) cards or the deck becomes empty.

Your goal is to find a strategy that allows you to win in the minimum expected number of turns. Note that the turn when the game ends is not counted (for example, if the \(5\) cards you draw initially already form a Royal Flush, you win in \(0\) turns).

Calculate the minimum possible expected number of turns required to win the game.

Input

The only line contains one integer \(n\) (\(1 \le n \le 4\)) — the number of suits used in the game.

Output

Print the minimum expected number of turns.

Your answer will be considered correct if its absolute or relative error does not exceed \(10^{-6}\). Formally, let your answer be \(a\), and the jury's answer be \(b\). Your answer will be accepted if and only if \(\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}\).

E. Shohag любит инверсии

дп Комбинаторика математика реализация *2200

У Shohag есть массив целых чисел \(a\). Изначально \(a = [0, 1]\). Он может выполнять следующую операцию любое количество раз:

  • Пусть \(k\) — количество инверсий\(^{\text{∗}}\) в текущем массиве \(a\).
  • Вставить \(k\) на любую позицию в \(a\), в том числе возможно в начало или конец.

Например, если \(a = [4, 6, 2, 4]\), то количество инверсий равно \(k = 3\). Таким образом, после операции вы можете получить следующие массивы: \([\textbf{3}, 4, 6, 2, 4]\), \([4, \textbf{3}, 6, 2, 4]\), \([4, 6, \textbf{3}, 2, 4]\), \([4, 6, 2, \textbf{3}, 4]\), и \([4, 6, 2, 4, \textbf{3}]\).

По заданному целому числу \(n\), помогите Shohag подсчитать количество различных массивов длины \(n\), которые можно получить после выполнения операций, по модулю \(998\,244\,353\).

\(^{\text{∗}}\)Количество инверсий в массиве \(a\) — это количество пар индексов (\(i\), \(j\)) таких, что \(i < j\) и \(a_i > a_j\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 10^6\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите целое число — количество массивов по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных можно получить следующие \(5\) массивов (вставленное количество инверсий выделено жирным шрифтом):

  • \([0, 1] \rightarrow [0, \textbf{0}, 1] \rightarrow [0, 0, 1, \textbf{0}]\),
  • \([0, 1] \rightarrow [0, \textbf{0}, 1] \rightarrow [0, 0, \textbf{0}, 1]\),
  • \([0, 1] \rightarrow [0, 1, \textbf{0}] \rightarrow [0, 1, 0, \textbf{1}]\),
  • \([0, 1] \rightarrow [0, 1, \textbf{0}] \rightarrow [0, 1, \textbf{1}, 0]\),
  • \([0, 1] \rightarrow [0, 1, \textbf{0}] \rightarrow [\textbf{1}, 0, 1, 0]\).

F1. Shohag любит считать (простая версия)

дп Комбинаторика математика теория чисел *2800

Это простая версия задачи. Единственные различия между двумя версиями этой задачи — ограничения на \(t\), \(m\) и сумму \(m\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Для массива целых чисел \(a\) длины \(n\) определим \(f(k)\) как наибольший общий делитель (НОД) максимальных значений всех подмассивов\(^{\text{∗}}\) длины \(k\). Например, если массив равен \([2, 1, 4, 6, 2]\), то \(f(3) = \operatorname{gcd}(\operatorname{max}([2, 1, 4]), \operatorname{max}([1, 4, 6]), \operatorname{max}([4, 6, 2])) = \operatorname{gcd}(4, 6, 6) = 2\).

Массив является хорошим, если для всех пар \(1 \le i \lt j \le n\) выполняется \(f(i) \neq f(j)\).

У Shohag есть целое число \(m\). Помогите ему подсчитать количество непустых хороших массивов произвольной длины, каждый элемент которых является целым числом от \(1\) до \(m\), по модулю \(998\,244\,353\).

\(^{\text{∗}}\)Массив \(d\) является подмассивом массива \(c\), если \(d\) можно получить из \(c\) путем удаления нескольких (возможно, нуля или всех) элементов из начала и нескольких (возможно, нуля или всех) элементов из конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит целое число \(m\) (\(1 \le m \le 10^5\)).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число — количество подходящих массивов по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных подходящими массивами являются \([1]\), \([1, 2]\), \([2]\) и \([2, 1]\).

Во втором наборе входных данных всего \(29\) подходящих массивов. В частности, массив \([2, 1, 4]\) длины \(n = 3\) подходит, так как все его элементы принадлежат отрезку от \(1\) до \(m = 5\) и \(f(1)\), \(f(2)\) и \(f(n = 3)\) различны:

  • \(f(1) = \operatorname{gcd}(\operatorname{max}([2]), \operatorname{max}([1]), \operatorname{max}([4])) = \operatorname{gcd}(2, 1, 4) = 1.\)
  • \(f(2) = \operatorname{gcd}(\operatorname{max}([2, 1]), \operatorname{max}([1, 4])) = \operatorname{gcd}(2, 4) = 2.\)
  • \(f(3) = \operatorname{gcd}(\operatorname{max}([2, 1, 4])) = \operatorname{gcd}(4) = 4.\)

F2. Shohag любит считать (сложная версия)

дп теория чисел *3200

Это сложная версия задачи. Единственные различия между двумя версиями этой задачи — ограничения на \(t\), \(m\) и сумму \(m\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Для массива целых чисел \(a\) длины \(n\) определим \(f(k)\) как наибольший общий делитель (НОД) максимальных значений всех подмассивов\(^{\text{∗}}\) длины \(k\). Например, если массив равен \([2, 1, 4, 6, 2]\), то \(f(3) = \operatorname{gcd}(\operatorname{max}([2, 1, 4]), \operatorname{max}([1, 4, 6]), \operatorname{max}([4, 6, 2])) = \operatorname{gcd}(4, 6, 6) = 2\).

Массив является хорошим, если для всех пар \(1 \le i \lt j \le n\) выполняется \(f(i) \neq f(j)\).

У Shohag есть целое число \(m\). Помогите ему подсчитать количество непустых хороших массивов произвольной длины, каждый элемент которых является целым числом от \(1\) до \(m\), по модулю \(998\,244\,353\).

\(^{\text{∗}}\)Массив \(d\) является подмассивом массива \(c\), если \(d\) можно получить из \(c\) путем удаления нескольких (возможно, нуля или всех) элементов из начала и нескольких (возможно, нуля или всех) элементов из конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 3 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит целое число \(m\) (\(1 \le m \le 10^6\)).

Обратите внимание, что сумма \(m\) по всем наборам входных данных не ограничена.

Выходные данные

Для каждого набора входных данных выведите целое число — количество подходящих массивов по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных подходящими массивами являются \([1]\), \([1, 2]\), \([2]\) и \([2, 1]\).

Во втором наборе входных данных всего \(29\) подходящих массивов. В частности, массив \([2, 1, 4]\) длины \(n = 3\) подходит, так как все его элементы принадлежат отрезку от \(1\) до \(m = 5\) и \(f(1)\), \(f(2)\) и \(f(n = 3)\) различны:

  • \(f(1) = \operatorname{gcd}(\operatorname{max}([2]), \operatorname{max}([1]), \operatorname{max}([4])) = \operatorname{gcd}(2, 1, 4) = 1.\)
  • \(f(2) = \operatorname{gcd}(\operatorname{max}([2, 1]), \operatorname{max}([1, 4])) = \operatorname{gcd}(2, 4) = 2.\)
  • \(f(3) = \operatorname{gcd}(\operatorname{max}([2, 1, 4])) = \operatorname{gcd}(4) = 4.\)

A. Маленький Слоник и промежуток

Бинарный поиск дп Комбинаторика *1500

Маленький Слоник очень любит суммы на промежутках.

В этот раз у него есть пара целых чисел l и r (l ≤ r). Маленькому Слонику нужно найти количество таких целых чисел x (l ≤ x ≤ r), что первая цифра числа x равна последней (в десятичном представлении). Например, такие числа как 101, 477474 или 9 он будет включать в ответ, в то время как 47, 253 или 1020 — нет.

Помогите ему, посчитайте описанное количество чисел x для заданной пары l и r.

Входные данные

В единственной строке задана пара целых чисел l и r (1 ≤ l ≤ r ≤ 1018) — границы промежутка.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В единственной строке выведите одно целое число — ответ на задачу.

Примечание

В первом примере в ответ входят следующие числа: 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44.

D. Маленький Слоник и ретро строки

дп *2400

Маленький Слоник нашел на чердаке старую потрепанную черно-белую строку s.

Символы строки s пронумерованы слева направо от 1 до |s|, где |s| — длина строки. Обозначим i-тый символ строки si. Так как строка черно-белая, каждый символ строки это либо буква «B», либо буква «W». К сожалению, строка очень старая и некоторые символы повреждены. На их позициях стоит буква «X».

Маленький Слоник намерен восстановить строку и повесить ее себе на стену. Для этого нужно каждый символ «X» заменить на «B» или «W». Чтобы строка хорошо смотрелась на стене, нужно чтобы она была красивой. Маленький Слоник считает строку красивой, если у нее есть две непересекающиеся подстроки, заданной длины k, таких, что левая полностью состоит из символов «B», а правая полностью состоит из символов «W». Более формально, существует четыре целых числа a, b, c, d (1 ≤ a ≤ b < c ≤ d ≤ |s|; b - a + 1 = d - c + 1 = k) таких, что si = «B» (a ≤ i ≤ b) и sj = «W» (c ≤ j ≤ d).

Помогите Маленькому Слонику найти количество различных красивых строк, которые он может получить из строки s. Две строки считаются различными, если существует такая позиция, в которой символ в первой строке отличается от соответствующего символа второй строки. Если в строке нет символов «X» и она уже красивая — то ответ 1.

Так как ответ может быть довольно большим, выведите его остаток от деления на 1000000007 (109 + 7).

Входные данные

В первой строке через пробел заданы два целых числа n и k (1 ≤ k ≤ n ≤ 106). Во второй строке задана строка s. Строка s имеет длину n и состоит только из символов «W», «B» и «X».

Выходные данные

В единственной строке выведите целое число — ответ на задачу по модулю 1000000007 (109 + 7).

E. Контроль случайности

графы Деревья дп жадные алгоритмы Комбинаторика математика поиск в глубину и подобное Теория вероятностей *2100

Дано дерево с \(n\) вершинами.

В некоторую вершину \(v \ne 1\) посадят робота. Пусть у вас изначально есть \(p\) монет. Рассмотрим следующий процесс, где в \(i\)-й шаг (начиная с \(i = 1\)):

  • Если \(i\) нечётное, робот передвинется в соседнюю вершину в сторону вершины \(1\);
  • Иначе, \(i\) чётное. Можно либо заплатить одну монету (если остались), после чего робот передвинется в соседнюю вершину в сторону вершины \(1\), либо ничего не платить, после чего робот передвинется в равновероятно выбранную соседнюю вершину.

Процесс останавливается, как только робот попадает в вершину \(1\). Определим \(f(v, p)\) как минимально возможное математическое ожидание количества шагов процесса выше (количество использованных монет минимизировать не надо).

Необходимо ответить на \(q\) запросов, в \(i\)-м из которых надо найти значение \(f(v_i, p_i)\) по модулю\(^{\text{∗}}\) \(998\,244\,353\).

\(^{\text{∗}}\) Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа: \(n\) и \(q\) (\(2 \le n \le 2 \cdot 10^3\); \(1 \le q \le 2 \cdot 10^3\)) — количество вершин в дереве и количество запросов.

В следующих \(n - 1\) строках каждого набора входных данных заданы ребра дерева: по одному в строке. В \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)), обозначающих ребро между вершинами \(u_i\) и \(v_i\).

В следующих \(q\) строках каждого набора входных данных заданы два целых числа: \(v_i\) и \(p_i\) (\(2 \le v_i \le n\); \(0 \le p_i \le n\)).

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 3\).

Гарантируется, что сумма значений \(q\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 3\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел: значения \(f(v_i, p_i)\) по модулю \(998\,244\,353\).

Формально, пусть \(M = 998\,244\,353\). Можно показать, что ответ может быть представлен в виде несократимой дроби \(\frac{p}{q}\), где \(p\) и \(q\) — целые числа, и \(q \not \equiv 0 \pmod{M}\). Выведите целое число, равное \(p \cdot q^{-1} \bmod M\). Другими словами, выведите такое целое число \(x\), что \(0 \le x < M\) и \(x \cdot q \equiv p \pmod{M}\).

Примечание

Дерево из первого набора показано ниже:

Для первого запроса значение математического ожидания равно \(1\), так как робот начинает движение с вершины \(2\) и первым ходом попадает в вершину \(1\) и завершает перемещение.

Посчитаем значение математического ожидания для второго запроса (\(x\) это количество шагов в процессе):

  • \(P(x < 2) = 0\), расстояние до вершины \(1\) равно \(2\) и робот не может дойти до него за меньшее количество шагов.
  • \(P(x = 2) = \frac{1}{3}\), так как есть только одна последовательность шагов, приводящая к \(x = 2\). Это \(3 \rightarrow_{1} 2 \rightarrow_{0.33} 1\) с вероятностью \(1 \cdot \frac{1}{3}\).
  • \(P(x \bmod 2 = 1) = 0\), так как робот может достичь вершину \(1\) сделав только чётное количество шагов.
  • \(P(x = 4) = \frac{2}{9}\): возможные пути \(3 \rightarrow_{1} 2 \rightarrow_{0.67} [3, 4] \rightarrow_{1} 2 \rightarrow_{0.33} 1\).
  • \(P(x = 6) = \frac{4}{27}\): возможные пути \(3 \rightarrow_{1} 2 \rightarrow_{0.67} [3, 4] \rightarrow_{1} 2 \rightarrow_{0.67} [3, 4] \rightarrow_{1} 2 \rightarrow_{0.33} 1\).
  • \(P(x = i \cdot 2) = \frac{2^{i - 1}}{3^i}\) в общем случае.

В результате \(f(v, p) = \sum\limits_{i=1}^{\infty}{i \cdot 2 \cdot \frac{2^{i - 1}}{3^i}} = 6\).

Дерево из второго набора показано ниже:

F. Количество кубов

дп Комбинаторика математика теория чисел *2700

Рассмотрим прямой параллелепипед с размерами сторон \(a\), \(b\) и \(c\), состоящий из единичных кубиков \(k\) различных цветов. Мы можем делать циклические сдвиги параллелепипеда в любом измерении и в любой комбинации\(^{\text{∗}}\).

Имеется \(d_i\) кубиков \(i\)-го цвета (\(1 \le i \le k\)). Сколько можно составить из этих кубиков различных параллелепипедов с данными размерами сторон, никакие два из которых нельзя совместить комбинацией сдвигов?

\(^{\text{∗}}\)На рисунке:

  • Слева-вверху показан вид сверху у изначального параллелепипеда. Нижние слои будут сдвигаться по аналогии с верхним.
  • Справа-вверху показан вид сверху у параллелепипеда, сдвинутого направо на \(1\).
  • Слева-внизу показан вид сверху у параллелепипеда, сдвинутого вниз на \(2\).
  • Справа-внизу показан вид сверху у параллелепипеда, сдвинутого направо на \(1\) и вниз на \(2\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа: \(a\), \(b\), \(c\) и \(k\) (\(1 \le a, b, c \le 3 \cdot 10^6\); \(a \cdot b \cdot c \le 3 \cdot 10^6\); \(1 \le k \le 10^6\)) — три стороны параллелепипеда и количество цветов единичных кубиков.

Вторая строка каждого набора входных данных содержит \(k\) целых чисел \(d_1, d_2, \ldots, d_k\) (\(1 \le d_1 \le d_2 \le \ldots \le d_k \le 3 \cdot 10^6\)) — элементы массива \(d\): количества кубиков заданного цвета.

Гарантируется, что в каждом наборе входных данных сумма элементов массива \(d\) равна \(a \cdot b \cdot c\).

Гарантируется, что сумма значений \(k\) по всем наборам входных данных не превосходит \(10 ^ 6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных параллелепипедов по модулю \(998\,244\,353\).

Примечание

В первом наборе существует только один параллелепипед, состоящий из одного единичного куба.

Возможные параллелепипеды во втором наборе

C. Cube

битмаски дп поиск в глубину и подобное *2000

You are given an \(n\times n\times n\) big three-dimensional cube that contains \(n^3\) numbers. You have to choose \(n\) of those numbers so that their sum is as small as possible. It is, however, forbidden to choose two numbers that are located in the same plane. That is, if we identify the positions in the cube by three Cartesian coordinates, then choosing two numbers from positions \((x,y,z)\) and \((x',y',z')\) is forbidden if \(x=x'\), \(y=y'\), or \(z=z'\).

Input

The input consists of the number \(n\) followed by \(n^3\) numbers in the cube. The numbers are presented as \(n\) two-dimensional matrices, one for each layer of the cube. More precisely, there will be \(n^2\) lines follow, each having \(n\) numbers. For each \(x, y, z\) (\(1\le x, y, z\le n\)), the number at the position \((x, y, z)\) is listed as the \(z\)-th number in the \(((x-1)\times n+y)\)-th line.

  • \(2 \leq n \leq 12\)
  • All numbers in the cube are integers between \(0\) and \(2\times 10^7\).
Output

The output consists of a single number. It is the minimum sum of \(n\) numbers chosen from the cube according to the above rules.

H. Sheet Music

дп Комбинаторика математика *2300

Image generated by ChatGPT 4o.

Alice likes singing. As a singing enthusiast, Alice has listened to countless songs and has tried singing them many times. However, occasionally, some songs make Alice feel bored. After some research, Alice believes that this is because even though the songs she chose are all different, due to her instinctive preference, they all turn out to be musically similar to one another.

To thoroughly analyze this, Alice decided to study the sheet music of the songs. For convenience, Alice represented a song of length \(n\) as an integer sequence \(a_1, a_2, \ldots, a_n\), where \(a_i\) is the pitch of the \(i\)-th note. Then she defined the musical equivalence between songs. Two songs \(a_1, a_2, \ldots, a_n\) and \(b_1, b_2, \ldots, b_n\) of length \(n\) are musically equivalent if for all \(1\leq i<n\), both \(a_i, a_{i+1}\) and \(b_{i}, b_{i+1}\) have the same pitch relationship. More specifically, \(a_i, a_{i+1}\) and \(b_i, b_{i+1}\) have the same pitch relationship if either

  • \(a_i < a_{i + 1}\) and \(b_i < b_{i + 1}\),
  • \(a_i = a_{i + 1}\) and \(b_i = b_{i + 1}\), or
  • \(a_i > a_{i + 1}\) and \(b_i > b_{i + 1}\).
For example, \(1, 2, 3, 3, 2\) and \(5, 9, 13, 13, 1\) are musically equivalent, while \(1, 2, 3, 2, 1\) and \(1, 2, 2, 2, 1\) are not.

Having practiced consistently for a long time, Alice is able to sing any note in the range of \([1, k]\). She wants to know how many different songs of length \(n\) within her range there are, if we treat musically equivalent songs as the same one. Can you help her calculate the number?

Since the answer might be large, print the answer modulo \(998244353\).

Input

The only line contains two integers \(n, k\).

  • \(1\leq n\leq 10^6\)
  • \(1\leq k \leq 10^9\)
Output

Output the number of different songs modulo \(998244353\).

J. Bottle Arrangement

дп жадные алгоритмы разделяй и властвуй снм Структуры данных *2700

Image generated by ChatGPT 4o.

Mayaw works in a renowned Epah (aboriginal Taiwanese millet wine; Epah is the Pangcah term for aboriginal Taiwanese millet wine, named in the language of the Pangcah people, the largest Indigenous group in Taiwan) bar in the Fata'an Village. To showcase the depth of its collections, the bar has a two-row wine rack where each row can fit exactly \(n\) bottles. There are already \(n\) bottles placed on the back row of the rack, where the \(i\)-th bottle from left has height \(a_i\). The owner of the bar has another \(n\) bottles with distinct heights \(b_1, \ldots, b_n\) that he would like Mayaw to put on the first row. To ensure that all bottles on the rack are visible, the owner requires that each bottle on the back row should not be blocked by the one put in front of it. That is, if a bottle of height \(h\) is put on the \(i\)-th spot (from left) in the first row, then \(h\) must be less than \(a_i\). However, not all such arrangements are good for the owner. To pay tributes to the Maxi Mountain nearby, he additionally demands that the bottles in the front row should display a mountain-like shape. In particular, the heights of the bottles, when listing from left to right, should form a sequence that is first (non-strictly) increasing and then (non-strictly) decreasing.

Unfortunately, sometimes it is impossible to achieve owner's requirements. That is why Mayaw is also allowed to slightly reduce a bottle's height by removing its cap that has a height of \(1\). In other words, after the removal of the cap, the height of the bottle decreases by exactly \(1\). Of course, exposing the Epah inside the bottle to the open air is detrimental to its quality, and therefore it is desirable to remove as few bottle caps as possible.

Can you help Mayaw determine the minimum number of caps needed to be removed so that he can arrange the bottles in a way that satisfies the owner's requirements? Note that the positions of the bottles in the back row are fixed and Mayaw is not allowed to modify them.

Input

The first line contains an integer \(n\) which represents the number of bottles in each row. The second line contains \(n\) integers \(a_1, \ldots, a_n\), the height of the bottles in the back row. The third line contains \(n\) distinct integers \(b_1, \ldots, b_n\), the height of the bottles in the front row.

  • \(1 \leq n \leq 5 \times 10^5\)
  • \(1 \leq a_i, b_i \leq 10^9\)
  • All \(b_i\)'s are distinct.
Output

Output the minimum number of bottle caps needed to be removed so that Mayaw can arrange the bottles in the desired way. If it is impossible to achieve that (regardless of the number of caps removed), output -1 instead.

F. Два подотрезка

дп матрицы реализация Структуры данных *2600

Задано два целочисленных массива \(a\) и \(b\), оба размера \(n\).

Скажем, что стоимость подотрезка массива \([l, r]\) равна \(a_l + a_{l + 1} + \cdots + a_{r - 1} + a_r + b_l + b_r\). Если \(l=r\), то стоимость равна \(a_l + 2 \cdot b_l\).

Вам предстоит отвечать на запросы трех видов:

  • «\(1\) \(p\) \(x\)» — присвоить \(a_{p} := x\);
  • «\(2\) \(p\) \(x\)» — присвоить \(b_{p} := x\);
  • «\(3\) \(l\) \(r\)» — найти два непустых непересекающихся подотрезка у отрезка \([l, r]\) с максимальной суммарной стоимостью и вывести их суммарную стоимость.
Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

В третьей строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(-10^9 \le b_i \le 10^9\)).

В четвертой строке задано одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)).

В следующих \(q\) строках заданы запросы: по одному в строке. Каждый запрос имеет один из трех типов:

  • «\(1\) \(p\) \(x\)» (\(1 \le p \le n\); \(-10^9 \le x \le 10^9\));
  • «\(2\) \(p\) \(x\)» (\(1 \le p \le n\); \(-10^9 \le x \le 10^9\));
  • «\(3\) \(l\) \(r\)» (\(1 \le l < r \le n\)).

Гарантируется, что есть хотя бы один запрос третьего типа.

Выходные данные

Для каждого запроса третьего типа выведите максимально возможную суммарную стоимость двух непустых непересекающихся подотрезков у отрезка \([l, r]\).

C. Суммы на отрезках

Бинарный поиск дп жадные алгоритмы математика Перебор Структуры данных *1600

Дан массив \(a\) из \(n\) чисел, где все элементы, кроме, возможно, одного, равны \(-1\) или \(1\). Оставшийся элемент \(x\) удовлетворяет условию \(-10^9 \le x \le 10^9\).

Найдите все возможные суммы подмассивов массива \(a\), включая пустой подмассив, сумма которого равна \(0\). Другими словами, найдите все такие числа \(x\), что у массива \(a\) есть хотя бы один подмассив (возможно, пустой) с суммой \(x\). Подмассивом называется непрерывный подотрезок массива.

Выведите эти суммы в порядке возрастания. Каждая сумма должна быть выведена только один раз, даже если достигается на нескольких подмассивах.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива;
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\). В массиве \(a\) существует не более одного элемента, не равного ни \(1\), ни \(-1\).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки:

  • в первой строке выведите одно целое число — количество различных сумм на подмассивах;
  • во второй строке выведите сами суммы в порядке возрастания.

Каждую сумму следует выводить только один раз, даже если она достигается на нескольких подмассивах.

Примечание

Обозначим за \(a[i,j]\) подмассив массива \(a\) с \(i\)-й позиции по \(j\)-ю позицию.

В первом наборе входных данных примера из условия:

  • \(-1\) достигается на подмассиве \(a[2,2]\);
  • \(0\) достигается на пустом подмассиве;
  • \(1\) достигается на подмассиве \(a[4,4]\);
  • \(2\) достигается на подмассиве \(a[4,5]\);
  • \(9\) достигается на подмассиве \(a[2,3]\);
  • \(10\) достигается на подмассиве \(a[1,3]\);
  • \(11\) достигается на подмассиве \(a[3,4]\);
  • \(12\) достигается на подмассиве \(a[3,5]\).

F. Ним

битмаски дп жадные алгоритмы игры Комбинаторика кратчайшие пути Перебор реализация *2700

Кратко напомним правила игры «Ним». Имеется \(n\) кучек камней, при этом в кучке \(i\) изначально лежит какое-то число камней. Два игрока по очереди выбирают непустую кучку и берут из нее произвольное положительное (строго больше \(0\)) количество камней. Проигрывает тот, кто не может сделать ход.

Дан массив \(a\), состоящий из \(n\) целых чисел. Артем и Руслан решили играть в Ним на подотрезках массива. Каждый из \(q\) раундов определяется отрезком \((l_i, r_i)\), где элементы массива \(a_{l_i}, a_{l_i+1}, \dots, a_{r_i}\) рассматриваются как размеры кучек камней.

До начала игры Руслан может удалить любое количество кучек из выбранного подотрезка. Однако хотя бы одна кучка должна остаться, поэтому в рамках одного раунда он может удалить не более \((r_i - l_i)\) кучек. Разрешается удалить \(0\) кучек. После удаления ребята играют в Ним на всех оставшихся кучках из этого отрезка.

Все раунды независимы: удаления, произведенные в одном раунде, не влияют на исходный массив или другие раунды.

Руслану нужно удалить как можно больше кучек так, чтобы Артем, который будет ходить первым, проиграл.

Для каждого раунда определите:

  1. максимальное количество кучек, которые Руслан может удалить;
  2. количество способов выбрать максимальное количество кучек для удаления.

Два способа считаются различными, если существует такая позиция \(i\), что в одном из способов кучка на позиции \(i\) удаляется, а во втором — нет. Поскольку количество способов может быть большим, выведите его по модулю \(998\,244\,353\).

Если в каком-то раунде Руслан не может сделать так, чтобы Артем проиграл, выведите для этого раунда одно число -1.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 10^5\)) — размер массива и количество раундов.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 50\)) — элементы исходного массива.

Далее следуют \(q\) строк, \(i\)-я из которых содержит два целых числа \(l_i, r_i\) (\(1 \le l_i \le r_i \le n\)) — границы отрезка, на котором ребята хотят сыграть в игру в \(i\)-м раунде.

Выходные данные

Для каждого раунда:

  • если Руслан может победить, выведите два целых числа — максимальное количество кучек, которые можно удалить, и количество способов удалить максимальное количество кучек, взятое по модулю \(998\,244\,353\);
  • иначе выведите -1.

G2. Средняя демоническая задача (сложная версия)

графы Деревья дп поиск в глубину и подобное реализация снм *1900

Это сложная версия задачи. Ключевое отличие между двумя версиями выделено жирным шрифтом.

Группа из \(n\) пауков собралась, чтобы обменяться плюшевыми игрушками. Изначально у каждого паука есть \(1\) плюшевая игрушка. Каждый год, если паук \(i\) имеет хотя бы одну плюшевую игрушку, он отдаст ровно одну плюшевую игрушку пауку \(r_i\). В противном случае он ничего не сделает. Обратите внимание, что все передачи плюшевых игрушек происходят одновременно. В этой версии каждому пауку разрешено иметь более 1 плюшевой игрушки в любой момент времени.

Процесс считается стабильным в текущем году, если у каждого паука такое же количество плюшевых игрушек (до обмена в текущем году), как и в предыдущем году (до обмена в предыдущем году). Обратите внимание, что год \(1\) никогда не может быть стабильным.

Найдите первый год, в котором процесс становится стабильным.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество пауков.

Следующая строка содержит \(n\) целых чисел \(r_1, r_2, \ldots, r_n\) (\(1 \leq r_i \leq n, r_i \neq i\)) — получатель плюшевой игрушки от каждого паука.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число в новой строке, первый год, в котором процесс становится стабильным.

Примечание

Для второго набора входных данных:

  • В год \(1\) следующий массив показывает количество плюшевых игрушек у каждого паука: \([1, 1, 1, 1, 1]\). Затем происходит обмен в год \(1\).
  • В год \(2\) следующий массив показывает количество плюшевых игрушек у каждого паука: \([1, 1, 1, 1, 1]\). Поскольку этот массив такой же, как в предыдущем году, этот год является стабильным.

Для третьего набора входных данных:

  • В год \(1\) следующий массив показывает количество плюшевых игрушек у каждого паука: \([1, 1, 1, 1, 1]\). Затем происходит обмен в год \(1\).
  • В год \(2\) следующий массив показывает количество плюшевых игрушек у каждого паука: \([1, 2, 1, 1, 0]\). Затем происходит обмен в год \(2\).
  • В год \(3\) следующий массив показывает количество плюшевых игрушек у каждого паука: \([1, 3, 0, 1, 0]\). Затем происходит обмен в год \(3\).
  • В год \(4\) следующий массив показывает количество плюшевых игрушек у каждого паука: \([1, 4, 0, 0, 0]\). Затем происходит обмен в год \(4\).
  • В год \(5\) следующий массив показывает количество плюшевых игрушек у каждого паука: \([1, 4, 0, 0, 0]\). Поскольку этот массив такой же, как в предыдущем году, этот год является стабильным.

H. Сложная демоническая задача

дп Конструктив математика реализация Структуры данных *2100

Swing открывает фабрику блинов! Хорошая фабрика блинов должна хорошо уметь разравнивать вещи, поэтому Swing собирается протестировать свое новое оборудование на 2D матрицах.

Swing дана матрица \(n \times n\) \(M\), содержащая положительные целые числа. У него есть \(q\) запросов, которые он хочет вам задать.

Для каждого запроса он дает вам четыре целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) и просит вас разровнять подматрицу, ограниченную \((x_1, y_1)\) и \((x_2, y_2)\), в массив \(A\). Формально, \(A = [M_{(x1,y1)}, M_{(x1,y1+1)}, \ldots, M_{(x1,y2)}, M_{(x1+1,y1)}, M_{(x1+1,y1+1)}, \ldots, M_{(x2,y2)}]\).

Следующее изображение иллюстрирует разравнивание подматрицы, ограниченной красными пунктирными линиями. Оранжевые стрелки указывают направление, в котором элементы подматрицы добавляются в конец \(A\), а \(A\) показан внизу изображения.

После этого он спрашивает вас о значении \(\sum_{i=1}^{|A|} A_i \cdot i\) (сумма \(A_i \cdot i\) по всем \(i\)).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Первая строка каждого теста содержит два целых числа \(n\) и \(q\) (\(1 \leq n \leq 2000, 1 \leq q \leq 10^6\)) — размер \(M\) и количество запросов.

Следующие \(n\) строк содержат по \(n\) целых чисел, \(i\)-я из которых содержит \(M_{(i,1)}, M_{(i,2)}, \ldots, M_{(i,n)}\) (\(1 \leq M_{(i, j)} \leq 10^6\)).

Следующие \(q\) строк содержат четыре целых числа \(x_1\), \(y_1\), \(x_2\) и \(y_2\) (\(1 \leq x_1 \leq x_2 \leq n, 1 \leq y_1 \leq y_2 \leq n\)) — границы запроса.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2000\), а сумма \(q\) по всем тестовым случаям не превышает \(10^6\).

Выходные данные

Для каждого теста выведите результаты \(q\) запросов на новой строке.

Примечание

Во втором запросе первого набора входных данных, \(A = [9, 5, 5, 2]\). Поэтому сумма равна \(1 \cdot 9 + 2 \cdot 5 + 3 \cdot 5 + 4 \cdot 2 = 42\).

H. Missing Separators

дп сортировки Строки строковые суфф. структуры *2200

You have a dictionary, which is a list of distinct words sorted in alphabetical order. Each word consists of uppercase English letters.

You want to print this dictionary. However, there is a bug with the printing system, and all words in the list are printed next to each other without any separators between words. Now, you ended up with a string \(S\) that is a concatenation of all the words in the dictionary in the listed order.

Your task is to reconstruct the dictionary by splitting \(S\) into one or more words. Note that the reconstructed dictionary must consist of distinct words sorted in alphabetical order. Furthermore, you want to maximize the number of words in the dictionary. If there are several possible dictionaries with the maximum number of words, you can choose any of them.

Input

A single line consisting of a string \(S\) (\(1 \leq |S| \leq 5000)\). String \(S\) consists of only uppercase English letters.

Output

First, output an integer in a single line representing the maximum number of the words in the reconstructed dictionary. Denote this number as \(n\).

Then, output \(n\) lines, each containing a single string representing the word. The words must be distinct, and the list must be sorted alphabetically. The concatenation of the words in the listed order must equal \(S\).

If there are several possible dictionaries with the maximum number of words, output any of them.

F. Кевин и математический класс

Деревья дп математика Перебор разделяй и властвуй реализация Структуры данных *2500

Кевин — студент из Вечно Спящего Города, который в настоящее время посещает математический класс, где учитель задает ему упражнения на деление.

На доске написаны две строки положительных целых чисел, каждая из которых содержит \( n \) чисел. Первая строка — это \( a_1, a_2, \ldots, a_n \), а вторая строка — \( b_1, b_2, \ldots, b_n \).

Для каждого упражнения на деление Кевин может выбрать любой отрезок \( [l, r] \) и найти минимальное значение \( x \) среди \( b_l, b_{l+1}, \ldots, b_r \). Затем он изменит каждое \( a_i \) для \( l \leq i \leq r \) на округление вверх от \( a_i \), деленного на \( x \).

Формально, он выбирает два целых числа \( 1 \leq l \leq r \leq n \), устанавливает \( x = \min_{l \leq i \leq r} b_i \), и изменяет все \( a_i \) для \( l \leq i \leq r \) на \( \lceil \frac{a_i}{x} \rceil \).

Кевин может покинуть класс и вернуться домой, когда все \( a_i \) станут равны \( 1 \). Он стремится уйти и хочет узнать минимальное количество упражнений на деление, необходимых для достижения этого.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \( t \) (\( 1 \le t \le 10^4 \)).

Первая строка каждого набора входных данных содержит целое число \( n \) (\( 1 \le n \leq 2 \cdot 10^5 \)) — длина последовательностей \( a \) и \( b \).

Вторая строка каждого набора входных данных содержит \( n \) целых чисел \( a_1, a_2, \ldots, a_n \) (\( 1 \le a_i \le 10^{18} \)) — первая строка целых чисел на доске.

Третья строка каждого набора входных данных содержит \( n \) целых чисел \( b_1, b_2, \ldots, b_n \) (\( 2 \le b_i \le 10^{18} \)) — вторая строка целых чисел на доске.

Гарантируется, что сумма \( n \) по всем наборам входных данных не превышает \( 2 \cdot 10^5 \).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество упражнений на деление, необходимых для выхода из класса.

Примечание

Для первого примера: \( [{\color{red}{5,4}},2]\xrightarrow[\min(b_1,b_2)=3]{\text{операция на отрезке }[1,2]}[{\color{red}{2,2,2}}]\xrightarrow[\min(b_1,b_2,b_3)=2]{\text{операция на отрезке }[1,3]}[1,1,1] \).

Для второго примера: \( [{\color{red}{3,6,1}},3,2]\xrightarrow[\min(b_1,b_2,b_3)=3]{\text{операция на отрезке }[1,3]}[1,{\color{red}{2,1,3}},2]\xrightarrow[\min(b_2,b_3,b_4)=2]{\text{операция на отрезке }[2,4]}[1,1,1,{\color{red}{2,2}}]\xrightarrow[\min(b_4,b_5)=2]{\text{операция на отрезке }[4,5]}[1,1,1,1,1] \).

G. Кевин и матрицы

дп Комбинаторика математика Перебор *2800

Кевин был доставлен в больницу Святого Cердца, которая содержит все матрицы размером \( n \times m \) с целочисленными значениями из отрезка \( [1,v] \).

Теперь Кевин хочет подружиться с некоторыми матрицами, но он готов подружиться с матрицей \( a \) только в том случае, если выполняется следующее условие:

\(\) \min_{1\le i\le n}\left(\max_{1\le j\le m}a_{i,j}\right)\le\max_{1\le j\le m}\left(\min_{1\le i\le n}a_{i,j}\right). \(\)

Пожалуйста, посчитайте, сколько матриц в больнице могут подружиться с Кевином.

Поскольку Кевин очень дружелюбен, может быть много матриц, которые удовлетворяют этому условию. Поэтому вам нужно вывести результат по модулю \(998\,244\,353\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов \( t \) (\( 1 \le t \le 8\cdot 10^3 \)).

Единственная строка каждого набора содержит три целых числа \(n\), \(m\) и \(v\) (\( 1 \le n, v, n \cdot v \leq 10^6\), \(1 \le m \le 10^9 \)).

Гарантируется, что сумма \( n \cdot v \) по всем наборам не превышает \( 10^6 \).

Выходные данные

Для каждого набора выведите одно целое число — количество матриц, которые могут подружиться с Кевином по модулю \(998\,244\,353\).

Примечание

В первом наборе, кроме матриц \( a=\begin{bmatrix}1&2\\2&1\end{bmatrix} \) и \( a=\begin{bmatrix}2&1\\1&2\end{bmatrix} \), которые не удовлетворяют условию, оставшиеся \( 2^{2 \cdot 2} - 2 = 14 \) матриц могут подружиться с Кевином.

H. Кевин и странная операция

дп Структуры данных *3100

Кевин исследует задачи, связанные с бинарными строками в Чайнатауне. Когда он был в замешательстве, к нему подошел незнакомец и предложил странную операцию:

  • Пусть текущая бинарная строка — это \( t \), длина которой равна \( \vert t \vert \). Выберите целое число \( 1 \leq p \leq \vert t \vert \). Для всех \( 1 \leq i < p \) одновременно выполните операцию \( t_i = \max(t_i, t_{i+1}) \), а затем удалите \( t_p \).

Например, пусть текущая бинарная строка — это 01001, и вы выбрали \( p = 4 \). Выполните \( t_i = \max(t_i, t_{i+1}) \) для \(t_1\), \(t_2\) и \( t_3 \), преобразовав строку в 11001, затем удалите \( t_4 \), в результате получится 1101.

Кевин находит эту странную операцию довольно интересной. Таким образом, он хочет спросить вас: начиная с бинарной строки \( s \), сколько различных непустых бинарных строк вы можете получить за произвольное количество операций (возможно, ноль)?

Поскольку ответ может быть очень большим, вам нужно вывести результат по модулю \(998\,244\,353\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t \le 10^4\)) — количество наборов входных данных.

Для каждого набора входных данных единственная строка содержит бинарную строку \( s \) (\( 1 \le \lvert s \rvert \le 10^6 \)).

Гарантируется, что сумма \(\lvert s \rvert\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число в отдельной строке  — количество различных непустых бинарных строк, которые вы можете получить, по модулю \(998\,244\,353\).

Примечание

В первом наборе все бинарные строки, которые вы можете получить, следующие: 11001, 1001, 1101, 001, 101, 111, 01, 11 и 1. Всего \( 9 \) строк.

D. Shift + Esc

дп Перебор *1900

Во время игры с таинственной установкой дракона Эвирира поймали. Он решил найти хорошее применение своим магическим навыкам — исказить реальность, чтобы быстро сбежать!

Дана клетчатая сетка с \(n\) строками и \(m\) столбцами, в которых записаны целые неотрицательные числа. Также вам дано целое число \(k\). Пусть \((i, j)\) обозначает ячейку в \(i\)-й сверху строке и \(j\)-м слева столбце (\(1 \le i \le n\), \(1 \le j \le m\)). Для каждой пары \((i, j)\) в ячейку \((i, j)\) записывается целое число \(a_{i, j}\).

Изначально вы находитесь в ячейке \((1, 1)\) и хотите попасть в ячейку \((n, m)\). Вы можете двигаться только вниз или вправо. То есть, если вы находитесь в \((i, j)\), вы можете перейти только в \((i+1, j)\) или \((i, j+1)\) (если соответствующая ячейка существует).

Прежде чем начать движение, вы можете выполнить следующую операцию любое количество раз:

  • Выберите целое число \(i\) от \(1\) до \(n\) и циклически сдвиньте строку \(i\) влево на \(1\). Формально, клеткам \(a_{i,j}\) для всех целых \(j\) (\(1 \le j \le m\)) одновременно устанавливается значение \(a_{i,(j \bmod m) + 1}\).
Обратите внимание, что вы не можете выполнять никаких операций после того, как начнете двигаться.

После перемещения из \((1, 1)\) в \((n, m)\), пусть \(x\) — количество операций, которые вы выполнили перед перемещением, а \(y\) — сумма чисел, записанных в посещенных ячейках (включая \((1, 1)\) и \((n, m)\)). Тогда стоимость перемещения определяется как \(kx + y\).

Найдите минимальную стоимость перемещения из клетки \((1, 1)\) в клетку \((n, m)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(1 \leq n, m \leq 200\), \(0 \leq k \leq 10^9\)).

Затем следуют \(n\) строк. \(i\)-я строка содержит \(m\) целых чисел, разделенных пробелом — \(a_{i,1},\,a_{i,2},\,\ldots,\,a_{i,m}\) (\(0 \leq a_{i,j} \leq 10^9\)).

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную стоимость перемещения из \((1, 1)\) в \((n, m)\).

Примечание

В первом наборе входных данных минимальная стоимость \(113\) может быть достигнута следующим образом:

  1. Циклически сдвиньте строку 3 один раз. Сетка станет равна \(\)\begin{bmatrix}3 & 4 & 9\\5 & 2 & 4\\101 & 101 & 0\end{bmatrix}.\(\)
  2. Перемещайтесь следующим образом: \((1, 1) \to (1, 2) \to (2, 2) \to (2, 3) \to (3, 3)\).

\(x = 1\) операция выполняется перед перемещением. Сумма целых чисел в посещенных ячейках равна \(y = 3 + 4 + 2 + 4 + 0 = 13\). Следовательно, стоимость равна \(kx + y = 100 \cdot 1 + 13 = 113\).

Во втором наборе входных данных можно сдвинуть строку 1 один раз, строку 2 дважды и строку 3 трижды. Тогда сетка станет \(\)\begin{bmatrix}0 & 0 & 10 & 10\\10 & 0 & 0 & 0\\10 & 10 & 10 & 0\end{bmatrix}.\(\)

\(x = 6\) операций были выполнены до перемещений, а сумма чисел в посещённых клетках \(y = 0\). Следовательно, стоимость равна \(6 \cdot 1 + 0 = 6\).

C. Неинтересное число

дп математика Перебор *1200

Вам дано число \(n\) длины не больше \(10^5\).

Вы можете любое количество раз сделать с ним следующее: выбрать одну из его цифр, возвести её в квадрат и заменить получившейся исходную цифру. При этом результат должен быть цифрой (то есть, если вы выбрали цифру \(x\), то значение \(x^2\) должно быть меньше \(10\)).

Можно ли такими действиями получить из исходного числа такое, которое будет делиться нацело на \(9\)?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит число \(n\), без ведущих нулей. Длина числа не превосходит \(10^5\).

Гарантируется, что сумма длин чисел по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если с помощью описанных операций можно получить число, делящееся на \(9\), и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере из числа \(123\) возможно получить только \(123\), \(143\), \(129\) и \(149\), ни одно из них не делится на \(9\).

Во втором примере нужно заменить вторую цифру на её квадрат, тогда \(n\) станет равно \(342 = 38 \cdot 9\).

В третьем примере число уже делится на \(9\).

E. Три строки

дп реализация Строки *1500

Даны три строки: \(a\), \(b\) и \(c\), состоящие из строчных латинских букв. Строка \(c\) была получена следующим образом:

  1. На каждом шаге случайно выбиралась строка \(a\) или строка \(b\), и первый символ выбранной строки удалялся из неё и приписывался в конец строки \(c\), пока одна из строк не заканчивалась. После этого оставшиеся символы непустой строки добавлялись в конец \(c\).
  2. Затем в строке \(c\) было произвольно изменено некоторое количество символов.

Например, из строк \(a=\color{red}{\text{abra}}\) и \(b=\color{blue}{\text{cada}}\) без замен символов могли получиться строки \(\color{blue}{\text{ca}}\color{red}{\text{ab}}\color{blue}{\text{d}}\color{red}{\text{ra}}\color{blue}{\text{a}}\), \(\color{red}{\text{abra}}\color{blue}{\text{cada}}\), \(\color{red}{\text{a}}\color{blue}{\text{cada}}\color{red}{\text{bra}}\).

Найдите минимальное количество символов, которые могли быть изменены в строке \(c\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора содержит одну строку из строчных латинских букв \(a\) (\(1 \leq |a| \leq 10^3\)) — первая строка. Где \(|a|\) обозначает длину строки \(a\).

Вторая строка каждого набора содержит одну строку из строчных латинских букв \(b\) (\(1 \leq |b| \leq 10^3\)) — вторая строка. Где \(|b|\) обозначает длину строки \(b\).

Третья строка каждого набора содержит одну строку из строчных латинских букв \(c\) (\(|c| = |a| + |b|\)) — третья строка.

Гарантируется, что сумма \(|a|\) по всем наборам входных данных не превосходит \(2 \cdot 10^3\). Также сумма \(|b|\) по всем наборам входных данных не превосходит \(2 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество символов, которые могли быть изменены в строке \(c\).

G. Развал дерева

Деревья дп поиск в глубину и подобное *1900

Дано дерево\(^{\text{∗}}\) из \(n\) вершин. Вы можете один раз выбрать две вершины \(a\) и \(b\) и удалить все вершины на пути из \(a\) в \(b\), включая сами вершины. Если вы выберете \(a=b\), то будет удалена только одна вершина.

Ваша задача — найти максимальное количество компонент связности\(^{\text{†}}\), которое может образоваться после удаления пути из дерева.

\(^{\text{∗}}\)Деревом называется связный граф без циклов.

\(^{\text{†}}\)Компонента связности это такое множество вершин, в котором из каждой вершины можно попасть по рёбрам в любую другую (и нельзя попасть в вершины, не принадлежащие этому множеству)

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — размер дерева.

Следующие \(n-1\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — вершины, соединённые ребром. Гарантируется, что рёбра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное число компонент связности, которого можно добиться с помощью описанной операции.

G. Змейки

битмаски графы дп снм *2100

Предположим, вы играете в игру, где игровое поле выглядит как полоска из \(1 \times 10^9\) квадратных ячеек, пронумерованных от \(1\) до \(10^9\).

У вас есть \(n\) змеек (пронумерованных от \(1\) до \(n\)), которые нужно разместить в некоторых ячейках. Изначально каждая змейка занимает ровно одну ячейку, и вы не можете разместить более одной змейки в одной ячейке. После этого начинается игра.

Игра длится \(q\) секунд. Каждую секунду происходит один из двух типов событий:

  • змейка \(s_i\) увеличивается: если змейка \(s_i\) занимала ячейки \([l, r]\), она увеличивается до отрезка \([l, r + 1]\);
  • змейка \(s_i\) уменьшается: если змейка \(s_i\) занимала ячейки \([l, r]\), она уменьшается до отрезка \([l + 1, r]\).

Каждую секунду происходит ровно одно из событий.

Если в любой момент времени какая-либо змея наткнется на какое-либо препятствие (либо на другую змею, либо на конец полосы), вы проигрываете. В противном случае вы выигрываете со счетом, равным максимальной ячейке, занятой какой-либо змеей на данный момент.

Какой минимально возможный счет вы можете получить?

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n \le 20\); \(1 \le q \le 2 \cdot 10^5\)) — количество змей и количество событий. Далее в \(q\) строках заданы описания событий — по одному на строку.

В \(i\)-й строке задано

  • либо «\(s_i\) +» (\(1 \le s_i \le n\)), означающее, что \(s_i\)-я змея увеличивается,
  • либо «\(s_i\) -» (\(1 \le s_i \le n\)), означающее, что \(s_i\)-я змея уменьшается.

Дополнительное ограничение на входные данные: заданная последовательность событий валидна, т. е. змея длиной \(1\) никогда не уменьшается.

Выходные данные

Выведите одно целое число — минимально возможный счет.

Примечание

В первом тесте оптимальная стратегия заключается в том, чтобы разместить вторую змею в ячейке \(1\), третью змею — в \(2\), а первую — в \(3\). Максимальная занятая ячейка — ячейка \(4\), и это минимально возможный результат.

Во втором тесте одна из оптимальных стратегий — следующая: нужно поставить

  • змейку \(2\) в позицию \(1\);
  • змейку \(3\) в позицию \(4\);
  • змейку \(5\) в позицию \(6\);
  • змейку \(1\) в позицию \(9\);
  • змейку \(4\) в позицию \(10\).

A. Добрый плотник

геометрия дп жадные алгоритмы математика *800

I would use a firework to announce, a wave to bid farewell, and a bow to say thanks: bygones are bygones; not only on the following path will I be walking leisurely and joyfully, but also the footsteps won't halt as time never leaves out flowing; for in the next year, we will meet again.
— Cocoly1990, Goodbye 2022

В своем сне Коколи отправился в длительный беззаботный отпуск. Он захотел попробовать себя в новых сферах, например... стать плотником. Чтобы научиться этому искусству, Коколи решил стать учеником Мастера, но перед ним встала трудная задача, которую ему предстоит решить.

Коколи даётся массив \(a_1, a_2,\ldots, a_n\). Мастер называет набор целых чисел \(S\) стабильным тогда и только тогда, когда для любых \(u\), \(v\) и \(w\) из множества \(S\) (обратите внимание, что \(u\), \(v\) и \(w\) не обязательно должны быть попарно различными), палочки длины \(u\), \(v\) и \(w\) могут образовать невырожденный треугольник\(^{\text{∗}}\).

Коколи предлагается разбить массив \(a\) на несколько (возможно, \(1\) или \(n\)) непустых непрерывных подотрезков\(^{\text{†}}\), таким образом, чтобы для каждого из подотрезков набор, содержащий все элементы в нём, был стабильным.

Мастер хочет, чтобы Коколи разбил \(a\) на подотрезки по крайней мере двумя различными\(^{\text{‡}}\) способами. Вы должны помочь ему определить, возможно ли это.

\(^{\text{∗}}\)Треугольник с длинами сторон \(x\), \(y\) и \(z\) называется невырожденным тогда и только тогда, когда:

  • \(x + y > z\),
  • \(y + z > x\), и
  • \(z + x > y\).

\(^{\text{†}}\)Последовательность \(b\) является подотрезком последовательности \(c\), если \(b\) может быть получена из \(c\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

\(^{\text{‡}}\)Два разбиения считаются различными тогда и только тогда, когда выполняется хотя бы одно из следующих условий:

  • количество непрерывных подотрезков в двух разбиениях различно;
  • существует целое число \(k\), такое, что длины \(k\)-го подотрезка в двух разбиениях различны.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 200\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq 10^5\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите \(\texttt{YES}\), если существует по крайней мере два способа разбиения \(a\), и \(\texttt{NO}\) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки \(\texttt{yEs}\), \(\texttt{yes}\), \(\texttt{Yes}\) и \(\texttt{YES}\) будут приняты как положительный ответ.

Примечание

В первом наборе входных данных можно привести в пример такие два разбиения:

  • \([2, 3], [5, 7]\), поскольку
    • \([2, 3]\) стабильный: палочки с длинами \((2, 2, 2), (2, 2, 3), (2, 3, 3), (3, 3, 3)\) образовывают невырожденные треугольники.
    • \([5, 7]\) стабильный: палочки с длинами \((5, 5, 5), (5, 5, 7), (5, 7, 7), (7, 7, 7)\) образовывают невырожденные треугольники.
  • и \([2], [3, 5], [7]\), поскольку
    • \([2]\) стабильный: палочки с длинами \((2, 2, 2)\) образовывают невырожденный треугольник.
    • \([3, 5]\) стабильный: палочки с длинами \((3, 3, 3), (3, 3, 5), (3, 5, 5), (5, 5, 5)\) образовывают невырожденные треугольники.
    • \([7]\) стабильный: палочки с длинами \((7, 7, 7)\) образовывают невырожденный треугольник.

Обратите внимание, что некоторые другие разбиения также удовлетворяют ограничениям. Например, \([2], [3], [5], [7]\) и \([2], [3], [5, 7]\).

Во втором наборе входных данных Коколи может только разбить элементы на отдельные подотрезки, что приводит к разбиению \([115], [9], [2], [28]\). Поскольку у нас есть только одно возможное разбиение, то ответ — \(\texttt{NO}\).

В третьем наборе входных данных обратите внимание, что разбиение \([8, 4], [1], [6], [2]\) не удовлетворяет ограничениям, поскольку \(\{8, 4\}\) не является стабильным множеством: палочки \(4\), \(4\) и \(8\) не образовывают невырожденный треугольник.

C. Очаровательный звездочет

битмаски дп математика разделяй и властвуй *1500

I'm praying for owning a transparent heart; as well as eyes with tears more than enough...

Ирис посмотрела на звезды, и в её голове возникла прекрасная задача. Она приглашает вас решить её, чтобы можно было предсказать метеоритный дождь.

На небе есть \(n\) звезд, расположенных в ряд. У Ирис есть телескоп, с помощью которого она смотрит на них.

Изначально Ирис наблюдает за звездами в отрезке \([1, n]\), и у неё есть значение удачи, равное \(0\). Ирис хочет найти центральную звезду для каждого отрезка \([l, r]\), за которым она наблюдает. Она использует следующую рекурсивную процедуру:

  • Сначала она вычисляет \(m = \left\lfloor \frac{l+r}{2} \right\rfloor\).
  • Если длина отрезка (т.е. \(r - l + 1\)) чётная, Ирис разделяет его на два отрезка одинаковой длины \([l, m]\) и \([m+1, r]\) для дальнейшего наблюдения.
  • В противном случае Ирис наведёт телескоп на звезду \(m\), и её значение удачи увеличится на \(m\); далее, если \(l \neq r\), Ирис продолжит наблюдать за двумя отрезками \([l, m-1]\) и \([m+1, r]\).

Ирис немного ленива. Она определяет свою лень целым числом \(k\): по мере продвижения наблюдения она не станет наблюдать за отрезком \([l, r]\), если его длина строго меньше \(k\). Пожалуйста, предскажите её итоговое значение удачи.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 2\cdot 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — итоговое значение удачи.

Примечание

В первом наборе входных данных, в начале Ирис наблюдает за отрезком \([1, 7]\). Поскольку у \([1, 7]\) нечётная длина, она наводит телескоп на звезду \(4\) и, следовательно, увеличивает своё значение удачи на \(4\). Затем отрезок разбивается на \(2\) новых отрезка: \([1, 3]\) и \([5, 7]\). Отрезок \([1, 3]\) снова имеет нечётную длину, поэтому Ирис прицеливается на звезду \(2\) и увеличивает своё значение удачи на \(2\). Затем он разбивается на \(2\) новых отрезка: \([1, 1]\) и \([3, 3]\), оба из которых имеют длину меньше \(2\), поэтому дальнейшее наблюдение не проводится. Что касается отрезка \([5, 7]\), то прогресс аналогичен, и значение удачи увеличивается на \(6\). Следовательно, итоговое значение удачи равняется \(4 + 2 + 6 = 12\).

В последнем наборе входных данных, Ирис в итоге понаблюдает за всеми звёздами, и итоговым значением удачи будет \(1 + 2 + \cdots + 8\,765\,432 = 38\,416\,403\,456\,028\).

E. Находчивая гусеничная последовательность

графы Деревья дп жадные алгоритмы игры поиск в глубину и подобное *1900

Endless Repeating 7 Days
— r-906, Panopticon

Дано дерево, состоящее из \(n\) вершин. Гусеница обозначается парой целых чисел \((p, q)\) (\(1 \leq p, q \leq n\), \(p \neq q\)): её голова находится в вершине \(p\), её хвост находится в вершине \(q\), и она доминирует над всеми вершинами на простом пути от \(p\) до \(q\) (включая \(p\) и \(q\)). Гусеничная последовательность пары \((p, q)\) определяется как последовательность, состоящая только из вершин на простом пути, отсортированных в порядке возрастания расстояния до \(p\).

Нора и Арон по очереди двигают гусеницу, причем Нора ходит первой. Оба игрока будут использовать свою собственную оптимальную стратегию:

  • Они будут играть, чтобы выиграть;
  • Однако, если это невозможно, они будут играть, чтобы помешать другому человеку победить (таким образом, игра закончится ничьёй).

В свой ход Нора может выбрать вершину \(u\), смежную с вершиной \(p\), над которой не доминирует гусеница, и переместить все вершины в ней на одно ребро по направлению к вершине \(u\)\(^{\text{∗}}\). В свою очередь, Арон может выбрать вершину \(v\), смежную с вершиной \(q\), над которой не доминирует гусеница, и переместить все вершины в ней на одно ребро по направлению к вершине \(v\). Обратите внимание, что ходы, разрешенные двум игрокам, различны.

Если \(p\) — лист\(^{\text{†}}\), то Нора выигрывает\(^{\text{‡}}\). Если \(q\) — лист, то Арон выигрывает. Если либо изначально оба \(p\) и \(q\) являются листьями, либо после \(10^{100}\) ходов игра не закончится, результатом будет ничья.

Пожалуйста, посчитайте количество целочисленных пар \((p, q)\) с \(1 \leq p, q \leq n\) и \(p \neq q\) таких, что если изначально гусеница находится на \((p, q)\), то Арон выиграет.

\(^{\text{∗}}\)Другими словами: Пусть текущая гусеничная последовательность равна \(c_1, c_2, \ldots, c_k\). Тогда после перемещения новая гусеничная последовательность становится \(d(u, c_1), d(u, c_2), \ldots, d(u, c_k)\). Здесь \(d(x, y)\) обозначает следующую вершину на простом пути от \(y\) до \(x\).

\(^{\text{†}}\)В дереве вершина называется листом тогда и только тогда, когда её степень равна \(1\).

\(^{\text{‡}}\)Поэтому Нора всегда может выбрать вершину \(u\), если игра ещё не закончилась. То же самое относится и к Арону.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2\cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 2\cdot 10^5\)) — количество вершин в дереве.

Каждая из следующих \(n - 1\) строк содержит по два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\)), обозначающих ребро между вершинами \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(4\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую целое число: количество целых пар \((p, q)\), для которых Арон выиграет.

Примечание

В первом наборе входных данных всеми возможными гусеницами являются \((1, 2)\) и \((2, 1)\), что приводит к ничьей с самого начала, поскольку оба \(p\) и \(q\) являются листьями.

Во втором наборе входных данных, гусеницы, которые позволяют Арону выиграть, следующие: \((1, 3)\), \((1, 4)\), \((1, 5)\), \((2, 3)\), \((2, 4)\), \((2, 5)\). Давайте рассмотрим некоторых гусениц.

  • Для гусеницы \((1, 5)\): вершина \(p = 1\) — это не лист, но вершина \(q = 5\) — лист, так что Арон выигрывает в самом начале.
  • Для гусеницы \((2, 1)\): вершина \(p = 2\) не является листом, и \(q = 1\) не является листом. На первом ходу Нора может переместить гусеницу в направлении вершины \(5\). Следовательно, гусеница становится \((5, 2)\), а вершина \(p = 5\) — лист, так что Нора выиграет.

F. Искренний матричный комплемент

дп жадные алгоритмы математика Перебор реализация Структуры данных *2600

3, 2, 1, ... We are the — RiOI Team!
— Felix & All, Special Thanks 3
  • Питер: Хорошие новости! Моя задача T311013 была одобрена!
  • \(\delta\): Я рад, что у моего компьютера разрядилась батарея, иначе я бы поучаствовал в раунде wyrqwq и получил бы отрицательную дельту.
  • Феликс: [thumbs_up] Условие задачи про удалённую песню!
  • Аквавейв: Нужно ли мне оплакивать свою химию?
  • Е.Космос: что?
  • Трайн: Хлеб.
  • Ирис: И почему же я всегда только тестирую задачи?

Пройдет время, и мы, возможно, встретимся снова. Оглядываясь назад на прошлое, можно сказать, что каждый прожил ту жизнь, которую хотел.

У Аквавейва есть матрица \(A\) размера \(n\times m\), элементы которой могут быть только целыми числами в диапазоне \([1, k]\) включительно. В матрице некоторые ячейки уже заполнены целым числом, в то время как остальные в данный момент не заполнены и обозначаются числом \(-1\).

Вы собираетесь заполнить все незаполненные ячейки в \(A\). После этого пусть \(c_{u,i}\) будет обозначать количество вхождений элемента \(u\) в \(i\)-ю строку. Аквавейв определяет красоту матрицы следующим образом:

\(\)\sum_{u=1}^k \sum_{i=1}^{n-1} c_{u,i} \cdot c_{u,i+1}.\(\)

Вы должны найти максимально возможную красоту \(A\) после оптимального заполнения пробелов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2\cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \leq n \leq 2\cdot 10^5\), \(2 \leq m \leq 2\cdot 10^5\), \(n \cdot m \leq 6\cdot 10^5\), \(1 \leq k \leq n\cdot m\)) — количество строк и столбцов матрицы \(A\) и диапазон целых чисел в матрице соответственно.

Затем следуют \(n\) строк, \(i\)-я строка содержит \(m\) целых числа \(A_{i,1},A_{i,2},\ldots,A_{i,m}\) (\(1 \leq A_{i,j} \leq k\) или \(A_{i,j} = -1\)) — элементы в \(A\).

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превосходит \(6\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможную красоту.

Примечание

В первом наборе входных данных матрица \(A\) уже определена. Её красота равняется

\(\)\sum_{u=1}^k \sum_{i=1}^{n-1} c_{u,i} \cdot c_{u,i+1} = c_{1,1}\cdot c_{1,2} + c_{1,2}\cdot c_{1,3} + c_{2,1}\cdot c_{2,2} + c_{2,2}\cdot c_{2,3} + c_{3,1}\cdot c_{3,2} + c_{3,2}\cdot c_{3,3} = 1\cdot 1 + 1\cdot 1 + 2\cdot 0 + 0\cdot 1 + 0\cdot 2 + 2\cdot 1 = 4.\(\)

Во втором наборе входных данных можно заполнить матрицу следующим образом:

\(\) \begin{bmatrix} 2 &3 &3 \\ 2 &2 &3 \end{bmatrix}, \(\)

и получить значение \(4\). Можно доказать, что это максимально возможный ответ, который можно получить.

В третьем наборе входных данных одной из возможных оптимальных конфигураций является:

\(\) \begin{bmatrix} 1 &1 &1 \\ 1 &2 &1 \\ 1 &1 &4 \end{bmatrix}. \(\)

В четвертом наборе входных данных одной из возможных оптимальных конфигураций является:

\(\) \begin{bmatrix} 1 &3 &2 &3 \\ 1 &3 &2 &1 \\ 3 &1 &5 &1 \end{bmatrix}. \(\)

В пятом наборе входных данных одной из возможных оптимальных конфигураций является:

\(\) \begin{bmatrix} 5 &5 &2 \\ 1 &8 &5 \\ 7 &5 &6 \\ 7 &7 &4 \\ 4 &4 &4 \end{bmatrix}. \(\)

I1. Ласковые массивы (простая версия)

дп жадные алгоритмы Структуры данных *2800

You are the beginning of the letter, the development of a poem, and the end of a fairy tale.
— ilem, Pinky Promise

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии вам нужно вычислить минимальную длину массива. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Ирис хранит целочисленный массив \(a_1, a_2, \ldots, a_n\). Она знает, что этот массив обладает интересным свойством: максимальное абсолютное значение всех элементов меньше или равно сумме всех элементов, то есть \(\max(\lvert a_i\rvert) \leq \sum a_i\).

Ирис определяет скучность массива как максимальную сумму его подмассива\(^{\text{∗}}\).

Приближается день рождения Ирис, и Виктор собирается прислать ей ещё один массив \(b_1, b_2, \ldots, b_m\). По некоторым, казалось бы, очевидным причинам он решает, что массив \(b_1, b_2, \ldots, b_m\) должен обладать следующими свойствами.

  • \(a_1, a_2, \ldots, a_n\) должен быть подпоследовательностью\(^{\text{†}}\) из \(b_1, b_2, \ldots, b_m\).
  • Эти два массива имеют одинаковую сумму. То есть, \(\sum\limits_{i=1}^n a_i = \sum\limits_{i=1}^m b_i\).
  • Значение скучности массива \(b_1, b_2, \ldots, b_m\) является наименьшим из возможных.
  • Среди массивов с наименьшей скучностью длина массива \(b\) (т.е. \(m\)) является наименьшей из возможных. В этом случае Ирис поймёт его уважение как можно скорее!

Даже при таких ограничениях, как указано выше, всё равно существует слишком много возможных подарков. Поэтому Виктор просит вас вычислить значение \(\boldsymbol{m}\) любого массива \(b_1, b_2, \ldots, b_m\), удовлетворяющего всем вышеприведенным условиям. Он обещает вам: если вы успешно поможете ему, он поделится с вами кусочком праздничного торта Ирис.

Обратите внимание: поскольку входные данные большие, вам, возможно, потребуется оптимизировать их для решения этой задачи.

Например, в C++ достаточно использовать следующие строки в начале функции main():

int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr); std::cout.tie(nullptr);
}

\(^{\text{∗}}\)Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

\(^{\text{†}}\)Последовательность \(c\) является подпоследовательностью \(d\), если \(c\) может быть получена из \(d\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 3\cdot 10^6\)) — длина массива \(a_1, a_2, \ldots, a_n\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — исходный массив. Гарантируется, что \(\max(\lvert a_i\rvert) \leq \sum a_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую целое число: длину \(m\) допустимого массива \(b\).

Примечание

В первом наборе входных данных, \(a=[1, 2, 3, 4]\). Единственным массивом \(b\), который удовлетворяет всем вышеприведенным свойствам, является \([1, 2, 3, 4]\), поэтому мы должны вывести \(4\).

Во втором наборе входных данных, \(a=[2, -3, 2, 2]\). Возможными массивами \(b\) являются \([1, 2, -3, 2, -1, 2]\) и \([2, 1, -3, 2, -1, 2]\), поэтому мы должны вывести \(6\).

I2. Ласковые массивы (сложная версия)

графы дп жадные алгоритмы кратчайшие пути математика Структуры данных *3500

Обратите внимание, что данное условие отличается от условия, использованного в официальном раунде. Условие было исправлено на версию, имеющую решение. Все посылки по этой задачи в официальном раунде были удалены.

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии вам нужно вычислить сумму значений подходящих массивов. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Ирис хранит целочисленный массив \(a_1, a_2, \ldots, a_n\). Она знает, что этот массив обладает интересным свойством: максимальное абсолютное значение всех элементов меньше или равно сумме всех элементов, то есть \(\max(\lvert a_i\rvert) \leq \sum a_i\).

Ирис определяет скучность массива как максимальную сумму его подмассива\(^{\text{∗}}\).

Приближается день рождения Ирис, и Виктор собирается прислать ей ещё один массив \(b_1, b_2, \ldots, b_m\). По некоторым, казалось бы, очевидным причинам он решает, что массив \(b_1, b_2, \ldots, b_m\) должен обладать следующими свойствами.

  • \(a_1, a_2, \ldots, a_n\) должен быть подпоследовательностью\(^{\text{†}}\) из \(b_1, b_2, \ldots, b_m\).
  • Эти два массива имеют одинаковую сумму. То есть, \(\sum\limits_{i=1}^n a_i = \sum\limits_{i=1}^m b_i\).
  • Значение скучности массива \(b_1, b_2, \ldots, b_m\) является наименьшим из возможных.
  • Среди массивов с наименьшей скучностью длина массива \(b\) (т.е. \(m\)) является наименьшей из возможных. В этом случае Ирис поймёт его уважение как можно скорее!

Для массива \(b_1, b_2, \ldots, b_m\), удовлетворяющего условиям выше, Виктор определяет значение массива как количество вхождений массива \(a\) как подпоследовательности в массив \(b\). Другими словами, вычисляет количество массивов \(c_1, c_2, \ldots, c_{n}\) таких, что \(1\le c_1< c_2< \ldots< c_n\le m\), и для всех целых \(i\), удовлетворяющих \(1\le i\le n\), выполняется \(b_{c_{i}}=a_i\), и называет это число значением массива \(b\).

Даже при таких ограничениях, как указано выше, всё равно существует слишком много возможных подарков. Поэтому Виктор просит вас посчитать сумму значений подходящих массивов \(b_1, b_2, \ldots, b_m\), удовлетворяющих всем вышеприведенным условиям. Так как ответ может быть очень большим, Виктору нужно только это число по модулю \(998\,244\,353\). Он обещает вам: если вы успешно поможете ему, он поделится с вами кусочком праздничного торта Ирис.

\(^{\text{∗}}\)Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

\(^{\text{†}}\)Последовательность \(c\) является подпоследовательностью \(d\), если \(c\) может быть получена из \(d\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 3\cdot 10^6\)) — длина массива \(a_1, a_2, \ldots, a_n\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — исходный массив. Гарантируется, что \(\max(\lvert a_i\rvert) \leq \sum a_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую целое число: сумму значений подходящих массивов \(b_1, b_2, \ldots, b_m\) по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных \(a=[1, 2, 3, 4]\). Единственный возможный массив \(b\) — это \([1, 2, 3, 4]\), его значение равно \(1\).

Во втором наборе входных данных \(a=[2, -3, 2, 2]\). Возможными массивами \(b\) являются \([1, 2, -3, 2, -1, 2]\) и \([2, 1, -3, 2, -1, 2]\), их значения равны \(1\).

В третьем наборе \(a=[1, -2, 2, 1]\). Единственный подходящий массив \(b\) является \([1, 1, -2, 2, -1, 1]\). Его значение равно \(2\), так как мы можем выбрать массивы \(c=[1,3,4,6]\) или \([2,3,4,6]\). Таким образом, массив \(a\) встречается в \(b\) дважды, поэтому ответ \(2\).

D. Равные медианы

Бинарный поиск дп Комбинаторика Перебор разделяй и властвуй Структуры данных *2200

Массив \(b\) из \(m\) целых чисел называется хорошим, если после его сортировки выполняется \(b_{\left\lfloor \frac{m + 1}{2} \right\rfloor} = b_{\left\lceil \frac{m + 1}{2} \right\rceil}\). Другими словами, \(b\) является хорошим, если обе его медианы равны. В частности, если \(m\) нечетно, то \(\left\lfloor \frac{m + 1}{2} \right\rfloor = \left\lceil \frac{m + 1}{2} \right\rceil\), поэтому \(b\) гарантированно будет хорошим, если он имеет нечетную длину.

Вам дан массив \(a\) из \(n\) целых чисел. Вычислите количество хороших подмассивов\(^{\text{∗}}\) в \(a\).

\(^{\text{∗}}\)Массив \(x\) является подмассивом массива \(y\), если \(x\) может быть получен из \(y\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le \color{red}{\textbf{10}}\)) — заданный массив.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество хороших подмассивов в \(a\).

Примечание

В первом наборе входных данных каждый подмассив является хорошим, поскольку все его элементы равны \(1\).

Во втором наборе входных данных примером хорошего подмассива является \(b = [10, 2, 3, 3]\). Если его отсортировать, то \(b = [2, 3, 3, 10]\), значит, \(b_{\left\lfloor \frac{4 + 1}{2} \right\rfloor} = b_{\left\lceil \frac{4 + 1}{2} \right\rceil} = b_2 = b_3 = 3\). Другим примером может быть \(b = [1, 10, 2]\). С другой стороны, \(b = [1, 10]\) не подходит, поскольку его две медианы равны \(1\) и \(10\), и они не равны.

E. Вложенные отрезки

дп Комбинаторика математика поиск в глубину и подобное снм *2500

Множество \(A\), состоящее из попарно различных отрезков \([l, r]\) с целочисленными концами, называется хорошим, если \(1\le l\le r\le n\), и для любой пары различных отрезков \([l_i, r_i], [l_j, r_j]\) из \(A\) выполняется ровно одно из следующих условий:

  • \(r_i < l_j\) или \(r_j < l_i\) (отрезки не пересекаются)
  • \(l_i \le l_j \le r_j \le r_i\) или \(l_j \le l_i \le r_i \le r_j\) (один отрезок полностью содержится внутри другого)

Вам дано хорошее множество \(S\), состоящее из \(m\) попарно различных отрезков \([l_i, r_i]\) с целочисленными концами. Вы хотите добавить как можно больше дополнительных отрезков к набору \(S\), так, чтобы набор \(S\) остался хорошим.

Поскольку эта задача слишком проста, вам нужно определить количество различных способов добавления максимального числа дополнительных отрезков к \(S\), так, чтобы набор остался хорошим. Два способа считаются разными, если существует отрезок, который добавляется одним из способов, но не другим.

Формально, вам нужно найти количество хороших наборов различных отрезков \(T\), таких, чтобы \(S\) было подмножеством \(T\), и \(T\) имело максимально возможный размер. Поскольку ответ может быть очень большим, вычислите его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le m \le 2 \cdot 10^5\)) — максимальный правый конец отрезка и размер \(S\).

\(i\)-я из следующих \(m\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — границы отрезков в наборе \(S\)

Гарантируется, что данное множество \(S\) является хорошим, и отрезки в множестве \(S\) попарно различны.

Гарантируется, что как сумма \(n\), так и сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных способов, которыми вы можете добавить максимальное количество дополнительных отрезков к набору \(S\), гарантируя при этом, что набор \(S\) останется хорошим, по модулю \(998\,244\,353\)

Примечание

В первом наборе входных данных единственным возможным отрезком является \([1, 1]\), поэтому \(T = \{[1, 1]\}\) имеет максимальный размер, и это единственное решение.

Во втором наборе входных данных невозможно добавить какие-либо дополнительные отрезки к набору \(S\). Следовательно, единственный способ добавить отрезки к \(S\) — это ничего не добавлять.

В третьем наборе входных данных можно добавить \(7\) дополнительных отрезков к \(S\), гарантируя, что набор останется хорошим. Можно доказать, что добавление более \(7\) дополнительных отрезков к \(S\) невозможно. Существует ровно \(2\) различных способа добавить эти \(7\) отрезков к \(S\), и соответствующие наборы \(T\) показаны ниже:

  • \(\{[1, 1], [1, 3], [1, 4], [1, 5], [2, 2], [2, 3], [3, 3], [4, 4], [5, 5]\}\)
  • \(\{[1, 1], [1, 3], [1, 5], [2, 2], [2, 3], [3, 3], [4, 4], [4, 5], [5, 5]\}\).

В четвертом наборе входных данных существует ровно \(5\) различных способов добавить максимум \(6\) дополнительных отрезков к \(S\), соответствующие наборы \(T\) показаны ниже:

  • \(\{[1, 1], [1, 2], [1, 3], [1, 4], [2, 2], [3, 3], [4, 4]\}\)
  • \(\{[1, 1], [1, 2], [1, 4], [2, 2], [3, 3], [3, 4], [4, 4]\}\)
  • \(\{[1, 1], [1, 3], [1, 4], [2, 2], [2, 3], [3, 3], [4, 4]\}\)
  • \(\{[1, 1], [1, 4], [2, 2], [2, 3], [2, 4], [3, 3], [4, 4]\}\)
  • \(\{[1, 1], [1, 4], [2, 2], [2, 4], [3, 3], [3, 4], [4, 4]\}\)

F1. Xor медиан (простая версия)

битмаски дп Комбинаторика математика Перебор *2700

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии ограничения на \(t\), \(k\) и \(m\) ниже. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Последовательность \(a\) из \(n\) целых чисел называется хорошей, если выполняется следующее условие:

  • Пусть \(\text{cnt}_x\) — количество вхождений \(x\) в последовательность \(a\). Для всех пар \(0 \le i < j < m\), по крайней мере одно из следующих условий должно быть истинным: \(\text{cnt}_i = 0\), \(\text{cnt}_j = 0\) или \(\text{cnt}_i \le \text{cnt}_j\). Другими словами, если и \(i\), и \(j\) присутствуют в последовательности \(a\), то число вхождений \(i\) в \(a\) меньше или равно числу вхождений \(j\) в \(a\).

Вам даны целые числа \(n\) и \(m\). Вычислите значение побитового XOR медиан\(^{\text{∗}}\) всех хороших последовательностей \(a\) длины \(n\), таких, что \(0\le a_i < m\).

Обратите внимание, что значение \(n\) может быть очень большим, поэтому вместо него вам даётся его двоичное представление.

\(^{\text{∗}}\)Медиана последовательности \(a\) длины \(n\) определяется как \(\left\lfloor\frac{n + 1}{2}\right\rfloor\)-е наименьшее значение в последовательности.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(k\) и \(m\) (\(1 \le k \le 200\), \(1 \le m \le 500\)) — количество битов в \(n\) и верхнюю границу элементов в последовательности \(a\).

Вторая строка каждого набора входных данных содержит бинарную строку длины \(k\) — двоичное представление \(n\) без ведущих нулей.

Гарантируется, что сумма значений \(k\) по всем наборам входных данных не превосходит \(200\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — побитовый XOR медиан всех хороших последовательностей \(a\) длины \(n\), где \(0\le a_i < m\)

Примечание

В первом наборе входных данных, \(n = 10_2 = 2\) и \(m = 3\). Существуют такие последовательности с элементами меньше \(m\): \([0, 0]\), \([0, 1]\), \([0, 2]\), \([1, 0]\), \([1, 1]\), \([1, 2]\), \([2, 0]\), \([2, 1]\), \([2, 2]\). Все они являются хорошими, поэтому ответ равен \(0 \oplus 0 \oplus 0 \oplus 0 \oplus 1 \oplus 1 \oplus 0 \oplus 1 \oplus 2 = 3\).

Во втором наборе входных данных, \(n = 11_2 = 3\) и \(m = 3\). Некоторыми хорошими последовательностями являются \([2, 2, 2]\), \([1, 0, 1]\), и \([2, 0, 1]\). Однако последовательность \([2, 0, 0]\) не является хорошей, потому что \(\text{cnt}_0 = 2\), \(\text{cnt}_2 = 1\). Следовательно, если мы выберем \(i = 0\) и \(j = 2\), то \(i < j\) выполняется, а \(\text{cnt}_i \le \text{cnt}_j\) неверно.

F2. Xor медиан (сложная версия)

битмаски дп Комбинаторика математика Перебор *3000

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии ограничения на \(t\), \(k\) и \(m\) выше. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Последовательность \(a\) из \(n\) целых чисел называется хорошей, если выполняется следующее условие:

  • Пусть \(\text{cnt}_x\) — количество вхождений \(x\) в последовательность \(a\). Для всех пар \(0 \le i < j < m\), по крайней мере одно из следующих условий должно быть истинным: \(\text{cnt}_i = 0\), \(\text{cnt}_j = 0\) или \(\text{cnt}_i \le \text{cnt}_j\). Другими словами, если и \(i\), и \(j\) присутствуют в последовательности \(a\), то число вхождений \(i\) в \(a\) меньше или равно числу вхождений \(j\) в \(a\).

Вам даны целые числа \(n\) и \(m\). Вычислите значение побитового XOR медиан\(^{\text{∗}}\) всех хороших последовательностей \(a\) длины \(n\), таких, что \(0\le a_i < m\).

Обратите внимание, что значение \(n\) может быть очень большим, поэтому вместо него вам даётся его двоичное представление.

\(^{\text{∗}}\)Медиана последовательности \(a\) длины \(n\) определяется как \(\left\lfloor\frac{n + 1}{2}\right\rfloor\)-е наименьшее значение в последовательности.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(k\) и \(m\) (\(1 \le k \le 2 \cdot 10^5\), \(1 \le m \le 10^9\)) — количество битов в \(n\) и верхнюю границу элементов в последовательности \(a\).

Вторая строка каждого набора входных данных содержит бинарную строку длины \(k\) — двоичное представление \(n\) без ведущих нулей.

Гарантируется, что сумма значений \(k\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — побитовый XOR медиан всех хороших последовательностей \(a\) длины \(n\), где \(0\le a_i < m\)

Примечание

В первом наборе входных данных, \(n = 10_2 = 2\) и \(m = 3\). Существуют такие последовательности с элементами меньше \(m\): \([0, 0]\), \([0, 1]\), \([0, 2]\), \([1, 0]\), \([1, 1]\), \([1, 2]\), \([2, 0]\), \([2, 1]\), \([2, 2]\). Все они являются хорошими, поэтому ответ равен \(0 \oplus 0 \oplus 0 \oplus 0 \oplus 1 \oplus 1 \oplus 0 \oplus 1 \oplus 2 = 3\).

Во втором наборе входных данных, \(n = 11_2 = 3\) и \(m = 3\). Некоторыми хорошими последовательностями являются \([2, 2, 2]\), \([1, 0, 1]\), и \([2, 0, 1]\). Однако последовательность \([2, 0, 0]\) не является хорошей, потому что \(\text{cnt}_0 = 2\), \(\text{cnt}_2 = 1\). Следовательно, если мы выберем \(i = 0\) и \(j = 2\), то \(i < j\) выполняется, а \(\text{cnt}_i \le \text{cnt}_j\) неверно.

E1. Очередное упражнение на графы (простая версия)

Бинарный поиск графы дп кратчайшие пути Перебор снм сортировки *2300

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии есть дополнительное ограничение на \(m\). Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Недавно преподавателям «Т-поколения» нужно было сделать учебный контест. Им не хватает одной задачи, и в контесте как раз нет ни одной задачи на графы, поэтому они придумали следующую задачу.

Вам дан связный взвешенный неориентированный граф из \(n\) вершин и \(m\) ребер, который не содержит петель и кратных ребер.

Есть \(q\) вопросов вида \((a, b, k)\): среди всех путей от вершины \(a\) до вершины \(b\) найти наименьший \(k\)-й максимум весов ребер на пути\(^{\dagger}\).

Преподавателям показалось, что задача звучит очень интересно, но есть одно но... они не умеют ее решать. Помогите им и решите задачу, ведь до начала контеста осталось всего пару часов.

\(^{\dagger}\) Пусть \(w_1 \ge w_2 \ge \ldots \ge w_{h}\) — веса всех ребер на пути в порядке невозрастания. Тогда \(k\)-й максимум весов ребер на этом пути равен \(w_{k}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, m\) и \(q\) (\(2 \le n \le 400\), \(n - 1 \le m \le \operatorname{min}(\mathbf{400}, \frac{n \cdot (n - 1)}{2})\), \(1 \le q \le 3 \cdot 10^5\)) — количество вершин, количество ребер и количество вопросов соответственно.

Каждая из следующих \(m\) строк каждого набора входных данных содержит три целых числа \(v, u\) и \(w\) (\(1 \le v, u \le n\), \(1 \le w \le 10^9\)) — концы очередного ребра графа и его вес соответственно. Гарантируется, что граф не содержит петель и кратных ребер.

Каждая из следующих \(q\) строк каждого набора входных данных содержит три целых числа \(a, b\) и \(k\) (\(1 \le a, b \le n\), \(k \ge 1\)) — очередной вопрос. Гарантируется, что любой путь из вершины \(a\) в вершину \(b\) содержит не менее \(k\) ребер.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(400\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(400\).

Гарантируется, что сумма значений \(q\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответы на все вопросы.

Примечание

В первом наборе входных данных одним из оптимальных путей в первом запросе является путь \(1 \rightarrow 3 \rightarrow 4\), \(2\)-й максимум весов ребер на этом пути это \(1\). Во втором запросе одними из оптимальных путей являются путь \(2 \rightarrow 4 \rightarrow 3\), \(1\)-й максимум весов ребер это \(2\).

Во втором наборе входных данных одним из оптимальных путей в первом запросе является путь \(1 \rightarrow 2 \rightarrow 4 \rightarrow 5 \rightarrow 6\), \(3\)-й максимум весов ребер на этом пути это \(2\).

E2. Очередное упражнение на графы (сложная версия)

Бинарный поиск графы дп кратчайшие пути поиск в глубину и подобное снм сортировки *2500

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии Дополнительные ограничения на \(m\) отсутствуют. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Недавно преподавателям «Т-поколения» нужно было сделать учебный контест. Им не хватает одной задачи, и в контесте как раз нет ни одной задачи на графы, поэтому они придумали следующую задачу.

Вам дан связный взвешенный неориентированный граф из \(n\) вершин и \(m\) ребер, который не содержит петель и кратных ребер.

Есть \(q\) вопросов вида \((a, b, k)\): среди всех путей от вершины \(a\) до вершины \(b\) найти наименьший \(k\)-й максимум весов ребер на пути\(^{\dagger}\).

Преподавателям показалось, что задача звучит очень интересно, но есть одно но... они не умеют ее решать. Помогите им и решите задачу, ведь до начала контеста осталось всего пару часов.

\(^{\dagger}\) Пусть \(w_1 \ge w_2 \ge \ldots \ge w_{h}\) — веса всех ребер на пути в порядке невозрастания. Тогда \(k\)-й максимум весов ребер на этом пути равен \(w_{k}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, m\) и \(q\) (\(2 \le n \le 400\), \(n - 1 \le m \le \frac{n \cdot (n - 1)}{2}\), \(1 \le q \le 3 \cdot 10^5\)) — количество вершин, количество ребер и количество вопросов соответственно.

Каждая из следующих \(m\) строк каждого набора входных данных содержит три целых числа \(v, u\) и \(w\) (\(1 \le v, u \le n\), \(1 \le w \le 10^9\)) — концы очередного ребра графа и его вес соответственно. Гарантируется, что граф не содержит петель и кратных ребер.

Каждая из следующих \(q\) строк каждого набора входных данных содержит три целых числа \(a, b\) и \(k\) (\(1 \le a, b \le n\), \(k \ge 1\)) — очередной вопрос. Гарантируется, что любой путь из вершины \(a\) в вершину \(b\) содержит не менее \(k\) ребер.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(400\).

Гарантируется, что сумма значений \(q\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответы на все вопросы.

Примечание

В первом наборе входных данных одним из оптимальных путей в первом запросе является путь \(1 \rightarrow 3 \rightarrow 4\), \(2\)-й максимум весов ребер на этом пути это \(1\). Во втором запросе одними из оптимальных путей являются путь \(2 \rightarrow 4 \rightarrow 3\), \(1\)-й максимум весов ребер это \(2\).

Во втором наборе входных данных одним из оптимальных путей в первом запросе является путь \(1 \rightarrow 2 \rightarrow 4 \rightarrow 5 \rightarrow 6\), \(3\)-й максимум весов ребер на этом пути это \(2\).

F. Линейка

Бинарный поиск дп сортировки Структуры данных *3300

В один из дней преподаватели «Т-поколения» решили приучить школьников к дисциплине, поэтому поставили их в ряд. Вам известно, что всего есть \(n\) школьников, у \(i\)-го по порядку школьника рост равен \(a_i\).

Школьникам комфортно, если для каждого \(i\) от \(1\) до \(n - 1\) выполняется следующее условие: \(a_i \cdot 2 \ge a_{i + 1}\). Изначально школьникам комфортно.

Преподавателям не нравится то, что максимальный рост в ряду слишком маленький, поэтому они хотят накормить школьников пиццей. Если школьник съест одну пиццу, то его рост увеличится на \(1\). Одну пиццу может съесть только один школьник, но каждый школьник может съесть неограниченное количество пицц. Важно, чтобы после того как все школьники съели свои пиццы, школьникам было комфортно.

У преподавателей есть \(q\) вариантов того, сколько пицц они закажут. Для каждого варианта \(k_i\) ответьте на вопрос: какой максимальный рост \(\max(a_1, a_2, \ldots, a_n)\) можно получить, если школьники съедят не более \(k_i\) пицц.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 5 \cdot 10^4\)) — количество школьников и количество вариантов того, сколько пицц закажут преподаватели.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — высоты школьников. Гарантируется, что изначально школьникам комфортно.

Каждая из следующих \(q\) строк каждого набора входных данных содержит одно целое число \(k_i\) (\(1 \le k_i \le 10^9\)) — очередной вариант того, сколько максимум пицц могут съесть школьники.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\).

Гарантируется, что сумма значений \(q\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных для каждого варианта того, сколько максимум пицц могут съесть школьники, выведите максимальное значение \(\max(a_1, a_2, \ldots, a_n)\), которое можно получить, чтобы школьникам было комфортно.

Примечание

В первом запросе первого набора входных данных можно сначала дать \(3\) пиццы первому школьнику, а потом второму школьнику \(6\) пицц, тогда итоговый массив станет \([13, 26]\) (школьникам комфортно, так как \(13 \cdot 2 \ge 26\)), максимальный элемент в нем равен \(26\).

F. Умножительные массивы

дп Комбинаторика теория чисел *2200

Даны целые числа \(k\) и \(n\). Для каждого целого числа \(x\) от \(1\) до \(k\) посчитайте количество целых массивов \(a\), таких что выполняются все следующие условия:

  • \(1 \leq |a| \leq n\), где \(|a|\) обозначает длину массива \(a\).
  • \(1 \leq a_i \leq k\) для всех \(1 \leq i \leq |a|\).
  • \(a_1 \times a_2 \times \dots \times a_{|a|}=x\) (т.е. произведение всех элементов равно \(x\)).

Обратите внимание, что два массива \(b\) и \(c\) различны, если либо их длины различны, либо существует индекс \(1 \leq i \leq |b|\), такой что \(b_i\neq c_i\).

Выведите ответ по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t\leq 10^3\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(k\) и \(n\) (\(1 \leq k \leq 10^5, 1\leq n \leq 9\cdot 10^8\)).

Гарантируется, что сумма \(k\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(k\) целых чисел, разделенных пробелом, на новой строке: количество массивов для \(x=1,2,\ldots,k\), по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных существует \(2\) массива \(a\) с \(|a|\leq 2\) и произведением элементов, равным \(1\):

  • \([1]\)
  • \([1,1]\)

Существует \(3\) массива \(a\) с \(|a|\leq 2\) и произведением элементов, равным \(2\):

  • \([2]\)
  • \([1,2]\)
  • \([2,1]\)

G. Ошибочная сортировка

дп жадные алгоритмы сортировки *2400

Сегодня Алиса дала Бобу массивы, которые он должен отсортировать по возрастанию. Снова! На данный момент никто точно не знает, сколько раз она это делала.

Бобу даны две последовательности \(a\) и \(b\), обе длиной \(n\). Все целые числа в диапазоне от \(1\) до \(2n\) встречаются ровно один раз в одной из последовательностей \(a\) или \(b\). Другими словами, конкатенированная\(^{\text{∗}}\) последовательность \(a+b\) является перестановкой\(^{\text{†}}\) длины \(2n\).

Боб должен отсортировать обе последовательности по возрастанию одновременно, используя функцию swap Алисы. Функция swap Алисы реализована следующим образом:

  • Даны два индекса \(i\) и \(j\) (\(i \neq j\)), она меняет местами \(a_i\) с \(b_j\) и \(b_i\) с \(a_j\).

Учитывая последовательности \(a\) и \(b\), пожалуйста, определите, можно ли отсортировать обе последовательности по возрастанию одновременно после использования функции swap Алисы любое количество раз.

\(^{\text{∗}}\)Конкатенированная последовательность \(a+b\) обозначает последовательность \([a_1, a_2, a_3, \ldots , b_1, b_2, b_3, \ldots]\).

\(^{\text{†}}\)Перестановка длины \(m\) содержит все целые числа от \(1\) до \(m\) в каком-то порядке.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 2n\)).

Третья строка каждого набора входных данных содержит \(b_1,b_2,\ldots,b_n\) (\(1 \le b_i \le 2n\)).

Гарантируется, что все целые числа в диапазоне \([1,2n]\) встречаются ровно один раз в одной из последовательностей \(a\) или \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Если возможно отсортировать обе последовательности одновременно, выведите «YES» в новой строке. В противном случае выведите «NO» в новой строке.

Вы можете вывести ответ в любом регистре. Например, строки «yEs», «yes», и «Yes» также будут признаны положительными ответами.

Примечание

В первом наборе входных данных можно показать, что это невозможно.

Во втором наборе входных данных Боб может выполнить одну операцию с индексами \(i=1\) и \(j=2\). Массивы становятся \([3,4,5]\) и \([1,2,6]\) соответственно. Оба массива теперь отсортированы.

C. Кевин и головоломка

2-sat дп Комбинаторика *1600

Кевин увлекается логическими головоломками.

Он играет в игру с \(n\) одноклассниками, которые стоят в очереди. \(i\)-й человек слева заявляет, что слева от него (не включая его самого) находится \(a_i\) лжецов.

Каждый одноклассник либо рыцарь, либо лжец, с тем ограничением, что два лжеца не могут стоять рядом друг с другом. Одноклассники-рыцари всегда говорят правду. Лжецы могут говорить либо правду, либо ложь, то есть их заявления недостоверны.

Кевин хочет определить количество различных возможных конфигураций рыцарей и лжецов по модулю \(998\,244\,353\). Две конфигурации считаются различными, если по крайней мере один одноклассник является рыцарем в одной конфигурации и лжецом в другой.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1\leq n \leq 2 \cdot 10^5\)) — количество одноклассников.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0\leq a_i \leq n\)) — количество лжецов слева от \(i\)-го человека, о котором они заявили.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество различных конфигураций по модулю \(998\,244\,353\).

Примечание

Мы будем использовать \(\color{red}{\text{красный}}\) для обозначения лжецов и \(\color{blue}{\text{синий}}\) для обозначения рыцарей.

В первом наборе входных данных единственной возможной конфигурацией является \((\color{red}{0},\color{blue}{1},\color{red}{2})\).

Во втором наборе входных данных возможны две конфигурации: \((\color{blue}{0},\color{blue}{0},\color{blue}{0},\color{blue}{0},\color{blue}{0})\) и \((\color{blue}{0},\color{blue}{0},\color{blue}{0},\color{blue}{0},\color{red}{0})\).

В третьем наборе входных данных возможны три конфигурации: \((\color{blue}{0},\color{blue}{0},\color{red}{1},\color{blue}{1},\color{red}{2})\), \((\color{blue}{0},\color{red}{0},\color{blue}{1},\color{red}{1},\color{blue}{2})\) и \((\color{blue}{0},\color{red}{0},\color{blue}{1},\color{blue}{1},\color{red}{2})\).

E. Кевин и И

битмаски дп жадные алгоритмы математика Перебор сортировки *2000

У Кевина есть целочисленная последовательность \(a\) длины \(n\). Также у Кевина есть \(m\) типов магии, где \(i\)-й тип магии может быть представлен целым числом \(b_i\).

Кевин может выполнить не более \(k\) (возможно, ноль) магических операций:

  • Выбрать два индекса \(i\) (\(1\leq i\leq n\)) и \(j\) (\(1\leq j\leq m\)), а затем сделать \(a_i\) равным \(a_i\ \&\ b_j\). Здесь \(\&\) обозначает операцию побитового И.

Найдите минимально возможную сумму последовательности \(a\) после выполнения не более \(k\) операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, m, k\) (\(1\leq n \leq 10^5\), \(1\leq m \leq 10\), \(0\leq k\leq nm\)) — длина \(a\), количество типов магии и максимальное количество операций.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0\leq a_i < 2^{30}\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(0\leq b_i < 2^{30}\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможную сумму последовательности \(a\) после выполнения не более \(k\) операций.

Примечание

В первом наборе входных данных возможна такая последовательность операций:

  • Сделать \(a_1\) равным \(a_1\ \&\ b_1\). Последовательность станет равна \([5]\).
  • Сделать \(a_1\) равным \(a_1\ \&\ b_3\). Последовательность станет равна \([1]\).

Во втором наборе входных данных возможна такая последовательность операций:

  • Сделать \(a_1\) равным \(a_1\ \&\ b_3\). Последовательность станет равна \([1, 6]\).
  • Сделать \(a_2\) равным \(a_2\ \&\ b_3\). Последовательность станет равна \([1, 2]\).

F2. Кевин и бинарная строка (сложная версия)

дп Структуры данных *3500

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии строка \(t\) состоит из «0», «1» и «?». Вы можете делать взломы только в том случае, если решили все версии этой задачи.

У Кевина есть бинарная строка \(s\) длины \(n\). Кевин может выполнять следующую операцию:

  • Выбрать два соседних блока строки \(s\) и поменять их местами.

Блок — это максимальная по включению подстрока\(^{\text{∗}}\) из одинаковых символов. Формально, обозначим подстроку \(s_l s_{l+1} \ldots s_r\) как \(s[l,r]\). Тогда \(s[l,r]\) является блоком, если выполняются все условия:

  • \(l=1\) или \(s_l\not=s_{l-1}\).
  • \(s_l=s_{l+1} = \ldots = s_{r}\).
  • \(r=n\) или \(s_r\not=s_{r+1}\).

Соседними блоками являются два блока \(s[l_1,r_1]\) и \(s[l_2,r_2]\), для которых \(r_1+1=l_2\).

Например, если \(s=\mathtt{000}\,\mathbf{11}\,\mathbf{00}\,\mathtt{111}\), Кевин может выбрать два блока \(s[4,5]\) и \(s[6,7]\) и поменять их местами, преобразовав \(s\) в \(\mathtt{000}\,\mathbf{00}\,\mathbf{11}\,\mathtt{111}\).

Дана строка \(t\) длины \(n\), состоящая из символов «0», «1» и «?». Кевин хочет определить минимальное количество операций, необходимых для получения строки, для которой выполняется следующее условие: для любого индекса \(i\) (\(1\le i\le n\)), если \(t_i\not=\) '?', то \(s_i=t_i\). Если это невозможно, выведите \(-1\).

\(^{\text{∗}}\)Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов с начала и нескольких (возможно, ни одного или всех) символов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит строку \(s\), состоящую из «0» и «1».

Вторая строка каждого набора входных данных содержит строку \(t\), состоящую из «0», «1» и «?».

Гарантируется, что \(s\) и \(t\) имеют одинаковую длину.

Гарантируется, что сумма длин \(s\) по всем наборам входных данных не превосходит \(4\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное необходимое количество операций. Если это невозможно, выведите \(-1\).

Примечание

В первом наборе первого примера возможная последовательность операций приведена в условии.

Во втором наборе первого примера можно применить такую последовательность операций:

  • Переставить блоки \([2, 2], [3, 3]\): \(s\) станет \(\mathtt{001101}\).
  • Переставить блоки \([3, 4], [5, 5]\): \(s\) станет \(\mathtt{000111}\).
  • Переставить блоки \([1, 3], [4, 6]\): \(s\) станет \(\mathtt{111000}\).

В первом наборе второго примера можно применить такую последовательность операций:

  • Переставить блоки \([1, 1], [2, 2]\): \(s\) станет \(\mathtt{100101}\).
  • Переставить блоки \([4, 4], [5, 5]\): \(s\) станет \(\mathtt{100011}\).

I. Кевин и Нивек

дп разделяй и властвуй *3500

Кевин и Нивек соревнуются за титул «Лучший Кевин». Их цель — определить победителя за \(n\) матчей.

\(i\)-й матч может быть одного из двух типов:

  • Тип 1: Кевину нужно потратить \(a_i\) времени, чтобы победить Нивека и выиграть матч. Если Кевин не потратит на этот матч \(a_i\) времени, Нивек выиграет матч.
  • Тип 2: Исход этого матча зависит от их исторических данных. Если количество побед Кевина больше или равно количеству побед Нивека до этого матча, то Кевин выиграет. В противном случае выиграет Нивек.

Кевин хочет узнать, какое минимальное количество времени ему нужно потратить, чтобы выиграть как минимум \(k\) матчей.

Выведите ответы для \(k = 0, 1, \ldots, n\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество матчей.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-1 \leq a_i \leq 10^9\)).

Если \(a_i = -1\), то \(i\)-й матч имеет Тип 2. В противном случае \(i\)-й матч имеет Тип 1, а \(a_i\) представляет количество времени, которое Кевину нужно потратить, чтобы выиграть этот матч.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n + 1\) целое число. \(i\)-е целое число представляет минимальное количество времени для победы по крайней мере в \(i-1\) матче.

Примечание

В первом наборе входных данных все матчи относятся к типу 2. Кевин автоматически выигрывает все матчи.

Во втором наборе входных данных все матчи относятся к типу 1. Кевин может выбирать матчи в порядке возрастания \(a_i\).

В третьем наборе входных данных:

  • Если Кевин потратит \(a_1\) времени на матч \(1\), он может выиграть матчи \(1, 2, 3, 4\).
  • Если Кевин потратит \(a_5\) времени на матч \(5\), он может выиграть матч \(5\).
  • Если Кевин потратит \(a_1\) времени на матч \(1\) и \(a_5\) времени на матч \(5\), он может выиграть все матчи.

D. Сбалансированное дерево

графы Деревья дп жадные алгоритмы поиск в глубину и подобное *2200

Дано дерево\(^{\text{∗}}\) с \(n\) вершинами и значениями \(l_i, r_i\) для каждой вершины. Вы можете выбрать начальные значения \(a_i\), удовлетворяющие условию \(l_i\le a_i\le r_i\) для \(i\)-й вершины. Дерево считается сбалансированным, если все значения в вершинах равны, а значение сбалансированного дерева определяется как значение любой вершины.

За одну операцию вы можете выбрать две вершины \(u\) и \(v\) и увеличить значения всех вершин в поддереве\(^{\text{†}}\) вершины \(v\) на \(1\), рассматривая \(u\) как корень всего дерева. Обратите внимание, что \(u\) может быть равен \(v\).

Ваша цель — выполнить последовательность операций так, чтобы дерево стало сбалансированным. Найдите минимально возможное значение дерева после выполнения этих операций. Обратите внимание, что вам не нужно минимизировать количество операций.

\(^{\text{∗}}\)Деревом называется связный граф без циклов.

\(^{\text{†}}\)Вершина \(w\) принадлежит поддереву вершины \(v\), если любой путь от корня \(u\) до \(w\) проходит через \(v\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество входных наборов данных.

Первая строка каждого набора данных содержит одно целое число \(n\) (\(1 \le n \le 2\cdot 10^5\)) — количество вершин в дереве.

Затем следуют \(n\) строк. \(i\)-я строка содержит два целых числа \(l_i,r_i\) (\(0\le l_i \le r_i\le 10^9\)) — ограничения на значение \(i\)-й вершины.

Следующие \(n-1\) строк содержат ребра дерева. \(i\)-я строка содержит два целых числа \(u_i,v_i\) (\(1\le u_i,v_i \le n\), \(u_i \neq v_i\)) — ребро, соединяющее \(u_i\) и \(v_i\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора данных выведите одно целое число — минимально возможное значение, к которому могут быть приведены все \(a_i\) после выполнения операций. Можно доказать, что ответ всегда существует.

Примечание

В первом наборе данных вы можете выбрать \(a=[6,6,0,5]\).

Вы можете выполнить следующие операции, чтобы сделать все \(a_i\) равными:

  1. Выберите \(u=4\), \(v=3\) и выполните операцию \(5\) раз.
  2. Выберите \(u=1\), \(v=3\) и выполните операцию \(6\) раз.

Полный процесс показан ниже (числа в скобках — значения \(a\)):

Можно доказать, что это оптимальное решение.

F. Задача котовояжёра

геометрия графы дп жадные алгоритмы Конструктив математика сортировки *2900

Вы — кот, продающий интересные алгоритмические задачи. Сегодня вы хотите прорекламировать свои интересные алгоритмические задачи в \(k\) городах.

Всего есть \(n\) городов, каждый из которых имеет два параметра \(a_i\) и \(b_i\). Между любыми двумя городами \(i,j\) (\(i\ne j\)) есть двусторонняя дорога длиной \(\max(a_i + b_j , b_i + a_j)\). Стоимость пути определяется как сумма длин дорог между каждыми двумя соседними городами вдоль пути.

Для \(k=2,3,\ldots,n\) найдите минимальную стоимость среди всех простых путей, содержащих ровно \(k\) различных городов.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 1500\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 3\cdot 10^3\)) — количество городов.

Затем следуют \(n\) строк, \(i\)-я строка содержит два целых числа \(a_i,b_i\) (\(0 \leq a_i,b_i \leq 10^9\)) — параметры города \(i\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превышает \(9\cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите \(n-1\) целых числа в одной строке. \(i\)-е целое число представляет собой минимальную стоимость при \(k=i+1\).

Примечание

В первом наборе входных данных:

  • Для \(k=2\) оптимальный путь: \(1\to 2\) со стоимостью \(\max(0+1,2+2)=4\).
  • Для \(k=3\) оптимальный путь: \(2\to 1\to 3\) со стоимостью \(\max(0+1,2+2)+\max(0+3,3+2)=4+5=9\).

Во втором наборе входных данных:

  • Для \(k=2\) оптимальный путь: \(1\to 4\).
  • Для \(k=3\) оптимальный путь: \(2\to 3\to 5\).
  • Для \(k=4\) оптимальный путь: \(4\to 1\to 3\to 5\).
  • Для \(k=5\) оптимальный путь: \(5\to 2\to 3\to 1\to 4\).

H. Генератор галактик

битмаски дп Комбинаторика *3500

В двумерной вселенной звезда может быть представлена как точка \((x,y)\) на двумерной плоскости. Две звезды соединены напрямую, если и только если их \(x\) или \(y\) координаты одинаковы, и между ними нет других звезд на отрезке. Определим галактику как связную компоненту, состоящую из звезд, соединенных напрямую или косвенно (через другие звезды).

Для набора звезд его значение определяется как минимальное количество галактик, которое можно получить для этого набора, после выполнения следующей операции любое (возможно, нулевое) количество раз: в рамках операции вы можете выбрать точку \((x,y)\), в которой нет звезды. Если звезда, созданная в этой точке, может быть соединена напрямую как минимум с \(3\) звездами, то вы создаете в этой точке звезду.

Вам дана матрица \(a\) размера \(n\times n\), состоящая из \(0\) и \(1\) и описывающая набор звёзд \(S\). Звезда находится в \((x,y)\) тогда и только тогда, когда \(a_{x,y}=1\). Вычислите сумму значений всех непустых подмножеств \(S\) по модулю \(10^9 + 7\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 14\)) — размер матрицы \(a\).

Далее следуют \(n\) строк. \(i\)-я строка содержит строку \(a_i\) длины \(n\) — \(i\)-я строка матрицы \(a\).

Гарантируется, что сумма \(2^n\) по всем наборам входных данных не превосходит \(2^{14}\).

Выходные данные

Для каждого набора входных данных выведите сумму значений всех непустых подмножеств \(S\) по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных \(S\) пусто. У \(S\) нет непустых подмножеств. Поэтому ответ \(0\).

Во втором наборе входных данных \(S = \{(1,2),(2,1)\}\). У \(S\) есть \(3\) непустых подмножества.

  • \(\{(1,2)\}\) и \(\{(2,1)\}\) — в наборе только одна звезда, образующая \(1\) галактику.
  • \(\{(1,2),(2,1)\}\) — две звезды в наборе не соединены, образуя \(2\) галактики.

Таким образом, ответ равен \(1+1+2=4\).

В третьем наборе входных данных \(S = \{(1,2),(3,1),(3,3)\}\). У \(S\) есть \(7\) непустых подмножеств.

  • \(\{(1,2)\}\), \(\{(3,1)\}\) и \(\{(3,3)\}\) — в наборе только одна звезда, образующая \(1\) галактику.
  • \(\{(1,2),(3,1)\}\) и \(\{(1,2),(3,3)\}\) — две звезды в наборе не соединены, образуя \(2\) галактики.
  • \(\{(3,1),(3,3)\}\) — две звезды в наборе соединены, образуя \(1\) галактику.
  • \(\{(1,2),(3,1),(3,3)\}\) — изначально звезда \((1,2)\) не входит в галактику, образованную \((3,1)\) и \((3,3)\). Вы можете выполнить операцию, создав звезду в \((3,2)\), соединяющую эти три звезды, образуя \(1\) галактику.

Таким образом, ответ равен \(1+1+1+2+2+1+1=9\).

C. Удалить ровно две

графы Деревья дп жадные алгоритмы Перебор поиск в глубину и подобное сортировки Структуры данных *1600

Недавно Маленький Джон получил дерево от своей тёти, чтобы украсить свой дом. Но, как кажется, одного дерева недостаточно, чтобы украсить весь дом. У Маленького Джона появилась идея. Может быть, он сможет удалить несколько вершин из дерева. Это превратит его в большее количество деревьев! Верно?

Вам дано дерево\(^{\text{∗}}\), состоящее из \(n\) вершин. Вы должны выполнить следующую операцию ровно дважды.

  • Выберите вершину \(v\);
  • Удалите все рёбра, соединённые с вершиной \(v\), а также саму вершину \(v\).

Вам необходимо найти максимальное количество компонент связности после выполнения операции ровно дважды.

Две вершины \(x\) и \(y\) находятся в одной компоненте связности тогда и только тогда, когда существует путь от \(x\) до \(y\). Граф с \(0\) вершинами имеет \(0\) компонент связности по определению.\(^{\text{†}}\)

\(^{\text{∗}}\)Деревом называется связный граф без циклов.

\(^{\text{†}}\)Но считается ли такой граф связным?..

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\) и \(v_i\), обозначающие две вершины, соединённые ребром (\(1 \le u_i,v_i \le n\), \(u_i \neq v_i\)). Гарантируется, что данные рёбра образуют дерево.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите максимальное количество компонент связности в отдельной строке.

Примечание

В первом примере удаление вершины дважды сделает граф пустым. По определению количество компонент связности в графе с \(0\) вершинами равно \(0\). Поэтому ответ равен \(0\).

Во втором примере удаление двух вершин \(1\) и \(2\) оставляет \(2\) компоненты связности. Поскольку невозможно создать \(3\) компоненты связности с \(2\) вершинами, ответ равен \(2\).

В третьем примере удаление двух вершин \(1\) и \(5\) оставляет \(4\) компоненты связности, которые являются \(\left\{ 2,4\right\}\), \(\left\{ 3\right\}\), \(\left\{ 6\right\}\) и \(\left\{ 7\right\}\). Можно показать, что невозможно получить \(5\) компонент связности. Поэтому ответ равен \(4\).

E. Треугольное дерево

Деревья дп жадные алгоритмы поиск в глубину и подобное Структуры данных *2300

Однажды в деревне выросло гигантское дерево. Маленький Джон, со своим детским орлом, решил сделать его своим домом. Маленький Джон построит конструкцию на дереве из оцинкованной квадратной стали. Однако он не знал, что не сможет построить то, что физически невозможно.

Вам дано корневое дерево\(^{\text{∗}}\), содержащее \(n\) вершин, с корнем в вершине \(1\). Пара вершин \((u,v)\) называется хорошей парой, если \(u\) не является предком\(^{\text{†}}\) \(v\), и \(v\) не является предком \(u\). Для любых двух вершин \(\text{dist}(u,v)\) определяется как количество рёбер на уникальном простом пути от \(u\) до \(v\), а \(\text{lca}(u,v)\) определяется как их наименьший общий предок.

Функция \(f(u,v)\) определяется следующим образом.

  • Если \((u,v)\) — это хорошая пара, то \(f(u,v)\) — это количество различных целых значений \(x\), таких что существует невырожденный треугольник\(^{\text{‡}}\) с длинами сторон \(\text{dist}(u,\text{lca}(u,v))\), \(\text{dist}(v,\text{lca}(u,v))\) и \(x\).
  • В противном случае \(f(u,v)\) равно \(0\).

Вам необходимо посчитать следующее значение: \(\)\sum_{i = 1}^{n-1} \sum_{j = i+1}^n f(i,j).\(\)

\(^{\text{∗}}\)Деревом называется связный граф без циклов. Корневым деревом называется дерево, в котором одна из вершин специальная и называется корнем.

\(^{\text{†}}\)Предком вершины \(v\) называется любая вершина на пути от \(v\) до корня, включая корень, но не включая \(v\). У корня нет предков.

\(^{\text{‡}}\)Треугольник с длинами сторон \(a\), \(b\), \(c\) является невырожденным, если \(a+b > c\), \(a+c > b\), \(b+c > a\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Каждая из следующих \(n-1\) строк содержит два целых числа \(u_i\) и \(v_i\), обозначающие две вершины, соединенные ребром (\(1 \le u_i,v_i \le n\), \(u_i \neq v_i\)). Гарантируется, что заданные рёбра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ на новой строке.

Примечание

В первом наборе входных данных единственной хорошей парой \((i,j)\), удовлетворяющей \(i<j\), является \((2,3)\). Здесь \(\text{lca}(2,3)\) равен \(1\), а два расстояния равны \(1\) и \(1\).

Существует только одно значение \(x\) для двух длин сторон \(1\) и \(1\), а именно \(1\). Поэтому ответ для первого набора входных данных равен \(1\).

Во втором примере нет хорошей пары. Поэтому ответ для второго теста равен \(0\).

В третьем примере хорошими парами \((i,j)\), удовлетворяющими \(i<j\), являются следующие:

  • \((2,5)\): \(\text{lca}(2,5)\) равен \(1\), расстояния равны \(1\) и \(1\). Существует только одно возможное значение \(x\), а именно \(1\).
  • \((3,4)\): \(\text{lca}(3,4)\) равен \(2\), расстояния равны \(1\) и \(1\). Существует только одно возможное значение \(x\), а именно \(1\).
  • \((3,5)\): \(\text{lca}(3,5)\) равен \(1\), расстояния равны \(2\) и \(1\). Существует только одно возможное значение \(x\), а именно \(2\).
  • \((4,5)\): \(\text{lca}(4,5)\) равен \(1\), расстояния равны \(2\) и \(1\). Существует только одно возможное значение \(x\), а именно \(2\).

Поэтому ответ для третьего примера равен \(1+1+1+1=4\).

F1. Считать не весело (Простая версия)

графы Деревья дп Комбинаторика математика поиск в глубину и подобное реализация снм Структуры данных хэши *2400

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии ограничения на \(t\) и \(n\) меньше. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Теперь Маленький Джон богат, и поэтому он наконец-то покупает дом, достаточно большой, чтобы вместить его и его любимую скобочную последовательность. Но каким-то образом он оказался с большим количеством скобок! Разочарованный, он пробивает потолок с помощью «ладони Будды».

Скобочная последовательность называется правильной, если она может быть построена по следующей формальной грамматике:

  1. Пустая последовательность \(\varnothing\) сбалансирована.
  2. Если скобочная последовательность \(A\) правильная, то \(\mathtt{(}A\mathtt{)}\) также является правильной.
  3. Если скобочные последовательности \(A\) и \(B\) правильные, то и их конкатенированная последовательность \(A B\) также правильная.

Например, последовательности «(())()», «()», «(()(()))» и пустая последовательность являются правильными, в то время как «(()» и «(()))(» — нет.

Дана правильная скобочная последовательность \(s\), пара индексов \((i,j)\) (\(i<j\)) называется хорошей, если \(s_i\) — это «(», а \(s_j\) — это «)», и две скобки добавляются одновременно в соответствии с правилом 2 при построении последовательности \(s\). Например, последовательность «(())()» имеет три разные хорошие пары: \((1,4)\), \((2,3)\) и \((5,6)\). Можно показать, что любая правильная скобочная последовательность из \(2n\) скобок содержит ровно \(n\) различных пар скобок, и использование любого порядка правил для построения одной и той же последовательности скобок приведет к одному и тому же набору пар скобок.

Эмили будет играть в игру по угадыванию скобок с Джоном. Игра проходит следующим образом.

Изначально у Джона есть правильная скобочная последовательность \(s\), содержащая \(n\) различных пар скобок, которая не известна Эмили. Джон говорит Эмили значение \(n\) и просит Эмили угадать последовательность.

На протяжении \(n\) ходов Джон дает Эмили следующие подсказки на каждом ходе:

  • \(l\;r\): Последовательность \(s\) содержит пару скобок \((l,r)\).

Гарантируется, что подсказки, которые Джон дает Эмили, попарно различны и не противоречат друг другу.

В какой-то момент Эмили может быть уверена, что правильная скобочная последовательность, удовлетворяющая подсказкам, данным до сих пор, уникальна. Например, предположим, что Эмили знает, что \(s\) имеет \(3\) хорошие пары, и она содержит пару скобок \((2,5)\). Из \(5\) правильных скобочных последовательностей с \(3\) хорошими парами существует только одна такая последовательность «((()))» с парой скобок \((2,5)\). Следовательно, можно увидеть, что Эмили не всегда нужно \(n\) ходов, чтобы угадать \(s\).

Чтобы как можно раньше узнать содержимое \(s\), Эмили хочет знать количество различных правильных скобочных последовательностей, которые соответствуют подсказкам после каждого хода. Конечно, это не легкая задача для Эмили, особенно когда ей дано настолько много хороших пар. Теперь ваша очередь помочь Эмили. Учитывая подсказки, вы должны найти ответ до всех ходов и после каждого хода. Поскольку ответы могут быть огромными, вам нужно найти их по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 5000\)) — количество хороших пар.

Затем каждая из следующих \(n\) строк содержит два целых числа \(l_i\) и \(r_i\), представляющих \(i\)-ю подсказку (\(1 \le l_i < r_i \le 2n\)).

Подсказки в одном наборе входных данных попарно различны и не противоречат друг другу.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5000\).

Выходные данные

Для каждого набора выведите \(n+1\) целых числа в одной строке:

  • Первое целое число — это ответ до всех подсказок, по модулю \(998\,244\,353\).
  • Для всех \(i \ge 1\), \(i+1\)-е целое число — это ответ после \(i\)-й подсказки, по модулю \(998\,244\,353\).
Примечание

Первый пример из примера объясняется в описании задачи.

Третий пример из примера объясняется следующим образом.

Можно показать, что существует \(132\) сбалансированных последовательностей скобок с \(6\) парами скобок. Ответы после каждой подсказки следующие:

  1. Вам дана хорошая пара \((2,3)\). Существует \(42\) правильных скобочных последовательностей, имеющих хорошую пару \((2,3)\).
  2. Вам дана хорошая пара \((1,6)\). Существует \(5\) правильных скобочных последовательностей, имеющих хорошие пары \((2,3)\), \((1,6)\).
  3. Вам дана хорошая пара \((7,8)\). Существуют \(2\) правильных скобочных последовательностей, имеющих три хорошие пары. Это строки «(()())()(())» и «(()())()()()», соответственно.
  4. Вам дана хорошая пара \((9,12)\). Существует только одна правильная скобочная последовательность, содержащая четыре хорошие пары. Таким образом, содержимое \(s\) имеет вид «(()())()(())».

Тогда количество правильных скобочных последовательностей после пятой и шестой подсказки равно \(1\), поскольку вы уже знаете содержимое \(s\).

C1. Скибидус и Fanum tax (простая версия)

Бинарный поиск дп жадные алгоритмы *1100

Это простая версия задачи. В этой версии \(m = 1\).

Скибидус получил два массива \(a\) и \(b\), содержащие соответственно \(n\) и \(m\) элементов. Для каждого целого числа \(i\) от \(1\) до \(n\) ему разрешено выполнить операцию не более одного раза:

  • Выбрать целое число \(j\) такое, что \(1 \leq j \leq m\). Присвоить \(a_i := b_j - a_i\). Обратите внимание, что в результате этой операции \(a_i\) может стать неположительным.

Скибидус нуждается в вашей помощи, чтобы определить, может ли он отсортировать \(a\) в неубывающем порядке\(^{\text{∗}}\) выполнив вышеуказанную операцию некоторое количество раз.

\(^{\text{∗}}\)\(a\) отсортирован в неубывающем порядке, если \(a_1 \leq a_2 \leq \ldots \leq a_n\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\), \(\textbf{m = 1}\)).

Следующая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Следующая строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \leq b_i \leq 10^9\)).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если возможно отсортировать \(a\) в неубывающем порядке, выведите «YES» на новой строке. В противном случае выведите «NO» на новой строке.

Вы можете выводить ответ в любом регистре. Например, строки «yEs», «yes», и «Yes» также будут распознаны как положительные ответы.

Примечание

В первом наборе входных данных \([5]\) уже отсортирован.

Во втором наборе входных данных можно показать, что это невозможно.

В третьем наборе входных данных мы можем присвоить \(a_3:=b_1-a_3=6-2=4\). Последовательность \([1,4,4,5]\) отсортирована в неубывающем порядке.

В последнем случае мы можем применить операции на каждом индексе. Последовательность становится \([-1,0,1]\), которая отсортирована в неубывающем порядке.

H. Бро считает себя избранным

дп Комбинаторика математика матрицы разделяй и властвуй Структуры данных *2200

Скибидус думает, что он избранный! Он доказал это, решив эту сложную задачу. Сможете ли вы?

Дана двоичная строка\(^{\text{∗}}\) \(t\), \(f(t)\) определяется как минимальное количество смежных подстрок, каждая из которых состоит из одинаковых символов, на которые можно разбить \(t\). Например, \(f(\texttt{00110001}) = 4\), потому что \(t\) можно разбить как \(\texttt{[00][11][000][1]}\), где каждый сегмент в скобках состоит из одинаковых символов.

Скибидус даёт вам двоичную строку \(s\) и \(q\) запросов. В каждом запросе один символ строки переворачивается (т.е. \(\texttt{0}\) меняется на \(\texttt{1}\), а \(\texttt{1}\) меняется на \(\texttt{0}\)), изменения сохраняются после обработки запроса. После каждого запроса выведите сумму по всем \(f(b)\), где \(b\) — это непустая подпоследовательность\(^{\text{†}}\) строки \(s\), по модулю \(998\,244\,353\).

\(^{\text{∗}}\)Двоичная строка состоит только из символов \(\texttt{0}\) и \(\texttt{1}\).

\(^{\text{†}}\)Подпоследовательность строки — это строка, которую можно получить, удалив несколько (возможно, ноль) символов из оригинальной строки.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит двоичную строку \(s\) (\(1 \leq |s| \leq 2 \cdot 10^5\)).

Следующая строка каждого набора содержит целое число \(q\) (\(1 \leq q \leq 2 \cdot 10^5\)) — количество запросов.

Следующая строка содержит \(q\) целых чисел \(v_1, v_2, \ldots, v_q\) (\(1 \leq v_i \leq |s|\)), обозначающих, что \(s_{v_i}\) переворачивается в \(i\)-м запросе.

Гарантируется, что сумма \(|s|\) и сумма \(q\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q\) целых чисел в одной строке — ответ после каждого запроса по модулю \(998\,244\,353\).

Примечание

В первом тестовом случае \(s\) становится \(\texttt{001}\) после первого запроса. Давайте посчитаем ответ для каждой подпоследовательности:

  • \(f(s_1) = f(\texttt{0}) = 1\)
  • \(f(s_2) = f(\texttt{0}) = 1\)
  • \(f(s_3) = f(\texttt{1}) = 1\)
  • \(f(s_1 s_2) = f(\texttt{00}) = 1\)
  • \(f(s_1 s_3) = f(\texttt{01}) = 2\)
  • \(f(s_2 s_3) = f(\texttt{01}) = 2\)
  • \(f(s_1 s_2 s_3) = f(\texttt{001}) = 2\)

Сумма этих значений равна \(10\), по модулю \(998\,244\,353\).

B. Белая магия

дп жадные алгоритмы Конструктив реализация Структуры данных *1900

Назовём последовательность чисел \(a_1, a_2, \ldots, a_n\) магической, если для всех \(1 \leq i \leq n-1\) верно, что: \(\operatorname{min}(a_1, \ldots, a_i) \geq \operatorname{mex}(a_{i+1}, \ldots, a_n)\). В частности, любая последовательность длины \(1\) является магической.

Наименьшее исключенное (MEX) набора чисел \(a_1, a_2, \ldots, a_k\) определяется как наименьшее неотрицательное целое число \(t\), которое не встречается в наборе чисел \(a\).

Вам дана последовательность \(a\) из \(n\) целых неотрицательных чисел. Найдите максимально возможную длину магической подпоследовательности\(^{\text{∗}}\) последовательности \(a\).

\(^{\text{∗}}\)Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину последовательности \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — элементы последовательности \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимально возможную длину магической подпоследовательности последовательности \(a\).

Примечание

В первом наборе входных данных сама последовательность \([4, 3, 2, 1, 0]\) является магической, так как:

  • \(\operatorname{min}(4) = 4, \operatorname{mex}(3, 2, 1, 0) = 4\). \(4 \geq 4\)
  • \(\operatorname{min}(4, 3) = 3, \operatorname{mex}(2, 1, 0) = 3\). \(3 \geq 3\)
  • \(\operatorname{min}(4, 3, 2) = 2, \operatorname{mex}(1, 0) = 2\). \(2 \geq 2\)
  • \(\operatorname{min}(4, 3, 2, 1) = 1, \operatorname{mex}(0) = 1\). \(1 \geq 1\)

Во втором наборе входных данных последовательность \([4, 3, 3, 2, 1, 0]\) не является магической, так как \(\operatorname{min}(4, 3) = 3, \operatorname{mex}(3, 2, 1, 0) = 4\), \(3 < 4\). Но подпоследовательность \([4, 3, 2, 1, 0]\) этой последовательности является магической, поэтому ответ \(5\).

C. Битовые горки

битмаски дп Комбинаторика математика *2300

Вам дан массив \(a_1, a_2, \ldots, a_n\). А также три переменные \(P,Q,R\), изначально равные нулю.

Вам необходимо поочерёдно обработать все числа \(a_1, a_2, \ldots, a_n\), в порядке от \(1\) до \(n\). Обрабатывая очередное \(a_i\), вы должны сделать ровно одно из трёх действий на выбор:

  1. \(P := P \oplus a_i\)
  2. \(Q := Q \oplus a_i\)
  3. \(R := R \oplus a_i\)

\(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Выполняя действия, надо соблюдать главное правило: необходимо, чтобы после каждого действия все три числа \(P,Q,R\) не были попарно различны.

Всего есть \(3^n\) способов произвести все \(n\) действий. Сколько из них не нарушают главное правило? Так как ответ может быть достаточно большим, найдите его по модулю \(10^9 + 7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество способов произвести все \(n\) действий, не нарушая главное правило, по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных 3 валидные последовательности операций: PPP, QQQ, RRR

Во втором наборе входных данных 9 валидных последовательностей операций: PPPP, PPPQ, PPPR, QQQP, QQQQ, QQQR, RRRP, RRRQ, RRRR.

D1. Клуб юных авиастроителей (простая версия)

дп Комбинаторика математика *2400

Это easy версия задачи. Отличие между версиями заключается в том, что в этой версии все \(a_i = 0\). Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Есть \(n\)-этажный дом, этажи пронумерованы от \(1\) до \(n\) снизу вверх. На каждом этаже живёт ровно один человек.

У всех жителей дома сегодня есть очень важная цель: запустить всем домом суммарно хотя бы \(c\) бумажных самолётиков. Жители будут запускать самолётики поочерёдно. Когда человек с \(i\)-го этажа запускает самолётик, это видят все жители на этажах от \(1\) до \(i\), пока самолёт опускается на землю.

Если с точки зрения жителя с \(i\)-го этажа уже было запущено хотя бы \(c\) самолётиков, сам он больше не будет запускать самолётики. Также известно, что в конце дня, с точки зрения каждого из жителей дома было запущено хотя бы \(c\) самолётиков, а всего было кинуто \(m\) самолётиков.

Вы внимательно следили за данным флешмобом, и для каждого самолётика записывали, житель какого из этажей его кинул. Но, к сожалению, информация о том, кто именно кидал некоторые самолётики, была утеряна. Найдите количество способов заполнить пропуски, чтобы информация могла быть достоверной. Так как ответ может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

В этой версии задачи была утеряна вся информация, и весь массив состоит из пропусков.

Также возможна ситуация, что вы ошиблись в своих записях, и не существует ни одного возможного способа восстановить пропуски. В таком случае ответ считается равным \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, c, m\) (\(1 \le n \le 100\), \(1 \le c \le 100\), \(c \le m \le n \cdot c\)) — количество этажей в доме, минимально необходимое количество самолётиков и количество реально запущенных самолётиков.

Вторая строка каждого набора входных данных содержит \(m\) целых чисел \(a_1, a_2, \ldots, a_m\) (\(0 \le a_i \le n\)) — \(a_i\) означает, житель какого этажа запускал \(i\)-й по счёту самолётик, \(a_i = 0\) обозначает пропуск.

В этой версии задачи гарантируется, что все \(a_i = 0\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите количество способов заполнить пропуски числами от \(1\) до \(n\), чтобы хронология запуска самолётиков могла быть достоверной, по модулю \(10^9 + 7\).

Примечание

В первом тестовом примере все шесть возможных способов заполнить пропуски таковы:

  1. \([1, 1, 3, 3]\)
  2. \([1, 2, 3, 3]\)
  3. \([1, 3, 2, 3]\)
  4. \([2, 1, 3, 3]\)
  5. \([2, 2, 3, 3]\)
  6. \([3, 1, 2, 3]\)

Обратите внимание, что массив \([2, 3, 1, 3]\) не является валидным способом заполнить пропуски, так как третий самолётик не мог быть запущен человеком с \(1\) этажа, так как с его точки зрения уже было запущено \(c = 2\) самолётика.

Также массив \([1, 1, 2, 3]\) не является валидным способом заполнить пропуски, так как с точки зрения человека с \(3\) этажа всего был запущен только \(1\) самолётик, а \(c = 2\).

D2. Клуб юных авиастроителей (сложная версия)

дп Комбинаторика математика *2900

Это hard версия задачи. Отличие между версиями заключается в том, что в этой версии не обязательно \(a_i = 0\). Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Есть \(n\)-этажный дом, этажи пронумерованы от \(1\) до \(n\) снизу вверх. На каждом этаже живёт ровно один человек.

У всех жителей дома сегодня есть важная цель: запустить всем домом суммарно хотя бы \(c\) бумажных самолётиков. Жители будут запускать самолётики поочерёдно. Когда человек с \(i\)-го этажа запускает самолётик, это видят все жители на этажах от \(1\) до \(i\), пока самолёт опускается на землю. Если с точки зрения жителя с \(i\)-го этажа уже было запущено хотя бы \(c\) самолётиков, сам он больше не будет запускать самолётики. Также известно, что в конце дня, с точки зрения каждого из жителей дома, было запущено хотя бы \(c\) самолётиков, а всего было кинуто \(m\) самолётиков.

Вы внимательно следили за данным флешмобом, и для каждого самолётика записывали, житель какого из этажей его кинул. Но, к сожалению, информация о том, кто именно кидал некоторые самолётики, была утеряна. Найдите количество способов заполнить пропуски, чтобы информация могла быть достоверной. Так как ответ может быть достаточно большим, выведите его по модулю \(10^9 + 7\).

Также возможна ситуация, что вы ошиблись в своих записях, и не существует ни одного возможного способа восстановить пропуски. В таком случае ответ считается равным \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n, c, m\) (\(1 \le n \le 100\), \(1 \le c \le 100\), \(c \le m \le n \cdot c\)) — количество этажей в доме, минимально необходимое количество самолётиков и количество реально запущенных самолётиков.

Вторая строка каждого набора входных данных содержит \(m\) целых чисел \(a_1, a_2, \ldots, a_m\) (\(0 \le a_i \le n\)) — \(a_i\) означает, житель какого этажа запускал \(i\)-й по счёту самолётик, \(a_i = 0\) обозначает пропуск.

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите количество способов заполнить пропуски числами от \(1\) до \(n\), чтобы хронология запуска самолётиков могла быть достоверной, по модулю \(10^9 + 7\).

Примечание

В первом тестовом примере все шесть возможных способов заполнить пропуски таковы:

  1. \([1, 1, 3, 3]\)
  2. \([1, 2, 3, 3]\)
  3. \([1, 3, 2, 3]\)
  4. \([2, 1, 3, 3]\)
  5. \([2, 2, 3, 3]\)
  6. \([3, 1, 2, 3]\)

Обратите внимание, что массив \([2, 3, 1, 3]\) не является валидным способом заполнить пропуски, так как третий самолётик не мог быть запущен человеком с \(1\) этажа, так как с его точки зрения уже было запущено \(c = 2\) самолётика.

Также массив \([1, 1, 2, 3]\) не является валидным способом заполнить пропуски, так как с точки зрения человека с \(3\) этажа всего был запущен только \(1\) самолётик, а \(c = 2\).

F. Проклятье

дп Конструктив математика *3300

Вам даны два массива из целых чисел: \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_m\)

Вам нужно определить, возможно ли превратить массив \(a\) в массив \(b\), используя следующую операцию некоторое количество раз.

  • Cреди всех непустых подмассивов\(^{\text{∗}}\) \(a\) выбрать любой с максимальной суммой и заменить этот подмассив на произвольный непустой массив целых чисел.

Если это возможно, вам нужно построить любую возможную последовательность операций. Ограничение: в вашем ответе сумма длин массивов, на которые идёт замена, не должна превышать \(n + m\) по всем операциям. А используемые числа по модулю не должны превышать \(10^9\).

\(^{\text{∗}}\)Массив \(a\) является подмассивом массива \(b\), если \(a\) может быть получен из \(b\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1 \le n, m \le 500\)) — длины массива \(a\) и \(b\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^6 \le a_i \le 10^6\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(-10^6 \le b_i \le 10^6\)) — элементы массива \(b\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(500\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если невозможно преобразовать массив \(a\) в массив \(b\).

Иначе в первой строке выведите число операций \(0 \leq q \leq n + m\). Далее выведите операции в следующем формате в порядке выполнения:

В первой строке выведите три числа \(l, r, k\) (\(1 \leq l \leq r \leq |a|\)). А во второй строке \(k\) целых чисел \(c_1 \ldots c_k\). что означает замену отрезка \(a_l, \ldots, a_r\) на массив \(c_1, \ldots, c_k\).

Сумма \(k\) по всем \(q\) операциям не должна превышать \(n + m\). Также должно быть выполнено \(-10^9 \leq c_i \leq 10^9\).

Вам не нужно минимизировать число операций.

Примечание

В первом тесте изначальный массив изменяется следующим образом.

\(\) [2, -3, 2, 0] \to [2, -3, -3] \to [-3, -3, -3] \to [-3, -7, -3] \to [-3, -7, 0] \(\)

Вы можете выводить или не выводить пустые строки. В примере пустые строки добавлены для удобства.

B. Два больших мешка

дп жадные алгоритмы Перебор сортировки *1200

У вас есть два больших мешка с числами. Изначально первый мешок содержит \(n\) чисел: \(a_1, a_2, \ldots, a_n\), а второй мешок пуст. Вам разрешено применять следующие операции:

  • Выбрать любое число из первого мешка и переместить его во второй мешок.
  • Выбрать число из первого мешка, такое что равное ему обязательно присутствует во втором мешке, и увеличить его на единицу.

Вы можете применять неограниченное количество операций обоих типов в любом порядке. Возможно ли сделать содержимое первого и второго мешка одинаковым?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 1000\)) — длина массива \(a\). Гарантируется, что \(n\) — чётное число.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «YES», если возможно уравнять содержимое мешков. Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

Разберём шестой тестовый пример: покажем последовательность операций, приводящую к равенству мешков. Изначально первый мешок состоит из чисел \((3, 3, 4, 5, 3, 3)\), а второй мешок пуст.

  1. В первую операцию перемещаем число \(3\) из первого мешка во второй. Состояние: \((3, 4, 5, 3, 3)\) и \((3)\).
  2. Во вторую операцию увеличиваем число \(3\) из первого мешка на единицу. Эта операция возможна, так как второй мешок содержит число \(3\). Состояние: \((4, 4, 5, 3, 3)\) и \((3)\).
  3. В третью операцию перемещаем число \(4\) из первого мешка во второй. Состояние: \((4, 5, 3, 3)\) и \((3, 4)\).
  4. В четвёртую операцию увеличиваем число \(4\) из первого мешка на единицу. Состояние: \((5, 5, 3, 3)\) и \((3, 4)\).
  5. В пятую операцию перемещаем число \(5\) из первого мешка во второй. Состояние: \((5, 3, 3)\) и \((3, 4, 5)\).
  6. В шестую операцию увеличиваем число \(3\) из первого мешка на единицу. Состояние: \((5, 3, 4)\) и \((3, 4, 5)\).

Как видим, в результате таких операций возможно сделать содержимое мешков равным, поэтому ответ существует.

B. Пасьянс

дп поиск в глубину и подобное *1900

Мальчик Вася хочет разложить древнерусский пасьянс под названием «Боян». Пасьянс раскладывается по следующим правилам:

  • Колода из n карт тщательно перемешивается, после чего все n карт выкладываются на стол в ряд слева направо;
  • Перед каждым ходом на столе лежат в ряд несколько стопок карт (изначально n стопок, в каждой стопке по одной карте). Пронумеруем эти стопки слева направо от 1 до x. За один ход разрешается целиком переместить стопку с наибольшим номером x (то есть самую правую из оставшихся) на стопку x - 1 (если такая существует) или на стопку x - 3 (если такая существует). При этом одну стопку можно переместить на другую, только если верхние карты этих стопок имеют одинаковые масти или достоинства. Заметим, что если стопка x перемещается на стопку y, верхняя карта стопки x становится верхней картой результирующей стопки. Также заметим, что после каждого хода общее количество стопок уменьшается на 1;
  • Пасьянс считается разложенным, если все карты находятся в одной стопке.

Вася уже перемешал карты и выложил их на стол, помогите ему понять, можно разложить пасьянс из этих карт или нет.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 52) — количество карт в колоде Васи. В следующей строке записано n строк через пробел c1, c2, ..., cn, где строка ci описывает i-ую выложенную на стол карту колоды. Каждая строка ci состоит ровно из двух символов, первый символ обозначает достоинство карты, второй — масть. Карты на столе пронумерованы слева направо.

Достоинство карты описывается одним из символов: «2», «3», «4», «5», «6», «7», «8», «9», «T», «J», «Q», «K», «A». Масть карты описывается одним из символов: «S», «D», «H», «C».

Не гарантируются, что в колоде присутствуют все возможные карты. Также карты в колоде Васи могут повторяться.

Выходные данные

Выведите в единственной строке ответ на задачу: строку «YES» (без кавычек), если разложить пасьянс возможно, строку «NO» (без кавычек) в противном случае.

Примечание

В первом примере можно действовать так:

  • переложить 4-ую стопку на 1-ую;
  • переложить 3-ую стопку на 2-ую;
  • переложить 2-ую стопку на 1-ую.

Во втором примере разложить пасьянс никак нельзя.

C. Контрольный пункт полиции

графы дп кратчайшие пути *1900

Дорожная сеть Берляндии состоит из n городов и m двусторонних дорог. Города пронумерованы от 1 до n, причем главная столица имеет номер n, а культурная столица — номер 1. Дорожная сеть устроена таким образом, что по дорогам возможно доехать от любого города до любого другого. Проезд по каждой их дорог в любом направлении занимает одно и тоже время.

Все жители Берляндии — очень ленивые люди, и поэтому, когда они хотят добраться из города v в город u, то всегда выбирают один из кратчайших путей (неважно какой именно).

Правительство Берляндии хочет сделать дорожную сеть своей страны более безопасной и для этого собирается поставить в один из городов пункт полиции, который обладает странным свойством: когда гражданин Берляндии едет по дороге, в одном из концов которой находится пункт полиции, он внимательнее следит за дорогой, и поэтому все такие дороги считаются безопасными. Дороги, оба конца которых отличаются от города с пунктом полиции, считаются опасными.

Теперь Правительство задумалось, где поставить пункт полиции так, чтобы усредненное количество безопасных дорог по всем кратчайшим путям от культурной столицы до главной принимало максимальное значение.

Входные данные

В первой строке входных данных содержатся два целых числа n и m (2 ≤ n ≤ 100, ) — количество городов и количество дорог в Берляндии соотвественно. Далее в m строках даны пары целых чисел vi, ui (1 ≤ vi, ui ≤ n, vi ≠ ui) — номера городов, соединенных i-ой дорогой. Числа в строке разделяются пробелом.

Гарантируется, что каждая пара городов соединена не более одной дорогой и что по дорогам Берляндии можно доехать от любого города до любого другого.

Выходные данные

Выведите максимально возможное значение усредненного количества безопасных дорог по всем кратчайшим путям от культурной столицы до главной. Ответ будет считаться правильным, если его абсолютная или относительная погрешность не превосходит 10 - 6.

Примечание

В первом примере если поставить пункт полиции в одну из столиц, тогда на каждом пути будет ровно по одной безопасной дороге, а если пункт поставить не в столицу, то среднее количество безопасных дорог также составит .

Во втором примере наибольшее искомое значение достигается, если поставить пункт в город номер 4, тогда 6 путей будут иметь по 2 безопасные дороги, и один путь — 0, таким образом, ответ будет равен .

A. Разноцветные шарики

дп математика *1600

Поликарп играет с красными и синими шариками. Он выложил в ряд слева направо n шариков. Оказалось, что выложенные шарики образуют зеброид.

Непустая последовательность красных и синих шариков называется зеброидом, если цвета шариков в этой последовательности чередуются. Например, последовательности (красный; синий; красный) и (синий) — зеброиды, а последовательность (красный; красный) — нет.

Теперь Поликарпа заинтересовало, сколькими способами можно выбрать из этой последовательности подпоследовательность, которая также будет зеброидом? Помогите ему решить эту задачку, найдите остаток от деления количества способов на 1000000007 (109 + 7).

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 106) — количество шариков в последовательности Поликарпа.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю 1000000007 (109 + 7).

Примечание

Рассмотрим первый тестовый пример. Пусть изначально у Поликарпа была последовательность (красный; синий; красный), тогда выбрать зеброид можно шестью способами:

  • взять первый шарик;
  • взять второй шарик;
  • взять третий шарик;
  • взять первый и второй шарики;
  • взять второй и третий шарики;
  • взять первый, второй и третий шарики.

Можно доказать, что если в качестве изначальной последовательности Поликарпа взять (синий; красный; синий), то количество способов не изменится.

C. Полоска 2

Бинарный поиск дп сортировки *2000

Однажды Вася взял бумажную полоску из n клеток (высота полоски равна 1 клетке) и в каждой клетке написал целое число, возможно отрицательное. Ему стало интересно, сколько существует способов разрезать полоску на три части так, что суммы чисел в каждой из частей равны между собой, и в каждой части содержится целое положительное число клеток. Помогите Васе решить эту задачу.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 105) — количество клеток в полоске. Во второй строке содержится n чисел, разделенных пробелами — числа, записанные в клетках полоски. Эти числа целые и не превосходят по модулю 10000.

Выходные данные

Выведите число способов разрезать полоску на три непустые части так, что суммы чисел в каждой из частей равны между собой. Не забудьте, что разрезать полоску разрешается только по границам клеток.

B. Числа

дп Комбинаторика *1900

Фурику нравится придумывать разные задачи, особенно те, которые он сам решить не может. Перед вами очередная задача Фурика, которую он дал Рубику. Рубик же просит вас решить ее.

Имеется целое число n и массив a, состоящий из десяти целых чисел, проиндексированный номерами от 0 до 9. Нужно посчитать количество целых положительных чисел со следующими свойствами:

  • длина числа не превосходит n;
  • число не содержит лидирующих нулей;
  • количество вхождений цифры i (0 ≤ i ≤ 9) в число не меньше a[i].
Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100). В следующей строке записаны 10 целых чисел a[0], a[1], ..., a[9] (0 ≤ a[i] ≤ 100) — элементы массива a. Числа разделены пробельными символами.

Выходные данные

В единственной строке выведите остаток от деления ответа на задачу на 1000000007 (109 + 7).

Примечание

В первом примере подходит число 9.

Во втором примере подходит число 10.

В третьем примере подходят числа: 10, 110, 210, 120, 103. Есть и другие подходящие числа, всего их 36.

C. Эстафета

дп *2000

Фурик и Рубик принимают участие в эстафете. Эстафета будет проводиться на большом квадрате, со стороной n метров. Данный квадрат разбит на n × n клеточек (представляют собой квадраты со стороной 1), в каждой такой клеточке стоит некоторое число.

Вначале эстафеты Фурик стоит в клеточке с координатами (1, 1), а Рубик в клеточке с координатами (n, n). Сразу после старта Фурик бежит к Рубику, при этом, если Фурик стоит в клеточке с координатами (i, j), то он может перейти в клеточку с координатами (i + 1, j) или (i, j + 1). После того, как Фурик прибежит к Рубику, Рубик побежит из клеточки с координатами (n, n) в клеточку с координатами (1, 1), при этом, если Рубик стоит в клеточке с координатами (i, j), то он может перейти в клеточку с координатами (i - 1, j) или (i, j - 1). Ни Фурик, ни Рубик не имеют права выходить за пределы поля, иначе они будут дисквалифицированы.

Чтобы выиграть эстафету Фурику и Рубику нужно набрать как можно больше очков. Количество очков — это сумма чисел в клеточках, по которым прошлись Фурик и Рубик, каждая клеточка учитывается в сумме только один раз.

Посчитайте максимальное количество очков, которое могут заработать Фурик и Рубик на эстафете.

Входные данные

В первой строке находится единственное целое число (1 ≤ n ≤ 300). В следующих n строках находятся по n целых чисел: j-ое число в i-ой строке ai, j ( - 1000 ≤ ai, j ≤ 1000) — число, записанное в клеточке с координатами (i, j).

Выходные данные

В единственную строку выведите одно число — ответ на задачу.

Примечание

Пояснение ко второму примеру. Фурику выгодно пройти по маршруту: (1, 1), (1, 2), (2, 2), а Рубику: (2, 2), (2, 1), (1, 1).

Пояснение к третьему примеру. Оптимальный маршрут Фурика: (1, 1), (1, 2), (1, 3), (2, 3), (3, 3), а Рубика: (3, 3), (3, 2), (2, 2), (2, 1), (1, 1). Рисунок к примеру:

Путь Фурика отмечен желтым, а Рубика — розовым.

E. Периодические числа

дп Комбинаторика теория чисел *2100

Непустая строка s называется бинарной, если она состоит только из символов «0» и «1». Пронумеруем символы бинарной строки s от 1 до длины строки и обозначим i-й символ строки s как si.

Бинарную строку s длины n будем называть периодической, если существует целое число 1 ≤ k < n такое, что:

  • k — делитель числа n
  • для всех 1 ≤ i ≤ n - k выполняется si = si + k

Например, бинарные строки «101010» и «11» являются периодическими, а «10» и «10010» — нет.

Целое положительное число x будем называть периодическим, если бинарная строка, являющаяся записью числа x в двоичной системе счисления (без лидирующих нулей), — периодическая.

Ваша задача — найти количество периодических чисел в отрезке от l до r (оба конца включены).

Входные данные

В единственной строке входных данных записаны два целых числа l и r (1 ≤ l ≤ r ≤ 1018). Числа разделены пробелом.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное целое число — количество периодических чисел в отрезке от l до r (оба конца включены).

Примечание

В первом примере периодическими числами являются 3, 7 и 10.

Во втором примере периодическими числами являются 31 и 36.

C. Формуроса

дп Разбор выражений разделяй и властвуй *2600

Байтляндский Институт Биологических Исследований (БИБИ) изучает свойства двух видов бактерий, названных 0 и 1. Даже под микроскопом бактерии этих двух видов очень трудно отличить. Вобщем-то, у ученых есть только один способ, который способен различать их — это растение под названием Формуроса.

Если ученые поместят по образцу колоний бактерий на каждом листке Формуросы, активируется сложный процесс питания растения. Во время этого процесса цвет Формуросы изменится, в соответствии с, возможно, очень сложной логической формулой, включающей константы и операторы | (OR), & (AND) и ^ (XOR). Если результат подсчета формулы равен 0, то растение покраснеет, в противном случае посинеет.

Например, если процесс питания Формуросы описывается формулой: (((?^?)|?)&(1^?)), то у Формуросы есть четыре листа (знаки «?» обозначают листья). Если мы положим образцы бактерий 0, 1, 0, 0 на соответствующие листья, результатом питательного процесса будет (((0^1)|0)&(1^0)) = 1, следовательно, растение посинеет.

У ученых есть n колоний бактерий. Они не знают их типы; они знают наверняка только то, что не все колонии одного типа. Ученые хотят попытаться определить виды бактерий, с помощью нескольких экспериментов с Формуросой. Во время каждого эксперимента ученые должны поместить ровно по одному образцу на каждый лист растения. Тем не менее, они могут использовать несколько образцов из одной колонии в течение одного эксперимента; например, можно покрыть все листья растения бактериями из одной колонии!

Смогут ли ученые определить вид каждой колонии, какими бы эти колонии ни были (если предположить, что не все колонии одинаковые)?

Входные данные

В первой строке входного файла содержится единственное целое число n (2 ≤ n ≤ 106) — количество колоний бактерии.

Во второй строке содержится формула, описывающая питательный процесс Формуросы. Эта строка содержит только символы «0», «1», «?», «|», «&», «^», «(», «)» и соответствует следующей грамматике:

s → 0|1|?|(s|s)|(s&s)|(s^s)

Данная формула состоит из не более, чем 106 символов.

Выходные данные

Если всегда возможно определить вид каждой колонии, выведите «YES» (без кавычек). В противном случае выведите «NO» (без кавычек).

C. Цветная полоска

дп жадные алгоритмы Перебор *1600

Цветная полоска представляет собой n расположенных в ряд клеточек, каждая из которых покрашена в один из k цветов. Требуется перекрасить наименьшее количество клеточек так, чтобы никакие две соседние клетки не были одинакового цвета. Перекрашивать клетки можно в любые цвета от 1 до k.

Входные данные

В первой строке входных данных записано два целых числа n и k (1 ≤ n ≤ 5·105; 2 ≤ k ≤ 26). Вторая строка состоит из n прописных букв латинского алфавита. Буква «A» обозначает первый цвет, «B» — второй и так далее. В строке используются только первые k букв латинского алфавита. Каждая буква обозначает цвет соответствующей клетки полоски.

Выходные данные

Выведите единственное число — искомое минимальное количество перекрашиваний. Во вторую строку выведите любой из возможных вариантов полоски после перекрашиваний.

D. Выбор столицы Древляндии

графы Деревья дп поиск в глубину и подобное *1700

Страна Древляндия состоит из n городов, некоторые пары из которых соединены односторонними дорогами. Всего в этой стране n - 1 дорога. Известно, что если не обращать внимание на направление дорог, то из любого города можно добраться до любого другого.

Недавно советом старейшин было решено выбрать столицу Древляндии. Конечно, это должен быть один из городов страны. Предполагается, что совет будет заседать в столице и регулярно перемещаться из столицы в другие города (об обратном перемещении пока никто не думает). По этой причине, если город a будет выбран столицей, то все дороги должны быть ориентированы так, что, двигаясь по ним, можно из города a добраться до любого другого города. Для этого, возможно, некоторые дороги придется переориентировать.

Помогите старейшинам выбрать столицу так, что необходимо переориентировать минимальное количество дорог в стране.

Входные данные

В первой строке входных данных записано целое число n (2 ≤ n ≤ 2·105) — количество городов в Древляндии. Следующие n - 1 строк содержат описания дорог, по одной дороге в строке. Дорога описывается парой целых чисел si, ti (1 ≤ si, ti ≤ nsi ≠ ti) — номерами соединяемых дорогой городов, i-ая дорога ориентирована из города si в город ti. Считайте, что города в Древляндии пронумерованы от 1 до n.

Выходные данные

В первую строку выведите минимальное количество переориентируемых дорог при оптимальном выборе столицы. Во вторую строку выведите все возможные способы выбрать столицу — последовательность номеров городов в порядке возрастания.

B. Стол для переговоров

дп Перебор *1500

Вася хочет поставить в офис новый стол для переговоров. Для этого он тщательно все измерил и составил план своего офиса: офис Васи представляет собой прямоугольную комнату n × m метров. Каждый квадратный метр офиса может быть либо занят чем-то, либо свободен. Стол для переговоров имеет прямоугольную форму, и должен стоять так, чтобы его стороны были параллельны стенам офиса. Вася не хочет ничего менять или передвигать, поэтому все клетки, занимаемые столом, должны быть свободны. Чтобы за столом поместилось как можно больше людей, его периметр должен быть как можно больше. Помогите Васе определить наибольший возможный периметр стола, помещающегося в офисе.

Входные данные

В первой строке через пробел записано 2 целых числа n и m (1 ≤ n, m ≤ 25) — размеры офиса. Далее следует n строк по m символов 0 или 1. 0 обозначает, что соответствующий квадратный метр офиса свободен. 1 обозначает, что соответствующий квадратный метр офиса чем-то занят. Гарантируется, что хотя бы один квадратный метр Васиного офиса свободен.

Выходные данные

Выведите одно число — наибольший возможный периметр стола, помещающегося в Васином офисе.

E. Расшифровка генома

дп матрицы *1900

Недавно был осуществлен совершенно секретный полет на Марс, в результате которого удалось получить некоторые сведения относительно марсианской ДНК. Стало известно, что любая марсианская цепочка ДНК содержит не более m различных нуклеотидов, пронумерованных от 1 до m. Из-за особенностей марсианской ДНК некоторые пары нуклеотидов не могут идти подряд в этой цепочке. Например, если нуклеотид номер 1 и нуклеотид номер 2 не могут встречаться подряд в марсианской ДНК, значит цепочка нуклеотидов [1, 2] не является корректной цепочкой марсианской ДНК, при этом цепочка нуклеотидов [2, 1] может быть корректной (если нет соответствующего ограничения). Количество пар нуклеотидов, которые не могут содержаться в цепочке ДНК подряд, равно k.

Для нужд генных исследований понадобилась информация о количестве корректных цепочек марсианской ДНК длины n. Вам поручено написать программу, которая вычислит это значение.

Входные данные

В первой строке записаны три целых числа через пробел n, m, k (1 ≤ n ≤ 1015, 1 ≤ m ≤ 52, 0 ≤ k ≤ m2).

В следующих k строках записаны по два символа, без пробела между ними, обозначающие запрещенную пару нуклеотидов. Первый символ обозначает первый нуклеотид в запрещенной паре, второй символ — второй нуклеотид.

Нуклеотиды, которым присвоены номера от 1 до 26 обозначаются буквами латинского алфавита от «a» до «z» (1 — «a», 2 — «b», ..., 26 — «z»). Нуклеотиды, которым присвоены номера от 27 до 52 обозначаются буквами латинского алфавита от «A» до «Z» (27 — «A», 28 — «B», ..., 52 — «Z»).

Гарантируется, что каждая запрещенная пара задана во входных данных не более одного раза. Гарантируется, что номера нуклеотидов в запрещенных парах не превосходят m. Обратите внимание, что в парах нуклеотидов важен порядок.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное целое число — остаток от деления искомого количества на 1000000007 (109 + 7).

Примечание

Во втором тестовом примере допустимы все возможные ДНК из трех нуклеотидов. Каждый нуклеотид может принимать одно из трех значений, поэтому всего существует 27 различных ДНК из трех нуклеотидов.

В третьем тестовом примере нельзя сделать ни одного ДНК из двух нуклеотидов — единственный возможный нуклеотид «a» не может встречаться два раза подряд.

B. Две строки

дп Строки Структуры данных *1900

Подпоследовательностью длины |x| строки s = s1s2... s|s| (где |s| — длина строки s) называется строка x = sk1sk2... sk|x| (1 ≤ k1 < k2 < ... < k|x| ≤ |s|).

Вам даны две строки — s и t. Рассмотрим все подпоследовательности строки s, совпадающие со строкой t. Верно ли, что каждый символ строки s находится хотя бы в одной из этих подпоследовательностей? Другими словами, верно ли, что для всех i (1 ≤ i ≤ |s|), существует такая подпоследовательность x = sk1sk2... sk|x| строки s, что x = t и для некоторого j (1 ≤ j ≤ |x|) kj = i.

Входные данные

В первой строке записана строка s, во второй — t. Каждая строка состоит только из строчных латинских букв. Заданные строки непустые, длина каждой строки не превышает 2·105.

Выходные данные

Выведите «Yes» (без кавычек), если каждый символ строки s находится хотя бы в одной из описанных подпоследовательностей, или «No» (без кавычек) в противном случае.

Примечание

В первом примере строка t может входить в строку s как подпоследовательность тремя способами: abab, abab и abab. При этом каждый символ строки s попадает хотя бы в одно вхождение.

Во втором примере 4-й символ строки s не попадает ни в одно вхождение строки t.

В третьем примере нет ни одного вхождения строки t в строку s.

C. Штрихкод

дп матрицы *1700

Имеется картинка размера n × m пикселов. Каждый пиксел может быть белым или черным. Требуется изменить цвета как можно меньшего количества пикселов так, чтобы получилась картинка-штрихкод.

Картинка является штрихкодом если выполняются следующие условия:

  • В каждом столбце все пикселы одного цвета.
  • Ширина каждой одноцветной вертикальной полосы не менее x и не более y пикселов. Другими словами, если сгруппировать все соседние столбцы пикселов одного цвета, то не должно получиться группы размера менее x или более y.
Входные данные

В первой строке записаны четыре целых числа через пробел n, m, x и y (1 ≤ n, m, x, y ≤ 1000; x ≤ y).

Далее идет n строк, описывающих исходную картинку. В каждой из этих строк содержится ровно m символов. Символ «.» обозначает белый пиксел, а «#» — черный. Никаких других символов кроме «.» и «#» в описании картинки не содержится.

Выходные данные

В первой строке выведите наименьшее количество пикселов, которое нужно перекрасить. Гарантируется, что ответ существует.

Примечание

В первом тестовом примере картинка после перекрашивания может выглядеть следующим образом:


.##..
.##..
.##..
.##..
.##..
.##..

Во втором тестовом примере картинка после перекрашивания может выглядеть следующим образом:


.#.#.
.#.#.

C. Детектор фракталов

дп хэши *2000

Мальчик Вася очень любит рисовать фракталы.

Он делает это следующим образом. Сперва мальчик вырезает из клетчатой бумаги квадрат размером 2 × 2 клеток и закрашивает некоторые из них в черный цвет. Вырезанный квадрат мальчик называет шаблоном фрактала. Затем он берет чистый квадратный лист и рисует фрактал по следующему алгоритму:

  1. Лист делится на 4 одинаковых квадрата. Часть из них закрашивается в черный цвет в соответствии с шаблоном фрактала.
  2. Каждый из квадратов, оставшихся белыми, разбивается на 4 меньших белых квадрата, некоторые из них закрашиваются в соответствии с шаблоном фрактала. Каждый из квадратов, оставшихся черными, разбивается на 4 меньших черных квадрата.

На каждом из последующих шагов повторяются действия шага 2. Чтобы нарисовать фрактал, мальчик может выполнить произвольное положительное количество шагов алгоритма, но не менее двух шагов. То есть шаг 2 должен быть выполнен хотя бы 1 раз. Полученная картинка (квадрат с закрашенными клеточками) и будет являться фракталом. На рисунке ниже изображен процесс рисования фрактала (здесь мальчик выполнил 3 шага алгоритма).

Одним вечером Вася очень устал и поэтому, он не стал рисовать фрактал, а просто взял лист бумаги, начертил на нем поле из n × m клеток и некоторые из них закрасил черным цветом.

Теперь ему интересно сколько есть квадратов на поле таких, что существует фрактал, построенный по указанному выше алгоритму, и совпадающий с этим квадратом. Квадрат считается совпадающим с фракталом, если он и фрактал состоят из одинакового количества единичных неделимых клеток и цвет каждой единичной клетки квадрата совпадает с цветом соответствующей клетки фрактала.

Входные данные

В первой строке записаны через пробел два целых числа n, m (2 ≤ n, m ≤ 500) — количество строк и количество столбцов поля соответственно.

В следующих n строках содержатся по m символов — описание поля, нарисованного Васей. Символ «.» обозначает белую клетку, символ «*» — черную.

Гарантируется, что в описании поля не встречается никаких символов кроме «.» и «*».

Выходные данные

В единственной строке выведите единственное целое число — количество квадратов на поле, таких, что на этих квадратах нарисован фрактал, который можно получить описанным выше способом.

Примечание

Ответ для первого примера приведен на рисунке. Фракталы обведены красной, синей и зеленой линией.

Ответ для второго примера 0, так как не существует фрактала, совпадающего с данным рисунком.

D. Башни

дп жадные алгоритмы *2100

Город D состоит из n башен, установленных последовательно на одной прямой. Высота i-той по порядку башни (слева направо) в последовательности равна hi. Мэр города затеял перестройку, после которой город должен стать красивым. В красивом городе все башни расположены слева направо по неубыванию высот.

Перестройка состоит из выполнения нескольких (возможно нуля) операций. За одну операцию разрешается краном поднять любую башню и установить ее целиком на верх какой-то соседней башни. Другими словами, можно взять i-тую по порядку башню, и установить на верх либо (i - 1)-ой (если такая существует), либо (i + 1)-ой (если такая существует) по порядку башни. Высота получившейся башни равняется сумме высот соединенных башен. После этого две соединенные башни уже нельзя разъединить никаким образом, но с получившейся башней можно снова проводить подобные операции. Обратите внимание на то, что после выполнения одной операции общее количество башен, стоящих на прямой, уменьшается на 1.

Помогите мэру определить наименьшее количество операций, с помощью которых можно перестроить город в красивый.

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 5000) — количество башен в городе. Следующая строка содержит n целых чисел, разделенных пробелами: i-тое по порядку число hi (1 ≤ hi ≤ 105) обозначает высоту i-той по порядку башни (слева направо) в изначальной последовательности башен.

Выходные данные

Выведите единственное целое число — наименьшее количество операций, которое требуется, чтобы перестроить город в красивый.

E. Дары

дп Комбинаторика математика Теория вероятностей *2600

Жил старик со своею старухой у самого синего моря. Однажды, закинув в море невод, старик поймал рыбку, да не простую, а золотую. Рыбка молвила: «Отпусти меня, старче! Взамен я откуплюсь n дарами, какие ты только пожелаешь!». Затем рыбка дала старику список с названиями даров и их ценностями. В списке некоторые дары могут иметь одинаковые названия, но разные ценности, однако не может быть двух даров с одинаковыми названием и ценностями. Также могут быть два дара с разными названиями, но одинаковыми ценностями. Старик может назвать рыбке n названий из этого списка. Если в списке, предоставленном рыбкой, некоторое название встречается ровно p раз, то старик не может среди своих n названий использовать это название более чем p раз.

Старику известно, что если он попросит s даров одинакого названия, то золотая рыбка случайным образом (равновероятно среди всех возможных способов) выберет s даров различной ценности с таким названием из своего списка. Старик не хочет рассердить свою старуху; поэтому он выберет n названий таким способом, что будет иметь возможность получить n даров, имеющих наибольшую ценность. Причем он не очень дальновидный, поэтому, если таких способов несколько, то он выбирает один из них равновероятно.

Старик задумался о том, с какой вероятностью он сможет получить n самых ценных даров. Так как старик не силен в теории вероятности, он просит вашей помощи.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 1000), разделенные пробелом — количество желаний старика и количество различных названий в списке золотой рыбки, соответственно. Далее следуют m строк: i-тая строка содержит сперва целое число ki (ki > 0) — количество различных ценностей даров i-того названия, а затем ki различных целых чисел cij (1 ≤ cij ≤ 109), разделенных пробелами — ценности этих даров.

Гарантируется, что сумма всех ki не превышает 1000. Гарантируется, что n не больше, чем суммарное количество даров.

Выходные данные

В единственной строке выведите вещественное число — вероятность получить n самых ценных даров. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 9.

E. Дерево

дп *2500

Недавно Вася придумал новую игру с деревом (напоминаем, что дерево — это связный граф без циклов): он удаляет любое (возможно, нулевое) количество ребер данного дерева, и подсчитывает произведение размеров получившихся компонент связности. Ваша задача — для заданного дерева определить, какое наибольшее число сможет получить Вася в своей новой игре.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 700) — число вершин в дереве. Далее в n - 1 строках записаны ребра дерева. Каждая строка содержит пару номеров вершин, соединенных ребром, ai, bi (1 ≤ ai, bi ≤ n). Гарантируется, описанный во входных данных граф является деревом.

Выходные данные

Выведите единственное число — какое наибольшее произведение размеров компонент связности можно получить, удалив из дерева некоторые ребра.

E. Кактус

графы Деревья дп поиск в глубину и подобное Структуры данных *2100

Связный неориентированный граф называется вершинным кактусом, если каждая вершина этого графа принадлежит не более чем одному простому циклу.

Простым циклом в неориентированном графе назовем последовательность различных вершин v1, v2, ..., vt (t > 2) такую, что для любого i (1 ≤ i < t) существует ребро между вершинами vi и vi + 1, а также существует ребро между вершинами v1 и vt.

Простым путем в неориентированном графе назовем последовательность не обязательно различных вершин v1, v2, ..., vt (t > 0) такую, что для любого i (1 ≤ i < t) существует ребро между вершинами vi и vi + 1, причем каждое ребро встречается не более одного раза. Будем говорить, что простой путь v1, v2, ..., vt начинается в вершине v1 и заканчивается в вершине vt.

Вам задан граф, состоящий из n вершин и m ребер, который является вершинным кактусом. Также есть список из k пар интересных вершин xi, yi, для которых Вы захотели узнать следующую информацию — сколько различных простых путей начинается в вершине xi и заканчивается в вершине yi. Два простых пути будем считать различными, если различаются множества ребер, которые в них входят.

Для каждой пары интересных вершин посчитайте количество различных простых путей между ними. Поскольку это количество может быть достаточно большим, требуется посчитать остаток от деления этого числа на 1000000007 (109 + 7).

Входные данные

В первой строке через пробел записаны два целых числа n, m (2 ≤ n ≤ 105; 1 ≤ m ≤ 105) — количество вершин и ребер в графе соответственно. В следующих m строках задано описание ребер: в i-той строке через пробел записаны два целых числа ai, bi (1 ≤ ai, bi ≤ n) — номера вершин, которые соединяет i-тое ребро.

Во следующей строке записано единственное целое число k (1 ≤ k ≤ 105) — количество пар интересных вершин. В следующих k строках задан список пар интересных вершин: в i-ой строке через пробел записаны два целых числа xi, yi (1 ≤ xi, yi ≤ nxi ≠ yi) — номера интересных вершин в i-ой паре.

Гарантируется, что заданный граф является вершинным кактусом. Гарантируется, что в графе отсутствуют петли и кратные ребра. Считайте, что вершины графа некоторым образом пронумерованы от 1 до n.

Выходные данные

Выведите k строк: в i-ой строке выведите единственное число — остаток от деления количества различных простых путей, начинающихся в xi и заканчивающихся в yi, на 1000000007 (109 + 7).

B. Таблица

битмаски дп Комбинаторика математика *1900

У Джона Доу есть таблица размером n × m. Джон Доу может нарисовать в некоторых ячейках таблицы точки, не более одной точки в одной ячейке таблицы. С помощью таких операций Джон Доу хочет добиться того, чтобы в любой квадратной подтаблице размера n × n количество точек было в точности равно k.

Джону Доу стало интересно, сколькими различными способами можно заполнить эту таблицу точками так, чтобы описанное условие выполнялось. Поскольку это число может быть очень велико, Джон Доу просит узнать его остаток от деления на 1000000007 (109 + 7).

Считайте, что Джон всегда рисует точку строго в центре некоторой ячейки. Два способа заполнения таблицы точками считаются различными, если существует ячейка таблицы, в которой в одном способе нарисована точка, а в другом — нет.

Входные данные

В единственной строке через пробел записаны целые числа n, m, k (1 ≤ n ≤ 100; n ≤ m ≤ 1018; 0 ≤ k ≤ n2) — количество строк в таблице, количество столбцов в таблице и количество точек, которое должно быть в каждом квадрате.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В единственной строке выведите целое число — остаток от деления описанного количества способов на 1000000007 (109 + 7).

Примечание

Рассмотрим первый тестовый пример:

Серая область принадлежит обоим квадратам 5 × 5. Поэтому, если в ней есть одна точка, то больше нигде точек быть не может. Если в одной из белых областей есть точка, то в другой тоже должна быть точка. Таким образом есть 20 вариантов, в которых точка стоит в серой области и 25 вариантов в которых в каждой из белых областей стоит по точке. Всего 45 вариантов.

C. Графы Доу

графы дп Конструктив кратчайшие пути разделяй и властвуй *2600

Джон Доу решил, что в его честь должен быть назван какой-нибудь математический объект и изобрел графы Доу. Графы Доу — это семейство неориентированных графов, каждый из которых характеризуются единственным целым неотрицательным числом — порядком.

Граф Доу порядка k обозначим за D(k), за |D(k)| обозначим количество вершин в графе D(k). Тогда определим графы Доу следующим образом:

  • D(0) состоит из единственной вершины, которая имеет номер 1.
  • D(1) состоит из двух вершин с номерами 1 и 2, соединенных ребром.
  • D(n) для n ≥ 2 получается из графов D(n - 1) и D(n - 2). D(n - 1) и D(n - 2) объединяются в один граф, при этом номера всех вершин графа D(n - 2) увеличиваются на |D(n - 1)| (например, вершина номер 1 графа D(n - 2) становится вершиной номер 1 + |D(n - 1)|). После этого в граф добавляются два ребра: первое — между вершинами с номерами |D(n - 1)| и |D(n - 1)| + 1, второе — между вершинами с номерами |D(n - 1)| + 1 и 1. Обратите внимание, что из определения графа D(n) следует, что D(n) является связным графом, вершины которого пронумерованы от 1 до |D(n)|.
На рисунке изображены, слева-направо, графы Доу порядка 1, 2, 3 и 4.

Графы Доу, по мнению Джона, хороши прежде всего тем, что для них существует полиномиальный алгоритм поиска Гамильтонова пути. Однако от Вас требуется отвечать на запросы о нахождении кратчайшего по длине пути между вершинами ai и bi в графе D(n).

Путь между парой вершин u и v в графе — это последовательность вершин x1, x2, ..., xk (k > 1) такая, что x1 = u, xk = v, и для любого i (i < k) вершины xi и xi + 1 связаны ребром графа. Длиной пути x1, x2, ..., xk называется число (k - 1).

Входные данные

В первой строке записаны два целых числа t и n (1 ≤ t ≤ 105; 1 ≤ n ≤ 103) — количество запросов и порядок рассматриваемого графа. В i-той из следующих t строк записано два целых числа ai и bi (1 ≤ ai, bi ≤ 1016, ai ≠ bi) — номера двух вершин в i-м запросе. Гарантируется, что ai, bi ≤ |D(n)|.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Для каждого запроса выведите в отдельной строке единственное целое число — длину кратчайшего пути между вершинами ai и bi. Ответы на запросы выводите в том порядке, в котором запросы заданы во входных данных.

E. Быстрая Черепаха

битмаски дп разделяй и властвуй *3000

У Джона Доу есть поле, представляющее собой прямоугольную таблицу размера n × m. Будем считать, что строки поля пронумерованы от 1 до n сверху вниз, а столбцы поля от 1 до m слева направо. Тогда клетка поля, стоящая на пересечении x-ой строки y-го столбца, имеет координаты (x; y).

Известно, что некоторые клетки поля Джона покрашены в белый, а некоторые — в черный цвет. Так же у Джона есть черепаха, которая может двигаться по белым клеткам поля. Из белой клетки с координатами (x; y) черепаха Джона может попасть в клетку (x + 1; y) или (x; y + 1), если соответствующая клетка покрашена в белый цвет. Другими словами, черепаха может ходить только белым клеткам поля вправо или вниз. Черепаха не может выходить за пределы поля.

В добавок ко всему у Джона есть q запросов, каждый из которых характеризуется четырьмя числами x1, y1, x2, y2 (x1 ≤ x2, y1 ≤ y2). Для каждого запроса Джон хочет узнать, сможет ли черепаха, стартовав в клетке c координатами (x1; y1), дойти до клетки с координатами (x2; y2), двигаясь только по белым клеткам поля.

Входные данные

В первой строке через пробел записаны два целых числа n и m (1 ≤ n, m ≤ 500) — размеры поля.

В следующих n строках содержится по m символов «#» и «.»: j-ый символ i-ой из этих строк равен «#», если клетка (i; j) покрашена в черный цвет и «.», если в белый.

В следующей строке записано целое число q (1 ≤ q ≤ 6·105) — количество запросов. В следующих q строках через пробел записаны четыре целых числа x1, y1, x2 и y2 (1 ≤ x1 ≤ x2 ≤ n, 1 ≤ y1 ≤ y2 ≤ m) — координаты стартовой и конечной клетки. Гарантируется, что клетки (x1; y1) и (x2; y2) белые.

Выходные данные

Для каждого из q запросов выведите в отдельной строке «Yes», если существует путь из клетки (x1; y1) в клетку (x2; y2), отвечающий требованиям, и «No» в противном случае. Ответы на запросы выводите в том порядке, в котором запросы заданы во входных данных.

C. Погода

дп реализация *1300

Ученые много говорят о проблемах глобального потепления и похолодания Земли. Действительно, подобные природные явления сильно влияют на все живое на нашей планете.

Не оставили равнодушным эти проблемы и нашего героя Васю. Он решил провести небольшой эксперимент и понаблюдать, как ежедневно изменяется температура на улице. Он повесил на балконе термометр и каждое утро записывал его показания. В течение последних n дней он делал свои измерения. Таким образом, он получил последовательность t1, t2, ..., tn чисел, в которой i-ое число обозначает температуру в i-ый день.

Изучив температурную статистику в других городах, Вася пришел в выводу, что в городе все в порядке с экологией, если температура на улице сначала некоторое ненулевое количество дней отрицательная, а затем некоторое ненулевое количество дней положительная. Более формально, должно существовать целое положительное число k (1 ≤ k ≤ n - 1) такое, что t1 < 0, t2 < 0, ..., tk < 0 и при этом tk + 1 > 0, tk + 2 > 0, ..., tn > 0. В частности, температура никогда не должна равняться нулю. Если это условие не выполняется, Вася решит, что в его городе существуют экологические проблемы, и сильно расстроится.

Вы не хотите, чтобы Вася огорчился. Поэтому Вы хотите выбрать несколько значений температуры и изменить их таким образом, чтобы условие Васи выполнялось. Вам требуется узнать, какое наименьшее количество значений температуры придется для этого изменить.

Входные данные

В первой строке задано единственное целое число n (2 ≤ n ≤ 105) — количество дней, в которые Вася делал измерения.

Во второй строке задана последовательность из n целых чисел t1, t2, ..., tn (|ti| ≤ 109) — последовательность значений температуры. Числа ti разделены одиночными пробелами.

Выходные данные

Выведите единственное целое число — ответ на поставленную задачу.

Примечание

Пояснение к первому примеру: есть два способа изменить ровно одно число так, чтобы последовательность стала удовлетворять Васиному условию. Можно заменить первую единицу на любое отрицательное число, либо заменить -2 на любое положительное число.

F. Забор

дп *1800

Васе необходимо покрасить забор перед частным домом, в котором он живет. Забор представляет собой последовательность из n деревянных досок, выстроенных в один ряд. Каждая доска является прямоугольником шириной 1 сантиметр. Пронумеруем доски забора числами 1, 2, ..., n слева направо. Высота i-ой доски составляет hi сантиметров.

В распоряжении Васи есть кисть шириной 1 сантиметр и краски двух цветов — красного и зеленого. Разумеется, запасы красок ограничены. Вася посчитал, какую площадь он сможет покрасить в каждый из цветов. Оказалось, что он сможет покрасить не более a квадратных сантиметров забора в красный цвет и не более b квадратных сантиметров в зеленый. Каждую доску забора нужно покрасить ровно в один из двух цветов. Возможно один из цветов Васе не потребуется.

Кроме того, Вася хочет, чтобы его забор выглядел красиво. Для этого нужно покрасить забор так, чтобы минимизировать величину, которую Вася назвал величиной непривлекательности забора. Вася считает, что две подряд идущие доски забора, покрашенные в различные цвета, выглядят непривлекательно. Величиной непривлекательности забора он назвал суммарную длину соприкосновения соседних досок различного цвета. Чтобы забор выглядел красиво, нужно, чтобы эта величина была как можно меньше. Вашей задачей является посчитать, какое минимальное значение непривлекательности может получить Вася, полностью покрасив свой забор.

На рисунке изображен забор, в котором высоты досок (слева направо) равны 2,3,2,4,3,1. Первая и пятая доска покрашены в красный цвет, остальные — в зеленый. Первая и вторая доска имеют длину соприкосновения 2, четвертая и пятая — 3, пятая и шестая — 1. Поэтому для приведенной покраски непривлекательность равна 2+3+1=6.

Входные данные

В первой строке задано единственное целое число n (1 ≤ n ≤ 200) — количество досок в заборе Васи.

Во второй строке заданы два целых числа a и b (0 ≤ a, b ≤ 4·104) — площадь, которую можно покрасить в красный цвет, и площадь, которую можно покрасить в зеленый цвет, соответственно.

В третьей строке задана последовательность из n целых чисел h1, h2, ..., hn (1 ≤ hi ≤ 200) — высоты досок забора.

Все числа в строках разделены одиночными пробелами.

Выходные данные

Выведите единственное число — минимальное значение непривлекательности, которое может получить Вася, полностью покрасив свой забор. Если забор покрасить невозможно выведите  - 1.

B. Сыграем в Osu!

дп математика Теория вероятностей *2000

Вы играете в игру под названием Osu. Упрощенная версия этой игры заключается вот в чем: в игре надо кликнуть n раз. На каждый Ваш клик система выдает свой вердикт, всего существует два вердикта: верно или неверно. Обозначим вердикт верно символом «O», неверно символом — «X», тогда всю игру можно закодировать последовательностью из n символов «O» и «X».

Счет в игре вычисляется по последовательности, кодирующей игру, следующим образом: для каждого наибольшего блока из идущих подряд «O», длина блока (количество символов «O») возводится в квадрат и прибавляется к счету. Например, если Вашу игру можно представить как «OOXOOOXXOO», то есть три наибольших блока из идущих подряд «O»: «OO», «OOO», «OO», следовательно, Ваш счет составит 22 + 32 + 22 = 17. Если в процессе игры не было ни одного верного клика, счет равняется 0.

Вы знаете, что вероятность верно кликнуть в i-ый (1 ≤ i ≤ n) раз равняется pi. Иными словами, i-ый символ в последовательности, которая кодирует эту игру, может быть «O» с вероятностью pi, или быть «X» с вероятностью 1 - pi. Ваша задача — посчитать ожидаемый счет для Вашей игры.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество кликов. Во второй строке записаны n вещественных чисел через пробел p1, p2, ..., pn (0 ≤ pi ≤ 1).

Гарантируется, что заданные pi содержат не больше шести знаков после десятичной точки.

Выходные данные

Выведите единственное вещественное число — ожидаемый счет Вашей игры. Ваш ответ будет считаться корректным, если его абсолютная или относительная погрешность не превышает 10 - 6.

Примечание

Пояснение к первому примеру. Есть 8 возможных исходов. Вероятность каждого из них составляет 0.125.

  • «OOO»  →  32 = 9;
  • «OOX»  →  22 = 4;
  • «OXO»  →  12 + 12 = 2;
  • «OXX»  →  12 = 1;
  • «XOO»  →  22 = 4;
  • «XOX»  →  12 = 1;
  • «XXO»  →  12 = 1;
  • «XXX»  →  0.

Таким образом, ожидаемый счет составляет .

E. Задача с Числами

дп Комбинаторика математика реализация теория чисел *2600

Обозначим количество делителей положительного целого числа n как d(n). Вам дано три числа a, b и c. Ваша задача — вычислить следующую сумму:

Найдите остаток от деления этой суммы на 1073741824 (230).

Входные данные

В первой строке записаны три целых числа через пробел — a, b и c (1 ≤ a, b, c ≤ 2000).

Выходные данные

Выведите единственное целое число — остаток от деления искомой суммы на 1073741824 (230).

Примечание

Пояснение к первому примеру.

  • d(1·1·1) = d(1) = 1;
  • d(1·1·2) = d(2) = 2;
  • d(1·2·1) = d(2) = 2;
  • d(1·2·2) = d(4) = 3;
  • d(2·1·1) = d(2) = 2;
  • d(2·1·2) = d(4) = 3;
  • d(2·2·1) = d(4) = 3;
  • d(2·2·2) = d(8) = 4.

Следовательно, ответ — 1 + 2 + 2 + 3 + 2 + 3 + 3 + 4 = 20.

C. Братья-Пожиратели Мира

Деревья дп жадные алгоритмы поиск в глубину и подобное *2100

Вы, наверное, слышали о двух братьях, мечтающих править миром. Коль скоро все их предыдущие планы провалились, на этот раз они решили сотрудничать друг с другом для того, чтобы править миром.

Как вы знаете, в мире существует n стран. Эти страны связаны n - 1 направленными дорогами. Если не учитывать направлений дорог, то между каждой парой стран в мире существует уникальный путь, проходящий по каждой дороге не более одного раза.

Каждый из братьев хочет установить свое правление в какой-то стране, сделав это, он сможет контролировать страны, до которых можно добраться из его страны по направленным дорогам.

Братья смогут править миром, если найдется не более двух стран, которые они могут выбрать (и установить свои правления в этих странах), таких, что любая другая страна находится под контролем по крайней мере одной из них. Для того, чтобы сделать это возможным, братья хотят, изменить направление минимального количества дорог. Ваша задача — вычислить это минимальное количество дорог.

Входные данные

Первая строка входных данных содержит целое число n (1 ≤ n ≤ 3000). Каждая из последующих n - 1 строк содержит два целых числа, разделенных пробелом, ai и bi (1 ≤ ai, bi ≤ nai ≠ bi), которые означают, что есть дорога из страны ai в страну bi.

Вы можете считать страны пронумерованными от 1 до n. Гарантируется, что если не учитывать направление дорог, то есть уникальный путь между каждой парой стран в мире, проходящий по каждой дороге не более одного раза.

Выходные данные

В единственной строке выходных данных выведите минимальное количество дорог, которым надо поменять направление для того, чтобы братья смогли управлять миром.

E. Встретить Ее

графы дп кратчайшие пути *2600

Урпал живет в большом городе. Он назначил свидание своей любимой этим вечером.

Всего в городе n перекрестков, пронумерованных от 1 до n. Перекрестки соединены m направленными улицами, все улицы имеют одинаковую длину. Урпал живет на перекрестке a, а свидание назначено в ресторане на перекрестке b. Он хочет добраться до перекрестка b на общественном транспорте. Всего есть k автобусных компаний. В начале каждой секунды автобус из i-ой компании выбирает случайный наикратчайший путь между перекрестком si и перекрестком ti и проезжает по этому пути. Возможна такая ситуация, когда от перекрестка si до перекрестка ti не существует никакого пути. В этом случае ни один автобус не отправится из si до ti. Если автобус проезжает перекресток, на котором стоит Урпал, то юноша может сесть на этот автобус. Также он может сойти с автобуса на любом перекрестке на пути.

Урпал хочет знать, возможно ли добраться до свидания на общественном транспорте за конечное время (время его поездки — это сумма длин дорог, которые он проехал) и на какое наименьшее количество автобусов ему придется сесть в наихудшем случае.

В любой момент времени юноша знает лишь только свое местоположение и место, куда ему надо ехать. Когда он садится в автобус, он знает только номер компании этого автобусного маршрута. Конечно же, Урпал хорошо знает карту города и маршруты (пары si, ti) для каждой компании.

Обратите внимание, что Урпалу неизвестна скорость автобусов.

Входные данные

Первая строка входных данных содержит целые числа n, m, a, b (2 ≤ n ≤ 100; 0 ≤ m ≤ n·(n - 1); 1 ≤ a, b ≤ na ≠ b).

Следующие m строк содержат по два целых числа ui и vi (1 ≤ ui, vi ≤ nui ≠ vi), которые описывают направленную дорогу из перекрестка ui до перекрестка vi. Все дороги во входных данных различны.

В следующей строке записано целое число k (0 ≤ k ≤ 100). Затем идут k строк, содержащих целые числа si и ti (1 ≤ si, ti ≤ nsi ≠ ti), означающие, что есть автобусный путь от si до ti. Обратите внимание, что между перекрестками si и ti может не существовать пути, данная ситуация описана в условии задачи.

Выходные данные

В единственной строке выходных данных выведите наименьшее количество автобусов, на которые Урпал должен сесть по пути на свидание в наихудшем случае. Если в нахудшем случае пункт назначения достичь невозможно, выведите -1.

D. Сломанный робот

дп математика Теория вероятностей *2400

Вы получили в подарок очень умного робота, передвигающегося по прямоугольному полю. К сожалению, робот оказался сломан: он ведет себя как-то странно и передвигается случайным образом. Поле состоит из N строк и M столбцов. Изначально робот находится в клетке на пересечении i-ой строки и j-ого столбца. Далее на каждом шаге робот может пойти на другую клетку. Его цель — попасть на самую нижнюю (N-ую) строку. На каждом шаге робот может остаться на своей текущей клетке, перейти влево, вправо, или вниз на соседнюю клетку. Если робот находится в самом левом столбце, он не может пойти влево, а если он находится в самом правом столбце, он не может пойти вправо. На каждом шаге все возможные действия равновероятны. Найдите математическое ожидание числа шагов, требующихся чтобы дойти до самой нижней строки.

Входные данные

В первой строке через пробел записаны два целых числа N и M (1 ≤ N, M ≤ 1000). Во второй строке через пробел записаны еще два целых числа i и j (1 ≤ i ≤ N, 1 ≤ j ≤ M) — номер строки и столбца, на пересечении которых изначально стоит робот. Клетка (1, 1) — левый верхний угол поля, а (N, M) — правый нижний угол.

Выходные данные

Выведите математическое ожидание необходимого числа шагов как минимум с 4 знаками после десятичной точки.

D. Кубики

геометрия дп Структуры данных *2700

Однажды Петя получил на день рождения набор деревянных кубиков в подарок от своей мамы. Недолго думая, Петя построил из этих кубиков целый город.

Город в основании представляет собой квадрат размера n × n, разделенный на единичные квадратики. Стороны квадрата параллельны осям координат, противоположные углы квадрата имеют координаты (0, 0) и (n, n). На каждом из единичных квадратиков Петя построил башню из деревянных кубиков. Сторона деревянного кубика также имеет единичную длину.

После этого Петя отошел от своего творения на бесконечно большое расстояние и посмотрел на него в направлении вектора v = (vx, vy, 0). Петю интересует сколько различных кубиков видно из этого положения. Помогите ему, найдите это количество.

Каждый кубик включает в себя свою границу. Считается, что кубик видно, если существует луч, выходящий из некоторой точки p, принадлежащей кубику, в направлении вектора  - v, который не содержит точек, принадлежащих другим кубикам.

Входные данные

В первой строке записаны три целых числа n, vx и vy (1 ≤ n ≤ 103, |vx|, |vy| ≤ |104|, |vx| + |vy| > 0).

В следующих n строках записано по n целых чисел: j-ое число в i-ой строке aij (0 ≤ aij ≤ 109, 1 ≤ i, j ≤ n), обозначает высоту башни в кубиках, стоящую на единичном квадратике с противоположными углами в точках (i - 1, j - 1) и (i, j).

Выходные данные

Выведите единственное целое число — количество видимых кубиков.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

H. Запросы на количество палиндромов

дп Строки хэши *1800

Задана строка s = s1s2... s|s| длины |s|, состоящая из строчных букв латинского алфавита. А также q запросов, каждый запрос описывается двумя целыми числами li, ri (1 ≤ li ≤ ri ≤ |s|). Ответ на запрос — количество подстрок строки s[li... ri], которые являются палиндромами.

Строка s[l... r] = slsl + 1... sr (1 ≤ l ≤ r ≤ |s|) называется подстрокой строки s = s1s2... s|s|.

Строка t называется палиндромом, если она одинаково читается как слева направо, так и справа налево. Формально, если t = t1t2... t|t| = t|t|t|t| - 1... t1.

Входные данные

В первой строке записана строка s (1 ≤ |s| ≤ 5000). Во второй строке записано единственное целое число q (1 ≤ q ≤ 106) — количество запросов. В следующих q строках записаны сами запросы. В i-той из этих строк записаны два целых числа через пробел li, ri (1 ≤ li ≤ ri ≤ |s|) — описание i-того запроса.

Гарантируется, что заданная строка состоит только из строчных букв латинского алфавита.

Выходные данные

Выведите q целых чисел — ответы на запросы. Ответы на запросы выводите в том порядке, в котором запросы заданы во входных данных. Выведенные числа разделяйте пробельными символами.

Примечание

Рассмотрим четвертый запрос в первом тестовом примере. Строка s[4... 6] = «aba». Ее подстроки, являющиеся палиндромами: «a», «b», «a», «aba».

E. Братья по крови возвращаются

Бинарный поиск дп поиск в глубину и подобное сортировки Структуры данных *2400

Поликарп раздобыл дерево родственных связей. Найденное дерево описывает родственные связи n человек, пронумерованных от 1 до n. Каждый человек в этом дереве имеет не более одного непосредственного предка. Также каждый человек в дереве имеет имя, имена не обязательно уникальные.

Назовем человека с номером a 1-прародителем человека с номером b, если человек с номером a является непосредственным предком человека с номером b.

Назовем человека с номером a k-прародителем (k > 1) человека с номером b, если у человека с номером b есть 1-прародитель, и человек с номером a является (k - 1)-прародителем 1-прародителя человека с номером b.

В найденном дереве родственные связи не образуют циклов. Другими словами не существует человека, который непосредственно или косвенно является собственным прародителем (то есть является x-прародителем самого себя, для некоторого x, x > 0).

Назовем человека с номером a k-сыном человека с номером b, если человек с номером b является k-предком человека с номером a.

Поликарп очень сильно интересуется сколько у кого и каких сыновей. Он записал на листочке m пар чисел vi, ki. Помогите ему для каждой пары vi, ki узнать, сколько существует различных имен, среди всех имен ki-сыновей человека с номером vi.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 105) — количество людей в дереве. В следующих n строках записано описание людей в дереве. В i-той из этих строк записаны через пробел строка si и целое число ri (0 ≤ ri ≤ n), где si — имя человека с номером i, а ri — номер непосредственного предка человека с номером i или 0 если у человека с номером i нет непосредственного предка.

В следующей строке записано единственное целое число m (1 ≤ m ≤ 105) — количество записей Поликарпа. В m следующих строках записаны пары целых чисел через пробел. В i-ой строке записаны числа vi, ki (1 ≤ vi, ki ≤ n).

Гарантируется, что родственные связи не образуют циклов. Имена всех людей непустые строки, состоящие из не более чем 20 строчных латинских букв.

Выходные данные

Выведите m целых чисел, разделенных пробельными символами, — ответы на записи Поликарпа. Ответы для записей выводите в том порядке, в котором записи встречаются во входных данных.

E. День рождения ослика Иа-Иа

дп математика Теория вероятностей *2600

У ослика Иа-Иа сегодня день рождения. Его друг, Винни-Пух, хочет сделать ему самый лучший подарок — горшочек меда. Конечно, медвежонок понимает, что полный горшочек до ослика донести не удастся, потому что по пути он съест весь мед. А раз уж Винни собрался перекусить по пути, то изначально в горшочке должно быть как можно больше меда.

За день до этого Винни-Пух пополнил свои запасы меда. Дома у Винни-Пуха есть n полок, на каждой из которых находится некоторое, возможно нулевое, количество горшочков с медом. В течение дня Винни q раз подходил к полкам с медом; в i-тый раз он подходил к некоторой полке ui, брал с нее некоторое количество горшочков ki, пробовал мед из каждого из них и ставил все эти горшочки на некоторую полку vi. Выбирая горшочки, Винни руководствовался интуицией, а, значит, можно считать, что среди всех наборов из ki горшочков на полке ui, он равновероятно выбирает один.

Сейчас Винни помнит все действия, которые он выполнял с горшочками меда. На праздник он хочет взять горшочек, который вчера ему не попадался. Для этого ему необходимо знать математическое ожидание m количества полок, на которых нет ни одного нетронутого медвежонком горшочка. Для того, чтобы лучше оценить свои шансы, Винни-Пух хочет знать значение m после каждого выполненного им действия.

Ваша задача — написать программу, которая найдет эти значения за него.

Входные данные

Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 105) — количество полок у Винни-Пуха дома. Вторая строка содержит n целых чисел ai (1 ≤ i ≤ n, 0 ≤ ai ≤ 100) — количество горшочков с медом на полке с номером i.

В следующей строке содержится целое число q (1 ≤ q ≤ 105) — количество действий, которое выполнил Винни за предыдущий день. Далее следует q строк, i-ая из которых описывает очередное в хронологическом порядке действие и содержит три целых числа ui, vi и ki (1 ≤ ui, vi ≤ n, 1 ≤ ki ≤ 5) — номер полки, с которой Винни взял горшочки, номер полки, на которую Винни поставил горшочки после того, как попробовал мед из каждого из них, и количество горшочков, из которых Винни-Пух попробовал мёд, соответственно.

Считайте, что полки с горшочками пронумерованы целыми числами от 1 до n. Гарантируется, что Винни-Пух никогда не пытался брать с полки больше горшков, чем на ней находится.

Выходные данные

Для каждого действия Винни-Пуха выведите величину математического ожидания m на момент окончания выполнения этого действия. Относительная или абсолютная погрешность каждого значения не должна превышать 10 - 9.

D. Ежик и звезды

геометрия дп математика сортировки Структуры данных *2700

По вечерам Ежик ходил к Медвежонку в гости считать звезды. Они усаживались на бревнышке и, прихлебывая чай, смотрели на звездное небо. Оно висело над крышей, прямо за печной трубой. Справа от трубы были звезды Медвежонка, а слева — Ежика. Обычно, Ежик просто считал все звезды, поэтому он знает, что всего их n. В этот раз он решил немного усложнить себе задачу. Он мысленно ввел систему координат: начало координат положил в точке пересечения крыши и трубы, ось OX направил вдоль крыши влево, ось OY — вдоль трубы вверх (см. рисунок). Ежик проводит два луча из начала координат под углами α1 и α2 к оси OX.

Теперь он выбирает любую из звезд, лежащих строго между этими лучами. После этого он опять проводит лучи, выходящие из этой звезды, под теми же углами α1 и α2 к оси OX и выбирает очередную звезду, лежащую строго между новыми лучами. Так он повторяет до тех пор, пока между лучами, выходящими из очередной звезды, есть еще звезды, которые он может выбрать.

В итоге у Ежика получается цепочка звезд, до каждой из которых он может последовательно добраться действуя по установленным правилам.

Ваша задача — найти наибольшее количество звезд m, которое может содержать цепочка, полученная Ежиком.

Обратите внимание, что цепочка обязательно должна начинаться в точке начала координат, которая не учитывается при подсчете количества звезд m в цепочке.

Входные данные

В первой строке дано целое число n (1 ≤ n ≤ 105) — количество звезд. Во второй строке в виде обыкновенных дробей вам даны отношения «a/b c/d», такие что и (0 ≤ a, b, c, d ≤ 105; ; ; ). Заданные числа a, b, c, d — целые.

В следующих n строках даны пары целых чисел xi, yi (1 ≤ xi, yi ≤ 105)— координаты звезд.

Гарантируется, что все звезды имеют различные координаты.

Выходные данные

В единственной строке выведите число m — ответ на задачу.

Примечание

В примере длиннейшая цепочка, которую может составить Ежик, включает в себя четыре звезды. Обратите внимание, что звезды, лежащие на проводимых Ежиком лучах, не могут быть выбраны.

C. Превращение числа

дп жадные алгоритмы теория чисел *2000

Маленький Петя очень любит целые положительные числа. Недавно мама подарила ему целое положительное число a. Больше чем числа Петя любит только играть с маленькой Машей. Оказалось, что у Маши уже есть целое положительное число b. Петя решил превратить свое число a в число b, последовательно выполняя операции следующих двух типов:

  1. Вычесть из своего числа 1.
  2. Выбрать любое целое число x от 2 до k, включительно. Затем вычесть из своего числа a число (a mod x). Операция a mod x обозначает взятие остатка от деления числа a на число x.

Одну операцию Петя выполняет за одну секунду. Каждый раз он выбирает, какую операцию он будет выполнять на текущем ходу, независимо от того, какие операции он делал до этого. В частности, из этого следует, что он может выполнять одну и ту же операцию сколько угодно раз подряд.

Сейчас ему интересно, за какое наименьшее количество секунд он сможет превратить свое число a в число b. Обратите внимание, что числа x в операциях второго типа выбираются каждый раз заново, независимо друг от друга.

Входные данные

В единственной строке записаны три целых числа a, b (1 ≤ b ≤ a ≤ 1018) и k (2 ≤ k ≤ 15).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное целое число — искомое наименьшее количество секунд, необходимое для превращения числа a в число b.

Примечание

В первом примере последовательность чисел, получающихся у Пети в процессе получения числа b, такая: 10  →  8  →  6  →  4  →  3  →  2  →  1.

Во втором примере одна из возможных последовательностей такая: 6  →  4  →  3.

E. Дерево и таблица

Деревья дп поиск в глубину и подобное реализация *3000

Маленький Петя очень любит деревья. Недавно мама подарила ему дерево с 2n вершинами. Петя сразу же решил расположить это дерево на прямоугольной таблице, состоящей из 2 строк и n столбцов так, чтобы выполнялись следующие условия:

  1. Каждой клетке таблицы соответствует ровно одна вершина дерева и наоборот, каждой вершине дерева соответствует ровно одна клетка таблицы.
  2. Если две вершины дерева соединены ребром, то соответствующие им клетки имеют общую сторону.

Сейчас Пете интересно, сколько существует способов расположить его дерево на таблице. Он называет два расположения различными, если существует вершина дерева, которой соответствуют разные клетки таблицы в этих двух расположениях. Поскольку большие числа очень пугают Петю, выведите остаток от деления ответа на 1000000007 (109 + 7).

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 105). Следующие (2n - 1) строк содержат по два целых числа ai и bi (1 ≤ ai, bi ≤ 2nai ≠ bi), которые обозначают номера вершин, соединенных соответствующим ребром.

Считайте, что вершины дерева пронумерованы целыми числами от 1 до 2n. Гарантируется, что заданный во входных данных граф является деревом, то есть связным ациклическим неориентированным графом.

Выходные данные

Выведите единственное целое число — искомое количество способов расположить дерево на таблице, взятое по модулю 1000000007 (109 + 7).

Примечание

Пояснение к примеру 1 (ниже представлены все 12 вариантов расположения дерева на таблице):


1-3-2 2-3-1 5 4 6 6 4 5
| | | | | | | | | | | |
5 4 6 6 4 5 1-3-2 2-3-1

4-3-2 2-3-4 5-1 6 6 1-5
| | | | | | | |
5-1 6 6 1-5 4-3-2 2-3-4

1-3-4 4-3-1 5 2-6 6-2 5
| | | | | | | |
5 2-6 6-2 5 1-3-4 4-3-1

B. Физпрактикум

Бинарный поиск дп сортировки *1400

На физическом практикуме Вася делал задание по измерению емкости конденсатора. По рекомендации преподавателя, он сделал не одно, а целых n измерений, и записал их результаты в тетрадку. После этого он уже собирался показывать результаты преподавателю, но вспомнил, что на прошлом занятии учитель заставил его друга Петю переделывать эксперимент из-за того, что наибольший и наименьший результаты измерений отличались более чем в два раза. Вася — ленивый, и он не хочет ничего переделывать. Он хочет сдать задание и пойти домой играть в компьютерные игры. Поэтому он решил пойти на хитрость: прежде, чем показывать результаты измерений преподавателю, он сотрет какие-то из них, причем сотрет так, чтобы наибольший и наименьший результаты оставшихся измерений отличались не более, чем в два раза. Другими словами, если среди оставшихся измерений наименьший результат измерения x, а наибольший результат — y, то должно выполняться неравенство y ≤ 2·x. Разумеется, чтобы не вызвать подозрений преподавателя, Вася хочет стереть как можно меньше результатов изменений из своих записей.

Помогите Васе, найдите какое наименьшее количество результатов измерений ему придется стереть из своих записей, чтобы наибольший и наименьший результаты оставшихся измерений отличались не более, чем в два раза.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 105) — количество проведенных измерений. Во второй строке записано n целых чисел c1, c2, ..., cn (1 ≤ ci ≤ 5000) — результаты измерений. Числа во второй строке разделяются одиночными пробелами.

Выходные данные

Выведите единственное целое число — наименьшее количество результатов, которое Васе придется стереть.

Примечание

В первом примере можно удалить четвертый и шестой результаты измерений (значения 8 и 7). Тогда наибольшим из оставшихся значений будет 5, а наименьшим — 3. Или же можно удалить третий и пятый результаты (оба равны 3). При таком способе наибольшим из оставшихся значений будет 8, а наименьшим — 4.

E. Общежитие

дп реализация *2100

Студент Вася приехал учиться в Берляндский государственный университет из деревни, поэтому живет в общежитии. Семестр длится n дней, и в каждый из этих дней родители присылают ему еды. Утром i-го дня ему приходит ai килограмм еды, которую можно есть как в текущий, так и на следующий день (затем еда портится и становится непригодной к употреблению).

Каждый день Вася съедает v килограмм еды. Известно, что родители Васи не допустят, чтобы он голодал, поэтому еды Васе хватает всегда. У Васи есть m друзей, которые иногда у него живут. Пусть друзья пронумерованы числами от 1 до m. Друг с номером j живет у Васи со дня номер lj по день номер rj включительно. Также j-му другу в день необходимо съесть fj килограмм еды. Обычно друзья Васи питаются в столовой, но иногда щедрый Вася кормит некоторых из них. Каждый день Вася может покормить каких-то друзей, которые живут у него в этот день (а может и не кормить никого).

Каждый раз, когда Вася угощает друга, он дает ему ровно столько еды, сколько необходимо другу в день, и Васин рейтинг популярности в университете повышается на единицу. Вася не может угощать одного и того же друга несколько раз в течение одного дня. Кроме того, он прекрасно знает, что режим питания нарушать нельзя, и поэтому он обязательно должен съедать в день v килограмм еды.

Вася хочет таким образом выбирать, кого он будет кормить в каждый из дней в семестре, чтобы его рейтинг стал как можно больше. Изначально рейтинг Васи равен 0, потому что он первокурсник.

Входные данные

В первой строке записаны два целых числа n и v (1 ≤ n, v ≤ 400). Во второй строке записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 400), разделенных одиночными пробелами. Значение ai обозначает, что в утро i-го дня приходит ai килограмм еды, которую можно есть в день i и/или в день i + 1 (затем эта еда портится). Гарантируется, что если Вася не будет никого угощать, то существует способ так питаться, что каждый день он будет съедать v килограмм еды.

В третьей строке записано целое число m (1 ≤ m ≤ 400). Каждая из следующих m строк описывает одного друга Васи: j-я из этих строк содержит три целых числа lj, rj, fj (1 ≤ lj ≤ rj ≤ n, 1 ≤ fj ≤ 400), разделенные одиночными пробелами.

Выходные данные

В первой строке выведите наибольший рейтинг, которого Вася сможет достичь. Далее в n строках выведите, кого из друзей нужно кормить в каждый из дней. В i-й из этих строк сначала выведите количество друзей, которых следует угостить в i-й день, а затем перечислите номера этих друзей. Друзей в этих списках выводите в любом порядке. Если оптимальных решений несколько, выведите любое из них.

C. Почти арифметическая прогрессия

дп Перебор *1500

Гена любит последовательности чисел. Недавно он открыл для себя новый тип последовательностей, который он назвал — почти арифметическая прогрессия. Назовем последовательность почти арифметической прогрессией, если ее элементы можно представить в виде:

  • a1 = p, где p — некоторое целое число;
  • ai = ai - 1 + ( - 1)i + 1·q (i > 1), где q — некоторое целое число.

Сейчас у Гены на листке записана последовательность b, состоящая из n целых чисел. Помогите Гене, найдите в ней самую длинную подпоследовательность чисел, которая является почти арифметической прогрессией.

Последовательность s1,  s2,  ...,  sk называется подпоследовательностью последовательности b1,  b2,  ...,  bn, если найдется такая возрастающая последовательность индексов i1, i2, ..., ik (1  ≤  i1  <  i2  < ...   <  ik  ≤  n), что bij  =  sj. Иными словами, последовательность s может быть получена из b путем вычеркивания некоторых элементов.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 4000). В следующей строке задано n целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 106).

Выходные данные

Выведите единственное целое число — длину максимальной по длине, искомой подпоследовательности.

Примечание

В первом тесте подходящей подпоследовательностью будет сама последовательность.

Во втором тесте подходит подпоследовательность: 10, 20, 10.

D. Вруны и Сережа

дп *2700

За столом в ряд сидят n человек. Про каждого человека известно, что он либо всегда говорит правду, либо всегда лжет.

Маленький Сережа спросил их: сколько среди вас человек, которые всегда говорят правду? Каждый из сидящих за столом знает всю информацию (кто правдивый человек, а кто врун) про всех людей, сидящих за столом. Правдивые люди скажут правильный ответ, вруны скажут любое целое число от 1 до n, которое не является правильным ответом. Каждый врун выбирается свой ответ независимо от остальных врунов, поэтому ответы двух разных врунов могут отличаться.

Сережа не знает никакой информации про людей, кроме их ответов на заданный вопрос. Он записал на листок бумаги n целых чисел a1, a2, ..., an, где ai — ответ i-го в ряду человека. По этой последовательности Сережа определил, что ровно k человек из сидящих за столом точно врут.

Сереже интересно, сколько существует вариантов ответов людей (последовательностей ответов a длины n), при которых можно будет сказать, что ровно k человек, из сидящих за столом, точно врут. Так как описанных вариантов ответов может быть достаточно много, посчитайте остаток от деления количества вариантов на 777777777.

Входные данные

В первой строке задано два целых числа n, k, (1 ≤ k ≤ n ≤ 28). Гарантируется, что n — степень числа 2.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю 777777777.

B. Маленький Слоник и выборы

дп Комбинаторика Перебор *1900

Недавно в Зоопарке прошли выборы. Всего в выборах участвовало 7 основных политических партий: одна из них Политическая партия Маленького Слоника, остальные 6 партий имеют менее запоминающиеся названия.

Для политических партий очень важен их номер в избирательном бюллетене. Всего возможных номеров m: 1, 2, ..., m. Каждой из этих 7 партий будет каким-то образом присвоен ровно один номер, причем две разные партии не могут получить один и тот же номер.

Члены Политической партии Маленького Слоника верят в счастливые цифры 4 и 7. Они хотят оценить свои шансы на выборах, для этого надо выяснить, сколько существует таких корректных присвоений номеров партиям, что количество счастливых цифр номера в бюллетене партии Маленького Слоника строго больше общего количества счастливых цифр в номерах остальных 6 партий.

Помогите Политической партии Маленького Слоника, посчитайте это количество. Так как ответ может быть довольно большим, выведите остаток от его деления на 1000000007 (109 + 7).

Входные данные

В единственной строке задано единственное целое положительное число m (7 ≤ m ≤ 109) — количество возможных номеров в бюллетене.

Выходные данные

В единственной строке выведите целое число — ответ на задачу по модулю 1000000007 (109 + 7).

C. Маленький Слоник и НОК

Бинарный поиск дп Комбинаторика математика *2000

Маленький Слоник любит операцию НОК (наименьшее общее кратное) непустого множества целых положительных чисел. Результат операции НОК k целых положительных чисел x1, x2, ..., xk — это минимальное целое положительное число, которое делится на каждое из чисел xi.

Пусть задана последовательность целых чисел b1, b2, ..., bn. Обозначим через lcm(b1, b2, ..., bn) их НОК, а через max(b1, b2, ..., bn) — максимальное из них. Маленький Слоник считает последовательность b хорошей, если lcm(b1, b2, ..., bn) = max(b1, b2, ..., bn).

У Маленького Слоника есть последовательность целых чисел a1, a2, ..., an. Помогите ему найти количество хороших последовательностей целых чисел b1, b2, ..., bn таких, что для всех i (1 ≤ i ≤ n) выполняется 1 ≤ bi ≤ ai. Так как ответ может быть довольно большим, выведите остаток от его деления на 1000000007 (109 + 7).

Входные данные

В первой строке записано единственное целое положительное число n (1 ≤ n ≤ 105) — количество чисел в последовательности a. Во второй строке записаны n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 105) — последовательность a.

Выходные данные

В единственной строке выведите одно целое число — ответ на задачу по модулю 1000000007 (109 + 7).

D. Маленький Слоник и сломана сортировка

дп математика Теория вероятностей *2600

Маленький Слоник очень любит перестановки целых чисел от 1 до n. Но больше всего он любит их сортировать. Чтобы отсортировать перестановку Маленький Слоник несколько раз меняет некоторые элементы местами. В результате должна получиться перестановка 1, 2, 3, ..., n.

В этот раз у Маленького Слоника есть перестановка p1, p2, ..., pn. Его программа-сортировка должна выполнить ровно m шагов, на i-ом из которых она меняет местами элементы, расположенные в данный момент на ai-той и bi-той позициях. Так случилось, что программа-сортировка Маленького Слоника сломалась, и теперь на каждом шагу она равновероятно может либо не сделать ничего, либо поменять требуемые элементы местами.

Теперь Маленький Слоник даже не надеется, что программа отсортирует перестановку, но все-таки ему интересно, насколько близка будет полученная в результате выполнения программы перестановка к отсортированной. Для этого помогите Маленькому Слонику найти математическое ожидание количества инверсий перестановки после выполнения всех шагов программы.

Пару целых чисел i, j (1 ≤ i < j ≤ n) назовем инверсией в перестановке p1, p2, ..., pn, если выполняется неравенство pi > pj.

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 1000, n > 1) — размер перестановки и количество шагов. Во второй строке заданы n различных целых положительных чисел, не превосходящих n — изначальная перестановка. В следующих m строках заданы по два целых числа: в i-той строке записаны числа ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi) — позиции меняемых на i-том шаге программы элементов.

Выходные данные

В единственной строке выведите одно действительное число — ответ на задачу. Ответ будет считать правильным, если его относительная или абсолютная погрешность не превосходит 10 - 6.

B. Максим и ресторан

дп математика Теория вероятностей *1900

Максим открыл свой собственный ресторан, в котором стоит огромный стол длины p метров.

Сегодня у Максима праздничный ужин, и к нему придет n гостей. Пронумеруем гостей ресторана Максима от 1 до n. Максим знает размеры всех гостей, которые к нему придут. Размер i-го гостя (ai) обозначает, сколько метров займет гость, если сядет за стол ресторана.

Задолго до ужина гости выстраиваются в очередь перед рестораном в некотором порядке. Затем Максим по очереди запускает гостей в свой ресторан. Максим перестает запускать гостей в ресторан в случае, если очередной гость не помещается за стол ресторана. Очередной гость не помещается за стол ресторана, если сумма размеров всех зашедших в ресторан гостей и размера очередного гостя больше p. В этом случае, чтобы не обидеть гостя, который не поместился за стол, Максим больше никого не пускает в ресторан, даже если один из следующих в очереди гостей помещается за стол ресторана.

Теперь Максиму интересно, чему равно среднее количество зашедших в ресторан гостей по всем n! возможным порядкам гостей в очереди. Помогите Максиму, посчитайте это число.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 50) — количество гостей ресторана. В следующей строке заданы целые числа a1, a2, ..., an (1 ≤ ai ≤ 50) — размеры гостей в метрах. В третьей строке задано целое число p (1 ≤ p ≤ 50) — длина стола в метрах.

Числа в строках разделяются одиночными пробелами.

Выходные данные

В единственную строку выведите вещественное число — ответ на задачу. Ответ будет считаться верным, если абсолютная или относительная погрешность не будет превышать 10 - 4.

Примечание

В первом примере люди могут приходить в таких порядках:

  • (1, 2, 3) — двое человек будет в ресторане;
  • (1, 3, 2) — один человек будет в ресторане;
  • (2, 1, 3) — двое человек будет в ресторане;
  • (2, 3, 1) — один человек будет в ресторане;
  • (3, 1, 2) — один человек будет в ресторане;
  • (3, 2, 1) — один человек будет в ресторане.

В сумме получаем (2 + 1 + 2 + 1 + 1 + 1) / 6 = 8 / 6 = 1.(3).

C. Максим и матрица

дп Конструктив математика *2000

Максим любит заполнять матрицу специальным образом. Ниже приведен псевдокод заполнения матрицы размера (m + 1) × (m + 1):

Максим просит вас посчитать, сколько существует таких чисел m (1 ≤ m ≤ n), что сумма значений ячеек в строке с номером m + 1, полученной матрицы будет равна t.

Выражение (x xor y) обозначает применение операции побитового исключающего «ИЛИ» к числам x и y. Данная операция есть во всех современных языках программирования, например, в языке C++ и Java она обозначается символом «^», в Pascal — «xor».

Входные данные

В единственной строке заданы два целых числа n и t (1 ≤ n, t ≤ 1012, t ≤ n + 1).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В единственную строку выведите целое число — ответ на задачу.

D. Максим и возрастающая подпоследовательность

дп *2600

Максим любит последовательности, особенно те, которые строго возрастают. Сейчас его интересует задача: какова длина самой длинной возрастающей подпоследовательности заданной последовательности a?

Последовательность a задается следующим образом:

  • длина последовательности равна n × t;
  • (1 ≤ i ≤ n × t), где операция обозначает взятие остатка от деления числа x на число y.

Последовательность s1,  s2,  ...,  sr длины r называется подпоследовательностью последовательности a1,  a2,  ...,  an, если найдется такая возрастающая последовательность индексов i1, i2, ..., ir (1  ≤  i1  <  i2  < ...   <  ir  ≤  n), что aij  =  sj. Иными словами, подпоследовательность может быть получена из последовательности путем вычеркивания некоторых элементов.

Последовательность s1,  s2,  ...,  sr называется возрастающей, если выполняется неравенство: s1 < s2 <  ... <  sr.

У Максима есть k вариантов последовательности a. Помогите Максиму, для каждой последовательности найдите длину наибольшей возрастающей подпоследовательности.

Входные данные

В первой строке заданы четыре целых числа k, n, maxb и t (1 ≤ k ≤ 10; 1 ≤ n, maxb ≤ 105; 1 ≤ t ≤ 109n × maxb ≤ 2·107). Далее идет k строк, каждая из которых содержит n целых чисел b1, b2, ..., bn (1 ≤ bi ≤ maxb).

Обратите внимание, для всех вариантов последовательности a значения n, maxb и t совпадают, различаются лишь массивы b.

Числа в строках разделяются одиночными пробелами.

Выходные данные

Выведите k целых чисел, разделенных пробельными символами — ответы для входных данных. Ответы для каждого варианта последовательности a выводите в порядке следования этих последовательностей во входных данных.

E. Максим и калькулятор

дп Перебор *2800

У Максима есть калькулятор. В калькуляторе есть две целочисленные ячейки. Сначала в первой ячейке записано число 1, а во второй 0. За одно действие можно выполнить одну из описанных ниже операций:

  1. Пусть в текущий момент времени в первой ячейке записано число a, а во второй число b. Записать во вторую ячейку число b + 1;
  2. Пусть в текущий момент времени в первой ячейке записано число a, а во второй число b. Записать в первую ячейку число a·b.

Сейчас Максим интересуется следующей задачей: сколько существует целых чисел x (l ≤ x ≤ r) таких, что число x можно записать в первую ячейку калькулятора выполнив не более p действий.

Входные данные

В первой строке заданы три целых числа: l, r, p (2 ≤ l ≤ r ≤ 109, 1 ≤ p ≤ 100).

Числа в строке разделяются одиночными пробелами.

Выходные данные

В единственную строку выведите целое число — ответ на задачу.

E. Ромб

дп Перебор Структуры данных *2500

Вам дана таблица размера n × m. На пересечении i-ой строки (1 ≤ i ≤ n) и j-ого столбца (1 ≤ j ≤ m) стоит целое неотрицательное число ai, j. Кроме того, Вам дано целое неотрицательное число k.

Вам необходимо найти такую пару целых чисел (a, b), которая удовлетворяет условиям:

  • k ≤ a ≤ n - k + 1;
  • k ≤ b ≤ m - k + 1;
  • обозначим максимум функции среди всех целых x и y, которые удовлетворяют неравенствам k ≤ x ≤ n - k + 1 и k ≤ y ≤ m - k + 1, через mval; для искомой пары чисел должно выполняться равенство f(a, b) = mval.
Входные данные

В первой строке даны три разделенных пробелами целых числа n, m и k (1 ≤ n, m ≤ 1000, ). Далее в n строках находятся по m целых чисел: j-ое число в i-ой строке равно ai, j (0 ≤ ai, j ≤ 106).

Числа в строках разделяются пробелами.

Выходные данные

Выведите искомую пару целых чисел a и b. Числа разделяйте пробелом.

Если существует несколько правильных ответов, разрешается вывести любой из них.

B. Хорошие последовательности

дп теория чисел *1500

Белка Лисска интересуется последовательностями. Также у нее есть предпочтения в целых числах. Она думает, что n целых чисел a1, a2, ..., an хорошие.

Теперь ей интересны хорошие последовательности. Последовательность x1, x2, ..., xk называется хорошей, если она удовлетворяет следующим трем условиям:

  • Последовательность строго возрастает, то есть xi < xi + 1 для всех i (1 ≤ i ≤ k - 1).
  • Никакие два соседних элемента не являются взаимно простыми, то есть gcd(xi, xi + 1) > 1 для всех i (1 ≤ i ≤ k - 1) (где gcd(p, q) обозначает наибольший общий делитель чисел p и q).
  • Все элементы данной последовательности являются хорошими целыми числами.

Найдите длину самой длинной хорошей последовательности.

Входные данные

Входные данные состоят из двух строк. Первая строка содержит единственное целое число n (1 ≤ n ≤ 105) — количество хороших целых чисел. Во второй строке задан список хороших целых чисел a1, a2, ..., an через пробел, в порядке строгого возрастания (1 ≤ ai ≤ 105ai < ai + 1).

Выходные данные

Выведите единственное целое число — длину самой длинной хорошей последовательности.

Примечание

В первом примере следующие последовательности являются примерами хороших последовательностей: [2; 4; 6; 9], [2; 4; 6], [3; 9], [6]. Длина самой длинной хорошей последовательности — 4.

C. Выбираем мячи

дп *2000

Дано n мячей, расставленных в ряд. У каждого мяча есть цвет (выраженный для удобства целым числом) и целочисленное значение. Цвет i-ого мяча равен ci, а значение i-ого мяча равно vi.

Белка Лисска выбирает несколько мячей и создает из них последовательность, не меняя относительный порядок мячей. Она хочет максимизировать значение этой последовательности.

Значение последовательности определяется как сумма следующих значений для каждого мяча (где a и b — заданные константы):

  • Если мяч находится не в начале последовательности, а цвет у мяча такой же, как цвет предыдущего мяча, прибавьте (значение мяча)  ×  a.
  • В противном случае, прибавьте (значение мяча)  ×  b.

Дано q запросов. Каждый запрос содержит два целых числа ai и bi. Для каждого запроса найдите максимальное значение последовательности, которую может построить белочка при a = ai и b = bi.

Заметьте, что созданная последовательность может быть пустой, а значение пустой последовательности считается равным нулю.

Входные данные

В первой строке содержится два целых числа n и q (1 ≤ n ≤ 105; 1 ≤ q ≤ 500). Во второй строке содержится n целых чисел: v1, v2, ..., vn (|vi| ≤ 105). В третьей строке содержится n целых чисел: c1, c2, ..., cn (1 ≤ ci ≤ n).

В следующих q строках записаны значения констант a и b для запросов. В i-ой из этих строк записаны два целых числа ai и bi (|ai|, |bi| ≤ 105).

В каждой строке целые числа разделены одиночными пробелами.

Выходные данные

Для каждого запроса выведите строку, содержащую одно целое число — ответ на запрос. В i-ой строке содержится ответ на i-ый запрос в порядке ввода.

Пожалуйста, не используйте спецификатор %lld, для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере, чтобы достичь максимальное значение:

  • В первом запросе надо выбрать 1ый, 3ий и 4ый мяч.
  • Во втором запросе надо выбрать 3ий, 4ый, 5ый и 6ой мячи.
  • В третьем запросе нужно выбрать 2ой и 4ый мячи.

Заметьте, что могут быть и другие способы достичь максимальное значение.

D. Цветные камни

дп *2500

Даны две последовательности цветных камней. Цвет каждого камня либо красный, либо зеленый, либо синий. Также даны две строки, s и t. Символ номер i (1-индексация) строки s представляет цвет камня номер i в первой последовательности. Аналогично, символ номер i (1-индексация) строки t представляет цвет i-ого камня во второй последовательности. Если символ — «R», «G», или «B», то цвет соответствующего камня будет красный, зелёный или синий, соответственно.

Изначально Белка Лисска стоит на первом камне в первой последовательности, а кот Вася стоит на первом камне второй последовательности. Вы можете выполнить следующие инструкции ноль или больше раз.

Каждая из инструкций может быть одного из трех типов: «RED», «GREEN», или «BLUE». После инструкции c, животные, которые стоят на камне цвета c, перепрыгнут на камень вперед. Например, если применить инструкцию «RED», то животные, стоящие на красных камнях, прыгнут на камень вперед. Вам не разрешается выполнять инструкции, выводящие некоторых животных за пределы последовательности. Другими словами, если некоторое животное стоит на последнем камне, вы не можете выполнить инструкцию с цветом этого камня.

Пара позиций (позиция Лисски, позиция Васи) называется состоянием. Состояние называется достижимым, если это состояние достижимо при выполнении инструкций ноль или больше раз от исходного состояния (1, 1). Вычислите количество различных достижимых состояний.

Входные данные

Входные данные содержат две строки. Первая строка содержит строку s (1 ≤ |s| ≤ 106). Вторая строка содержит строку t (1 ≤ |t| ≤ 106). Символы каждой строки — это «R», «G», или «B».

Выходные данные

Выведите в единственной строке количество различных достижимых состояний.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел в С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере достижимых состояний пять: (1, 1), (2, 2), (2, 3), (3, 2), и (3, 3). Например, состояние (3, 3) достижимое, потому что если выполнить инструкции «RED», «GREEN», и «BLUE» в данном порядке из изначального состояния, то состояние будет (3, 3). Картинка ниже показывает, как в таком случае работают инструкции.

E. Деревья у дороги

дп Структуры данных *3000

Белка Лисска любит орехи. Лисска просит вас посадить ореховые деревья.

Есть n мест (пронумерованных от 1 до n с запада на восток), где можно посадить дерево вдоль улицы. Деревья вырастают на один метр за месяц. В начале каждого месяца вы должны обрабатывать один запрос. Запрос может быть одного из следующих двух типов:

  1. Посадить дерево высотой h в месте с номером p.
  2. Срубить x-ое существующее (не срубленное) дерево с запада (где x в 1-индексации). Когда мы срубаем дерево, оно падает вниз и занимает все доступное пространство на месте, где оно стояло. Таким образом, ни одно дерево в этом месте больше посадить нельзя.

После обработки каждого запроса, вы должны вывести длину самой длинной возрастающей подпоследовательности. Подмножество существующих деревьев называется возрастающей подпоследовательностью, если высоты деревьев в нем строго возрастают с запада на восток (например, самое западное дерево в наборе должно иметь самую маленькую высоту). Длина возрастающей подпоследовательности — это количество деревьев в ней.

Обратите внимание, что Лисске не нравятся деревья одинаковой высоты, поэтому гарантируется, что в любой момент времени нет двух деревьев одинаковой высоты.

Входные данные

В первой строке записаны два целых числа: n и m (1  ≤ n ≤ 105; 1 ≤ m ≤ 2·105) — количество мест для деревьев и количество запросов.

В следующих m строках записана информация о запросах в следующем формате:

  • Если тип i-ого запроса — 1, то i-ая строка содержит три целых числа: 1, pi, и hi (1 ≤ pi ≤ n, 1 ≤ hi ≤ 10), где pi — место нового дерева, а hi — изначальная высота нового дерева.
  • Если тип i-ого запроса — 2, то i-ая строка содержит два целых числа: 2 и xi (1 ≤ xi ≤ 10), где xi — это номер дерева, которое мы хотим срубить.

Гарантируется, что входные данные корректны, то есть:

  • Для запросов 1 типа pi будут попарно различны.
  • Для запросов 2 типа xi не будут превышать текущего количества деревьев.
  • В любой момент времени никакие два дерева не имеют одинаковые высоты.

В каждой строке целые числа разделены одиночными пробелами.

Выходные данные

Выведите m целых чисел — длину самой длинной возрастающей подпоследовательности после каждого запроса. Разделяйте числа пробельными символами.

Примечание

Вы можете видеть состояние улицы после каждого запроса на следующей анимации:

Если Ваш браузер не поддерживает анимацию png, посмотрите версию в gif здесь: http://212.193.37.254/codeforces/images/162/roadtree.gif

D. Шведская стенка

дп *2300

Манао работает в строительной компании. Недавно к ним пришел заказ на строительство шведских стенок в детском парке. Манао поручили разработать план постройки, который даст возможность компании максимально сэкономить средства.

Изучив формальные спецификации для шведской стенки, Манао обнаружил целый ряд неоднозначных требований и решил трактовать их в свою пользу. В итоге конструкция, в которую превратился заказ, формально описывается следующим образом:

  • Введем некоторую единицу длины. Центр конструкции — шест высотой n.
  • На высотах 1, 2, ..., n из шеста торчит ровно одна горизонтальная палка. Каждая палка торчит в одном из четырех заранее фиксированных направлений.
  • Считается, что ребенок может перебраться от одной палки до другой, если расстояние между ними не превышает h и они торчат в одном и том же направлении. Если ребенок стоит на земле, то он может залезть на любую из палок на высоте от 1 до h. В конструкции Манао ребенок должен суметь с земли добраться до хотя бы одной из палок на высоте n - h + 1, n - h + 2, ..., n.
Слева на рисунке изображен вид обычной шведской стенки, а справа — конструкция, которую разработал Манао

Манао интересует, сколько существует различных дизайнов конструкции, удовлетворяющих его требованиям. Так как это число может оказаться очень большим, найдите его остаток от деления на 1000000009 (109 + 9). Два дизайна считаются различными, если найдется такая высота i, что палки на высоте i в этих дизайнах торчат не в одном и том же направлении.

Входные данные

В единственной строке записаны через пробел два целых числа n и h (1 ≤ n ≤ 1000, 1 ≤ h ≤ min(30, n)).

Выходные данные

В единственной строке выведите остаток от деления количества дизайнов на 1000000009 (109 + 9).

Примечание

Рассмотрим несколько дизайнов при h = 2. Дизайн, в котором первая палка торчит в направлении d1, вторая — в направлении d2 и так далее (1 ≤ di ≤ 4), будем обозначать строкой d1d2...dn.

Дизайн «1231» (первые три палки торчат в разных направлениях, последняя — в том же, что и первая). Ни до палки на высоте 3, ни до палки на высоте 4 ребенок добраться не может.

Дизайн «414141». Ребенок может добраться до палки на высоте 5, взобравшись изначально на первую палку, с нее — на третью и с третьей на пятую. Также он может добраться до палки на высоте 6 по маршруту: вторая  →  четвертая  →  шестая палки.

Дизайн «123333». До верхних двух палок добраться невозможно.

Дизайн «323323». Можно добраться до палки на высоте 6 по маршруту: первая  →  третья  →  четвертая  →  шестая палки.

B. Теплица

дп *1700

Эмускальд — страстный садовод. В его владении находится самая длинная теплица в мире — ее длина практически бесконечна.

За многие годы Эмускальд вырастил n растений в своей теплице, каждое растение принадлежит одному из m различных видов, пронумерованных от 1 до m. Теплица Эмускальда очень узкая и ее можно рассматривать как бесконечную прямую, где каждое растение занимает одну точку на этой прямой.

Эмускальд обнаружил, что для каждого вида растений есть своя оптимальная температура. Теперь юноша хочет расставить m - 1 заслонок, которые разделили бы теплицу на m отделений, пронумерованных от 1 до m слева направо, так чтобы в каждом отделении росли все растения одного конкретного вида. Он может ставить заслонки так, как хочет, но в итоге каждое растение i-го вида должно произрастать в i-ом слева отделении теплицы.

Конечно, не всегда возможно расставить заслонки именно так, и Эмускальду придется пересадить некоторые свои растения. Он может пересадить каждое растение с изначального места в любое место в теплице (в любой вещественной координате), если там еще нет другого растения. Так как пересадка неблагоприятно сказывается на растениях, помогите Эмускальду найти минимальное количество растений, которое он должен пересадить, чтобы расставить заслонки требуемым образом.

Входные данные

В первой строке входных данных записаны через пробел два целых числа n и m (1 ≤ n, m ≤ 5000, n ≥ m) — количество растений и количество различных видов. Каждая из последующих n строк содержит по два числа через пробел: одно целое число si (1 ≤ si ≤ m) и одно вещественное число xi (0 ≤ xi ≤ 109), вид и положение i-го растения. Каждое xi будет задано с не более 6 цифрами после десятичной точки.

Гарантируется, что все xi различны; в теплице есть как минимум по одному растению каждого вида; растения заданы во входных данных в порядке «слева-направо», то есть в порядке возрастания их координат xi (xi < xi + 1, 1 ≤ i < n).

Выходные данные

Выведите единственное целое число — минимальное количество растений, которые надо пересадить.

Примечание

В первом тесте Эмускальд может пересадить первое растение справа от последнего растения, так что ответ равен 1.

Во втором тесте все виды уже растут в правильном порядке, так что ничего пересаживать не надо.

D. Максимальный водопад

графы дп сортировки Структуры данных *2600

Эмускальда наняли на разработку искусственного водопада в соответствии с последними тенденциями в ландшафтной архитектуре. Современный искусственный водопад состоит из нескольких горизонтальных панелей, прикрепленных к широкой плоской стене. Вода течет вниз, начиная от верха стены, от панели к панели, пока не достигнет нижней части стены.

Стена имеет высоту t. К ней прикреплены n панелей. Каждая панель представляет собой горизонтальный отрезок на высоте hi, который начинается с li и заканчивается в ri. Панель номер i соединяет точки стены (li, hi) и (ri, hi). Верхняя часть стены считается панелью, соединяющей точки (  -  109,  t) и (109,  t). Аналогично, нижняя часть стены соединяет точки (  -  109,  0) и (109,  0). Никакие две панели не имеют общую точку.

Эмускальд знает, что для того, чтобы водопад выглядел эффектно, он может течь с панели i на панель j (), только если выполнены следующие условия:

  1. max(li, lj) < min(ri, rj) (горизонтальные проекции панелей перекрываются);
  2. hj < hi (панель j ниже панели i);
  3. нет такой панели k (hj < hk < hi), что первые два условия выполняются для пар панелей (i, k) и (k, j).

Тогда поток по равняется min(ri, rj) - max(li, lj), длине пересечения их горизонтальных проекций.

Эмускальд решил, что в его водопаде вода будет течь по одному пути сверху вниз. Если вода падает на какую-то панель (исключая низ стены), то далее вода должна падать ровно на одну панель ниже нее. Общий поток воды в таком водопаде определяется как минимум величин пересечения горизонтальных проекций между двумя соседними панелями на пути водопада. Более формально:

  1. водопад состоит из одного пути панелей ;
  2. поток водопада равняется минимальному потоку на пути .

Для того, чтобы сделать действительно грандиозный водопад, Эмускальд должен максимизировать этот поток воды, но на стене слишком много панелей, и он с трудом планирует свое детище. Ниже приведен пример одного из водопадов, который хочет установить Эмускальд:

Помогите Эмускальду поддержать свою репутацию и найдите значение максимально возможного потока воды в некотором водопаде.

Входные данные

Первая строка входных данных состоит из двух целых чисел n и t (1 ≤ n ≤ 105, 2 ≤ t ≤ 109), записанных через пробел — количество панелей, не считая верхнюю и нижнюю панели, и высота стены. Каждая из последующих n строк содержит по три целых числа через пробел hi, li и ri (0 < hi < t,  - 109 ≤ li < ri ≤ 109) — высота, левый и правый концы отрезка i-ой панели.

Гарантируется, что никакие две панели не имеют общих точек.

Выходные данные

Выведите единственное целое число — максимально возможную величину потока воды в искомом водопаде.

Примечание

Первый тест соответствует картинке.

E. Число с заданным количеством делителей

дп Перебор теория чисел *2000

Найдите наименьшее натуральное число, имеющее заданное количество делителей. Гарантируется, что ответ не превосходит 1018.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 1000).

Выходные данные

Выведите наименьшее число, имеющее ровно n делителей.

D. Дима и фигура

дп *2400

Дима любит рисунки на клетчатом листке бумаги. А еще больше Дима любит рисунки, которые изображают одну из его любимых фигур.

Клетчатый листок размера n × m представляет собой таблицу, состоящую из n строк и m столбцов. На чистом клетчатом листке — все клетки белые. Рисунком Дима называет изображение на чистом клетчатом листке, полученное закрашиванием некоторых клеток в черный цвет.

Рисунок изображает одну из любимых фигур Димы, если выполняются следующие условия:

  • Рисунок содержит хотя бы одну закрашенную клетку;
  • Все закрашенные клетки образуют связное множество, то есть из любой закрашенной клетки можно дойти до любой другой (из клетки можно перейти в соседнюю по стороне);
  • Минимальное количество перемещений, за которое можно дойти из закрашенной клетки с координатами (x1, y1) в закрашенную клетку с координатами (x2, y2), двигаясь только по закрашенным клеткам, равно |x1 - x2| + |y1 - y2|.

Сейчас Диму интересует вопрос: сколько существует рисунков на листке размера n × m, которые изображают одну из его любимых фигур? Посчитайте это количество по модулю 1000000007 (109 + 7).

Входные данные

В первой строке даны два целых числа n и m — размеры листка (1 ≤ n, m ≤ 150).

Выходные данные

В единственную строку выведите остаток от деления ответа на задачу на число 1000000007 (109 + 7).

E. Дима и игра

дп игры *2600

Дима и Аня любят играть в разные игры. Сейчас Дима придумал новую игру, в которую хочет поиграть с Аней.

Дима пишет на листке n пар целых чисел (li, ri) (1 ≤ li < ri ≤ p). Далее игроки ходят по очереди. За один ход игрок может выполнить следующее действие:

  1. выбрать номер пары i (1 ≤ i ≤ n), такой что ri - li > 2;
  2. заменить пару номер i на пару или на пару . Запись x обозначает округление к ближайшему меньшему целому числу.

Игрок, который не может сделать ход — проигрывает.

Конечно, Дима хочет, чтобы Аня, которая будет ходить первая, выиграла. Поэтому Дима должен выписать такие n пар целых чисел (li, ri) (1 ≤ li < ri ≤ p), чтобы при оптимальной игре обоих игроков выигрывал первый. Посчитайте, сколькими способами Дима может это сделать. Выведите остаток от деления ответа на число 1000000007 (109 + 7).

Два способа считаются различными, если различаются упорядоченные последовательности выписанных пар.

Входные данные

В первой строке даны два целых числа n, p (1 ≤ n ≤ 1000, 1 ≤ p ≤ 109). Числа разделены единичным пробелом.

Выходные данные

В единственную строку выведите остаток от деления ответа на задачу на число 1000000007 (109 + 7).

B. Нулевое дерево

Деревья дп жадные алгоритмы поиск в глубину и подобное *1800

Дерево — это граф, состоящий из n вершин и ровно n - 1 ребер; этот граф должен удовлетворять следующему условию: существует ровно один кратчайший (по количеству ребер) путь между любой парой его вершин.

Поддерево дерева T — это дерево, где как вершины, так и ребра являются подмножествами вершин и ребер T.

Вам дано дерево с n вершинами. Вы можете считать, что его вершины пронумерованы целыми числами от 1 до n. Дополнительно в каждой вершине дерева записано целое число. Изначально целое число, записанное в i-ой вершине, равняется vi. За один ход Вы можете применить следующую операцию:

  1. Выбрать поддерево данного дерева, которое включает вершину с номером 1.
  2. Увеличить (или уменьшить) на один все целые числа, записанные в вершинах этого поддерева.

Вычислите минимальное количество ходов, необходимое для того, чтобы сделать все целые числа, записанные в вершинах данного дерева, равными нулю.

Входные данные

Первая строка входных данных содержит n (1 ≤ n ≤ 105). Каждая из следующих n - 1 строк содержит два целых числа ai и bi (1 ≤ ai, bi ≤ nai ≠ bi), обозначающих, что существует ребро между вершинами ai и bi. Гарантируется, что граф, представленный во входных данных, является деревом.

Последняя строка входных данных содержит список из n целых чисел, записанных через пробел, v1, v2, ..., vn (|vi| ≤ 109).

Выходные данные

Выведите минимальное количество операций, необходимое для решения задачи.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

D. Девочка и максимальный XOR

битмаски дп жадные алгоритмы математика реализация *1700

Девочка очень любит задачи про битовые операции. Вот одна из них.

Вам дано два целых числа l и r. Рассмотрим значения величины для всех пар целых чисел a и b (l ≤ a ≤ b ≤ r). Ваша задача — найти максимальное значение, среди всех рассматриваемых.

Выражение обозначает применение операции побитового исключающего или к числам x и y. Данная операция есть во всех современных языках программирования, например, в языке C++ и Java она обозначается «^», в Pascal — «xor».

Входные данные

В единственной строке записаны разделенные пробелом целые числа l и r (1 ≤ l ≤ r ≤ 1018).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В единственной строке выведите целое число — максимальное значение для всех пар чисел a, b (l ≤ a ≤ b ≤ r).

D. Google Code Jam

дп Теория вероятностей *2800

Наверное, многим знакомы правила раундов Google Code Jam. Напомним основные моменты, важные для решения этой задачи. В течение раунда участникам предлагается решить несколько задач, каждая из которых разбита на две подзадачи: легкую с маленькими ограничениями (Small input), и сложную с большими ограничениями (Large input). Отправить решение сложной подзадачи разрешается только после того, как участник решил легкую подзадачу данной задачи. Других ограничений на порядок решения задач нет. В частности, участник может сначала решить легкую подзадачу, потом переключиться на другую задачу, и только потом вернуться к сложной подзадаче. За решение каждой подзадачи участник получает некоторое количество очков (обычно, различное для каждой задачи). При этом учитываются только полные решения, правильно работающие на всех тестах. Результат тестирования легкой подзадачи сообщается участнику сразу же после отправки, а результат тестирования сложной подзадачи становится известен только после конца раунда. В итоговой таблице результатов участники упорядочиваются по невозрастанию суммы полученных очков. При равенстве очков, участники упорядочиваются по возрастанию штрафного времени. Штрафное время в раундах по правилам Google Code Jam — это время отправки последнего правильного решения.

На очередном раунде Вася решил попробовать новую тактику. Как только соревнование началось, он быстро прочитал все задачи и точно оценил время, необходимое для их решения. Более конкретно, для каждой из n задач Вася знает 5 величин:

  • За решение легкой подзадачи i-ой задачи участник получает scoreSmalli очков, а за решение сложной подзадачи — еще scoreLargei очков. То есть максимальное количество очков, которое можно получить за i-ую задачу равно scoreSmalli + scoreLargei.
  • Чтобы написать решение легкой подзадачи i-ой задачи, Васе требуется ровно timeSmalli минут. Чтобы улучшить этот код и превратить его в решение сложной подзадачи, Васе требуется еще timeLargei минут.
  • Вася много тренировался, поэтому все легкие подзадачи он решает с первой попытки. Но со сложными подзадачами не все так просто: с вероятностью probFaili решение сложной подзадачи после конца раунда окажется неправильным. Напоминаем, что такие решения никак не учитываются при подсчете очков и не влияют на штрафное время.

Раунд длится t минут. Время чтения задач и отправки решений нужно считать равным нулю. Разрешается сдавать решение ровно в момент окончания раунда.

Вася хочет выбрать набор подзадач и порядок их решения таким образом, чтобы матожидание суммы полученных очков было максимально. Если существует несколько способов сделать это, то ему нужно минимизировать матожидание штрафного времени. Помогите Васе справиться с проблемой.

Входные данные

В первой строке записано два целых числа n и t (1 ≤ n ≤ 1000, 1 ≤ t ≤ 1560). Далее следует n строк по 5 чисел в каждой: scoreSmalli, scoreLargei, timeSmalli, timeLargei, probFaili (1 ≤ scoreSmalli, scoreLargei ≤ 109, 1 ≤ timeSmalli, timeLargei ≤ 1560, 0 ≤ probFaili ≤ 1).

probFaili — вещественные числа, заданные не более чем с 6 знаками после точки. Все остальные числа во входных данных целые.

Выходные данные

Выведите два вещественных числа через пробел — максимальное матожидание суммы полученных очков и минимальное возможное при этом матожидание штрафного времени. Ответ будет засчитан, если абсолютная или относительная погрешность не превосходит 10 - 9.

Примечание

В первом примере один из оптимальных порядков решения задач:

  1. Легкая подзадача третьей задачи.
  2. Легкая подзадача первой задачи.
  3. Сложная подзадача третьей задачи.
  4. Сложная подзадача первой задачи.

Заметим, что если вместо третьей задачи решить легкую подзадачу второй задачи, то матожидание суммы очков будет таким же, но матожидание штрафного времени будет хуже (38).

C. Лесенка

дп реализация *1700

Вам задан массив, состоящий из n целых чисел a1, a2, ..., an. Также задано m запросов, i-ый запрос описывается двумя целыми числами li, ri. Числа li, ri обозначают подотрезок исходного массива, то есть последовательность чисел ali, ali + 1, ali + 2, ..., ari. Для каждого запроса нужно проверить, является ли соответствующий ему подотрезок лесенкой.

Лесенкой назовем последовательность целых чисел b1, b2, ..., bk такую, что сначала она не убывает, а затем не возрастает. Другими словами, существует такое целое число x (1 ≤ x ≤ k), что выполняется неравенство: b1 ≤ b2 ≤ ... ≤ bx ≥ bx + 1 ≥ bx + 2... ≥ bk. Обратите внимание, что неубывающая и невозрастающая последовательности также считаются лесенками.

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 105) — количество элементов массива и количество запросов соответственно. Во второй строке задана последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109), в которой число ai обозначает i-ый элемент массива.

Далее в m строках заданы описания запросов. В i-ой строке задано описание i-ого запроса, состоящее из двух целых чисел li, ri (1 ≤ li ≤ ri ≤ n) — границы подотрезка исходного массива.

Числа в строках разделяются одиночными пробелами.

Выходные данные

Выведите m строк, в i-ой строке выведите слово «Yes» (без кавычек), если подотрезок, соответствующий i-ому запросу, является лесенкой, или слово «No» (без кавычек) в противном случае.

D. Минимальное количество переменных

битмаски дп *2200

Вам задана последовательность положительных целых чисел a1, a2, ..., an. Все числа в последовательности различны. Зафиксируем набор переменных b1, b2, ..., bm. Изначально в каждой переменной bi (1 ≤ i ≤ m) хранится значение нуль. Рассмотрим следующую последовательность, состоящую из n операций.

Первая операция состоит в том, чтобы присвоить какой-то переменной bx (1 ≤ x ≤ m) значение, равное a1. Каждая из следующих n - 1 операций состоит в том, чтобы присвоить какой-то переменной by значение, равное сумме значений, хранящихся в переменных bi и bj (1 ≤ i, j, y ≤ m). При этом значение, которое присваивается на t-ой операции, должно быть равно at. Для каждой операции числа y, i, j выбираются заново.

Вам требуется найти минимальное количество переменных m такое, что с помощью этих переменных можно произвести описанную последовательность операций.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 23). Во второй строке через пробел записаны n целых чисел a1, a2, ..., an (1 ≤ ak ≤ 109).

Гарантируется, что все числа в последовательности различны.

Выходные данные

В единственной строке выведите целое число — минимальное количество переменных m такое, что с помощью этих переменных можно произвести описанную последовательность операций.

Если ни при каком значении m выполнить последовательность операций нельзя, выведите -1.

Примечание

В первом примере можно при помощи двух переменных b1 и b2 произвести следующую последовательность операций.

  1. b1 := 1;
  2. b2 := b1 + b1;
  3. b1 := b1 + b2;
  4. b1 := b1 + b1;
  5. b1 := b1 + b2.

E. Красивая декомпозиция

дп жадные алгоритмы игры теория чисел *1900

Валера считает, что число красивое, если оно равно 2k или -2k для некоторого целого k (k ≥ 0). Недавно учитель математики попросил Валеру представить число n в виде суммы красивых чисел. Так как Валера очень жадный, он хочет использовать для выполнения этого задания минимально возможное количество красивых чисел.

Помогите Валере, найдите это количество. Другими словами, если мы рассмотрим все разложения числа n на красивые слагаемые, то нужно найти размер разложения, в котором меньше всего слагаемых.

Входные данные

В первой строке задана строка s (1 ≤ |s| ≤ 106), обозначающая двоичное представление числа n без лидирующих нулей (n > 0).

Выходные данные

Выведите единственное целое число — минимальное количество красивых чисел, сумма которых равна n.

Примечание

В первом примере n = 2 является красивым числом.

Во втором примере n = 7, и Валера может разложить его в сумму 23 + ( - 20).

В третьем примере n = 109 раскладывается в сумму четырех слагаемых следующим образом: 27 + ( - 24) + ( - 22) + 20.

C. Очереди к умывальникам

дп Комбинаторика Теория вероятностей *2200

В одном общежитии одного университета живет n студентов. Так как у всех пары начинаются в одно и то же время, расстояние до университета для всех одинаково и, как ни странно, все ходят на все пары, все n студентов просыпаются одновременно.

Также на этаже находится m комнат с умывальниками и в i-ой комнате — ai умывальников. Утром, как только все просыпаются, каждый студент равновероятно и независимо от других выбирает одну из m комнат, в которую он пойдет умываться. После того, как студенты распределились по комнатам, внутри каждой комнаты студенты делятся на максимально равные очереди, по одной к каждому умывальнику. Т. е. они делятся на очереди так, чтобы размер самой длинной очереди был как можно меньше. Ваша задача выяснить математическое ожидание длины максимальной из очередей по всем комнатам, чтобы администрация могла улучшить общежитие и помочь студентам не опаздывать на пары.

Входные данные

В первой строке заданы два целых положительных числа n и m (1 ≤ n, m ≤ 50) — количество студентов и комнат с умывальниками соответственно. Во второй строке задано m чисел: a1, a2, ... , am (1 ≤ ai ≤ 50). i-ое число означает количество умывальников в i-ой комнате.

Выходные данные

Выведите единственное число: математическое ожидание длины максимальной очереди. Ваш ответ должен иметь относительную или абсолютную погрешность меньше чем 10 - 9.

D. Не бойтесь, ДравДэ добрый

Бинарный поиск дп Структуры данных хэши *2400

Колонна из n грузовиков, направляющаяся из города «Z» в город «З» подошла к туннелю, известному, как туннель Ужаса. Страшные слухи ходили среди водителей грузовиков о монстре ДравДэ, который охотится в этом туннеле. Некоторые водители боялись ехать первыми, некоторые последними, но рассмотрим более общий случай. Каждый грузовик характеризуется четырьмя числами:

  • v — ценность этого грузовика, его пассажиров и груза
  • c — количество пассажиров в грузовике, считая водителя
  • l — суммарное количество человек, которое должно ехать впереди этого грузовика, чтобы водитель смог побороть страх («если монстр появится спереди, то он съест сначала их»)
  • r — суммарное количество человек, которое должно ехать позади этого грузовика, чтобы водитель смог побороть страх («если монстр появится сзади, то он съест сначала их»).

Так как дорога узкая, то от появления ДравДэ сбоку никак не спастись. Более того, нельзя даже перестроить колонну. Относительный порядок машин изменить невозможно, но можно любую машину убрать из колонны, оставив её перед туннелем на неопределенный срок. Ваша задача, как начальника колонны, состоит в том, чтобы убрать некоторые грузовики так, чтобы оставшаяся колонна могла ехать и сумма ценностей проехавших грузовиков была максимальна.

Входные данные

В первой строке входного файла задано целое число n (1 ≤ n ≤ 105) — количество грузовиков в колонне. В следующих n строках содержится по четыре числа. Числа в i-той строке: vi, ci, li, ri (1 ≤ vi ≤ 104, 1 ≤ ci ≤ 105, 0 ≤ li, ri ≤ 105) — описывают i-й грузовик. Грузовики нумеруются с 1, считая от головы колонны.

Выходные данные

В первой строке выведите число k — количество грузовиков, которые проедут через туннель. Во второй строке выведите k чисел — номера этих грузовиков в порядке возрастания. Не забудьте, что относительный порядок грузовиков менять нельзя. Если решений несколько, выведите любое.

E. Трансформация последовательности

дп математика Перебор реализация Структуры данных *3000

Вам задана неубывающая последовательность x1, x2, ..., xn (1 ≤ x1 ≤ x2 ≤ ... ≤ xn ≤ q). Также Вам заданы два целых числа a и b (a ≤ ba·(n - 1) < q).

Ваша задача преобразовать последовательность x1, x2, ..., xn в некоторую последовательность y1, y2, ..., yn (1 ≤ yi ≤ qa ≤ yi + 1 - yi ≤ b). Определим стоимость преобразования как сумму: . Требуется выбрать такую последовательность y, что описанная стоимость преобразования минимальна.

Входные данные

В первой строке заданы четыре целых числа n, q, a, b (2 ≤ n ≤ 6000; 1 ≤ q, a, b ≤ 109a·(n - 1) < qa ≤ b).

Во второй строке задана неубывающая последовательность целых чисел x1, x2, ..., xn (1 ≤ x1 ≤ x2 ≤ ... ≤ xn ≤ q).

Выходные данные

В первой строке выведите n вещественных чисел — искомую последовательность y1, y2, ..., yn (1 ≤ yi ≤ qa ≤ yi + 1 - yi ≤ b). Во второй строке выведите минимальную стоимость преобразования, то есть .

Если существует несколько оптимальных ответов, можно вывести любой из них.

Ответ будет считаться правильным, если относительная или абсолютная погрешность не будет превышать 10 - 6.

D. Очередная игра с числами

дп игры *2100

Коль скоро почти никто не читает эту часть, я повторю, что Битландцы довольно необычные. У них свои работы, своя методика работы, свои жизни, свои сосиски и свои игры!

Поскольку Вы очень сильно интересуетесь Битландией, я расскажу Вам об одной такой игре.

BitLGM и BitAryo играют в очередную сумасшедшую интеллектуальную игру. У них есть последовательность неотрицательных целых чисел a1, a2, ..., an. Игроки ходят по очереди. BitLGM ходит первым. Каждый игрок на своем ходе обязан сделать одно из двух следующих действий:

  • Выбрать одно из чисел (обозначим его ai). Выбрать целое число x (1 ≤ x ≤ ai). Уменьшить число ai на x, то есть выполнить присвоение: ai = ai - x.
  • Выбрать целое число x . Уменьшить все ai на x, то есть выполнить присвоение: ai = ai - x, для всех i.

Проигрывает тот, кто не может сделать ход.

Вам задана последовательность a1, a2, ..., an. Определите, кто победит при оптимальной игре, если BitLGM и BitAryo начнут играть в описанную игру на этой последовательности.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 3).

В следующей строке записаны n целых чисел a1, a2, ..., an (0 ≤ ai < 300).

Выходные данные

Выведите имя победителя при оптимальной игре: «BitLGM» или «BitAryo» (без кавычек).

B. Коровки программируют

графы дп поиск в глубину и подобное *1700

Фермер Джон только что дал коровкам поиграться с программой! Программа содержит две целочисленные переменные x и y. Ей подается на вход последовательность положительных целых чисел a1, a2, ..., an, в зависимости от которой она выполняет следующие операции:

  1. Изначально x = 1 и y = 0. Если после какого-то шага x ≤ 0 или x > n, то программа немедленно завершается.
  2. Программа одновременно увеличивает x и y на ax.
  3. Затем программа увеличивает y на ax, уменьшая x на ax.
  4. Программа попеременно выполняет шаги 2 и 3 (сначала 2, затем 3), пока не завершится (она может никогда не завершиться). Таким образом, последовательность шагов может начаться так: шаг 2, шаг 3, шаг 2, шаг 3, шаг 2 и так далее.

Коровки все же не очень хорошо считают, и поэтому они хотят разобраться, как работает программа. Пожалуйста, помоги им!

Дана последовательность a2, a3, ..., an. Предположим, что для каждого i (1 ≤ i ≤ n - 1) мы запускаем программу на последовательности i, a2, a3, ..., an. Для каждого такого запуска выведите итоговое значение y, если программа завершится, или -1, если программа не завершится.

Входные данные

Первая строка содержит единственное целое число, n (2 ≤ n ≤ 2·105). Следующая строка содержит n - 1 целых чисел через пробел, a2, a3, ..., an (1 ≤ ai ≤ 109).

Выходные данные

Выведите n - 1 строк. В i-ой строке выведите требуемое значение, когда программа запускается на последовательности i, a2, a3, ...an.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом примере

  1. Для i = 1,  x изменяется следующим образом: , y становится 1 + 2 = 3.
  2. Для i = 2,  x изменяется следующим образом: , y становится 2 + 4 = 6.
  3. Для i = 3,  x изменяется следующим образом: , y становится 3 + 1 + 4 = 8.

C. Проблемы с монетками

дп *2100

На острове Гернcи существует n различных типов монеток. Для каждого i (1 ≤ i ≤ n), монетка типа i стоит ai центов. Возможно, что ai = aj для некоторых i и j (i ≠ j).

У Бесси есть небольшой набор таких монеток, который в сумме стоит t центов. Она назвала Джесси q пар целых чисел. Для каждого i (1 ≤ i ≤ q), пара bi, ci говорит Джесси, что у Бесси есть строго большее количество монеток типа bi, чем монеток типа ci. Так случилось, что все bi различны и все ci различны.

Помогите Джесси найти количество возможных комбинаций монеток, которые могут быть у Бессии. Две комбинации считаются различными, если есть некоторое i (1 ≤ i ≤ n), такое, что количество монет Бесси типа i различно в этих двух комбинациях. Так как ответ может быть достаточно большим, выведите его остаток от деления на 1000000007 (109 + 7).

Если нет комбинаций монеток, которые в сумме стоили бы t и удовлетворяли условиям Бесси, выведите 0.

Входные данные

Первая строка содержит три целых числа через пробел, n, q и t (1 ≤ n ≤ 300; 0 ≤ q ≤ n; 1 ≤ t ≤ 105). Вторая строка содержит n целых чисел через пробел, a1, a2, ..., an (1 ≤ ai ≤ 105). Следующие q строк содержат по два различных целых числа через пробел, bi и ci (1 ≤ bi, ci ≤ nbi ≠ ci).

Гарантируется, что все bi различны и что все ci различны.

Выходные данные

Единственное целое число, количество подходящих комбинаций монет, которые могут быть у Бесси, по модулю 1000000007 (109 + 7).

Примечание

Для первого примера, следующие три комбинации в целом дают 17 центов и удовлетворяют данным условиям: {0 монет типа 1, 1 монета типа 2, 3 монеты типа 3, 2 монеты типа 4}, {0, 0, 6, 1}, {2, 0, 3, 1}.

Других комбинаций нет. Обратите внимание, что несмотря на то, что 4 встречается как в bi, так и в ci, условия задачи все равно удовлетворяются, потому что все bi различны и все ci различны по отдельности.

D. Коровки и классные последовательности

дп математика теория чисел *2400

Бесси с коровками недавно играли с «классными» последовательностями и пытались построить некоторые из них. К сожалению, они плохо считают, так что им нужна Ваша помощь!

Пара положительных целых чисел (x, y) называется «классной», если x можно представить как сумму y последовательных целых чисел (не обязательно положительных). Последовательность (a1, a2, ..., an) называется «классной», если пары (a1, a2), (a2, a3), ..., (an - 1, an) все являются классными.

У коровок есть последовательность из n положительных целых чисел, a1, a2, ..., an. За один ход можно заменить некоторое ai любым другим положительным целым числом (других ограничений на новое значение ai нет). Определите наименьшее количество ходов, необходимое для того, чтобы итоговая последовательность стала «классной».

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 5000). В следующей строке записаны через пробел n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1015).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите единственное целое число, минимальное количество ai, которое надо поменять, чтобы последовательность стала классной.

Примечание

В первом примере последовательность уже «классная», так что никаких элементов менять не надо.

Во втором примере можно изменить a2 на 5, а a3 — на 10, чтобы получить (20, 5, 10, 4), являющуюся «классной». Итого, меняются 2 элемента.

D. Сумма перестановок

meet-in-the-middle битмаски дп Комбинаторика реализация *1900

Перестановкой p называется упорядоченный набор чисел p1,  p2,  ...,  pn, состоящий из n различных целых положительных чисел, каждое из которых не больше чем n. Обозначим i-ый элемент перестановки p через pi. Число n будем называть размером или длиной перестановки p1,  p2,  ...,  pn.

Петя решил ввести операцию суммы на множестве перестановок длины n. Пусть заданы две перестановки длины n: a1, a2, ..., an и b1, b2, ..., bn. Суммой перестановок a и b Петя назвал такую перестановку c длины n, у которой ci = ((ai - 1 + bi - 1) mod n) + 1 (1 ≤ i ≤ n).

Операция обозначает взятие остатка от деления числа x на число y.

Очевидно, что не для всех перестановок a и b будет существовать перестановка c, являющаяся их суммой. Из-за этого Петя расстроился и попросил Вас для заданного n посчитать количество таких пар перестановок a и b длины n, что существует перестановка c, являющаяся суммой a и b. Пара перестановок x, y (x ≠ y) и пара перестановок y, x считаются различными парами.

Так как ответ может получиться достаточно большим, выведите его остаток от деления на 1000000007 (109 + 7).

Входные данные

В единственной строке находится целое число n (1 ≤ n ≤ 16).

Выходные данные

В единственной строке выведите целое неотрицательное число — количество таких пар перестановок a и b, что существует перестановка c, которая является суммой a и b, по модулю 1000000007 (109 + 7).

E. Позиции в перестановке

дп Комбинаторика математика *2600

Перестановкой p называется упорядоченный набор чисел p1,  p2,  ...,  pn, состоящий из n различных целых положительных чисел, каждое из которых не больше чем n. Обозначим i-ый элемент перестановки p через pi. Число n будем называть размером или длиной перестановки p1,  p2,  ...,  pn.

Назовем позицию i (1 ≤ i ≤ n) в перестановке p1, p2, ..., pn хорошей, если |p[i] - i| = 1. Посчитайте количество перестановок размера n с ровно k хорошими позициями. Ответ выведите по модулю 1000000007 (109 + 7).

Входные данные

В единственной строке записаны два целых числа n и k (1 ≤ n ≤ 1000, 0 ≤ k ≤ n).

Выходные данные

Выведите количество перестановок размера n с ровно k хорошими позициями по модулю 1000000007 (109 + 7).

Примечание

Единственная перестановка размера 1 имеет 0 хороших позиций.

Перестановка (1, 2) имеет 0 хороших позиций, а перестановка (2, 1) — 2 позиции.

Перестановки размера 3:

  1. (1, 2, 3) — 0 позиций
  2. — 2 позиции
  3. — 2 позиции
  4. — 2 позиции
  5. — 2 позиции
  6. (3, 2, 1) — 0 позиций

E. Пингвин Поло и счастливые числа

дп математика реализация *2800

Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

У пингвина Поло есть два целых положительных числа l и r (l < r), причем оба они являются счастливыми числами. Более того, их длины (то есть количество цифр в десятичной записи без лидирующих нулей) равны между собой.

Пусть n — количество различных счастливых чисел, каждое из которых не больше r и не меньше l, а aii-ое по величине из них. Найдите a1·a2 + a2·a3 + ... + an - 1·an. Так как ответ может быть достаточно большим, выведите его остаток от деления на 1000000007 (109 + 7).

Входные данные

В первой строке задано целое положительное число l, а во второй — целое положительное число r (1 ≤ l < r ≤ 10100000). Числа заданы без лидирующих нулей.

Гарантируется, что длины заданных чисел равны между собой и что оба они являются счастливыми числами.

Выходные данные

В единственной строке выведите целое число — ответ на задачу по модулю 1000000007 (109 + 7).

B. Пингвин Поло и матрица

дп Перебор реализация сортировки Тернарный поиск *1400

У маленького пингвина Поло есть матрица n × m, состоящая из целых чисел. Пронумеруем строки матрицы от 1 до n сверху вниз, а столбцы от 1 до m слева направо. Обозначим через aij элемент матрицы, стоящий на пересечении i-ой строки и j-го столбца.

За один шаг пингвин может добавить к любому элементу матрицы или отнять от любого элемента матрицы число d. Найдите минимальное количество шагов, которое требуется для того, чтобы все элементы матрицы были равны между собой. Если описанное невозможно, сообщите об этом.

Входные данные

В первой строке заданы три целых числа n, m и d (1 ≤ n, m ≤ 100, 1 ≤ d ≤ 104) — размеры матрицы и параметр d. В следующих n строках записана матрица: j-тое целое число в i-той строке — элемент матрицы aij (1 ≤ aij ≤ 104).

Выходные данные

В единственной строке выведите целое число — минимальное количество шагов, которое требуется для того, чтобы все элементы матрицы были равны между собой. Если описанное невозможно, выведите «-1» (без кавычек).

D. Компоненты связности

дп поиск в глубину и подобное снм Структуры данных *1900

В уже известной нам некоторой большой корпорации, в которой работает системный администратор Поликарп, компьютерная сеть состоит n компьютеров и m кабелей, которые соединяют некоторые пары компьютеров. Другими словами, компьютерная сеть может быть представлена некоторым неориентированным графом из n вершин и m ребер. Пронумеруем компьютеры целыми числами от 1 до n, пронумеруем кабели целыми числами от 1 до m.

Поликарпу поручили ответственное задание — проверить надежность компьютерной сети его корпорации. Для этого Поликарп решил провести серию из k экспериментов с компьютерной сетью, где i-ый эксперимент заключается в следующем:

  1. Временно отсоединить кабели с номерами от li до ri, включительно (остальные кабели остаются подсоединенными).
  2. Посчитать количество компонент связности в графе, который определяет компьютерную сеть в настоящий момент.
  3. Подсоединить отключенные кабели с номерами от li до ri (то есть восстановить исходную сеть).

Помогите Поликарпу провести все эксперименты и для каждого из них выведите количество компонент связности в графе, который определяет компьютерную сеть во время данного эксперимента. Изолированную вершину нужно считать отдельной компонентой.

Входные данные

В первой строке через пробел заданы два целых числа n, m (2 ≤ n ≤ 500; 1 ≤ m ≤ 104) — количество компьютеров и количество кабелей соответственно.

Далее в m строках задано описание кабелей. В i-ой строке через пробел задана пара целых чисел xi, yi (1 ≤ xi, yi ≤ nxi ≠ yi) — номера компьютеров, которые соединяет i-ый кабель. Обратите внимание, что пара компьютеров может быть соединена несколькими кабелями.

В следующей строке задано единственное целое число k (1 ≤ k ≤ 2·104) — количество экспериментов. Далее в k строках задано описание экспериментов. В i-ой строке через пробелы заданы числа li, ri (1 ≤ li ≤ ri ≤ m) — номера кабелей, которые Поликарп отсоединяет во время i-го эксперимента.

Выходные данные

Выведите k чисел, в которых i-ое число обозначает количество компонент связности графа, который определяет компьютерную сеть во время i-го эксперимента.

B. Шаасс и книжная полка

дп жадные алгоритмы *1700

У Шаасса есть n книг. Он хочет смастерить полку подо все свои книги. Также он хочет, чтобы размеры полки были как можно меньше. Толщина i-ой книги равна ti, а ширина ее страниц равна wi. Толщина каждой книги — либо 1, либо 2. Высота страниц всех книг одинаковая.

Шаасс кладет книги на полку следующим образом. Сперва он выбирает несколько книг и кладет их вертикально. Затем он кладет оставшиеся книги горизонтально над вертикальными книгами. Сумма ширин горизонтальных книг не должна превышать суммарную толщину вертикальных книг. На рисунке ниже приведен пример, как можно уложить книги.

Помогите Шаассу вычислить минимальную достижимую общую толщину вертикальных книг, если он хочет уложить все книги на полку описанным способом.

Входные данные

В первой строке входных данных записано целое число n, (1 ≤ n ≤ 100). В каждой из следующих n строк записано два целых числа ti и wi, обозначающие толщину и ширину i-ой книги соответственно (1 ≤ ti ≤ 2, 1 ≤ wi ≤ 100).

Выходные данные

В единственной строке выведите минимальную достижимую общую толщину вертикальных книг.

E. Шаасс Великий

Деревья дп *2300

Великий Шаасс коронован как новый император Драхта. В империи есть n городов, их соединяет n - 1 двусторонних дорог. У каждой дороги есть определенная длина, каждая дорога соединяет пару городов. Каждую пару городов соединяет единственный простой путь.

Его величество великий Шаасс решил разрушить одну из дорог и построить другую дорогу той же длины между некоторой парой городов. Он должен построить дорогу так, чтобы было все еще возможно путешествовать из каждого города в любой другой по дорогам империи.

Вы как его советник должны помочь ему найти способ выполнить описанное действие. Вы должны найти такой способ, который минимизирует общую сумму попарных расстояний между городами. Вычислите минимальную сумму.

Входные данные

В первой строке содержится целое число n, обозначающее количество городов в империи, (2 ≤ n ≤ 5000). В следующих n - 1 строках содержится по три целых числа ai, bi и wi, обозначающие два города ai и bi, соединенные дорогой длины wi, (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ wi ≤ 106).

Выходные данные

В единственной строке выведите минимальную попарную сумму расстояний между городами.

Пожалуйста, не используйте спецификатор %lld для чтения и записи 64-битных чисел на С++. Рекоммендуется использовать потоки cin, cout или спецификатор %I64d.

B. Егор и граф

графы дп кратчайшие пути *1700

У Егора есть взвешенный ориентированный граф, состоящий из n вершин. В этом графе между любой парой различных вершин есть ребро в обоих направлениях. Егор любит играть с графом, и сейчас он придумал новую игру:

  • Игра состоит из n шагов.
  • На i-том шаге Егор удаляет из графа вершину номер xi. Удаляя вершину, Егор удаляет все ребра, которые входили в данную вершину и которые выходили из нее.
  • Перед выполнением каждого шага, Егор хочет знать сумму длин кратчайших путей между всеми парами оставшихся вершин. Кратчайший путь может проходить через любую оставшуюся вершину. Другими словами, если обозначить как d(i, v, u) кратчайший путь между вершинами v и u в графе, который получился до удаления вершины xi, то Егор хочет знать значение следующей суммы: .

Помогите Егору, выведите значение искомой суммы перед каждым шагом.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 500) — количество вершин в графе.

В следующих n строках содержится по n целых чисел — матрица смежности графа: j-тое число в i-той строке aij (1 ≤ aij ≤ 105, aii = 0) обозначает вес ребра, ведущего из вершины i в вершину j.

В следующей строке содержится n различных целых чисел: x1, x2, ..., xn (1 ≤ xi ≤ n) — вершины, которые удаляет Егор.

Выходные данные

Выведите n целых чисел — i-тое число равно искомой сумме перед i-тым шагом.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

C. Егор и друзья

графы дп Комбинаторика кратчайшие пути *2100

Егор с друзьями гуляли по лесу, всего, включая Егора, гуляло n человек. Очень скоро перед ними оказалась река. Ребята сразу же захотели перебраться через реку, тем более, что возле берега, к которому подошла компания стояла лодка. Известно, что эта лодка вмещает людей, суммарным весом не более k килограмм.

Егор тут же выписал на листок бумаги список весов всех людей из его компании, включая свой вес. Оказалось, что каждый человек весит либо 50, либо 100 килограмм. Сейчас Егору нужно знать, за какое минимальное количество переправ на лодке через реку вся компания сможет оказаться на другом берегу. При переправе в лодке обязательно должен быть хотя бы один человек. При переправке в лодке может сидеть любое (ненулевое) количество человек, но их суммарный вес не должен превышать k.

Так же Егора заинтересовал вопрос: сколько существует способов переправить всех людей на другую сторону за минимальное количество переправ на лодке. Два способа считаются различными, если при какой-либо переправе множество людей находящихся в лодке отличается.

Помогите Егору с этой задачей.

Входные данные

В первой строке записано два целых числа n, k (1 ≤ n ≤ 50, 1 ≤ k ≤ 5000) — количество людей, включая Егора, и вместительность лодки. В следующей строке записаны n целых чисел — веса людей. Вес человека — это либо 50 килограмм, либо 100 килограмм.

Можете считать, что Егор и друзья пронумерованы некоторым образом.

Выходные данные

В первую строку выведите целое число — минимальное количество переправ. Если невозможно переправить всех людей на другой берег, то выведите целое число -1.

Во вторую строку выведите остаток от деления количества способов переправить людей за минимальное количество переправ на число 1000000007 (109 + 7). Если невозможно переправить всех людей на другой берег, то выведите число 0.

Примечание

В первом тесте Егор гуляет один и соответственно требуется только одна переправа через реку.

Во втором тесте нужно действовать по следующему плану:

  1. переправить двух людей весом по 50 килограмм;
  2. переправить одного человека весом 50 килограмм обратно;
  3. переправить человека весом 100 килограмм;
  4. переправить человека весом 50 килограмм обратно;
  5. переправить двух людей весом по 50 килограмм.

Суммарно выходит 5 переправ. В зависимости от того, какого человека выбрать на шаге 2, получаются два различных способа.

D. Егор и пещеры

дп Комбинаторика *2400

У Егора есть планшет. Экран планшета представляет собой прямоугольник n × m клеток, каждая из которых может быть либо черной, либо белой. Будем считать, что строки планшета пронумерованы целыми числами от 1 до n сверху вниз. Аналогично, столбцы планшета пронумерованы целыми числами от 1 до m слева направо.

Егор считает, что на экране планшета нарисована пещера, если выполнены следующие условия:

  • Найдется отрезок [l, r] (1 ≤ l ≤ r ≤ n), такой, что в каждой из строк l, l + 1, ..., r, будет ровно две черные клетки, а во всех остальных строках все клетки будут белыми.
  • Найдется строка с номером t (l ≤ t ≤ r), такая, что для всех пар строк с номерами i и j (l ≤ i ≤ j ≤ t) множество столбцов, содержащихся между черными клетками в строке номер i (вместе со столбцами, в которых находятся черные клетки), будет подмножеством множества столбцов, содержащихся между черными клетками в строке номер j (вместе со столбцами, в которых находятся черные клетки). Аналогично, для всех пар строк с номерами i и j (t ≤ i ≤ j ≤ r) множество столбцов, содержащихся между черными клетками в строке номер j (вместе со столбцами, в которых находятся черные клетки), будет подмножеством множества столбцов, содержащихся между черными клетками в строке номер i (вместе со столбцами, в которых находятся черные клетки).

Егора заинтересовал вопрос: сколько существует способов изобразить пещеру на его планшете. Два изображения считаются различными, если существует клетка, цвет которой отличается в этих изображениях.

Помогите Егору.

Входные данные

В первой строке заданы два целых числа n, m — размеры экрана планшета (1 ≤ n, m ≤ 2000).

Выходные данные

В единственную строку выведите остаток от деления ответа на задачу на число 1000000007 (109 + 7).

B. Ярослав и две строки

дп Комбинаторика *2000

Ярослав считает, что две строки s и w, состоящие из цифр и имеющие длину n — несравнимы, если найдется два числа i и j (1 ≤ i, j ≤ n), таких, что si > wi, а sj < wj. Здесь запись si обозначает i-тую цифру строки s, аналогично, wjj-тую цифру строки w.

Шаблоном строки назовем строку, которая состоит из цифр и знаков вопроса («?»).

У Ярослава есть два шаблона строк, каждый из которых длины n. Ярослав хочет посчитать, сколькими способами он может заменить все знаки вопроса в обоих шаблонах на некоторые цифры, так, чтобы полученные строки были несравнимы. Обратите внимание, что полученные строки могут содержать лидирующие нули и что разные знаки вопроса могут быть заменены на разные цифры, а могут и на одинаковые.

Помогите Ярославу, посчитайте остаток от деления описанного количества способов на 1000000007 (109 + 7).

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105) — длина обоих шаблонов. Во второй строке задан первый шаблон — строка, состоящая из цифр и знаков «?». Длина этой строки равна n. В третьей строке задан второй шаблон в аналогичном формате.

Выходные данные

В единственную строку выведите остаток от деления ответа на задачу на число 1000000007 (109 + 7).

Примечание

В первом тесте нет знаков вопроса и обе строки несравнимы, поэтому ответ — 1.

Во втором тесте нет знаков вопроса, но заданные строки сравнимы, поэтому ответ — 0.

C. Тир

дп Теория вероятностей *1800

Однажды в теплый солнечный день Царь Цопа решил сходить в тир, расположенный в Центральном парке, чтобы попробовать выиграть главный приз — большую плюшевую розовую панду. Цопа не очень силен в стрельбе, и поэтому он пригласил Вас помочь ему.

Тир представляет собой бесконечную вертикальную плоскость, на которой введена декартова система координат, на которой появляются мишени. i-ая мишень характеризуется своими координатами xi и yi, а также ti — временем, когда эта мишень появится на плоскости, и числом pi — вероятностью, с которой Цопа попадает в данную мишень, если он будет целиться в нее.

Мишень появляется и исчезает мгновенно, и Цопа может попасть в нее, если в момент ti прицел его направлен точно в точку (xi, yi). Скорость перемещения прицела по плоскости равна 1. Все данные заранее известны ему (он же Царь), и поэтому, в частности, он может выбрать, в какую мишень ему целиться с самого начала, в момент времени 0. Цопа действует так, что математическое ожидание количества попаданий максимально.

Входные данные

В первой строке задано число n — число мишеней в тире (1 ≤ n ≤ 1000). Далее в следующих строках описаны n мишеней: в i-ой строке идёт описание i-ой мишени. Каждое описание представляет собой четвёрку чисел xi, yi, ti, pi (где xi, yi, ti — целые,  - 1000 ≤ xi, yi ≤ 1000, 0 ≤ ti ≤ 109, а вещественное число pi задано не более чем с 6 знаками после десятичной точки, и выполняется 0 ≤ pi ≤ 1). Никакие две различные мишени не могут находиться в одной и той же точке.

Выходные данные

Выведите единственное число — максимальное математическое ожидание количества попаданий в мишени. Ответ будет принят, если он отличается от правильного не более чем на 10 - 6.

D. Покраска квадрата

бпф дп *2300

У медведя Василия есть большая квадратная таблица белого цвета, составленная из n строк и n столбцов. Вокруг этой таблицы очерчена граница черной краской.

Пример изначальной таблицы при n = 5.

Медведь Василий хочет ровно за k ходов покрасить свою квадратную таблицу. Каждый ход — это последовательность действий:

  1. Медведь выбирает некоторый квадрат внутри своей таблицы, причем вокруг квадрата должна должна быть очерчена граница черной краской, а также внутри квадрата не должно быть ячейки, закрашенной в черный цвет. Количество ячеек в квадрате должно быть не меньше 2.
  2. Медведь выбирает внутри выбранного квадрата некоторую строку и некоторый столбец. Далее он закрашивает каждую ячейку этой строки и этого столбца внутри выбранного квадрата. После описанной операции прямоугольники, образованные границей квадрата и только что закрашенными ячейками, должны являться квадратами ненулевой площади.
Пример корректной покраски при n = 7 и k = 2.

Медведь уже знает числа n и k. Помогите ему — найдите количество способов покрасить его квадрат ровно за k действий. Два способа покраски называются различными, если полученные таблицы будут различаться цветом хотя бы в одной ячейке. Так как ответ может быть большим, выведите его остаток от деления на 7340033.

Входные данные

В первой строке записано целое число q (1 ≤ q ≤ 105) — количество тестовых данных.

В каждой из следующих q строк содержатся два целых числа n и k (1 ≤ n ≤ 109, 0 ≤ k ≤ 1000) — размер изначальной таблицы и количество ходов для соответствующего теста.

Выходные данные

Для каждого теста из входных данных выведите ответ на задачу по модулю 7340033. Ответы для тестов выводите в том порядке, в котором тесты заданы во входных данных.

Примечание

Все возможные покраски для теста n = 7 и k = 2:

E. Ярослав и расстановки

дп *2800

Ярослав называет массив из r целых чисел a1, a2, ..., ar хорошим, если выполняются условия: |a1 - a2| = 1, |a2 - a3| = 1, ..., |ar - 1 - ar| = 1, |ar - a1| = 1, при этом .

Массив целых чисел b1, b2, ..., br называется замечательным, если выполняются следующие условия:

  1. Элементы в нем не убывают (bi ≤ bi + 1).
  2. Если выполняются неравенства, 1 ≤ r ≤ n и 1 ≤ bi ≤ m.
  3. Если переставляя его элементы можно получить не менее одного и не более k различных хороших массивов.

У Ярослава есть три целых числа n, m, k. Ему нужно посчитать количество различных замечательных массивов. Помогите Ярославу! Так как ответ может быть достаточно большим, нужно вывести его остаток от деления на 1000000007 (109 + 7).

Два массива считаются различными, если найдется позиция, на которой в них стоят различные числа.

Входные данные

В единственной строке даны три целых числа n, m, k (1 ≤ n, m, k ≤ 100).

Выходные данные

В единственную строку выведите остаток от деления ответа на задачу на число 1000000007 (109 + 7).

E. Случайное распределение рангов

дп математика Теория вероятностей *3000

Представим настоящий контест или экзамен, состоящий из n участников. Каждый участник получит определенное количество очков. Мы можем более-менее предсказать состояние турнирной таблицы, если рассчитаем статистику прошлых успехов участников.

Предположим, что очки i-ого участника будут равномерно распределены по интервалу [li, ri] (очки участника могут быть вещественным числом). Можете ли Вы предсказать состояние турнирной таблицы по этим данным? Другими словами, для каждого участника Вы должны найти вероятность того, что он займет в итоговой таблице определенное место. Участники в таблице сортируются по возрастанию очков, то есть участник с наибольшим количеством очков занимает последнее место.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 80), показывающее, сколько у нас участников. Каждая из следующих n строк содержит наши предсказания, i-ая строка содержит пару целых чисел li, ri (0 ≤ li < ri ≤ 109) — интервал очков участника i.

Считайте участников пронумерованными некоторым образом от 1 до n.

Выходные данные

Выведите квадратную матрицу a порядка n. Элемент aij матрицы — это вероятность того, что участник i получит место j.

Ваш ответ будет засчитан, если абсолютная или относительная ошибка не превышает 10 - 6.

Примечание

Вероятностное распределение очков непрерывное. Это значит, что ничья невозможна.

E. Телеигра

дп *2400

Недавно на БерТВ начали показывать новую телеигру. В этой игре двум игрокам дается число A из 2n цифр. Игроки в начале и после очередного хода сами договариваются, кто из них будет ходить следующим. Единственное ограничение — каждый игрок должен сделать ровно n ходов. На своем ходе i-ый игрок берет самую левую цифру числа A и дописывает ее в конец своего числа Si, при этом из числа A эта цифра стирается. Изначально числа обоих игроков (S1 и S2) «пусты». Лидирующие нули в числах A, S1, S2 допускаются. В конце игры первый игрок получает S1 бурлей, а второй — S2 бурлей.

Однажды на телеигру попали Гомер и Мардж. Им удалось заранее узнать число A, и теперь они хотят договориться делать ходы оптимально. Помогите им — составьте такую последовательность ходов Гомера и Мардж, чтобы каждый из них сделал ровно n ходов, и при этом их суммарный выигрыш был как можно больше.

Входные данные

В первой строке записано число n (1 ≤ n ≤ 18). Во второй строке записано целое число ровно из 2n цифр — число A. Допускаются лидирующие нули.

Выходные данные

Выведите строку из 2n символов «H» и «M» — последовательность ходов Гомера и Мардж, приводящую к максимальному суммарному выигрышу. Каждый игрок должен сделать ровно n ходов. Если решений несколько, выведите любое.

B. Транспортировка кошек

дп Структуры данных *2400

Zxr960115 содержит большое хозяйство. Он кормит m милых кошечек и держит у себя p кормильщиков. Через ферму проходит прямая дорога, а вдоль дороги расположено n холмов, пронумерованных от 1 до n, слева направо. Расстояние от холма i до i - 1 равняется di метров. Кормильщики живут на холме 1.

Однажды кошечкам захотелось порезвиться и они разбежались. Кошка i пошла к холму hi, дошла до него в момент времени ti, а затем стала ждать кормильщика на холме hi. Кормильщики должны собрать всех разбежавшихся кошек. Каждый кормильщик идет прямо от холма номер 1 до холма номер n, не останавливаясь у какого-либо холма, и собирает всех кошек, ожидающих на каждом холме. Кормильщики двигаются со скоростью 1 в единицу времени и достаточно сильны, чтобы собрать сколько угодно кошек.

Например, пусть имеется два холма (d2 = 1) и одна кошечка, которая дошла до холма 2 (h1 = 2) в момент времени 3. Тогда, если кормильщик отправится за кошками от холма 1 в момент времени 2 или 3, то он сможет забрать эту кошку. Но если он отправится от холма 1 в момент времени 1, то он не сможет этого сделать. Если кормильщик отправится за кошкой в момент времени 2, то кошка будет ждать его 0 единиц времени, если же он отправится в момент времени 3, то кошка будет ждать его 1 единицу времени.

Ваша задача — составить расписание отправки от холма 1 для кормильщиков так, чтобы общее время ожидания кошек до того как их заберут было минимальным.

Входные данные

В первой строке входных данных содержится три целых числа n, m, p (2 ≤ n ≤ 105, 1 ≤ m ≤ 105, 1 ≤ p ≤ 100).

Во второй строке содержится n - 1 положительных целых чисел d2, d3, ..., dn (1 ≤ di < 104).

В каждой из следующих m строк содержится по два целых числа hi и ti (1 ≤ hi ≤ n, 0 ≤ ti ≤ 109).

Выходные данные

Выведите целое число, минимальную сумму времен ожидания всех кошек.

Пожалуйста, не используйте спецификатор %lld для чтения и записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

B. Илья и запросы

дп реализация *1100

Лев Илья хочет помочь всем своим друзьям со сдачей экзаменов. Чтобы сдать экзамен по информатике нужно решить следующую задачу.

Даны строка s = s1s2... sn (n — длина строки), состоящая только из символов «.» и «#», и m запросов. Каждый запрос описывается парой целых чисел li, ri (1 ≤ li < ri ≤ n). Ответ на запрос li, ri — это количество таких целых чисел i (li ≤ i < ri), что si = si + 1.

Лев Илья хочет помочь друзьям, но кто же поможет ему. Помогите Льву Илье, решите задачу.

Входные данные

В первой строке записана строка s длины n (2 ≤ n ≤ 105). Гарантируется, что заданная строка состоит только из символов «.» и «#».

В следующей строке записано целое число m (1 ≤ m ≤ 105) — количество запросов. В каждой из следующих m строк записано описание соответствующего запроса. В i-той строке записаны целые числа li, ri (1 ≤ li < ri ≤ n).

Выходные данные

Выведите m целых чисел — ответы на запросы в том порядке, в котором запросы заданы во входных данных.

D. Илья и дороги

дп *2100

В городе Ильи все хорошо, кроме дорог, потому что единственная дорога в городе ZooVille представляет собой n ям, расположенных в ряд. Будем считать, что ямы пронумерованы от 1 до n слева направо.

Илья очень хочет помочь своему городу, для этого он хочет отремонтировать хотя бы k ям (хотя можно и больше) на единственной дороге ZooVille.

В городе есть m строительных компаний, i-ая компания может за ci денежных единиц отремонтировать отрезок дороги, на котором находятся ямы с номерами не меньше li и не больше ri. Компании в городе ZooVille очень меркантильные, поэтому, если какая-то яма на ремонтируемом отрезке дороги уже отремонтирована, то стоимость ремонта отрезка дороги не уменьшается.

Определите, какое минимальное количество денег потребуется Илье, чтобы отремонтировать хотя бы k ям.

Входные данные

В первой строке записаны три целых числа n, m, k (1 ≤ n ≤ 300, 1 ≤ m ≤ 105, 1 ≤ k ≤ n). В следующих m строках записано описание компаний. В i-той строке записаны три целых числа li, ri, ci (1 ≤ li ≤ ri ≤ n, 1 ≤ ci ≤ 109).

Выходные данные

Выведите единственное целое число — минимальное количество денег, которое потребуется Илье, чтобы отремонтировать хотя бы k ям.

Если отремонтировать хотя бы k ям невозможно, выведите -1.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

C. Сережа и подпоследовательности

дп Структуры данных *2000

У Сережи есть последовательность, состоящая из n целых положительных чисел, a1, a2, ..., an.

Сначала Сережа записал на клетчатом листке бумаги все различные непустые неубывающие подпоследовательности последовательности a. Потом для каждой из последовательностей, записанных на клетчатом листке, Сережа записал на линованном листке все последовательности, которые ее не превышают.

Последовательность целых положительных чисел x = x1, x2, ..., xr не превышает последовательность целых положительных чисел y = y1, y2, ..., yr, если выполняются неравенства: x1 ≤ y1, x2 ≤ y2, ..., xr ≤ yr.

Сейчас Сережа интересуется, сколько последовательностей записано на листке в линию. Помогите Сереже, найдите остаток от деления описанного количества на 1000000007 (109 + 7).

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 105). Во второй строке содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 106).

Выходные данные

В единственную строку выведите остаток от деления ответа на задачу на число 1000000007 (109 + 7).

E. Сережа и квадраты

дп *2900

Сережа нарисовал n точек на плоскости, точка номер i (1 ≤ i ≤ n) имеет координаты (i, 0). После этого Сережа подписал каждую точку маленькой или большой буквой латинского алфавита. Сережа очень не любит букву «x», поэтому он не использует ее, чтобы подписывать точки. Сережа считает, что точки подписаны красиво, если выполнены следующие условия:

  • все точки можно разбить на пары так, что каждая точка будет принадлежать ровно одной паре;
  • в каждой паре к точке с меньшей абсциссой будет приписана маленькая латинская буква, а к точке с большей абсциссой будет приписана соответствующая большая латинская буква;
  • если на каждой полученной паре будет построен квадрат такой, что точки пары будут противоположными точками квадрата, а отрезок между ними будет диагональю квадрата, то среди полученных квадратов не будет пары пересекающихся или касающихся.

Маленький Петя стер некоторые маленькие и все большие буквы, приписанные к точкам. Теперь Сереже интересно, сколько существует способов вернуть стертые буквы, чтобы точки были подписаны красиво.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 105) — количество точек. Во второй строке задана последовательность, состоящая из n маленьких латинских букв и знаков вопроса — последовательность букв, приписанных к точкам, в порядке от точек с меньшими абсциссами к точкам с большими. Знаки вопроса обозначают точки, у которых Петя стер подписанные буквы.

Гарантируется, что во входной строке отсутствует буква «x».

Выходные данные

В единственную строку выведите остаток от деления ответа на задачу на число 4294967296. Если не существует ни одного способа вернуть стертые буквы, то выведите число 0.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

D1. Урок физкультуры

дп Перебор *2300

Умный Бобер хочет быть не только умным, но и здоровым бобром! И поэтому он начал посещать уроки физкультуры в школе X. В этой школе занятия физкультурой ведет очень креативный преподаватель. Одним из его любимых разминочных упражнений является перебрасывание мячей. Ученики становятся в ряд. Каждый изначально получает один мяч. Мячи пронумерованы от 1 до n (требование комиссии по инвентаризации).

Рисунок 1. Начальное положения для n = 5.

После получения мячей ученики выполняют разминочное упражнение. Упражнение проходит в несколько бросков. Для каждого из бросков учитель выбирает двух произвольных разных учеников, которые будут в нем участвовать. Выбранные ученики бросают друг другу свои мячи. Таким образом, после каждого броска ученики остаются на своих местах, а два мяча меняются местами.

Рисунок 2. Пример броска.

В данном случае произошел бросок между учениками, которые держали 2-й и 4-й мячи. Так как упражнений в разминке немало, то на каждое из них выделяется немного времени. Поэтому для каждого ученика известно, в каком максимальном числе бросков он может принять участие. В рамках рассматриваемых уроков физкультуры, это число 1 или 2.

Заметим, что после всех этапов рассматриваемого упражнения любой из мячей может оказаться у любого из учеников. Умный Бобер решил формализовать это и ввел понятие «порядок мячей». Порядок мячей — это последовательность из n чисел, которая соответствует порядку мячей в строю. Первое число будет соответствовать номеру мяча у первого слева ученика в строю, второе — номеру мяча у второго ученика и так далее. Например, на рисунке 2 порядок мячей был (1, 2, 3, 4, 5), а после броска стал (1, 4, 3, 2, 5). Умный бобер знает количество учеников и для каждого из учеников максимальное число бросков, в которых данный ученик может принять участие. И теперь ему стало любопытно, каково количество различных вариантов порядка мячей после окончания упражнения.

Входные данные

Первая строка содержит одно целое число n — количество учеников в строю и мячей. Следующая строка содержит ровно n целых чисел, разделенных пробелами. Каждое число соответствует ученику в строю (i-ое число соответствует i-ому слева в строю ученику) и показывает, в каком числе бросков он может участвовать.

Ограничения на входные данные для получения 30 баллов (подзадача D1):

  • 1 ≤ n ≤ 10.

Ограничения на входные данные для получения 70 баллов (подзадачи D1+D2):

  • 1 ≤ n ≤ 500.

Ограничения на входные данные для получения 100 баллов (подзадачи D1+D2+D3):

  • 1 ≤ n ≤ 1000000.
Выходные данные

Вывод должен содержать ровно одно целое число — число вариантов порядка мячей после окончания упражнения. Так как оно может быть достаточно велико, выводите его по модулю 1000000007 (109 + 7).

D. Игра со степенями

дп игры *2300

Вася и Петя выписали на доску все натуральные числа от 1 до n и играют в игру (n может быть достаточно велико, но Васю и Петю это не смущает).

Игроки по очереди выбирают числа, начинает Вася. Если на данном ходу было выбрано число x, то в дальнейшем в игре нельзя выбирать само число x и все его остальные натуральные степени (x2, x3, ...). К примеру, если на первом ходу выбрано число 9, то в дальнейшем числа 9 и 81 выбирать нельзя, в то время как числа 3 и 27 выбрать разрешается. Проигрывает тот, кто не может сделать ход.

Кто выигрывает при оптимальной игре обоих соперников?

Входные данные

Единственная строка входных данных содержит натуральное число n (1 ≤ n ≤ 109).

Выходные данные

Выведите имя победителя — «Vasya» или «Petya» (без кавычек).

Примечание

В первом примере Вася выберет 1 и сразу выиграет.

Во втором примере вне зависимости от первого хода Васи Петя сможет выбрать оставшееся число и победить.

C. Калила и Димна на лесозаготовках

геометрия дп *2100

Калила и Димна — два шакала. Они живут в огромных джунглях. Однажды шакалы решили устроиться на завод лесозаготовки и подработать.

Управляющий завода хочет, чтобы они отправились в джунгли и срубили n деревьев высотой a1, a2, ..., an. Для этого Калила и Димна купили цепную пилу в магазине. Каждый раз, когда они используют пилу на дереве номер i, они уменьшают высоту этого дерева на единицу. Каждый раз Калила и Димна должны заправить пилу для использования. Цена заправки зависит от того, какие деревья полностью спилены (дерево считается полностью спиленным, если его высота равна 0). Если максимальный идентификатор полностью срубленного дерева равняется i (первоначально это дерево имело высоту ai), то цена заправки пилы равняется bi. Если ни одно дерево не срублено полностью, то заправлять пилу запрещается. Изначально пила заправлена. Известно, что для каждого i < j, ai < aj и bi > bj, а также bn = 0 и a1 = 1.

Калила и Димна хотят полностью срубить все деревья с минимальными затратами. Они ждут Вашей помощи! Поможете?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). Во второй строке записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109). В третьей строке записано n целых чисел b1, b2, ..., bn (0 ≤ bi ≤ 109).

Гарантируется, что a1 = 1, bn = 0, a1 < a2 < ... < an и b1 > b2 > ... > bn.

Выходные данные

В единственной строке должна быть записана минимальная стоимость вырубания всех деревьев.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

B. Ciel и дуэль

дп жадные алгоритмы Потоки *1900

Лиса Ciel играет в карты со своим другом Jiro.

У Jiro есть n карт, у каждой карты есть два атрибута: позиция position (атака или защита) и сила strength. У лисы Ciel есть m карт, аналогично, у каждой карты есть два атрибута. Известно, что позиция всех карт Ciel — это атака.

Пришло время Ciel атаковать! Она может выполнить следующую операцию много раз:

  1. Выбрать одну из своих карт X, которая не была выбрана ранее.
  2. Если у Jiro нет живых карт, он получит урон, равный (силе X). В противном случае, Ciel надо выбрать у Jiro одну живую карту Y, тогда:
    • Если позиция Y — атака, то должно выполняться условие (сила X)  ≥  (сила Y). После этой атаки карта Y умрет и Jiro получит урон, равный (сила X) - (сила Y).
    • Если позиция Y — защита, то должно выполняться условие (сила X)  >  (сила Y). После этой атаки карта Y умрет, но Jiro не получит повреждений.

Ciel может в любой момент закончить атаковать Jiro (то есть она не обязана использовать все свои карты). Помогите Ciel посчитать максимальную сумму урона, которую можно нанести Jiro.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 100) — количество карт у Jiro и Ciel.

Каждая из следующих n строк содержит строку position и целое число strength (0 ≤ strength ≤ 8000) — позиция и сила текущей карты Jiro. Позиция position — это строка «ATK» для позиции атака, и строка «DEF» для позиции защита.

Каждая из следующих m строк содержит целое число strength (0 ≤ strength ≤ 8000) — сила текущей карты Ciel.

Выходные данные

Выведите целое число: максимальный ущерб, который можно нанести Jiro.

Примечание

В первом тесте все карты Ciel имеют одинаковую силу. Оптимальнее всего сначала напасть на карту «ATK 2000», уничтожить эту карту, тогда Jiro получит 2500 - 2000 = 500 единиц урона. Затем используем вторую карту для уничтожения карты «DEF 1700». Jiro не получает урона. Теперь у Jiro нет карт и можно использовать третью карту — нападаем на Jiro, он получает 2500 урона. Таким образом, ответ равняется 500 + 2500 = 3000.

Во втором тесте нужно использовать карту «1001» для атаки на карту «ATK 100», затем с помощью карты «101» напасть на карту «ATK 10». После этого у Ciel еще есть карты, но она может закончить атаковать. Таким образом, общий урон равен (1001 - 100) + (101 - 10) = 992.

В третьем случае заметьте, что Ciel может уничтожить карту «ATK 0» картой с силой, равной 0. Но не может уничтожить карту «DEF 0» картой с силой, равной 0.

D. Ciel и доска

дп жадные алгоритмы математика *2900

У лисы Ciel есть доска, на доске нарисована таблица из n строк и n столбцов, в каждой ячейке записано по целому числу.

Известно, что число n нечетное. Введем обозначение . Лиса Ciel может осуществить следующую операцию несколько раз: выбрать подтаблицу размера x строк на x столбцов, затем умножить все числа в ней на -1.

Найдите максимальную сумму чисел на доске, которую может получить Ciel.

Входные данные

В первой строке записано целое число n, (1 ≤ n ≤ 33, и n — нечетное число) — размер таблицы.

В каждой из следующих n строк записано n целых чисел — числа, записанные на доске. Каждое число не превышает по модулю 1000.

Выходные данные

Выведите единственное целое число: максимальную достижимую сумму чисел на доске.

Примечание

В первом тесте можно применить операцию дважды: сперва на подтаблице размера 2 × 2 в левом верхнем углу, затем — на подтаблице размера 2 × 2 в правом нижнем углу. Тогда все числа станут положительными.

E. Ciel и гондолы

дп разделяй и властвуй Структуры данных *2600

Лиса Ciel зашла в парк аттракционов. И вот, она в очереди на колесо обозрения. В очереди стоит n людей (хотя нет, скорее лис): мы будем считать, что первая лиса стоит в начале очереди, а n-ая лиса стоит в хвосте очереди.

Всего имеется k гондол, мы распределяем лис по гондолам следующим образом:

  • Когда подплывает первая гондола, q1 лис переходят из начала очереди в подплывшую гондолу.
  • Затем, когда подплывает вторая гондола, q2 лис из начала оставшейся очереди переходит в эту гондолу.

        ...

  • Оставшиеся qk лис идут с последнюю (k-ую) гондолу.

Обратите внимание, что числа q1, q2, ..., qk должны быть положительные. Из условия следует, что и qi > 0.

Вы знаете как лисам не хочется задерживаться в гондолах с незнакомцами. Итак, Ваша задача — найти оптимальный способ размещения (то есть определить оптимальную последовательность q), чтобы угодить всем. Для каждой пары лис i и j задано значение uij, обозначающее степень незнакомости. Можете считать, что uij = uji для всех i, j (1 ≤ i, j ≤ n) и что uii = 0 для всех i (1 ≤ i ≤ n). Тогда значение незнакомости в гондоле определяется как сумма значений незнакомости между всеми парами лис, которые находятся в этой гондоле. Общее значение незнакомости определяется как сумма значений незнакомости по всем гондолам.

Помогите лисе Ciel найти минимальное возможное значение общей незнакомости при некотором оптимальном распределении лис по гондолам.

Входные данные

В первой строке даны два целых числа n и k (1 ≤ n ≤ 4000 and 1 ≤ k ≤ min(n, 800)) — количество лис в очереди и количество гондол. В следующих n строках записано по n целых чисел — матрица u, (0 ≤ uij ≤ 9, uij = uji и uii = 0).

Пожалуйста, используйте методы быстрого чтения (например, для Java используйте BufferedReader вместо Scanner).

Выходные данные

Выведите целое число — минимальное возможное значение общей незнакомости.

Примечание

В первом примере можно распределить лис вот так: {1, 2} идут в одну гондолу, {3, 4, 5} идут в другую гондолу.

Во втором примере оптимальное распределение таково: {1, 2, 3} | {4, 5, 6} | {7, 8}.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

A. Игра с переворачиванием

дп Перебор реализация *1200

Яхубу стало скучно и он придумал игру, в которую надо играть на бумаге.

Яхуб выписывает n целых чисел a1, a2, ..., an. Каждое из этих целых чисел может быть равно 0 или 1. Ему разрешено выполнить ровно одно действие: выбрать два индекса i и j (1 ≤ i ≤ j ≤ n) и перевернуть все значения ak, позиции которых находятся на отрезке [i, j] (то есть i ≤ k ≤ j). Перевернуть значение x, значит выполнить операцию x = 1 - x.

Цель игры — получить максимальное количество единиц после ровно одного хода. Напишите программу, которая решает маленькую игру Яхуба.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100). Во второй строке записано n целых чисел: a1, a2, ..., an. Гарантируется, что каждое из этих n чисел равняется либо 0, либо 1.

Выходные данные

Выведите целое число — максимальное количество единиц, которое можно получить после ровно одного хода.

Примечание

В первом случае надо перевернуть отрезок от 2 до 5 (i = 2, j = 5). Такой переворот превращает последовательность в: [1 1 1 0 1]. Итого, в ней теперь четыре единицы. Мы никак не сможем превратить последовательность в [1 1 1 1 1].

Во втором случае, если мы перевернем только второй и третий элементы (i = 2, j = 3), все числа будут равны 1.

E. Идем по оси

meet-in-the-middle битмаски дп Комбинаторика Конструктив *2300

Яхуб хочет встретиться со своей подружкой Яхубиной. Они оба живут на оси Ox (горизонтальной оси координат). Яхуб живет в точке 0, а Яхубина живет в точке d.

У Яхуба есть n целых положительных чисел a1, a2, ..., an. Сумма этих чисел равняется d. Предположим, что p1, p2, ..., pn — это перестановка чисел {1, 2, ..., n}. Затем, пусть b1 = ap1, b2 = ap2 и так далее. Будем называть массив b — «путь». Существует n! различных путей, один путь для каждой перестановки p.

Яхуб запланировал поход к своей подружке следующим образом. Сначала он проходит b1 шагов по оси Ox, затем делает привал в точке b1. Затем он проходит еще b2 шагов по оси Ox и устраивает привал в точке b1 + b2. Аналогично, в j-ый раз (1 ≤ j ≤ n) он проходит еще bj шагов по оси Ox и делает привал в точке b1 + b2 + ... + bj.

Яхуб очень суеверный человек. У него есть k несчастливых целых чисел. Яхуб называет путь «хорошим», если он никогда не делает привала в точке, соответствующей хотя бы одному из этих k чисел. Просто из любопытства посчитайте, сколько существует хороших путей по модулю 1000000007 (109 + 7).

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 24). В следующей строке записано n целых чисел: a1, a2, ..., an (1 ≤ ai ≤ 109).

В третьей строке записано целое число k (0 ≤ k ≤ 2). В четвертой строке записано k положительных целых чисел, обозначающих несчастливые для Яхуба числа. Каждое из этих чисел не превышает 109.

Выходные данные

Выведите единственное целое число — ответ на дилемму Яхуба.

Примечание

В первом тесте посмотрим на шесть возможных путей:

  • [2, 3, 5]. Яхуб остановится в точках 2, 5 и 10. Среди них несчастливое число — 5.
  • [2, 5, 3]. Яхуб остановится в точках 2, 7 и 10. Среди них несчастливое число — 7.
  • [3, 2, 5]. Остановка в несчастливой точке 5.
  • [3, 5, 2]. Такое расположение подходит.
  • [5, 2, 3]. Два несчастливых привала (5 и 7).
  • [5, 3, 2]. Яхуб не согласится, так как здесь есть привал в точке 5.

Во втором тесте заметьте, что два разных способа могут иметь идентичные наборы привалов. В конкретном случае, все шесть возможных способов имеют одни и те же остановки: [2, 4, 6], так что тут неудача не грозит Яхубу.

B. Максимальная абсурдность

дп реализация Структуры данных *1500

В Берляндии продолжаются реформы. К примеру, на вчерашнем заседании парламент Берляндии принял целых n законов (каждому из них присвоен уникальный номер от 1 до n). Сегодня все эти законы лежат на столе у президента Берляндии дяди Вовы, которому они были переданы на подпись.

В этот раз дядя Вова планирует подписать 2k законов. Он решил выбрать ровно два непересекающихся отрезка целых чисел от 1 до n длиной k и подписать все законы, номера которых попадают в эти отрезки. Более формально, дядя Вова выберет два целых числа a, b (1 ≤ a ≤ b ≤ n - k + 1, b - a ≥ k) и подпишет все законы с номерами, лежащими в отрезках [aa + k - 1] и [bb + k - 1] (концы отрезков включаются).

При выборе подписываемых законов дядя Вова, разумеется, будет руководствоваться мнением общества. Всеберляндский центр изучения общественного мнения (ВЦИОМ) провел опросы среди населения и на их основе предоставил президенту отчет, в котором для каждого закона указана его средняя абсурдность с точки зрения респондентов. Как истинный патриот, дядя Вова хочет подписать законы, имеющие максимальную суммарную абсурдность. Помогите ему.

Входные данные

В первой строке записаны два целых числа n и k (2 ≤ n ≤ 2·105, 0 < 2k ≤ n) — количество законов, принятых парламентом, и длина одного отрезка в списке законов соответственно. В следующей строке записано n целых чисел x1, x2, ..., xn — абсурдность каждого из законов (1 ≤ xi ≤ 109).

Выходные данные

Выведите два целых числа a, b — начальные номера законов в отрезках, которые следует выбрать дяде Вове (это значит, что президент подпишет законы с номерами из отрезков [aa + k - 1] и [bb + k - 1]). Если существует несколько решений, выведите то, в котором число a минимально. Если вариантов подписания по-прежнему несколько, выведите тот, в котором число b минимально.

Примечание

В первом примере дядя Вова подпишет законы с номерами из отрезков [1;2] и [4;5]. Суммарная абсурдность подписанных законов составит 3 + 6 + 1 + 6 = 16.

Во втором примере дядя Вова подпишет законы с номерами из отрезков [1;2] и [3;4]. Суммарная абсурдность подписанных законов составит 1 + 1 + 1 + 1 = 4.

E. Двоичный ключ

дп жадные алгоритмы реализация *2400

Пусть p и q — строки положительной длины, называемые контейнером и ключом соответственно, причём строка q состоит лишь из символов 0 и 1. Рассмотрим несложный алгоритм, выделяющий сообщение s из заданного контейнера p:


i = 0;
j = 0;
s = <>;
пока i меньше длины строки p
{
если q[j] == 1, то приписать справа к строке s символ p[i];
увеличить переменные i, j на единицу;
если значение переменной j равно длине строки q, то j = 0;
}

В приведенном псевдокоде i, j — целочисленные переменные, s — строка, '=' — оператор присваивания, '==' — операция сравнения, '[]' — операция получения символа строки с заданным индексом, '<>' — пустая строка. Предполагается, что нумерация символов во всех строках начинается с нуля.

Понятно, что реализовать данный алгоритм довольно легко, а потому перед Вами будет стоять несколько другая задача. Необходимо построить минимальный лексикографически ключ длины k, при использовании которого приведенный выше алгоритм выделит из контейнера p сообщение s (или выяснить, что такого ключа не существует).

Входные данные

Первые две строки входных данных — непустые строки p и s (1 ≤ |p| ≤ 106, 1 ≤ |s| ≤ 200), задающие контейнер и сообщение соответственно. Строки могут содержать любые символы с ASCII-кодами от 32 до 126 включительно.

Третья строка содержит единственное целое число k (1 ≤ k ≤ 2000) — длину ключа.

Выходные данные

Выведите искомый ключ (строку длины k, состоящую только из символов 0 и 1). Если ключа не существует, выведите единственный символ 0.

Примечание

Строка x = x1x2... xp лексикографически меньше строки y = y1y2... yq, если либо p < q и x1 = y1, x2 = y2, ... , xp = yp, либо существует такое число r (0 ≤ r < min(p, q)), что x1 = y1, x2 = y2, ..., xr = yr и xr + 1 < yr + 1. Символы строк сравниваются по своим ASCII-кодам.

E. Медведь Василий и покраска квадрата

битмаски дп Комбинаторика реализация *2700

У медведя Василия есть два любимых целых числа n и k, а также карандаш. Кроме того, у него есть k банок с акварельными красками различных цветов. Все банки пронумерованы некоторым образом от 1 до k включительно. В банке с номером i находится краска i-ого цвета.

Изначально на координатной плоскости медведь нарисовал карандашом четыре отрезка. Все они имеют в качестве конца точку (0, 0), а качестве начала они имеют следующие точки: (0, 2n), (0,  - 2n), (2n, 0), ( - 2n, 0). Далее для каждого i = 1, 2, ..., n медведь нарисовал два квадрата. Первый квадрат имеет следующие координаты вершин: (2i, 0), ( - 2i, 0), (0,  - 2i), (0, 2i). Второй квадрат имеет следующие координаты вершин: ( - 2i - 1,  - 2i - 1), ( - 2i - 1, 2i - 1), (2i - 1,  - 2i - 1), (2i - 1, 2i - 1). После всего этого медведь нарисовал еще один квадрат: (1, 0), ( - 1, 0), (0,  - 1), (0, 1). Все точки, упомянутые выше, образуют множество точек A.

Пример полученного рисунка при n = 0

Пример полученного рисунка при n = 2

Медведь решил покрасить полученный рисунок за k ходов, i-ый ход состоит из следующих этапов:

  1. Медведь выбирает 3 различных точки в множестве А так, чтобы между любой парой выбранных точек на рисунке существовал отрезок. Внутри области, ограниченной выбранными точками и отрезками между ними, не должно быть точек, уже покрашенных некоторой акварельной краской.
  2. Медведь закрашивает в i-ый цвет область, ограниченную выбранными точками и отрезками.

Отметим, что после k-ого хода некоторые части рисунка могут остаться непокрашенными.

Медведь попросил Вас определить количество различных способов покраски его рисунка. Способом покраски Василий называет последовательность трехэлементных множеств точек, выбранных им на каждом из ходов. Две последовательности множеств считаются различными, если существует такое число i (1 ≤ i ≤ k), что i-ые члены этих последовательностей не совпадают как множества. Так как искомое количество способов покраски может быть довольно большим, требуется найти лишь остаток от деления его на число 1000000007 (109 + 7).

Входные данные

Первая строка содержит два целых числа n и k, записанные через пробел (0 ≤ n, k ≤ 200).

Выходные данные

Выведите ровно одно число — ответ на задачу по модулю 1000000007 (109 + 7).

D. Книга Зла

Деревья дп поиск в глубину и подобное разделяй и властвуй *2000

Паладин Манао напал на след древней Книги Зла в одной болотистой местности. Всего в этой местности расположено n населенных пунктов, пронумерованных числами от 1 до n. Из-за того, что передвигаться по местности очень сложно, люди вытоптали ровно n - 1 тропинок, каждая из которых соединяет некоторую пару населенных пунктов. По каждой из этих тропинок можно передвигаться в обоих направлениях. Из любого населенного пункта можно попасть в любой другой, перейдя по одной или нескольким тропинкам.

Назовем расстоянием между двумя населенными пунктами наименьшее количество тропинок, которые надо пересечь, чтобы попасть из одного пункта в другой. Манао известно, что у искомой им Книги Зла радиус действия d. Это означает, что если Книга Зла находится в некотором населенном пункте, то ее пагубное влияние (например, явление привидений и оборотней) распространяется в населенных пунктах на расстоянии d или меньше от него.

Манао услышал, что влияние Книги Зла было замечено в m населенных пунктах с номерами p1, p2, ..., pm. Заметим, что Книга возможно влияет и на другие населенные пункты, просто этого еще никто не заметил. Он хочет определить, в каких из населенных пунктов может находиться эта Книга. Помогите ему в этой непростой задаче.

Входные данные

В первой строке через пробел записано три целых числа n, m и d (1 ≤ m ≤ n ≤ 100000; 0 ≤ d ≤ n - 1). Во второй строке через пробел записано m различных целых чисел p1, p2, ..., pm (1 ≤ pi ≤ n). Далее следует n - 1 строка, каждая из которых описывает одну из тропинок, проложенных в рассматриваемой местности. Тропинка описывается парой разделенных пробелом чисел ai и bi, представляющих собой концы этой тропинки.

Выходные данные

Выведите единственное число — количество населенных пунктов, в которых может находиться Книга Зла. Возможно, что информация, дошедшая до Манао, противоречива и не существует такого населенного пункта, где может находиться Книга. В таком случае выведите 0.

Примечание

Пример 1. Радиус действия Книги Зла равен 3-ем, а ее воздействие было замечено в населенных пунктах 1 и 2. Таким образом, она может находиться в населенных пунктах под номерами 3, 4 и 5.

C. Ксюша и гири

графы дп жадные алгоритмы Конструктив кратчайшие пути поиск в глубину и подобное *1700

У Ксюши есть набор из гирек, а также чашечные весы. Каждая гирька имеет целочисленный вес от 1 до 10 килограмм. Ксюша собирается поиграть с весами и гирьками. Для этого она последовательно кладет гирьки на весы. Первую гирьку на левую чашу весов, вторую гирьку — на правую чашу весов, третью — на левую чашу весов, четвертую — на правую чашу весов и так далее. Всего Ксюша хочет положить на весы m гирек.

Просто так класть гирьки на весы не интересно, поэтому Ксюша установила несколько правил. Во-первых, она не кладет на весы подряд две гирьки одинакового веса. То есть i-я положенная гирька, должна отличаться от (i + 1)-й по весу для любого i (1 ≤ i < m). Во-вторых, Ксюше хочется, чтобы каждый раз, когда она кладет гирьку на некоторую чашу весов, эта чаша весов перевешивала противоположную. То есть сумма весов гирек на соответствующей чаше должна быть строго больше, чем на противоположной.

Вам заданы все типы гирек, которые имеются у Ксюши. Можете считать, что у Ксюши имеется бесконечное количество гирек каждого заданного типа. Ваша задача, помочь Ксюше выложить m гирек на весы или сказать, что это сделать невозможно.

Входные данные

В первой строке записана строка, состоящая из ровно десяти нулей и единиц: i-тый (i ≥ 1) символ в этой строке равен «1», если у Ксюши имеются гирьки, которые весят i килограмм, и равен «0» иначе. Во второй строке записано целое число m (1 ≤ m ≤ 1000).

Выходные данные

В первой строке выведите «YES», если существует способ выложить m гирек на весы, соблюдая все правила, иначе в первой строке выведите «NO». Если выложить m гирек на весы возможно, то в следующей строке выведите m целых чисел — веса гирек в порядке их выкладывания на весы.

Если существует несколько решений, разрешается вывести любое.

D. Граф сортировки пузырьком

Бинарный поиск дп Структуры данных *1500

Яхуб недавно освоил сортировку пузырьком, алгоритм, с помощью которого можно отсортировать по возрастанию перестановку, состоящую из n элементов, a1, a2, ... an. Яхубу этот алгоритм показался очень скучным, поэтому он изобрел свой собственный граф. Этот граф (назовем его G) изначально состоит из n вершин и 0 ребер. При запуске сортировки пузырьком ребра добавляются в граф так, как показано в приведенном ниже алгоритме (псевдокод).


procedure bubbleSortGraph()
построить граф G с n вершинами и 0 ребрами
repeat
swapped = false
for i = 1 to n - 1 (обе границы включительно) do:
if a[i] > a[i + 1] then
добавить неориентированное ребро в G между вершинами a[i] и a[i + 1]
swap( a[i], a[i + 1] ) /* поменять местами a[i] и a[i + 1] */
swapped = true
end if
end for
until not swapped
/* повторять цикл пока перестановка не станет отсортированной */
end procedure

Независимое множество в графе — это такое множество вершин в графе, в котором никакие две вершины не являются смежными (следовательно, между вершинами независимого множества нет ребер). Максимальное независимое множество — это такое независимое множество, у которого наибольшая мощность (размер). Вам дана перестановка, вычислите размер максимального независимого множества графа G, если мы построим его процедурой bubbleSortGraph, передав в качестве перестановки a заданную перестановку.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 100000). В следующей строке записано n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ n).

Выходные данные

В первой строке выведите единственное целое число — ответ на задачу.

Примечание

Рассмотрим пример. Сортировка пузырьком поменяет элементы 3 и 1. В граф добавится ребро (1, 3). Теперь перестановка имеет вид [1, 3, 2]. Затем сортировка пузырьком поменяет элементы 3 и 2. В граф добавится ребро (2, 3). Теперь перестановка отсортирована. Построенный граф состоит из 3 вершин и 2 ребер: (1, 3) и (2, 3). Максимальное независимое множество в нем [1, 2].

D. Ксюша и доминошки

битмаски дп поиск в глубину и подобное *2100

Ксюша очень любит пазлы, особенно ей нравятся пазлы, состоящие из доминошек. Посмотрите на рисунок, изображающий один из таких пазлов.

Пазл представляет собой таблицу размера 3 × n клеток с запрещенными клетками (черные квадраты), на которой лежат доминошки (цветные прямоугольники на рисунке). Пазл считается корректным, если выполняются следующие условия:

  • каждая доминошка занимает ровно две не запрещенные клетки таблицы;
  • никакие две доминошки не занимают одну и ту же клетку таблицы;
  • ровно одна не запрещенная клетка таблицы не занята никакой доминошкой (на рисунке отмечена кружочком).

Чтобы решить пазл нужно за несколько ходов переместить пустую клетку из начального положения в некоторое заданное. Ходом считается перемещение доминошки на пустую клетку, так чтобы пазл оставался корректным. Горизонтальные доминошки могут быть перемещены только по горизонтали, а вертикальные только по вертикали. Поворачивать доминошки не разрешается. На рисунке изображен возможный ход.

У Ксюши есть таблица размера 3 × n клеток с запрещенными клетками и помеченной кружочком клеткой. Также у Ксюши есть очень много одинаковых доминошек. Теперь Ксюша интересуется, сколько различных корректных пазлов она сможет составить, размещая доминошки на имеющейся таблице. Дополнительно Ксюша хочет, чтобы помеченная кружочком клетка была пустой в полученном пазле и чтобы в пазле существовал хотя бы один ход.

Помогите Ксюше, посчитайте описанное количество пазлов. Так как описанное количество может быть достаточно большим, выведите его остаток от деления на число 1000000007 (109 + 7).

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 104) — размер пазла. В каждой из следующих трех строк записаны по n символов — описание имеющейся таблицы. Символ номер j строки номер i равен «X», если соответствующая клетка запрещенная; равен «.», если соответствующая клетка не запрещенная, равен «O», если соответствующая клетка помечена кружочком.

Гарантируется, что в таблице ровно одна клетка помечена кружочком. Гарантируется, что все клетки заданной таблицы, имеющие хотя бы одну общую точку с помеченной клеткой не заблокированы.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю 1000000007 (109 + 7).

Примечание

Два пазла считаются различными, если существует пара клеток, занятых в одном из них одной доминошкой, а в другом — нет.

B. Счастливая общая подпоследовательность

дп Строки *2000

В математике подпоследовательность — это последовательность, которую можно получить из другой последовательности путем удаления некоторых элементов, не меняя порядок оставшихся элементов. Например, последовательность BDF — это подпоследовательность последовательности ABCDEF. Подстрока строки — это непрерывная подпоследовательность данной строки. Например, BCD — это подстрока ABCDEF.

Вам даны две строки s1, s2 и еще одна строка под названием virus. Ваша задача — найти наидлиннейшую общую подпоследовательность s1 и s2, такую, что она не содержит подстроку virus.

Входные данные

Входные данные состоят из трех строк, каждая в отдельной строке: s1, s2 и virus (1 ≤ |s1|, |s2|, |virus| ≤ 100). Каждая строка состоит исключительно из заглавных латинских букв.

Выходные данные

Выведите наидлиннейшую общую подпоследовательность s1, s2, не содержащую подстроку virus. Если имеется несколько решений, любое из них будет засчитано.

Если требуемой общей подпоследовательности нет, выведите 0.

D. Управляем роботом

графы дп кратчайшие пути *2600

Робокомпанию возглавляет жестокий человек. Его девиз: «Движение или смерть»! Именно этим его продукт и занимается. Рассмотрим поведение робота этой компании. Пусть робот движется по ориентированному графу. Поведение робота на таком графе называется «Три закона робототехники»:

  • Закон 1. Робот самоликвидируется, если посетит ранее посещенную вершину графа.
  • Закон 2. Робот самоликвидируется, если окажется в ситуации, в которой ему некуда будет идти (иными словами, если робот зайдет в вершину, исходящая степень которой равна нулю).
  • Закон 3. Робот движется случайным образом, когда он может двигаться в нескольких направлениях (то есть, когда он достигает вершины, исходящая степень которой больше единицы). Конечно, робот может двигаться только по направленным ребрам графа.

Можете представить робота с таким поведением? Поэтому они очень дешевые и рассчитаны на потребителя, стесненного в средствах. Среди них, конечно, есть пользователь mzry1992. У mzry1992 имеется такой робот и она хочет переместить его из вершины s в вершину t по направленному графу так, чтобы робот не самоликвидировался. К счастью, в каждой вершине девушка может посылать роботу специальные приказ. Специальный приказ показывает роботу нужное направление в тех случаях, когда у робота есть несколько направлений на выбор (во избежание случайного выбора направления робота согласно закону 3). Когда робот дойдет до вершины номер t, mzry1992 немедленно изымает его из графа. Таким образом, девушка всегда найдет способ достичь желаемого результата, при условии, что существует путь из s в t (независимо от того, равна ли исходящая степень вершины t нулю или нет).

Тест 2

Однако отсылать приказы недешево. Поэтому Ваша задача — найти наименьшее количество приказов, которые должна отдать mzry1992 в наихудшем случае. Заметим, что mzry1992 может отдавать приказ роботу в момент движения робота по графу. Обратите внимание на первый пример для лучшего понимания этой части задачи.

Входные данные

Первая строка содержит два целых числа n (1 ≤ n ≤ 106) — количество вершин графа, и m (1 ≤ m ≤ 106) — количество ребер. Затем следует m строк, в каждой строке записано два целых числа, ui и vi (1 ≤ ui, vi ≤ n; vi ≠ ui), эти целые числа обозначают направленное ребро, проходящее из вершины ui в вершину vi. В последней строке записано два целых числа, s и t (1 ≤ s, t ≤ n).

Гарантируется, что граф не содержит петель и кратных ребер.

Выходные данные

Если выполнить поставленную цель возможно, выведите требуемое минимальное количество приказов в худшем случае. Иначе выведите -1.

Примечание

Рассмотрим первый пример. Изначально робот находится в вершине номер 1. Таким образом, на первом шагу робот может пойти в вершину 2 или 3. В зависимости от выбора робота, mzry1992 должна отдать приказ роботу. Приказ направляет его в вершину 4. Если mzry1992 не отдает приказа роботу на вершине 2 или 3, то робот может выбрать «плохое» исходящее ребро (вернуться в вершину 1) согласно закону № 3. Таким образом, ответ — один.

D. Черепашки

дп матрицы *2500

Дана таблица размера n × m. Будем считать, что строки таблицы пронумерованы сверху вниз от 1 до n, а столбцы — слева направо от 1 до m. Тогда клетку, находящуюся в строке x и столбце y, будем обозначать (x, y).

Изначально в клетке (1, 1) стоят две одинаковые черепашки. Обе черепашки хотят попасть в клетку (n, m). В некоторых клетках таблицы существуют препятствия, но гарантируется, что в левом верхнем и правом нижнем углах их нет. Из клетки (x, y) черепашка (как одна, так и другая) может перейти в одну из двух клеток (x + 1, y) и (x, y + 1), если соответствующая клетка не содержит препятствия. Черепашки поссорились, поэтому они не хотят, чтобы на протяжении пути была хоть какая-то вероятность встретиться. Помогите им найти количество способов, которыми они могут пройти от клетки (1, 1) до клетки (n, m).

Более формально, найдите количество пар непересекающихся путей из клетки (1, 1) в клетку (n, m) по модулю 1000000007 (109 + 7). Два пути называются непересекающимися, если у них есть ровно две общие клетки — начальная и конечная.

Входные данные

В первой строке записаны два целых числа n, m (2 ≤ n, m ≤ 3000). В каждой из следующих n строк записано m символов — описание таблицы. Свободные клетки обозначаются символом «.», клетки с препятствиями — символом «#».

Гарантируется, что левая верхняя и правая нижняя клетки свободны.

Выходные данные

В единственной строке выведите целое число — количество пар непересекающихся путей из клетки (1, 1) в клетку (n, m) по модулю 1000000007 (109 + 7).

E. Пилигримы

Деревья дп поиск в глубину и подобное *2800

Долгое время назад жили-были люди в стране Dudeland. Эта страна состояла из n городов, соединенных n - 1 двунаправленными дорогами. Города пронумерованы от 1 до n, и известно, что из любого города можно попасть в любой другой, двигаясь по дорогам страны. В Dudeland есть m монастырей, расположенных в m различных городах. В каждом монастыре живет пилигрим.

В начале года, каждый пилигрим записывает, какой монастырь находится дальше всего от того монастыря, в котором он живет. Если существует более одного такого монастыря, то он записывает все подходящие монастыри. В день Большого Лебовски каждый пилигрим выбирает наугад город из своего списка и начинает туда идти.

Уолтер ненавидит пилигримов и поэтому хочет прервать путь как можно большего числа пилигримов. Он планирует уничтожить ровно один город, в котором нет монастыря. Пилигрим огорчается, если все монастыри из его списка становятся недостижимыми из его монастыря.

Найдите максимальное количество пилигримов, которых Уолтер может огорчить. Также найдите количество способов, которым Уолтер может этого достигнуть — количество городов, которые он может удалить.

Входные данные

Первая строка содержит два целых числа n (3 ≤ n ≤ 105) и m (2 ≤ m < n). В следующей строке записано m различных целых чисел, обозначающих номера городов с монастырями.

Каждая из следующих n - 1 строк содержит три целых числа ai, bi, ci, обозначающих, что между городами ai и bi существует дорога длины ci (1 ≤ ai, bi ≤ n, 1 ≤ ci ≤ 1000, ai ≠ bi).

Выходные данные

Выведите два целых числа: максимальное количество пилигримов, которых Уолтер может огорчить, и количество способов, которыми он может осуществить свой план.

B. Раскраска забора

дп жадные алгоритмы реализация Структуры данных *1700

Игорь влюбился в Таню. Чтобы показать, насколько сильно он ее любит, Игорь хочет написать на заборе число напротив дома Тани. Игорь считает, что чем больше число он напишет, тем больше у него шансов покорить Таню.

К сожалению, Игорь смог добыть только v литров краски. Сделав расчеты, Игорь решил, что на цифру d ему понадобится ad литров краски. К тому же до Игоря дошли слухи, что Таня терпеть не может нули. Поэтому Игорь не будет их использовать в написании числа.

Помогите Игорю определить максимальное число, которое он может написать на заборе.

Входные данные

В первой строке записано целое число v (0 ≤ v ≤ 106). Во второй строке записано девять положительных целых чисел a1, a2, ..., a9 (1 ≤ ai ≤ 105).

Выходные данные

Выведите самое большое число, которое удастся написать Игорю на заборе. Если краски не хватит ни на одну цифру (Игорь не сможет ничего написать) выведите -1.

D. Животные

дп жадные алгоритмы *1700

Герой своего времени ДравДэ, известный своими профессиональными достижениями (напомним, что работает он на складе с волшебным, но безалкогольным напитком Огудар-Олок), однажды пришел домой после тяжелого рабочего дня. Тогда ему пришлось выпить целых 9875 ящиков напитка, и, придя домой, он сразу рухнул спать.

ДравДэ приснилось, будто он хозяин преуспевающей фермы, и каждый день к нему приходило по одному животному и просило разрешения поселиться, но ДравДэ, в силу своей бесконечной гуманности, мог отказать пришедшему животному в поселении, и тогда оно уходило восвояси. Всего во сне ДравДэ было ровно n дней, и животное, которое приходило в i-ый день, съедало ровно ci тонн еды каждый день, начиная с i-го, но если в какой-либо день животное не получало положенного пропитания, то оно сильно расстраивалось. В самом начале сна на ферме было ровно X тонн еды.

ДравДэ проснулся в холодном поту...

Когда он рассказал вам этот сон, то он уже не мог вспомнить, сколько же животных было на ферме к концу n-ного дня, но помнит, что никто не расстраивался (у него же была веселая ферма), а всего их было максимально возможное количество. Именно это число он и просит вас подсчитать.

Заметим, что животные приходили по утрам, а кормить ДравДэ их начинал только в полдень, и поэтому если животному отказывают в поселении, то оно ничего не успевает съесть из запасов фермы. Но если животное поселяется, то оно ест каждый день с текущего по n-ый.

Входные данные

В первой строке входного файла записаны целые числа n и X (1 ≤ n ≤ 100, 1 ≤ X ≤ 104) — количество дней, которые приснились ДравДэ, и количество тонн еды, которое было изначально на ферме. Во второй строке записаны целые числа ci (1 ≤ ci ≤ 300). Числа во второй строке разделены одним пробелом.

Выходные данные

Выведите в выходной файл единственное число — максимально возможное количество животных на ферме к концу n-ого дня, если известно, что еды всем хватило.

Примечание

Пояснение к первому примеру: ДравДэ оставляет на ферме второе и третье животное. Второе животное съест одну тонну еды во второй день и одну тонну в третий. Третье животное съест одну тонну еды в третий день.

A. Джефф и округления

дп жадные алгоритмы математика реализация *1800

Джефф получил в подарок 2n действительных чисел a1, a2, ..., a2n. Мальчик ненавидит нецелые числа, поэтому он решил слегка изменить подаренные числа. А именно, Джефф последовательно выполняет n операций, каждая из которых:

  • выбрать два не выбиравшихся ранее индекса i и j (i ≠ j);
  • округлить элемент ai к ближайшему целому числу, которое не больше ai (ai присвоить ai ⌋);
  • округлить элемент aj к ближайшему целому числу, которое не меньше aj (aj присвоить aj ⌉).

Тем не менее Джефф не хочет обижать человека, который подарил ему последовательность. Поэтому мальчик хочет выполнить операции так, чтобы значение модуля разницы между суммой элементов перед выполнением операций и суммой элементов после выполнения всех операций было как можно меньше. Помогите Джеффу найти минимальное значение модуля разницы.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 2000). Следующая строка содержит 2n действительных чисел a1, a2, ..., a2n (0 ≤ ai ≤ 10000), заданных с ровно тремя знаками после точки. Числа разделены пробелами.

Выходные данные

В единственную строку выведите вещественное число — искомую разницу с ровно тремя знаками после точки.

Примечание

В первом тесте нужно выполнить операции следующим образом: (i = 1, j = 4), (i = 2, j = 3), (i = 5, j = 6). В таком случае разница будет равна |(0 + 0.5 + 0.75 + 1 + 2 + 3) - (0 + 0 + 1 + 1 + 2 + 3)| = 0.25.

B. Джефф и Фурик

дп Комбинаторика Теория вероятностей *1900

Джефф — новый друг Фурика. Сейчас ребята собрались поиграть в одну увлекательную игру.

В самом начале игры Джефф записывает на листке перестановку, состоящую из n чисел: p1, p2, ..., pn. Далее ребята по очереди делают ходы, первым ходит Джефф. На своем ходу Джефф выбирает два соседних элемента перестановки и меняет их местами. На своем ходу Фурик подбрасывает монетку, и если монетка выпадает «орлом», то Фурик выбирает случайную пару соседних элементов с номерами i и i + 1, для которых верно неравенство pi > pi + 1, и меняет их местами. Если же монетка выпала «решкой», то Фурик выбирает случайную пару соседних элементов с номерами i и i + 1, для которых верно неравенство pi < pi + 1, и меняет их местами. Если после того как монетка выпала «орлом» или «решкой» у Фурика есть несколько вариантов, какую пару соседних элементов взять, то он равновероятно выбирает один из вариантов. Если у Фурика нет ни одного варианта, то он подбрасывает монетку еще раз. Игра заканчивается, когда перестановка оказывается отсортированной по возрастанию.

Джефф хочет, чтобы игра закончилась как можно быстрее (то есть было совершено как можно меньше ходов). Помогите Джеффу найти минимальное математическое ожидание количества ходов в игре, если он действует оптимально.

Считайте, что монетка выпадает орлом (и решкой) с вероятностью 50 процентов.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 3000). Следующая строка содержит n различных целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n) — перестановка p. Числа разделены пробелами.

Выходные данные

В единственную строку выведите вещественное число — ответ на задачу. Ответ будет считаться правильным, если его абсолютная или относительная погрешность не превышает 10 - 6.

Примечание

В первом тесте последовательность уже отсортирована, следовательно — ответ 0.

C. Джефф и скобки

дп матрицы *2500

Джефф любит правильные скобочные последовательности.

Сегодня Джефф собирается выписать на листок правильную скобочную последовательность, состоящую из nm скобок. Пронумеруем все скобки этой последовательности от 0 до nm - 1 слева направо. Джефф знает, что он потратит ai mod n литров чернил, если нарисует i-ую скобку последовательности открывающейся, и bi mod n литров чернил, если нарисует i-ую скобку закрывающейся.

Вам даны последовательности a, b и числа n, m. Какое минимальное количество чернил понадобится Джеффу, чтобы нарисовать правильную скобочную последовательность длины nm?

Операция x mod y обозначает взятие остатка от деления числа x на число y.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n ≤ 20; 1 ≤ m ≤ 107; m — четное). Следующая строка содержит n целых чисел: a0, a1, ..., an - 1 (1 ≤ ai ≤ 10). Следующая строка содержит n целых чисел: b0, b1, ..., bn - 1 (1 ≤ bi ≤ 10). Числа разделяются пробелами.

Выходные данные

В единственную строку выведите ответ на задачу — минимальный требуемый объем чернил в литрах.

Примечание

В первом тесте оптимальная последовательность: ()()()()()(), требуемое количество литров чернил — 12.

D. Очередь

дп Конструктив *2000

В школьной столовой собралась очередь за булочками, состоящая из n человек — мальчиков и девочек. В то время, пока булочки еще готовятся, в очереди происходят некоторые изменения. Каждую секунду все мальчики, которые стоят непосредственно перед девочками, одновременно пропускают их вперед. Другими словами, если в какой-то момент времени i-ым в очереди стоит мальчик, а (i + 1)-ой — девочка, то через секунду на i-ом месте будет стоять девочка, а на (i + 1)-ом — мальчик.

Рассмотрим пример очереди, в которой стоят четыре человека: мальчик, мальчик, девочка, девочка (перечислены от начала очереди). Тогда через одну секунду очередь будет выглядеть так: мальчик, девочка, мальчик, девочка. Через две — девочка, мальчик, девочка, мальчик. Через три — девочка, девочка, мальчик, мальчик. Далее очередь меняться не будет.

Вам требуется по заданной расстановке ребят в очереди определить, через какое время все девочки окажутся впереди мальчиков (в рассмотренном выше примере это время равно 3-ем секундам). Булочки готовятся чрезвычайно долго, поэтому никто не успевает покинуть очередь до того момента, как в ней перестанут происходить изменения.

Входные данные

В первой строке задана последовательность букв без пробелов s1s2... sn (1 ≤ n ≤ 106), состоящая из заглавных букв M и F латинского алфавита. Если буква si равна M, это значит, что изначально в очереди на i-ом месте стоит мальчик. Если буква si равна F, то изначально в очереди на i-ом месте стоит девочка.

Выходные данные

Выведите единственное целое число — количество секунд, через которое все девочки в очереди окажутся перед мальчиками. Если в очереди все ребята одного пола, выведите 0.

Примечание

В первом тестовом примере последовательность изменений выглядит следующим образом: MFM  →  FMM.

Второй тестовый пример соответствует примеру из условия. Последовательность изменений: MMFF  →  MFMF  →  FMFM  →  FFMM.

E. Антицепь

дп жадные алгоритмы Паросочетания *2200

Вам задан ориентированный ациклический граф G, состоящий из n вершин, пронумерованных от 0 до n - 1. В графе имеется n ребер, пронумерованных от 0 до n - 1. Ребро с номером i соединяет вершины i и (i + 1) mod n, при этом может быть ориентировано как в одну сторону, так и в другую.

Операция x mod y обозначает взятие остатка от деления числа x на число y.

Назовем две вершины u и v в графе G сравнимыми, если существует путь в графе из u в v, либо из v в u. Назовем антицепью множество вершин графа G, в котором любые две различные вершины не являются сравнимыми. Размером антицепи назовем количество вершин в соответствующем множестве. Назовем антицепь максимальной, если в графе нет антицепей с большим размером.

Вам требуется найти размер максимальной антицепи в графе G.

Входные данные

В первой строке записана последовательность символов s0s1... sn - 1 (2 ≤ n ≤ 106), состоящая из нулей и единиц. Длина строки (число n) соответствует количеству вершин и ребер в графе G. Если символ si (i ≥ 0) равен 0, то ребро между вершинами i и (i + 1) mod n ориентировано в направлении от i-ой вершины к вершине (i + 1) mod n, иначе — в противоположную сторону.

Гарантируется, что заданный граф ациклический.

Выходные данные

Выведите единственное целое число — размер максимальной антицепи графа G.

Примечание

Рассмотрим первый тестовый пример. Ребра графа G: 0 → 1, 1 → 2, 0 → 2. В качестве максимальной антицепи можно выбрать множество вершин [0]. Большую по размеру антицепь выбрать не получится.

B. Игра со строками

битмаски дп игры *2400

Задана таблица T размера n × n, состоящая из строчных латинских букв. Строка s считается хорошей, если в таблице существует корректный путь, соответствующий данной строке. Другими словами, хорошими считаются все строки, которые можно получить, двигаясь из левой верхней клетки таблицы только вправо и вниз. Далее — формальное определение этого понятия:

Пронумеруем строки таблицы сверху вниз от 1 до n, колонки таблицы слева направо от 1 до n. Будем называть клеткой (r, c) — клетку таблицы T на r-той строке в c-той колонке. Данной клетке соответствует буква Tr, c.

Назовем путем длины k последовательность клеток таблицы [(r1, c1), (r2, c2), ..., (rk, ck)]. Тогда следующие пути являются корректными:

  1. Существует один корректный путь длины 1, то есть состоящий из одной клетки: [(1, 1)];
  2. Пусть [(r1, c1), ..., (rm, cm)] — корректный путь длины m, тогда пути [(r1, c1), ..., (rm, cm), (rm + 1, cm)] и [(r1, c1), ..., (rm, cm), (rm, cm + 1)] являются корректными путями длины m + 1.

Следует считать, что пути [(r1, c1), (r2, c2), ..., (rk, ck)] соответствует строка длины k: Tr1, c1 + Tr2, c2 + ... + Trk, ck.

Два игрока играют в следующую игру: изначально записана пустая строка, затем игроки по очереди приписывают в конец строки по одной букве, после каждого хода (приписывания новой буквы) полученная строка должна являться хорошей. Игра заканчивается после 2n - 1 ходов. Победитель определяется следующим образом:

  1. Если в полученной строке букв «a» строго больше, чем букв «b», то выигрывает первый игрок;
  2. Если в полученной строке букв «b» строго больше, чем букв «a», то выигрывает второй игрок;
  3. Если в полученной строке букв «a» и букв «b» одинаковое количество, то объявляется ничья.

Определите результат игры при оптимальной игре обоих игроков.

Входные данные

В первой строке содержится одно целое число n (1 ≤ n ≤ 20).

Следующие n строк содержат по n строчных латинских букв — таблицу T.

Выходные данные

В единственной строке выведите строку «FIRST», если выиграет первый игрок, «SECOND», если выиграет второй игрок и «DRAW», если игра закончится в ничью.

Примечание

Рассмотрим первый пример:

Хорошими строками являются: a, ab, ac, abd, acd.

Первый игрок в первый ход допишет к строке букву a, так как существует всего одна хорошая строка длины 1. Затем, второй игрок может приписать одну из букв b или c и тогда игра закончится соответственно со строками abd или acd. В первом случае будет ничья (в строке по одной букве a и b), во втором же случае выиграет первый игрок. Понятно, что в таком случае второму игроку выгодно выбрать букву b и получить ничью.

Рассмотрим второй пример:

Хорошие строки: x, xa, xay.

Понятно, что игра закончится со строкой xay и победит первый игрок.

C. Вася и красивые массивы

дп Перебор теория чисел *2100

У Васи скоро день рождения и мама решила подарить ему массив, состоящий из целых положительных чисел, a длины n.

Вася считает красотой массива наибольший общий делитель всех его элементов. Мама, конечно, хочет подарить ему максимально красивый массив (с наибольшей красотой). К сожалению, в магазине остался всего один массив a, но продавец сказал, что может уменьшить в нем некоторые числа, каждое число не более чем на k.

Продавец может из массива a получить массив b, если выполняются условия: bi > 0; 0 ≤ ai - bi ≤ k для всех 1 ≤ i ≤ n.

Помогите маме найти максимально возможную красоту массива, который она сможет подарить Васе (продавец сможет его получить).

Входные данные

В первой строке содержится два целых числа n и k (1 ≤ n ≤ 3·105; 1 ≤ k ≤ 106). Во второй строке содержатся n целых чисел ai (1 ≤ ai ≤ 106) — массив a.

Выходные данные

В единственной строке выведите целое число — максимально возможную красоту полученного массива.

Примечание

В первом примере можно получить массив:

3 6 9 12 12 15

Во втором примере можно получить следующий массив:

7 21 49 14 77

D. Передача пирамиды

дп *2900

Вася с Петей используют интересную структуру для хранения данных, пирамиду.

Пирамида состоит из n рядов, в i-том из них содержится i ячеек. Каждый ряд сдвинут относительно предыдущего на половину длины ячейки влево. Ячейки пирамиды пронумерованы от 1 до так, как показано на рисунке ниже.

Пример пирамиды при n = 5:

Эта структура данных умеет выполнять операции двух видов:

  1. Изменить значение конкретной ячейки. Описывается тремя числами: "tiv", где t = 1 (тип операции), i — номер ячейки, которую нужно изменять и v — значение, которое нужно в нее записать.
  2. Изменить значение в некоторой подпирамиде, на изображении выделена подпирамида с вершиной в 5 ячейке. Описывается s + 2 числами: "tiv1v2 ... vs", где t = 2, i — номер ячейки, которая является вершиной подпирамиды, s — размер подпирамиды (количество ячеек в ней), vj — значение, которое необходимо присвоить j-той ячейке подпирамиды.

Формально: подпирамида с вершиной в i-той ячейке k-того ряда (5 ячейка = вторая ячейка третьего ряда) будет содержать ячейки из рядов от k до n, в (k + p)-том из них — ячейки ряда от i-той до (i + p)-той (0 ≤ p ≤ n - k).

У Васи и Пети было две одинаковые пирамиды. Вася в своей пирамиде изменил некоторые ячейки и теперь хочет передать изменения Пете. Для этого он хочет найти последовательность операций, при помощи которой можно повторить все сделанные им изменения, однако, среди всех возможных последовательностей необходимо выбрать самую короткую (содержащую минимальное количество чисел).

Вам дана пирамида из n рядов, в которой k ячеек были изменены. Найдите последовательность операций, после которой каждая из k измененных ячеек будет также изменена как минимум одной из операций. Среди всех возможных последовательностей выберите содержащую минимальное количество чисел.

Входные данные

В первой строке содержится два целых числа n и k (1 ≤ n, k ≤ 105).

Следующие k строк содержат координаты измененных ячеек ri и ci (1 ≤ ci ≤ ri ≤ n) — ряд и номер ячейки в ряду. Все ячейки различны.

Выходные данные

Выведите единственное число — количество чисел в найденной последовательности.

Примечание

Одно из возможных решений первого примера состоит из двух операций:

2 4 v4v7v8

2 6 v6v9v10

На изображении измененные ячейки выделены другим цветом, голубым цветом выделена подпирамида, используемая первой операцией, желтым — второй:

E. Счастливое представление числа

дп Конструктив поиск в глубину и подобное *2200

Как известно счастливыми цифрами являются 4 и 7, однако, у Васи есть еще одна любимая цифра — 0, и он ее тоже считает счастливой! Счастливыми числами называют те неотрицательные числа, десятичная запись которых состоит только из счастливых цифр. К примеру, числа 0, 47, 7074 — счастливые, а 1, 7377, 895,  -7 — нет.

У Васи есть t важных целых положительных чисел, которые ему необходимо запомнить. Вася очень суеверен и хочет запоминать только счастливые числа, поэтому просит вас для каждого важного числа представить его как сумму ровно шести счастливых чисел (больше Вася просто не сможет запомнить). Тогда Вася сможет спокойно запомнить эти шесть чисел и в любой момент вычислить важное число.

Для каждого из t важных чисел выразите его, как сумму шести счастливых чисел или определите, что это невозможно.

Входные данные

В первой строке задано целое число t (1 ≤ t ≤ 5000).

Следующие t строк содержат по одному целому положительному числу ni (1 ≤ ni ≤ 1018) — список важных чисел.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64 битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите t строк; i-тая строка должна содержать ответ для i-того важного числа: если решение существует — строка должна содержать ровно шесть счастливых чисел, сумма которых равна ni, если решения не существует — строка должна содержать одно число -1.

Если решений несколько разрешается вывести любое.

D. Монеты и мешочки

битмаски дп жадные алгоритмы Конструктив *2700

Наверняка, в детстве вам рассказывали загадку про мешочки и монетки. Если нет, вот один из ее вариантов:

У Коня есть три мешочка. В первом лежит одна монетка, во втором — одна монетка, а в третьем — три монетки. Всего у Коня во всех мешочках лежит три монетки. Как такое может быть?

Ответ на эту загадку очень простой. А именно, в третьем мешочке лежат первые два и одна монетка.

Данная задача — это обобщение детской загадки. Имеется n мешочков. Известно, что в первом мешочке находится a1 монет, во втором мешочке находится a2 монет, ..., в n-ом — an монет. Общее количество монет равно s. Найдите, как расположить мешочки и монетки в них таким образом, чтобы описанное выполнялось, или сообщите, что сделать это невозможно.

Входные данные

В первой строке записаны два целых числа n и s (1 ≤ n, s ≤ 70000) — количество мешочков и общее количество монеток. В следующей строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 70000), где ai обозначает, сколько монеток лежит в i-ом мешочке.

Выходные данные

Если ответа не существует, выведите -1.

Иначе, выведите n строк. В i-ой строке выведите, что лежит в i-ом мешочке. Первое число в строке — ci (0 ≤ ci ≤ ai) — должно означать, сколько монеток лежит непосредственно в i-ом мешочке (монеты в мешочках, которые лежат в i-ом мешочке, не считаются). Второе число в строке — ki (0 ≤ ki < n) — должно означать, сколько мешочков лежит непосредственно в i-ом мешочке (мешочки, которые лежат внутри мешочков, которые лежат в i-ом мешочке, не считаются). Далее в строке должны следовать ki целых чисел — номера мешочков, которые лежат непосредственно в i-ом мешочке.

В выведенном ответе общее количество монет должно быть равно s. Если для i-го мешочка в ответе посчитать общее количество монет, которое находится внутри него, то должно получаться ai.

Никакой мешочек не должен лежать в более чем одном мешочке непосредственно. Допускается более одного уровня вложенности мешочков (смотрите второй тестовый пример). Если существует несколько правильных ответов, разрешается вывести любой.

Примечание

На рисунках снизу показаны два возможных решения одного и того же тестового примера из условия. Левый рисунок соответствует первому тестовому примеру, правый — второму тестовому примеру.

E. Ксюша и строковая задача

дп реализация Строки строковые суфф. структуры хэши *3000

На олимпиаде по информатике программисту Ксюше попалась задача на строки. К сожалению, Ксюша не сильна в строковых алгоритмах. Помогите ей решить задачу.

Строкой s назовем последовательность символов s1s2... s|s|, где записью |s| будем обозначать длину строки.

Подстрокой s[i... j] строки s будем называть строку sisi + 1... sj.

Строка s является строкой Грея, если она удовлетворяет условиям:

  • длина строки |s| нечетная;
  • символ встречается в строке ровно один раз;
  • либо |s| = 1, либо подстроки и равны между собой и являются строками Грея.

Например, строки «abacaba», «xzx», «g» являются строками Грея, а строки «aaa», «xz», «abaxcbc» — нет.

Красотой строки p называется сумма квадратов длин всех подстрок строки p, которые являются строками Грея. Другими словами, рассмотрим все пары значений i, j (1 ≤ i ≤ j ≤ |p|). Если подстрока p[i... j] является строкой Грея, к красоте нужно прибавить (j - i + 1)2.

В задаче Ксюше задана строка t, состоящая из символов латинского алфавита. Ей разрешается изменить не более одного символа этой строки на любой другой символ латинского алфавита. Задача состоит в том, чтобы получить строку как можно большей красоты.

Входные данные

В первой строке записана непустая строка t (1 ≤ |t| ≤ 105). Строка t состоит только из строчных латинских букв.

Выходные данные

Выведите искомое максимальное значение красоты, которое удастся получить Ксюше.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом тестовом примере из заданной строки можно получить строку p = «zbz». В такой строке строками Грея являются подстроки p[1... 1], p[2... 2], p[3... 3] и p[1... 3]. Итого, красота строки p получается равна 12 + 12 + 12 + 32 = 12. Более красивую строку получить нельзя.

Во втором тестовом примере можно не применять никаких операций. Изначальная строка имеет наибольшую возможную красоту.

D. Дима и зайцы

дп жадные алгоритмы *1800

Диме очень понравился подарок, который он получил от Инны. И еще больше — подарок, который он получил от Сережи.

На радостях Дима решил купить Инне n зайцев. Инна очень обрадовалась, выстроила зайцев в ряд, пронумеровала от единицы до n слева направо и начала кормить морковкой. Инна твердо решила покормить каждого зайца ровно один раз. Но вот в каком порядке их кормить?

Инна заметила, что каждый заяц излучает радость, когда его кормят. Причем радость конкретного зайца зависит от того, покормила ли Инна его соседей перед тем как покормить его. Инна знает, сколько радости излучит заяц, если на момент, когда Инна его кормит не покормлены соседние зайцы, покормлен один из соседних зайцев или покормлены оба. Обратите внимание, что у зайцев с номерами 1 и n нет левого и правого соседа соответственно, то есть у них никогда не могут быть покормлены оба соседа.

Помогите Инне максимизировать суммарную радость, которую излучат зайцы. :)

Входные данные

Первая строка входных данных содержит целое число n (1 ≤ n ≤ 3000) — количество зайцев. Далее следуют три строки по n целых чисел в каждой. В первой строке записаны числа a1 a2 ... an. Во второй строке — b1, b2, ..., bn. В третьей — c1, c2, ..., cn. Выполняются ограничения: 0 ≤ ai, bi, ci ≤ 105.

Число ai в первой строке обозначает радость, которую излучает заяц с номером i, если перед ним Инна не кормила его соседей. Число bi во второй строке обозначает радость, которую излучает заяц номер i, если перед ним Инна кормила ровно одного из его соседей. Число сi в третьей строке обозначает радость, которую излучает заяц номер i, если перед ним Инна кормила обоих его соседей.

Выходные данные

В единственной строке выведите максимально возможную суммарную радость зайцев, которую удастся достичь кормежкой Инне.

B. Перестановка

дп Конструктив математика *1400

Перестановкой p называется упорядоченный набор чисел p1,   p2,   ...,   pn, состоящий из n различных целых положительных чисел, каждое из которых не больше чем n. Число n будем называть длиной перестановки p1,   p2,   ...,   pn.

У Семена есть целое положительное число n и целое неотрицательное число k такое, что 2k ≤ n. Помогите ему найти перестановку a длины 2n такую, что выполнено равенство: .

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 50000, 0 ≤ 2k ≤ n).

Выходные данные

Выведите 2n целых чисел a1, a2, ..., a2n — искомую перестановку a. Гарантируется, что решение существует. Если существует несколько решений, разрешается вывести любое.

Примечание

Под записью |x| следует понимать абсолютную величину или модуль числа x.

В первом примере |1 - 2| - |1 - 2| = 0.

Во втором примере |3 - 2| + |1 - 4| - |3 - 2 + 1 - 4| = 1 + 3 - 2 = 2.

В третьем примере |2 - 7| + |4 - 6| + |1 - 3| + |5 - 8| - |2 - 7 + 4 - 6 + 1 - 3 + 5 - 8| = 12 - 12 = 0.

B. Левко и массив

Бинарный поиск дп *2000

У Левко есть массив, состоящий из целых чисел: a1, a2, ... , an. Но этот массив совсем ему не нравится.

Левко считает, что красота массива a напрямую зависит от значения c(a), которое можно посчитать по формуле:

Чем значение c(a) меньше, тем массив красивее.

Наступило время перемен, и Левко собирается изменить свой массив к лучшему. Если быть точнее, Левко хочет изменить значения не более k элементов массива (разрешается изменять значения на любые целые). Конечно, в результате изменений массив должен стать как можно более красивым.

Помогите Левко — посчитайте, какого минимального значения c(a) ему удастся достичь.

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ k ≤ n ≤ 2000). Во второй строке через пробел записаны целые числа a1, a2, ... , an ( - 109 ≤ ai ≤ 109).

Выходные данные

Единственное число — минимальное значение c(a), которое может получить Левко.

Примечание

В первом примере Левко может изменить второй и четвертый элементы и получить массив: 4, 4, 4, 4, 4.

В третьем примере он может получить массив: 1, 2, 3, 4, 5, 6.

C. Левко и строки

дп Комбинаторика *2500

Левко очень любит строки длины n, состоящие из строчных латинских букв. У него есть одна такая строка s. Для каждой строки t длины n Левко определяет ее красоту относительно s, как количество пар индексов i, j (1 ≤ i ≤ j ≤ n) таких, что подстрока t[i..j] лексикографически больше подстроки s[i..j].

Мальчику стало интересно, сколько существует таких строк t, что их красота относительно s в точности равна k. Помогите ему — найдите остаток от деления этого количества на 1000000007 (109 + 7).

Подстрокой s[i..j] строки s = s1s2... sn будем называть строку sisi  +  1... sj.

Строка x  =  x1x2... xp лексикографически больше строки y  =  y1y2... yp, если существует такое число r (r < p), что x1  =  y1,  x2  =  y2,  ... ,  xr  =  yr и xr  +  1 > yr  +  1. Символы строк сравниваются как их ASCII коды.

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 2000, 0 ≤ k ≤ 2000).

Во второй строке записана непустая строка s длины n. Строка s состоит только из строчных латинских букв.

Выходные данные

Выведите единственное число — ответ на задачу по модулю 1000000007 (109 + 7).

C. Сортировка вставками

дп математика реализация Структуры данных *1900

Петя — начинающий программист. Он уже освоил базовые возможности языка C++ и приступил к изучению алгоритмов. Первым алгоритмом, с которым он познакомился, стала сортировка вставками. Петя уже написал код, реализующий этот алгоритм и сортирующий по неубыванию заданный целочисленный ноль-индексированный массив a размера n.

for (int i = 1; i < n; i = i + 1)
{
int j = i;
while (j > 0 && a[j] < a[j - 1])
{
swap(a[j], a[j - 1]); // поменять местами элементы a[j] и a[j - 1]
j = j - 1;
}
}

Петя подает на вход этого алгоритма исключительно массивы, являющиеся перестановками чисел от 0 до n - 1. Он уже выбрал перестановку, которую хочет отсортировать, но решил предварительно поменять местами какие-то два её элемента. Петя хочет выбрать эти элементы таким образом, чтобы количество вызовов функции swap, выполняемых сортировкой, было минимальным. Помогите Пете определить, каким количеством способов можно выполнить обмен с соблюдением этого требования.

Гарантируется, что во входной перестановке всегда можно поменять местами два элемента таким образом, чтобы уменьшилось количество вызовов функции swap.

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 5000) — количество чисел в перестановке. Во второй строке содержатся n различных целых чисел от 0 до n - 1 включительно — сама перестановка.

Выходные данные

Выведите два целых числа: минимальное количество вызовов функции swap и количество таких пар (i, j), что обмен элементов входной перестановки с индексами i и j позволяет достичь этого минимального количества вызовов.

Примечание

В первом примере подходят пары (0, 3) и (0, 4).

Во втором примере подходят пары (0, 4), (1, 4), (2, 4) и (3, 4).

B. Забор

дп Перебор *1100

Перед домом Поликарпа находится забор, который состоит из n одинаковых по ширине досок, расположенных одна за другой слева направо. Высота i-ой доски составляет hi метров, разные доски могут иметь различные высоты.

Забор для n = 7 и h = [1, 2, 6, 1, 1, 7, 1]

Поликарп приобрел рояль и теперь ищет наилучший способ занести рояль в свой дом. Для того, чтобы осуществить задуманное, ему придется выломать ровно k подряд идущих досок в заборе. Так как высокие доски выламывать сложнее, Поликарп хочет найти такие k последовательных досок, что сумма их высот минимальна.

Напишите программу, которая найдет номера k последовательных досок с наименьшей суммой высот. Обратите внимание, забор не окружает дом Поликарпа, а находится перед ним (другими словами, забор не зациклен).

Входные данные

В первой строке входных данных содержатся целые числа n и k (1 ≤ n ≤ 1.5·105, 1 ≤ k ≤ n) — количество досок в заборе и ширина проема для рояля. Вторая строка содержит последовательность целых чисел h1, h2, ..., hn (1 ≤ hi ≤ 100), где hi — высота i-ой доски забора.

Выходные данные

Выведите такое j, что сумма высот досок j, j + 1, ..., j + k - 1 — наименьшая возможная. Если таких j несколько, то выведите любое из них.

Примечание

В примере требуется найти три последовательные доски с минимальной суммой высот. В данном случае три доски с номерами 3, 4 и 5 обладают требуемым свойством и имеют суммарную высоту 8.

B. Free Market

дп жадные алгоритмы *2200

Недавно Джон Доу обнаружил в своем городе «Free Market» — место, где можно бесплатно обменять свои вещи на другие.

Джон знает, что всего в его городе есть n предметов (каждый существует в единственном экземпляре). На рынок можно принести любой набор предметов и обменять его на любой другой. Заметьте, что предметы существуют в единственном экземпляре и это значит, что нельзя поменять набор {a, b} на набор {v, a}. Но при этом всегда можно обменять набор x на любой набор y, если не существует предмета p, такого, что p входит в x и p входит в y.

Для каждого предмета Джон знает его стоимость ci. Совесть не позволяет Джону обменять набор предметов x на набор предметов y, если s(x) + d < s(y) (s(x) — суммарная стоимость предметов в наборе x).

За один день Джон может только один раз поменять один набор на другой. Изначально у него нет никаких предметов. Джон хочет получить набор предметов с как можно большей суммарной стоимостью. Найдите стоимость такого набора и минимальное количество дней, за которое Джон может получить его.

Входные данные

В первой строке записаны через пробел два целых числа n, d (1 ≤ n ≤ 50, 1 ≤ d ≤ 104) — количество предметов на рынке и показатель совести Джона, соответственно. Во второй строке через пробел записано n целых чисел ci (1 ≤ ci ≤ 104).

Выходные данные

Выведите через пробел два целых числа: максимально возможную сумму в наборе предметов, который может получить Джон и минимальное количество дней, которое потребуется на то, чтобы получить такой набор.

Примечание

В первом примере Джон может действовать следующим образом:

  • Взять первый предмет (1 - 0 ≤ 2).
  • Обменять первый предмет на второй (3 - 1 ≤ 2).
  • Взять первый предмет (1 - 0 ≤ 2).

C. Дима и салат

дп *1900

Дима, Инна и Сережа собрались в комнате. Правильно, кое-кто лишний. Чтобы поднять Сереже настроение и вдохновить его на прогулку, Инна решила что-нибудь приготовить.

В холодильнике Димы и Сережи есть n фруктов. Каждый фрукт имеет две характеристики: вкусность и калорийность. Инна решила приготовить свежий фруктовый салат, поэтому она хочет выбрать несколько фруктов из холодильника для салата. Инна руководствуется следующим принципом при выборе фруктов: отношение суммарной вкусности выбранных фруктов к суммарной калорийности должно быть равно k. Другими словами , где aj — вкус j-го выбранного фрукта, а bj — его калорийность.

Инна еще не выбрала фрукты, она задумалась: чему равна максимальная суммарная вкусность выбранных фруктов, если она строго будет придерживаться своего принципа? Помогите Инне решить эту кулинарную задачу, ведь на кону семейное счастье!

Инна очень любит Диму, поэтому хочет сделать салат минимум из одного фрукта.

Входные данные

Первая строка входных данных содержит два целых числа n, k (1 ≤ n ≤ 100, 1 ≤ k ≤ 10). Вторая строка входных данных содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 100) — вкусности фруктов. Третья строка входных данных содержит n целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 100) — калорийности фруктов. Фрукт номер i имеет вкусность ai и калорийность bi.

Выходные данные

Если Инна никак не сможет выбрать фрукты для салата, в единственной строке выведите -1. Иначе выведите единственное целое число — максимально возможную сумму вкусностей выбранных фруктов.

Примечание

В первом тестовом примере можно получить суммарную вкусность фруктов 18, выбрав фрукт номер 1 и фрукт номер 2, тогда суммарная калорийность будет равна 9. Выполняется , что и требует Инна.

Во втором тестовом примере невозможно так выбрать фрукты, чтобы требование Инны выполнилось.

E. Сережа и отрезки

дп Комбинаторика *2700

Сережа интересуется отрезками чисел, поэтому он приготовил для вас задачу про отрезки. Отрезок чисел — это пара целых чисел [l, r] (1 ≤ l ≤ r ≤ m). Отрезок [l1, r1] принадлежит отрезку [l2, r2], если выполняется условие: l2 ≤ l1 ≤ r1 ≤ r2.

Сережа хочет записать на листке последовательность из n отрезков [l1, r1], [l2, r2], ..., [ln, rn]. Причем никакой отрезок в последовательности не должен принадлежать какому-то другому отрезку в последовательности. А еще Сережа очень любит число x, поэтому он хочет, что бы хотя бы один из отрезков имел левую границу li = x. Сережу интересует вопрос: сколько существует различных способов записать такие отрезки?

Помогите Сереже, найдите описанное количество способов по модулю 1000000007 (109 + 7).

Два способа считаются различными, если найдется такое j (1 ≤ j ≤ n), что j-ые отрезки в двух соответствующих последовательностях не равны.

Входные данные

Первая строка содержит целые числа n, m и x (1 ≤ n·m ≤ 100000, 1 ≤ x ≤ m) — количество отрезков, ограничения на числа в отрезках и любимое число Сережи.

Выходные данные

В единственную строку выведите ответ по модулю 1000000007 (109 + 7).

Примечание

В третьем примере подходят следующие последовательности отрезков: {[1,  1],  [3,  3]}, {[1,  2],  [3,  3]}, {[2,  2],  [3,  3]}, {[3,  3],  [1,  1]}, {[3,  3],  [2,  2]}, {[3,  3],  [1,  2]}.

B. Сережа и суффиксы

дп Структуры данных *1100

У Сережи есть массив a, состоящий из n целых чисел a1, a2, ..., an. Мальчику не сидится на месте, и он решил заняться изучением массива. Сережа выписал на листочек m целых чисел l1, l2, ..., lm (1 ≤ li ≤ n). Для каждого числа li он хочет узнать: сколько есть различных чисел среди чисел ali, ali + 1, ..., an?

Сережа выписывал и выписывал нужные элементы массива, но массив был большой, а времени у Сережи мало. Помогите ему, найдите ответ на описанный вопрос для каждого li.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 105). Во второй строке содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 105) — элементы массива.

В следующих m строках записаны целые числа l1, l2, ..., lm. В i-ой строке записано целое число li (1 ≤ li ≤ n).

Выходные данные

Выведите m строк — в i-ой строке выведите ответ для числа li.

D. Валера и дураки

графы дп кратчайшие пути поиск в глубину и подобное *2200

Одним прекрасным утром n дураков выстроились в ряд. После этого они пронумеровали друг друга номерами от 1 до n включительно. Каждый дурак получил уникальный номер. Дураки решили не менять своих номеров до конца веселья.

У каждого дурака есть ровно k патронов и пистолет. Вероятность того, что дурак с номером i убьет дурака, в которого совершит выстрел, равна pi процентов.

Дураки решили провести несколько раундов веселья. Каждый раунд веселья состоит в следующем: каждый еще живой дурак совершает выстрел в другого живого дурака с наименьшим номером (дураки не настолько глупы, чтобы стрелять в самих себя). Все выстрелы совершаются одновременно. Если остался ровно один живой дурак, то он не совершает выстрелов.

Назовем ситуацией множество номеров всех живых дураков на некоторый момент времени. Будем говорить, что ситуация возможна, если для некоторого целого числа j (0 ≤ j ≤ k) существует ненулевая вероятность, что через j раундов веселья будет иметь место именно такая ситуация.

Валера знает числа p1, p2, ..., pn и k. Помогите Валере определить количество различных возможных ситуаций.

Входные данные

В первой строке заданы два целых числа n, k (1 ≤ n, k ≤ 3000) — изначальное количество дураков и количество патронов у каждого дурака.

Во второй строке задано n целых чисел p1, p2, ..., pn (0 ≤ pi ≤ 100) — указанные вероятности (в процентах).

Выходные данные

Выведите единственное число — ответ на задачу.

Примечание

В первом примере любая ситуация возможна, кроме ситуации {1, 2}.

Во втором примере ровно один дурак, поэтому он не совершает выстрелов.

В третьем примере возможны ситуации {1, 2} (после нуля раундов) и «пустая» ситуация {} (после одного раунда).

В четвертом примере возможна только ситуация {1, 2, 3}.

D. Расписание занятий

дп Комбинаторика математика *2300

В свободное от компьютерных игр время Петя ходит в университет на занятия. Каждый день занятия на факультете у Пети состоят из двух пар. Этаж на котором проходят занятия у Пети, представляет из себя длинный коридор, вдоль которого расположены M аудиторий, пронумерованных от 1 до M.

Поток, на котором учится Петя, разбит на N групп. Недавно, Петя заметил, что расписание занятий у этих групп обладает следующей особенностью: номер аудитории, в которой проходит первое занятие у какой-то группы не превосходит номера аудитории для второго занятия этой группы.

Как-то раз, Петя решил посчитать, сколькими способами можно составить расписание занятий для всех групп. Расписание — это набор из 2N чисел: для каждой группы номер аудитории для первого занятия, и номер аудитории для второго занятия. К сожалению, он быстро сбился со счета, и решил, считать только расписания, удовлетворяющие следующим условиям:

1) На первом занятии в i-ой аудитории должно находиться ровно Xi групп.

2) В i-ой аудитории может поместиться не более чем Yi групп.

Помогите Пете посчитать количество расписаний удовлетворяющих всем этим условиям. Так как и таких расписаний может быть много, выведите ответ по модулю 109 + 7.

Входные данные

В первой строке записано одно целое число M (1 ≤ M ≤ 100) — количество аудиторий.

Во второй строке, через пробел, записаны M целых чисел — Xi (0 ≤ Xi ≤ 100) количество групп, находящихся в i-ой аудитории во время первого занятия.

Во третьей строке, через пробел, записаны M целых чисел — Yi (0 ≤ Yi ≤ 100) максимальное количество групп, которые могут одновременно находится в i - ой аудитории.

Гарантируется, что все Xi ≤ Yi, и что сумма всех Xi положительна и не превосходит 1000.

Выходные данные

В единственной строке выведите ответ на задачу по модулю 109 + 7.

Примечание

Во втором тесте из примера первое и второе занятия у каждой группы должны проходить в одной и той же аудитории, поэтому расписания будут отличаться только перестановкой номеров этих аудиторий для каждой группы, то есть 3! = 6.

E. Летнее чтение

дп жадные алгоритмы *2500

В школе Васе на лето задали прочитать внушительный список книг. Вася, в отличие от многих современных школьников, любит читать, поэтому он каждый день лета читал какую-нибудь книгу.

Читая книги, Вася вел дневник летнего чтения, в котором он для каждого дня отмечал порядковый номер книги из списка, которую он читал в этот день. Книги в списке нумеруются с 1, и Вася читает их именно в том порядке, в котором они идут в списке. Вася никогда не переходит к следующей книге из списка, пока не дочитал текущую до конца. К сожалению, Вася вел дневник не очень ответственно, поэтому в некоторые дни он забывал отметить номер книги, и записи для этих дней остались пустыми.

Поскольку Вася знает, что учительница литературы обязательно потребует сдать ей дневник чтения, ему нужно восстановить отсутствующие записи в дневнике. Помогите ему это сделать и заполните все пропуски. Вася точно знает, что на каждую книгу он тратил не менее двух дней, но и не более пяти дней. Все книги, которые Вася начинал читать, он дочитал за лето до конца. При восстановлении пропусков можно считать, что в списке на лето было очень много книг (настолько много, что их все невозможно прочитать за лето). Если существует несколько способов корректным образом восстановить записи в дневнике, то Вася предпочтет такой способ, из которого бы следовало, что он прочитал за лето наибольшее количество книг.

Входные данные

В первой строке записано целое число n — количество дней лета (2 ≤ n ≤ 2·105). Во второй строке записано n целых чисел a1, a2, ... an — записи в дневнике в порядке их внесения (0 ≤ ai ≤ 105). В случае, если в i-й день Вася забыл записать номер книги, ai равно 0.

Выходные данные

Если невозможно корректно заполнить пропуски в дневнике (возможно, он изначально содержал ошибки), выведите «-1».

Иначе в первой строке выведите максимальное количество книг, которое Вася мог, согласно дневнику, прочитать за лето. Во второй строке выведите n чисел — дневник с корректно вставленными записями. Если оптимальных решений несколько, разрешается вывести любое из них.

B. Весело считать прямоугольники

дп Перебор разделяй и властвуй *1900

Дана таблица размера n × m, в каждой ячейке которой записано целое число: ноль или единица. Обозначим ячейку в i-ой строке и j-ом столбце как (i, j).

Определим «прямоугольник» четверкой целых чисел a, b, c, d (1 ≤ a ≤ c ≤ n; 1 ≤ b ≤ d ≤ m). Прямоугольник задает множество ячеек таблицы {(x, y) :  a ≤ x ≤ c, b ≤ y ≤ d}. Определим «хороший прямоугольник» как прямоугольник, включающий только ячейки с нулями.

Вам надо ответить на следующие q запросов: посчитать количество хороших прямоугольников, у которых все ячейки содержатся в данном прямоугольнике.

Входные данные

В первой строке записано три целых числа: n, m и q (1 ≤ n, m ≤ 40, 1 ≤ q ≤ 3·105). Каждая из следующих n строк содержит m символов — таблицу. Мы можем считать, что строки таблицы пронумерованы сверху вниз, а столбцы — слева направо. И строки, и столбцы пронумерованы, начиная с единицы.

Каждая из следующих q строк содержит по запросу — четыре целых числа, описывающих текущий прямоугольник, a, b, c, d (1 ≤ a ≤ c ≤ n; 1 ≤ b ≤ d ≤ m).

Выходные данные

Для каждого запроса выведите ответ — единственное целое число на отдельной строке.

Примечание

В первом примере дана квадратная таблицы размера 5 × 5, а первый, второй и третий запросы представлены в следующем рисунке.

  • В первом запросе есть 10 хороших прямоугольников, пять размера 1 × 1, два — 2 × 1, два — 1 × 2 и один — 1 × 3.
  • Во втором запросе есть всего один хороший прямоугольник размера 1 × 1.
  • В третьем запросе есть 7 хороших прямоугольников, четыре размера 1 × 1, два размера 2 × 1 и один размера 3 × 1.

C. Весело смотреть на фейерверки

дп математика Структуры данных *2100

На главной улице города устраивают фестиваль. Улица поделена на n участков, пронумерованных от 1 до n слева направо. Расстояние от любого участка до соседнего равно 1.

На фестивале запустят m фейерверков. При этом, i-ый (1 ≤ i ≤ m) запуск придется на время ti в участке ai. Если вы будете в участке x (1 ≤ x ≤ n) во время i-ого запуска, вы получите счастья в размере bi - |ai - x| (обратите внимание, что значение счастья может быть отрицательным).

За единичный промежуток времени вы можете пройти до d единиц длины, но сходить с главной улицы запрещено. В начальный момент времени (момент времени 1) вы можете оказаться на произвольном участке, ваша цель — максимизировать сумму полученного от просмотра фейерверков счастья. Найдите наибольшее суммарное счастье.

Обратите внимание, что в одно время могут запускаться два или несколько фейерверков.

Входные данные

В первой строке записано три целых числа n, m, d (1 ≤ n ≤ 150000; 1 ≤ m ≤ 300; 1 ≤ d ≤ n).

В каждой из следующих m строк записаны целые числа ai, bi, ti (1 ≤ ai ≤ n; 1 ≤ bi ≤ 109; 1 ≤ ti ≤ 109). В i-ой строке записано описание i-ого запуска.

Гарантируется, что условие ti ≤ ti + 1 (1 ≤ i < m) будет удовлетворено.

Выходные данные

Выведите единственное целое число — максимальную сумму счастья, которую можно получить от просмотра всех фейерверков.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

C. Инна и Дима

графы дп поиск в глубину и подобное реализация *1900

Инна и Дима купили в магазине табличку размера n × m. В каждой ячейке этой таблички записана одна из букв: «D», «I», «M», «A».

Инна любит Диму, поэтому она хочет, двигаясь по табличке, собрать его имя как можно больше раз. Для этого Инна действует следующим образом:

  1. изначально Инна выбирает некоторую ячейку таблицы, в которой записана буква «D»;
  2. затем Инна может перейти в одну из соседних по стороне ячеек таблицы, в которой записана буква «I»; затем из этой ячейки она может перейти в одну из соседних по стороне ячеек таблицы, в которой записана буква «M»; затем в одну из соседних по стороне ячеек таблицы, в которой записана буква «A», после чего Инна считает, что собрала целиком имя своего возлюбленного;
  3. следующим ходом Инна может перейти в одну из соседних по стороне ячеек таблицы, в которой записана буква «D», и далее аналогичным образом продолжить набор имени DIMA. Инна никогда не пропускает буквы, то есть из буквы «D» она всегда переходит в букву «I», из буквы «I» — в букву «M», из буквы «M» — в букву «A», а из буквы «A» — в букву «D» для начала набора имени еще раз.

В зависимости от выбора первоначальной ячейки таблицы Инна может собрать слово DIMA либо бесконечное количество раз, либо некоторое положительное конечное количество раз, либо вообще не может собрать слово DIMA ни разу. Помогите Инне определить, какое максимальное количество раз она может собрать слово DIMA.

Входные данные

Первая строка входных данных содержит два целых числа n и m (1 ≤ n, m ≤ 103).

Далее следует n строк, описывающих таблицу Инны и Димы. Каждая строка содержит m символов. Каждый символ — это один из символов: «D», «I», «M», «A».

Обратите внимание, не гарантируется, что таблица содержит хотя бы одну букву «D».

Выходные данные

Если Инна не может собрать ни одного слова DIMA, в единственной строке выведите «Poor Dima!» без кавычек. Если Инна может собрать бесконечное количество слов DIMA, выведите «Poor Inna!» без кавычек. Иначе выведите целое число — какое максимальное количество раз Инна сможет собрать слово DIMA.

Примечание

Пояснения к примерам:

В первом тестовом примере, Инна не может собрать слово DIMA ни разу.

Во втором тестовом примере, Инна может собрать бесконечное количество слов DIMA. Для этого она должна двигаться по часовой стрелке, начиная от правого нижнего угла.

В третьем тестовом примере, выгоднее всего изначально выбрать ячейку в левом верхнем углу таблицы. Начиная от этой ячейки, можно собрать слово DIMA 4 раза.

D. Инна и последовательность

Бинарный поиск Деревья дп Структуры данных *2000

Дима долго думал, что подарить Инне, и подарил ей пустую последовательность w. Теперь ребята хотят заполнить последовательность w нулями и единицами вместе. Для этого они решили поиграть в забавную игру.

Перед началом игры Дима загадывает m целых чисел a1, a2, ..., am (1 ≤ a1 < a2 < ... < am). Далее Инна и Дима начинают играть, то есть добавлять числа в последовательность w. Каждое новое число ребята дописывают в конец последовательности. В некоторые моменты времени Дима решает, что игра слишком близится к концу, поэтому (он же хочет играть с Инной как можно дольше) Дима сильно стукает кулаком по столу. При этом a1-е, a2-е, a3-е, ..., ak-е числа от начала одновременно вылетают из последовательности (в последовательности становится на k чисел меньше). Здесь k — такое максимальное число, что значение ak не превосходит текущей длины последовательности. Если число a1 больше текущей длины w, то из последовательности ничего не вылетает.

Вам дана хронологическая последовательность событий в игре. Каждое событие — это либо добавление числа в конец последовательности w, либо стук Димы по столу. Определите чему будет равна последовательность после того, как все эти события произойдут.

Входные данные

Первая строка входных данных содержит два целых числа n и m (1 ≤ n, m ≤ 106) — количество событий и количество загаданных Димой чисел.

Следующая строка содержит m различных целых чисел ai (1 ≤ ai ≤ 106), отсортированных в порядке возрастания.

Следующие n строк описывают события в хронологическом порядке. Каждая строка содержит одно целое число: -1, 0 или 1. Число -1 означает, что Дима стукает по столу. Число 0 означает, что Инна и Дима добавляют в конец последовательности число 0. Число 1 означает, что Инна и Дима добавляют в конец последовательности число 1.

Выходные данные

В единственной строке выведите последовательность из 0 и 1 — содержимое w после всех событий. Элементы последовательности должны быть выведены в порядке от начала к концу последовательности.

Если после всех событий последовательность w окажется пустой, выведите «Poor stack!».

B. Наибольшая подматрица 2

дп реализация сортировки Структуры данных *1600

Задана матрица, состоящая из нулей и единиц, размером n × m. Разрешается переставить ее строки местами. Какую наибольшую (по площади) подматрицу, состоящую только из единиц, можно получить в заданной матрице описанными операциями?

Пусть строки матрицы a пронумерованы от 1 до n сверху вниз, а столбцы — от 1 до m слева направо. Ячейку матрицы на пересечении i-ой строки и j-го столбца будем обозначать (i, j). Формально, подматрицей матрицы a будем называть четверку d, u, l, r (1 ≤ d ≤ u ≤ n; 1 ≤ l ≤ r ≤ m). Будем считать, что подматрица содержит в себе ячейки (i, j) (d ≤ i ≤ ul ≤ j ≤ r). Площадью подматрицы будем называть количество ячеек, которые она в себе содержит.

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 5000). В следующих n строках записано по m символов — матрица a. Матрица a содержит только символы: «0» и «1». Обратите внимание, что элементы матрицы заданы в строках без пробелов.

Выходные данные

Выведите единственное целое число — площадь максимальной полученной подматрицы. Если подматрицу из единиц невозможно получить, выведите 0.

E. Красно-черное дерево

дп математика реализация *3000

Задано взвешенное дерево, состоящее из n вершин. Каждая вершина дерева покрашена либо в черный цвет, либо в красный. Красно-черное дерево называется красивым, если для любой его вершины найдется черная вершина, расстояние до которой не более x.

Расстоянием между двумя вершинами называется кратчайший путь между ними.

Вам задано красно-черное дерево. Требуется сделать его красивым за минимальное количество операций обмена цветом. За одну операцию обмена цветом разрешается выбрать две вершины разного цвета и каждую из них перекрасить в другой цвет. Другими словами, если выбрана красная вершина p и черная вершина q, за одну операцию разрешается перекрасить p в черный цвет, а q в красный.

Выведите минимальное количество требуемых операций.

Входные данные

В первой строке записано два целых числа n и x (2 ≤ n ≤ 500; 1 ≤ x ≤ 109). Следующая строка содержит n целых чисел, каждое из которых либо нуль, либо единица. Если i-ое число равно 1, то вершина i дерева — черная, иначе вершина i — красная. В следующих n - 1 строках записаны ребра дерева. В j-ой строке записаны целые числа uj vj wj (1 ≤ uj, vj ≤ nuj ≠ vj; 1 ≤ wj ≤ 109), которые обозначают, что в дереве есть ребро веса wj между вершинами vj и uj.

Считайте вершины дерева пронумерованными от 1 до n.

Выходные данные

Выведите единственное целое число — минимальное количество требуемых операций обмена.

Если получить красивое дерево невозможно ни за какое количество операций, выведите -1.

C. Captains Mode

битмаски дп игры *2200

Костя — профессиональный киберспортсмен, специализирующийся на дисциплине Dota 2. Недавно компания Valve, разработчик этой игры, выпустила новый патч, перевернувший баланс игры с ног на голову. Костя, являясь капитаном команды, понимает, что наибольшая ответственность лежит на нем, поэтому он хочет прибегнуть к анализу нововведений патча с математической точки зрения, чтобы выбирать наилучших героев для своей команды в каждом матче.

В матче Dota 2 участвуют две команды, каждая из которых должна взять для себя некоторых героев, за которых впоследствии будут играть члены этой команды, причем запрещено выбирать одного и того же героя несколько раз, даже разными командами. На крупных киберспортивных турнирах, таких, в которых собирается участвовать команда Кости, матчи проходят в режиме Captains Mode. В этом режиме для выбора героев капитаны команд в определенном, заранее установленном порядке совершают одно из двух возможных действий: пик (pick) или бан (ban).

  • Пик — это выбор героя для своей команды. После того, как капитан команды сделал пик, герой, которого он выбрал, отправляется в его команду (за него впоследствии будет играть один из членов команды) и больше не может быть выбран ни одной из команд.
  • Бан — это запрет героя. После бана герой не отправляется ни в одну из команд, однако он также больше не может быть выбран ни одной из команд.

Капитан команды может пропустить пик или бан. В случае пропуска пика в его команду добавляется случайный герой из тех, что были доступны на данный момент, а в случае пропуска бана не запрещается ни один герой, как будто этого бана и не было.

Костя уже определил силу всех героев с учетом исправлений нового патча. Разумеется, Костя знает и порядок пиков и банов. Сила команды равна сумме сил входящих в нее героев, и обе команды, участвующие в матче, стремятся максимизировать разницу в силе в свою сторону. Помогите Косте определить, у какой команды в матче — у первой или у второй — преимущество, и насколько оно велико.

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 100) — количество героев в Dota 2.

Во второй строке записаны n целых чисел s1, s2, ..., sn (1 ≤ si ≤ 106) — силы всех героев.

В третьей строке записано единственное целое число m (2 ≤ m ≤ min(n, 20)) — количество действий, которые должны выполнить капитаны команд.

Следующие m строк имеют вид «action team», где action — действие, которое необходимо выполнить: пик (обозначающийся символом «p») или бан (обозначающийся символом «b»), а team — номер команды, которой предстоит выполнить это действие (число 1 или 2).

Гарантируется, что каждая команда делает хотя бы один пик. Кроме того, количество пиков, совершаемых каждой командой, совпадает, и количество банов, совершаемых каждой командой, совпадает.

Выходные данные

Выведите единственное целое число — разность между силой первой команды и силой второй команды, если капитаны обоих команд будут действовать оптимально.

E. Cookie Clicker

геометрия дп *2800

Костя играет в компьютерную игру Cookie Clicker, основная цель которой — накопление запасов печенья. Получать печенья можно с помощью различных строений: можно просто кликать по специальному полю на экране, получая печенья за клики, можно купить фабрику печеньев, алхимическую лабораторию, машину времени, и все это будет приносить много-много печеньев.

В начале игры (момент времени 0) у Кости есть 0 печеньев и ни одного строения. На его выбор доступно n строений: i-ое строение стоит ci печеньев и в конце каждой секунды приносит vi печеньев. Кроме того, чтобы играть было еще интереснее, Костя решил поставить себе ограничение: в каждый момент времени он будет использовать только одно строение. Разумеется, он может по своему усмотрению менять активное строение каждую секунду.

Важно, что в версии игры, в которую играет Костя, покупать новые строения и менять активное строение можно только в моменты времени, кратные одной секунде. В один момент времени Костя может купить новое строение и тут же начать его использовать. Если Костя начал использовать строение в момент времени t, то первую прибыль оно сможет принести лишь в момент времени t + 1.

Костя хочет заработать не менее s печеньев как можно быстрее. Определите, за сколько секунд он сможет это сделать.

Входные данные

В первой строке находятся два целых числа n и s (1 ≤ n ≤ 2·105, 1 ≤ s ≤ 1016) — количество строений в игре и количество печеньев, которое Костя хочет заработать.

В каждой из следующих n строк записано два целых числа vi и ci (1 ≤ vi ≤ 108, 0 ≤ ci ≤ 108) — количество печеньев, которое приносит i-ое строение за одну секунду, и стоимость этого строения.

Выходные данные

Выведите единственное целое число — минимальное количество секунд, за которое Костя сможет заработать не менее s печеньев. Гарантируется, что он может это сделать.

D. Новогоднее письмо

битмаски дп Перебор *2000

Во многих странах есть новогодняя традиция — писать письма дедушке Морозу со своими пожеланиями подарков на новый год. Вася — обыкновенный мальчик-программист. Как все обыкновенные мальчики, он в канун нового года собирается написать письмо дедушке Морозу.

Вася уже придумал алгоритм, по которому он будет писать письмо. Сначала он выберет две строки s1 и s2, состоящие из прописных латинских букв. Далее мальчик составит строку sk, пользуясь рекуррентным соотношением sn = sn - 2 + sn - 1, операция '+' обозначает конкатенацию (то есть последовательную запись) строк в заданном порядке. После чего Вася запишет строку sk на листочек, положит его в письмо и пошлет письмо деду Морозу.

Вася точно уверен: чтобы дед Мороз подарил ему самый лучший подарок, нужно чтобы в полученной строке sk подстрока AC встречалась ровно x раз (сокращение AC напоминает Васе о сданных задачах). Более того, Вася решил, что строка s1 должна иметь длину n, а строка s2 — длину m. Больше Вася ничего не решил.

У Васи сейчас срочные новогодние дела, поэтому он просит вас выбрать для него две строки s1 и s2 требуемым образом. Помогите Васе.

Входные данные

В первой строке записано четыре целых числа k, x, n, m (3 ≤ k ≤ 50; 0 ≤ x ≤ 109; 1 ≤ n, m ≤ 100).

Выходные данные

В первой строке выведите строку s1, состоящую из n заглавных латинских букв. Во второй строке выведите строку s2, состоящую из m заглавных латинских букв. Если существует несколько подходящих строк, разрешается вывести любую.

Если требуемой пары строк не существует, выведите «Happy new year!» без кавычек.

G. Новогодний кактус

дп *3100

Джеку и Джилл надоела традиционная новогодняя елка, теперь у них стоит дома новогодний кактус! Кактус — это такой связный неориентированный граф, в котором любые два простых цикла имеют не более одной общей вершины, другими словами в этом графе не существует ребер, лежащих более чем на одном простом цикле.

31-го декабря они собираются нарядить этот кактус, подвешивая игрушки на его вершины. На каждой вершине может висеть не более одной игрушки — либо висеть будет игрушка, которую повесил Джек, либо игрушка, которую повесила Джилл. Возможно, что на вершине вообще не будет игрушек.

Так как они недавно неполадили, то они не хотят, чтобы какое-либо ребро соединяло две вершины, на одной из которых игрушка Джека, а на другой — игрушка Джилл.

Джек уже решил, что он повесит a игрушек. Какое максимальное количество игрушек b сможет повесить Джилл, если они действуют сообща с целью максимизировать это значение? Ваша задача написать программу, которая находит искомое b для всех a от 0 до количества вершин новогоднего кактуса.

Входные данные

В первой строке содержится два целых числа n и m (1 ≤ n ≤ 2500, n - 1 ≤ m) — количество вершин и ребер новогоднего кактуса. В следующих m строках записаны по два целых числа a, b (1 ≤ a, b ≤ n, a ≠ b) означающие, что очередное ребро соединяет вершины a и b. Между любой парой вершин не более одного ребра.

Выходные данные

В первой строке должны быть записаны ba (для всех 0 ≤ a ≤ n) разделенные пробелом, где ba равно максимальному количеству игрушек Джилл на кактусе при условии, что на кактусе повешено a игрушек Джека. Числа ba выводите в порядке увеличения a.

Примечание

Кактус из второго примера изображен на рисунке:

E. Ну-ка, покатились!

дп сортировки *1800

На числовой прямой, направленной слева направо, находятся n шариков с координатами x1, x2, ..., xn. Размеры шариков будем считать бесконечно малыми, то есть в этой задаче каждый из них будем считать материальной точкой. Вы можете в некоторые из них воткнуть булавки, стоимость втыкания в i-ый шарик равна ci, число ci может быть отрицательным. После того, как вы выберите и воткнете нужные вам булавки, шарики начнут катиться влево по правилу: если в шарик воткнута булавка, то он не двигается, иначе шарик катится до ближайшего другого шарика, в который булавка воткнута, где заканчивает свое движение. Если слева от данного неприколотого шарика не существует приколотого, то считается, что шарик укатывается бесконечно влево, и вы заплатите за это бесконечно большой штраф. В случае, если никакой шарик не укатился бесконечно влево, то штраф будет состоять из двух слагаемых:

  • сумма стоимостей воткнутых булавок;
  • сумма длин путей каждого из шариков, то есть сумма абсолютных величин разностей их начальных и конечных позиций.

Ваша задача — выбрать и приколоть некоторые шарики так, чтобы штраф, который вы заплатите, был как можно меньше.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 3000) — количество шариков. В следующих n строках даны описания шариков парами целых чисел xi, ci ( - 109 ≤ xi, ci ≤ 109). Числа разделяются пробелом. Каждое описание находится на отдельной строке. Никакие два шарика не имеют одинакового начального положения.

Выходные данные

Выведите единственное число — наименьший штраф, который вам придется заплатить.

F. Умный мальчик

дп игры Строки *2100

Однажды Вася и Петя придумали новую игру и назвали ее «Умный мальчик». Для игры они зафиксировали некоторый набор слов — словарь. Допускается, что словарь содержит одинаковые слова.

Правила игры таковы: сначала первый игрок выбирает любую букву (слово длины 1) из любого слова из словаря и записывает ее на лист бумаги. Второй игрок приписывает к этой букве некоторую другую в начало или в конец, таким образом получая уже слово длины 2, затем опять ходит первый игрок, и он опять приписывает некоторую букву в начало или в конец, получая слово длины 3. И так далее. Но игрок не имеет права нарушать условие: новое записанное слово должно являться подстрокой некоторого слова из словаря. Проигрывает тот, кто не может увеличить текущую строку так, чтобы не нарушалось условие.

Также если после хода на бумаге записана некоторая строка s, то игрок, сделавший этот ход, получает количество очков по формуле:

где:

  • — порядковый номер символа c в латинском алфавите, пронумерованном с 1. Например, , а .
  • — количество слов из словаря, где встречается строка s как подстрока хотя бы один раз.

Ваша задача — узнать, кто выиграет в этой игре, и итоговый счет. Каждый игрок играет оптимально, и в первую очередь стремится выиграть, во вторую — максимизировать свои очки, в третью — минимизировать очки соперника.

Входные данные

В первой строке входных данных записано целое число n — количество слов в зафиксированном словаре (1 ≤ n ≤ 30). Далее в n строках по одному на строке записаны слова из словаря — непустые строки, состоящие из строчных букв латинского алфавита, длиной не более 30 символов. Среди списка слов могут быть одинаковые.

Выходные данные

В первую строку выходных данных выведите строку «First» или «Second» — кто выиграет в игре. Во вторую строку выведите количество очков у первого игрока и количество очков у второго игрока после завершения игры. Числа разделите одним пробелом.

H. Великий марафон

дп *2400

В день празднования Дня Зависимости в Берляндии, было решено устроить грандиозный марафон. Берляндия состоит из n городов, некоторые из которых связаны двусторонними дорогами. Каждая дорога имеет некоторую длину. Города пронумерованы от 1 до n. Известно, что из любого города можно добраться по дорогам в любой другой.

В соревновании принимают участие n бегунов, по одному из каждого города. Но берляндские бегуны по своей натуре — болтуны, и поэтому жюри приняло меры для предотвращения больших скоплений участников марафона. Жюри решило, чтобы каждый спортсмен стартовал из своего родного города. Перед стартом каждый спортсмен получит листок бумаги, на котором будет написано, в каком городе у него расположен финиш. Финиш для каждого спортсмена назначается случайным образом, но не может совпадать с его стартом. Допускается, чтобы у нескольких спортсменов финиш располагался в одном и том же городе. Все спортсмены стартуют одновременно, и каждый бежит от старта до финиша по кратчайшему маршруту. Скорости всех спортсменов одинаковые и равны 1.

По итогам соревнования будет составлена таблица результатов, в которой спортсмены будут отсортированы по неубыванию времени, которое они потратили на преодоление дистанции. Первые g спортсменов в этой таблице получат золотые медали, следующие s спортсменов — серебряные, а остальные бронзовые. Причем, если два или более спортсмена потратили одинаковое время на преодоление дистанции, то они упорядочиваются по возрастанию номеров городов, из которых они стартовали. Из этого следует, что никакие два спортсмена не делят одно и то же место.

По правилам соревнования количество золотых медалей g должно удовлетворять неравенству g1 ≤ g ≤ g2, где g1 и g2 исторически сложившиеся значения. Аналогично, количество серебряных медалей s должно удовлетворять неравенству s1 ≤ s ≤ s2, где s1 и s2 тоже исторически сложившиеся значения.

В настоящий момент, до начала соревнования, неизвестны пункты назначения каждого из спортсменов. Однако пресса требует каких-либо подробностей, и поэтому Вам поручили подсчитать количество способов распределить медали. Два способа распределения считаются различными, если хотя бы один спортсмен получил при этих распределениях медали разного достоинства.

Входные данные

В первой строке входных данных заданы целые числа n и m (3 ≤ n ≤ 50, n - 1 ≤ m ≤ 1000), где n — количество городов в Берляндии, а m — количество дорог.

Далее в m строках даны описания дорог в виде тройки целых чисел v, u, c — номера соединяемых городов и ее длина (1 ≤ v, u ≤ n, v ≠ u, 1 ≤ c ≤ 1000). Между каждой парой городов — не более одной дороги.

В последней строке записаны целые числа g1, g2, s1, s2 (1 ≤ g1 ≤ g2, 1 ≤ s1 ≤ s2, g2 + s2 < n). Числа во входных данных, расположенные на одной строке, разделены пробелом.

Выходные данные

Выведите единственное число — количество способов распределить медали. Гарантируется, что это число помещается в стандартный знаковый 64-битный тип данных.

E. Ксения и комбинаторика

дп Комбинаторика *2600

У Ксюши — сессия, сегодня она учит комбинаторику. Вот одна из задач, которую ей нужно научиться решать.

Сколько существует различных деревьев, состоящих из n вершин, каждое из которых обладает следующими свойствами:

  • дерево — помеченное, то есть вершины дерева пронумерованы от 1 до n;
  • каждая вершина дерева связана не более чем с тремя другими вершинами, при этом вершина с номером 1 связана не более чем с двумя другими вершинами;
  • мощность максимального паросочетания дерева равна k.

Два дерева считаются различными, если существуют такие две вершины u и v, что в одном дереве они соединены ребром, а в другом — нет.

Помогите Ксюше решить задачу для заданных n и k. Так как ответ может быть достаточно большим, выведите его по модулю 1000000007 (109 + 7).

Входные данные

В первой строке записаны два целых числа n, k (1 ≤ n, k ≤ 50).

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю 1000000007 (109 + 7).

Примечание

Если вы не знакомы с понятием максимальное паросочетание, почитайте статью по ссылке: http://ru.wikipedia.org/wiki/Паросочетание.

D. Антиматерия

дп *2300

Яхуб неожиданно открыл секретную лабораторию. Там он нашел n устройств, выстроенных в линию и пронумерованных от 1 до n слева направо. Каждое устройство i (1 ≤ i ≤ n) может создать либо ai единиц материи, либо ai единиц антиматерии.

Яхуб хочет выбрать какой-то непрерывный подотрезок устройств в лаборатории, уточнить тип производства для каждого устройства подотрезка (производить материю или антиматерию) и, наконец, заснять подотрезок. Однако фото будет успешно, только если выделенные устройства произведут одинаковое количество материи и антиматерии (иначе, на фотографии будет лишняя материя или антиматерия).

Вас попросили вычислить количество различных способов, которыми Яхуб может успешно заснять фотографию. Одна фотография отлична от другой, если на ней запечатлен другой подотрезок или по крайней мере одно устройство подотрезка на одной фотографии производит материю, а на другой — антиматерию.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 1000). Во второй строке содержатся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1000).

Сумма a1 + a2 + ... + an не превосходит 10000.

Выходные данные

Выведите единственное целое число — количество способов, которыми Яхуб может снять фотографию по модулю 1000000007 (109 + 7).

Примечание

Возможные фотографии таковы: [1+, 2-], [1-, 2+], [2+, 3-], [2-, 3+], [3+, 4-], [3-, 4+], [1+, 2+, 3-, 4-], [1+, 2-, 3+, 4-], [1+, 2-, 3-, 4+], [1-, 2+, 3+, 4-], [1-, 2+, 3-, 4+] и [1-, 2-, 3+, 4+], где i +  означает, что i-ый элемент производит материю, а i -  означает, что i-ый элемент производит антиматерию.

E. Гласные

дп Комбинаторика разделяй и властвуй *2700

Яхубина устала от всех этих сложных языков, так что она решила изобрести новый, простой язык. Она уже составила словарь, сожержащий n 3-слов. 3-слово — это последовательность из ровно трех строчных букв из первых 24 букв английского алфавита (от a до x). Она решила, что некоторые буквы должны быть гласными, а остальные — согласными. Весь язык будет основываться на простом правиле: слово, которое содержит как минимум одну гласную, считается корректным.

Яхубина забыла, какие буквы являются гласными, а какие — согласными, и хочет найти некоторые, возможно, корректные наборы гласных. Для этого она задает Яхубу вопросы. Каждый вопрос — это набор букв. Для каждого вопроса Яхубина хочет знать, сколько слов в словаре корректны, учитывая, что данный набор букв является гласными, а остальные буквы согласные.

Яхубина хочет знать xor квадратов ответов на все возможные вопросы. Всего есть 224 вопросов (все подмножества множества первых 24 строчных букв английского алфавита). Помогите Яхубу найти это число.

Входные данные

В первой строке содержится одно целое число n (1 ≤ n ≤ 104). Каждая из следующих n строк содержит по одному 3-слову, состоящему из 3 строчных букв. Все слова различны.

Выходные данные

Выведите единственное число — xor квадратов ответов на все запросы.

C. Медведь и простые числа

Бинарный поиск дп математика Перебор реализация Структуры данных теория чисел *1700

Недавно медведь начал изучать структуры данных и столкнулся со следующей задачей.

Задана последовательность целых чисел x1, x2, ..., xn длины n и m запросов, каждый из которых характеризуется двумя целыми числами li, ri. Обозначим за f(p) — количество таких индексов k, что xk делится на p. Ответом на запрос li, ri является сумма: , где S(li, ri) — множество простых чисел из отрезка [li, ri] (обе границы включаются в отрезок).

Помогите медведю справиться с этой задачей.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 106). Во второй строке записаны n целых чисел x1, x2, ..., xn (2 ≤ xi ≤ 107). Числа не обязательно различные.

В третьей строке записано целое число m (1 ≤ m ≤ 50000). В каждой из m следующих строк записана пара целых чисел через пробел li и ri (2 ≤ li ≤ ri ≤ 2·109) — числа, характеризующие текущий запрос.

Выходные данные

Выведите m целых чисел — ответы на запросы в порядке появления запросов во входных данных.

Примечание

Рассмотрим первый тестовый пример. Всего в первом примере 3 запроса.

  1. Поступает первый запрос l = 2, r = 11. Нужно посчитать f(2) + f(3) + f(5) + f(7) + f(11) = 2 + 1 + 4 + 2 + 0 = 9.
  2. Поступает второй запрос l = 3, r = 12. Нужно посчитать f(3) + f(5) + f(7) + f(11) = 1 + 4 + 2 + 0 = 7.
  3. Поступает третий запрос l = 4, r = 4. Так как на этом промежутке нет простых чисел, то сумма равна 0.

D. Медведь и прожекторы

битмаски геометрия дп *2200

Жил-был один медведь на плоскости Oxy. Он очень боялся темноты, поэтому ночью не мог передвигаться по точкам плоскости, которые не освещены. Однажды медведь захотел ночью прогуляться от своего дома, который находится в точке (l, 0), до дома своего друга, который находится в точке (r, 0), по отрезку длины (r - l). Конечно, для осуществления прогулки нужно, чтобы каждая точка отрезка была освещена. Именно поэтому медведь позвонил своему другу (да-да посреди ночи) с очень деликатной просьбой.

На плоскости Oxy расположены n прожекторов. Прожектор i находится в точке (xi, yi) и может освещать любой угол плоскости величиной ai градусов с вершиной в точке (xi, yi). Медведь попросил своего друга повернуть прожекторы так, чтобы он (медведь) смог в процессе своей прогулки по отрезку удалиться от дома, как можно дальше. Добрый друг согласился выполнить просьбу. А пока он выполняет ее, медведю очень интересно, на какое максимальное расстояние он сможет удалиться от дома? Помогите ему, найдите это расстояние.

Считайте, что на плоскости нет никаких преград, и что нет никаких других источников света кроме прожекторов. Друг медведя не может поворачивать прожекторы во время прогулки медведя. Считайте, что после того как все прожекторы будут повернуты требуемым образом, медведь начнет прогулку, а друг пойдет спать.

Входные данные

В первой строке записаны три целых числа n, l, r (1 ≤ n ≤ 20;  - 105 ≤ l ≤ r ≤ 105), разделенных пробелом. В i-ой из следующих n строк записаны три целых числа xi, yi, ai ( - 1000 ≤ xi ≤ 1000; 1 ≤ yi ≤ 1000; 1 ≤ ai ≤ 90), разделенных пробелом — описание прожекторов.

Обратите внимание, два прожектора могут находиться в одной точке.

Выходные данные

Выведите единственное вещественное число — ответ на задачу. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не будет превышать 10 - 6.

Примечание

В первом примере одно из возможных решений такое:

Во втором примере единственное решение такое:

В третьем примере единственное решение такое:

C. Разнообразные подстроки

дп Строки *2000

Разнообразностью строки назовем количество различных символов, которые в ней встречаются хотя бы один раз. Разнообразность строки s будем обозначать как d(s). К примеру, d('aaa') = 1,  d('abacaba') = 3. Пусть задана строка s, состоящая из строчных символов латинского алфавита. Рассмотрим все ее подстроки. Очевидно, что разнообразность любой подстроки — это число от 1 до d(s). Выдайте статистику разнообразности подстрок, посчитав для каждого k от 1 до d(s), сколько подстрок строки s имеет разнообразность ровно k.

Входные данные

Входные данные состоят из единственной строки. В ней записана последовательность строчных букв латинского алфавита — строка s длиной от 1 до 3·105.

Выходные данные

В первой строке выведите d(s) — разнообразность строки s. Далее выведите d(s) строк. В k-й из этих строк выведите количество подстрок строки s, имеющих разнообразность k.

Примечание

Рассмотрим первый пример. Обозначим через s(i, j) подстроку строки 'abca' с символа номер i по символ номер j.

  • s(1, 1) = 'a',  d('a') = 1
  • s(2, 2) = 'b',  d('b') = 1
  • s(3, 3) = 'c',  d('c') = 1
  • s(4, 4) = 'a',  d('a') = 1
  • s(1, 2) = 'ab',  d('ab') = 2
  • s(2, 3) = 'bc',  d('bc') = 2
  • s(3, 4) = 'ca',  d('ca') = 2
  • s(1, 3) = 'abc',  d('abc') = 3
  • s(2, 4) = 'bca',  d('bca') = 3
  • s(1, 4) = 'abca',  d('abca') = 3

Всего количество подстрок с разнообразностью 1 равно 4, с разнообразностью 2 равно 3, с разнообразностью 3 равно 3.

D. Игра с точками

графы дп кратчайшие пути реализация *2100

Представьте, что Вы играете в следующую игру. Имеется n точек, являющихся вершинами правильного n-угольника. Точки пронумерованы целыми числами от 1 до n. Каждая пара точек соединена отрезком некоторого цвета. Различных цветов не более 26, они обозначаются строчными латинскими буквами. В трех различных точках стоит по фишке. Все фишки одинаковые. За один ход Вы можете взять любую из фишек и передвинуть ее в другую точку. При этом цвет отрезка, по которому Вы можете передвинуть фишку, должен совпадать с цветом отрезка, соединяющего точки, в которых находятся две другие фишки. Нельзя перемещать фишку в точку, в которой уже находится другая фишка. Ваша задача состоит в том, чтобы за наименьшее количество ходов добиться того, чтобы фишки находились в точках с номерами 1, 2 и 3. Напишите программу, которая оптимальным образом играет в эту игру.

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 70) — количество точек. Во второй строке записаны три различных целых числа от 1 до n — номера точек, в которых изначально находятся фишки. Каждая из следующих строк содержит по n символов — это матрица, задающая цвета отрезков. Цвета задаются строчными буквами латинского алфавита. Символ с номером j в i-й строке матрицы обозначает цвет отрезка между точками i и j. Матрица симметрична, то есть j-й символ i-й строки совпадает с i-м символом j-й строки. На главной диагонали матрицы стоят символы '*', потому что не существует отрезка, соединяющего точку саму с собой.

Выходные данные

Если не существует ни одной последовательности ходов, после которых фишки оказываются в точках с номерами 1, 2 и 3, выведите в единственной строке число -1. Если же решение существует, то в первой строке выведите наименьшее возможное количество ходов, а далее сами ходы. Для описания очередного хода в отдельной строке выведите два целых числа через пробел — номер точки, откуда следует взять фишку, и номер точки, куда ее следует передвинуть. Если оптимальных последовательностей ходов несколько, выведите любую из них.

Примечание

В первом примере мы можем передвинуть фишку из точки 4 в точку 1, потому что они соединены отрезком цвета 'a', как и точки 2 и 3, в которых находятся две другие фишки. После этого хода фишки находятся в точках 1, 2 и 3.

C. Кратеры на Луне

дп сортировки *2100

Существуют различные теории происхождения кратеров на Луне. Большинство ученых придерживается метеоритной теории, согласно которой кратеры возникли при столкновении небесных тел с Луной. Другая версия — это вулканическое происхождение кратеров.

Специалист по исследованию внеземного разума профессор Окулов (однофамилец того самого Окулова — автора известных учебников по программированию) выдвинул альтернативную гипотезу. Как вы думаете, какую? Правильно, связанную с вмешательством внеземного разума. Теперь профессор увлечен поиском подтверждений своей гипотезы.

В распоряжении профессора имеются данные с лунохода, который движется прямолинейно в одном направлении по поверхности Луны. Кратеры имеют форму кругов с целочисленными радиусами. Луноход фиксирует только те кратеры, центры которых лежат на траектории его движения и отправляет на Землю информацию о расстоянии центров кратеров до начальной точки своего движения и их радиусах.

Согласно теории профессора Окулова, два кратера, созданные внеземным разумом для пока неразгаданных целей, либо полностью вкладываются один в другой, либо не пересекаются вообще. Касание кратеров как внутренним, так и внешним образом допустимо. Однако экспериментальные данные с лунохода не подтверждают эту теорию! Тем не менее профессор Окулов не унывает: он прекрасно понимает, что для создания любой стройной теории необходимо пренебречь некоторыми данными, неверными из-за ошибок измерений (или из-за умелой маскировки внеземного разума, который рано или поздно будет обнаружен профессором Окуловым!). Поэтому Окулов хочет выбрать среди имеющихся описаний кратеров наибольший набор, удовлетворяющий его теории.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 2000) — количество обнаруженных кратеров. Следующие n строк содержат описания кратеров в формате «ci ri», где ci — координата центра кратера на прямой движения лунохода, ri — радиус кратера. Все числа ci и ri — целые положительные, не превосходящие 109. Никакие два кратера не совпадают.

Выходные данные

В первой строке выведите количество кратеров в искомом наибольшем наборе. В следующей строке через пробел выведите номера входящих в него кратеров. Кратеры нумеруются числами от 1 до n в порядке задания во входных данных. Номера разрешается выводить в произвольном порядке. Если решений несколько, выведите любое.

E. При чем тут Дирихле?

дп игры *2000

Всем вам известен принцип Дирихле, идея которого в том, что размещение по n коробкам не менее n + 1 предметов влечет существование коробки, в которой хотя бы два предмета.

Узнав об этом принципе, но не владея техникой логических рассуждений, восьмилетние Стас с Машей придумали игру. Имеется a различимых коробок и b различимых предметов, за ход можно либо добавить новую коробку, либо — новый предмет. Проигрывает в игре тот игрок, после хода которого число способов разложить по a коробкам b предметов становится не меньше некоторого заданного числа n. Все коробки и предметы считаются различными. Возможно, некоторые коробки останутся пустыми.

Кто проиграет при оптимальной игре обоих игроков, если первым ходит Стас?

Входные данные

В единственной строке входного файла записано три целых числа a, b, n (1 ≤ a ≤ 10000, 1 ≤ b ≤ 30, 2 ≤ n ≤ 109) — начальное число коробок, предметов и число, ограничивающее количество способов, соответственно. Гарантируется, что изначальное количество способов строго меньше n.

Выходные данные

Выведите «Stas», если победит Маша. Выведите «Masha», если победит Стас. Если будет ничья, то выведите «Missing».

Примечание

Во втором примере первоначальное количество способов равно 3125.

  • Если Стас увеличит число коробок, то проиграет, так как Маша следующим ходом может еще раз увеличить число коробок. После этого любой ход Стаса приведет к поражению.
  • Если же Стас увеличит число предметов, то любой машин ход будет проигрышным.

F1. Торговля акциями

дп

Задача состоит из трех подзадач: за решение подзадачи F1 вы получите 8 баллов, за решение подзадачи F2 вы получите 15 баллов, за решение подзадачи F3 вы получите 10 баллов.

Манао разработал модель, предсказывающую цены акций некоторой компании на протяжении следующих n дней. Теперь он хочет получить максимальную прибыль, используя результаты этой модели. К сожалению, торговый счет Манао имеет следующие ограничения:

  • В любой момент времени, Манао может иметь либо 0, либо 1 акцию.
  • Продажа или покупка акций может быть произведена лишь раз в день.
  • В течение следующих n дней ему позволено произвести покупку акций не более k раз.

В этой задаче мы будем называть сделкой процесс покупки акции в некоторый день i и ее сохранения до дня j > i, в который акция будет продана. Предыдущие ограничения можно записать следующим образом: Манао разрешено сделать не более k непересекающихся сделок на протяжении n дней, для которых модель Манао предсказала цены акций.

Хотя имея возможность держать на руках более одной акции или производить более k сделок, Манао и смог бы получить больше прибыли, у него все равно есть шанс разбогатеть, учитывая что его модель делает точные предсказания. Например, зная наперед все цены, Манао может дождаться дня с низкой ценой акций, купить одну акцию и ждать дня с высокой ценой, в который он ее продаст, и повторять это k раз в течение n дней.

Тем не менее, для Манао недостаточно иметь просто хороший алгоритм купли-продажи, он хочет выработать оптимальную стратегию для максимизации прибыли при данных ограничениях. Помогите ему достичь этой цели, написав программу, которая определит, когда покупать и продавать акции, чтобы достичь максимально возможной прибыли.

Входные данные

В первой строке записаны два разделенных пробелом целых числа n и k . Далее следует n строк, i-ая из которых содержит одно целое число pi (0 ≤ pi ≤ 1012) — цену, за которую можно купить или продать акции в i-ый день рассматриваемого процесса.

Задача состоит из трех подзадач, которые отличаются друг от друга ограничениями на входные данные. За решение каждой подзадачи вы получите определенное количество баллов. Описание подзадач следует ниже.

  • В подзадаче F1 (8 баллов) ограничение на n следующее: 1 ≤ n ≤ 3000.
  • В подзадаче F2 (15 баллов) ограничение на n следующее: 1 ≤ n ≤ 100000.
  • В подзадаче F3 (10 баллов) ограничение на n следующее: 1 ≤ n ≤ 4000000.
Выходные данные

Выведите единственное целое число — максимальное количество прибыли, которое Манао может извлечь, если перед первым из n рассматриваемых дней у него на руках нет акций, в любой момент времени он владеет 0 или 1 акцией и производит не более k непересекающихся сделок.

Примечание

В первом примере наилучшей сделкой является купить акцию по цене 1 на девятый день и продать по цене 9 на десятый день, а следующей наилучшей сделкой является покупка акции по цене 2 на первый день и продажа этой акции по цене 9 на четвертый день. Так как эти две сделки не пересекаются, оптимальной стратегией является совершить обе. Таким образом, его план купли-продажи выглядит следующим образом:


2 | 7 | 3 | 9 | 8 | 7 | 9 | 7 | 1 | 9
buy | | | sell | | | | | buy | sell

Таким образом, суммарная прибыль (9 - 2) + (9 - 1) = 15.

Во втором примере, хоть у Манао и есть возможность совершить вплоть до 5 сделок, только 4 из них могут быть прибыльными. Оптимальным решением является покупать и продавать в следующие дни:


2 | 7 | 3 | 9 | 8 | 7 | 9 | 7 | 1 | 9
buy | sell | buy | sell | | buy | sell | | buy | sell

Суммарная прибыль от такой стратегии — (7 - 2) + (9 - 3) + (9 - 7) + (9 - 1) = 21.

B. Ханойская башня

дп

Ханойская башня — это известная математическая головоломка. Она состоит из трех стержней и нескольких дисков различных размеров, каждый диск можно нанизывать на любой стержень. В начале диски аккуратно нанизаны на один из стержней по возрастанию размера, самый маленький диск сверху, таким образом образуя форму конуса.

Цель головоломки — перенести всю стопку дисков на другой стержень, соблюдая следующие простые правила:

  1. За один ход можно переместить только один диск.
  2. Каждый ход заключается в том, что мы берем верхний диск с одного стержня и помещаем его сверху на другой стержень. То есть диск можно перемещать, только если он верхний в стопке.
  3. Никакой диск нельзя класть на диск меньшего размера.

С тремя дисками головоломка решается в семь ходов. Наименьшее количество ходов, необходимое для решения головоломки про Ханойскую башню равняется 2n - 1, где n — количество дисков. (c) перевод английской статьи из Wikipedia.

Головоломка SmallR очень похожа на Ханойскую башню. В Ханойской башне вам требуется переместить все диски на другой стержень за минимальное количество ходов. В головоломке SmallR каждый ход стоит некоторое количество денег, и вам надо решить ту же самую головоломку за минимальную стоимость. При этом в начале все n дисков находятся на первом стержне. Перемещение диска со стержня i на стержень j (1 ≤ i, j ≤ 3) стоит tij единиц денег. Цель головоломки в том, чтобы переместить все диски на третий стержень.

В этой задаче вам дана матрица t и целое число n. Надо посчитать наименьшую стоимость решения головоломки SmallR с n дисками.

Входные данные

Каждая из первых трех строк содержит три целых числа — матрицу t: j-ое число в i-ой строке tij (1 ≤ tij ≤ 10000; i ≠ j). В следующей строке записано единственное целое число n (1 ≤ n ≤ 40) — количество дисков.

Гарантируется, что для всех i (1 ≤ i ≤ 3), tii = 0.

Выходные данные

Выведите единственное целое число — минимальную стоимость решения головоломки SmallR.

B. Красим стену

дп Теория вероятностей

Пользователь ainta решил разрисовать стену. Стена состоит из n2 плиток, расположенных в виде таблицы размера n × n. Некоторые плитки окрашены, другие — нет. Юноша хочет покрасить стену красиво и поэтому будет красить ее по следующим правилам:

  1. Сначала пользователь ainta внимательно смотрит на стену. Если в каждой строке стены есть хотя бы одна окрашенная плитка, и в каждом столбце стены есть хотя бы одна окрашенная плитка, он прекращает покраску. В противном случае, он переходит к пункту 2.
  2. Пользователь ainta равновероятно выбирает любую плитку стены.
  3. Если выбранная плитка не окрашена, она красится. В противном случае она игнорируется.
  4. Затем ainta отдыхает одну минуту, даже если он не покрасил плитку в предыдущем пункте. После чего он переходит снова к пункту 1.
 

Все же ainta беспокоится, не слишком ли долго придется красить стену описанным алгоритмом. Поэтому он хочет подсчитать математическое ожидание затраченного времени при использовании описанного выше алгоритма покраски. Помогите ему. Можете считать, что на выбор и окраску плитки время не тратится.

Входные данные

В первой строке записано два целых числа, n и m (1 ≤ n ≤ 2·103; 0 ≤ m ≤ min(n2, 2·104)) — размер стены и количество изначально окрашенных ячеек.

Затем следует m строк, в каждой записано по два целых числа, ri и ci (1 ≤ ri, ci ≤ n) — номер строки и номер столбца очередной окрашенной плитки на стене. Гарантируется, что все позиции окрашенных плиток различны.

Выходные данные

В единственной строке выведите математическое ожидание времени, необходимого на покраску стены, в минутах. Ваш ответ будет считаться правильным, если величина его абсолютной или относительной погрешности не превышает 10 - 4.

D. Загадочная посылка

дп сортировки *1700

Петя решил поздравить своего друга из Австралии с предстоящим днем рождения, отправив ему открытку. Чтобы сделать свой сюрприз более загадочным, он решил создать цепь. Цепью назовем такую последовательность конвертов A = {a1, a2, ..., an}, что ширина и высота i-го конверта строго больше ширины и высоты (i - 1)-го соответственно, а размером цепи — количество конвертов в ней. Из имеющихся у Пети конвертов он хочет создать наибольшую по размеру цепь, в которую можно было бы вложить открытку. Открытку можно вложить в цепь, если ширина и высота открытки меньше ширины и высоты меньшего конверта в цепи соответственно. Поворачивать конверты или открытку запрещено. Поскольку у Пети очень много конвертов и очень мало времени, то эта нелегкая задача возлагается на Вас.

Входные данные

Первая строка содержит целые числа n, w, h (1 ≤ n ≤ 5000, 1 ≤ w, h ≤ 106) — количество конвертов, имеющихся у Пети в распоряжении, ширину и высоту открытки соответственно. Далее содержится n строк, в каждой из которых находится два целых числа wi и hi — ширина и высота i-го конверта (1 ≤ wi, hi ≤ 106).

Выходные данные

В первую строку выведите размер максимальной цепи. Во вторую строку выведите через пробелы номера конвертов, образующих такую цепь, начиная с номера наименьшего конверта. Помните, что в наименьший конверт должна поместиться открытка. Если существует несколько цепей максимального размера, выведите любую.

Если открытка не помещается ни в один конверт, то выведите единственную строку, содержащую число 0.

D. Роман и числа

битмаски дп Комбинаторика Перебор теория чисел *2000

Роман — юный, но уже довольно известный в Ужляндии, математик. К сожалению, Сережа так не считает. Чтобы переубедить Сережу, Роман готов решить любую математическую задачу. Сережа, не долго думая, попросил Рому найти количество близких чисел к числу n по модулю m.

Число x называется близким к числу n по модулю m, если:

  • его можно получить перестановкой цифр числа n,
  • оно не имеет лидирующих нулей,
  • остаток от деления числа x на m равен 0.

Роман — хороший математик, но поскольку различных вариантов ответа может быть очень много, ему будет трудно найти ответ. Поэтому он просит помощи у вас.

Входные данные

В первой строке записано два целых числа: n (1 ≤ n < 1018) и m (1 ≤ m ≤ 100).

Выходные данные

В единственной строке выведите целое число — количество близких чисел к числу n по модулю m.

Примечание

В первом примере нам подходят числа: 104, 140, 410.

Во втором примере подходит единственное число 232.

D. Улучшаем массив

дп жадные алгоритмы математика теория чисел *1800

У вас есть массив целых положительных чисел a[1], a[2], ..., a[n], а также множество плохих простых чисел b1, b2, ..., bm. Простые числа, которые не встречаются в множестве b считаются хорошими. Красотой массива a назовем сумму , где функция f(s) определяется следующим образом:

  • f(1) = 0;
  • Пусть p — минимальный простой делитель числа s. Если p — хорошее простое число, то , иначе .

Вам разрешено последовательно провести произвольное (возможно, ноль) количество операций улучшения массива a. Операцией улучшения назовем следующую последовательность действий:

  • Выбрать некоторое число r (1 ≤ r ≤ n) и подсчитать значение g = НОД(a[1], a[2], ..., a[r]).
  • Выполнить присвоения: , , ..., .

Какую максимальную красоту массива вы сможете получить?

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 5000) — количество чисел в массиве a и количество плохих простых чисел.

Во второй строке заданы n целых чисел через пробел a[1], a[2], ..., a[n] (1 ≤ a[i] ≤ 109) — массив a. В третьей строке заданы m целых чисел через пробел b1, b2, ..., bm (2 ≤ b1 < b2 < ... < bm ≤ 109) — множество плохих простых чисел.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

Обратите внимание, что ответ на задачу может быть отрицательным числом.

НОД(x1, x2, ..., xk) обозначает наибольшее целое положительное число, которое делит каждое xi без остатка.

D. Красивые пары чисел

дп Комбинаторика *2300

Последовательность пар целых чисел (a1, b1), (a2, b2), ..., (ak, bk) называется красивой, если выполнены два условия:

  • 1 ≤ a1 ≤ b1 < a2 ≤ b2 < ... < ak ≤ bk ≤ n, где n — заданное целое положительное число;
  • все числа b1 - a1, b2 - a2, ..., bk - ak различные.

Для заданного числа n найдите количество красивых последовательностей длины k. Так как ответ может быть достаточно большим, выведите его остаток от деления на 1000000007 (109 + 7).

Входные данные

В первой строке записано целое число t (1 ≤ t ≤  2·105) — количество тестовых данных.

В каждой из следующих t строк содержатся два целых числа n и k (1 ≤ k ≤ n ≤ 1000).

Выходные данные

Для каждого теста из входных данных выведите ответ на задачу по модулю 1000000007 (109 + 7). Ответы для тестов выводите в том порядке, в котором тесты заданы во входных данных.

Примечание

В первом тестовом примере ровно одна красивая последовательность: (1, 1).

В втором тестовом примере следующие последовательности являются красивыми:

  • (1, 1);
  • (1, 2);
  • (2, 2).

В четвертом тестовом примере следующие последовательности являются красивыми:

  • (1, 1);
  • (1, 2);
  • (1, 3);
  • (2, 2);
  • (2, 3);
  • (3, 3).

В пятом тестовом примере следующие последовательности являются красивыми:

  • (1, 1), (2, 3);
  • (1, 2), (3, 3).

В третьем и шестом тестовых примерах красивых последовательностей нет.

D. Сапер 1D

дп реализация *1900

Игра «Сапер 1D» проходит на клетчатой полоске высотой в 1 клетку и шириной в n клеток. В некоторых из этих клеток находятся бомбы. Если в клетке бомбы нет, то в ней записано число от 0 до 2 — суммарное количество бомб в соседних клетках.

Например, корректное поле для игры может выглядеть так: 001*2***101*. Клетки, которые помечены символом «*», содержат бомбы. Обратите внимание, что на корректном поле числа обозначают количество бомб в соседних клетках. Например, поле 2* — некорректное, потому что у клетки с числом 2 должно быть две соседние клетки с бомбой.

Валера хочет создать корректное поле для игры в «Сапер 1D». Он уже нарисовал клетчатую полоску шириной в n клеток, разместил на поле несколько бомб и записал числа в некоторые клетки. Теперь его интересует, сколько существует способов так заполнить оставшиеся клетки бомбами или числами, чтобы получилось корректное поле.

Входные данные

В первой строке записана последовательность символов без пробелов s1s2... sn (1 ≤ n ≤ 106), содержащая только символы «*», «?» и цифры «0», «1» или «2». Если символ si равен «*», то i-я клетка поля содержит бомбу. Если символ si равен «?», значит Валера еще не решил, что будет находиться в i-й клетке. Символ si, являющийся цифрой, обозначает цифру, записанную в i-й клетке.

Выходные данные

Выведите одно число — количество способов, которыми Валера может заполнить свободные клетки, получив при этом корректное поле.

Так как ответ может быть очень большим, выведите его по модулю 1000000007 (109 + 7).

Примечание

В первом тестовом примере можно получить следующие корректные поля: 001**1, 001***, 001*2*, 001*10.

B. Длинный путь

дп реализация *1600

Однажды мальчик Вася оказался в лабиринте, состоящем из (n + 1) комнат, пронумерованных от 1 до (n + 1). Первоначально Вася находится в первой комнате, а чтобы выйти из лабиринта, нужно попасть в (n + 1)-ю.

Лабиринт устроен следующим образом. В каждой комнате лабиринта есть два односторонних портала. Рассмотрим комнату с номером i (1 ≤ i ≤ n), с помощью первого портала можно перейти из нее в комнату с номером (i + 1), с помощью второго можно перейти из нее в комнату с номером pi, где 1 ≤ pi ≤ i.

Чтобы не заблудиться Вася решил действовать следующим образом.

  • Каждый раз когда Вася приходит в какую-то комнату он рисует на ее потолке крестик. Изначально, Вася рисует крестик на потолке комнаты 1.
  • Пусть Вася находится в комнате i и уже нарисовал крестик на ее потолке. Тогда, если сейчас на потолке нарисовано нечетное количество крестиков, Вася будет пользоваться вторым порталом (он ведет в комнату pi), иначе Вася будет пользоваться первым порталом.

Помогите Васе определить, сколько раз ему придется воспользоваться порталами, чтобы попасть в комнату (n + 1) в конечном итоге.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 103) — число комнат. Во второй строке записаны n целых чисел pi (1 ≤ pi ≤ i) — номера комнат, в которые можно попасть из i-й комнаты, если пользоваться вторым порталом.

Выходные данные

Выведите одно число — количество перемещений, за которое мальчик выберется из лабиринта. Поскольку это число может быть достаточно большим, выведите его по модулю 1000000007 (109 + 7).

D. Наибольшая подматрица 3

дп хэши *2700

Задана матрица a размера n × m, элементы которой целые числа. Будем считать, что строки матрицы пронумерованы сверху вниз от 1 до n, а столбцы слева направо от 1 до m. Элемент на пересечении i-й строки и j-го столбца будем обозначать aij.

Подматрицей i1, j1, i2, j2 (1 ≤ i1 ≤ i2 ≤ n; 1 ≤ j1 ≤ j2 ≤ m) будем называть такие элементы aij заданной матрицы, что i1 ≤ i ≤ i2 И j1 ≤ j ≤ j2. Площадью подматрицы будем называть число (i2 - i1 + 1)·(j2 - j1 + 1). Будем называть подматрицу неоднородной, если все ее элементы различны.

Найдите наибольшую по площади неоднородную подматрицу заданной матрицы.

Входные данные

В первой строке находятся два целых числа n, m (1 ≤ n, m ≤ 400) — количество строк и столбцов матрицы соответственно.

В следующих n строках находится по m целых чисел aij (1 ≤ aij ≤ 160000) — элементы матрицы.

Выходные данные

Выведите целое число — площадь искомой подматрицы.

D. Пешка

дп *1900

В некоторой клетке нижнего ряда шахматной доски стоит пешка. У нее есть всего два варианта хода: вверх и влево или вверх и вправо. Пешка может выбрать, с какой клетки нижнего ряда она начнет свое путешествие. На каждой клетке доски лежит от 0 до 9 горошин. Пешка хочет дойти до верхнего ряда, собрав как можно больше горошин. Так как там ей придется поделиться горошинами с k братьями, число горошин обязательно должно делиться на k + 1. Определите, какое наибольшее число горошин она сможет собрать, и какие ходы она должна для этого делать.

Пешка не может выбрасывать горошины, а также выходить за пределы доски. Когда пешка оказывается в какой-то клетке доски (включая первую и последнюю клетку пути), она обязательно берет все горошины.

Входные данные

В первой строке записаны три целых числа n, m, k (2 ≤ n, m ≤ 100, 0 ≤ k ≤ 10) — количество рядов и столбцов в шахматной доске, количество братьев пешки. Далее следует n строк по m цифр от 0 до 9 без пробелов — описание шахматной доски. Каждая клетка описывается одной цифрой — количество горошин в ней. Первая строка соответствует верхнему ряду, а последняя — нижнему.

Выходные данные

Если невозможно добраться до верхнего ряда, собрав при этом число делящееся на k + 1 количество горошин, выведите -1.

Иначе, первая строка должна содержать одно число — какое наибольшее число горошин она сможет собрать, при условии, что это число должно делиться на k + 1. Вторая строка должна содержать одно число — номер столбца клетки на нижнем ряду, откуда пешка должна начать свое путешествие. Столбцы нумеруются слева направо натуральными числами начиная с 1. Третья строка должна содержать строку из n - 1 символов — описание ходов пешки. Если пешка должна пойти вверх и влево, выведите L, если вверх и вправо, выведите R. Если решений несколько, выведите любое.

D. 2048

битмаски дп *2000

Программисты компании R2 любят играть в 2048. Как-то раз они решили изобрести собственную упрощенную модификацию этой игры — 2k на полоске.

Представьте бесконечную в одну сторону полоску, состоящую из единичных квадратов (сторона каждого равна высоте полоски). Каждый квадрат может быть пустой, а может содержать некоторое число.

Изначально все квадраты пустые. Затем в бесконечности на одном из единичных квадратов появляется число 2, либо 4. После чего игрок один раз нажимает на кнопку, и появившееся число начинает двигаться в сторону начала полоски. Пусть некоторое число x движется к началу полоски, тогда оно остановится, если:

  1. либо оно окажется в первом квадрате полоски;
  2. либо оно окажется в квадрате, перед которым находится квадрат с числом y (y ≠ x). Если же число x в какой-то момент времени окажется в квадрате с таким же числом, то два числа сложатся и превратятся в одно число 2x. Новое число 2x по тем же правилам продолжит двигаться в сторону начала полоски.

После окончательной остановки процесса передвижения чисел, в бесконечности появляется новое число 2 или 4, и все повторяется. Чтобы лучше понять процесс передвижения прочитайте пояснения к тестовым примерам.

Наверное, вы уже поняли, что ход игры целиком и полностью завит от того, в какой последовательности появляются 2 и 4 в игре. Рассмотрим некоторую последовательность, в которой появляются 2 и 4 в игре. Считается, что эта последовательность победная, если в результате нее хотя бы в одном квадрате появится число не менее 2k.

Смысл игры состоит в том, чтобы составить победную последовательность из n чисел. Но не все так просто, некоторые числа последовательности определены заранее. Задана последовательность, состоящая из чисел 0, 2, 4. Посчитайте, сколько существует способов заменить каждый 0 этой последовательности на 2 или 4, чтобы получить победную последовательность.

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 2000; 3 ≤ k ≤ 11). В следующей строке записана последовательность из n целых чисел, каждое из которых: либо 0, либо 2, либо 4.

Выходные данные

Выведите единственное целое число — количество способов заменить нули на 2 или 4, чтобы получить победную последовательность. Так как это количество может быть достаточно большим, выведите его остаток от деления на 1000000007 (109 + 7).

Примечание

Рассмотрим первый тестовый пример. Начало полоски будет трансформироваться следующим образом:

2  →  4  →  8  →  8 2  →  8 4  →  8 4 2  →  16.

Чтобы лучше понять процесс игры, можете посмотреть оригинальную игру на http://gabrielecirulli.github.io/2048/. Обратите внимание, что описанная игра на полоске немного отличается от оригинальной (когда два числа складываются в оригинальной игре, они не продолжают двигаться). Будьте осторожны, игра затягивает, а времени на контесте не так много!

B. Машмох и ACM

дп Комбинаторика теория чисел *1400

Бимоху, начальнику Машмоха, Машмох не нравился. Вот он его и уволил. Решил тогда Машмох новую работу не искать, а поступить в университет и поучаствовать в ACM. Машмох хочет попасть в команду Бамоха. Для этого ему дали (в качестве испытания) несколько задач по программированию и неделю на их решение. Машмох не шибко умудренный программист. В общем-то, он и не программист вовсе. Так что ничего он не решил, а попросил вас помочь ему с этими заданиями. Одно из них такое:

Последовательность из l целых чисел b1, b2, ..., bl (1 ≤ b1 ≤ b2 ≤ ... ≤ bl ≤ n) называется хорошей, если каждое число делит без остатка следующее число в последовательности. Более формально, для всех i (1 ≤ i ≤ l - 1).

Вам даны n и k, найдите количество хороших последовательностей длины k. Так как ответ может быть достаточно большим, выведите его по модулю 1000000007 (109 + 7).

Входные данные

В первой строке записано два целых числа через пробел n, k (1 ≤ n, k ≤ 2000).

Выходные данные

Выведите единственное целое число — количество хороших последовательностей длины k по модулю 1000000007 (109 + 7).

Примечание

В первом примере хорошие последовательности такие: [1, 1], [2, 2], [3, 3], [1, 2], [1, 3].

B. Гильдия художников

дп Перебор реализация *1300

Знаменитое объединение художников «Калевич жив!» поставило на поток производство шедевров. Объединение состоит из n художников, которые решили следующим образом организовать свою работу.

Каждый из художников будет использовать только один закрепленный за ним цвет. Цвета для всех художников различны, будем считать что первый художник использует первый цвет, второй художник — второй цвет, и так далее. Каждый шедевр будет содержать все эти цвета. Чтобы наложить j-й цвет на i-й шедевр, j-му художнику потребуется tij единиц времени.

Во всем нужен порядок, поэтому работа художников упорядочена по следующим правилам:

  • каждый шедевр сначала обрабатывается первым художником, потом вторым и т.д., то есть после окончания обработки j-м художником шедевр должен быть обработан (j + 1)-м (если j < n);
  • каждый из художников работает над шедеврами по порядку: сначала работает над первым шедевром, потом над вторым и так далее;
  • каждый художник может одновременно работать не более чем над одним шедевром, но времени на отдых им не требуется;
  • как только j-й художник заканчивает работу над шедевром, тот мгновенно передается следующему художнику.

Считая, что художники приступят к работе в момент времени 0, найдите для каждого шедевра момент времени, когда он будет готов к продаже.

Входные данные

В первой строке входных данных записаны целые числа m, n (1 ≤ m ≤ 50000, 1 ≤ n ≤ 5), где m — количество шедевров, а n — количество художников. Далее следуют описания шедевров по одному в строке. Каждая из строк содержит по n целых чисел ti1, ti2, ..., tin (1 ≤ tij ≤ 1000), где tij — время работы j-го художника над i-м шедевром.

Выходные данные

Выведите последовательность из m целых чисел r1, r2, ..., rm, где ri — момент окончания работы n-го художника над i-м шедевром.

E. Маршрут Президента

графы дп кратчайшие пути *2500

В старой доброй Берляндии n городов, m дорог. Каждая из дорог соединяет пару различных городов и является двусторонней. Между парой городов не более одной дороги. Известна длина каждой из дорог.

Известно, что совсем скоро Президент поедет по дорогам Берляндии из города s в город t. Конечно, он выберет один из кратчайших путей из s в t, но какой именно — не известно.

Министр транспорта очень боится, что Президент будет расстроен состоянием дорог страны. По этой причине он планирует организовать ремонт тех дорог, по которым может проходить путь Президента.

Составить бюджет для такого мероприятия — непростая задача. Для всех возможных различных пар s, t (s < t) найдите количество дорог, которые лежат на хотя бы одном кратчайшем пути из s в t.

Входные данные

В первой строке входных данных записаны целые числа n, m (2 ≤ n ≤ 500, 0 ≤ m ≤ n·(n - 1) / 2) — количество городов и дорог соответственно. Далее следует m строк с описаниями дорог, по одному описанию в строке. Каждое описание содержит три целых числа xi, yi, li (1 ≤ xi, yi ≤ n, xi ≠ yi, 1 ≤ li ≤ 106), где xi, yi — номера соединяемых i-й дорогой городов, а li — ее длина.

Выходные данные

Выведите последовательность целых чисел c12, c13, ..., c1n, c23, c24, ..., c2n, ..., cn - 1, n, где cst — искомое количество дорог на пути из s в t. Элементы последовательности c выводите в описанном порядке. Если между парой городов s и t вообще нет пути, то cst = 0.

A. Отбор

дп математика реализация *1500

Финалистами соревнований «Russian Code Cup» в 2214 году будут участники, ставшие победителями в одном из отборочных раундов.

Отборочные раунды делятся на основные и дополнительные. Каждый из основных отборочных раундов должен состоять из c задач, а победителями раунда считаются n человек, занявшие первые места в этом раунде. Каждый из дополнительных отборочных раундов состоит из d задач. Победителем дополнительного раунда становится один человек. Кроме этого, на финал без конкурса приглашаются k победителей финалов прошлых лет.

В результате всех отборочных раундов в финал должно пройти не менее n·m человек. Каким образом нужно организовать отборочные раунды, чтобы в результате всех отборочных раундов в финал прошли не менее n·m человек, а при этом суммарное количество использованных в раундах задач было как можно меньше?

Входные данные

Первая строка содержит два целых числа c и d (1 ≤ c, d ≤ 100) — количество задач в основном и дополнительном раундах соответственно. Вторая строка содержит два целых числа n и m (1 ≤ n, m ≤ 100). Наконец, третья строка содержит целое число k (1 ≤ k ≤ 100) — число заранее отобранных победителей.

Выходные данные

В первой строке выведите единственное целое число — минимальное количество задач, которое нужно подготовить членам жюри.

D. Хитрый Гена

битмаски дп жадные алгоритмы сортировки *1900

Мальчик Гена очень хочет попасть на финал «Russian Code Cup», ну или хотя бы получить футболку. Но предлагаемые на отборочном раунде задачи слишком сложные, поэтому он договорился с n друзьями, что они решат задачи за него.

Участникам на отборочном раунде предлагают m задач. Про каждого своего друга Гена знает, какие задачи он умеет решать. Но друзья не согласны помогать Гене просто так: i-й друг требует за свою помощь в решении всех задач, которые он может решить, xi рублей, более того, он согласен писать код по задачам, только если к компьютеру Гены подключено не менее ki мониторов, а каждый монитор стоит b рублей.

Гена экономный, поэтому он хочет потратить как можно меньше денег на решение всех задач отборочного раунда. Подскажите Гене, как ему поступить, чтобы потратить как можно меньше денег. Считайте, что изначально у компьютера Гены нет ни одного монитора.

Входные данные

В первой строке записаны три целых числа n, m и b (1 ≤ n ≤ 100; 1 ≤ m ≤ 20; 1 ≤ b ≤ 109) — количество друзей Гены, количество задач и стоимость одного монитора.

В следующих 2n строках содержится описание друзей. Строки с номерами 2i и (2i + 1) содержат информацию об i-м друге. В 2i-й строке записаны целые числа xi, ki и mi (1 ≤ xi ≤ 109; 1 ≤ ki ≤ 109; 1 ≤ mi ≤ m) — желаемое количество денег, мониторов и количество задач, которые он умеет решать. В (2i + 1)-й строке записано mi различных целых чисел — номера задач, которые умеет решать i-й друг. Считайте, что задачи нумеруются от 1 до m.

Выходные данные

Выведите минимальное количество денег, которое нужно потратить Гене, чтобы решить все задачи. Или выведите -1, если этого нельзя добиться.

D. Биатлонная трасса

Бинарный поиск дп Конструктив Перебор Структуры данных *2300

Недавно состоялось официальное заявление мирового олимпийского комитета, согласно которому зимние Олимпийские игры 2030 года пройдут в Томске. Городские власти решили основательно подготовиться к проведению олимпиады и как можно раньше построить все необходимые олимпийские объекты. Первой построена будет биатлонная трасса.

Для строительства биатлонной трассы был выделен участок земли, представляющий собой прямоугольник, разбитый на n × m одинаковых квадратов. Каждый квадрат имеет координаты: номер строки (от 1 до n), в которой он находится, и номер столбца (от 1 до m), в котором он находится. Более того, каждый из квадратов характеризуется своей высотой. В ходе спортивных состязаний биатлонисты будут вынуждены передвигаться из одного квадрата в другой. Если перемещение происходит из более высокого квадрата в более низкий, то биатлонист совершает спуск. Если биатлонист перемещается из более низкого квадрата в более высокий, то он совершает подъем. Если биатлонист перемещается между двумя квадратами с одинаковой высотой, то он двигается по ровной местности.

Биатлонная трасса должна представлять собой границу некоторой прямоугольной области выделенного земельного участка, по которой биатлонисты будут двигаться в направлении движения по часовой стрелке. Известно, что на одно перемещение по ровной местности среднестатистический биатлонист тратит tp секунд, на один подъем — tu секунд, на один спуск — td секунд. Томская администрация хочет выбрать трассу таким образом, чтобы время ее прохождения среднестатистическим биатлонистом было как можно ближе к t секундам. Другими словами, разность времени ts прохождения выбранной трассы и t должна быть минимальна.

Для более четкого понимания можно рассмотреть первый пример входных данных. В этом примере n = 6, m = 7, а администрация хочет, чтобы время прохождения трассы было как можно ближе к t = 48 секундам, причем tp = 3, tu = 6 и td = 2. Если рассмотреть показанный стрелками на изображении прямоугольник, то при движении по его границе по часовой стрелке у среднестатистического биатлониста уйдет ровно 48 секунд. Левый верхний угол этой трассы расположен в квадрате с номером строки 4 и номером столбца 3, а правый нижний — в квадрате с номером строки 6 и номером столбца 7.

Администрация, помимо всего прочего, хочет, чтобы все стороны прямоугольника, по границе которого будут двигаться биатлонисты, состояли не менее чем из трех квадратов и полностью размещалась внутри выделенного земельного участка.

Вас привлекли для написания программы, которая для заданного земельного участка и всех необходимых временных величин найдет наиболее подходящий прямоугольник для создания биатлонной трассы. Если таких прямоугольников несколько — разрешается вывести любой из них.

Входные данные

В первой строке входных данных содержатся три целых числа n, m и t (3 ≤ n, m ≤ 300, 1 ≤ t ≤ 109) — размеры земельного участка и желательное время прохождения.

Во второй строке так же содержатся три целых числа tp, tu и td (1 ≤ tp, tu, td ≤ 100) — время прохождения среднестатистическим биатлонистом ровного участка трассы, подъема и спуска соответственно.

Далее следует n строк по m целых чисел, задающих высоты каждого из квадратов выделенного земельного участка. Каждое из значений высот — целое положительное число, не превышающее 106.

Выходные данные

В единственной строке выходных данных требуется вывести четыре целых положительных числа — номер строки и номер столбца левого верхнего угла, а также номер строки и номер столбца правого нижнего угла выбранного для трассы прямоугольника.

E. Цветная Jenga

дп поиск в глубину и подобное Теория вероятностей *2500

Холодными зимними вечерами в Томске очень скучно — оказаться на улице в такую пору не хочется никому. Жители Томска, чтобы коротать время, сидя в теплых квартирах, придумывают себе много различных игр. Одной из таких игр является «Цветная Jenga».

Для этой игры используются деревянные блоки трех цветов: красного, зеленого и синего. Из них составляется башня из n уровней. Каждый из уровней состоит из трех деревянных блоков. Блоки на каждом из уровней могут быть произвольных цветов, но всегда расположены вплотную и параллельно друг другу. Пример такой башни можно увидеть на изображении.

В эту игру играет ровно один человек. Раз в минуту игрок бросает специальную игральную кость, которая имеет шесть граней. Две грани этой кости — зеленые, две — синие, одна — красная и одна — черная. Выпадение каждой из граней равновероятно.

Если выпадает грань красного, зеленого или синего цвета, то игрок в эту минуту обязан достать из башни любой блок такого цвета так, чтобы башня не упала. Если сделать это невозможно, то игрок ждет до конца минуты, не трогая башню. Так же следует ждать до конца минуты, не трогая башню, если выпала черная грань игральной кости. Доставать блоки из самого верхнего уровня башни (независимо от того достроен он или нет) запрещается.

После того, как игрок достал блок, он обязан положить его на верх башни так, чтобы образовать новый уровень или достроить верхний уровень, состоящий из ранее помещенных туда блоков. Вновь построенные уровни должны обладать всеми теми же свойствами, что и начальные уровни. Если верхний уровень не достроен, то новый уровень начинать запрещается.

Чтобы башня не упала, в каждом из уровней, кроме верхнего, должен оставаться хотя бы один блок. При этом если на каком-то из этих уровней остался ровно один блок и он не является средним, то башня падает.

Игра заканчивается в тот момент, когда в башне больше нет ни одного блока, который можно достать так, чтобы башня не упала.

Вот какую замечательную игру могут придумать жители города Томска. Интересно сколько минут может продлиться такая игра, если игрок будет действовать оптимально? Если игрок действует оптимально, то он в любой момент старается выбрать доставаемый блок так, чтобы минимизировать математическое ожидание продолжительности игры.

Ваша задача — написать программу, которая определит математическое ожидание искомого количества минут.

Входные данные

В первой строке входных данных задано единственное целое число n — количество уровней в башне (2 ≤ n ≤ 6).

Далее следует n строк, описывающих уровни башни снизу вверх (первая строка — самый нижний уровень). Каждый из уровней описывается тремя символами, первый и третий из которых задают крайние блоки уровня, а второй — средний блок. Символ, описывающий блок, может принимать значения «R» (красный блок), «G» (зеленый блок) и «B» (синий блок).

Выходные данные

В единственной строке выходных данных требуется вывести искомое значение математического ожидания. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превысит 10 - 6.

C. Сережа и две последовательности

дп Структуры данных *2300

У Сережи есть две последовательности a1, a2, ..., an и b1, b2, ..., bm, состоящие из целых чисел. Как-то раз Сереже было нечего делать, и он решил поиграть с последовательностями. Правила игры очень простые. Сережа делает несколько ходов, за один ход он может выполнить одно из следующих действий:

  1. Выбрать несколько (хотя бы один) первых элементов последовательности a (непустой префикс a), выбрать несколько (хотя бы один) первых элементов последовательности b (непустой префикс b); при этом элемент последовательности a с наибольшим индексом среди выбранных должен быть равен элементу последовательности b с наибольшим индексом среди выбранных; удалить выбранные элементы из последовательностей.
  2. Удалить все элементы обеих последовательностей.

Первое действие стоит e единиц энергии и приносит на электронный баланс Сергея один доллар. Второе действие стоит столько единиц энергии, сколько элементов удалил Сережа из последовательностей до выполнения этого действия. Выполнив второе действие Сережа получает все деньги, накопившиеся на его электронном балансе за время игры.

Изначально у Сережи есть s единиц энергии и нет денег на электронном балансе. Какое максимальное количество денег Сережа может получить, играя с последовательностями, если в любой момент игры количество его энергии не должно становиться отрицательным?

Входные данные

Первая строка содержит целые числа n, m, s, e (1 ≤ n, m ≤ 105; 1 ≤ s ≤ 3·105; 103 ≤ e ≤ 104). Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 105). Третья строка содержит m целых чисел b1, b2, ..., bm (1 ≤ bi ≤ 105).

Выходные данные

Выведите единственное целое число — максимальную сумму в долларах, которую Сережа может получить.

E. Сережа и множества

дп *2500

Пусть множество S состоит из m различных интервалов [l1, r1], [l2, r2], ..., [lm, rm] (1 ≤ li ≤ ri ≤ n; li, ri — целые числа).

Пусть f(S) — максимальное количество интервалов, которое можно выбрать из множества S, чтобы среди них не было ни одной пары пересекающихся. Считается, что два интервала [l1, r1] и [l2, r2] пересекаются, если найдется целое число x, для которого выполняются неравенства: l1 ≤ x ≤ r1 и l2 ≤ x ≤ r2.

Сереже интересно: сколько существует таких множеств S, что f(S) = k? Посчитайте для него это количество по модулю 1000000007 (109 + 7).

Входные данные

Первая строка содержит целые числа n, k (1 ≤ n ≤ 500; 0 ≤ k ≤ 500).

Выходные данные

В единственную строку выведите ответ на задачу по модулю 1000000007 (109 + 7).

D. Расшифровка сигнала

дп Строки строковые суфф. структуры *2200

Штаб-квартира полиции отслеживает сигналы на разных частотах. Недавно они записали две подозрительные строки, s1 и s2, на двух частотах. Полиция подозревает, что эти две строки принадлежат двум преступникам, планирующим сделать какое-то злое деяние.

Поэтому полиция пытается найти общую подстроку этих двух строк. Искомая подстрока должна быть уникальной в первой строке и во второй строке. Другими словами, она должна встречаться ровно один раз в первой строке и ровно один раз во второй строке. Среди всех таких строк, полицию интересует строка с минимальной длиной.

Вам даны две строки, s1 и s2, состоящие из строчных букв латинского алфавита. Чему равна длина минимальной по длине общей уникальной подстроки строк s1 и s2? Формальное определение подстроки и уникальности смотрите в примечании.

Входные данные

В первой строке записана строка s1, а во второй строке записана строка s2 (1 ≤ |s1|, |s2| ≤ 5000). Обе строки состоят из строчных букв латинского алфавита.

Выходные данные

Выведите длину наименьшей общей уникальной подстроки s1 и s2. Если общих уникальных подстрок у s1 и s2 нет, выведите -1.

Примечание

Представьте, что у нас есть строка a = a1a2a3...a|a|, где |a| — это длина строки a, а aii-я буква строки.

Строку alal + 1al + 2...ar (1 ≤ l ≤ r ≤ |a|) будем называть подстрокой [l, r] строки a.

Подстрока [l, r] уникальная в a тогда и только тогда, когда нет пары l1, r1, такой, что l1 ≠ l и подстрока [l1, r1] равняется подстроке [l, r] в a.

B. Тренировка

дп *1600

Приближается лето! Пора Яхубу и Яхубине заняться спортом, ведь они оба хотят выглядеть привлекательно на пляже. Тренажерный зал, куда они идут, представляет собой матрицу a c n строками и m столбцами. Число a[i][j] обозначает калории, сжигаемые тренировкой в части спортзала, которая находится в i-й строке и j-м столбце матрицы.

Яхуб начинает тренировку в строке 1 и столбце 1. Завершить тренировку он хочет в a[n][m]. После завершения тренировки в a[i][j], Яхуб может перейти в часть зала a[i + 1][j] или a[i][j + 1]. Аналогично, Яхубина начинает тренировку в a[n][1] и должна закончить тренировку в a[1][m]. Когда она завершает тренировку в a[i][j], она идет либо в a[i][j + 1], либо в a[i - 1][j].

Тренировка Яхуба и Яхубины дополнительно должна удовлетворять еще одному условию. Им нужно встретиться ровно в одной клетке спортзала. В этой клетке никто из них не будет заниматься спортом, там они будут разговаривать об алгоритмах (передышка от тренажеров). Затем каждый из них перейдет к следующему тренажеру.

Если либо Яхуб, либо Яхубина занимался/занималась в a[i][j], то число a[i][j] прибавляется к общей выгоде тренировки (изначально она равна 0). Пожалуйста, составьте план тренировки для Яхуба и Яхубины, такой, чтобы общая выгода в итоге была максимальна. Обратите внимание, что Яхуб и Яхубина могут тренироваться с различными скоростями, поэтому количество пройденных частей зала до места встречи у них может различаться.

Входные данные

В первой строке записано два целых числа, n и m (3 ≤ n, m ≤ 1000). В каждой из следующих n строк записано по m целых чисел: j-е число в i-й строке обозначает a[i][j] (0 ≤ a[i][j] ≤ 105).

Выходные данные

В выведите единственное целое число — максимальную выгоду.

Примечание

Яхуб выберет тренажеры a[1][1] → a[1][2] → a[2][2] → a[3][2] → a[3][3]. Яхубина выберет тренажеры a[3][1] → a[2][1] → a[2][2] → a[2][3] → a[1][3].

C. Угадай дерево

битмаски Деревья дп жадные алгоритмы Конструктив *2300

Яхуб и Яхубина пошли на пикник. Зашли они в густой лес. Не прошло и пяти минут, как Яхуб вспомнил про деревья в информатике. Более того, он придумал новую задачу, и Яхубине надо ее решить, а не то Яхуб ее не покормит.

Яхуб спрашивает у Яхубины: можешь ли ты построить такое корневое дерево, что

  • каждая внутренняя вершина дерева (вершина, имеющая хотя бы одного сына) имеет по меньшей мере двух сыновей;
  • у вершины i в поддереве содержится ci вершин?

Яхубина должна придумать описанное дерево. Она девушка умная и поняла, что, возможно, описанного дерева вовсе не существует. Тогда вся еда достанется Яхубу. Вы должны помочь Яхубине: определите, есть ли хотя бы одно дерево, удовлетворяющее ограничениям Яхуба. Требуемое дерево должно состоять из n вершин.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 24). В следующей строке записано n положительных целых чисел: i-е число обозначает ci (1 ≤ ci ≤ n).

Выходные данные

Выведите в первой строке «YES» (без кавычек), если хотя бы одно дерево удовлетворяет ограничениям Яхуба, в противном случае выведите «NO» (без кавычек).

C. k-дерево

Деревья дп реализация *1600

Совсем недавно креативный студент Леша прослушал лекцию по деревьям. После лекции Леша был вдохновлен и придумал собственное дерево, которое он назвал k-дерево.

k-дерево — это бесконечное корневое дерево, в котором:

  • каждая вершина имеет ровно k сыновей;
  • каждое ребро имеет некоторый вес;
  • если рассмотреть ребра из некоторой вершины в ее сыновей (ровно k ребер), то их веса будут равны 1, 2, 3, ..., k.

На рисунке ниже представлен фрагмент 3-дерева.

Как только Дима, хороший друг Леши, узнал про это дерево, его сразу заинтересовал вопрос: «Сколько существует путей с суммарным весом ребер равным n, которые начинаются в корне k-дерева, а также содержат хотя бы одно ребро веса не меньше d?».

Помогите Диме узнать ответ на его вопрос. Так как количество путей может быть достаточно большим, найдите остаток от деления ответа на 1000000007 (109 + 7).

Входные данные

В единственной строке, через пробел, записано три целых числа: n, k и d (1 ≤ n, k ≤ 100; 1 ≤ d ≤ k).

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю 1000000007 (109 + 7).

D. Случайное задание

Бинарный поиск битмаски дп Комбинаторика математика *2100

Однажды после сложной лекции старательная студентка Саша увидела исписанную парту в аудитории. Присмотревшись, она прочитала следующее: «Найдите такое целое положительное n, что среди чисел n + 1, n + 2, ..., n есть ровно m чисел, в двоичной записи которых ровно k единиц.»

Ее заинтересовало это задание, и она просит вас помочь ей его решить. Саша знает, что вы боитесь больших чисел, поэтому она гарантирует, что существует ответ не превышающий 1018.

Входные данные

В первой строке через пробел записано два целых числа m и k (0 ≤ m ≤ 1018; 1 ≤ k ≤ 64).

Выходные данные

Выведите искомое число n (1 ≤ n ≤ 1018). Если ответов несколько — выведите любой.

D. Префиксы и суффиксы

дп Строки строковые суфф. структуры *2000

Дана строка s = s1s2...s|s|, где |s| — длина строки s, а si — ее i-й символ.

Введем несколько определений:

  • Подстрокой s[i..j] (1 ≤ i ≤ j ≤ |s|) строки s называется строка sisi + 1...sj.
  • Префиксом строки s длины l (1 ≤ l ≤ |s|) называется строка s[1..l].
  • Суффиксом строки s длины l (1 ≤ l ≤ |s|) называется строка s[|s| - l + 1..|s|].

Требуется для каждого префикса строки s, который совпадает с суффиксом строки s, вывести, сколько раз он встречается в строке s как подстрока.

Входные данные

В единственной строке записана последовательность символов s1s2...s|s| (1 ≤ |s| ≤ 105) — строка s. Строка состоит только из больших букв латинского алфавита.

Выходные данные

В первой строке выведите целое число k (0 ≤ k ≤ |s|) — количество префиксов, которые совпадают с суффиксом строки s. Далее выведите k строк, в каждой строке выведите два целых числа li ci. Числа li ci обозначают, что префикс длины li совпадает с суффиксом длины li и встречается в строке s в качестве подстроки ci раз. Пары li ci выводите в порядке возрастания li.

B. Камни Курияма Мираи

дп реализация сортировки *1200

Курияма Мираи убила много чудовищ и получила в награду много (а именно n) камней. Все камни Курияма Мираи пронумерованы от 1 до n. Цена i-го камня равняется vi. Курияма Мираи хочет узнать некоторую информацию о своих камнях, с этой целью она задает вам вопросы. Каждый вопрос имеет один из следующих видов:

  1. Она называет вам два числа, l и r (1 ≤ l ≤ r ≤ n), а вы должны сказать ей, чему равна сумма .
  2. Пусть ui равняется цене i-го по дешевизне камня (цена, которая будет на i-ом месте, если расположить все цены камней в порядке неубывания). На этот раз она называет вам два числа, l и r (1 ≤ l ≤ r ≤ n), а вы должны сказать ей, чему равна сумма .

Вам нужно ответить правильно на ее вопросы, или Курияма Мираи скажет «fuyukai desu» (яп. неприятно) и расстроится.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). Во второй строке записано n целых чисел: v1, v2, ..., vn (1 ≤ vi ≤ 109) – цены камней.

В третьей строке записано целое число m (1 ≤ m ≤ 105) — количество вопросов Курияма Мираи. Затем следует m строк, в каждой строке записано три целых числа: type, l и r (1 ≤ l ≤ r ≤ n; 1 ≤ type ≤ 2), описывающих текущий вопрос. Если type равняется 1, то вам нужно вывести ответ на вопрос первого типа, в противном случае надо вывести ответ на вопрос второго типа.

Выходные данные

Выведите m строк. В каждой строке должно быть записано целое число — ответ на вопрос Курияма Мираи. Выводите ответы на вопросы в порядке их следования во входных данных.

Примечание

Пожалуйста, обратите внимание, что для хранения ответов на вопросы может быть не достаточно 32-битных целых чисел.

E. Тофу Тачибана Канаде

дп *2500

Тачибана Канаде очень любит Мапо Тофу. Однажды в столовой приготовили очень много самых разных тофу, но не всякое тофу — Мапо Тофу. Мапо Тофу — это достаточно острое тофу.

Каждый кусочек тофу в столовой имеет свой идентификатор — число, записанное в системе счисления с основанием m. Диапазон идентификаторов — это интервал [l, r] (l и r — числа в системе счисления с основанием m), и для каждого числа из этого диапазона существует кусочек тофу с таким идентификатором.

Чтобы определить, какое тофу Мапо Тофу, Тачибана Канаде выбрала n строк из цифр в системе счисления с основанием m и для каждой строки определила некоторое значение. Теперь Тачибана Канаде хочет посчитать для каждого кусочка тофу его значение следующим образом. Изначально значение кусочка тофу равно 0. Если какая-то из n выбранных строк встречается в идентификаторе тофу как подстрока, то значение этой строки нужно добавить к значению этого тофу. Если строка встречается в идентификаторе несколько раз, то и значение прибавляется несколько раз.

Тачибана Канаде считает, что тофу со значением не более k — это Мапо Тофу. И теперь девушка хочет знать, сколько кусочков тофу в столовой являются Мапо Тофу?

Входные данные

В первой строке записано три целых числа n, m и k (1 ≤ n ≤ 200; 2 ≤ m ≤ 20; 1 ≤ k ≤ 500), где n обозначает количество выбранных строк, m обозначает основание системы счисления, k — предельное значение для Мапо Тофу.

Во второй строке задана запись числа l. Сначала в строке записано целое число len (1 ≤ len ≤ 200), оно обозначает длину (количество цифр в m-ричной записи) числа l. Затем в строке записаны len разделенных пробелом целых чисел a1, a2, ..., alen (0 ≤ ai < ma1 > 0), обозначающих цифры числа l в системе счисления m, цифра a1 наиболее значащая, цифра alen наименее значащая.

В третьей строке записано число r в таком же формате, как и число l. Гарантируется, что выполняется неравенство 1 ≤ l ≤ r.

В следующих n строках записаны выбранные для оценки строки из цифр. В i-й строке сначала записана i-ая строка из цифр в системе счисления по основанию m, а затем целое число vi — значение этой строки (1 ≤ vi ≤ 200). Все строки из цифр заданы почти в таком же формате, как и число l, единственное отличие состоит в том, что эти строки могут иметь лидирующие нули, которые важны для решения задачи (смотрите первый тестовый пример). Сумма длин строк из цифр не превышает 200.

Выходные данные

Выведите количество кусочков Мапо Тофу по модулю 1000000007 (109 + 7). Ответ должен быть десятичным целым числом.

Примечание

В первом примере 10, 11 и 100 — единственные три кусочка тофу в отрезке [1, 100] со значением больше 1. Обратите внимание, что значение кусочка тофу 1 равно 1, а не 2, так как идентификаторы не могут содержать ведущих нулей и следовательно, не могут записываться как «01».

Во втором примере ни у одного кусочка на данном интервале нет значения больше 12.

В третьем примере 110000 и 110001 — единственные два идентификатора на данном интервале со значением не больше 6.

D. Специальная сетка

дп жадные алгоритмы Перебор *2000

Задана сетка размера n × m, некоторые узлы которой черные, а остальные белые. Более того, сетка не совсем обычная — в каждом единичном квадрате сетки проведены диагонали.

На рисунке ниже изображен пример такой сетки размера 3 × 5. Четыре узла этой сетки черные, остальные 11 узлов белые.

Требуется посчитать количество таких треугольников на заданной сетке, что:

  • их углы совпадают с белыми узлами, а площадь ненулевая;
  • все стороны проходят по линиям сетки (горизонтальным, вертикальным или диагональным);
  • никакая сторона не содержит черных узлов.
Входные данные

В первой строке записаны два целых числа n и m (2 ≤ n, m ≤ 400). В каждой следующих n строк содержится по m символов (нулей и единиц) — описание сетки. Если j-й символ в i-й строке равен нулю, значит узел на i-й горизонтальной линии и на j-й вертикальной линии покрашен в белый цвет. Иначе этот символ покрашен в черный цвет.

Горизонтальные линии нумеруются от единицы сверху вниз, вертикальные линии нумеруются от единицы слева направо.

Выходные данные

Выведите единственное целое число — количество требуемых треугольников.

Примечание

На рисунке ниже красным и синим цветами выделены треугольники, которые считаются в ответе (это не все требуемые треугольники, а только два из них). Зеленым выделен один из неподходящих треугольников. Он не подходит, поскольку не все его стороны проходят по линиям сетки.

D. Pudding Monsters

дп *2800

Вы когда-нибудь играли в Pudding Monsters? В этой задаче используется упрощенная одномерная модель этой игры.

Представьте себе бесконечную клетчатую полоску, клетки которой пронумерованы последовательно целыми числами. В некоторых клетках полоски стоят монстры, остальные клетки полоски пустые. Все монстры состоят из пудинга, поэтому, если два монстра стоят в соседних клетках полоски, то они склеиваются. Аналогично, если несколько монстров стоят подряд, то все они склеиваются в один блок монстров. Будем называть склеенных друг с другом монстров блоком монстров. Отдельно стоящий монстр, не склеенный ни с кем другим, также считается блоком.

За один ход игрок может взять любой блок монстров и движением руки швырнуть его влево или вправо. Выбранные монстры будут скользить до тех пор, пока не упрутся в какого-то другого монстра (или блок монстров).

Например, если на полоске стоят три монстра в клетках 1, 4 и 5. Тогда возможны только четыре хода: отправить монстра в клетке 1 в минус бесконечность, отправить блок монстров в клетках 4 и 5 в плюс бесконечность, швырнуть монстра 1 вправо (он остановится в клетке 3), швырнуть блок монстров в клетках 4 и 5 влево (они остановятся в клетках 2 и 3).

Некоторые клетки отмечены звездами. Это особенные клетки. Цель игры — сделать так, чтобы на максимально возможном количестве особенных клеток стояли монстры.

Вам заданы номера особенных клеток полоски, а также начальное положение всех монстров. Какое максимальное количество особых клеток можно занять монстрами?

Входные данные

В первой строке записаны два целых числа n и m (1 ≤ n ≤ 105; 1 ≤ m ≤ 2000) — количество монстров на полоске и количество особенных клеток.

Во второй строке записаны n различных целых чисел — номера клеток с монстрами, в третьей строке записаны m различных целых чисел — номера особенных клеток. Гарантируется, что все номера клеток целые положительные числа не превышающие 2·105.

Выходные данные

Выведите единственное целое число — максимальное количество особых клеток, которое можно занять монстрами.

F. Banners

дп Перебор Структуры данных *3000

Все современные мобильные приложения делятся на платные и бесплатные. Даже разработчики одного приложения часто выпускают две версии: платную версию без рекламы и бесплатную версию с рекламой.

Предположим, что платная версия приложения стоит p (p — целое число) рублей, а бесплатная версия приложения содержит c рекламных баннеров. Каждого пользователя можно охарактеризовать двумя целыми числами: ai — сколько рублей этот пользователь не пожалеет за платную версию приложения, и bi — сколько баннеров он готов терпеть в бесплатной версии приложения.

Поведение каждого пользователя будем считать строго детерминированным:

  • если для пользователя i значение bi не меньше c, тогда он пользуется бесплатной версией,
  • иначе, если значение ai не меньше p, то он покупает платную версию без рекламы,
  • иначе пользователь просто не пользуется приложением.

Каждый пользователь бесплатной версии приложения приносит прибыль c × w рублей. Каждый пользователь платной версии приложения приносит прибыль p рублей.

Ваша задача — помочь разработчикам приложения оптимально выбрать параметры p и c. А именно, считая, что известны все характеристики пользователей, для каждого значения c от 0 до (max bi) + 1 определить максимальную прибыль от приложения и соответствующий параметр p.

Входные данные

В первой строке записаны два целых числа n и w (1 ≤ n ≤ 105; 1 ≤ w ≤ 105) — количество пользователей и прибыль с одного баннера. В каждой из следующих n строк записано два целых числа ai и bi (0 ≤ ai, bi ≤ 105) — характеристики i-го пользователя.

Выходные данные

Выведите (max bi) + 2 строки, в i-й строке выведите два целых числа: pay — максимальная полученная прибыль при c = i - 1, p (0 ≤ p ≤ 109) — соответствующая оптимальная стоимость. Если существует несколько оптимальных решений, разрешается вывести любое.

E. Ребенок и многоугольник

геометрия дп *2500

На этот раз наш ребенок раздобыл простой многоугольник. Ему надо найти количество способов разбить многоугольник на невырожденные треугольники таким образом, что:

  • каждая вершина каждого треугольника — это одна из вершин многоугольника;
  • каждая сторона многоугольника должна быть стороной ровно одного треугольника;
  • площадь пересечения любых двух треугольников равна нулю, а сумма всех площадей треугольников равна площади многоугольника;
  • каждый треугольник полностью расположен внутри многоугольника;
  • каждая сторона каждого треугольника должна содержать ровно две вершины многоугольника.

Ниже приведен рисунок, показывающий пример корректного разбиения.

Пожалуйста, помогите ребенку. Посчитайте описанное количество способов по модулю 1000000007 (109  +  7) для него.

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 200) — количество вершин многоугольника. Затем следует n строк, каждая строка содержит два целых числа: i-я строка содержит xi, yi (|xi|, |yi| ≤ 107)i-ю вершину многоугольника в порядке обхода по или против часовой стрелки.

Гарантируется, что многоугольник простой.

Выходные данные

Выведите количество способов по модулю 1000000007 (109  +  7).

Примечание

В первом примере существует два возможных разделения:

Во втором примере есть только одно возможное разделение:

E. Деву и праздник день рождения

дп Комбинаторика математика *2100

Сегодня день рождения Деву. Чтобы отпраздновать это событие, он купил n конфет на рынке неподалеку и пригласил f своих друзей. Сейчас Деву хочет поделить конфеты между друзьями. Деву — добрый парень, и день сегодня особенный, так что он не хочет, чтобы кто-то грустил. Поэтому очень важно, чтобы каждый друг получил хотя бы одну конфету.

Юноша хочет, чтобы день рождения прошел особенным образом, поэтому конфеты требуется разделить по особенному. Предположим, что он раздал n сладостей своим друзьям так, что i-му другу досталось ai конфет. Не должно существовать ни одного целого числа x (x > 1), которое делит все ai.

Найдите количество способов распределения сладостей между друзьями, удовлетворяющих описанным ограничениям. Обратите внимание, что порядок имеет значение, например, [1, 2] и [2, 1] — различные распределения конфет. Так как ответ может быть достаточно велик, пожалуйста, выведите его по модулю 1000000007 (109 + 7).

Чтобы задача была еще интереснее, вам дано q запросов. Каждый запрос содержит пару n, f. Для каждого запроса выведите необходимое количество способов по модулю 1000000007 (109 + 7).

Входные данные

В первой строке записано целое число q, обозначающее количество запросов (1 ≤ q ≤ 105). В каждой из следующих q строк записано по два целых числа через пробел: n, f (1 ≤ f ≤ n ≤ 105).

Выходные данные

Для каждого запроса выведите единственное целое число в строке, соответствующее ответу на запрос.

Примечание

Для первого запроса: n = 6, f = 2. Возможные разделения: [1, 5] и [5, 1].

Для второго запроса: n = 7, f = 2. Возможные разделения: [1, 6] и [2, 5] и [3, 4] и [4, 3] и [5, 3] и [6, 1]. Таким образом, всего есть шесть возможных способов разделения.

E. Обезьянка Анфиса

дп *1400

Обезьянка Анфиса учится печатать на клавиатуре. Пока она не знакома с клавишей «пробел» и умеет набирать только строчные латинские буквы. Набрав достаточно длинную строку, Анфиса поняла, что неплохо бы разбить ее на k строк длины не меньше a и не больше b, чтобы ее текст стал более похож на человеческий. Помогите Анфисе.

Входные данные

В первой строке заданы три целых числа k, a и b (1 ≤ k ≤ 200, 1 ≤ a ≤ b ≤ 200). Во второй строке содержится последовательность строчных латинских букв — текст, набранный Анфисой. Гарантируется, что заданная строка не пустая и ее длина не превосходит 200 символов.

Выходные данные

Выведите k строк, каждая из которых содержит не менее a и не более b символов — текст Анфисы, разбитый на строки. Производить любые изменения текста: удалять или добавлять символы, менять их порядок и т.п. не разрешается. Если решений несколько, выведите любое. Если решения не существует, выведите «No solution» (без кавычек).

H. Номер телефона

дп *1700

Найти свою любовь, увы, непросто. Маше пока в этом не везет. Подружка Даша рассказала Маше способ гадания, с помощью которого можно определить номер телефона своего прекрасного принца.

Этот способ заключается в следующем. Сначала нужно выписать свой номер телефона. Например, предположим, что номер телефона Маши 12345. После этого нужно написать свою любимую цифру от 0 до 9 под первой цифрой своего номера. Это будет первая цифра желаемого номера. Например, Машина любимая цифра — 9. Вторая цифра определяется как среднее арифметическое второй цифры Машиного номера и уже записанной первой цифры номера ее возлюбленного. В данном случае среднее арифметическое равно (2 + 9) / 2 = 5, 5. Маша может округлить это число или вверх, или вниз, по собственному усмотрению. Например, она выбирает цифру 5. Записав полученную цифру под второй цифрой своего номера, Маша переходит к получению третьей цифры тем же способом, т.е. находя полусумму третьей цифры своего номера и второй цифры нового номера. Получается (5 + 3) / 2 = 4. В данном случае ответ однозначен. Таким образом, каждая i-я цифра определяется как среднее арифметическое i-й цифры Машиного номера и i - 1-й цифры номера ее возлюбленного, при необходимости возможно округление в любую сторону. Например, Маша может получить:

12345
95444
К сожалению, звонок по этому номеру разочаровал Машу: выяснилось, что абонент временно недоступен или находится вне зоны действия сети. Но Маша не отчаивается. Возможно, она произвела округления в неправильную сторону или неудачно выбрала первую цифру. Поэтому она продолжает получать все новые и новые номера описанным способом и звонить по ним. Вычислите количество номеров, по которым позвонит Маша. Маша звонит по всем возможным номерам, которые можно получить при помощи описанного гадания, кроме, возможно, своего собственного.
Входные данные

В первой строке задана непустая последовательность из цифр от 0 до 9 — номер телефона Маши. Длина последовательности не превосходит 50.

Выходные данные

Выведите одно число — количество номеров, по которым позвонит Маша.

E. Валера и число

битмаски дп математика Теория вероятностей *2400

Валера — программист. Недавно Валера написал забавную программу. Ниже показан псевдокод этой программы:


//входные данные: целые числа x, k, p
a = x;
for(step = 1; step <= k; step = step + 1){
rnd = [случайное целое число от 1 до 100];
if(rnd <= p)
a = a * 2;
else
a = a + 1;
}

s = 0;

while(остаток от деления a на 2 равен 0){
a = a / 2;
s = s + 1;
}

Теперь Валера интересуется, при заданных x, k и p чему равно математическое ожидание полученного числа s?

Входные данные

В первой строке входных данных задано три целых числа x, k, p (1 ≤ x ≤ 109; 1 ≤ k ≤ 200; 0 ≤ p ≤ 100).

Выходные данные

Выведите требуемое математическое ожидание. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превышает 10 - 6.

Примечание

Если вы не знакомы с термином математическое ожидание, то вы можете почитать про него по ссылке:

http://ru.wikipedia.org/wiki/Математическое_ожидание

A. DZY любит последовательности

дп реализация *1600

У DZY есть последовательность a, состоящая из n целых чисел.

Назовем последовательность ai, ai + 1, ..., aj (1 ≤ i ≤ j ≤ n) подотрезком последовательности a. Значение (j - i + 1) обозначает длину подотрезка.

DZY хочет найти максимальный по длине подотрезок a, обладающий следующим свойством. Из подотрезка можно получить строго возрастающую последовательность, выполнив изменение не более одного элемента подотрезка (разрешается изменить значение любого элемента подотрезка на любое целое значение).

Ваша задача — вывести длину искомого оптимального подотрезка.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). В следующей строке записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

В единственной строке выведите ответ на задачу — максимальную длину подотрезка.

Примечание

Вы можете выбрать подотрезок a2, a3, a4, a5, a6 и заменить его 3-й элемент (то есть, a4) на 4.

C. Про покраску забора

дп жадные алгоритмы разделяй и властвуй *1900

Бизон-Чемпион не только внимательный, но и очень трудолюбивый.

Бизон-Чемпион решил покрасить свой старый забор в свой любимый оранжевый цвет. Забор представляет из себя n вертикальных досок, расположенных в ряд. Между соседними досками нет зазора. Доски нумеруются слева направо начиная с единицы, i-я доска имеет ширину 1 метр и высоту ai метров.

Бизон-Чемпион купил в магазине кисть шириной 1 метр. Он умеет делать вертикальные и горизонтальные мазки этой кистью. Причем во время мазка кисть должна непрерывно и полностью касаться забора (смотрите пояснения примеров для лучшего понимания). Какое минимальное количество мазков придется сделать Бизону-Чемпиону, чтобы полностью покрасить забор? Обратите внимание, что разрешается красить один и тот же участок забора несколько раз.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 5000) — количество досок забора. Во второй строке записаны через пробел n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

Выведите целое число — минимальное количество мазков, необходимых для покраски всего забора.

Примечание

В первом примере можно покрасить забор за три мазка кистью: первый проходит на высоте 1 горизонтально по всем доскам, второй — на высоте 2 горизонтально красит первую и вторую доски, а третий мазок (он может быть как горизонтальный, так и вертикальный) докрашивает четвертую доску.

Во втором примере можно покрасить забор как двумя горизонтальными, так и двумя вертикальными мазками.

В третьем примере всего одна доска, которую можно покрасить, используя один вертикальный мазок.

D. Jzzhu и числа

битмаски дп Комбинаторика *2400

У Jzzhu есть n неотрицательных целых чисел a1, a2, ..., an. Назовем последовательность индексов i1, i2, ..., ik (1 ≤ i1 < i2 < ... < ik ≤ n) группой размера k.

Jzzhu интересно, сколько существует таких групп, что ai1 & ai2 & ... & aik = 0 (1 ≤ k ≤ n)? Помогите ему найти их количество по модулю 1000000007 (109 + 7).

Операция x & y обозначает операцию побитового И двух чисел.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 106). Во второй строке записано n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 106).

Выходные данные

Выведите единственное целое число — количество требуемых групп по модулю 1000000007 (109 + 7).

E. Jzzhu и квадраты

дп математика теория чисел *2900

У Jzzhu есть два целых числа n и m. Он называет целочисленную точку (x, y) плоскости специальной, если 0 ≤ x ≤ n и 0 ≤ y ≤ m. Единичным квадратом Jzzhu называет квадрат, углы которого находятся в точках (x, y), (x + 1, y), (x + 1, y + 1), (x, y + 1), где x и y некоторые целые числа.

Рассмотрим все квадраты (их стороны не обязательно параллельны осям координат), углы которых являются специальными точками. Для каждого такого квадрата Jzzhu нарисовал по точке во всех единичных квадратах, которые находятся целиком внутри него. В итоге некоторые единичные квадраты могут содержать несколько точек. Теперь ему интересно, сколько всего точек на плоскости он нарисовал. Найдите остаток от деления этого числа на 1000000007 (109 + 7).

Входные данные

В первой строке записано целое число t (1 ≤ t ≤ 105) — количество тестов.

В каждой из следующих t строк записано описание очередного теста: два целых числа n и m (1 ≤ n, m ≤ 106) — параметры задачи для текущего теста.

Выходные данные

Для каждого теста выведите суммарное количество точек, которое нарисует Jzzhu.

B. Школа

дп снм *2200

В 6Б классе берляндской средней школы учится n ребят. У каждого из них есть ровно один друг, которому он звонит, когда узнает новость. Обозначим друга i-ого человека через g(i). Обратите внимание, что дружбы не взаимны, т. е. g(g(i)) не обязательно равно i.

В i-ый день человек с номером ai узнает новость с рейтингом bi (bi ≥ 1). Он тут же звонит своему другу и рассказывает ее. При этом новость устаревает, и ее рейтинг немного падает и становится bi - 1. Друг действует так же — он тоже звонит своему другу и тоже рассказывает новость. Друг друга получает новость уже с рейтингом bi - 2. Все это продолжается до тех пор, пока рейтинг новости не упадет до нуля — никто не захочет рассказывать новость с нулевым рейтингом.

Более формально, все действуют следующим образом: если человек x узнал новость с ненулевым рейтингом y, он звонит своему другу g(i), и тот узнает новость с рейтингом y - 1 и, если возможно, продолжает процесс.

Заметим, что в течение одного дня один и тот же человек может позвонить своему другу и рассказать ему одну и ту же новость с разными рейтингами. Таким образом, новость с рейтингом bi повлечет за собой ровно bi звонков.

Ваша задача: посчитать величины resi — сколько учеников узнали свою первую новость в день i.

Значения bi известны сразу, а вот ai вычисляются по следующей формуле:

где mod обозначает операцию взятия остатка от деления, res0 считается равным нулю, а vi — некоторые заданные целые числа.
Входные данные

В первой строке через пробел записано два целых числа n и m (2 ≤ n, m ≤ 105) — количество учеников и количество дней. Во второй строке через пробел записано n целых чисел g(i) (1 ≤ g(i) ≤ n, g(i) ≠ i) — номер друга i-го ученика. В третьей строке через пробел записано m целых чисел vi (1 ≤ vi ≤ 107). В четвертой строке через пробел записано m целых чисел bi (1 ≤ bi ≤ 107).

Выходные данные

Выведите m строк по одному числу на каждой. i-ая строка должна содержать resi — для какого количества учеников первой новостью, которую они узнали за рассматриваемые m дней, была новость номер i. Номер новости — это номер дня, в который ее можно было узнать. Дни нумеруются с 1 в том порядке, в котором они заданы во входных данных. res0 выводить не следует.

B. Маленькая пони и ларец гармонии

битмаски дп Перебор *2000

Принцесса Twilight пришла к Celestia в замок, где раньше жила Luna, чтобы исследовать ларец элементов гармонии.

Последовательность положительных целых чисел bi называется гармонической тогда и только тогда, когда наибольший общий делитель любых двух ее элементов равен 1. Согласно древней книге, ключ от ларца — это гармоническая последовательность bi, минимизирующая значение выражения:

Вам дана последовательность ai. Помогите принцессе Twilight найти ключ от ларца.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 100) — количество элементов в последовательностях a и b. Следующая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 30).

Выходные данные

Выведите ключ — последовательность bi, которая минимизирует сумму, описанную выше. Если существует несколько правильных последовательностей, выведите любую.

D. Маленькая пони и элементы гармонии

дп матрицы *3000

Элементы гармонии — это шесть артефактов, обладающих сверхъестественной силой. Каждый из них является некоторым аспектом гармонии. Вполне вероятно, что элементы гармонии — это самые могущественные силы в Equestria. Каждый элемент гармонии представляет из себя полный граф с n вершинами, пронумерованными от 0 до n - 1, где n — степень двойки, равная 2m.

Энергия в элементах гармонии находится в постоянном движении. Согласно древней книге, энергия вершины u в момент времени i (ei[u]) равна:

Здесь b[] — это коэффициент трансформации, массив состоящий из m + 1 целых чисел. Функция f(u, v) обозначает количество единичных битов в битовом представлении числа (u xor v).

Вам задан коэффициент трансформации элемента гармонии, а также энергия каждой вершины в момент времени 0 (e0[i]). Помогите Twilight Sparkle посчитать энергию каждой вершины в момент t (et[i]). Так как числа могут получиться довольно большими, выведите их по модулю p.

Входные данные

В первой строке записаны три целых числа: m, t и p (1 ≤ m ≤ 20; 0 ≤ t ≤ 1018; 2 ≤ p ≤ 109). Следующая строка содержит n (n = 2m) целых чисел e0[i] (1 ≤ e0[i] ≤ 109; 0 ≤ i < n). В следующей строке записаны m + 1 целых чисел b[i] (0 ≤ b[i] ≤ 109; 0 ≤ i ≤ m).

Выходные данные

Выведите n строк, в i-й строке выведите et[i] по модулю p.

A. Скука

дп *1500

Леша не любит скучать. Поэтому, когда ему скучно, он придумывает игры. Как-то раз Леша придумал следующую игру.

Задана последовательность a, состоящая из n целых чисел. Игрок может сделать несколько ходов. За один ход игрок может выбрать некоторый элемент последовательности (обозначим выбранный элемент ak) и удалить его, при этом из последователости также удаляются все элементы, равные ak + 1 и ak - 1. Описанный ход приносит игроку ak очков.

Леша максималист и поэтому хочет набрать как можно больше очков. Какое максимальное количество очков он сможет набрать?

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105) — количество элементов последовательности. Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 105) — элементы последовательности.

Выходные данные

Выведите целое число — максимальное количество очков, которые может набрать Леша.

Примечание

Рассмотрим третий тестовый пример. В этом тестовом примере нужно действовать так.

Первоначально нужно выбрать любой элемент, равный 2. Тогда последовательность станет равна [2, 2, 2, 2]. Далее, делаем еще 4 хода, на каждом ходу выбираем любой элемент, равный 2. Итого мы заработали 10 очков.

B. Много игр

Деревья дп игры поиск в глубину и подобное реализация Строки *1900

Андрей, Федя и Леша — очень изобретательные ребята. В очередной раз они придумали игру для двоих игроков со строками.

Задан набор, состоящий из n непустых строк. Во время игры два игрока вместе строят слово, изначально это слово пустое. Игроки ходят по очереди. За свой ход игрок должен дописать в конец слова одну букву так, чтобы полученное слово было префиксом хотя бы одной строки из заданного набора. Проигрывает тот, кто не может сделать ход.

Андрей и Леша решили сыграть в эту игру k раз. Причем, игрок, проигравший в i-й игре, делает первый ход в (i + 1)-й игре. Ребята решили, что победителем по сумме всех игр будет считаться тот, кто победил в последней (k-й) игре. Андрей и Леша уже начали играть, а Федя в это время решил посчитать: кто будет победителем, если оба игрока будут играть оптимально. Помогите ему.

Входные данные

Первая строка содержит два целых числа, n и k (1 ≤ n ≤ 105; 1 ≤ k ≤ 109).

Каждая из n следующих строк содержит непустую строку из заданного набора. Суммарная длина всех строк из набора не превышает 105. Все строки из набора состоят только из строчных латинских букв.

Выходные данные

Если победит игрок, который ходит первым, то выведите «First», иначе выведите «Second» (кавычки выводить не нужно).

C. Цивилизация

Деревья дп поиск в глубину и подобное снм Тернарный поиск *2100

Андрей играет в игру «Цивилизация». Дима помогает ему.

В игре «Цивилизация» n городов и m двусторонних дорог. Города пронумерованы целыми числами от 1 до n. Между любой парой городов либо существует единственный путь, либо не существует никакого пути. Путем называется последовательность различных городов v1, v2, ..., vk, в которой между любыми двумя соседними городами vi и vi + 1 (1 ≤ i < k) есть дорога. Длина такого пути равна (k - 1). Давайте говорить, что два города лежат в одной области тогда и только тогда, когда существует путь между этими двумя городами.

В процессе игры происходят события двух типов:

  1. Андрей спрашивает у Димы длину самого длинного пути в области, в которой лежит город x.
  2. Андрей просит Диму объединить область, в которой лежит город x, с областью, в которой лежит город y. Если города лежат в одной области, то объединять области не нужно. Иначе нужно объединить области следующим образом: выбрать город в первой области, город во второй области и связать их дорогой так, чтобы минимизировать длину самого длинного пути в полученной области. Если существует несколько оптимальных способов соединить области, то разрешается выбрать любой.

Диме очень сложно выполнять просьбы Андрея, поэтому он обращается к вам за помощью. Помогите Диме.

Входные данные

В первой строке содержатся три целых числа n, m, q (1 ≤ n ≤ 3·105; 0 ≤ m < n; 1 ≤ q ≤ 3·105) — количество городов, количество уже имеющихся дорог и количество событий соответственно.

Каждая из следующих m строк содержит два целых числа ai и bi (ai ≠ bi; 1 ≤ ai, bi ≤ n). Эти числа обозначают дорогу между городами ai и bi. Между двумя городами не может быть более одной дороги.

Каждая из следующих q строк содержит одно из двух событий в следующем формате:

  • 1 xi. Запрос Андрея к Диме на нахождение длины максимального пути в области, содержащей город xi (1 ≤ xi ≤ n).
  • 2 xi yi. Запрос Андрея к Диме на объединение области, содержащей город xi, и области, содержащей город yi (1 ≤ xi, yi ≤ n). Обратите внимание, что xi может быть равно yi.
Выходные данные

Для каждого события первого типа выведите ответ на него в отдельной строке.

F. Простая задача о деревьях

Деревья дп жадные алгоритмы игры *3200

Pieguy и Piegirl играют в игру. У них есть корневое бинарное дерево, которое обладает следующим свойством: каждая вершина дерева либо лист, либо имеет ровно два сына. Каждый лист имеет некоторое значение, ассоциированное с ним.

Во время игры игроки по очереди делают ходы. На своем ходу игрок выбирает два листа, имеющих общего непосредственного предка, и удаляет их. При этом он ассоциирует с общим предком листов (после удаления он станет листом) какое-то одно из ассоциированных с ними значений на свой выбор. Игра заканчивается, когда в дереве остается ровно одна вершина — корень дерева.

Pieguy ходит первым и его цель — максимизировать значение, которое будет ассоциировано с корнем в конце игры. Piegirl, наоборот, хочет минимизировать это значение. Считая, что оба игрока играют оптимально, вычислите значение, которое будет ассоциировано с корнем в конце игры.

Входные данные

В первой строке записано целое число t (1 ≤ t ≤ 100) — количество тестовых данных. Далее идет описание t тестовых данных. Каждый тест начинается с пустой строки, за которой следует строка, содержащая целое число n (1 ≤ n ≤ 250) — количество вершин дерева. Затем следуют n строк, описывающих n вершин дерева. Если текущая строка описывает лист дерева, то в ней содержится одно неотрицательное целое число ai (0 ≤ ai ≤ 1000), обозначающее ассоциированное с этим листом значение. Иначе, сперва в строке записано число  - 1, а затем два целых числа l и r (0 ≤ l, r ≤ n - 1) — номер левого и правого сыновей текущей вершины. Вершины дерева пронумерованы от 0 до n - 1. Корень дерева — это вершина с номером 0.

Выходные данные

Для каждого теста в отдельной строке выведите ответ на задачу.

E. Пашмак и граф

дп сортировки *1900

Сегодняшняя домашняя работа Пашмака — это задача на графы. Несмотря на то, что он всегда старается выполнить домашнюю работу полностью, эту задачу решить он не может. К сожалению, он не силен в теории графов. Пожалуйста, помогите ему.

Задан взвешенный ориентированный граф с n вершинами и m ребрами. Найдите длиннейший по количеству ребер путь, веса ребер в котором возрастают вдоль пути. Другими словами, у каждого ребра в пути должен быть строго больший вес, чем у предыдущего ребра пути.

Выведите длину описанного пути.

Входные данные

В первой строке записано два целых числа n, m (2 ≤ n ≤ 3·105; 1 ≤ m ≤ min(n·(n - 1), 3·105)). Затем следует m строк. В i-й строке записаны три целых числа через пробел: ui, vi, wi (1 ≤ ui, vi ≤ n; 1 ≤ wi ≤ 105), они обозначают, что в графе есть направленное ребро весом wi от вершины ui к вершине vi.

Гарантируется, что граф не содержит петель и кратных ребер.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

В первом примере подходит любой из путей: .

Во втором примере оптимальный путь: .

В третьем примере оптимальный путь: .

E. Расческа

дп Структуры данных *1900

Преодолев все испытания, Лара Крофт наконец-то оказалась в комнате с сокровищами. К своему удивлению, не найдя там горы золота, Лара осмотрелась и заметила, что на полу нарисована таблица n × m из плит, на которых написаны целые числа, а у стены валяется огромное число камней. На колонне у таблицы Лара нашла поясняющую табличку, которая гласила, что для получения сокровищ надо в каждой строке таблицы выбрать некоторое ненулевое количество первых плит и положить камни на все эти плиты, придавив их. После этого она получит число золотых монет, равное сумме чисел, написанных на выбранных плитах. Лара быстро придумала, как разложить камни, и уже собиралась сделать это, как заметила приписку к таблице, сделанную внизу и мелким шрифтом. Согласно этой приписке, для того, чтобы своды комнаты не обвалились и не придавили искателя приключений, выбранные плиты должны образовывать расческу. Пояснялось, что выбранные плиты образуют расческу, если последовательность c1, c2, ..., cn, составленная из количеств плит, выбранных в каждой строке таблицы, удовлетворяет следующему свойству: c1 > c2 < c3 > c4 < ..., т.е. знак неравенства между соседними элементами чередуется. Теперь Лара в растерянности и не знает, что делать. Помогите ей определить наибольшее количество монет, которое она может получить, выжив при этом.

Входные данные

В первой строке записана пара целых чисел n, m (2 ≤ n, m ≤ 1500). Следующие n строк содержат по m целых чисел каждая — сама таблица. Числа в таблице по модулю не превосходят 10000.

Выходные данные

Выведите единственное число — наибольшее количество монет, которое Лара может получить.

B. Яблов и дерево

Деревья дп поиск в глубину и подобное *2000

У Яблова есть дерево, состоящее из n вершин. Некоторые вершины (по крайней мере одна) покрашены в черный цвет, остальные вершины покрашены в белый цвет.

Рассмотрим множество, состоящее из k (0 ≤ k < n) ребер этого дерева. Если Яблов удалит эти ребра из дерева, то дерево распадется на (k + 1) частей. Каждая часть также будет представлять из себя дерево с покрашенными вершинами.

Теперь Яблову интересно, сколько существует множеств, в результате удаления ребер которых в каждой получившейся части будет ровно одна черная вершина? Выведите это количество по модулю 1000000007 (109 + 7).

Входные данные

В первой строке записано целое число n (2  ≤ n ≤ 105) — количество вершин дерева.

Во второй строке содержится описание дерева: n - 1 целых чисел p0, p1, ..., pn - 2 (0 ≤ pi ≤ i). Где pi означает, что существует ребро, соединяющее вершину (i + 1) и вершину pi дерева. Считайте, что вершины дерева пронумерованы от 0 до n - 1.

В третьей строке записано описание раскраски вершин дерева: n целых чисел x0, x1, ..., xn - 1 (xi равняется либо 0, либо 1). Если xi равняется 1, вершина i покрашена в черный цвет. В противном случае, вершина i покрашена в белый цвет.

Выходные данные

Выведите единственное целое число — количество требуемых множеств по модулю 1000000007 (109 + 7).

D. Gargari и перестановки

графы дп поиск в глубину и подобное реализация *1900

Gargari надоело играть со слонами на шахматной доске из предыдущей задачи, теперь он собирается сделать домашнюю работу по математике. В его учебнике по математике записаны k перестановок. Каждая перестановка — это последовательность чисел 1, 2, ..., n, записанных в некотором порядке. Gargari должен найти длину наибольшей общей подпоследовательности этих k перестановок. Сможете ли вы ему помочь?

Определение задачи о наибольшей общей подпоследовательности можно найти по ссылке: https://ru.wikipedia.org/wiki/Наибольшая_общая_подпоследовательность

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 1000; 2 ≤ k ≤ 5). В каждой из следующих k строк записаны целые числа 1, 2, ..., n в некотором порядке — описание текущей перестановки.

Выходные данные

Выведите длину наибольшей общей подпоследовательности.

Примечание

В первом тестовом примере наибольшая общая подпоследовательность: [1, 2, 3].

C. Замены в числе

дп *2100

Андрей и Женя играют в игру. В начале у Андрея есть строка s, состоящая из цифр. Женя несколько раз дает Андрею запросы вида «di → ti», что означает «замени все цифры di в строке s на подстроки, равные ti». Например, при s = 123123 после запроса «2 → 00» s станет равно 10031003, а после запроса «3 → » («замени 3 на пустую строку») s = 1212. После всех запросов Женя просит Андрея сообщить ему остаток от деления числа, десятичная запись которого совпадает со строкой s, на 1000000007 (109 + 7). При представлении s в виде десятичного числа ведущие нули следует игнорировать; если s — пустая строка, считается, что число равно нулю.

Андрею надоело обрабатывать запросы Жени вручную, и он попросил вас написать программу для этой цели. Помогите ему!

Входные данные

В первой строке записана строка s (1 ≤ |s| ≤ 105), состоящая из цифр — строка до выполнения всех запросов.

Во второй строке записано целое число n (0 ≤ n ≤ 105) — количество запросов.

В следующих n строках заданы описания запросов: i-й запрос описывается строкой вида «di->ti», где di — ровно одна цифра (от 0 до 9), ti — строка, состоящая из цифр (ti может быть пустой строкой). Сумма длин строк ti для всех запросов не превосходит 105. Запросы записаны в том порядке, в котором их следует выполнять.

Выходные данные

Выведите целое число — остаток от деления итогового числа на 1000000007 (109 + 7).

Примечание

Обратите внимание, что ведущие нули не удаляются из строки s после выполнения замены (это отражено в третьем примере).

D. World of Darkraft - 2

дп Теория вероятностей *2700

Рома завел нового персонажа в игре «World of Darkraft - 2». В игре персонаж сражается с монстрами, приобретает все более и более продвинутое снаряжение, что позволяет в свою очередь сражаться с более сильными монстрами.

Персонаж может экипироваться вещами k различных типов. Сила каждой вещи характеризуется целым положительным числом — ее уровнем. Изначально персонаж имеет по одной вещи уровня 1 каждого из k типов.

После победы над одним монстром персонаж находит ровно одну новую вещь, которая генерируется случайным образом. Сначала определяется тип новой вещи; каждый из k типов имеет равную вероятность. После этого определяется уровень новой вещи; пусть уровень вещи выбранного типа, которая есть у игрока в данный момент, равен t. Тогда уровень новой вещи будет выбран равновероятно среди целых чисел из отрезка [1; t + 1].

Из новой вещи и вещи того же типа, которая есть у него в данный момент, Рома выбирает лучшую (то есть вещь с большим уровнем) и экипируется ею, а оставшуюся продает торговцу за монеты (если обе вещи имеют одинаковый уровень, то Рома экипируется любой из них). За вещь уровня x любого типа торговец платит Роме x монет.

Помогите Роме определить математическое ожидание количества заработанных монет после победы над n монстрами.

Входные данные

В первой строке записано два целых числа n и k (1 ≤ n ≤ 105; 1 ≤ k ≤ 100).

Выходные данные

Выведите вещественное число — среднее количество заработанных монет после победы над n монстрами. Ответ считается правильным, если его относительная или абсолютная погрешность не превосходит 10 - 9.

C. Количество способов

Бинарный поиск дп Перебор Структуры данных *1700

Задан массив a[1], a[2], ..., a[n], состоящий из n целых чисел. Посчитайте количество способов разбить все элементы массива на три непрерывные части так, чтобы сумма элементов в каждой части была одинаковой.

Более формально, нужно найти количество таких пар индексов i, j (2 ≤ i ≤ j ≤ n - 1), что .

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 5·105) — количество чисел в массиве. Во второй строке записаны n целых чисел a[1], a[2], ..., a[n] (|a[i]| ≤  109) — элементы массива a.

Выходные данные

Выведите единственное целое число — количество способов разбить массив на три части с одинаковой суммой.

D. Увеличьте последовательность

дп Комбинаторика *2100

У Пети есть последовательность целых чисел a1, a2, ..., an. Петя хочет, чтобы все числа в ней были равны h. Он умеет выполнять операцию «прибавления единицы на отрезке [l, r]»: прибавить ко всем элементам последовательности с номерами от l до r (включительно) единицу. При этом Петя никогда не выбирает какое-то число в качестве начала отрезка повторно. Аналогично, Петя никогда не выбирает какое-то число в качестве конца отрезка повторно. Другими словами, для любых двух отрезков [l1, r1] и [l2, r2], на которых Петя выполнял прибавление единицы, верны следующие неравенства: l1 ≠ l2 и r1 ≠ r2.

Сколько существует различных способов сделать все числа последовательности равными h? Выведите это количество способов по модулю 1000000007 (109 + 7). Два способа считаются различными, если в одном из них есть отрезок, которого нет в другом.

Входные данные

В первой строке записано два целых числа n, h (1 ≤ n, h ≤ 2000). В следующей строке записано n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 2000).

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю 1000000007 (109 + 7).

C. Юра и работа

дп реализация *1700

Совсем недавно вышел новый ITone 6, и Юра очень захотел себе его купить. К сожалению, денег у него не хватало, поэтому Юра устроился работать программистом. На работе Юра столкнулся со следующей задачей:

Задана последовательность из n чисел p1, p2, ..., pn. Нужно выбрать k пар целых чисел:

[l1, r1], [l2, r2], ..., [lk, rk] (1 ≤ l1 ≤ r1 < l2 ≤ r2 < ... < lk ≤ rk ≤ nri - li + 1 = m), 

так чтобы сумма была как можно больше. Помогите Юре справиться с этим заданием.

Входные данные

В первой строке содержится три целых числа n, m и k (1 ≤ (m × k) ≤ n ≤ 5000). Во второй строке содержится n целых чисел p1, p2, ..., pn (0 ≤ pi ≤ 109).

Выходные данные

В единственной строке выведите целое число — максимальное значение суммы.

D. Федя и реферат

графы дп поиск в глубину и подобное Строки хэши *2400

После того, как вы помогли Феде найти друзей в игре «Call of Soldiers 3», он совсем перестал учиться. Сегодня преподаватель английского в качестве домашнего задания попросил Федю подготовить реферат. Федя не хотел готовить реферат, поэтому он попросил Лешу о помощи. Леша написал реферат за Федю, но Феде он совсем не понравился. Теперь Федя собирается немного изменить реферат, используя словарь синонимов английского языка.

Федя не хочет менять смысл реферата, поэтому единственное изменение, которое он будет делать: менять слово на один из его синонимов, используя правило замены из словаря. Эту операцию Федя может выполнять любое количество раз.

В итоге Федя хочет получить реферат, который, во-первых, содержит как можно меньше букв «R» (регистр не важен), а во-вторых, из всех рефератов с минимальным количеством букв «R» имеет минимальную длину (длина реферата — это сумма длин всех слов в нем). Помогите Феде получить требуемый реферат.

Обратите внимание, что в этой задаче регистр букв не имеет значения. Например, если в словаре синонимов записано, что слово cat можно заметить на слово DOG, то разрешается заменить слово Cat на слово doG.

Входные данные

В первой строке содержится целое число m (1 ≤ m ≤ 105) — количество слов в тексте реферата. Во второй строке записаны слова реферата. Слова разделяются в строке одним пробелом. Гарантируется, что суммарная длина слов не превысит 105.

В следующей строке содержится единственное целое число n (0 ≤ n ≤ 105) — количество пар синонимов в словаре синонимов. В последующих n строках содержатся пары синонимов. В i-й строке записаны две непустые строки xi и yi, которые обозначают, что слово xi можно заменить на слово yi (но не наоборот). Гарантируется, что суммарная длина всех пар синонимов не превысит 5·105.

Все слова во входных данных могут состоять только из строчных и прописных букв английского алфавита.

Выходные данные

Выведите два целых числа — минимальное количество букв «R» в полученном реферате и минимальная длина полученного реферата.

E. Леша и сложная задача

дп жадные алгоритмы Структуры данных *2300

Прочитав все предыдущие задачи, можно сделать вывод, что Леша очень умный мальчик. Так и есть! Однажды он придумал следующую задачу.

Задана последовательность целых чисел a1, a2, ..., an. Требуется найти последовательность b1, b2, ..., b4m наибольшей длины, удовлетворяющую условиям:

  • b4k + 1 = b4k + 3 для всех корректных целых k;
  • b4k + 2 = b4k + 4 для всех корректных целых k;
  • последовательность b является подпоследовательностью a (подпоследовательность не обязательно должна быть непрерывной).

И что вы думаете? Леша задал задачу Юре, а Юра вам. Помогите Юре, решить задачу.

Входные данные

В первой строке содержится единственное целое число n (1 ≤ n ≤ 5·105). В следующей строке содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

В первой строке выведите единственное целое число 4m — максимальная длина найденной последовательности. Далее выведите 4m целых чисел b1, b2, ..., b4m — найденная последовательность.

Если существует несколько оптимальных последовательностей, разрешается вывести любую.

E. Перманент

meet-in-the-middle дп математика Паросочетания *3100

Little X на днях решил #P полную задачу за полиномиальное время. Теперь он задает эту задачу вам!

Дана особая матрица A размера n × n, ваша задача — подсчитать ее перманент по модулю 1000000007 (109 + 7). Особое свойство матрицы A заключается в том, что почти все ее элементы равняются 1. Только k элементов имеют заданное значение.

Определение перманента можно найти по следующей ссылке: https://ru.wikipedia.org/wiki/Перманент

Входные данные

В первой строке записано два целых числа через пробел, n, k (1 ≤ n ≤ 105; 1 ≤ k ≤ 50).

В следующих k строках записано описание матрицы. В i-й строке записано три целых числа через пробел xi, yi, wi (1 ≤ xi,  yi ≤  n; 0  ≤  wi  ≤ 109). Эти числа обозначают, что Axi, yi = wi. Все элементы матрицы, кроме заданных, равны 1.

Гарантируется, что все позиции (xi, yi) различны.

Выходные данные

Выведите перманент матрицы по модулю 1000000007 (109  +  7).

D. Цветы

дп *1700

Мы видели маленькую игру, которую Сурок приготовил для Крота на обед. Теперь Сурку пора ужинать — а мы все знаем, что Сурок ест цветы. За каждым ужином он ест немного красных и немного белых цветов. Таким образом, ужин можно представить как последовательность белых и красных цветов.

Но для того, чтобы ужин был вкусный, есть одно правило: когда Сурок хочет отведать белых цветов, он потребляет их только группами размера k.

Теперь Сурку интересно, сколько существует способов съесть от a до b цветов по его правилам. Так как количество способов может быть очень большим, выведите его по модулю 1000000007 (109 + 7).

Входные данные

На вход подаётся несколько наборов входных данных.

В первой строке записано два целых числа t и k (1 ≤ t, k ≤ 105), где t обозначает количество тестовых примеров.

В следующих t строках записано по два целых числа ai и bi (1 ≤ ai ≤ bi ≤ 105), описывающих i-й тест.

Выходные данные

Выведите t строк. В i-й строке должно содержаться количество способов, которыми Сурок может съесть от ai до bi цветков за ужином, взятое по модулю 1000000007 (109 + 7).

Примечание
  • При K = 2 и длине 1 Сурок может съесть (R).
  • При K = 2 и длине 2 Сурок может съесть (RR) и (WW).
  • При K = 2 и длине 3 Сурок может съесть (RRR), (RWW) и (WWR).
  • При K = 2 и длине 4 Сурок может съесть, например, (WWWW) или (RWWR). Но вот (WWWR), к примеру, съесть но не может.

E. Столбы

Бинарный поиск Деревья дп сортировки Структуры данных *2000

Сурок нашел ряд из n столбов. Высота i-ого столба равняется hi метрам. Начиная с некоторого столба i1, Сурок хочет пропрыгать по столбам i2, ..., ik. (1 ≤ i1 < i2 < ... < ik ≤ n). Сурок может перепрыгнуть со столба i на столб j, только если i < j и |hi - hj| ≥ d, где |x| — абсолютное значение числа x.

Сурок просит вас найти последовательность прыжков максимальной длины и вывести её.

Входные данные

В первой строке записано два целых числа n и d (1 ≤ n ≤ 105, 0 ≤ d ≤ 109).

Во второй строке записано n чисел h1, h2, ..., hn (1 ≤ hi ≤ 1015).

Выходные данные

В первой строке должно быть записано одно целое число k — максимальная длина последовательности прыжков.

Во второй строке должно быть записано k целых чисел i1, i2, ..., ik (1 ≤ i1 < i2 < ... < ik ≤ n) — номера столбов из максимально длинной последовательности прыжков.

Если есть несколько последовательностей прыжков максимальной длины, выведите любую из них.

Примечание

В первом примере Сурок выбирает столбы 1, 2, 3, 5 с высотами 1, 3, 6, 4. Ещё одна последовательность прыжков длины 4 такова: 1, 2, 4, 5.

B. Dreamoon и WiFi

битмаски дп Комбинаторика математика Перебор Теория вероятностей *1300

Dreamoon стоит на отметке 0 на числовой прямой. Drazil отправляет ему на смартфон список команд через Wi-Fi, а Dreamoon следует им.

Каждая команда относится к одному из двух типов:

  1. Пройти на 1 единицу в положительном направлении, обозначается как «+»
  2. Пройти на 1 единицу в отрицательном направлении, обозначается как «-»

Но так как уровень сигнала Wi-Fi очень слабый, смартфон Dreamoon'а сообщает, что некоторые команды не поддаются распознаванию. Более того, Dreamoon знает, что даже некоторые из рапознанных команд могут быть неверными. Dreamoon решил выполнять каждую распознанную команду, а для нераспознанных команд бросать монетку (это значит, что он пойдёт на 1 единицу в положительном или отрицательном направлении с одинаковой вероятностью 0.5).

Вам дан изначальный список команд, которые выслал Drazil, и список, который получил Dreamoon. Какова вероятность того, что Dreamoon окажется в том положении, к которому привели бы команды Drazil'а?

Входные данные

В первой строке записана строка s1 — команды, которые Drazil посылает Dreamoon'у, строка состоит только из символов из набора {«+», «-»}.

Во второй строке записана строка s2 — команды, которые распознал смартфон Dreamoon'а, эта строка состоит только из символов из набора: {«+», «-», «?»}. Символом «?» обозначается нераспознанная команда.

Обе строки одинаковой длины и не превышают 10.

Выходные данные

Выведите требуемую вероятность. Ответ будет сраниваться с относительной или абсолютной погрешностью 10 - 9.

Примечание

В первом примере как s1, так и s2 приведут Dreamoon'а к одной и той же позиции  + 1.

Во втором примере s1 приведет Dreamoon'а к позиции 0, в то время как для s2 есть четыре варианта: {"+-++", "+-+-", "+--+", "+---"} с конечными позициями {+2, 0, 0, -2}, соответственно. Таким образом, есть 2 подходящих случая из 4, так что вероятность окончить путь в верной позиции равна 0.5.

Для третьего примера, s2 может привести только к позициям {+1, -1, -1, -3}, таким образом, вероятность окончить путь в позиции  + 3 равна 0.

E. Dreamoon и строки

дп Строки *2200

У Dreamoon есть строка s и шаблон p. Сперва он удаляет ровно x символов из s, в результате чего получается строка s'. Затем он подсчитывает , которое определяется как максимальное количество непересекающихся подстрок, равняющихся p, которые можно выделить в s'. Он хочет, чтобы это число было как можно больше.

Более формально, определим как максимальное значение по всем s', которые можно получить, удалив ровно x символов из s.

Dreamoon хочет знать для всех x от 0 до |s|, где |s| обозначает длину строки s.

Входные данные

В первой строке записана строка s (1 ≤ |s| ≤ 2 000).

Во второй строке записана строка p (1 ≤ |p| ≤ 500).

Обе строки состоят только из строчных букв латинского алфавита.

Выходные данные

Выведите на единственной строке |s| + 1 целых чисел через пробел — для всех x от 0 до |s|.

Примечание

В первом примере соответствующие оптимальные s' после удаления от 0 до |s| = 5 символов из s таковы: {«aaaa, «aaaa», «aa, «aa», «a», «»}.

Для второго примера оптимальные s' могут выглядеть как {«axbaxxb», «abaxxb», «axbab», «abab», «ab, «ab», «a», «»}.

D. Dreamoon и двоичное исчисление

дп Строки *2700

Dreamoon увидел большое целое число x, записанное на земле, теперь ему хочется вывести его в двоичной записи. Dreamoon успешно преобразовал x в двоичный формат. Теперь он собирается распечатать это число следующим образом.

У него есть целое число n = 0 и он может выполнять две следующие операции неограниченное количество раз в любом порядке:

  1. Распечатать двоичную запись n без ведущих нулей, результат печати добавляется справа к уже выведенной строке.
  2. Увеличить n на 1.

Определим идеальную последовательность как последовательность операций, которая может вывести двоичную запись x без ведущих нулей и заканчивается операцией 1. Dreamoon хочет знать, сколько существует различных идеальных последовательностей и какова длина (в операциях) наикратчайшей идеальной последовательности.

Ответы могут быть очень большими, поэтому выводите их по модулю 1 000 000 007 (109 + 7).

Определим строковое представление идеальной последовательности как строку из символов '1' и '2', где i-й символ в строке соответствует i-й выполненной операции. Две идеальные последовательности называются различными, если их строковые представления различны.

Входные данные

В единственной строке записано целое число в двоичной записи без ведущих нулей, обозначающее x (1 ≤ x < 25000).

Выходные данные

В первой строке должно быть записано целое число — количество различных идеальных последовательностей по модулю 1 000 000 007 (109 + 7).

Во второй строке должно быть записано целое число — минимальная длина идеальной последовательности по модулю 1 000 000 007 (109 + 7).

Примечание

В первом примере наикратчайшая и единственная идеальная последовательность — «222221» длины 6.

Во втором примере существует три идеальных последовательности «21211», «212222222221», «222222222222222222222222221». Среди них кратчайшая имеет длину 5.

D. Красно-зеленые башни

дп *2000

Имеется r красных и g зеленых кубиков для строительства красно-зеленой башни. Красно-зеленую башню можно построить по следующим правилам:

  • Красно-зеленая башня должна состоять из некоторого количества уровней;

  • Пусть красно-зеленая башня состоит из n уровней, тогда первый уровень этой башни должен состоять из n кубиков, второй уровень — из n - 1 кубиков, третий — из n - 2 кубиков, и так далее — последний уровень такой башни должен состоять из одного кубика. Другими словами, каждый последующий уровень должен содержать на один кубик меньше, чем предыдущий;

  • Каждый уровень красно-зеленой башни может состоять только из кубиков одного цвета.

Пусть h — наибольшее возможное количество уровней у красно-зеленой башни, построенной по описанным выше правилам из r красных и g зеленых кубиков. Требуется определить сколько различных красно-зеленых башен, состоящих из h уровней, можно построить из имеющихся кубиков.

Две красно-зеленых башни считаются различными, если существует уровень, который в первой башне состоит из кубиков красного цвета, а во второй — из кубиков зеленого цвета.

Ваша задача — написать программу, которая по заданным значениям r и g найдет искомое количество различных красно-зеленых башен высоты h по модулю 109 + 7.

Входные данные

В единственной строке содержатся два целых числа r и g, разделенных одним пробелом, — количество имеющихся красных и зеленых кубиков соответственно (0 ≤ r, g ≤ 2·105, r + g ≥ 1).

Выходные данные

Выведите единственное целое число — искомое количество различных красно-зеленых башен высоты h по модулю 109 + 7.

Примечание

На приведенном в условии изображении показаны все возможные красно-зеленые башни для первого примера из условия.

E. Катаемся на лифте

дп Комбинаторика *1900

Представьте себе, что вы находитесь в здании, в котором есть ровно n этажей. Для перемещения между этажами в здании есть лифт.

Пронумеруем этажи снизу вверх целыми числами от 1 до n. Сейчас вы находитесь на этаже с номером a. Вам очень скучно, поэтому вы хотите покататься на лифте. На этаже с номером b находится секретная лаборатория, вход в которую вам запрещен. Однако вы уже настроились и решили последовательно совершить k поездок на лифте.

Предположим, что в данный момент вы находитесь на этаже с номером x (изначально вы находились на этаже a). Для очередной поездки между этажами вы выбираете некоторый этаж с номером y (y ≠ x), и лифт везет вас на этот этаж. Поскольку вам нельзя посещать этаж b с секретной лабораторией, то вы решили, что расстояние от текущего этажа x до выбранного этажа y должно быть строго меньше, чем расстояние от текущего этажа x до этажа b с секретной лабораторией. Формально, это означает, что должно выполняться неравенство |x - y| < |x - b|. После того, как лифт успешно привез вас на этаж y, вы выписываете себе в блокнот число y.

Ваша задача — определить количество различных последовательностей чисел, которые вы могли выписать себе в блокнот в результате k поездок на лифте. Поскольку искомое количество может быть очень большим, найдите остаток от деления этого количества на 1000000007 (109 + 7).

Входные данные

В первой строке входных данных записаны четыре целых положительных числа через пробел n, a, b, k (2 ≤ n ≤ 5000, 1 ≤ k ≤ 5000, 1 ≤ a, b ≤ n, a ≠ b).

Выходные данные

Выведите единственное число — остаток от деления искомого количества последовательностей на 1000000007 (109 + 7).

Примечание

Две последовательности p1, p2, ..., pk и q1, q2, ..., qk называются различными, если существует такое целое число j (1 ≤ j ≤ k), что pj ≠ qj.

Пояснения к примерам:

  1. В первом примере после первой поездки вы можете оказаться либо на этаже 1, либо на этаже 3, поскольку |1 - 2| < |2 - 4| и |3 - 2| < |2 - 4|.
  2. Во втором примере всего две возможных последовательности: (1, 2); (1, 3). Вы не можете выбрать этаж 3 для первой поездки, потому что в этом случае никакой из этажей не подойдет для второй поездки.
  3. В третьем примере искомых последовательностей не существует, поскольку вы не можете выбрать этаж для первой поездки.

E. Иванушка-дурачок против Змея Горыныча

графы дп игры *2100

В тридевятом царстве, в тридесятом государстве... Итак, начнем с того момента, как Иванушка-дурачок встретил Змея Горыныча. Достал Иванушка меч-кладенец, и началась у них битва. Сначала у Змея Горыныча было h голов и t хвостов. Каждым ударом меча Иванушка может отрубить либо несколько голов (от 1 до n, но не больше, чем голов у Горыныча в данный момент), либо несколько хвостов (от 1 до m, но не больше, чем хвостов у Горыныча в данный момент). При этом (о, ужас!) у Змея Горыныча могут вырастать новые головы и хвосты. Причем количество вырастающих голов и хвостов однозначно определяется в зависимости от количества голов или хвостов, отрубленных очередным ударом. Когда суммарное количество голов и хвостов станет строго больше R, Змей Горыныч нанесет свой решающий удар и повергнет Иванушку-дурачка. Поэтому Иванушка стремится как можно быстрее отрубить все головы и хвосты Змею и победить. Возможен и третий вариант развития событий: ни один из противников не сможет одолеть другого и они будут сражаться бесконечно.

Скоро сказка сказывается, да нескоро дело делается. Ваша задача — написать программу, определяющую исход битвы. Учтите, что Иванушка-дурачок наносит удары последовательно. После каждого удара у Горыныча вырастают новые головы и хвосты в зависимости от количества отрубленных. Змей Горыныч считается побежденным, если после очередного удара он лишается всех голов и хвостов и у него не вырастает новых. Иванушка сражается оптимально (дурачкам везет!), т.е.

  • если Иванушка может победить, он побеждает за наименьшее количество ударов;
  • если победить Горыныча невозможно, но можно бесконечно долго сопротивляться ему, то Иванушка выбирает именно эту стратегию;
  • если победу в любом случае одержит Змей Горыныч, Иванушка стремится сопротивляться ему как можно дольше.
Входные данные

В первой строке содержатся три целых числа h, t и R (0 ≤ h, t, R ≤ 200, 0 < h + t ≤ R) — изначальные количества голов и хвостов у Змея Горыныча и наибольшее суммарное количество голов и хвостов, при котором Змей Горыныч еще не переходит в наступление. В следующей строке содержится целое число n (1 ≤ n ≤ 200). Следующие n строк содержат пары неотрицательных целых чисел «hi ti» — количество голов и количество хвостов соответственно, которые вырастут, если Горынычу отрубить i голов (1 ≤ i ≤ n). В следующей строке содержится целое число m (1 ≤ m ≤ 200) и затем — описание поведения Горыныча при отрубании хвостов в формате, аналогичном описанному выше. Все числа во входном файле не превосходят 200.

Выходные данные

В первой строке выведите «Ivan» (без кавычек), если победит Иванушка, или «Zmey», если победит Змей Горыныч. Во второй строке выведите единственное целое число — количество ударов, нанесенных Иванушкой. Если битва будет продолжаться бесконечно, выведите в первой строке «Draw».

G. Галактический Союз

Деревья дп *2700

В одной далекой галактике n обитаемых планет, пронумерованных числами от 1 до n. Однажды независимо друг от друга президенты всех n планет пришли к идее о создании Галактического Союза. Теперь необходимо поделиться этой прекрасной идеей с собратьями по разуму, поэтому каждый из президентов занят разработкой проекта переговоров с остальными президентами.

Для переговоров между некоторыми парами планет существуют двунаправленные каналы связи, каждый из которых характеризуется «временем дозвона» ti, которое, как правило, занимает несколько часов и значительно превышает время разговора. Всего в галактике n каналов связи, и они объединяют все планеты в единую сеть. Это означает, что с любой планеты u можно дозвониться до любой планеты v, возможно, через некоторые промежуточные планеты v1, v2, ..., vm при помощи существующих каналов между u и v1, v1 и v2, ..., vm - 1 и vm, vm и v. При этом время дозвона с u до v будет равно суммарному времени дозвона задействованных каналов.

Итак, каждому президенту необходимо поговорить по очереди с президентами остальных n - 1 планет. При этом переговоры проходят строго последовательно, и пока переговоры с очередной планетой не завершатся, дозвон до следующей не начинается. Поскольку дело очень срочное, из различных способов дозвона до нужной планеты каждый раз выбирается самый быстрый. Для убеждения другого президента в ценности Галактического Союза не требуется много времени, поэтому время переговоров с каждой планетой можно считать равным времени дозвона до нее. Так как президенты ничего не подозревают о намерениях друг друга, они не учитывают в своих планах, что, например, нужный президент может позвонить сам или уже знать о создающемся Галактическом Союзе из других источников.

Правительства всех n планет обратились к вам для разработки плана переговоров. В первую очередь вам предстоит выяснить для каждого президента, сколько времени займут его предполагаемые переговоры.

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 200000) — количество планет в галактике и равное ему количество каналов связи. В следующих n строках записано по три целых числа ai, bi и ti (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ ti ≤ 103) — номера планет, соединенных каналом связи, и его «время дозвона». Между парой планет не может быть более одного канала связи.

Выходные данные

В первой строке выведите n целых чисел — времена предполагаемых переговоров для каждого из президентов. Числа разделяйте пробелами.

D. Посылки

графы дп *2600

Ярослав — владелец небольшой курьерской службы. Недавно он приобрел и внедрил новую систему обработки посылок. Каждая посылка представляет собой коробку, имеющую свой вес и прочность. Система устроена так, что внутри нее находится изначально пустая платформа, на которую можно ставить коробки по следующим правилам:

  • Если платформа пуста, коробка ставится непосредственно на платформу, в противном случае — на самую верхнюю коробку, находящуюся на платформе.
  • Суммарный вес всех коробок, находящихся на платформе, в любой момент времени не должен превышать прочности платформы S.
  • Прочность любой находящейся на платформе коробки в любой момент времени должна быть не меньше суммарного веса коробок, стоящих выше.

Снимать с платформы можно только самую верхнюю коробку.

На вход системе поступают n посылок, при этом i-я посылка поступает ровно в момент времени ini, ее вес и прочность равны wi и si соответственно. Каждая посылка имеет свою стоимость vi бурлей, однако, чтобы получить эту стоимость, системе необходимо выдать посылку ровно в момент времени outi, в противном случае Ярослав получит за нее 0 бурлей. Таким образом, любую посылку можно пропустить и не ставить на платформу, формально выдав ее в момент времени ini и не получив за нее ничего.

Любая операция в задаче выполняется мгновенно. Это означает, что в один и тот же момент времени можно совершить сразу несколько операций по приему и выдаче посылок, причем в любом порядке.

Обратите внимание, что посылка, выданная в момент времени outi, сразу же оказывается вне системы, и следующие действия, происходящие в этот же момент времени, производятся без ее учета.

Поскольку система очень сложна, а поступающих посылок очень много, Ярослав просит Вас сказать, какую максимальную сумму денег он может получить с помощью своей системы.

Входные данные

В первой строке входных данных содержатся два числа, разделенных пробелом n и S (1 ≤ n ≤ 500, 0 ≤ S ≤ 1000). Далее следует n строк, в i-й из этих строк содержатся пять чисел, разделенных пробелом: ini, outi, wi, si и vi (0 ≤ ini < outi < 2n, 0 ≤ wi, si ≤ 1000, 1 ≤ vi ≤ 106). Гарантируется, что для любых i и j (i ≠ j) либо ini ≠ inj, либо outi ≠ outj.

Выходные данные

Выведите единственное число — максимальную сумму (в бурлях), которую может получить Ярослав.

Примечание

Пояснение ко второму примеру (T — момент времени):

  • T = 0: Приходит первая посылка, ставим ее на пустую платформу.
  • T = 1: Приходят вторая и третья посылки, ставим третью на текущую верхнюю на платформе посылку (т.е. первую), затем вторую на третью. Теперь первая посылка держит вес w2 + w3 = 2, третья — w2 = 1.
  • T = 2: Выдаем вторую посылку, получая v2 = 1 бурль. Теперь первая посылка держит вес w3 = 1, третья — 0.
  • T = 3: Приходит четвертая посылка. Сначала выдаем третью посылку, получая v3 = 1 бурль. Теперь первая посылка держит вес 0. Ставим на нее четвертую посылку — первая держит вес w4 = 2.
  • T = 4: Приходит пятая посылка. Поставить ее на верхнюю на платформе мы не можем, так как первая посылка, в таком случае, будет держать вес w4 + w5 = 3, что выше ее прочности s1 = 2, что недопустимо. Пропускаем пятую посылку, не получая за нее ничего.
  • T = 5: Ничего не происходит.
  • T = 6: Выдаем сначала четвертую, потом первую посылку, получая за них v1 + v4 = 3 бурля.

Заметим, что можно было пропустить четвертую посылку и поставить пятую вместо нее, однако в этом случае полученная сумма составила бы 4 бурля.

C. Игра со строками

битмаски дп Теория вероятностей *2600

Вы играете в игру со своим другом. Ниже приведено описание этой игры.

Ваш друг придумывает n различных строк одинаковой длины m и сообщает вам все строки. Далее он выбирает случайным образом одну из них. Он выбирает строки равновероятно, то есть вероятность выбора каждой из n строк равна . Вы хотите угадать, какую из строк выбрал ваш друг.

Для того, чтобы угадать строку, загаданную другом, вам разрешается задавать другу вопросы. Каждый вопрос имеет следующую форму: «Какой символ стоит на позиции pos в загаданной тобой строке?». Строка считается угаданной, когда ответы на заданные вопросы однозначно определяют загаданную строку. После того, как строка становится угаданной, вы прекращаете задавать вопросы.

У вас нет определённой стратегии, поэтому очередным вопросом вы каждый раз равновероятно выбираете одну из еще не названных позиций. Ваша задача — определить математическое ожидание количества вопросов, необходимых для того, чтобы угадать выбранную вашим другом строку.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 50) — количество строк, придуманных вашим другом.

В следующих n строках заданы строки, придуманные вашим другом. Гарантируется, что все строки различны и состоят только из строчных и прописных букв латинского алфавита. Кроме того, длины всех строк одинаковы и лежат в промежутке от 1 до 20 включительно.

Выходные данные

Выведите единственное число — искомое математическое ожидание. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не превышает 10 - 9.

Примечание

В первом примере придуманные строки различаются только символом в третьей позиции. Поэтому возможны следующие ситуации:

  • вы угадаете загаданную строку за один вопрос. Вероятность этого события ;
  • вы угадаете загаданную строку за два вопроса. Вероятность этого события равна · = (поскольку в таком случае первым вопросом нужно спросить про позицию отличную от трех);
  • вы угадаете загаданную строку за три вопроса. Вероятность этого события равна · · = ;

Таким образом искомое математическое ожидание равно

Во втором примере нам максимум может потребоваться два вопроса, поскольку любая пара вопросов определяет строку. Поэтому искомое математическое ожидание равно .

В третьем примере, независимо от того, про какую позицию мы спросим первым вопросом, мы сразу угадаем загаданную строку.

D. Случайная функция и дерево

Деревья дп Комбинаторика *2700

У вас есть корневое дерево, состоящее из n вершин. Пронумеруем вершины дерева целыми числами от 1 до n включительно. Корень дерева находится в вершине 1. Для каждого i > 1 непосредственным предком вершины i является вершина pi. Назовём вершину i ребёнком вершины pi.

Изначально вы покрасили все вершины в красный цвет. Кроме этого, вы любите перекрашивать некоторые вершины дерева. Для этого вы используете функцию paint, которую вы вызываете от корня дерева. Ниже приведен псевдокод этой функции:


count = 0 // глобальная целочисленная переменная

rnd() { // эта функция используется в коде paint
вернуть 0 или 1 с равной вероятностью 50%
}

paint(s) {
if (count четное) then покрасить вершину s в белый цвет
else покрасить вершину s в черный цвет

count = count + 1

if rnd() = 1 then children = [массив из детей вершины s в порядке возрастания номеров]
else children = [массив из детей вершины s в порядке убывания номеров]

for child in chilren { // проходим по элементам массива child
if rnd() = 1 then paint(child) // выполняем рекурсивный вызов функции paint
}
}

В результате выполнения этой функции некоторые вершины могут изменить свой цвет на белый или чёрный, а некоторые — остаться красными.

Ваша задача — определить количество различных возможных раскрасок вершин дерева. Будем считать раскраску возможной, если существует ненулевая вероятность получить эту раскраску с помощью одного вызова функции paint(1). Будем считать раскраски различными, если существует пара вершин, которые покрашены в различные цвета в этих раскрасках. Поскольку искомое количество может быть очень большим, найдите остаток от деления этого количества на 1000000007 (109 + 7).

Входные данные

В первой строке записано единственное целое число n (2 ≤ n ≤ 105) — количество вершин в дереве.

Во второй строке записано n - 1 целое число p2, p3, ..., pn (1 ≤ pi < i). Число pi обозначает номер предка вершины i.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю 1000000007 (109 + 7)

Примечание

Ниже приведены все возможные покраски первого примера.

D. Детский сад

дп жадные алгоритмы Структуры данных *2400

В детском саду проходит распределение детей по группам. Воспитательница расставила детей в ряд и оценила харизматичность каждого ребенка целым числом. Каждый ребенок должен оказаться ровно в одной группе. Группа детей должна представлять из себя непустой отрезок подряд идущих детей в ряду. Общительность группы определяется как максимальная разность харизматичностей между двумя детьми в группе (в частности, если группа состоит из одного ребенка, то ее общительность равна нулю). Воспитательница хочет разбить детей на некоторое количество групп таким образом, чтобы суммарная общительность групп была максимальной. Помогите найти это значение.

Входные данные

В первой строке содержится целое число n — количество детей в ряду (1 ≤ n ≤ 106).

Во второй строке содержатся n целых чисел ai — харизматичность i-го ребенка ( - 109 ≤ ai ≤ 109).

Выходные данные

Выведете максимальную возможную суммарную общительность всех групп.

Примечание

В первом тестовом примере одним из возможных вариантов наилучшего разбиения будет следующее: первые три ребенка образуют группу с общительностью 2, а оставшиеся два ребенка образуют группу с общительностью 1.

Во втором тестовом примере любое разбиение даст один и тот же результат, в каждой группе общительность будет равна 0.

D. Допустимые множества

Деревья дп математика поиск в глубину и подобное *2100

Как вы, наверное, знаете, неориентированный связный граф с n вершинами и n - 1 ребрами называется деревом. Вам дано целое число d и дерево, состоящее из n вершин. С каждой вершиной i связано её значение ai.

Назовем множество S вершин дерева допустимым, если выполняются следующие условия:

  1. S является непустым множеством.
  2. S является связным множеством. Иными словами, если вершины u и v содержатся во множестве S, то все вершины, лежащие на простом пути между u и v должны также лежать в S.
  3. .

Ваша задача — посчитать количество допустимых множеств. Так как результат может быть очень большим, выведите его остаток по модулю 1000000007 (109 + 7).

Входные данные

В первой строке содержатся два целых числа через пробел, d (0 ≤ d ≤ 2000) и n (1 ≤ n ≤ 2000).

Во второй строке записано n целых положительных чисел, разделённых пробелами, a1, a2, ..., an(1 ≤ ai ≤ 2000).

В следующих n - 1 строках записано по паре целых чисел u и v (1 ≤ u, v ≤ n), обозначающих наличие ребра между u и v. Гарантируется, что данный граф является деревом.

Выходные данные

Выведите количество допустимых множеств по модулю 1000000007.

Примечание

В первом примере можно найти ровно 8 допустимых множеств: {1}, {2}, {3}, {4}, {1, 2}, {1, 3}, {3, 4} и {1, 3, 4}. Множество {1, 2, 3, 4} не является допустимым, поскольку оно не отвечает третьему условию. Множество {1, 4} отвечает третьему условию, но противоречит второму условию.

E. Наибольшие возрастающие подпоследовательности

дп жадные алгоритмы математика Структуры данных хэши *2200

Следующее занятие по структурам данных и алгоритмам будет посвящено наибольшей возрастающей подпоследовательности. Чтобы лучше разобраться в теме, Нам решил начать готовиться за несколько дней до занятия.

Нам записал последовательность a, состоящую из n (1 ≤ n ≤ 105) элементов a1, a2, ..., an (1 ≤ ai ≤ 105). Подпоследовательность ai1, ai2, ..., aik, где 1 ≤ i1 < i2 < ... < ik ≤ n называется возрастающей, если ai1 < ai2 < ai3 < ... < aik. Возрастающая подпоследовательность называется наибольшей, если она обладает максимальной длиной среди всех возрастающих подпоследовательностей.

Нам понимает, что у последовательности может быть несколько наибольших возрастающих подпоследовательностей. В связи с этим он хочет разделить все индексы i (1 ≤ i ≤ n) на три группы:

  1. группа всех i, таких, что ai не является элементом ни одной наибольшей возрастающей подпоследовательности.
  2. группа всех i, таких, что ai является элементом по крайней мере одной, но не каждой наибольшей возрастающей подпоследовательности.
  3. группа всех i, таких, что ai является элементом каждой наибольшей возрастающей подпоследовательности.

Так как количество наибольших возрастающей подпоследовательностей a может быть очень большим, произвести подобное разделение очень непросто. Ваша задача — помочь Наму справиться с этим.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 105), обозначающее количество элементов последовательности a.

Во второй строке записано n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 105).

Выходные данные

Выведите строку, состоящую из n символов. i-й символ должен равняться «1», «2» или «3» в зависимости от того, к какой группе из вышеперечисленных принадлежит индекс i.

Примечание

Во втором примере последовательность a состоит из 4 элементов: {a1, a2, a3, a4} = {1, 3, 2, 5}. В последовательности a есть ровно 2 наибольшие возрастающие подпоследовательности длины 3, а именно: {a1, a2, a4} = {1, 3, 5} и {a1, a3, a4} = {1, 2, 5}.

В третьем примере последовательность a состоит из 4 элементов: {a1, a2, a3, a4} = {1, 5, 2, 3}. В последовательности a есть ровно 1 наибольшая возрастающая подпоследовательность длины 3, а именно {a1, a3, a4} = {1, 2, 3}.

B. Лента

Бинарный поиск дп Структуры данных *2000

У Александры есть лента, а на ней — n чисел. Обозначим их за ai слева направо.

Теперь Александра хочет разделить ленту на несколько частей (возможно, на 1). Для каждой части должны выполняться следующие условия:

  • Часть должна содержать не менее l чисел.
  • Разница между наибольшим и наименьшим числом в части должна быть не более s.

Пожалуйста, помогите Александре найти минимальное количество частей, на которые можно разделить ленту, соблюдая указанные условия.

Входные данные

В первой строке записано три разделённых пробелами целых числа n, s, l (1 ≤ n ≤ 105, 0 ≤ s ≤ 109, 1 ≤ l ≤ 105).

Во второй строке следуют n разделённых пробелами целых чисел ai ( - 109 ≤ ai ≤ 109).

Выходные данные

Выведите минимальное количество частей, на которое можно разделить ленту.

Если способа разделить ленту не существует, выведите -1.

Примечание

В первом примере можно разделить ленту на 3 части: [1, 3, 1], [2, 4], [1, 2].

Во втором примере нельзя поместить 1 и 100 на одну часть, так что решения не существует.

B. Бал в БерлГУ

дп жадные алгоритмы Паросочетания поиск в глубину и подобное сортировки *1200

По случаю 100500-летия Берляндского государственного университета совсем скоро состоится бал! Уже n юношей и m девушек во всю репетируют вальс, менуэт, полонез и кадриль.

Известно, что на бал будут приглашены несколько пар юноша-девушка, причем уровень умений танцевать партнеров в каждой паре должен отличаться не более чем на единицу.

Для каждого юноши известен уровень его умения танцевать. Аналогично, для каждой девушки известен уровень ее умения танцевать. Напишите программу, которая определит наибольшее количество пар, которое можно образовать из n юношей и m девушек.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100) — количество юношей. Вторая строка содержит последовательность a1, a2, ..., an (1 ≤ ai ≤ 100), где ai — умение танцевать i-го юноши.

Аналогично, третья строка содержит целое m (1 ≤ m ≤ 100) – количество девушек. В четвертой строке содержится последовательность b1, b2, ..., bm (1 ≤ bj ≤ 100), где bj — умение танцевать j-й девушки.

Выходные данные

Выведите единственное число — искомое максимальное возможное количество пар.

C. Даны длина и сумма цифр...

дп жадные алгоритмы реализация *1400

Вам задано положительное целое число m и неотрицательное целое число s. Ваша задача найти наименьшее и наибольшее из чисел, которые имеют длину m и сумму цифр s. Искомые числа должны быть неотрицательными целыми, записанными в десятичной системе счисления без ведущих нулей.

Входные данные

В единственной строке входных данных записана пара целых чисел m, s (1 ≤ m ≤ 100, 0 ≤ s ≤ 900) — длина и сумма цифр искомых чисел.

Выходные данные

В выходные данные выведите пару искомых неотрицательных целых чисел — сначала минимальное из возможных, потом — максимальное. Если ни одного числа, удовлетворяющего условию, не существует, то выведите пару чисел «-1 -1» (без кавычек).

F. Особые матрицы

дп Комбинаторика *2100

Квадратная матрица n × n называется особой, если:

  • она бинарная, то есть в каждой ячейке стоит либо 0, либо 1;
  • количество единиц в каждой строке и каждом столбце равно 2.

Вам заданы n и первые m строк матрицы. Выведите количество особых матриц n × n таких, первые m строк которых совпадают с заданными.

Так как искомое значение может быть очень большим, то выведите остаток от деления значения на заданное число mod.

Входные данные

Первая строка входных данных содержит три целых чисел n, m, mod (2 ≤ n ≤ 500, 0 ≤ m ≤ n, 2 ≤ mod ≤ 109). Далее идут m строк по n символов в каждой из них — первые строки искомых особых матриц. В каждой из этих строк ровно два символа '1' и все остальные символы — '0'. В каждом столбце заданной m × n таблицы не более двух единиц.

Выходные данные

Выведите остаток при делении искомого количества на число mod.

Примечание

Для первого теста искомые матрицы:


011
101
110

011
110
101

Во втором тесте особая матрица уже задана полностью, поэтому ответ 1.

D. Игра

дп Перебор реализация *1800

Вася и Петя придумали новую игру. Вася берет полоску 1 × n клеточек, и раскрашивает ее клетки в белый и черный. После этого Петя может делать ходы — за один ход он может выбрать любые две соседние клетки одного цвета и перекрасить эти две клетки так, как ему захочется, возможно в разные цвета. Петя может перекрашивать клетки только в белый и черный. Цель Пети — перекрасить полоску так, чтобы никакие две соседние клетки не были одного цвета. Помогите Пете — по заданной начальной раскраске найдите наименьшее количество ходов, необходимое Пете чтобы выиграть.

Входные данные

В первой строке записано число n (1 ≤ n ≤ 1000) — длина полоски. Во второй строке без пробелов записано n символов — начальная раскраска строки. 0 соответствует белой клетке, 1 соответствует черной клетке.

Выходные данные

Если Петя не сможет выиграть при такой начальной раскраске, выведите -1. Иначе выведите наименьшее число ходов, необходимое Пете для победы.

Примечание

В первом примере Петя может выбрать клетки 1 и 2. Он перекрашивает клетку 1 в черный и клетку 2 в белый.

Во втором примере Петя может выбрать клетки 2 и 3. Он перекрашивает клетку 2 в белый и клетку 3 в черный.

E. Общий предок

дп *2300

Последовательность ДНК любого живого существа в Берляндии представима в виде непустой строки из маленьких латинских букв. Берляндские ученые выяснили, что эволюции всех существ происходят поэтапно. На одном этапе ровно один некоторый символ последовательности ДНК заменяется ровно на два других. При этом всего бывает n допустимых замен. Замена ai->bici означает, что можно заменить один любой символ ai на пару символов bici. Каждая замена могла произойти неограниченное число раз.

Говорят, что два существа, имеющие последовательности ДНК s1 и s2, могут иметь общего предка, если существует такая последовательноcть ДНК s3, что из нее в процессе эволюции могут быть получены s1 и s2, возможно за разное число этапов. По заданным s1 и s2 требуется определить, могут ли существа, имеющие такие последовательности ДНК, иметь общего предка. В случае положительного ответа требуется найти длину кратчайшей последовательноcти ДНК общего предка.

Входные данные

В первой строке записана непустая последовательность ДНК s1, во второй строке записана непустая последовательность ДНК s2. Длины этих строк не превосходят 50, строки содержат только маленькие латинские буквы. В третьей строке записано целое число n (0 ≤ n ≤ 50) — допустимых замен. Далее следует n строк, каждая из которых описывает очередную замену в формате ai->bici. Символы ai, bi, и ci — маленькие латинские буквы. Строки s1 и s2 могут совпадать, список замен может содержать одинаковые замены.

Выходные данные

Если s1 и s2 не могут иметь общего предка, выведите -1. Иначе выведите длину кратчайшей последовательности s3, из которой могли быть получены s1 и s2.

F. Турне по Древляндии

Деревья дп поиск в глубину и подобное Структуры данных *2200

Группа ДТП планирует беспрецедентное турне по Древляндии. Фанаты ДТП предвкушают событие и делают ставки, как много концертов даст любимая группа.

Древляндия состоит из n городов, некоторые пары из которых соединены двусторонними дорогами. Всего в этой стране n - 1 дорога. Известно, что из любого города можно добраться до любого другого. Города пронумерованы от целыми числами 1 до n. Про каждый город известна величина ri — количество жителей в нем.

Достоверно известно, что музыканты проедут по некоторому пути, давая концерты в некоторых городах вдоль этого пути. Путь музыкантов не будет проходить по одному городу дважды, каждый раз они будут переезжать в ранее не посещенный город. Таким образом музыканты проедут по некоторому пути (не посещая никакой город дважды) и в каких-то (необязательно всех) городах вдоль пути дадут концерты.

По мере турне группа планирует собирать все большие стадионы и концертные площадки, поэтому каждый раз они будут выступать в городе с большим количеством жителей, чем в городе предыдущего выступления. Иными словами, последовательность численностей населения в городах, где будут концерты, будет строго возрастающей.

В недавнем интервью лидер группы ДТП пообещал фанатам, что группа даст концерты в максимальном возможном количестве городов! Таким образом группа проедет по некоторой цепочке городов Древляндии и даст концерты в некоторых из этих городов так, что численности будут возрастать, а количество концертов будет максимально возможным.

Фанаты Древляндии судорожно пытаются понять, сколько концертов даст «ДТП» в Древляндии. Кажется, без помощи настоящего программиста не обойтись! Помогите фанатам найти искомое количество концертов.

Входные данные

В первой строке входных данных записано целое число n (2 ≤ n ≤ 6000) — количество городов в Древляндии. Следующая строка содержит n целых чисел r1, r2, ..., rn (1 ≤ ri ≤ 106), где ri — численность населения i-го города. Следующая n - 1 строка содержит описания дорог, по одной дороге в строке. Каждая из дорог задается парой целых чисел aj, bj (1 ≤ aj, bj ≤ n) — парой номеров городов, которые соединены j-й дорогой. Все числа в строках разделяются пробелами.

Выходные данные

Выведите количество городов, в которых «ДТП» даст концерты.

B. Одержимость строкой

дп Строки *2000

Хамед недавно нашел строку t и неожиданно для себя крепко к ней привязался. Несколько дней он пытался найти все вхождения t в другие имеющиеся у него строки. Наконец, он устал и начал думать о следующей задаче.

Вам дана строка s. Сколько существует способов извлечь k ≥ 1 неперекрывающихся подстрок из неё, таких, что в каждой из них содержится t как подстрока? Более формально, требуется подсчитать количество способов выбора двух последовательностей, a1, a2, ..., ak и b1, b2, ..., bk, удовлетворяющих следующим требованиям:

  • k ≥ 1
  •   t является подстрокой строки saisai + 1... sbi (строка s индексируется с 1).

Так как количество способов может быть очень большим, выведите его по модулю 109 + 7.

Входные данные

Ввод состоит из двух строк s и t (1 ≤ |s|, |t| ≤ 105). Каждая строка состоит из маленьких букв латинского алфавита.

Выходные данные

Выведите ответ единственной строкой.

C. Помощь нуждающимся

дп Теория вероятностей *2600

Малек — богатый человек. К тому же он очень щедрый. Поэтому он решил разделить свои деньги между бедняками. Благотворительному фонду известно n бедняков, занумерованных числами от 1 до n. Фонд дал Малеку q рекомендаций. Рекомендация — это отрезок [l, r], обозначающий, что фонд рекомендовал Малеку дать по доллару каждому человеку, чей номер есть в этом отрезке.

У фонда необычные правила касательно рекомендаций. Согласно этим правилам, рекомендации даются так, что для любых двух рекомендаций [a, b] и [c, d] выполняется одно из следующих условий:

  • Эти два отрезка не пересекаются. Более формально, либо a ≤ b < c ≤ d, либо c ≤ d < a ≤ b
  • Один из этих двух отрезков лежит внутри другого. Более формально, либо a ≤ c ≤ d ≤ b, либо c ≤ a ≤ b ≤ d.

Эффект благотворительности — это максимальное значение суммы денег, имеющейся у бедняка после того, как Малек закончит раздавать свои деньги. Для каждой рекомендации фонд знает вероятность того, что Малек её примет. Фонд хочет знать математическое ожидание эффекта благотворительного акта Малека. Они попросили Вас помочь им в нахождении этой величины.

Вам дан список рекомендаций, для каждой рекомендации также дана вероятность того, что Малек примет её. Вам дано количество денег, изначально имеющееся у каждого человека. Требуется найти математическое ожидание эффекта благотворительности.

Входные данные

В первой строке даны два целых числа через пробел — n, q (1 ≤ n ≤ 105, 1 ≤ q ≤ 5000).

Во второй строке содержатся n разделённых пробелами целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109), обозначающие, что у человека i изначально есть ai долларов.

В каждой из следующих q строк записано по три целых числа через пробел li, ri, pi (1 ≤ li ≤ ri ≤ n, 0 ≤ p ≤ 1), где li и ri — два числа, описывающих отрезок рекомендации, а pi — вещественное число, данное ровно с тремя знаками после десятичной точки, равное вероятности того, что Малек примет данную рекомендацию.

Обратите внимание, что один и тот же отрезок может появляться в рекомендациях несколько раз.

Выходные данные

Выведите математическое ожидание. Ответ будет засчитан, если его абсолютная или относительная погрешность будет составлять не более 10 - 6.

D. День рождения

Деревья дп поиск в глубину и подобное Структуры данных *2700

Али — младший брат Хамеда, у него завтра день рождения. Хамед хочет подарить брату подарок. Для этого он дал ему задачу по программированию и сказал, что если Али её решит, то он получит новенький ноутбук. Али ещё не такой талантливый программист как Хамед, и, хотя он обычно не жульничает, этот случай — исключение. Всё-таки на кону новенький ноутбук. Поэтому он решил в тайне от него попросить вас помочь ему. Пожалуйста, решите для Али следующую.

Вам дано взвешенное корневое дерево из n вершин. Вершина номер 1 является корнем дерева. Определим d(u, v) как сумму длин рёбер на кратчайшем пути между вершинами u и v. В частности, определим d(u, u) = 0. Также, определим S(v) для каждой вершины v как множество, содержащее все вершины u, такие, что d(1, u) = d(1, v) + d(v, u). Затем определим функцию f(u, v) по следующей формуле:

Ваша задача — вычислить f(u, v) для каждой из q данных пар вершин. Так как ответ может быть довольно большим, выведите его по модулю 109 + 7.

Входные данные

В первой строке входных данных дано целое число n (1 ≤ n ≤ 105), количество вершин дерева.

В каждой из следующих n - 1 строк записаны три целых числа через пробел — ai, bi, ci (1 ≤ ai, bi ≤ n, 1 ≤ ci ≤ 109), обозначающие, что между вершинами ai и bi есть ребро весом ci.

В следующей строке записано целое число q (1 ≤ q ≤ 105) — количество пар вершин.

В каждой из следующих q строк даны по два целых числа через пробел — ui, vi (1 ≤ ui, vi ≤ n), обозначающие, что вам требуется посчитать f(ui, vi).

Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите q строк. В i-й строке выведите значение f(ui, vi) по модулю 109 + 7.

E. Подпоследовательности возвращаются

дп матрицы *2900

Пусть sk(n) равно сумме цифр числа n в k-ичной системе счисления. Например, s2(5) = s2(1012) = 1 + 0 + 1 = 2, s3(14) = s3(1123) = 1 + 1 + 2 = 4.

Последовательность целых чисел a0, ..., an - 1 определяется соотношением . Требуется вычислить количество различных подпоследовательностей последовательности a0, ..., an - 1. Посчитайте остаток от деления ответа на 109 + 7.

Последовательность a1, ..., ak является подпоследовательностью последовательности b1, ..., bl, если существует последовательность индексов 1 ≤ i1 < ... < ik ≤ l, такая что a1 = bi1, ..., ak = bik. В частности, пустая последовательность (т.е. последовательность, состоящая из нуля элементов) является подпоследовательностью любой последовательности.

Входные данные

В первой строке записано два целых числа, разделенных пробелом, — n и k (1 ≤ n ≤ 1018, 2 ≤ k ≤ 30).

Выходные данные

В единственной строке выведите остаток от деления ответа на задачу на 109 + 7.

Примечание

В первом примере последовательность ai выглядит следующим образом: (0, 1, 1, 0). Все возможные подпоследовательности:

(), (0), (0, 0), (0, 1), (0, 1, 0), (0, 1, 1), (0, 1, 1, 0), (1), (1, 0), (1, 1), (1, 1, 0).

Во втором примере последовательность ai выглядит следующим образом: (0, 1, 2, 3, 4, 5, 6). Подпоследовательностями этой последовательности являются все возрастающие последовательности из чисел от 0 до 6 и только они. Легко видеть, что их ровно 27 = 128.

B. Музыкальная пауза

дп Теория вероятностей *2400

Оказывается, вы — большой знаток группы AC/PE. Петя, узнав об этом, устроил следующую игру: он включает первую из списка n песен этой группы, а вы, в свою очередь, должны ее угадать. После того, как вы угадываете одну песню, Петя включает следующую по порядку песню, и так далее.

i-ая песня группы AC/PE имеет свою узнаваемость pi. Это означает, что, если песня до сих пор не была угадана, то, послушав ее еще ровно одну секунду, вы угадаете ее с вероятностью pi процентов. В противном случае вы продолжаете слушать её дальше. Имейте в виду, что вы можете делать догадки только в моменты времени, задающимися целым количеством секунд, прошедших с начала воспроизведения песни.

Во всех песнях AC/PE припев совпадает с названием, поэтому, услышав первые ti секунд i-ой песни, вы сразу точно угадываете ее название.

Так, например, в песне Highway To Red припев звучит довольно поздно, но она имеет высокую узнаваемость. В песне Back In Blue, напротив, слова названия звучат еще на первых секундах, однако до этого угадать ее тяжело. Обе эти песни вы сможете угадать еще по нескольким первым секундам.

Посчитайте матожидание количества песен, которые вы угадаете, если игра будет длиться ровно T секунд времени (т. е. последнюю догадку вы можете сделать в момент времени T, после чего игра прекращается).

Если все угаданы быстрее, чем за T секунд, игра заканчивается после угадывания последней песни.

Входные данные

Первая строка входных данных содержит числа n и T (1 ≤ n ≤ 5000, 1 ≤ T ≤ 5000), разделенные пробелом. Следующие n строк содержат пары чисел pi и ti (0 ≤ pi ≤ 100, 1 ≤ ti ≤ T). Песни заданы в том же порядке, что и в списке Пети.

Выходные данные

В единственную строку выходных данных выведите единственное число — математическое ожидание количества угаданных вами песен за T секунд. Ваш ответ будет считаться правильным, если величина его абсолютной или относительной погрешности не превышает 10 - 6.

D. Пробки в стране

дп Структуры данных теория чисел *2400

Некоторая страна состоит из (n + 1) городов, расположенных вдоль прямолинейного шоссе. Пронумеруем города последовательно числами от 1 до n + 1 в порядке их следования вдоль шоссе. Таким образом, города соединены с помощью n участков шоссе, причём i-й участок соединяет города с номерами i и i + 1. Каждый участок шоссе характеризуется целым положительным числом ai > 1 — периодом появления пробок на нём.

Чтобы добраться из города x до города y (x < y) некоторые автомобилисты используют следующую тактику.

Изначально автомобилист находится в городе x и текущее время t равно нулю. До тех пор, пока автомобилист не прибыл в город y, он выполняет последовательность действий:

  • если текущее время t кратно ax, то на участке шоссе с номером x сейчас затруднено движение, и поэтому автомобилист остается в текущем городе на одну единицу времени (формально говоря, выполняется присваивание t = t + 1);
  • если текущее время t не кратно ax, то на участке шоссе с номером x сейчас свободно и поэтому за одну единицу времени автомобилист перемещается в город x + 1 (формально говоря, выполняются присваивания t = t + 1 и x = x + 1).

Вы разрабатываете новую систему контроля пробок. Вы хотите последовательно обработать q запросов двух видов:

  1. определить конечное значение времени t после поездки из города x в город y (x < y) при использовании описанной выше тактики. Обратите внимание, что перед каждым подобным запросом t устанавливается равным нулю;
  2. изменить период появления пробок на участке с номером x на значение y (формально, выполнить присвоение ax = y).

Напишите программу, которая будет эффективно обрабатывать описанные выше запросы.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 105)— количество участков шоссе, соединяющих n + 1 город.

Во второй строке содержатся n целых чисел a1, a2, ..., an (2 ≤ ai ≤ 6) — периоды появления пробок на участках шоссе.

В следующей строке записано одно целое число q (1 ≤ q ≤ 105) — количество запросов, которые необходимо обработать.

В следующих q строках содержатся описания запросов в формате c, x, y (c — тип запроса).

Если c представляет собой символ 'A', то необходимо обработать запрос первого типа. В таком случае выполняется ограничение 1 ≤ x < y ≤ n + 1.

Если c представляет собой символ 'C', то необходимо обработать запрос второго типа. В таком случае, выполняются ограничения: 1 ≤ x ≤ n, 2 ≤ y ≤ 6.

Выходные данные

На каждый запрос первого типа выведите одно число — конечное значение времени t после поездки из города x в город y. Запросы необходимо обрабатывать в том порядке, в котором они заданы во входных данных.

E. Палочки и лесенки

дп матрицы *2700

Вам задана фигура на клетчатом поле, представляющая лестницу, состоящую из 7 ступеней. Ширина ступени высоты i равна wi клеток. Формально, фигура представляет собой последовательно соединенные прямоугольники размером wi × i так, что стороны wi лежат на одной прямой. Так, например, если все wi = 1, фигура будет выглядеть так (различными цветами обозначены различные прямоугольники):

А если w = {5, 1, 0, 3, 0, 0, 1}, то так:

Найдите количество способов закрасить некоторые из границ клеток, лежащих внутри фигуры, так, чтобы ни у какой из клеток не были закрашены все четыре границы. Границы клеток, лежащие на границе фигуры, следует считать закрашенными. Способы, различающиеся поворотом фигуры, следует считать различными.

Входные данные

В единственной строке входных данных содержатся 7 чисел w1, w2, ..., w7 (0 ≤ wi ≤ 105). Гарантируется, что хотя бы одно из wi не равно нулю.

Выходные данные

В единственную строку выходных данных выведите единственное число — ответ на задачу по модулю 109 + 7.

Примечание

Всевозможные раскраски третьего примера представлены ниже:

C. Наибольшая правильная скобочная подстрока

дп жадные алгоритмы Конструктив сортировки Строки Структуры данных *1900

И снова вам предлагается задача на правильные скобочные последовательности.

Напомним, что скобочная последовательность называется правильной, если путем вставки в нее символов «+» и «1» можно получить из нее корректное математическое выражение. Например, последовательности «(())()», «()» и «(()(()))» — правильные, в то время как «)(», «(()» и «(()))(» — нет.

Вам задана строка, состоящая из символов «(» и «)». Ваша задача найти её наидлиннейшую подстроку, которая является правильной скобочной последовательностью. Также вам надо найти количество таких подстрок.

Входные данные

В первой строке входного файла записана непустая строка, состоящая из символов «(» и «)». Её длина не превосходит 106.

Выходные данные

Выведите длину наибольшей подстроки, являющейся правильной скобочной последовательностью, и количество таких подстрок. Если искомых подстрок не существует, то выведите «0 1» в единственную строку выходных данных.

D. Бомбардировка

Бинарный поиск дп Теория вероятностей *2100

Командование решило нанести ядерный удар по силам противника. Вам приказали определить мощность боеголовки, которую нужно использовать.

У противника есть N стратегически важных объектов. Их позиции известны благодаря проведённой разведке. Цель удара — вывести из строя как минимум K важных объектов противника. Место нанесения удара уже определено и имеет координаты [X0; Y0].

Ядерная боеголовка маркируется расчётным радиусом поражения R ≥ 0. Все сооружения, находящиеся на расстоянии ближе R от эпицентра взрыва, будут разрушены. Все сооружения, находящиеся на расстоянии больше R от эпицентра, также могут быть выведены из строя с некоторой вероятностью. Пусть D — расстояние от эпицентра до сооружения. Вероятность выведения этого сооружения из строя P(D, R) вычисляется по следующей формуле:

Под следует понимать ea, где e ≈ 2.7182818284590452353602874713527

Если же расчётный радиус поражения боеголовки равен нулю, то все сооружения, находящиеся в точке нанесения удара, будут полностью разрушены, а все остальные важные объекты повреждены не будут.

Командование хочет, чтобы вероятность провалить задание была не более ε. Ядерные боеголовки — дорогое удовольствие, поэтому от вас требуется минимизировать расчётный радиус поражения боеголовки.

Входные данные

В первой строке записано целое число N — количество объектов противника (1 ≤ N ≤ 100). Во второй строке записано два целых числа: K — целевое количество выведенных из строя объектов, и ε — максимально допустимая вероятность не выполнить задачу, заданная в промилле (1 ≤ K ≤ N, 1 ≤ ε ≤ 999). В третьей строке записаны X0 и Y0 – координаты точки нанесения удара. Остальные N строк содержат по два числа Xi и Yi — координаты каждого стратегически важного объекта. Все координаты целые, по модулю не превосходят 1000.

Напоминаем, что в единице тысяча промилле.

В одной точке может находиться несколько объектов.

Выходные данные

Выведите искомый расчётный радиус поражения боеголовки. Абсолютная или относительная погрешность вашего ответа не должна превышать 10 - 6.

E. Новогоднее домино

дп снм Структуры данных *2300

Многие празднуют Новый год, публикуя видео с падающими доминошками. Ознакомиться с подобными видео можно здесь: https://www.youtube.com/results?search_query=New+Years+Dominos

Пользователь ainta, живущий в двухмерном мире, тоже хочет опубликовать видео.

Дано n доминошек на плоскости с декартовой системой координат. i-ю доминошку (1 ≤ i ≤ n) можно представить как параллельный оси y отрезок длины li. Нижняя точка отрезка находится на оси x. Обозначим x-координату i-й доминошки как pi. Доминошки ставятся друг за другом, таким образом, выполняется условие p1 < p2 < ... < pn - 1 < pn.

Пользователь ainta хочет снять видео с падающими доминошками. Чтобы доминошки попадали, он может толкнуть одну доминошку вправо. Тогда доминошка будет падать по круговой орбите, пока её отрезок полностью не коснётся оси x.

Также, если s-я доминошка, падая, задевает t-ю доминошку, то и t-я доминошка упадет направо, таким же описанным выше образом. Доминошка s касается доминошки t тогда и только тогда, когда отрезки, образующие s и t, пересекаются.

Рассмотрим рисунок, данный выше. Если толкнуть крайнюю слева доминошку вправо, она упадет, затронув доминошки (A), (B) и (C). В результате, доминошки (A), (B), (C) также упадут вправо. Хотя доминошка (D) не будет задета при падении крайней доминошки слева, она в итоге также упадет, потому что её толкнет доминошка (C).

Приведенный выше рисунок демонстрирует пример падающих доминошек. Каждый красный кружок означает соприкосновение двух доминошек.

У пользователя ainta есть q планов публикации видео. j-й из них начинается с того, что мы толкаем xj-ю доминошку и заканчивается с падением yj-й доминошки. Но порой реализовать такой план невозможно, в связи с чем требуется удлинить некоторые доминошки. Увеличить длину одной доминошки на 1 единицу стоит один доллар. Пользователь ainta хочет знать для каждого плана минимальную цену, необходимую для достижения цели. Планы обрабатываются независимо друг от друга, то есть если длина доминошки увеличивается при каком-либо плане, это не влияет на длину этой доминошки в других планах. Множество доминошек, которые упадут помимо xj-й и yj-й, не имеет значения, но исходный удар должен наноситься именно по доминошке xi.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 2 × 105)— количество доминошек.

В следующих n строках описываются доминошки. В i-й строке (1 ≤ i ≤ n) записано два целых числа через пробел pi, li (1 ≤ pi, li ≤ 109)— x-координата и длина i-й доминошки. Гарантируется, что p1 < p2 < ... < pn - 1 < pn.

В следующей строке содержится целое число q (1 ≤ q ≤ 2 × 105) — количество планов.

Следующие q строк описывают планы. В j-ой строке (1 ≤ j ≤ q) записано два целых числа через пробел xj, yj (1 ≤ xj < yj ≤ n). Это означает, что j-ый план заключается в том, чтобы толкнуть xj-ю доминошку и снимать видео, пока не упадет yj-я доминошка.

Выходные данные

Для каждого плана выведите строку, содержащую минимальную стоимость, необходимую для его реализации. Если никаких затрат не требуется, выведите 0.

Примечание

Рассмотрим пример. Доминошки расставлены как на картинке ниже.

Посмотрим на 4-й план. Для того, чтобы 2-я доминошка привела к падению 6-й, третью доминошку (с x-координатой 4) надо увеличить на 1, и 5-ю доминошку (с x-координатой 10) надо увеличить на 1 (альтернативный вариант — вместо 5-й доминошки можно также увеличить 4-ю доминошку на 1). Затем доминошки попадают так, как указано на картинке ниже. Каждый крестик обозначет соприкосновение двух доминошек.

F. Новогодние покупки

дп разделяй и властвуй *2700

Dohyun управляет продуктовым магазином. Он продает n товаров, пронумерованных целыми числами от 1 до n. i-й (1 ≤ i ≤ n) из них стоит ci долларов, и его покупка добавляет hi единиц счастья. Каждый товар можно держать на прилавке только p единиц времени, пока он не потеряет свежесть. Таким образом, Dohyun выставляет на прилавок i-й товар в момент времени ti, и покупатели могут купить этот товар только во время от ti до ti + (p - 1) включительно. Также покупателям не разрешается покупать один и тот же товар более одного раза.

Я бы хотел посетить продуктовый магазин Dohyun'а и купить некоторые товары для новогодней вечеринки, максимизировав при этом своё счастье. Так как я очень занятой человек, я могу посетить магазин только один раз и очень ненадолго. Иными словами, если я зайду в магазин во время t, то я могу купить только товары, доступные во время t. Но я могу купить произвольное количество товаров, пока их стоимость не превзойдёт мой бюджет. Я не могу купить один и тот же товар более одного раза, согласно правилам магазина. Не требуется расходовать весь бюджет.

Я написал список из q пар целых чисел (aj, bj), что означает, что я могу посетить магазин в момент времени aj, и потратить там не более bj долларов. Для каждой пары я бы хотел знать максимальное достижимое значение счастья по итогам посещения магазина. Но пар так много, что я не могу с ними справиться. Вы можете мне помочь?

Входные данные

В первой строке записано два целых числа через пробел, n и p (1 ≤ n ≤ 4000, 1 ≤ p ≤ 10 000) — количество товаров и время, на протяжении которого товар можно держать на прилавке.

В следующих n строках содержатся описания товаров. В i-й (1 ≤ i ≤ n) из них записано три целых числа через пробел, ci, hi, ti (1 ≤ ci, hi ≤ 4000, 1 ≤ ti ≤ 10 000) — стоимость i-го товара, счастье от покупки i-го товара и время, когда i-ый товар выкладывается на прилавок.

В следующей строке записано целое число q (1 ≤ q ≤ 20 000)— количество вариантов посещения магазина.

В следующих q строках записаны варианты. В j-й (1 ≤ j ≤ q) из них записано два целых числа через пробел aj, bj (1 ≤ aj ≤ 20 000, 1 ≤ bj ≤ 4000) — время посещения магазина и бюджет для j-го посещения.

Выходные данные

Для каждого варианта выведите единственную строку, содержащую максимальное количество счастья, достижимое путем покупки некоторых товаров.

Примечание

Рассмотрим первый пример.

  1. В момент времени 1 доступен только 2-й товар. Можно купить 2-й товар за 3 доллара и мое счастье возрастет на 5.
  2. В момент времени 2 доступны 1-й, 2-й и 3-й товары. Я могу купить 1-й товар за 2 доллара и 2-й товар за 3 доллара. Мое счастье возрастет на 3 + 5 = 8.
  3. В момент времени 2 доступны 1-й, 2-й и 3-й товар. Я могу купить 1-й товар за 2 доллара и 3-й товар за 4 доллара. Моё счастье возрастет на 3 + 7 = 10.
  4. В момент времени 5 доступны 1-й, 3-й и 4-й товары. Я могу купить 1-й товар за 2 доллара и 4-й товар за 11 долларов. Моё счастье возрастет на 3 + 15 = 18. Обратите внимание, что мне не надо использовать весь бюджет в этом случае.

B. Цветной граф мистера Китаюта

графы дп поиск в глубину и подобное снм *1400

Мистер Китаюта недавно приобрёл неориентированный граф, состоящий из n вершин и m ребер. Вершины графа пронумерованы от 1 до n. Ребро i окрашено в цвет ci и соединяет вершины ai и bi.

Мистер Китаюта хочет, чтобы вы обработали q запросов следующего вида.

В i-м запросе он дает вам два целых числа — ui и vi. Вам требуется найти количество цветов, таких, что ребра этого цвета непосредственно или косвенно соединяют вершины ui и vi (т. е. по рёбрам только этого цвета можно добраться от вершины ui до вершины vi).

Входные данные

В первой строке следуют два целых числа через пробел — n и m (2 ≤ n ≤ 100, 1 ≤ m ≤ 100), обозначающие количество вершин и количество ребер, соответственно.

В следующих m строках следуют три целых числа через пробел — ai, bi (1 ≤ ai < bi ≤ n) и ci (1 ≤ ci ≤ m). Обратите внимание, что между двумя вершинами может быть несколько ребер. Однако между двумя вершинами не может быть нескольких ребер одного цвета, таким образом, если i ≠ j, то (ai, bi, ci) ≠ (aj, bj, cj).

В следующей строке записано целое число — q (1 ≤ q ≤ 100), обозначающее количество запросов.

Затем следует q строк по два целых числа через пробел — ui и vi (1 ≤ ui, vi ≤ n). Гарантируется, что ui ≠ vi.

Выходные данные

Для каждого запроса выведите ответ в отдельной строке.

Примечание

Рассмотрим первый пример.

Рисунок выше иллюстрирует первый пример.
  • Вершина 1 и вершина 2 соединены цветами 1 и 2.
  • Вершина 3 и вершина 4 соединены цветом 3.
  • Вершина 1 и вершина 4 не соединены никаким цветом.

C. Мистер Китаюта, охотник за сокровищами

дп поиск в глубину и подобное *1900

Острова Шусеки — это архипелаг из 30001 маленького острова в море Ютампо. Острова располагаются на одной прямой через равные интервалы и пронумерованы от 0 до 30000 с запада на восток. Известно, что на этих островах зарыто много сокровищ. Всего на островах Шусеки находится n драгоценных камней, i-й камень расположен на острове pi.

Мистер Китаюта только что прибыл на остров 0. Будучи отличным прыгуном, он совершит несколько прыжков между островами на восток согласно следующему процессу:

  • Сначала он перепрыгнет с острова 0 на остров d.
  • Затем он продолжит прыжки следующим образом. Пусть длина предыдущего прыжка равняется l, т. е., если его предыдущий прыжок был с острова prev на остров cur, пусть l = cur - prev. Следующим шагом он совершит прыжок длины l - 1, l или l + 1 к востоку. Таким образом, он прыгнет на остров (cur + l - 1), (cur + l) или (cur + l + 1) (конечно, в случае, если соответствующего острова не существует, прыгнуть нельзя). Длины прыжков должны быть положительными, то есть, нельзя совершить прыжок длины 0, если сейчас l = 1. Если корректного пункта назначения нет, то прыжки прекращаются.

Мистер Китаюта собирает камни на островах, которые он посещает в процессе. Найдите максимальное количество камней, которые он может собрать.

Входные данные

В первой следуют два целых числа через пробел, n и d (1 ≤ n, d ≤ 30 000), обозначающих количество драгоценных камней на островах Шусеки и длину первого прыжка мистера Китаюта, соответственно.

В следующих n строках следуют расположения драгоценных камней. В i-й из них (1 ≤ i ≤ n) записано целое число pi (d ≤ p1 ≤ p2 ≤ ... ≤ pn ≤ 30 000), обозначающее номер острова, содержащего i-й драгоценный камень.

Выходные данные

Выведите максимальное количество драгоценных камней, которые может собрать мистер Китаюта.

Примечание

В первом примере оптимальный маршрут: 0  →  10 (+1 камень)  →  19  →  27 (+2 камня)  → ...

Во втором примере оптимальный маршрут: 0  →  8  →  15  →  21 →  28 (+1 камень)  →  36 (+1 камень)  →  45 (+1 камень)  →  55 (+1 камень)  →  66 (+1 камень)  →  78 (+1 камень)  → ....

В третьем примере оптимальный маршрут: 0  →  7  →  13  →  18 (+1 камень)  →  24 (+2 камня)  →  30 (+1 камень)  → ...

E. Подарок мистера Китаюта

дп Комбинаторика матрицы Строки *3000

Мистер Китаюта любезно предоставил Вам строку s из строчных букв латинского алфавита. Он просит вас вставить ровно n строчных букв латинского алфавита в s так, чтобы получился палиндром. Палиндром — это строка, которая читается одинаково в обоих направлениях. Например, «noon», «testset» и «a» — палиндромы, а «test» и «kitayuta» — нет.

Вы можете выбрать любые n строчных букв латинского алфавита и вставить каждую из них в любую позицию s, в частности, можно вставить в начало или в конец s. Надо вставить ровно n букв, даже если данную строку можно сделать палиндромом, вставив менее n букв.

Найдите количество палиндромов, которые можно получить таким способом, по модулю 10007.

Входные данные

В первой строке следует строка s (1 ≤ |s| ≤ 200). Каждый символ в s — это строчная буква латинского алфавита.

Во второй строке записано целое число n (1 ≤ n ≤ 109).

Выходные данные

Выведите количество палиндромов, которые можно получить, по модулю 10007.

Примечание

В первом примере можно получить палиндром «reviver», вставив «r» в конец «revive».

Во втором примере можно получить следующие 28 палиндромов: «adada», «adbda», ..., «adzda», «dadad» and «ddadd».

D. Пара по математике

дп реализация *2200

Amr не любит математику, так как она кажется ему очень скучной, так что он обычно дремлет на парах по математике. Однажды преподаватель заподозрил: а не спит ли Amr? — и задал юноше вопрос, чтобы проверить это.

Сперва он дал Amr два положительных числа, n и k. Затем он спросил Amr, сколько существует таких целых чисел x > 0, что:

  • Десятичная запись x (без ведущих нулей) состоит ровно из n цифр;
  • Существует некоторое целое число y > 0, такое, что:
    • ;
    • десятичная запись y является суффиксом десятичной записи x.

Так как ответ на этот вопрос может быть большим, преподаватель попросил Amr вычислить лишь остаток после деления результата на номер m.

Сможете помочь Amr достойно выйти из щекотливого положения?

Входные данные

Ввод состоит из трех целых чисел n, k, m (1 ≤ n ≤ 1000, 1 ≤ k ≤ 100, 1 ≤ m ≤ 109).

Выходные данные

Выведите необходимое число по модулю m.

Примечание

Суффикс строки S — это непустая строка, которую можно получить путем удаления некоторого количества (возможно, нулевого) первых символов строки S.

E. Во все лёгкие

графы дп кратчайшие пути поиск в глубину и подобное *2100

Во все лёгкие — это новая компьютерная игра, о которой мечтает много геймеров. В этой игре есть один уровень, сложный даже для опытного игрока.

Уолтер Вильям, главный персонаж игры, хочет вступить в банду под названием Los Hermanos (Братья). Эта банда держит под контролем всю страну, состоящую из n городов, соединенных m двусторонними дорогами. Никакая дорога не соединяет город с самим собой, и для любых двух городов их соединяет не более одной дороги. Страна связная, иными словами, по дорогам можно из любого города добраться до любого другого.

Не по всем дорогам можно проехать. Некоторым дорогам для полной функциональности необходим ремонт.

Банда собирается ограбить банк! Банк находится в городе 1. Как обычно, самое сложное — это вернуться в свою штаб-квартиру, где полиция их не достанет. Штаб-квартира банды находится в городе n. Чтобы завоевать доверие банды, Уолтер взял операцию на себя и придумал хитроумный план.

Во-первых, путь, по которому надо возвращаться из города 1 в их штаб-квартиру n, должен быть как можно короче, так как очень важно завершить операцию как можно быстрее.

Затем, в качестве подготовки к операции банда должна взорвать все остальные дороги в стране, не лежащие на их пути, чтобы полиция не могла послать подкрепления. Если дорога к моменту операции не работает, взрывать её не нужно, так как по ней и так не проехать.

Если на выбранном пути находится несколько неработающих дорог, их надо отремонтировать перед операцией.

Уолтер обнаружил, что может быть несколько возможных путей минимальной длины, так что он решил выбрать среди них такой путь, который минимизирует общее количество дорог, над которыми банде придётся потрудиться (т. е. взорвать или отремонтировать).

Помогите Уолтеру завершить задание и завоевать доверие банды.

Входные данные

В первой строке входа записано два целых числа n, m (2 ≤ n ≤ 105, ), количество городов и количество дорог, соответственно.

В следующих m строках даны описания дорог. Каждое описание состоит из трех целых чисел x, y, z (1 ≤ x, y ≤ n, ), обозначающих, что между городами x и y есть дорога, работающая, если z = 1, или неисправная, если z = 0.

Выходные данные

В первой строке выведите единственное целое число k, минимальное возможное количество дорог, над которые банде придётся затронуть.

В следующих k строках выведите по три целых числа, описывающих дорогу, которую придётся затронуть. В каждой строке должно быть записано три целых числа, x, y, z (1 ≤ x, y ≤ n, ), номера городов, соединенных дорогой, и новое состояние дороги. z = 1 означает, что дорогу между городами x и y надо отремонтировать, а z = 0 означает, что дорогу надо взорвать.

Дороги можно выводить в любом порядке. Каждую затронутую дорогу следует вывести ровно один раз. Города, соединяемые дорогой, разрешается выводить в любом порядке. Если вы выводите дорогу, то её исходное состояние должно отличаться от z.

После исполнения вашего плана в стране должны остаться только рёбра, лежащие на одном кратчайшем пути из 1 в n.

Если есть несколько оптимальных вариантов ответа, выведите любой из них.

Примечание

В первом тесте единственный путь — 1 - 2

Во втором тесте единственный кратчайший путь — 1 - 3 - 4

В третьем тесте есть несколько кратчайших путей, но оптимальный из них — 1 - 4 - 6 - 8

E. Артур и скобки

дп жадные алгоритмы *2200

Обратите внимание на нестандартное ограничение по памяти.

Недавно Артур с Сашей изучили правильные скобочные последовательности. Артур отлично понял эту тему и ему настолько ею проникся, что завёл себе любимую правильную скобочную последовательность длины 2n. В отличие от Артура, Саша очень плохо понял тему про правильные скобочные последовательности, и назло Артуру сломал его любимую правильную скобочную последовательность.

Все, что помнит Артур о своей любимой последовательности — это для каждой открывающейся скобки '(' примерное расстояние до соответствующей ей закрывающейся ')'. Для i-й открывающейся скобки он помнит отрезок [li, ri], в котором лежит расстояние до соответствующей ей закрывающейся.

Формально говоря, для i-й открывающейся скобки (при их нумерации слева направо) известно, что разность позиций соответствующей ей закрывающейся скобки и её собственной позиции лежит в отрезке [li, ri].

Помогите Артуру восстановить его любимую правильную скобочную последовательность!

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 600), количество открывающихся скобок в любимой правильной скобочной последовательности Артура.

В следующих n строках записаны числа li и ri (1 ≤ li ≤ ri < 2n), обозначающие отрезок, в котором лежит расстояние от i-й открывающейся скобки до соответствующей ей закрывающейся.

Описания отрезков заданы в том порядке, в котором открывающиеся скобки встречаются в любимой последовательности Артура, если перечислять их слева направо.

Выходные данные

Если по описанным данным возможно восстановить правильную скобочную последовательность, выведите любой возможный вариант.

Если же Артур что-то напутал, и последовательностей, соответствующих данной информации нет, выведите единственную строку «IMPOSSIBLE» (без кавычек).

C. Суммы цифр

дп жадные алгоритмы реализация *2000

У Васи была строго возрастащая последовательность целых положительных чисел a1, ..., an. Вася построил по ней новую последовательность b1, ..., bn, где bi — сумма цифр ai в десятичной записи. После этого последовательность ai потерялась, осталась только последовательность bi.

Васе интересно, какими могли быть числа ai. Из всех вариантов последовательности a ему интересен такой, в котором последнее число an является минимально возможным. Помогите Васе восстановить исходную последовательность.

Гарантируется, что подобная последовательность всегда существует.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 300).

В следующих n строках записаны числа b1, ..., bn  — требуемые суммы цифр. Все bi удовлетворяют ограничениям 1 ≤ bi ≤ 300.

Выходные данные

Выведите n чисел по одному на строке — корректный вариант для чисел ai, в порядке возрастания индексов. Последовательность должна быть строго возрастающей. Сумма цифр i-го числа должна быть равна bi. Если вариантов с минимальным значением последнего числа несколько, выведите любой. Числа следует выводить без ведущих нулей.

F. Контроль успеваемости

Деревья дп *2300

На одной из своих контрольных работ по информатике Дмитрий Олегович решил дать следующую задачу:

Пусть дано дерево T на n вершинах, заданное своей матрицей смежности a[1... n, 1... n]. Какую последовательность чисел выведет следующий псевдокод?


used[1 ... n] = {0, ..., 0};

procedure dfs(v):
print v;
used[v] = 1;
for i = 1, 2, ..., n:
if (a[v][i] == 1 and used[i] == 0):
dfs(i);

dfs(1);

Чтобы было легче проверять работы студентов, Дмитрий Олегович решил придумать такое дерево T, чтобы в ответе получилась его любимая последовательность b. С другой стороны, Дмитрий Олегович не хочет давать студентам одинаковые данные в контрольной работе — ведь в таком случае не миновать списывания. Поэтому у Дмитрия Олеговича возник следующий вопрос: сколько существует таких деревьев, что при запуске данного псевдокода на них выведенная последовательность в точности совпадает с последовательностью b?

Два дерева на n вершинах считаются различными, если их матрицы смежности a1 и a2 не совпадают, то есть существует такая пара (i, j), что 1 ≤ i, j ≤ n и a1[i][j] ≠ a2[i][j].

Входные данные

В первой строке задано натуральное число n (1 ≤ n ≤ 500) — количество чисел в последовательности b.

Во второй строке задаются n натуральных чисел b1, b2, ..., bn (1 ≤ bi ≤ n), разделенные пробелом. Гарантируется, что последовательность b является перестановкой. Иными словами, каждое из чисел 1, 2, ..., n встречается в последовательности b ровно один раз. Также гарантируется, что b1 = 1.

Выходные данные

Выведите одно число — остаток от деления количества подходящих деревьев на 109 + 7.

F. Гусеница

графы Деревья дп поиск в глубину и подобное *2800

Неориентированный граф называется гусеницей, если он является связным графом без циклов, и в нем существует такой путь, что любая вершина находится на расстоянии не более 1 от него. Гусеница может содержать петли, но не может содержать кратных ребер.

На рисунке изображен пример гусеницы:

Вам задан неориентированный граф G с которым можно производить операцию сжатия двух вершин в одну. Для этого выбираются любые две вершины графа a и b (a ≠ b). Из графа удаляются обе эти вершины вместе с их ребрами (инцидентными хотя бы одной из вершин a или b), но добавляется новая вершина w вместе с ребрами вида (x, w) для каждого ребра (a, w) и (b, w). Если в графе существовало ребро (a, b), то оно преобразуется в петлю (w, w). В результате операции слияния могут появляться кратные ребра и петли. Заметим, что эта операция уменьшает количество вершин графа на 1, но оставляет неизменным количество ребер в графе.

Операция сжатия двух вершин может быть неформально описана как объединение двух вершин графа в одну, с естественным преобразованием ребер графа.

С помощью последовательного применения описанной операции можно любой заданный неориентированный граф сделать гусеницей. Напишите программу, которая выведет наименьшее количество операций сжатия, чтобы заданный граф сделать гусеницей.

Входные данные

В первой строке содержится пара целых чисел n, m (1 ≤ n ≤ 2000;0 ≤ m ≤ 105), n — количество вершин в графе, а m — количество ребер в нем. Далее в m строках заданы ребра графа, по одному ребру в строке. Каждая строка содержит пару целых чисел ai, bi (1 ≤ ai, bi ≤ n;ai ≠ bi), ai, bi — номера соединяемых ребром вершин. Вершины пронумерованы от 1 до n. Между каждой парой вершин может быть не более одного ребра. Заданный граф не обязательно является связным.

Выходные данные

Выведите искомое наименьшее число операций.

D. Лиса и прыжки

битмаски дп математика Перебор *1900

Лиса Ciel играет в игру. Она стоит на бесконечной длинной ленте с ячейками, пронумерованными целыми числами (положительными, отрицательными и нулем). В начале она стоит в ячейке 0.

Также есть n карточек, каждая из которой характеризуется числом li и стоимостью ci. Если лиса заплатит ci долларов, то она сможет применить i-ю карточку. После применения i-й карточки лиса сможет совершать прыжки длины li, то есть, от ячейки x к ячейке (x - li) или ячейке (x + li).

Лиса хочет научиться прыгать в любую ячейку на ленте (возможно, посетив некоторые промежуточные ячейки). Для достижения этой цели она хочет купить некоторое количество карточек, заплатив при этом как можно меньше денег.

Если этого возможно добиться, посчитайте минимальную стоимость.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 300), количество карточек.

Во второй строке записано n чисел li (1 ≤ li ≤ 109), длины прыжков, указанные на карточках.

В третьей строке записано n чисел ci (1 ≤ ci ≤ 105), стоимости карточек.

Выходные данные

Если невозможно купить некоторое количество карточек и получить возможность прыгнуть в любую ячейку, выведите -1. В противном случае, выведите минимальную стоимость покупки такого набора карточек.

Примечание

В первом примере недостаточно купить одну карточку: например, если купить карточку для прыжков длины 100, то нельзя прыгнуть ни в одну ячейку, номер которой не кратен 100. Оптимальный способ — купить первую и вторую карточку, тогда можно будет добраться до любой ячейки.

Во втором примере, даже если купить все карточки, то вы не сможете прыгнуть ни в одну ячейку, номер которой не кратен 10, так что ответ — -1.

D. Лиса и путешествие

Деревья дп *2900

Лиса Ciel собирается в путешествие по Фокслендам этим летом.

На Фокслендах n достопримечательностей, соединенных m двусторонними дорогами. Две достопримечательности называются соседними, если они соединены дорогой. У Ciel есть k дней на исследование Фокслендов, и она собирается потратить каждый день на посещение ровно одной достопримечательности.

На Фокселндах есть одно важное правило: вы не можете посетить достопримечательность, если у неё более одной соседней достопримечательности, которую вы ещё не посетили.

В начале путешествия Ciel не посетила ни одной достопримечательности. В процессе путешествия она может перемещаться произвольным образом между достопримечательностями. После осмотра достопримечательности a она может отправиться осматривать любую ещё не осмотренную достопримечательность b, удовлетворяющую условию выше, в том числе не достижимую из a по дорогам (Ciel использует катер для перемещения между достопримечательностями, поэтому у неё есть такая возможность).

Ciel хочет знать, сколько существует различных маршрутов для её путешествия. Более того, определите остаток от деления на 109 + 9 от их количества для каждого k от 0 до n, так как лиса ещё не определилась, на сколько дней она отправится на Фоксленды.

Входные данные

В первой строке записано два целых числа: n, m (1 ≤ n ≤ 100, ), количество достопримечательностей и количество дорог.

В каждой из следующих m строк записано по два целых числа, ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi), описывающих дорогу. Каждую пару достопримечательностей соединяет не более одной дороги.

Выходные данные

Выведите n + 1 целых чисел: количество возможных маршрутов путешествия по модулю 109 + 9 для всех k от 0 до n.

Примечание

В первом тесте из условия для k = 3 существует 4 маршрута: {1, 2, 3}, {1, 3, 2}, {3, 1, 2}, {3, 2, 1}.

Во втором тесте из условия Ciel не может начать ни с одной достопримечательности в первый же день, так что для k > 0 ответ равен 0.

В третьем тесте из условия Фоксленды выглядят следующим образом:

E1. Разрезание массива

дп *2600

Вам даны массив длины n и число k. Выберем k непересекающихся непустых подотрезков исходного массива. Пусть si — это сумма на i-м слева подотрезке. Посчитайте максимальное возможное значение следующего выражения:

|s1 - s2| + |s2 - s3| + ... + |sk - 1 - sk|

Здесь под подотрезком понимается непрерывный подмассив.

Входные данные

Первая строка входных данных содержит два целых числа n и k. Вторая строка содержит n целых чисел — элементы массива. Каждый из элементов массива не превосходит 104 по модулю.

Задача состоит из двух подзадач, которые отличаются друг от друга ограничениями на входные данные. За решение каждой подзадачи вы получите определенное количество баллов. Описание подзадач следует ниже.

  • В подзадаче E1 (9 баллов) выполняется 2 ≤ n ≤ 400, 2 ≤ k ≤ min(n, 50).
  • В подзадаче E2 (12 баллов) выполняется 2 ≤ n ≤ 30000, 2 ≤ k ≤ min(n, 200).
Выходные данные

Выведите единственное число — максимальное возможное значения выражения.

Примечание

Рассмотрим первый пример. В оптимальном решении первый подотрезок содержит только первый элемент массива, второй подотрезок состоит из следующих трех, а третий подотрезок содержит только последний элемент массива. Суммы этих подотрезков равны 5, 9 и 1.

Рассмотрим второй пример. Оптимальное решение — взять первые два элемента массива в первый подотрезок, а третий элемент во второй подотрезок. Заметим, что последний элемент массива не входит ни в один подотрезок в этом решении.

G1. Инверсии

meet-in-the-middle дп Перебор поиск в глубину и подобное *1800

Вам дана перестановка из n чисел p1, p2, ..., pn. Мы совершаем k операций следующего типа: выбираем равновероятно случайным образом два индекса l и r (l ≤ r) и меняем порядок элементов pl, pl + 1, ..., pr на обратный. Ваша задача — определить математическое ожидание количества инверсий в итоговой перестановке.

Входные данные

Первая строка входных данных содержит два целых числа n и k (1 ≤ n ≤ 100, 1 ≤ k ≤ 109). Следующая строка содержит n целых чисел p1, p2, ..., pn — данную перестановку. Все pi различны и находятся в интервале от 1 до n.

Задача состоит из трех подзадач, которые отличаются друг от друга ограничениями на входные данные. За решение каждой подзадачи вы получите определенное количество баллов. Описание подзадач следует ниже.

  • В подзадаче G1 (3 балла) выполняется 1 ≤ n ≤ 6, 1 ≤ k ≤ 4.
  • В подзадаче G2 (5 баллов) выполняется 1 ≤ n ≤ 30, 1 ≤ k ≤ 200.
  • В подзадаче G3 (16 баллов) выполняется 1 ≤ n ≤ 100, 1 ≤ k ≤ 109.
Выходные данные

Выведите ответ на задачу с абсолютной или относительной погрешностью не более чем 1e - 9.

Примечание

Рассмотрим первый пример. В перестановке (1, 2, 3) (которая изначально не содержит инверсий) будет выбран один интервал и порядок его элементов будет изменен на обратный. С вероятностью , интервал будет состоять из одного элемента и перестановка не изменится. С вероятностью мы поменяем местами первые два элемента и получим перестановку (2, 1, 3) с одной инверсией. С такой же вероятностью мы можем выбрать интервал, состоящий из последних двух элементов, что приведет к перестановке (1, 3, 2), в которой тоже одна инверсия. Наконец, с вероятностью выбранный случайным образом интервал будет содержать все элементы, что приведет к перестановке (3, 2, 1) с тремя инверсиями. Таким образом, мат.ожидание количества инверсий равно .

E. Дарт Вейдер и дерево

дп матрицы *2200

Когда Дарту Вейдеру становится скучно, он садится на диван, закрывает глаза и представляется себе бесконечное корневое дерево, в котором у каждой вершины есть ровно n сыновей, при этом для каждой вершины расстояние от неё до её i - го слева сына равняется di. Лорд ситхов любит считать количество вершин в дереве, находящихся на расстоянии не более x от корня. Под расстоянием здесь понимается сумма длин рёбер на пути между вершинами.

Для него это вошло в привычку и также стало скучным. "Но зачем тогда он это делает?" — спросите вы. Просто он чувствует превосходство, зная, что с этой задачей способен справиться только он.

Хотите бросить вызов самому Дарту Вейдеру? Посчитайте требуемое количество вершин. Так как ответ может быть большим - найдите его по модулю 109 + 7.

Входные данные

В первой строке через пробел записано два целых числа n и x (1 ≤ n ≤ 105, 0 ≤ x ≤ 109) — количество сыновей каждой вершины и расстояние от корня, в пределах которого требуется посчитать вершины.

В следующей строке через пробел следуют n чисел di (1 ≤ di ≤ 100) — длина ребра, соединяющего каждую вершину с её i-м сыном.

Выходные данные

Выведите одно число — количество вершин в дереве на расстоянии от корня не более x.

Примечание

Рисунок к примеру (желтым помечены вершины, расстояние до которых не больше трех)

D. Drazil и утренняя зарядка

Деревья дп поиск в глубину и подобное снм *2800

Drazil и Varda — дождевые черви. Они хотят подыскать хорошее местечко, чтобы растить детей. И вот нашли они подходящую почву с хорошей природной норой. Нора состоит из множества комнат, некоторые пары которых соединены маленькими туннелями, по которым могут перемещаться черви.

Рассмотрим комнаты и туннели как вершины и ребра в графе. Этот граф представляет собой дерево. Иными словами, между любой парой вершин существует единственный простой путь.

Каждая комната, являющаяся листом этого дерева, соединена с поверхностью вертикальным туннелем. Здесь, под листом мы подразумеваем вершину, смежную ровно с одним ребром в дереве.

В каждой комнате хватает места для проживания не более одного червя. Дождевой червь не может жить в туннеле.

Drazil и Varda подумывают воспитывать своих деток по следующему плану. Им хочется, чтобы все их дети сразу после подъема делали утреннюю зарядку!

Когда наступает утро, все червячки просыпаются в одно и то же время, затем каждый из них выбирает самый длинный путь к поверхности на собрание (как и любые дети, они ленятся делать зарядку, поэтому им всем хочется приступить к упражнениям как можно позже).

Drazil и Varda хотят, чтобы разница между моментами появления на поверхности первого и последнего червячка не превышала l (в противном случае детишки расползутся по земле и их будет сложно собрать на зарядку).

Есть дополнительное условие — комнаты, которые занимают детки, должны формировать связное множество. Иными словами, для любых двух комнат, которые занимают червячки, все комнаты, лежащие на пути из одной комнаты в другую, тоже должны быть заняты червячками.

Какое максимальное количество детей может быть у Drazil и Varda, чтобы удовлетворить всем вышеприведенным условиям? Drazil и Varda хотят знать ответ для многих различных вариантов l.

(Drazil и Varda не живут в одной норке со своими детьми)

Входные данные

В первой строке следует единственное целое число n, обозначающее количество комнат в норе (2 ≤ n ≤ 105).

Далее следуют n - 1 строка. Каждая из этих строк содержит три целых числа x, y, v (1 ≤ x, y ≤ n, 1 ≤ v ≤ 106), обозначающих туннель между комнатами x и y, на прохождение которого требуется v времени.

Считайте, что время, необходимое червяку, чтобы выползти на поверхность по вертикальному туннелю, одинаково для всех листов.

В следующей строке следует целое число q (1 ≤ q ≤ 50), обозначающее количество различных значений l, которые надо обработать.

В последней строке следуют q чисел, каждое из которых обозначает очередное значение l (1 ≤ l ≤ 1011).

Выходные данные

Выведите q строк, каждая из которых содержит единственное целое число, обозначающее ответ для очередного значения l.

Примечание

В первом примере нора выглядит следующим образом. Комнаты 1 и 5 представляют из себя листы, так что в них содержится по вертикальному туннелю, связывающему их с поверхностью. Длины наидлиннейшего пути из комнат 1 – 5 наружу равняются 12, 9, 7, 9, 12, соответственно.

При l = 1 мы можем выбрать любую одну комнату.

При l = 2..4 мы можем выбрать в качестве ответа комнаты 2, 3, и 4.

При l = 5 мы можем выбрать все комнаты.

D. Илья и эскалатор

дп Комбинаторика математика Теория вероятностей *1700

Илья устал от олимпиадного программирования, ушел из университета и устроился на работу в метрополитен. Перед ним поставили задачу определения нагрузки на эскалатор.

Пусть n человек стоят в очереди на эскалатор. В каждую секунду происходит одно из двух: либо первый человек в очереди с вероятностью p заходит на эскалатор, либо первый человек в очереди с вероятностью (1 - p) остается стоять на месте, не в силах совладать с боязнью эскалаторов, задерживая при этом всю очередь за ним.

Формально говоря, i-й в очереди не сможет зайти на эскалатор, пока на него не зайдут люди с номерами от 1 до i - 1 включительно. За одну секунду может зайти только один человек. Так как эскалатор бесконечный, то единожды зайдя на него, человек никогда с него не сойдёт, т. е. будет ехать на нем в эту и любую последующую секунды. Илье нужно посчитать математическое ожидание количества людей, которые будут находиться на эскалаторе после t секунд.

Вам необходимо помочь ему в решении этой непростой задачи.

Входные данные

В первой строке входных данных следуют три числа n, p, t (1 ≤ n, t ≤ 2000, 0 ≤ p ≤ 1). Числа n и t — целые, чиcло p — вещественное, заданное ровно с двумя знаками после запятой.

Выходные данные

Выведите одно вещественное число — математическое ожидание количества людей, которые будут на эскалаторе через t секунд. Абсолютная или относительная погрешность не должна превышать 10 - 6.

F. Паша и труба

Бинарный поиск дп Комбинаторика Перебор реализация *2300

На очередном заседании правящей партии «A» министр Павел предложил усовершенствовать систему водопровода и проложить в городе новую трубу.

Город на карте представляет собой прямоугольное клетчатое поле размера n × m. Каждая клетка поля либо свободна (тогда труба может проходить по ней), либо занята (по такой клетке труба проходить не может). На карте свободные клетки обозначены символом '.', а занятые — '#'.

Труба должна удовлетворят следующим свойствам:

  • труба имеет вид ломанной ширины 1,
  • труба проходит по свободным клеткам,
  • труба начинается с края поля, но не с угловой клетки,
  • труба заканчивается на краю поля, но не в угловой клетке,
  • труба имеет не более 2-х поворотов (на 90 градусов),
  • на краях поля должно существовать ровно две клетки, по которым проходит труба,
  • если труба представляет собой один отрезок, то концевые точки трубы должны лежать на разных краях поля,
  • для каждой неконцевой клетки трубы существует ровно две соседние по стороне клетки, которые тоже принадлежат трубе,
  • для каждой из концевых клеток трубы существует ровно одна соседняя по стороне клетка, которая тоже принадлежит трубе.

Примеры разрешенных маршрутов для прокладывания труб:


....# ....# .*..#
***** ****. .***.
..#.. ..#*. ..#*.
#...# #..*# #..*#
..... ...*. ...*.

Примеры запрещенных маршрутов для прокладывания труб:


.**.# *...# .*.*#
..... ****. .*.*.
..#.. ..#*. .*#*.
#...# #..*# #*.*#
..... ...*. .***.

В примерах трубы обозначены символами ' * '.

Вам поручили написать программу, которая вычисляет количество различных способов проложить ровно одну трубу на территории города.

Два способа прокладывания труб считаются различными, если они отличаются хотя бы в одной клетке.

Входные данные

В первой строке входных данных следуют два целых числа n, m (2 ≤ n, m ≤ 2000) — размеры карты Берляндии.

В следующих n строках задано по m символов — карта города.

Если клетка карты обозначена символом '.', значит она свободна, и по ней может проходить труба.

Если клетка карты обозначена символом '#', значит она занята, и труба по ней проходить не может.

Выходные данные

Выведите в первую строку выходных данных одно целое число — количество различных способов проложить ровно одну трубу.

Примечание

В первом примере существует 3 способа проложить трубу (клетки трубы обозначены символами ' * '):


.*. .*. ...
.*# **# **#
.*. ... .*.

D. A и B и интересные подстроки

дп Структуры данных *1800

A и B готовятся к олимпиадам про программированию.

После нескольких лет занятия спортивным программированием и решения множества задач, требующих подсчета различных абстрактных объектов, у A и B тоже сложились весьма необычные вкусы.

A увлечен строчными буквами латинского алфавита. Он присвоил каждой из них число, обозначающее насколько сильно она ему нравится (буквам, которые он недолюбливает, он присвоил отрицательное число).

B увлечен подстроками. Особенно его интересуют те из них, которые начинаются и заканчиваются на одну и ту же букву (разумеется, в таком случае их длина должна быть больше единицы).

У A и B также есть строка s. Теперь они пытаются выяснить, сколько подстрок t в s интересны для B (то есть t начинается и заканчивается на одну и ту же букву и имеет длину больше единицы) и при этом сумма значений всех букв (присвоенных A) в t, кроме первой и последней, равна нулю.

Разумеется, A и B быстро нашли количество интересующих их подстрок t. А сможете ли это сделать вы?

Входные данные

Первая строка содержит 26 целых чисел xa, xb, ..., xz ( - 105 ≤ xi ≤ 105) — значение, присвоенное А буквам a, b, c, ..., z соответственно.

Вторая строка содержит строку s длиной от 1 до 105 символов и состоящую из строчных букв латинского алфавита, для которой требуется посчитать ответ.

Выходные данные

В единственной строке выходных данных выведите ответ на задачу.

Примечание

В первом тестовом примере нам подходят подстроки abca и bcab.

Во втором тестовом примере нам подходит подстрока aa, которая встречается 2 раза.

E. A и B и аудитории

Бинарный поиск Деревья дп поиск в глубину и подобное Структуры данных *2100

A и B готовятся к олимпиадам про программированию.

Университет, в котором учатся A и B, представляет собой множество аудиторий, соединенных между собой переходами. Всего в университете n аудиторий, соединённых n - 1 переходом таким образом, что из любой аудитории можно дойти до любой по переходам. Аудитории пронумерованы от 1 до n.

Каждый день А и B пишут контесты в некоторых аудиториях своего университета, и после каждого контеста они собираются вместе в одной аудитории и обсуждают задачи. A и B хотят, чтобы расстояния от аудитории, где они будут обсуждать задачи, до аудиторий, где они пишут контесты, были равны. Расстоянием между двумя аудиториями является количество ребер на кратчайшем пути между ними.

Так как каждый день они пишут контесты в новых аудиториях, то они попросили вас помочь им найти количество возможных аудиторий для обсуждения задач на каждый из ближайших m дней.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105) — количество аудиторий в университете.

В следующих n - 1 строках описаны переходы. В i-й из этих строк (1 ≤ i ≤ n - 1) записаны два целых числа ai и bi (1 ≤ ai, bi ≤ n), обозначающих, что i-й переход соединяет аудитории с номерами ai и bi.

В следующей строке записано целое число m (1 ≤ m ≤ 105) — количество запросов.

Следующие m строк описывают сами запросы. В j-й из этих строк (1 ≤ j ≤ m) записаны два целых числа xj и yj (1 ≤ xj, yj ≤ n), обозначающих, что в j-й день A будет писать контест в аудитории с номером xj, B — в аудитории с номером yj.

Выходные данные

В i-й (1 ≤ i ≤ m) строке выведите количество аудиторий, равноудаленных от аудиторий, в которых A и B пишут контест в i-й день.

Примечание

В первом примере из условия на одинаковом расстоянии от аудиторий с номерами 2 и 3 находится только одна аудитория — аудитория с номером 1.

E. Сплошные плюсы

дп Комбинаторика математика теория чисел *2200

Вася сидит на невыносимо скучном уроке математики. Чтобы развлечься, он выписал на листок бумаги n цифр в одну строку. После этого Вася стал выписывать разные способы поставить в строке между некоторыми цифрами плюсы («+») таким образом, чтобы получалось корректное арифметическое выражение; формально, никакие два плюса в таком разбиении не должны стоять рядом (между любыми двумя соседними плюсами должна стоять хотя бы одна цифра), и никакой плюс не может стоять в начале или в конце строки. Например, в строке 100500, способы 100500 (не ставить плюсов совсем), 1+00+500 или 10050+0 являются корректными, а способы 100++500, +1+0+0+5+0+0 или 100500+ являются некорректными.

Урок был длинным, и Вася выписал все корректные способы расставить в своей строке из цифр ровно k плюсов. В этот момент его развлечение было замечено, и Вася получил задание до конца урока вычислить сумму значений всех получившихся арифметических выражений (при вычислении значения выражения ведущие нули в слагаемых следует игнорировать). Поскольку ответ может быть большим, Васе разрешили всего лишь получить остаток от деления ответа на 109 + 7.

Входные данные

В первой строке записано два целых числа n и k (0 ≤ k < n ≤ 105).

Во второй строке записана строка, состоящая из n цифр.

Выходные данные

Выведите ответ на задачу по модулю 109 + 7.

Примечание

В первом примере результат равен (1 + 08) + (10 + 8) = 27.

Во втором примере результат равен 1 + 0 + 8 = 9.

A. Репосты

*особая задача графы Деревья дп поиск в глубину и подобное *1200

Однажды Поликарп опубликовал в социальной сети смешную картинку с опросом про цвет своего хэндла. Многие из его друзей стали репостить шутку Поликарпа себе в ленту. Некоторые из них репостили репосты и так далее.

Эти события заданы в виде последовательности строк «name1 reposted name2» где name1 — это имя того, кто репостнул, а name2 — имя того, с чей ленты репостнули шутку. Гарантируется, что для каждой строки «name1 reposted name2» пользователь «name1» еще не имел эту шутку в свой ленте, а «name2» уже имел ее в своей ленте к моменту репоста. Поликарп зарегистрирован под именем «Polycarp», и изначально шутка есть только в его ленте.

Поликарп измеряет успешность шутки как длину наибольшей цепочки репостов. Выведите успешность шутки Поликарпа.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 200) — количество репостов. Далее записаны сами репосты в порядке их совершения. Каждый из них записан в отдельной строке и имеет вид «name1 reposted name2». Все имена во входных данных состоят из прописных или строчных латинских букв и/или цифр и имеют длины от 2 до 24 символов включительно.

Известно, что имена пользователей регистронезависимы, то есть два имени, отличающиеся исключительно регистром букв, соответствуют одному и тому же пользователю соцсети.

Выходные данные

Выведите единственное целое число — максимальную длину цепочки репостов.

B. Фото на память

*особая задача дп реализация Структуры данных *1100

На вечеринке встретились n друзей, они давно не собирались все вместе и поэтому решили сделать общее групповое фото.

Упрощённо процесс фотографирования можно описать следующим образом. На фотографии каждый из друзей занимает прямоугольник из пикселей: i-й из них занимает прямоугольник ширины wi пикселей и высоты hi пикселей. На групповом фото все фотографируемые стоят в ряд, таким образом минимальный размер в пикселях фотографии, включающей всех друзей, составляет W × H, где W — суммарная ширина всех фотографируемых, а H — максимальная из высот всех фотографируемых.

Как это обычно и бывает, друзья сфотографировались n раз — на j-й (1 ≤ j ≤ n) фотографии присутствовали все, кроме j-го из них, ведь он был фотографом.

Выведите минимальный размер в пикселях каждого из сделанных фото.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 200 000) — количество друзей.

Далее следует n строк: i-я из них содержит информацию об i-м из друзей. В строке содержится пара целых чисел wi, hi (1 ≤ wi ≤ 10, 1 ≤ hi ≤ 1000) — ширина и высота в пикселях соответствующего ему прямоугольника.

Выходные данные

Выведите n разделённых пробелами чисел b1, b2, ..., bn, где bi — общее количество пикселей на минимальной фотографии, вмещающей всех друзей, кроме i-го из них.

B. Фото на память - 2 (round version)

дп жадные алгоритмы *1700

Прошло много лет, и на вечеринке снова встретились n друзей. С момента последней встречи техника шагнула далеко вперёд, появились фотоаппараты с автоспуском, и теперь не требуется, чтобы один из друзей стоял с фотоаппаратом, и, тем самым, оказывался не запечатлённым на снимке.

Упрощенно процесс фотографирования можно описать следующим образом. На фотографии каждый из друзей занимает прямоугольник из пикселей: в стоячем положении i-й из них занимает прямоугольник ширины wi пикселей и высоты hi пикселей. Но также, при фотографировании каждый человек может лечь, и тогда он будет занимать прямоугольник ширины hi пикселей и высоты wi пикселей.

Общая фотография будет иметь размеры W × H, где W — суммарная ширина всех прямоугольников-людей, а H — максимальная из высот. Друзья хотят определить, какую минимальную площадь может иметь общая фотография. Помогите им в этом.

Входные данные

В первой строке следует целое число n (1 ≤ n ≤ 1000) — количество друзей.

В последующих n строках следуют по два целых числа wi, hi (1 ≤ wi, hi ≤ 1000), обозначающие размеры прямоугольника, соответствующего i-му из друзей.

Выходные данные

Выведите единственное целое число, равное минимальной возможной площади фотографии, вмещающей всех друзей.

E. Аня и кубики

meet-in-the-middle Бинарный поиск битмаски дп математика Перебор *2100

Аня очень любит складывать и наклеивать. Сегодня она решила заняться именно этим.

У Ани есть n кубиков, лежащих в ряд и пронумерованных от 1 до n слева направо, с написанными на них натуральными числами. Также у нее есть k наклеек с восклицательными знаками. Известно, что количество наклеек не превышает количества кубиков.

Аня может наклеить на кубик восклицательный знак и получить факториал числа, записанного на кубике. Например, если на кубике было написано 5, то после наклеивания будет 5!, что равно 120.

Вам нужно помочь Ане посчитать, сколько существует способов оставить какое-то количество кубиков и наклеить на некоторые из них восклицательные знаки, использовав не более k восклицательных знаков, так, чтобы сумма чисел, написанных на кубиках (как отмеченных восклицательными знаками, так и нет), после наклеивания стала равна S. Аня может наклеить на один кубик не более одного восклицательного знака. Справитесь?

Два способа будем считать одинаковыми, если совпадают номера оставленных кубиков, а также совпадают номера кубиков, на которые наклеены восклицательные знаки.

Входные данные

В первой строке входных данных заданы через пробел три целых числа n, k и S (1 ≤ n ≤ 25, 0 ≤ k ≤ n, 1 ≤ S ≤ 1016) — количество кубиков и количество наклеек, которые есть у Ани, и сумма, которую необходимо набрать.

Во второй строке следуют n целых положительных чисел ai (1 ≤ ai ≤ 109) — числа, записанные на кубиках.

На разных кубиках могут быть написаны одинаковые числа.

Выходные данные

Выведите в первую строку выходных данных единственное целое неотрицательное число — количество способов оставить какое-то количество кубиков и наклеить на некоторые из них восклицательные знаки так, чтобы сумма чисел стала равна заданному числу S.

Примечание

В первом тесте из условия единственный способ достичь желаемого — оставить оба кубика, и наклеить на каждый из них по восклицательному знаку.

Во втором тесте из условия единственный способ достичь желаемого — оставить оба кубика, но не клеить восклицательный знак ни на один из них.

В третьем тесте из условия можно оставить любой из трёх кубиков, при этом на него можно как клеить, так и не клеить восклицательный знак, поэтому существует шесть способов достичь желаемого.

E. Передача уровней

дп реализация *2400

Оптимизация количества переданных по сети данных — важная и интересная часть разработки любого сетевого приложения.

В одной секретной игре, разрабатывающейся в недрах компании ZeptoLab, игровой мир представляет собой n уровней, расположенных по кругу. С i-го уровня можно попасть на уровни i - 1 и i + 1, при этом с уровня 1 можно попасть на уровень n и наоборот. Карта i-го уровня занимает объём в ai байт.

В целях сокращения переданного трафика, игра получает уровни следущим образом. На сервере все уровни разбиты на m групп, и каждый раз, когда игрок впервые оказывается на одном из уровней очередной группы, сервер отправляет приложению все уровни этой группы единым пакетом. Таким образом, пока игрок путешествует внутри уровней одной группы, приложению не требуется никакой новой информации. В силу ограничений технического характера, пакет может содержать произвольное количество уровней, но суммарный размер описаний их карт не должен превосходить b байт, где b — некоторая положительная целая константа.

Игроки, как правило, проходят уровни один за другим, поэтому было принято решение разбить n уровней на m групп таким образом, чтобы каждая группа являлась сплошным отрезком, содержащим несколько соседних уровней (в том числе, группа может содержать два соседних уровня n и 1). В частности, если описания всех уровней суммарно весят не более b байт, то их всех можно объединить в одну грппу, чтобы отправить единым пакетом.

Определите, какое минимальное количество групп требуется образовать, чтобы организовать уровни игры, соблюдая указанные условия?

Так как разработка игры — длительный процесс, а технологии не стоят на месте, то пока невозможно точно предсказать, какое значение примет константа b, ограничивающая размер пакета. Поэтому разработчики просят вас определить ответ для нескольких значений b.

Входные данные

В первой строке находятся два числа n, q (2 ≤ n ≤ 106, 1 ≤ q ≤ 50) — количество уровней в игровом мире и количество различных значений b, которые вам необходимо обработать.

Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 109) — размеры уровней в байтах.

В последующих q строках находятся целые числа bj (), обозначающие значения константы b, для которых вам требуется определить ответ.

Выходные данные

Для каждого значения kj из входных данных выведите в отдельной строке целое число mj (1 ≤ mj ≤ n), обозначающее минимальное количество групп, на которые нужно разбить уровни игры для передачи по сети, соблюдая указанные условия.

Примечание

В тесте из условия можно поступить следующим образом.

  • при b = 7 можно разбить на два отрезка: 2|421|32 (обратите внимание, один из отрезков содержит пятый, шестой и первый уровни);
  • при b = 4 можно разбить на четыре отрезка: 2|4|21|3|2;
  • при b = 6 можно разбить на три отрезка: 24|21|32|.

D. Задача о клике

дп жадные алгоритмы реализация сортировки Структуры данных *1800

Задача о клике — одна из самых известных NP-полных задач. После некоторых оговорок она формулируется следующим образом. Рассмотрим неориентированный граф G. Требуется найти такое подмножество вершин C максимального размера, что любые две из них соединены ребром в графе G. Звучит просто, не правда ли? К текущему моменту не известен алгоритм, который находит решение этой задачи за полиномиальное время от размера графа. Однако, как и в случае многих других NP-полных задач, задача о клике оказывается проще, если рассмотреть граф специфического вида.

Рассмотрим n различных точек на прямой. Пусть i-я точка имеет координату xi и вес wi. Образуем граф G, вершинами которого являются эти точки, а рёбрами соединены в точности те пары точек (i, j), для которых расстояние между этими точками не меньше суммы их весов, формально говоря: |xi - xj| ≥ wi + wj.

Найдите размер максимальной клики в таком графе.

Входные данные

В первой строке задано число n (1 ≤ n ≤ 200 000) — количество точек.

В каждой из последующих n строк следуют по два числа xi, wi (0 ≤ xi ≤ 109, 1 ≤ wi ≤ 109) — координата и вес очередной точки. Все координаты xi различны.

Выходные данные

Выведите одно число — количество вершин в максимальной клике образованного графа.

Примечание

Если вы вдруг умеете решать эту задачу, не используя специфические свойства графа, представленного в условии задачи, то вам полагается приз в миллион доллларов!

Изображение к тесту из условия:

E. Тупики

битмаски дп *2500

В Бертауне наступили тяжелые времена. В городе слишком много дорог, и их содержание дорого обходится правительству. В Бертауне n перекрестков и m двусторонних дорог, причем от каждого перекрестка можно добраться до любого другого. Мэр хочет закрыть некоторые дороги так, чтобы всего осталось n - 1 дорога, и по-прежнему от каждого перекрестка можно было добраться до любого другого. Кроме этого, мэра заботит количество тупиков — таких перекрестков, из которых выходит всего одна дорога. Тупиков должно быть не слишком много, но и не слишком мало. Мэр и его помощники посовещались и решили, что после закрытия в карте дорог должно быть ровно k тупиков. Ваша задача — посчитать количество различных способов закрытия дорог, при которых:

  • Остается ровно n - 1 дорог.
  • От каждого перекрестка можно добраться до любого другого.
  • На получившейся карте ровно k тупиков.

Два способа считаются различными, если существует дорога, которая закрыта в первом способе и открыта во втором.

Входные данные

В первой строке записано три целых числа n, m и k (3 ≤ n ≤ 10, n - 1 ≤ m ≤ n·(n - 1) / 2, 2 ≤ k ≤ n - 1) — количество перекрестков, дорог и тупиков соответственно. Далее следует m строк по два различных целых числа в каждой v1 и v2 (1 ≤ v1, v2 ≤ n, v1 ≠ v2) — номера перекрестков, которые соединяет очередная дорога. Между каждой парой перекрестков может быть не более одной дороги. Перекрестки нумеруются целыми числами от 1 до n. Гарантируется, что по исходным дорогам от каждого перекрестка можно добраться до любого другого.

Выходные данные

Выведите одно число — искомое число способов.

B. Пройденный путь

дп жадные алгоритмы математика *1400

Бортовой компьютер автомобиля Поликарпа зафиксировал, что его скорость в начале некоторого участка пути была равна v1 метров в секунду, а в конце — v2 метров в секунду. Известно, что этот участок пути занял ровно t секунд движения.

Считая, что в каждую из секунд скорость постоянна, а между секундами скорость может мгновенно изменяться не более чем на d метров в секунду по абсолютной величине (то есть разность скоростей в любые две соседние секунды по модулю не превосходит d), найдите возможную максимальную длину участка пути в метрах.

Входные данные

В первой строке записаны два целых числа v1 и v2 (1 ≤ v1, v2 ≤ 100) — скорости в метрах в секунду в начале участка и в его конце соответственно.

Во второй строке записаны два целых числа t (2 ≤ t ≤ 100) — время движения по участку в секундах, d (0 ≤ d ≤ 10) — максимальное значение, на которое может измениться скорость между соседними секундами.

Гарантируется, что существует способ проехать участок так, что:

  • скорость в первую секунду будет равна v1,
  • скорость в последнюю секунду будет равна v2,
  • абсолютная величина разности скоростей в любые две соседние секунды не превосходит d.
Выходные данные

Выведите максимально возможную длину участка пути в метрах.

Примечание

В первом примере последовательность скоростей автомобиля Поликарпа может иметь вид: 5, 7, 8, 6. Таким образом, суммарный путь составит 5 + 7 + 8 + 6 = 26 метров.

Во втором примере, так как d = 0, автомобиль проезжает весь участок с постоянной скоростью v = 10. За t = 10 секунд он проедет расстояние в 100 метров.

F. Упрощенный японский кроссворд

meet-in-the-middle битмаски дп хэши *2400

В этой задаче вам предстоит написать программу, решающую упрощенный японский кроссворд для полей не более 5 × 20.

Упрощенный японский кроссворд — это головоломка, в которой надо построить такое поле (каждая клетка либо белая, либо черная), которое соответствует заданной информации для строк и столбцов. Для каждой строки и каждого столбца задано количество блоков из черных клеток. Ваша задача — построить такое поле, для которого все эти количества имеют место быть.

Например, если размеры поля n = 3, m = 5, а количества блоков для строк это [2, 3, 2], а для столбцов — [1, 0, 1, 2, 1], то решение может выглядеть так:

Гарантируется, что для каждого теста, на котором будет запущена ваша программа, хотя бы одно решение головоломки существует.

Входные данные

В первой строке входных данных записаны два целых числа n, m (1 ≤ n ≤ 5, 1 ≤ m ≤ 20) — количество строк и столбцов соответственно.

Вторая строка содержит n целых чисел a1, a2, ..., an, где ai — количество черных блоков в i-й строке искомого поля.

Аналогично, третья строка содержит m целых чисел b1, b2, ..., bm, где bi — количество черных блоков в i-м столбце искомого поля.

Гарантируется, что хотя бы одно решение головоломки существует.

Выходные данные

Выведите любое из возможных решений. Ваш вывод должен содержать n строк по m символов в каждой из них. Белую ячейку следует обозначать символом «.», а черную — символом «*».

D. Тавас в Канзасе

дп игры *2900

Тавас живет в Канзасе. Канзас состоит из n городов, пронумерованных от 1 до n, соединенных m двусторонними дорогами. Из любого города можно добраться в любой другой город по этим дорогам. Канзас не менее странный, чем Тавас, поэтому дорога может соединять город с самим собой, а также несколько дорог могут соединять одну и ту же пару городов.

Тавас изобрел игру и назвал её "Дашти". Он хочет играть в Дашти со своей девушкой Нафас.

В этой игре к каждому городу в Канзасе сопоставляется произвольное целочисленное значение. Значение i-го города устанавливается равным pi.

В процессе игры Тавас находится в городе s, а Нафас — в городе t. Они совершают ходы по очереди и Тавас ходит первым. Во время хода игрок должен выбрать неотрицательное целое число x и тогда его или её счет увеличивается на сумму значений всех городов, находящихся на расстоянии не более x до его/её города. Каждый город может быть использован только один раз, иными словами, после первого использования значение города обнуляется.

Есть дополнительное правило: игрок на каждом ходу обязан выбрать такой x, что как минимум один из городов на расстоянии x не был использован до этого. Город может исходно иметь значение ноль, такой город исходно не считается использованным, таким образом, такой город может быть использован на очередном ходу для исполнения дополнительного правила.

Игра заканчивается, когда никто не може сделать ход.

Счет игрока — это сумма баллов, заработанных им в процесса игры. Побеждает игрок с большим счетом, а если у игроков одинаковые значения счета, то объявляется ничья. Оба игрока начинают игру с нулем баллов.

Если победит Тавас, то он разобьет этим сердце своей девушки. А если победит Нафас, то Тавас заплачет. Но если у них образуется одинаковый счет, от оба игрока останутся довольны, а Тавас подарит Нафас цветы.

В конце концов, результат игры волнует Тавас и Нафас сильнее, чем их дальнейшие взаимоотношения, поэтому они будут играть оптимально. Ваша задача — сказать Тавасу, что произойдет, когда завершится игра.

Входные данные

В первой строке входа записано два целых числа n и m (2 ≤ n ≤ 2000, n - 1 ≤ m ≤ 105).

Во второй строке входа записано два целых числа s и t (1 ≤ s, t ≤ n, s ≠ t).

В следующей строке записано n целых чисел p1, p2, ..., pn, разделенных пробелами (|pi| ≤ 109).

В следующих m строках записаны дороги. В каждой строке записано три целых числа v, u, w, это означает, что есть дорога длины w между городами v и u (1 ≤ u, v ≤ n и 0 ≤ w ≤ 109). Дорога может вести из города в него же, между двумя городами может быть несколько дорог.

Выходные данные

Если победит Тавас, выведите "Break a heart". Если победит Нафас, выведите "Cry", а если никто не победит (то есть, если игра закончится ничьей), выведите "Flowers".

C. Закон первой цифры

дп математика Теория вероятностей *2000

В теории вероятностей известен следующий парадокс, называемый законом Бенфорда: «Во многих списках чисел из произвольных реальных источников, числа, начинающиеся с цифры 1, встречаются гораздо чаще, чем числа, начинающиеся с любой другой цифры» (это самая простая формулировка закона).

Ёжик, прочитав об этом на CodeForces, заинтересовался этим утверждением, и желает тщательно исследовать его. В частности, ему интересна следующая похожая задача: имеется N случайных величин, i-я из которых может равновероятно принимать любое целое значение из некоторого отрезка [Li;Ri]. Это означает, что значение i-ой величины может быть равно любому целому числу из заданного отрезка [Li;Ri] с вероятностью 1 / (Ri - Li + 1).

Ёжика интересует вероятность такого события, что первые цифры как минимум K% этих величин окажутся равными единице. Иными словами, зафиксируем какие-то значения этих случайных величин, и оставим от каждого значения только первую (старшую) цифру. Далее посчитаем, сколько раз среди этих первых цифр встретилась единица, и если она встретилась как минимум в K процентах из этих N величин, то такой набор значений величин назовём хорошим. Требуется найти вероятность того, что случайно выбранный набор будет хорошим.

Входные данные

В первой строке записано число N — размер списка (1 ≤ N ≤ 1000). Далее идут N строк, каждая из которых содержит по паре чисел Li, Ri — описание очередной случайной величины. Гарантируется, что 1 ≤ Li ≤ Ri ≤ 1018.

В последней строке записано целое число K (0 ≤ K ≤ 100).

Все числа во входном файле целые.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cin (также вы можете использовать спецификатор %I64d).

Выходные данные

Выведите искомую вероятность. Выводите это дробное число с такой точностью, чтобы относительная или абсолютная погрешность ответа не превышала 10 - 9.

D. Сочинение песни

дп Перебор Строки *2100

Одна из любимых забав Ёжика и его друга — это брать какое-нибудь предложение или песенку и заменять в них половину слов (а то и все) на имена друг друга.

Вот близится День Рождения, и Ёжик решил подготовить своему другу особенный подарок — очень длинную песенку, в которой много раз будет повторяться его имя. Но вот беда — ему никак не удаётся сочинить хорошую песенку!

Дело в том, что Ёжик уже точно решил, какой длины должно быть получившееся предложение (т.е. сколько букв в нём должно быть), и в каких позициях в этом предложении должно входить имя друга, а вот больше ни в какой позиции вхождения этого имени быть не должно. Кроме того, Ёжик решил ограничиться в этом предложении только первыми K буквами английского алфавита (так что это будет даже не предложение, а одно длинное слово).

В итоге и правда получается достаточно сложная задача, поэтому Ёжик просит Вас помочь ему — написать программу, которая по заданной строке-имени P, длине N искомого слова, заданным позициям вхождения имени P в искомое слово и размеру алфавита K построит это слово. Вхождения имени, вообще говоря, могут перекрываться.

Входные данные

В первой строке записаны числа N и K — соответственно длина искомой строки и размер алфавита. Ограничения: 1 ≤ N ≤ 100, 2 ≤ K ≤ 26.

Во второй строке записано имя P — непустая строка длиной не более N символов, состоящая только из первых K символов английского алфавита (в нижнем регистре).

В третьей строке находится строка длины N - length(P) + 1, состоящая только из нулей и единиц. Единица в i-ой позиции означает, что в этом месте должно начинаться вхождение имени P, ноль — что вхождения в этой позиции быть не должно.

Выходные данные

Выведите искомое слово S. Если ответов несколько, выведите любой.

Если решение не существует, выведите «No solution».

D. Остров невезения

дп Теория вероятностей *1900

На острове невезения обитают популяции трех видов: r камней, s ножниц и p бумаг. В некоторые моменты времени две случайные особи встречаются между собой (все пары особей могут встретиться равновероятно), и если они принадлежат разным видам, то одна из особей убивает другую: камень убивает ножницы, ножницы убивают бумагу, а бумага убивает камень. Требуется выяснить для каждого вида, с какой вероятностью через продолжительное время остров будут населять только особи этого вида.

Входные данные

В единственной строке записаны три целых числа r, s и p (1 ≤ r, s, p ≤ 100) — начальные численности популяций камней, ножниц и бумаг соответственно.

Выходные данные

Выведите три вещественных числа через пробел: вероятности, с которыми камни, ножницы и бумаги окажутся выжившей популяцией соответственно. Ответ будет признан верным, если относительная или абсолютная погрешность каждого из чисел не превышает 10 - 9.

A. Пишем код

дп *1800

В большом проекте программистам поступило задание: написать ровно m строчек кода. Над проектом работает n программистов, i-й из них допускает в каждой написанной им строчке кода ровно ai ошибок.

Назовем последовательность целых неотрицательных чисел v1, v2, ..., vn планом, если v1 + v2 + ... + vn = m. Программисты выполняют план следующим образом: сначала первый программист пишет первые v1 строк поставленного задания, потом второй программист пишет следующие v2 строк поставленного задания, и так далее. В конце, последний программист дописывает оставшиеся строчки кода. Назовем план хорошим, если в сумме все написанные строчки задания содержат не более b ошибок.

Ваша задача — определите, сколько существует различных хороших планов. Поскольку искомое количество планов может быть большим, выведите остаток от деления этого количества на число mod.

Входные данные

В первой строке записано четыре целых числа n, m, b, mod (1 ≤ n, m ≤ 500, 0 ≤ b ≤ 500; 1 ≤ mod ≤ 109 + 7) — количество программистов, количество строчек кода в задании, максимальное возможное суммарное количество ошибок и модуль, который вы должны использовать при выводе ответа.

В следующей строке записано n целых чисел через пробел a1, a2, ..., an (0 ≤ ai ≤ 500) — сколько ошибок на строку допускает каждый из программистов.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю mod.

A. Пишем код

дп *1800

В большом проекте программистам поступило задание: написать ровно m строчек кода. Над проектом работает n программистов, i-й из них допускает в каждой написанной им строчке кода ровно ai ошибок.

Назовем последовательность целых неотрицательных чисел v1, v2, ..., vn планом, если v1 + v2 + ... + vn = m. Программисты выполняют план следующим образом: сначала первый программист пишет первые v1 строк поставленного задания, потом второй программист пишет следующие v2 строк поставленного задания, и так далее. В конце, последний программист дописывает оставшиеся строчки кода. Назовем план хорошим, если в сумме все написанные строчки задания содержат не более b ошибок.

Ваша задача — определите, сколько существует различных хороших планов. Поскольку искомое количество планов может быть большим, выведите остаток от деления этого количества на число mod.

Входные данные

В первой строке записано четыре целых числа n, m, b, mod (1 ≤ n, m ≤ 500, 0 ≤ b ≤ 500; 1 ≤ mod ≤ 109 + 7) — количество программистов, количество строчек кода в задании, максимальное возможное суммарное количество ошибок и модуль, который вы должны использовать при выводе ответа.

В следующей строке записано n целых чисел через пробел a1, a2, ..., an (0 ≤ ai ≤ 500) — сколько ошибок на строку допускает каждый из программистов.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю mod.

A. Пишем код

дп *1800

В большом проекте программистам поступило задание: написать ровно m строчек кода. Над проектом работает n программистов, i-й из них допускает в каждой написанной им строчке кода ровно ai ошибок.

Назовем последовательность целых неотрицательных чисел v1, v2, ..., vn планом, если v1 + v2 + ... + vn = m. Программисты выполняют план следующим образом: сначала первый программист пишет первые v1 строк поставленного задания, потом второй программист пишет следующие v2 строк поставленного задания, и так далее. В конце, последний программист дописывает оставшиеся строчки кода. Назовем план хорошим, если в сумме все написанные строчки задания содержат не более b ошибок.

Ваша задача — определите, сколько существует различных хороших планов. Поскольку искомое количество планов может быть большим, выведите остаток от деления этого количества на число mod.

Входные данные

В первой строке записано четыре целых числа n, m, b, mod (1 ≤ n, m ≤ 500, 0 ≤ b ≤ 500; 1 ≤ mod ≤ 109 + 7) — количество программистов, количество строчек кода в задании, максимальное возможное суммарное количество ошибок и модуль, который вы должны использовать при выводе ответа.

В следующей строке записано n целых чисел через пробел a1, a2, ..., an (0 ≤ ai ≤ 500) — сколько ошибок на строку допускает каждый из программистов.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю mod.

A. Пишем код

дп *1800

В большом проекте программистам поступило задание: написать ровно m строчек кода. Над проектом работает n программистов, i-й из них допускает в каждой написанной им строчке кода ровно ai ошибок.

Назовем последовательность целых неотрицательных чисел v1, v2, ..., vn планом, если v1 + v2 + ... + vn = m. Программисты выполняют план следующим образом: сначала первый программист пишет первые v1 строк поставленного задания, потом второй программист пишет следующие v2 строк поставленного задания, и так далее. В конце, последний программист дописывает оставшиеся строчки кода. Назовем план хорошим, если в сумме все написанные строчки задания содержат не более b ошибок.

Ваша задача — определите, сколько существует различных хороших планов. Поскольку искомое количество планов может быть большим, выведите остаток от деления этого количества на число mod.

Входные данные

В первой строке записано четыре целых числа n, m, b, mod (1 ≤ n, m ≤ 500, 0 ≤ b ≤ 500; 1 ≤ mod ≤ 109 + 7) — количество программистов, количество строчек кода в задании, максимальное возможное суммарное количество ошибок и модуль, который вы должны использовать при выводе ответа.

В следующей строке записано n целых чисел через пробел a1, a2, ..., an (0 ≤ ai ≤ 500) — сколько ошибок на строку допускает каждый из программистов.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю mod.

A. Пишем код

дп *1800

В большом проекте программистам поступило задание: написать ровно m строчек кода. Над проектом работает n программистов, i-й из них допускает в каждой написанной им строчке кода ровно ai ошибок.

Назовем последовательность целых неотрицательных чисел v1, v2, ..., vn планом, если v1 + v2 + ... + vn = m. Программисты выполняют план следующим образом: сначала первый программист пишет первые v1 строк поставленного задания, потом второй программист пишет следующие v2 строк поставленного задания, и так далее. В конце, последний программист дописывает оставшиеся строчки кода. Назовем план хорошим, если в сумме все написанные строчки задания содержат не более b ошибок.

Ваша задача — определите, сколько существует различных хороших планов. Поскольку искомое количество планов может быть большим, выведите остаток от деления этого количества на число mod.

Входные данные

В первой строке записано четыре целых числа n, m, b, mod (1 ≤ n, m ≤ 500, 0 ≤ b ≤ 500; 1 ≤ mod ≤ 109 + 7) — количество программистов, количество строчек кода в задании, максимальное возможное суммарное количество ошибок и модуль, который вы должны использовать при выводе ответа.

В следующей строке записано n целых чисел через пробел a1, a2, ..., an (0 ≤ ai ≤ 500) — сколько ошибок на строку допускает каждый из программистов.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю mod.

A. Пишем код

дп *1800

В большом проекте программистам поступило задание: написать ровно m строчек кода. Над проектом работает n программистов, i-й из них допускает в каждой написанной им строчке кода ровно ai ошибок.

Назовем последовательность целых неотрицательных чисел v1, v2, ..., vn планом, если v1 + v2 + ... + vn = m. Программисты выполняют план следующим образом: сначала первый программист пишет первые v1 строк поставленного задания, потом второй программист пишет следующие v2 строк поставленного задания, и так далее. В конце, последний программист дописывает оставшиеся строчки кода. Назовем план хорошим, если в сумме все написанные строчки задания содержат не более b ошибок.

Ваша задача — определите, сколько существует различных хороших планов. Поскольку искомое количество планов может быть большим, выведите остаток от деления этого количества на число mod.

Входные данные

В первой строке записано четыре целых числа n, m, b, mod (1 ≤ n, m ≤ 500, 0 ≤ b ≤ 500; 1 ≤ mod ≤ 109 + 7) — количество программистов, количество строчек кода в задании, максимальное возможное суммарное количество ошибок и модуль, который вы должны использовать при выводе ответа.

В следующей строке записано n целых чисел через пробел a1, a2, ..., an (0 ≤ ai ≤ 500) — сколько ошибок на строку допускает каждый из программистов.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю mod.

A. Пишем код

дп *1800

В большом проекте программистам поступило задание: написать ровно m строчек кода. Над проектом работает n программистов, i-й из них допускает в каждой написанной им строчке кода ровно ai ошибок.

Назовем последовательность целых неотрицательных чисел v1, v2, ..., vn планом, если v1 + v2 + ... + vn = m. Программисты выполняют план следующим образом: сначала первый программист пишет первые v1 строк поставленного задания, потом второй программист пишет следующие v2 строк поставленного задания, и так далее. В конце, последний программист дописывает оставшиеся строчки кода. Назовем план хорошим, если в сумме все написанные строчки задания содержат не более b ошибок.

Ваша задача — определите, сколько существует различных хороших планов. Поскольку искомое количество планов может быть большим, выведите остаток от деления этого количества на число mod.

Входные данные

В первой строке записано четыре целых числа n, m, b, mod (1 ≤ n, m ≤ 500, 0 ≤ b ≤ 500; 1 ≤ mod ≤ 109 + 7) — количество программистов, количество строчек кода в задании, максимальное возможное суммарное количество ошибок и модуль, который вы должны использовать при выводе ответа.

В следующей строке записано n целых чисел через пробел a1, a2, ..., an (0 ≤ ai ≤ 500) — сколько ошибок на строку допускает каждый из программистов.

Выходные данные

Выведите единственное целое число — ответ на задачу по модулю mod.

C. Запоминаем строки

битмаски дп *2500

У вас есть набор из n строк одинаковой длины, состоящих из строчных букв английского языка. Будем говорить, что набор строк просто запомнить, если для каждой строки существует некоторая позиция i и некоторая буква c английского алфавита, такие, что эта строка является единственной в наборе, имеющей букву c в позиции i.

Например, набор строк {«abc», «aba», «adc», «ada»} нельзя просто запомнить. А набор {«abc», «ada», «ssa»} можно просто запомнить, поскольку:

  • первая строка является единственной строкой, имеющей символ c в позиции 3;
  • вторая строка является единственной строкой, имеющей символ d в позиции 2;
  • третья строка является единственной строкой, имеющей символ s в позиции 2.

Вы хотите немного изменить ваш набор так, чтобы его можно было просто запомнить. За aij монет вы можете изменить символ в j-й позиции в i-й строке на любой другую строчную букву английского алфавита. Определите, какое минимальное количество монет нужно заплатить за выполнение изменений, чтобы набор строк можно было просто запомнить.

Входные данные

В первой строке записано два целых числа n, m (1 ≤ n, m ≤ 20) — количество строк в наборе и длина строк, соответственно. В следующих n строках заданы строки набора, которые состоят только из строчных букв английского алфавита и имеют длину m.

В следующих n строках записано по целых m чисел, в i-й из них записаны целые числа ai1, ai2, ..., aim (0 ≤ aij ≤ 106).

Выходные данные

Выведите единственное число — ответ на задачу.

D. Улучшение дорог

Деревья дп *2300

В стране есть n городов и n - 1 двусторонняя дорога, причем из каждого города можно добраться до любого другого города, двигаясь только по дорогам. Города пронумерованы целыми числами от 1 до n включительно.

Все дороги изначально плохие, однако правительство хочет улучшить состояние некоторых дорог. Будем считать, что граждане довольны улучшением дорог, если на пути от столицы, расположенной в городе x, до любого города не более одной плохой дороги на пути.

Ваша задача — для каждого возможного x определить количество способов улучшить качество некоторых дорог так, чтобы удовлетворить требованиям граждан. Поскольку искомые значения могут быть очень большими, нужно подсчитать остаток от деления каждого количества на 1 000 000 007 (109 + 7).

Входные данные

В первой строке входных данных записано одно целое число n (2 ≤ n ≤ 2·105) — количество городов в стране. В следующей строке задано n - 1 целое положительное число p2, p3, p4, ..., pn (1 ≤ pi ≤ i - 1) — описание дорог страны. Число pi означает, что в стране имеется дорога, соединяющая город pi и город i.

Выходные данные

Выведите n целых чисел a1, a2, ..., an, где ai, где ai — искомое количество способов улучшить качество дорог по модулю 1 000 000 007 (109 + 7), если столица страны находится в городе с номером i.

C. Дровосеки

дп жадные алгоритмы *1500

Маленькая девочка Сьюзи каждый день слушает сказки перед сном. Сегодняшняя сказка была про дровосеков, поэтому маленькая девочка сразу же начала представлять себе, как дровосеки рубят деревья, и в её мыслях родилась ситуация, описанная ниже.

Есть n деревьев, расположенных вдоль дороги в точках с координатами x1, x2, ... , xn. Каждое дерево имеет свою высоту hi. Дерево можно срубить и повалить влево или вправо. Тогда оно будет занимать отрезки [xi - hi, xi] и [xi;xi + hi] соответственно. Пока дерево не срублено, оно занимает точку с координатами xi. Дерево можно повалить, если на отрезке, который оно должно занимать после сваливания, нет ни одной занятой точки. Дровосеки хотят заготовить как можно большее число деревьев, поэтому Сьюзи стало интересно, какое наибольшее количество деревьев можно повалить.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 105) — количество деревьев.

В последующих n строках находятся пары целых чисел xi, hi (1 ≤ xi, hi ≤ 109) — координата и высота і-го дерева.

Пары заданы в порядке возрастания xi. Никакие два дерева не находятся в точке с одинаковой координатой.

Выходные данные

Требуется вывести одно число — максимальное количество деревьев, которое можно срубить по указанным правилам.

Примечание

В первом примере деревья можно повалить так:

  • повалить 1-е дерево влево — теперь оно занимает отрезок [ - 1;1]
  • повалить 2-е дерево вправо — теперь оно занимает отрезок [2;3]
  • оставить 3-е дерево — оно занимает точку 5
  • оставить 4-е дерево — оно занимает точку 10
  • повалить 5-е дерево вправо — теперь оно занимает отрезок [19;20]

Во втором примере можно повалить еще и 4 дерево вправо, после чего оно займет отрезок [10;19].

D. Солдат и игра с числами

дп Конструктив математика теория чисел *1700

Два солдата играют в игру. Сначала один солдат выбирает целое положительное число n и называет его второму солдату. Затем второй солдат пытается совершить наибольшее количество ходов. На каждом ходу солдат выбирает положительное целое число x > 1, такое, что n делится на x, и заменяет число n числом n / x. Когда n становится равно 1 и больше нет возможных ходов, тогда игра завершается и счет второго солдата равен количеству совершённых им ходов.

Чтобы сделать игру поинтереснее, в качестве n солдат выбирает число вида a! / b! для некоторых положительных целых чисел a и b (a ≥ b). Здесь под k! имеется в виду факториал числа k, который определяется как произведение всех положительных целых чисел, не превосходящих k.

Определите максимально возможный счет второго солдата.

Входные данные

В первой строке входа записано единственное целое число t (1 ≤ t ≤ 1 000 000) обозначающее количество игр, в которые играют солдаты.

Затем следуют t строк, в каждой строке записана пара чисел a и b (1 ≤ b ≤ a ≤ 5 000 000), обозначающая значение n для игры.

Выходные данные

Для каждой игры выведите максимальный счет, которого может достичь второй солдат.

B. Майк и футы

Бинарный поиск дп снм Структуры данных *1900

Майк — президент страны What-The-Fatherland. Помимо Майка, там живёт ещё n медведей. Все они стоят в ряд и пронумерованы от 1 до n слева направо. Рост i-го медведя составляет ровно ai футов.

Назовём группой медеведей непустой непрерывный подотрезок этого ряда. Размер группы — это количество медведей в этой группе. Сила группы — это минимальная высота медведя в этой группе.

Майку хочется знать для каждого x, такого что 1 ≤ x ≤ n, максимальную силу группы медведей размера x.

Входные данные

В первой строке ввода записано целое число n (1 ≤ n ≤ 2 × 105), количество медведей.

Во второй строке записано n целых чисел, разделенных пробелом, a1, a2, ..., an (1 ≤ ai ≤ 109) — высоты медведей.

Выходные данные

Выведите n целых чисел в одной строке. Для каждого x от 1 до n выведите максимальную силу среди всех групп размера x.

C. Майк и пена

битмаски дп Комбинаторика математика теория чисел *2300

Майк — бармен в баре Рико. В заведении Рико пивные стаканы кладутся на особую полку. Всего в баре n сортов пива, пронумерованных от 1 до n. Бокал с i-м сортом пива содержит ai миллилитров пены.

Максим — босс Майка. Сегодня он сказал Майку выполнить q запросов. Изначально полка пустая. Каждый запрос представляет собой целое число x. Если пиво номер x уже есть на полке, то Майк должен забрать его с полки, в противном случае — положить его на полку.

После каждого запроса Майк должен определить качество полки. Медведи — те ещё гики, так что они считают, что качество полки — это количество пар (i, j) стаканов на полке, таких, что i < j и , где — наибольший общий делитель чисел a и b.

Майк устал. Поэтому он попросил вам помочь ему выполнить эти запросы.

Входные данные

В первой строке ввода записаны числа n и q (1 ≤ n, q ≤ 2 × 105), количество различных видов пива и количество запросов.

В следующей строке записано n целых чисел через пробел, a1, a2, ... , an (1 ≤ ai ≤ 5 × 105), высота пены на каждом сорте пива.

В следующих q строках записаны запросы. Каждый запрос состоит из единственного целого числа x (1 ≤ x ≤ n), — номера сорта пива, которое надо добавить на полку или убрать оттуда.

Выходные данные

Для каждого запроса выведите ответ в отдельной строке.

B. Майк и весёлая игра

дп жадные алгоритмы Перебор реализация *1400

Майк с некоторыми мишками играют в веселую игру. Майк — судья. Все медведи, кроме Майка, стоят на клетчатом поле размера n × m, в каждой клетке стоит ровно по медведю. Обозначим медведя на пересечении столбца номер j и строки номер i как (i, j). Майк держит руки на ушах (так как он судья), а каждый медведь стоящий на поле, закрывает лапами рот или глаза.

Медведи разыгрывают q раундов. В каждом раунде Майк выбирает медведя (i, j) и говорит ему поменять своё состояние, то есть, если медведь закрывает лапами рот, то он должен переместить лапы на глаза, а в противном случае — закрыть лапами рот. После этого Майк хочет знать счёт медведей.

Счет медведей — это максимальное по всем строкам количество стоящих подряд медведей с лапами на глазах в этой строке.

Медведи ленивые, поэтому Майк попросил Вас помочь ему. Для каждого раунда, назовите ему счет медведей после того, как поменет своё состояние выбранный в этом раунде медведь.

Входные данные

В первой строке находится три целых числа, n, m и q (1 ≤ n, m ≤ 500 и 1 ≤ q ≤ 5000).

В следующих n строках задано описание поля. Каждая строка состоит из m целых чисел, разделенных пробелами. Каждое из этих чисел равно либо 0 (закрывается рот), либо 1 (закрываются глаза).

В следующих q строках записана информация о раундах. В каждой из них записано два целых числа, i и j (1 ≤ i ≤ n and 1 ≤ j ≤ m), номер строки и столбца медведя, меняющего состояние.

Выходные данные

После каждого раунда выведите текущий счет медведей.

D. Красивые числа

дп теория чисел *2500

Володя странноват, как, впрочем, и его вкусы. Он считает натуральное число красивым в том и только в том случае, когда оно делится на любую свою ненулевую цифру. Мы не будем спорить с Володей, лучше посчитаем количество красивых чисел в заданном интервале.

Входные данные

Первая строка входных данных содержит количество тестов t (1 ≤ t ≤ 10). Каждая из последующих t строк содержит два натуральных числа li и ri (1 ≤ li ≤ ri ≤ 9 ·1018).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cin (также вы можете использовать спецификатор %I64d).

Выходные данные

Выведите t чисел, каждое на своей строке, — ответы на запросы, то есть в i-й строке — количество красивых чисел от li до ri включительно.

A. Две подстроки

дп жадные алгоритмы Перебор реализация Строки *1500

Дана строка s. Требуется определить, существуют ли в данной строке s две непересекающиеся подстроки "AB" и "BA" (подстроки могут идти в любом порядке).

Входные данные

На вход подаётся строка s длиной от 1 до 105 символов, состоящая из заглавных букв латинского алфавита.

Выходные данные

Выведите "YES" (без кавычек), если строка s содержит две непересекающиеся подстроки "AB" и "BA", и "NO" иначе.

Примечание

В первом примере входных данных, несмотря на то, что есть подстроки "AB" и "BA", их вхождения пересекаются, поэтому ответ — "NO".

Во втором примере входных данных есть следующие вхождения подстрок: BACFAB.

В третьем примере нет ни подстроки "AB", ни подстроки "BA".

C. Делимость на восемь

дп математика Перебор *1500

Дано целое неотрицательное число n, запись которого состоит из не более, чем 100 цифр, и не содержит ведущих незначащих нулей.

Нужно определить, можно ли в данном числе вычеркнуть некоторое (возможно нулевое) количество цифр так, чтобы полученное после вычеркивания цифр число содержало хотя бы одну цифру, было неотрицательным, не имело ведущих незначащих нулей и делилось на 8. После вычеркивания переставлять цифры запрещается.

Если решение существует, необходимо вывести его.

Входные данные

В единственной строке входных данных содержится целое неотрицательное число n. Запись числа n не содержит ведущих незначащих нулей и ее длина не превосходит 100 цифр.

Выходные данные

Выведите "NO" (без кавычек), если искомого способа вычеркнуть некоторые цифры из числа n не существует.

Иначе выведите "YES" в первой строке и число, получившееся в результате вычеркивания некоторых цифр числа n, во второй строке. Выведенное число должно делиться на 8.

Если возможных ответов несколько, требуется вывести любой из них.

C. Ваня и весы

meet-in-the-middle дп жадные алгоритмы математика Перебор теория чисел *1900

У Вани есть чашечные весы и гири массами w0, w1, w2, ..., w100 грамм, где w — некоторое целое число не меньше 2 (ровно по одной гире каждого номинала). Ваня хочет узнать, может ли он взвесить вещь с массой m с помощью данных гирь, если гири можно класть на обе чаши весов. Формально говоря, требуется определить, можно ли положить вещь массой m и некоторые гири на левую чашу весов, а некоторые гири на правую чашу весов таким образом, чтобы чаши весов были уравновешены.

Входные данные

В первой строке содержатся два целых числа w, m (2 ≤ w ≤ 109, 1 ≤ m ≤ 109) — число, задающее массы гирь и массу вещи.

Выходные данные

Выведите слово 'YES', если вещь можно взвесить и 'NO', если нельзя.

Примечание

Пояснение к первому тесту из условия. На одной чаше может быть вещь массой 7 и гиря массой 3, а на второй чаше две гири массами 9 и 1 соответственно. Тогда 7 + 3 = 9 + 1.

Пояснение ко второму тесту из условия. На одной чаше может быть вещь массой 99 и гиря массой 1, а на второй гиря массой 100.

Пояснение к третьему тесту из условия. Взвесить вещь, как описано в условии, невозможно.

E. Ваня и скобки

дп жадные алгоритмы Перебор Разбор выражений реализация Строки *2100

Ваня делает домашнее задание по математике. У него есть выражение типа , где x1, x2, ..., xn — цифры от 1 до 9, а знаком обозначается либо плюс '+' либо знак умножения '*'. Ване нужно поставить в этом выражении одну пару скобок так, чтобы максимизировать значение полученного выражения.

Входные данные

В первой строке содержится выражение s (1 ≤ |s| ≤ 5001, |s| нечётно), в котором на нечетных позициях находятся только цифры от 1 до 9, а на чётных только знаки  +  и  * .

Количество знаков  *  не превосходит 15.

Выходные данные

В первой строке выведите максимальное возможное значение выражения.

Примечание

Пояснение к первому тесту из условия. 3 + 5 * (7 + 8) * 4 = 303.

Пояснение к второму тесту из условия. (2 + 3) * 5 = 25.

Пояснение к третьему тесту из условия. (3 * 4) * 5 = 60 (также подходит множество других вариантов, например, (3) * 4 * 5 = 60).

A. Кёя и цветные мячи

дп Комбинаторика математика *1500

У Кёи Оотори есть сумка с n цветными мячиками, раскрашенными k различными цветами. Цвета пронумерованы от 1 до k. Мячики одного цвета неотличимы друг от друга. Юноша вынимает мячики из сумки один за другим, пока сумка не опустеет. Он заметил, что для всех i от 1 до k - 1 он вынул последний мяч цвета i до того, как он вынул последний мяч цвета i + 1. Теперь ему интересно, сколько существует различных последовательностей цветов вынутых мячей, удовлетворяющих данному условию.

Входные данные

В первой строке ввода находить целое число k (1 ≤ k ≤ 1000) — количество цветов.

Затем следуют k строк. В i-й строке находится число ci, количество мячей i-го цвета (1 ≤ ci ≤ 1000).

Суммарное количество мячей не превосходит 1000.

Выходные данные

Выведите единственное целое число — остаток от деления на 1 000 000 007 количества различных последовательностей цветов мячей, удовлетворяющих условию.

Примечание

В первом примере у нас есть два мяча цвета 1, два мяча цвета 2, и один мяч цвета 3. Три возможных способа таковы:


1 2 1 2 3
1 1 2 2 3
2 1 1 2 3

E. Кёя и поезд

бпф графы дп математика Теория вероятностей *3200

Кёя Оотори хочет добраться до школы, воспользовавшись железнодорожным транспортом. Дано n станций и m односторонних железнодорожных маршрутов, соединяющих разные станции. Кёя находится на станции номер 1, а его школа — на станции n. Чтобы воспользоваться маршрутом, требуется заплатить за билет, после чего поезд едет определенное количество времени. Однако поезда несовершенны и доезжают до пункта назначения за некоторое случайное время. Если Кёя прибывает в школу строго более, чем через t единиц времени, ему придётся заплатить штраф в размере x.

Каждый маршрут описывается ценой за билет и распределением вероятностей для времени пути поезда. Более формально, для пути i известна стоимость билета ci, и распределение вероятностей pi, k, обозначающее вероятность того, что поезду, едущему по этому маршруту, потребуется k единиц времени для всех 1 ≤ k ≤ t. Времена путешествия всех поездов, используемых Кёей, являются совокупно независимыми случайными величинами (более того, если Кёя путешествует тем же самым поездом более одного раза, возможно, что поезд будет ехать разное время, и эти значения также независимы друг от друга).

Кёя хочет добраться до школы таким образом, чтобы минимизировать математическое ожидание количества потраченных им денег (за цены всех билетов плюс, возможно, штраф за опоздание). Кёя может модифицировать свой план по ходу поездки, основываясь на том, сколько времени у него остаётся. Каково матожидание количества денег, потраченных Кёей на пути в школу, если он будет действовать оптимально?

Входные данные

В первой строке ввода находятся четыре целых числа n, m, t, x (2  ≤  n  ≤ 50, 1 ≤ m ≤ 100, 1 ≤ t ≤ 20 000, 0 ≤ x ≤ 106).

Следующие 2m строк содержат описания маршрутов.

В 2i-й строке находятся 3 целых числа ai, bi, ci, обозначающих односторонний маршрут от платформы ai до платформы bi, со стоимость билета ci (1 ≤ ai, bi ≤ n, ai ≠ bi, 0 ≤ ci ≤ 106). От каждой платформы существует как минимум один путь до школы.

В (2i + 1)-й строке находятся t целых чисел, pi, 1, pi, 2, ..., pi, t, где pi, k / 100000 — это вероятность того, что этому поезду потребуется k единиц времени на преодоление пути (0 ≤ pi, k ≤ 100 000 для 1 ≤ k ≤ t, ).

Гарантируется, что между каждой парой платформ существует не более одного маршрута в каждом из направлений.

Выходные данные

Выведите единственное действительное число, равное математическому ожиданию стоимости дороги в школу. Ответ будет засчитан, если его относительная или абсолютная погрешность относительно авторского ответа не превышает 10 - 6.

Примечание

Оптимальная стратегия в первом тесте из условия такова:

Сперва надо проехать по первому маршруту. С вероятностью 1 / 2 у Кёи это займёт 1 единицу времени. В противном случае, Кёя потратит 3 единиц времени.

Если поезд пройдет маршрут за 1 единицы времени, надо проехать по четвёртому маршруту. Кёя доберется до школы вовремя с вероятностью 1 / 2. В противном случае, если поезд едет за 3 единицы времени, надо проехать по второму маршруту. Кёя доберется до школы вовремя с вероятностью 1 / 10.

Так как стоимость всех путей равняется нулю, достаточно определить вероятность того, что Кёя получит штраф за опоздание. Вероятность того, что Кёя будет должен заплатить штраф, равна 1 / 2 × 1 / 2 + 1 / 2 × 9 / 10 = 7 / 10. Можно показать, что никакая другая стратегия не даёт меньшего математического ожидания штрафа.

Оптимальная стратегия во втором тесте из условия — проехать по маршруту 1 → 2 → 4, что бы ни произошло. Кёя получит штраф с вероятностью 3 / 4, а суммарная стоимость билетов равна 200, следовательно, ожидаемая стоимость всей поездки — 200.75.

C. Артур и стол

дп жадные алгоритмы математика Перебор сортировки Структуры данных *1900

Артур купил большой и красивый стол в свою новую квартиру. Придя домой, Артур обнаружил, что его покупка стоит неустойчиво и сильно шатается.

У стола, купленного Артуром, всего n ножек, длина i-й ножки равна li.

Артур решил сделать стол устойчивым и открутить некоторые ножки. Для каждой из них Артур определил число di — сколько единиц энергии он потратит, чтобы открутить i-ю ножку.

Стол с k ножками считается устойчивым, если ножек максимальной длины строго больше половины. Например, чтобы стол с 5-ю ножками был устойчивым, необходимо, чтобы ножек максимальной длины (среди этих пяти) было хотя бы три. Также, стол с одной ножкой всегда устойчивый, а стол с двумя ножками устойчив тогда и только тогда, когда они имеют равные длины.

Перед вами стоит задача помочь Артуру и посчитать минимальное число единиц энергии, которое Артур может затратить, чтобы сделать стол устойчивым.

Входные данные

В первой строке входных данных следует целое число n (1 ≤ n ≤ 105) — изначальное количество ножек у стола, купленного Артуром.

Во второй строке входных данных задана последовательность из n целых чисел li (1 ≤ li ≤ 105), где li равно длине i-й ножки стола.

В третьей строке входных данных задана последовательность из n целых чисел di (1 ≤ di ≤ 200), где di — это количество единиц энергии, которое Артур затратит для откручивания i-й ножки стола.

Выходные данные

Выведите одно целое число — минимальное число единиц энергии, которое нужно затратить Артуру, чтобы сделать стол устойчивым.

E. Аня и полупалиндром

графы Деревья дп Строки строковые суфф. структуры Структуры данных *2300

Завтра Ане предстоит сдавать самый сложный экзамен по программированию, на котором ей необходимо получить отличную оценку.

На последнем теоретическом занятии преподаватель ввел понятие полупалиндрома.

Строка t является полупалиндромом, если для всех нечетных позиций i () выполняется условие ti = t|t| - i + 1, где |t| — длина строки t, а нумерация позиций начинается с единицы. Например, строки "abaa", "a", "bb", "abbbaa" являются полупалиндромами, а строки "ab", "bba" и "aaabaa" — нет.

Аня узнала, что на экзамене она получит строку s, состоящую только из латинских символов a и b, а также число k. Для получения отличной оценки ей необходимо будет найти k-ю в лексикографическом порядке подстроку данной строки s среди тех подстрок, которые являются полупалиндромами. При этом, каждая подстрока в этом порядке учитывается столько раз, сколько раз она встречается в s.

Преподаватель гарантирует, что данное число k не превышает количества подстрок данной строки, которые являются полупалиндромами.

А вы сможете справиться с такой задачей?

Входные данные

В первой строке входных данных следует строка s (1 ≤ |s| ≤ 5000), состоящая только из символов 'a' и 'b', где |s| — длина строки s.

Во второй строке следует целое положительное число k — лексикографический номер искомой подстроки-полупалиндрома среди всех подстрок-полупалиндромов заданной строки s. Нумерация этих подстрок начинается с единицы.

Гарантируется, что число k не превышает количества подстрок данной строки, которые являются полупалиндромами.

Выходные данные

Выведите подстроку заданной строки, которая является k-й в лексикографическом порядке из тех подстрок заданной строки, которые являются полупалиндромами.

Примечание

По определению, строка a = a1a2... an лексикографически меньше строки b = b1b2... bm, если либо a является префиксом b и не совпадает с b, либо существует такое i, что a1 = b1, a2 = b2, ... ai - 1 = bi - 1, ai < bi.

В первом примере подстроками-полупалиндромами являются следующие строки — a, a, a, a, aa, aba, abaa, abba, abbabaa, b, b, b, b, baab, bab, bb, bbab, bbabaab (список задан в лексикографическом порядке).

C. Геральд и гигантские шахматы

дп Комбинаторика математика теория чисел *2200

На Геральдионе очень распространены гигантские шахматы. Не будем углубляться в правила этой игры, скажем лишь, что игра происходит на поле размера h × w, и оно тоже раскрашено в два цвета, но не как в шахматах. Почти все клетки поля белые и только некоторые — чёрные. В данный момент Геральд заканчивает партию в гигантские шахматы против своего друга Полларда. Геральд почти выиграл, и для победы ему осталось только провести свою пешку из верхнего левого угла доски, где она сейчас стоит, в нижний правый. Геральд настолько уверен в победе, что ему стало интересно, сколькими способами он может выиграть?

Пешка, которая осталась у Геральда, может ходить двумя способами: на одну клетку вниз или на одну клетку вправо. Кроме того, она не может ходить на чёрные клетки, иначе Геральд всё-таки проиграет. Никаких других пешек или фигур на поле не осталось, так что, согласно правилам гигантских шахмат, Геральд ходит своей пешкой, пока игра не закончится, а Поллард просто наблюдает за этим процессом.

Входные данные

В первой строке входных данных заданы три числа: h, w, n — размеры доски и количество чёрных клеток (1 ≤ h, w ≤ 105, 1 ≤ n ≤ 2000).

В следующих n строках задано описание чёрных клеток. В i-й из этих строк написаны числа ri, ci (1 ≤ ri ≤ h, 1 ≤ ci ≤ w) — номер строки и столбца i-й клетки.

Гарантируется, что верхняя левая и нижняя правая клетка белые и все клетки в описании различны.

Выходные данные

Выведите единственное число — остаток от деления количества способов провести пешку Геральда от верхней левой клетки до нижней правой на число 109 + 7.

E. Геральд и тропинка

дп сортировки *3000

Главная прогулочная тропинка Геральдиона абсолютно прямая, и проходит строго с севера на юг, при этом она настолько длинная, что никто никогда не доходил до её концов ни в одном из двух направлений. Геральдионцы очень любят гулять по этой тропинке и днём и ночью, поэтому мэр города попросил Геральда организовать освещение этой тропинки с помощью нескольких прожекторов. Прожекторы уже поставлены на определённых местах и Геральд не сможет их подвинуть. Каждый прожектор освещает отрезок тропинки определённой длины, одним из концов которого является место расположения прожектора, и его можно направить так, чтобы он освещал отрезок к югу или к северу от себя.

На тропинке стоит памятник мэру острова, и, хотя гулять можно в обоих направлениях от этого памятника, ни один прожектор не находится южнее этого памятника.

Вам даны расположение прожекторов и их мощность. Помогите Геральду направить все прожекторы так, чтобы суммарная длина освещённой части тропинки была как можно больше.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100) — количество прожекторов. В каждой из следующих n строк записано через пробел по два целых числа ai и li (0 ≤ ai ≤ 108, 1 ≤ li ≤ 108). Число ai означает, насколько севернее памятника располагается i-й прожектор, а число li — длину отрезка, который он освещает.

Гарантируется, что все ai различны.

Выходные данные

Выведите единственное число — максимальную суммарную длину освещённой части тропинки.

D. Получаем строку

дп *2100

Дана строка s, состоящая из больших латинских букв. Обозначим ее текущую длину как |s|. За один ход разрешается применить к ней одну из следующих операций:

  • INSERT pos ch — вставить букву ch в строку s в позицию pos (1 ≤ pos ≤ |s| + 1, A ≤ ch ≤ Z). Буква ch становится pos-ым символом строки s, при этом буквы сдвигаются, и длина строки увеличивается на 1.
  • DELETE pos — удалить из строки s символ с номером pos (1 ≤ pos ≤ |s|) При этом буквы сдвигаются, и длина строки уменьшается на 1.
  • REPLACE pos ch — буква в позиции pos строки s заменяется на ch (1 ≤ pos ≤ |s|, A ≤ ch ≤ Z). При этом длина строки не меняется.

Ваша задача — найти, за какое наименьшее количество ходов можно получить из строки s строку t. Так же требуется найти последовательность действий, приводящую к нужному результату.

Входные данные

В первой строке записана s, во второй строке записана t. Строки состоят только из больших латинских букв, их длины — положительные числа от 1 до 1000.

Выходные данные

В первую строку выведите количество ходов k в найденной последовательности операций. Это число должно быть наименьшим возможным. Далее выведите k строк по одной операции в каждой. Операции выводите в описанном выше формате. Если решений несколько, выведите любое.

C. Геометрическая прогрессия

Бинарный поиск дп Структуры данных *1700

Поликарп очень любит геометрические прогрессии. Так как ему только три года, он любит прогрессии только длины три. Также у него есть любимое целое число k и последовательность a, состоящая из n целых чисел.

Он хочет узнать: сколько подпоследовательностей длины три можно выбрать из a так, чтобы они образовывали геометрическую прогрессию со знаменателем k.

Подпоследовательностью длины три называются три таких индекса i1, i2, i3, что 1 ≤ i1 < i2 < i3 ≤ n. То есть подпоследовательности длины три — это такие тройки элементов, которые необязательно идут подряд в последовательности, но их индексы строго возрастают.

Геометрическая прогрессия со знаменателем k — это последовательность чисел вида b·k0, b·k1, ..., b·kr - 1.

Поликарпу всё ещё три года, поэтому он не может посчитать это количество самостоятельно. Помогите ему сделать это.

Входные данные

В первой строке входных данных содержится два целых числа n и k (1 ≤ n, k ≤ 2·105) — количество чисел в последовательности Поликарпа и его любимое число.

Вторая строка содержит n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — элементы последовательности.

Выходные данные

Выведите единственное число — количество способов выбрать такую подпоследовательность длины три, что она образует геометрическую прогрессию со знаменателем k.

Примечание

В первом примере ответ четыре, так как в качестве первого элемента можно выбрать любую из двух единиц, в качестве второго — любую из двух двоек, а третий элемент подпоследовательности обязательно должен равняться четырём.

F. Мавзолей

дп *2400

Совсем недавно скоропостижно скончался король Берляндии Берл IV. Да здравствует Берл V! В знак высочайших заслуг усопшего короля новый король решил установить мавзолей с телом Берла IV на главной площади столицы.

Мавзолей будет сооружён из 2n блоков, каждый из которых имеет форму прямоугольного параллелепипеда. Каждый из блоков имеет в нижнем основании квадрат 1 × 1 метр. Среди блоков ровно два имеют высоту один метр, ровно два имеют высоту два метра, ..., ровно два имеют высоту n метров.

Блоки будут установлены в ряд без промежутков один за другим. Конечно, не каждый порядок блоков имеет форму мавзолея. Для того, чтобы заданный порядок имел форму мавзолея, необходимо, чтобы при прохождении вдоль мавзолея от одного конца до другого высоты блоков сначала неубывали (то есть возрастали или оставались неизменными), а затем — невозрастали (то есть убывали или оставались неизменными). Допустимо, что любой из этих двух участков будет отсутствовать. Например, под это требование попадают следующие последовательности высот блоков:

  • [1, 2, 2, 3, 4, 4, 3, 1];
  • [1, 1];
  • [2, 2, 1, 1];
  • [1, 2, 3, 3, 2, 1].

Внезапно появились дополнительные k требований. Каждое из требований имеет вид: «h[xi] знакi h[yi]», где h[t] — высота t-го слева блока, а знакi — один из пяти возможных знаков '=' (равно), '<' (меньше), '>' (больше), '<=' (меньше либо равно), '>=' (больше либо равно). Таким образом, каждое из k дополнительных требований задаётся парой индексов xi, yi (1 ≤ xi, yi ≤ 2n) и знаком знакi.

Найдите количество возможных способов расставить блоки, чтобы одновременно выполнялось как требование о форме мавзолея (см. третий абзац), так и k дополнительных требований.

Входные данные

В первой строке входных данных содержатся целые числа n и k (1 ≤ n ≤ 35, 0 ≤ k ≤ 100) — количество пар блоков и количество дополнительных требований.

В следующих k строках перечислены дополнительные требования по одному в строке в формате «xi знакi yi» (1 ≤ xi, yi ≤ 2n), а знак — один из списка пяти возможных знаков.

Выходные данные

Выведите искомое количество способов.

B. Симметричное и транзитивное

дп Комбинаторика математика *1900

Вовочка недавно занялся теорией множеств. Сейчас он проходит бинарные отношения. Вы, наверное, слышали термин «отношение эквивалентности». Такие отношения очень важны во многих разделах математики. Например, равенство двух чисел является отношением эквивалентности.

Набор ρ пар (a, b) элементов некоторого множества A называется бинарным отношением на множестве A. Про два элемента a и b множества A говорят, что они находятся в отношении ρ, если пара , в таком случае пишут .

Бинарное отношение является отношением эквивалентности, если:

  1. Оно рефлексивно (для любого a верно );
  2. Оно симметрично (для любых a, b верно, что если , то );
  3. Оно транзитивно (если и , то ).

Вовочка очень даже не дурак и заметил, что первое условие не нужно! Вот его «доказательство»:

Возьмём любые два элемента a и b. Если , то (по свойству (2)), а значит (по свойству (3)).

Все очень просто, не правда ли? Однако, вы заметили, что «доказательство» Вовочки неверно, и решили предъявить ему множество примеров, доказывающих его неправоту.

Вот ваше задание: посчитайте количество бинарных отношений над множеством размера n таких, что они симметричны, транзитивны, но не являются отношениями эквивалентности (то есть не являются рефлексивными).

Так как их количество может быть очень большим (а не 0, как считает Вовочка), выведите остаток от деления их количества на 109 + 7.

Входные данные

В единственной строке находится одно целое число n (1 ≤ n ≤ 4000).

Выходные данные

В единственной строке выведите ответ на задачу по модулю 109 + 7.

Примечание

При n = 1 есть только одно такое отношение — пустое, т.е. . Иными словами, для единственного элемента x множества A выполнено .

При n = 2 таких отношений уже три. Пусть множество A состоит из двух элементов x и y. Тогда подходящими элементами являются , ρ = {(x, x)}, ρ = {(y, y)}. Нетрудно видеть, что три перечисленных бинарных отношения являются симметричными и транзитивными отношениями, но не являются отношениями эквивалентности.

E. Наибольшая возрастающая подпоследовательность

дп Структуры данных *3000

Обратите внимание на то, что ограничение по памяти в этой задаче меньше обычного

Рассмотрим массив, состоящий из целых положительных чисел, на некоторых местах которого находятся пропуски.

Имеется набор чисел, которые можно использовать для заполнения пропусков. Каждое число из данного набора может быть использовано максимум один раз.

Требуется определить такой способ заполнения пропусков, в котором наибольшая возрастающая подпоследовательность в образованном массиве имеет максимально возможный размер.

Входные данные

В первой строке находится одно целое число n — длина массива (1 ≤ n ≤ 105).

Во второй строке находятся n целых чисел, разделённых пробелами — элементы последовательности. Пропуск обозначается как "-1". Элементы, не являющиеся пропусками, — положительные целые числа, не превосходящие 109. Гарантируется, что последовательность содержит k ≤ 1000 пропусков.

В третьей строке находится одно положительное целое число m — количество элементов для заполнения пропусков (0 ≤ k ≤ m ≤ 105).

В четвертой строке находятся m целых положительных чисел — числа для заполнения пропусков. Каждое число — положительное целое, не превосходящее 109. Среди них могут быть совпадающие.

Выходные данные

Выведите n чисел в одной строке через пробел — полученную последовательность. Если возможных ответов несколько, выведите любой из них.

Примечание

В первом примере пропусков нет, поэтому правильный ответ — исходная последовательность.

Во втором примере есть только один способ получить возрастающую подпоследовательность длины 3.

В третьем примере ответ "4 2" тоже был бы верным. Обратите внимание, что рассматриваются только строго возрастающие подпоследовательности.

В пятом примере ответ "1 1 1 2" верным не является, так как число 1 можно использовать на замену только два раза.

D. Путешествие

дп математика *2500

Кролик Стьюи исследует новую параллельную вселенную. Эта двухмерная вселенная имеет форму прямоугольной сетки, содержащей n строк и m столбцов. Вселенная очень маленькая: в одной ячейке сетки может находится только одна частица. В этой вселенной каждая частица либо статическая, либо динамическая. Всякая статическая частица постоянно находится на одной и той же позиции. Из-за непонятных законов гравитационных искривлений в двухмерной вселенной никакие две статические частицы не могут быть в одном столбце или одной строке, а также не могут находиться в соседних по диагонали ячейках. Динамическая частица появляется в случайной пустой ячейке, случайным образом выбирает ячейку назначения (ячейка назначения может совпадать с начальной, см. примеры), и двигается в неё по кратчайшему пути по незанятым статическими частицами ячейкам. Все пустые ячейки имеют одинаковую вероятность быть выбранными в качестве начала или конца пути. После достижения пункта назначения частица исчезает. В один момент времени может быть только одна динамическая частица. Эта частица может перемещаться между ячейками, если те имеют смежную сторону, и это перемещение занимает ровно одну галактическую секунду. Стьюи стало интересно, какова средняя продолжительность жизни одной частицы в данной вселенной.

Входные данные

Первая строка содержит два целых числа, разделенные пробелами: n, m (2 ≤ n, m ≤ 1000) — размеры вселенной. Следующие n строк по m символов каждая описывают вселенную без динамических частиц — j-ый символ i-ой строки равен 'X' если ячейка занята статической частицей, или '.' если пустая. Гарантируется что описанная вселенная удовлетворяет свойствам, описанным выше, то есть никакие две статические частицы не могут быть в одном столбце или одной строке, а также не могут находиться в соседних по диагонали ячейках.

Выходные данные

Требуется вывести в единственной строке одно число — среднюю длительность жизни одной частицы с точностью хотя бы 6 знаков после запятой.

Ответ будет засчитан, если он отличается от правильного не более чем на 10 - 6 относительной или абсолютной погрешности.

E. Свинка и палиндромы

дп Комбинаторика *2300

Свинка Пеппа во время прогулки попала в лес. По странному совпадению лес имеет форму прямоугольника, состоящего из n строк и m столбцов. Занумеруем строки прямоугольника сверху вниз числами от 1 до n, а столбцы — слева направо числами от 1 до m. Будем обозначать клетку на пересечении r-й строки и c-го столбца как (r, c).

Исходно свинка стоит в клетке (1, 1), а в конце она хочет оказаться в клетке (n, m). Так как свинка торопится домой, из клетки (r, c) она может перейти только в клетку (r + 1, c) либо (r, c + 1), при этом выходить за пределы леса она не может.

Лес, в котором оказалась свинка, очень необычный. Некоторые клетки леса похожи между собой, а некоторые выглядят совершенно по-разному. Пеппа любит фотографировать и на каждом шагу делает фотографию клетки, в которой она сейчас находится. Путь по лесу считается красивым, если фотографии, полученные на её пути, можно рассматривать как в прямом, так и в обратном порядке, будет получаться одна и та же последовательность фотографий. Более формально, строка, образованная клетками в порядке посещения, должна являться палиндромом (формальное определение палиндрома можете прочитать в условии предыдущей задачи).

Посчитайте количество красивых путей из клетки (1, 1) в клетку (n, m). Так как это число может быть очень большим, определите остаток от деления его на 109 + 7.

Входные данные

В первой строке находятся два целых числа n, m (1 ≤ n, m ≤ 500) — высота и ширина поля.

В следующих n строках находится по m строчных английских букв, обозначающих виды клеток леса. Одинаковым клеткам соответствуют одинаковые буквы, разным — разные.

Выходные данные

Выведите одно целое число — количество красивых путей по модулю 109 + 7.

Примечание

Пояснение к первому тесту из условия.

B. Минимизация

дп жадные алгоритмы сортировки *2000

Дан массив A, состоящий из n целых чисел, и целое положительное число k. Массив A проиндексирован целыми числами от 1 до n.

Требуется переставить элементы массива таким образом, чтобы величина

стала минимально возможной. В частности, разрешается не переставлять элементы массива вовсе.
Входные данные

В первой строке заданы два целых числа n, k (2 ≤ n ≤ 3·105, 1 ≤ k ≤ min(5000, n - 1)).

Во второй строке следуют n целых чисел A[1], A[2], ..., A[n] ( - 109 ≤ A[i] ≤ 109), разделенных пробелами — элементы массива A.

Выходные данные

Выведите минимальное возможное значение суммы, описанной в условии задачи.

Примечание

В первом тесте одна из оптимальных перестановок имеет вид 1 4 2.

Во втором тесте исходная перестановка является оптимальной.

В третьем тесте одна из оптимальных перестановок имеет вид 2 3 4 4 3 5.

B. Мишка и кубики

Бинарный поиск дп математика Структуры данных *1600

Лимак — маленький мишка, который любит играть. Он строит башенки из кубиков, а потом рушит их.

Он возвёл n башен, расположенных в ряд, i-я башня сделана из hi одинаковых кубиков. (смотрите иллюстрацию к первому примеру).

Лимак повторит следующую операцию, пока конструкция не разрушится целиком.

Кубик называется внутренним, если у него есть все четыре соседа, то есть если каждая его сторона (левая, правая, верхняя или нижняя) примыкает к другому кубику или к полу. В противном случае, кубик считается граничным. За одну операцию Лимак одновременно разрушает все граничные кубики.

Лимак готов начинать. Ваша задача — посчитать, сколько операций ему будет нужно, чтобы уничтожить все кубики.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 105).

Во второй строке записано n целых чисел через пробел h1, h2, ..., hn (1 ≤ hi ≤ 109) — размеры башен.

Выходные данные

Выведите количество операций, необходимых для уничтожения всех башен.

Примечание

Приведенная ниже иллюстрация показывает все три операции для первого теста. Каждый раз граничные кубики окрашены красным.

После первой операции остается четыре кубика, а после второй операции остается только один. Этот последний кубик уничтожается в третьей операции.

D. Мишка и кавалерия

дп разделяй и властвуй Структуры данных *3000

Вы бы хотели поучаствовать в конном сражении с мишками? Я — не очень.

Лимак — мишка гризли. Он генерал ужасной армии Мишляндии. Как вы знаете, самая важная часть армии — это, конечно, кавалерия.

Кавалерия Мишляндии состоит из n воинов и n лошадей. У i-го воина сила равна wi, а у i-й лошади сила равна hi. Воин со своей лошадью называется юнитом. Сила юнита равна произведению сил воина и лошади. Общая сила кавалерии равна сумме сил всех n юнитов. Правильное распределение воинов и лошадей делает кавалерию по-настоящему мощной.

Изначально i-му воину принадлежит i-я лошадь. Вам дано q запросов. После каждого запроса два воина меняются друг с другом лошадьми.

Генерал Лимак должен быть готов к любой возможной ситуации. Что, если бы воинам было запрещено скакать на своих лошадях? Поэтому после каждого запроса вам требуется найти максимальную возможную силу кавалерии, если мы рассматриваем только такие сопоставления воинов лошадям, что ни одному воину не достается его собственная лошадь (можно доказать, что для n ≥ 2 всегда есть не менее одного корректного распределения).

Входные данные

В первой строке содержатся два целых числа через пробел, n и q (2 ≤ n ≤ 30 000, 1 ≤ q ≤ 10 000).

Во второй строке содержится n целых чисел через пробел, w1, w2, ..., wn (1 ≤ wi ≤ 106) — силы воинов.

В третьей строке содержится n целых чисел через пробел, h1, h2, ..., hn (1 ≤ hi ≤ 106) — силы лошадей.

Следующие q строк описывают запросы. i-я из них содержит два целых числа через пробел, ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi), индексы воинов, которые меняются лошадьми друг с другом.

Выходные данные

Выведите q строк с ответами на запросы. В i-й строке выведите максимальную возможную силу кавалерии после первых i запросов.

Примечание

Разъяснения к первому примеру:

Воины:    1 10 100 1000

Лошади:   3  7  2    5 

После первого запроса ситуация выглядит следующим образом:

Воины:    1 10 100 1000

Лошади:   3  5  2    7 

Мы можем получить 1·2 + 10·3 + 100·7 + 1000·5 = 5732 (обратите внимание, что ни один всадник не сядет на свою собственную лошадь в таком случае).

После второго запроса мы вернемся к изначальной ситуации и оптимальное распределение таково: 1·2 + 10·3 + 100·5 + 1000·7 = 7532.

Разъяснение ко второму примеру. После первого запроса:

Воины:   7 11 5

Кони:    2  3 1

Оптимальное распределение — 7·1 + 11·2 + 5·3 = 44.

После второго запроса — 7·3 + 11·2 + 5·1 = 48.

В конце — 7·2 + 11·3 + 5·1 = 52.

F. Лампо

дп жадные алгоритмы *2100

Бананистан — прекрасная банановая республика. Прекрасные женщины в прекрасных платьях. Прекрасные статуи прекрасных воевод. Прекрасные звезды прекрасными ночами.

Народ в Бананистане любит играть в одну чудаковатую игру — Лампо. Дан массив лампочек, у игрока есть позиция напротив одной из этих лампочек. Расстояние между соседними лампочками равно 1. На каждом ходу игрок может переместиться в любую позицию, получив за это |posnew - posold| очков штрафа. После этого загорается некоторое множество подряд идущих лампочек, а игрок получает штраф, равный расстоянию до ближайшей горящей лампочки. Затем все лампочки выключаются. Задача — минимизировать общий штраф, полученный во время игры. Уверяю вас, бананистанцы ночи напролет играют в лампочки.

Приближается день банана и Вас наняли, чтобы сыграть самую прекрасную партию в Лампо в истории. Уже установили гигантский массив лампочек, вы знаете свое начальное положение и какие лампочки будут загораться на каждом ходу. Вам надо сыграть идеальную игру и впечатлить бананистанцев и их родных.

Входные данные

В первой строке записано количество ходов n и начальное положение x. В следующих n строках записано два числа, lstart and lend, обозначающие, что все лампочки в диапазоне [lstart, lend] будут гореть на этом ходу.

  • 1 ≤ n ≤ 5000
  • 1 ≤ x ≤ 109
  • 1 ≤ lstart ≤ lend ≤ 109
Выходные данные

В выходе должно быть записано единственное число, обозначающее лучший результат (минимальный штраф), который можно получить, играя в Лампо.

Примечание

До 1-го хода перейдите в положение 5.

До 2-го хода перейдите в положение 9.

До 5-го хода перейдите в положение 8.

H. Боты

дп Комбинаторика математика теория чисел *1800

Саша и Ира — лучшие друзья. Они не просто друзья — они разработчики ПО и эксперты по искусственному интеллекту. Они разрабатывают алгоритм для двух ботов, играющих в игру для двух игроков. За каждый ход, один из игроков совершает ход (неважно, какой игрок, возможно, игроки делают ходы не по очереди).

Алгоритм для ботов, разработанный Сашей и Ирой, работает за счет отслеживания состояния, в котором находится игра. Каждый раз, когда любой бот делает ход, состояние меняется. А так как игра очень динамичная, она никогда не вернется в то состояние, в котором она была на каком-либо этапе в прошлом.

Саша и Ира — перфекционисты и они хотят, чтобы у их алгоритма была оптимальная выигрышная стратегия. Они заметили, что в оптимальной выигрышной стратегии оба бота делают ровно по N ходов каждый. Но для того, чтобы найти оптимальную стратегию, их алгоритму надо проанализировать все возможные состояния этой игры (они ещё не изучили альфа-бета отсечение) и выбрать лучшую последовательность ходов.

Они беспокоятся насчет эффективности их алгоритма и им интересно, какое общее количество состояний в игре, которое необходимо проанализировать?

Входные данные

В первой и единственной строке записано целое число N.

  • 1 ≤ N ≤ 106
Выходные данные

Вывод должен содержать единственное целое число – количество возможных состояний по модулю 109 + 7.

Примечание

Начало: Игра в состоянии A.

  • Ход 1: Любой бот может ходить (первый бот красный, а второй бот синий), так что есть два возможных состояния после первого хода – B и C.
  • Ход 2: В обоих состояниях, B и C, любой бот может снова сделать ход, так что список возможных состояний расширяется и включает в себя D, E, F и G.
  • Ход 3: Красный бот уже совершил N=2 движений в состоянии D, так что отсюда он больше не может делать ходов. Он может совершать ходы в состояниях E, F и G, так что состояния I, K и M добавляются в список. Аналогичным образом, синий бот не может совершать ходы в состоянии G, но может в D, E и F, так что добавляются состояния H, J и L.
  • Ход 4: Красный бот точка уже совершил N=2 шага в состояниях H, I и K, он может двигаться только в J, L и M, так что добавляются состояния P, R и S. Синий бот не может двигаться в состояниях J, L и M, а только в H, I и K, так что добавляются состояния N, O и Q.

Всего образуется 19 различных состояний игры, необходимых в анализе алгоритма.

D. Авиаперелеты для постоянных клиентов

дп матрицы *2700

В стране имеется ровно n городов, пронумерованные натуральными числами от 1 до n. В каждом городе находится аэропорт.

Также в стране имеется единственная авиакомпания, которая совершает m рейсов. К сожалению, чтобы воспользоваться ими, вам требуется быть постоянным клиентом этой компании, а именно, вы имеете возможность пользоваться рейсом номер i из города ai в город bi только в том случае, если вы уже совершили не менее di перелетов с использованием рейсов авиакомпании.

Обратите внимание, что рейс с номером i летит именно из города ai в город bi. Им нельзя воспользоваться, чтобы прилететь из города bi в город ai. Интересная особенность услуг, предоставляемых авиакомпанией, заключается в том, что бывают развлекательные полеты с прекрасным видом на небо, которые начинаются и заканчиваются в одном и том же городе.

Вам необходимо попасть из города 1 в город n. К сожалению, до этого вы никогда не путешествовали самолетом. Какое минимальное число перелетов вам потребуется, чтобы осуществить это путешествие?

Обратите внимание, что одним и тем же рейсом можно летать несколько раз.

Входные данные

В первой строке даны два целых числа n и m (2 ≤ n ≤ 150, 1 ≤ m ≤ 150) — число городов в стране и число авиарейсов, которые осуществляет авиакомпания.

В последующих m строках заданы числа ai, bi, di (1 ≤ ai, bi ≤ n, 0 ≤ di ≤ 109), обозначающие рейс номер i из города ai в город bi, на который допускаются только клиенты, совершившие не менее di перелетов.

Выходные данные

Выведите «Impossible» (без кавычек), если невозможно добраться из города 1 в город n услугами данной авиакомпании.

Если же хотя бы один способ существует, выведите одно число — минимальное количество авиаперелетов, которое вам потребуется сделать, чтобы добраться до пункта назначения.

B. Сумма по модулю

дп Комбинаторика Структуры данных *1900

Дана последовательность чисел a1, a2, ..., an, а также число m.

Проверьте, можно ли выбрать непустую подпоследовательность aij такую, что сумма чисел в этой подпоследовательности делится на m.

Входные данные

В первой строке даны два числа n и m (1 ≤ n ≤ 106, 2 ≤ m ≤ 103) — размер исходной последовательности и число, от деления на которое берётся остаток у суммы.

Во второй строке даны n чисел a1, a2, ..., an (0 ≤ ai ≤ 109).

Выходные данные

В единственной строке выведите «YES» (без кавычек) в случае, если существует требуемая подпоследовательность, либо «NO» (без кавычек), если такой подпоследовательности не существует.

Примечание

В первом тесте из условия можно выбрать числа 2 и 3, сумма которых делится на 5.

Во втором тесте из условия, единственная непустая подпоследовательность чисел — одно число 5. Число 5 не делится на 6, стало быть, искомой подпоследовательности не существует.

В третьем тесте из условия нужно выбрать два числа 3 на концах.

В четвертом тесте из условия можно взять целиком всю последовательность.

D. И снова НОП!

дп жадные алгоритмы *2700

Вам дана строка S длины n, где каждый символ является одной из первых m строчных букв английского алфавита.

Подсчитайте, сколько различных строк T длины n, состоящих из первых m букв английского алфавита существует, таких, что длина НОП (наибольшей общей подпоследовательности) S и T равняется n - 1.

Напомним, что НОП двух строк, S и T — это наибольшая строка C, такая, что C встречается как в S, так и в T как подпоследовательность.

Входные данные

В первой строке записано два числа, n и m, обозначающих длину строки S и количество первых строчных букв английского алфавита, из которых формируется набор символов для строк (1 ≤ n ≤ 100 000, 2 ≤ m ≤ 26).

Во второй строке записана сама строка S.

Выходные данные

Выведите ответ в единственной строке.

Примечание

В первом примере 6 возможных строк T таковы: aab, aac, aba, aca, baa, caa.

Во втором примере 11 возможных строк T таковы: aaa, aac, aba, abb, abc, aca, acb, baa, bab, caa, cab.

В третьем примере единственная возможная строка T такова: b.

E. Выражение

дп *2400

Однажды Вася решал арифметические примеры. Он записал в тетради выражение a + b = c. Когда учитель проверил Васину тетрадь, выяснилось, что этот пример он решил неправильно. Теперь Вася оправдывается, что он просто забыл записать несколько цифр в числах a, b и c, но вспомнить, какие же тогда на самом деле были числа, у него не получается. Помогите Васе — найдите такие числа x, y и z, что:

  • x + y = z,
  • из выражения x + y = z можно вычеркиванием некоторых цифр получить a + b = c,
  • выражение x + y = z должно иметь минимальную длину.
Входные данные

В первой и единственной строке записано выражение a + b = c (1 ≤ a, b, c ≤ 106, a, b и c не содержат лидирующие нули) — выражение, которое было записано у Васи.

Выходные данные

Выведите корректное выражение x + y = z (x, y и z — неотрицательные числа без лидирующих нулей). Выражение a + b = c должно встречаться в x + y = z как подпоследовательность. Выводимое решение должно иметь наименьшее возможное число символов; если же таких решений несколько, можно вывести любое.

A. Кефа и первые шаги

дп Перебор реализация *900

Кефа решил подзаработать денег, занимаясь различной деятельностью в интернете на протяжении ровно n дней. Он знает, что в i-й день (1 ≤ i ≤ n) он заработает ai монет. Кефа любит прогресс, поэтому он хочет узнать длину максимального неубывающего подотрезка в последовательности ai. Напомним, что подотрезок последовательности — это её непрерывный фрагмент. Подотрезок чисел называется неубывающим, если числа в нём следуют в порядке неубывания.

Помогите Кефе справиться с этой задачей!

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 105).

Во второй строке заданы n целых чисел a1,  a2,  ...,  an (1 ≤ ai ≤ 109).

Выходные данные

Выведите единственное целое число — длину максимального неубывающего подотрезка последовательности a.

Примечание

В первом тесте максимальный неубывающий подотрезок это числа с третьего по пятое.

Во втором тесте максимальный неубывающий подотрезок это числа с первого по третье.

D. Кефа и блюда

битмаски дп *1800

Когда Кефа пришел в ресторан и уселся за столик, официант сразу же принес ему меню. Там оказалось целых n блюд. Кефа знает, что ему нужно ровно m порций, чтобы насытиться. Но при этом он не хочет заказывать одно и то же дважды, чтобы попробовать максимальное количество блюд.

Кефа знает, что i-е блюдо поднимет его удовлетворенность на ai. Но некоторые блюда плохо сочетаются друг с другом, а некоторые — наоборот хорошо. Кефа установил себе k правил поедания пищи следующего вида — если блюдо x съесть непосредственно перед блюдом y (т. е. между x и y не должно быть других блюд), то удовлетворенность Кефы увеличится на c.

Конечно же наш попугай хочет получить максимально возможную удовлетворенность от похода в ресторан. Помогите ему в этом непростом деле!

Входные данные

Первая строка входного файла содержит три числа, разделенные пробелами, n, m и k (1 ≤ m ≤ n ≤ 18, 0 ≤ k ≤ n * (n - 1)) — количество блюд в меню, количество порций, которое нужно съесть Кефе, чтобы насытиться, и количество правил поедания пищи.

Во второй строке находятся n чисел ai, разделенные пробелами (0 ≤ ai ≤ 109) — удовлетворенность, получаемая от i-го блюда.

В следующих k строках находятся правила. i-е правило описывается тремя числами xi, yi и ci (1 ≤ xi, yi ≤ n, 0 ≤ ci ≤ 109). Это значит, что если блюдо xi съесть непосредственно перед блюдом yi, то удовлетворенность Кефы увеличится на ci. Гарантируется, что нет таких пар индексов i и j (1 ≤ i < j ≤ k), что xi = xj и yi = yj.

Выходные данные

В единственной строке выходного файла выведите максимальную удовлетворенность, которую Кефа может получить от похода в ресторан.

Примечание

В первом тесте лучше всего съесть сначала второе блюдо, а потом первое. Тогда мы получим по единице удовлетворенности за каждое блюдо и еще единицу за правило.

Во втором тесте подходят последовательности выбора 4 2 1 или 2 1 4. В обоих случаях мы получим удовлетворенность 7 за отдельные блюда, а также, выполнив правило 1, получаем еще дополнительную удовлетворенность 5.

E. Кодзиро и Furrari

дп жадные алгоритмы *2800

На протяжении 10 лет автолюбитель Кодзиро собирал деньги на свою любимую машину марки Furrari. Наконец заветная мечта Кодзиро сбылась! Теперь Кодзиро хочет доехать до своей подруги Йоханны, чтобы похвастаться перед ней своей машиной.

Кодзиро хочет доехать до подруги, поэтому он будет ехать к ней по числовой прямой. Для простоты можно считать, что Кодзиро находится в точке с абсциссой f числовой прямой, а Йоханна — в точке с абсциссой e. В некоторых точках числовой прямой находятся бензозаправки. На каждой бензозаправке заправляют только одним видом топлива: Регуляр-92, Премиум-95 или Супер-98. Таким образом, каждая заправка характеризуется парой целых чисел ti и xi — номером типа бензина и своей позицией.

Одного литра бензина достаточно, чтобы проехать ровно 1 км (эта величина не зависит от типа бензина). Бензины трех видов отличаются лишь качеством, которое по данным исследований влияет на время жизни двигателя автомобиля. Бак Furrari вмещает ровно s литров бензина (независимо от типа бензина). В момент выезда из точки f бак Кодзиро полностью заполнен бензином марки Супер-98. На каждой заправке Кодзиро может заправить бак любым количеством бензина, но, конечно, ни в какой момент времени количество бензина в баке не может стать больше s литров. Обратите внимание, что в баке может одновременно находиться бензин разных типов. Машина может двигаться как влево, так и вправо.

Для продления времени жизни двигателя Кодзиро старается в первую очередь минимизировать количество бензина типа Регуляр-92. Если существует несколько стратегий проехать из f в e, использовав минимальный объем бензина типа Регуляр-92, то надо проехать так, чтобы минимизировать использованный объем бензина Премиум-95.

Напишите программу, которая для m возможных положений старта fi минимизирует объем потраченного бензина типа Регуляр-92 и объем потраченного бензина типа Премиум-95 во вторую очередь.

Входные данные

В первой строке входных данных находятся четыре целых положительных числа e, s, n, m (1 ≤ e, s ≤ 109, 1 ≤ n, m ≤ 2·105) — координата точки, в которой находится Йоханна, размер бака Furrari, количество бензозаправок и количество стартовых точек.

В следующих n строках находится по два целых числа ti, xi (1 ≤ ti ≤ 3,  - 109 ≤ xi ≤ 109), обозначающие тип i-й бензозаправки (1 — для Регуляр-92, 2 — для Премиум-95 и 3 — для Супер-98) и положение на координатной прямой i-й заправки. Заправки следуют в произвольном порядке (не обязательно слева направо).

В последней строке находится m целых чисел fi ( - 109 ≤ fi < e). Стартовые позиции следуют в произвольном порядке (не обязательно слева направо).

Ни в какой точке координатной прямой не находится более одной бензозаправки. Допустимо, что некоторые из точек fi или точка e совпадут с заправкой.

Выходные данные

Выведите ровно m строк. В i-й из них должно находиться два целых числа — минимальное количество бензина типа Регуляр-92 и типа Премиум-95, если Кодзиро стартует в точке fi. В первую очередь необходимо минимизировать первое значение, при разных способах достичь его надо минимизировать второе значение.

Если доехать до Йоханны из точки fi никак не получится, i-я строка должна иметь вид «-1 -1» (две минус единицы без кавычек).

F. Зубликанцы и мумократы

Деревья дп *2400

В Берляндии наступила пора выборов. Фаворитами конечно являются партии зубликанцев и мумократов. Предвыборные кампании обеих партий включают в себя многочисленные митинги на n главных площадях столицы Берляндии. На каждой из n площадей конечно может митинговать только одна партия, иначе это может привести к беспорядкам. С другой стороны обе партии подали заявки на проведение огромного количества митингов так, что на всех площадях обязательно пройдут митинги. Теперь руководству столицы предстоит распределить площади между двумя партиями.

Некоторые пары площадей соединены (n - 1) двусторонними дорогами таким образом, что между любой парой площадей существует единственный способ попасть с одной площади на другую. Некоторые площади находятся на окраинах столицы, поэтому соединены дорогой лишь с одной другой площадью, такие площади называются тупиковыми.

Мэр столицы поручил распределить все площади между партиями таким образом, чтобы в тупиковых площадях было одинаковое количество митингов первой и второй партии. Гарантируется, что количество тупиковых площадей города чётно.

Для предотвращения возможных конфликтов между зубликанцами и мумократам было решено минимизировать количество дорог соединяющих площади с разными партиями. Вам как разработчику отдела распределения площадей предстоит определить это наименьшее количество.

Входные данные

В первой строке входных данных находится целое число n (2 ≤ n ≤ 5000) — количество площадей в столице Берляндии.

В следующих n - 1 строках находятся пары чисел x, y (1 ≤ x, y ≤ n, x ≠ y) — номера площадей, соединенных дорогой. Все площади нумеруются целыми числами от 1 до n. Гарантируется, что количество тупиковых площадей города — четно.

Выходные данные

Выведите единственное число — минимальное количество дорог, соединяющих площади с митингами разных партий.

B. И снова ...

дп Конструктив матрицы *1900

Задан массив целых положительных чисел a1, a2, ..., an × T длины n × T. Известно, что для любого i > n верно, что ai = ai - n. Найдите длину наидлиннейшей неубывающей подпоследовательности заданного массива.

Входные данные

В первой строке записано два целых числа пробел: n, T (1 ≤ n ≤ 100, 1 ≤ T ≤ 107). Во второй строке записано n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 300).

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

Массив, представленный в примере, имеет вид 3, 1, 4, 2, 3, 1, 4, 2, 3, 1, 4, 2. Выделенные элементы образуют наибольшую неубывающую подпоследовательность.

D. Количество биномиальных коэффициентов

дп математика теория чисел *3300

Для заданного простого целого числа p и целых α, A посчитайте количество пар целых чисел (n, k) таких, что 0 ≤ k ≤ n ≤ A и делится на pα.

Поскольку ответ может быть очень большим, выведите его остаток от деления на 109 + 7.

Напомним, что — это количество сочетаний размера k из n предметов.

Входные данные

В первой строке содержатся два целых числа p и α (1 ≤ p, α ≤ 109, p — простое).

Во второй строке содержится десятичная запись целого числа A (0 ≤ A < 101000) без ведущих нулей.

Выходные данные

В единственной строке выведите ответ на задачу.

Примечание

В первом примере три биномиальных коэффициента, делящихся на 4, это , и .

E. Булева функция

битмаски дп Разбор выражений *3000

В данной задаче рассматриваются булевы функции от четырех переменных A, B, С, D. Переменные A, B, C и D являются логическими и могут принимать значения 0 или 1. Будем задавать функцию с помощью следующей грамматики:

<выражение> ::= <переменная> | (<выражение>) <оператор> (<выражение>)

<переменная> ::= 'A' | 'B' | 'C' | 'D' | 'a' | 'b' | 'c' | 'd'

<оператор> ::= '&' | '|'

Здесь заглавными буквами A, B, C, D обозначаются переменные, а строчными — их отрицания. Например, если A = 1, то символу 'A' соответствует значение 1, а символу 'a' — значение 0. Символ '&' здесь соответствует операции логического И, символ '|' — операции логического ИЛИ.

Вам дано выражение s, задающее функцию f, в котором некоторые операторы и переменные пропущены. Так же вам известны значения функции f(A, B, C, D) для некоторых n различных наборов значений переменных. Посчитайте количество способов восстановить пропущенные в выражении элементы так, чтобы получившееся выражение соответствовало известной информации о функии f в заданных наборах переменных. Так как величина результата может быть большой, выведите её остаток от деления на 109 + 7.

Входные данные

В первой строке содержится выражение s (1 ≤ |s| ≤ 500), в котором некоторые символы операторов и/или переменных заменены знаком '?'.

Во второй строке содержится число n (0 ≤ n ≤ 24) — количество наборов переменных, для которых известно значение функции f(A, B, C, D). В следующих n строках содержатся описания наборов: в i-й из них содержатся пять целых чисел ai, bi, ci, di, ei (0 ≤ ai, bi, ci, di, ei ≤ 1), разделенных пробелами и означающих, что f(ai, bi, ci, di) = ei.

Гарантируется, что все четверки (ai, bi, ci, di) различны.

Выходные данные

В единственной строке выведите ответ на задачу.

Примечание

В первом примере двумя подходящими выражением являются 'C' и 'd'.

Во втором примере выражения выглядят так: '(A)&(a)', '(A)&(b)', '(A)&(C)', '(A)&(D)'.

F. Знаки числа Пи

дп реализация Строки *3200

Василий совсем недавно узнал об удивительных свойствах числа π. В одной из статей, которые он прочитал, была высказана гипотеза, что, какую бы последовательность цифр мы не взяли, рано или поздно эта последовательность встретится среди знаков числа π. Таким образом, если взять, например, роман «Война и мир», и закодировать его произвольным образом с помощью цифр, то мы обязательно найдем роман среди знаков числа π.

Василий был просто восхищен этим, поскольку это означает, что все книги, песни и программы уже написаны и зашифрованы в знаках числа π. Василия, конечно, немного насторожило то, что это только гипотеза, поэтому он решил проверить ее самостоятельно.

Для этого Василий скачал из интернета архив с последовательностью знаков числа π с некоторой позиции, и стал проверять разные строки из цифр на наличие в скачанном архиве. Короткие строки цифр Василий находил быстро, но когда он брал длинные строчки, оказывалось, что их в архиве нет. Василий решил взять за определение, что строка длины d встречается наполовину, если в ней есть подстрока длины хотя бы , которая есть в архиве.

Для полноты картины Василий взял 2 больших числа x, y (x ≤ y), имеющих одинаковое количество цифр в десятичной записи, и теперь хочет найти количество чисел, находящихся в отрезке от x до y, которые встречаются в архиве наполовину. Помогите Василию вычислить остаток от деления этого значения на 109 + 7.

Входные данные

В первой строке находится последовательность цифр s (1 ≤ |s| ≤ 1000), в которой Василий собирается искать числа. Согласно гипотезе, такая последовательность цифр на самом деле встречается в десятичной записи числа π, однако мы не можем этого гарантировать.

Во второй и третьей строках находятся два положительных целых числа x, y одинаковой длины d (x ≤ y, 2 ≤ d ≤ 50). Числа x, y не содержат лидирующих нулей.

Выходные данные

Выведите количество чисел в отрезке от x до y, встречающихся наполовину в s, по модулю 109 + 7.

B. Duff на пляже

дп *2100

Отдыхая на пляже, Duff случайно нашла странный массив b0, b1, ..., bl - 1, состоящий из l положительных целых чисел. Этот массив был странный, потому что он был необычайно длинным, но зато известно, что существует ещё один массив (возможно, короче), a0, ..., an - 1, такой что b построен из a по фомуле: bi = ai mod n, где a mod b обозначает остаток деления a на b.

Duff очень хочется узнать число подпоследовательностей b, обладающих следующими свойствами. Пусть bi1, bi2, ..., bix (0 ≤ i1 < i2 < ... < ix < l) — подпоследовательность. Должны быть выполнены следующие свойства:

  • 1 ≤ x ≤ k
  • Для каждого 1 ≤ j ≤ x - 1,
  • Для каждого 1 ≤ j ≤ x - 1, bij ≤ bij + 1, то есть эта последовательность неубывающая.

Так как это число может быть достаточно большим, девушке хочется узнать его остаток от деления на 109 + 7.

Duff не программист, а Malek сейчас недоступен. Итак, она попросила Вашей помощи. Пожалуйста, назовите ей это число.

Входные данные

В первой строке ввода записано три целых числа, n, l и k (1 ≤ n, k, n × k ≤ 106 and 1 ≤ l ≤ 1018).

Во второй строке записано n целых чисел через пробел, a0, a1, ..., an - 1 (1 ≤ ai ≤ 109 для каждого 0 ≤ i ≤ n - 1).

Выходные данные

Выведите ответ по модулю 1 000 000 007.

Примечание

В первом тесте . Таким образом, все такие последовательности: , , , , , , , , and .

D. Сверхсекретное задание

дп *2300

В сверхсекретную военную часть под командованием полковника Зуева скоро приедет комиссия из министерства обороны. Согласно уставу, в каждой сверхсекретной военной части должна быть сверхсекретная рота, которая должна заниматься... а чем именно — не скажем, на то она и сверхсекретная. Проблема заключается в том, что в части Зуева такой роты почему-то нет.

Полковник решил разобраться с этой проблемой незамедлительно и приказал построить на плацу в одну шеренгу всех n солдат вверенной ему части. Известно, что болтливость i-го слева солдата равна qi. Зуев хочет, чтобы сверхсекретная рота состояла из k первых солдат шеренги, а их суммарная болтливость была как можно меньше (чтобы рота оставалсь сверхсекретной). Для этого он собирается не более s раз поменять местами двух соседних солдат. Заметим, что любой солдат может участовать в таком обмене позициями сколько угодно раз. Задача оказалась нетривиальной, и полковник Зуев обратился к вам за помощью. Определите, какую минимальную суммарную болтливость первых k солдат шеренги можно достичь, если провести не более s операций обмена соседних солдат.

Входные данные

В первой строке входных данных записаны три целых положительных числа n, k, s (1 ≤ k ≤ n ≤ 150, 1 ≤ s ≤ 109) — количество построенных в шеренгу солдат, предполагаемый размер сверхсекретной роты и максимальное возможное количество операций обмена соседних солдат соответственно.

Во второй строке входных данных записано n целых чисел qi (1 ≤ qi ≤ 106) — значения болтливости солдат в порядке следования солдат в шеренге.

Выходные данные

Выведите единственное целое число — минимальную возможную суммарную болтливость сверхсекретной роты.

Примечание

В первом примере полковнику достаточно поменять местами второго и третьего солдата и не использовать второй обмен. Итоговое положение солдат: (2, 1, 4). Минимальная возможная суммарная болтливость сверхсекретной роты равна 3.

Во втором примере полковник будет производить обмены в следующей последовательности :

  1. (10, 1, 62, 5)
  2. (10, 1, 2, 65)

Итоговое положение солдат (10, 1, 2, 5, 6).

Минимальная суммарная болтливость роты равна 18.

D. Супер М

графы Деревья дп поиск в глубину и подобное *2200

На самом деле Ари — не совсем обычное чудовище. Она представляет собой скрытую личность Супер М, одного из главных супергероев Байтфорсес. Байтфорсес — это страна, состоящая из n городов, соединенных n - 1 дорогами. Каждая дорога соединяет ровно два различных города, и вся дорожная система разработана так, что можно добраться от любого города до любого другого города, используя только данные дороги.

На m городов напали злые люди. И вот, Ари... то есть, Супер М должен немедленно направиться в каждый из атакуемых городов, чтобы прогнать злых людей. Супер М может перемещаться между городами только используя данные дороги. Более того, перемещение по любой из дорог занимает у неё ровно один крон (единица времени, используемая в Байтфорсес).

Однако, сейчас Супер М не в Байтфорсес — она посещает тренировочный лагерь, расположенный в близлежащей стране Кодфорсес. К счастью, в Кодфорсес есть особый прибор, позволяющий мгновенно телепортировать девушку из Кодфорсес в любой город Байтфорсес. Обратный путь слишком долог, так что в рамках данной задачи телепортация используется ровно один раз.

Вам следует помочь Супер М и вычислить город, в который она должна телепортироваться в начале, чтобы завершить свою работу за минимальное время (измеряемое в кронах). Также сообщите ей это время, чтобы она могла распланировать дорогу обратно в Кодфорсес.

Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ m ≤ n ≤ 123456) — количество городов в Байтфорсес, и количество атакуемых городов, соответственно.

Далее следует n - 1 строка, описывающая систему дорог. Каждая строка состоит из двух номеров городов ui и vi (1 ≤ ui, vi ≤ n) — концы очередной дороги.

Последняя строка содержит m различных целых чисел — номера атакуемых городов. Эти числа даны в произвольном порядке.

Выходные данные

Сперва выведите номер города, куда надо телепортироваться Супер М. Если оптимальных ответов несколько, выведите город с наименьшим номером.

Затем выведите наименьшее возможное время, необходимое для того, чтобы распугать всех людей в атакуемых городах, измеренное в кронах.

Обратите внимание, что правильный ответ всегда единственен.

Примечание

В первом примере есть две возможности завершить работу Супер М за 3 крона:

and .

Однако вам следует выбрать первый вариант, так как он начинается в городе с меньшим номером.

E. Странные вычисления и кошки

дп матрицы *2400

Мир Гоши является таблицей, состоящей из n строк и m столбцов. И строки и столбцы нумеруются последовательными целыми числами, начиная с единицы. Будем обозначать как (r, c) клетку, расположенную в строке с номером r и столбце с номером c.

Гошу часто зовут в гости. Каждый раз, когда его зовут он сначала считает количество способов дойти до того места и лишь потом идет. Дом Гоши расположен в клетке (1, 1).

В каждый момент времени Гоша переходит из текущей клетки в клетку соседнюю с ней по ребру, если такая клетка конечно существует, то есть Гоша не выйдет за границы таблички. Таким образом, из клетки (r, c) совершается ход в одну из клеток (r - 1, c), (r, c - 1), (r + 1, c), (r, c + 1). Гоша может пропустить перемещение и остаться в текущей клетке.

Помимо любви к странным вычислениям, Гоша страдает аллергией на кошек, поэтому никогда не пойдёт в клетку, в которой сидит кошка. Гоша знает, в какое время его позовут в гости, и расписание перемещения котов по таблице. У него есть q записей, i-я из которых выглядит одним из следующих способов:

  • 1, xi, yi, ti — Гошу зовут в гости в клетку (xi, yi) к моменту времени ti. Гарантируется, что в клетке (xi, yi) нет в этот момент кошки.
  • 2, xi, yi, ti — в момент времени ti в клетке (xi, yi) появляется кошка. Гарантируется, что в клетке (xi, yi) в этот момент не сидит другая кошка.
  • 3, xi, yi, ti — в момент времени ti из клетки (xi, yi) уходит кошка. Гарантируется, что в этот момент в клетке (xi, yi) сидит кошка.
Гоша планирует воспользоваться только одним приглашением в гости, но пока не решил каким именно, поэтому просит вас вычислить для каждого из приглашений количество способов дойти в нужную клетку к нужному моменту времени, если он начнёт идти из клетки (1, 1) в момент времени один.

На перемещение между двумя соседними клетками у Гоши уходит ровно один момент времени. В частности это означает, что Гоша может прийти в клетку, только если сидящий в ней кот уходит в момент, предшествующий тому, когда Гоша начинает своё движение из соседней клетки, и если ни один кот не придёт в клетку в момент времени, когда в ней окажется Гоша.

Два способа дойти из клетки (1, 1) до клетки (x, y) в момент времени t считаются различными, если хотя бы для одного момента времени от единицы до t позиции Гоши в этот момент отличаются в двух способах. Обратите внимание, что во время данного путешествия Гоша может заходить как в клетку (1, 1) так и в клетку (x, y) произвольное количество раз. Так как число способов может быть довольно большое, выведите его по модулю 109 + 7

Входные данные

В первой строке входных данных записаны три целых положительных числа n, m и q (1 ≤ n·m ≤ 20, 1 ≤ q ≤ 10 000) — количество строк и столбцов в таблице, а так же количество событий соответственно.

Следующие q строк описывают события, каждое описание содержит четыре целых числа tpi, xi, yi и ti (1 ≤ tp ≤ 3, 1 ≤ x ≤ n, 1 ≤ y ≤ m, 2 ≤ t ≤ 109) — тип события (1 когда Гошу зовут в гости, 2 когда появляется кошка и 3 когда кошка уходит), координаты клетки, с которой происходит действие, момент времени, в которое происходит действие соответственно.

Гарантируется, что запросы даны в хронологическом порядке, то есть ti < ti + 1.

Выходные данные

Для каждого приглашения в гости i (то есть tpi = 1) выведите количество способов попасть в клетку клетку (xi, yi) в момент времени ti. Отвечайте на приглашения в хронологическом порядке, то есть в порядке их следования во входном файле.

Примечание

Пояснение к первому примеру. В каждой картинке указано количество способов прийти в клетку в соответствующий момент времени. (X обозначает заблокированную клетку в этот момент)

Момент времени 1.
Момент времени 2.
Момент времени 3.
Момент времени 4.
Момент времени 5.
Момент времени 6.
Момент времени 7.

D. Вилбур и деревья

дп математика сортировки Теория вероятностей *2300

Свинка по имени Вилбур всегда хотел быть бобром, так что сегодня он решил притвориться бобром и грызть деревья, чтобы повалить их.

Имеется n деревьев, расположенных вдоль прямой. Дерево номер i расположено в позиции xi, при этом все позиции деревьев различны.

Все деревья обладают одинаковой высотой, равной h. Когда Вилбур прогрызает какое-либо дерево, оно падает налево с вероятностью p или направо с вероятностью 1 - p. Если, падая, дерево задевает другое дерево, то задетое дерево так же начинает падать в этом же направлении. Дерево может задеть другое дерево, только если расстояние между ними строго меньше h.

Рассмотрим следующий пример: имеются четыре дерева с координатами 1, 3, 5 и 8 соответственно, и h = 3. Дерево, стоявшее в позиции 1, падает направо и задевает дерево с координатой 3. То дерево, в свою очередь, также падает и роняет дерево с координатой 5. Расстояние между 5 и 8 равно 3, поэтому последнее дерево не будет задето и останется стоять.

Пока ещё есть стоящие деревья, Вилбур равновероятно выбирает либо самое левое, либо самое правое дерево и роняет его. Если осталось только одно дерево, то Вилбур точно уронит его. Вилбур хочет знать математическое ожидание суммарной длины участков земли, покрытых упавшими деревьями, после того, как не останется ни одного стоящего дерева. Пожалуйста, помогите Вилбуру.

Входные данные

В первой строке входных данных содержатся два целых числа n и h (1 ≤ n ≤ 2000, 1 ≤ h ≤ 108) и вещественное число p (0 ≤ p ≤ 1), записанное с использованием не более чем шести знаков после точки.

В следующей строке содержатся n целых чисел x1, x2, ..., xn ( - 108 ≤ xi ≤ 108), записанных в произвольном порядке.

Выходные данные

Выведите единственное вещественное число — математическое ожидание суммарной длины всех участков земли, покрытых деревьями, когда они все упадут. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

Рассмотрим пример, у нас два дерева с высотой 2.

Есть три варианта развития событий:

1. Оба дерева упадут налево. Либо правое дерево упадет налево первым с вероятностью (при этом повалив левое дерево), либо левое дерево упадет налево и затем правое дерево упадет налево, вероятность этого равна . Общая вероятность равна .

2. Оба дерева упадут направо. Это аналогично (1), так что вероятность такого события равна .

3. Левое дерево упадет налево, а правое дерево упадет направо. Это единственный оставшийся вариант, так что его вероятность должна быть .

В вариантах 1 и 2 всего будет покрыто 3 единичных отрезка земли, а в варианте 3 — 4 единичных отрезка. Следовательно, математическое ожидание равно .

E. Вилбур и строки

графы дп поиск в глубину и подобное Строки *2500

Теперь поросёнок Вилбур хочет поиграть со строками. Он нашёл таблицу размера n на m, состоящую только из цифр от 0 до 9. Ряды нумеруются от 1 до n, а столбцы от 1 до m. Вилбур начинает в какой-то клетке (x, y) и делает следующие ходы. Пусть в клетке (x, y) написана цифра d (0 ≤ d ≤ 9), тогда Вилбур должен сделать ход в ячейку (x + ad, y + bd), если эта ячейка находится внутри таблицы, и остаться на месте в противном случае. Перед совершением очередного хода Вилбур может, если сочтёт нужным, выписать на доску цифру, написанную в текущей клетке. Все выписанные цифры образую строчку, каждая новая цифра приписывает в конец текущей строки.

У Вилбура есть q интересных ему строк. Для каждой строки si, Вилбур хочет узнать, можно ли так выбрать начальную позицию (x, y), что за конечное число ходов Вилбур может в итоге написать на доске строку si.

Входные данные

В первой строке входных данных записано три целых числа n, m, и q (1 ≤ n, m, q ≤ 200) — размеры таблицы и количество строк, которые надо обработать, соответственно.

В следующих n строках содержится по m цифр от 0 до 9 — сама таблица.

Затем следуют 10 строк. В i-й из них содержатся значения ai - 1 и bi - 1 ( - 200 ≤ ai, bi ≤ 200), то есть вектор, на который необходимо сдвинуться, если цифра в текущей ячейке равна i - 1.

Далее следуют q строк. В i-й из них содержится строка si, состоящая только из цифр от 0 до 9. Гарантируется, что суммарная длина данных q строк не превысит 1 000 000.

Выходные данные

Для каждой из q строк выведите "YES", если Вилбур может так выбрать начальную позицию (x, y), чтобы через какое-то конечно число ходов выписать на доску строку si. Если это невозможно, то выведите "NO".

Примечание

В первом примере дана таблица размера 1 на 1, в которой записана единственная цифра 0. Каждым ходом Вилбур будет оставаться в клетке (1, 1). Первую строку можно написать на доске, записывая друг за другом 0. Вторую строку нельзя записать, так как на в таблице нет 2.

B. Ресторан

дп жадные алгоритмы сортировки *1600

Ресторан получил n заказов на проведение банкета. Каждый заказ характеризуется двумя величинами: моментом начала банкета li и моментом конца ri (li ≤ ri).

Руководство ресторана может либо принять заказ, либо отвергнуть его. Какое наибольшее количество заказов может быть принято?

Никакие два принятых заказа не могут пересекаться, то есть не должно существовать момента времени, который принадлежит сразу двум принятым заказам. Если один из заказов начинается в момент, когда заканчивается другой, то они не могут быть приняты вместе.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 5·105) — количество заказов. В каждой из следующих n строк находится пара целых чисел li, ri (1 ≤ li ≤ ri ≤ 109).

Выходные данные

Выведите наибольшее количество заказов, которые могут быть приняты.

C. Подпоследовательности

дп Структуры данных *1900

Вам задана последовательность из n чисел. Найдите количество её возрастающих подпоследовательностей из k + 1 элемента. Гарантируется, что ответ не превосходит величины 8·1018.

Входные данные

В первой строке находятся два целых числа n и k (1 ≤ n ≤ 105, 0 ≤ k ≤ 10) — длина последовательности и количество элементов в возрастающей подпоследовательности. В следующих n строках находится по одному числу ai (1 ≤ ai ≤ n) — элементы последовательности. Все числа в последовательности различны.

Выходные данные

Выведите одно число — ответ на задачу.

E. Плитка шоколада

дп Перебор *2000

У вас есть плитка шоколада, состоящая из n × m долек. Вы хотите съесть ровно k долек, для этого может потребоваться разделить шоколадку на части.

За одно действие можно разломить ровно один цельный прямоугольный кусок шоколада на два прямоугольных куска. Разламывать можно только по линиям, проходящим между дольками: по горизонтали или по вертикали. Стоимость разлома равна квадрату длины разлома.

Например, если сначала у вас была шоколадка из 2 × 3 долек, то за один горизонтальный разлом вы можете получить два цельных куска 1 × 3 (стоимость такого разлома равна 32 = 9), либо вы можете разломить шоколадку по вертикали одним из двух способов и получить два цельных куска 2 × 1, 2 × 2 (стоимость такого разлома равна 22 = 4).

Ваша задача для нескольких значений n, m и k определить, за какую минимальную суммарную стоимость разломов, можно разделить исходную шоколадку на такие прямоугольные куски, что можно выбрать несколько кусков, суммарный размер которых составляет ровно k долек. При этом оставшиеся n·m - k долек не обязательно образуют цельный кусок.

Входные данные

В первой строке находится целое положительное число t (1 ≤ t ≤ 40910) — количество троек n, m и k, для которых нужно решить задачу.

В следующих t строках записаны по три целых числа n, m и k (1 ≤ n, m ≤ 30, 1 ≤ k ≤ min(n·m, 50)) — размеры очередной шоколадки и количество её долек, которые вы хотите съесть.

Выходные данные

Для каждой тройки n, m и k выведите минимальную стоимость, которую необходимо потратить на разламывание шоколадки, чтобы можно было съесть ровно k долек.

Примечание

В первом запросе из примера необходимо сделать два разлома:

  • сначала нужно разбить кусок размера 2 × 2 на два куска размера 2 × 1 (стоимость такого разлома равна 22 = 4),
  • затем нужно один из получившихся кусков размера 2 × 1 разломить на два куска размера 1 × 1 (стоимость такого разлома равна 12 = 1).

Во втором запросе из примера вы хотите съесть 3 дольки. Для этого можно действовать аналогично первому запросу.

E. Сэнди и Орешки

битмаски Деревья дп *2600

Корневым деревом называется связный граф без циклов с выделенной вершиной. В рамках данной задачи будем считать, что корнем дерева всегда является вершина с номером 1.

Наименьшим общим предком вершин u и v называется наиболее удалённая от корня дерева вершина, лежащая как на пути от корня до u, так и на пути от корня до v. Будем обозначать наименьшего общего предка вершин u и v как LCA(u, v).

У белочки Сенди было корневое дерево, состоявшее из n вершин, в которых она хранила свои орешки. К несчастью, подводный шторм разрушил это дерево, и теперь Сенди никак не может его восстановить. Она смогла назвать m рёбер своего дерева и q троек чисел ai, bi и ci, про которые она полагает, что LCA(ai, bi) = ci.

Помогите Сенди посчитать, сколько существует деревьев с корнем в вершине 1, про которые верна вся информация, названная Сенди. Если же она что-то напутала, и таких деревьев не существует, то выведите 0. Два корневых дерева считаются различными, если существует хотя бы одно ребро, принадлежащее одному из этих деревьев и не принадлежащее другому.

Входные данные

В первой строке входных данных записаны три целых числа n, m и q (1 ≤ n ≤ 13, 0 ≤ m < n, 0 ≤ q ≤ 100) — количество вершин в дереве, а также количество рёбер и троек LCA, которые смогла вспомнить Сенди, соответственно.

Следующие m строк содержат по два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) — номера вершин, соединённых i-м ребром. Гарантируется, что существует хотя бы одно дерево, такое что, удалив некоторые его рёбра, можно получить данные m рёбер.

Последние q строк содержат тройки чисел ai, bi, ci (1 ≤ ai, bi, ci ≤ n). Для каждой тройки Сенди полагает, что в исходном дереве было верно LCA(ai, bi) = ci. Существование дерева с данными значениями LCA не гарантируется.

Выходные данные

Выведите количество деревьев размера n с корнем в вершине 1, таких что для них верна вся информация, которую помнит Сенди.

Примечание

Во втором примере правильный ответ выглядит так:

В третьем примере возможны два правильных ответа:

В четвёртом примере несложно заметить, что информация, предоставленная Сенди, противоречива.

D. Ящерицы и подвалы 2

дп Перебор *2600

Это упрощенная версия задачи, использованной на соревновании. Оригинальная формулировка предполагает слишком сложное решение, поэтому в этой задаче были уменьшены ограничения.

Поликарп очень любит играть в компьютерную ролевую игру «Ящерицы и подвалы». В настоящий момент он проходит ее за мага. На одном из последних уровней он противостоит шеренге лучников. Единственное заклинание, которым он может их поражать — это, конечно, огненный шар. Если Поликарп попадает огненным шаром в лучника с номером i (пусть они пронумерованы слева направо), то с него снимается a единиц жизненной силы. При этом заклинание поражает и соседних с i лучников (если они есть) — с них снимается по b (1 ≤ b < a ≤ 10) единиц жизненной силы.

Так как крайние лучники (т.е. те, что имеют номера 1 и n) находятся очень далеко, то до них огненный шар долететь не может. В любого другого лучника Поликарп может попасть огненным шаром.

Для каждого лучника известно количество единиц его жизненной силы. Лучник будет убит, когда это значение опустится ниже 0. Какое наименьшее количество заклинаний может использовать Поликарп, чтобы убить всех противников.

Поликарп может стрелять в лучника, даже если тот уже убит.

Входные данные

В первой строке записано три целых числа n, a, b (3 ≤ n ≤ 10; 1 ≤ b < a ≤ 10). Вторая строка содержит последовательность n целых чисел — h1, h2, ..., hn (1 ≤ hi ≤ 15), его hi обозначает количество единиц жизненной силы i-го лучника.

Выходные данные

В первую строку выведите t — искомое минимальное количество огненных шаров.

Во вторую строку выведите t чисел — номера лучников, в которые должен попадать Поликарп, чтобы убить всех лучников за t заклинаний. Все выводимые номера должны находиться в отрезке от 2 до n - 1. Числа разделяйте пробелами. Если решений несколько, выведите любое. Числа выводите в любом порядке.

C. Клеофас и n-тлон

дп математика Теория вероятностей *2300

Клеофас участвует в n-тлоне — турнире, состоящим из n различных соревнований по n различным дисциплинам (пронумерованным от 1 до n). В n-тлоне m участников, и каждый из них участвует во всех соревнованиях.

По итогам каждого из n соревнований участникам присваиваются ранги от 1 до m таким образом, что никаким двум участникам не даётся одинаковый ранг, то есть ранги в каждом соревновании формируют перестановку чисел от 1 до m. Результат участника на соревновании равняется его/её рангу в нём, при этом чем хуже выступил участник, тем выше это значение.

Общий результат каждого участника высчитывается как сумма результатов этого участника по всем соревнованиям.

Итоговое место каждого участника равняется 1 + k, где k равняется количеству участников, у которых общий результат строго меньше общего результата данного участника.

Соревнования по n-тлону уже завершились, но результаты ещё не опубликованы. Клеофас помнит свои ранги в каждом конкретном соревновании, но ничего не помнит о том, как выступили другие участники. Исходя из этой информации, Клеофас хотел бы узнать математическое ожидание своего итогового места.

Все участники одинаково хороши во всех дисциплинах, так что в каждом соревновании все возможные исходы (перестановки рангов всех, кроме Клеофаса) равновероятны.

Входные данные

В первой строке входного файла записано два целых числа n и m (1 ≤ n ≤ 100, 1 ≤ m ≤ 1000) — количество соревнований и количество участников соответственно.

Далее следуют n строк, i-я из которых содержит целое число xi (1 ≤ xi ≤ m) — ранг Клеофаса в i-м соревновании.

Выходные данные

Выведите единственное вещественное число — математическое ожидание итогового места Клеофаса. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 9.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере общий результат Клеофаса равняется 6. Ни один участник не может получить общий результат менее 6 (но возможно, что у другого участника тоже будет общий счет 6), поэтому итоговое место Клеофаса всегда будет 1.

E. Ограбление музея

дп Структуры данных *2800

В городе, где живет Клеофас, есть известный музей. В этом музее уже давно выставлено n экспонатов (пронумерованных от 1 до n); i-й экспонат имеет ценность vi и массу wi.

Недавно музей купила большая финансовая группа и начала менять набор экспонатов. Примерно в то же время Клеофас... скажем так, заинтересовался этим музеем.

Вам следует обработать q событий трёх типов:

  • тип 1 — музей выставляет экспонат ценностью v и массой w; экспонат, появляющийся в i-м событии этого типа, получает номер n + i (смотрите пояснения к примерам);
  • тип 2 — музей убирает экспонат номер x и аккуратно относит его в хранилище;
  • тип 3 — Клеофас заходит в музей и задаётся вопросом (конечно, без какой-либо конкретной причины): если будет ограбление и украдут экспонаты с общей массой не более m, то какова может быть их максимальная суммарная ценность?

Пусть для каждого события типа 3 s(m) является максимально возможной общей ценностью украденных экспонатов с общей массой  ≤ m.

Формально, пусть D — множество номеров всех экспонатов, на данный момент выставленных напоказ (таким образом, изначально D = {1, ..., n}). Пусть P(D) будет множеством всех подмножеств D и пусть

Тогда s(m) определяется как

Вычислите s(m) для каждого . Обратите внимание на специальный формат выходных данных.

Входные данные

В первой строке входных данных записаны два целых числа n и k (1 ≤ n ≤ 5000, 1 ≤ k ≤ 1000) — изначальное количество экспонатов в музее и максимальная интересная суммарная масса экспонатов.

Затем следуют n строк, i-я из которых содержит два положительных целых числа vi и wi (1 ≤ vi ≤ 1 000 000, 1 ≤ wi ≤ 1000) — ценность и масса i-го экспоната соответственно.

В следующей строке записано единственное целое число q (1 ≤ q ≤ 30 000) — количество событий.

В каждой из следующих q строк записано описание одного события в следующем формате:

  • 1 v w — событие типа 1, добавляется новый экспонат с ценностью v и массой w (1 ≤ v ≤ 1 000 000, 1 ≤ w ≤ 1000);
  • 2 x — событие типа 2, экспонат с номером x убирается в хранилище; гарантируется, что убираемый экспонат выставлялся в этот момент;
  • 3 — событие типа 3, Клеофас заходит в музей и задается своим странным вопросом.

Гарантируется, что в одном тесте будет не более 10 000 событий типа 1 и хотя бы одно событие типа 3.

Выходные данные

Так как количество значений s(m) может оказаться большим, выведите ответы на события типа 3 в особом формате.

Для каждого события типа 3 рассмотрим значения s(m), рассчитанные для вопроса Клеофаса, которым он задался в некоторый момент времени; выведите единственное число

где p = 107 + 19 и q = 109 + 7.

Выводите ответы на события типа 3 в том порядке, в котором они упоминаются во входных данных.

Примечание

В первом примере количество выставленных экспонатов и значения s(1), ..., s(10) для отдельных событий типа 3 таковы, по порядку:

Ценности отдельных экспонатов таковы: v1 = 30, v2 = 60, v3 = 5, v4 = 42, v5 = 20, v6 = 40 и их массы таковы: w1 = 4, w2 = 6, w3 = 1, w4 = 5, w5 = 3, w6 = 6.

Во втором примере единственный вопрос задается после того, как все экспонаты уже убраны, так что s(m) = 0 для любых m.

B. Аппроксимизация постоянного диапазона

дп реализация *1400

На практических занятиях в университете Кселлосу однажды довелось измерять интенсивность эффекта, медленно приближающегося к состоянию равновесия. Хороший способ измерить интенсивность в такой системе — это выбрать достаточно большое количество последовательных частных значений, кажущихся почти одинаковыми, и взять их среднее значение. Конечно, при обычных размерах данных в этом нет ничего сложного, но почему бы не сделать из этого задачу для соревнований по программированию?

Вам дана последовательность из n значений a1, a2, ..., an. Между последовательными значениями не бывает больших скачков — для любого 1 ≤ i < n гарантируется, что |ai + 1 - ai| ≤ 1.

Диапазон значений [l, r] называется почти постоянным, если разница между наибольшим и наименьшим значением в этом диапазоне не превышает 1. Формально, пусть M максимальное, а m — минимальное значение ai при l ≤ i ≤ r, тогда диапазон [l, r] почти постоянен, если M - m ≤ 1.

Найдите максимальную длину почти постоянного диапазона.

Входные данные

В первой строке входных данных записано целое число n (2 ≤ n ≤ 100 000) — длина последовательности ai.

Во второй строке записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 100 000).

Выходные данные

Выведите единственное число — максимальную длину почти постоянного диапазона данной последовательности.

Примечание

В первом примере максимальным по длине почти постоянным диапазоном является [2, 5]; его длина равна 4.

Во втором примере имеется три почти постоянных диапазонов длины 4: [1, 4], [6, 9] и [7, 10]. Почти постоянный диапазон максимальной длины 5 только один: [6, 10].

A. Нестандартное мышление

дп жадные алгоритмы математика *1600

Кевин только что получил свои неутешительные результаты по Олимпиаде по Идентификации Коров в США (USAICO) в виде бинарной строки длины n. Каждый символ строки Кевина представляет собой результат Кевина на одном из n вопросов олимпиады — '1' если корова была определена правильно и '0' в противном случае.

Тем не менее не всё потеряно. Кевин — большой любитель нестандартного мышления, и он считает, что его результат должен быть не суммой его очков, а максимальной длиной чередующейся подпоследовательности его строки. Здесь мы определяем чередующуюся подпоследовательность строки как подпоследовательность (необязательно из соседних элементов), в которой никакие два последовательных элемента не равны. Например, {0, 1, 0, 1}, {1, 0, 1}, и {1, 0, 1, 0} — чередующиеся подпоследовательности, в то время как {1, 0, 0} и {0, 1, 0, 1, 1} таковыми не являются.

Кевин, будучи ещё тем хитрецом, готов взломать базу данных USAICO, чтобы улучшить свой результат. Для того чтобы провернуть дело незаметно, он решил, что инвертирует ровно одну подстроку, то есть возьмёт несколько последовательных элементов строки своего результата и изменит все '0' в этой подстроке на '1' и наоборот. Кевин хочет знать максимально возможную длину самой длинной чередующейся подпоследовательности, которую может иметь строка с его результатами после одной операции инвертирования.

Входные данные

Первая строка входных данных содержит единственное число n (1 ≤ n ≤ 100 000) — количество вопросов на олимпиаде.

Следующая строка содержит бинарную строку длины n, задающую результаты Кевина на USAICO.

Выходные данные

Выведите одно целое число — длину самой длинной возможной чередующейся подпоследовательности, которую Кевин может создать в своей строке, инвертировать ровно одну подстроку.

Примечание

В первом примере Кевин может инвертировать выделеную жирным подстроку '10000011' и превратить свою строку в '10011011', которая имеет переменную подпоследовательность длины 5: '10011011'.

Во втором примере Кевин может инвертировать всю строку, и это не изменит результат.

A. Цепная реакция

Бинарный поиск дп *1600

На различных позициях вдоль числовой прямой расположены n маяков. Координата i-го маяка равняется ai, а уровень мощности — bi. Когда i-й маяк активируется, он уничтожает все маяки слева от него (направление уменьшения координат) на расстоянии bi включительно. Сам маяк при этом не уничтожается. Сайтама последовательно активирует все маяки друг за другом справа налево, при этом если маяк разрушен, то его активировать нельзя.

Сайтама хочет, чтобы Генос добавил один маяк любой мощности на любую позицию строго правее всех существующих маяков. При этом необходимо, чтобы в результате процесса последовательной активации уничтожалось как можно меньше маяков. Обратите внимание, что новый маяк будет расположен так, что обязательно будет активирован первым. Помогите Геносу: определите, какое минимальное количество маяков может быть уничтожено.

Входные данные

В первой строке входных данных записано единственное число n (1 ≤ n ≤ 100 000) — количество маяков.

В каждой из следующих n строк записано по два целых числа ai и bi (0 ≤ ai ≤ 1 000 000, 1 ≤ bi ≤ 1 000 000) — координата и уровень мощности соответствующего маяка. Никакие два маяка не будут расположены в одной точке, то есть ai ≠ aj if i ≠ j.

Выходные данные

Выведите единственное число — минимально возможное количество маяков, которые могут быть уничтожены.

Примечание

В первом примере минимальное количество уничтожаемых маяков равняется 1. Один из способов получить такой ответ — поместить в позицию 9 маяк с уровнем мощности 2.

Во втором примере минимальное количество уничтожаемых маяков равно 3. Одним из способов получить такой ответ является поместить в позицию 1337 маяк с уровнем мощности 42.

B. Zuma

дп *1900

Генос недавно установил на свой телефон игру «Zuma». Игроку даётся ряд из n драгоценных камней, i-й из которых имеет цвет ci. Цель игры — уничтожить все камни за как можно меньшее количество секунд.

За одну секунду Генос может выбрать любую подстроку (последовательность стоящих рядом камней), являющуюся палиндромом, и удалить её. После удаления данной подстроки оставшиеся камни сдвигаются, чтобы снова образовать непрерывный ряд. Какое минимальное количество секунд необходимо, чтобы уничтожить всю строку?

Напомним, что строка (или подстрока) является палиндромом, если она одинаково читается как слева направо, так и справа налево. В данном случае это означает, что цвет первого камня равен цвету последнего камня, цвет второго равен цвету предпоследнего и так далее.

Входные данные

В первой строке входных данных записано единственное число n (1 ≤ n ≤ 500) — количество камней в изначальном ряду.

Во второй строке записано n целых чисел, i-е из которых равно ci (1 ≤ ci ≤ n) — цвет i-го камня в изначальном ряду.

Выходные данные

Выведите единственное целое число — минимальное количество секунд, необходимое чтобы удалить все камни.

Примечание

В первом примере Генос может уничтожить весь ряд за 1 секунду.

Во втором примере Генос может уничтожать только по одному камню в секунду за раз, поэтому на весь ряд у него уйдёт 3 секунды.

В третьем примере один из возможных способов достижения оптимального времени –– сперва уничтожить 4 4, а затем уничтожить 1 2 3 2 1.

C. Новый год и домино

дп реализация *1500

Лимак — белый медвежонок, который очень любит играть. Недавно он получил прямоугольную таблицу, состоящую из h рядов и w столбцов. Каждая клетка этой таблицы либо пустая (обозначается '.'), либо занятая (обозначается '#'). Ряды нумеруются от 1 до h сверху вниз. Столбцы нумеруются от 1 до w слева направо.

Также у Лимака есть одна доминошка, которую он хочет поместить куда-нибудь в табличку. Доминошка займёт две соседние по стороне клетки, расположенные в одной строке или в одном столбце. Обе эти клетки должны быть пустыми и находиться внутри таблицы.

Лимаку нужно больше играть и веселиться, поэтому он рассмотрит некоторые запросы. В каждом запросе он выбирает некоторый прямоугольник и задаётся вопросом: а сколькими способами можно полностью поместить имеющуюся доминошку в выбранный прямоугольник?

Входные данные

В первой строке записаны два целых числа h и w (1 ≤ h, w ≤ 500) — количество строк и количество столбцов в таблице, соответственно.

В следующих h строках записана таблица. В каждой строке находится строка длины w, каждый символ которой равен либо '.', либо '#', что означает пустую и занятую клетку, соответственно.

В следующей строке записано единственное число q (1 ≤ q ≤ 100 000) — количество запросов.

В каждой из следующих q строк находятся по четыре целых числа r1i, c1i, r2i, c2i (1 ≤ r1i ≤ r2i ≤ h, 1 ≤ c1i ≤ c2i ≤ w) — i-й запрос. Числа r1i и c1i определяет верхний левый угол, а числа r2i и c2i — нижний правый угол соответствующего прямоугольника.

Выходные данные

Выведите q чисел, i-е из которых соответствует количеству способов полностью расположить доминошку внутри i-го прямоугольника.

Примечание

Красная рамочка на рисунке ниже соответствует первому запросу в первом примере. Существует 4 способа расположить доминошку.

D. Новый год и древнее пророчество

дп Строки хэши *2000

Маленький полярный медвежонок Лимак нашёл в снегу свитки с древним пророчеством. Никаких древних языков он не знает, поэтому в пророчестве ему не разобраться, зато он знает цифры!

Один из фрагментов пророчества содержит последовательность из n цифр, причём первая из них не является нулём. Лимак полагает, что это последовательность каких-то годов. Пробелов и точек в записи нет, так что, возможно, древние люди их не использовали. Теперь Лимаку стало любопытно, какие же именно года фигурируют в фрагменте.

Медвежонок сделал следующие три предположения:

  • Года записаны в порядке строгого возрастания;
  • Каждый год обозначается целым положительным числом;
  • Ведущие нули не используются.

Лимак хочет рассмотреть все возможные способы разбить данную последовательность цифр на числа (года), удовлетворяющие данным условиям. Он справится сам, без чьей либо помощи, однако попросил вас посчитать количество подходящих разбиений. Поскольку это число может быть достаточно большим, выведите его по модулю 109 + 7.

Входные данные

Первая строка входных данных содержит единственное число n (1 ≤ n ≤ 5000) — количество цифр в фрагменте пророчества.

Во второй строке записана строка длины n, состоящая только из цифр. Гарантируется, что первая цифра всегда не '0'.

Выходные данные

Выведите количество способов корректно разбить последовательность цифр на числа по модулю 109 + 7.

Примечание

В первом примере существует 8 способов разбить исходную последовательность:

  • "123434" = "123434" (вся последовательность вполне может оказаться одним числом)
  • "123434" = "1" + "23434"
  • "123434" = "12" + "3434"
  • "123434" = "123" + "434"
  • "123434" = "1" + "23" + "434"
  • "123434" = "1" + "2" + "3434"
  • "123434" = "1" + "2" + "3" + "434"
  • "123434" = "1" + "2" + "3" + "4" + "34"

Обратите внимание, что нельзя выполнить разбиение "123434" = "12" + "34" + "34", поскольку последовательность должна быть строго возрастающей.

Во втором примере существует 4 способа:

  • "20152016" = "20152016"
  • "20152016" = "20" + "152016"
  • "20152016" = "201" + "52016"
  • "20152016" = "2015" + "2016"

F. Робот на кольце

дп *2600

Задано кольцо, разбитое на n клеток. Клетки пронумерованы, начиная с некоторой, целыми числами от 1 до n по часовой стрелке. В i-й клетке записано целое число ai. Робот Симба стоит в клетке номер s.

В любой момент времени робот находится в одной из n клеток кольца, в начале он находится в клетке s. За одно действие робот может либо выписать число записанное в его текущей клетке, в которой он стоит, либо переместиться в соседнюю клетку по или против нумерации клеток. На выписывание числа Симба не тратит времени, но на перемещение в соседнюю клетку Симба тратит одну единицу времени.

Симба хочет выписать числа из каждой клетки ровно по одному разу, но при этом последовательность выписанных чисел должна быть неубывающей. Определите наименьшее количество единиц времени, необходимое Симбе, чтобы выписать все числа.

Входные данные

В первой строке находятся два целых числа n и s (1 ≤ s ≤ n ≤ 2000) — количество клеток в кольце и начальная позиция Симбы.

Во второй строке находятся n целых чисел ai ( - 109 ≤ ai ≤ 109) — числа записанные в клетках. Числа заданы для клеток в порядке от 1-й до n-й. Среди этих чисел могут быть одинаковые.

Выходные данные

В первой строке выведите целое число t — наименьшее количество единиц времени, необходимое роботу Симбе.

В каждой из следующих n строк выведите направление движения робота и количество клеток, проходимых в этом направлении. После этого передвижения робот выписывает число записанное в клетке, в которую Симба попадает. Направление и количество клеток нужно вывести в виде +x в случае перемещения в направлении нумерации на x клеток или -x в случае перемещения на x клеток против направлениия нумерации (0 ≤ x ≤ n - 1).

Заметим, что сумма всех абсолютных значений (модулей) величин x должна быть равна t.

B. Навыки

Бинарный поиск дп жадные алгоритмы Перебор сортировки *1900

Лёша играет в недавно вышедшую новую версию легендарной игры hacknet. В этой версии был добавлен механизм навыков. Теперь каждый игровой персонаж обладает ровно n навыками. Каждый навык представляется одним неотрицательным целым числом ai — текущим уровнем навыка. Все навыки имеют одинаковый максимальный уровень A.

Одновременно с навыками был введён всеобщий рейтинг всех игроков. Игроки ранжируются по так называемой Силе. Сила игрока считается как сумма следующих величин:

  • Количество навыков, которыми персонаж владеет в совершенстве (т.е. таких, что ai = A), умноженное на коэффициент cf.
  • Минимальный текущий уровень среди всех навыков (min ai), умноженный на коэффициент cm.

Сейчас у Лёши есть m хакнетианских денежных единиц, которые он готов потратить. Каждая денежная единица позволяет увеличить текущий уровень любого навыка на 1 (если его уровень еще не максимален). Помогите ему потратить деньги таким образом, чтобы достичь как можно большего уровня Силы.

Входные данные

В первой строке через пробел записаны пять целых чисел n, A, cf, cm и m (1 ≤ n ≤ 100 000, 1 ≤ A ≤ 109, 0 ≤ cf, cm ≤ 1000, 0 ≤ m ≤ 1015).

Во второй строке записано ровно n целых чисел ai (0 ≤ ai ≤ A), разделённых пробелами, — текущие уровни навыков.

Выходные данные

Сначала выведите максимальное значение Cилы, которое может получить персонаж.

Затем выведите n целых чисел — a'i (ai ≤ a'i ≤ A), уровни навыков, до которых следует развиться, чтобы достичь указанного значения Силы, при этом используя не более m денежных единиц. Если правильных ответов несколько — выведите любой.

Примечание

В первом тесте оптимальной стратегией является повышение второго навыка до его максимума, а остальных — на единицу.

Во втором тесте нужно увеличить уровни всех навыков до максимума.

D. Королевство и его города

графы Деревья дп поиск в глубину и подобное разделяй и властвуй сортировки *2800

В королевстве К готовились к свадьбе дочери Короля. Однако, чтобы не ударить в грязь лицом перед будущими родственниками, Королю сперва необходимо провести реформу королевства. Так как Королю не терпится выдать свою дочь замуж, этот вопрос ему нужно решить как можно скорее.

Королевство в данный момент состоит из n городов. Города соединены с помощью n - 1 двунаправленной дороги, причём из каждого города можно добраться до любого другого города. Поскольку в былые времена Королю приходилось много экономить, между любыми двумя городами есть ровно один простой путь.

В чём же суть реформы? Выяснилось, что для максимально эффективного управления ключевые функции государственного аппарата необходимо вынести в различные города (назовем такие города важными). Однако из-за того, что существует риск атаки со стороны варваров, это необходимо сделать осторожно. Король составил несколько планов, каждый из которых описывается набором важных городов, и теперь интересуется, какой же план лучше.

Варвары могут захватывать некоторые города, не являющиеся важными (уж те-то, разумеется, будут достаточно укреплены), после этого через захваченный город становится невозможно проехать. В частности, интересной характеристикой плана является минимальное количество городов, которое необходимо захватить варварам, чтобы все важные города оказались попарно изолированы друг от друга, то есть ни из какого важного города нельзя было доехать ни до какого другого важного города.

Помогите Королю посчитать эту характеристику для каждого своего плана.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 100 000) — число городов в королевстве.

В следующих n - 1 строках записаны по два различных числа ui, vi (1 ≤ ui, vi ≤ n) — номера городов, соединенных очередной дорогой. Гарантируется, что от каждого города можно добраться до любого другого по существующим дорогам.

В следующей строчке задано целое число q (1 ≤ q ≤ 100 000) — количество планов Короля.

Каждая из следующих q строк выглядит следующем образом: в начале записано число ki — количество важных городов в очередном плане Короля (1 ≤ ki ≤ n), затем через пробел записано ровно ki попарно различных целых чисел от 1 до n — номера важных городов в этом плане.

Сумма всех ki не превосходит 100 000.

Выходные данные

Для каждого плана выведите единственное число — минимальное количество городов, которое потребуется захватить варварам, или  - 1, если все попытки варваров изолировать важные города обречены на провал.

Примечание

В первом тесте в первом и третьем плане варварам достаточно захватить город 3. Во втором и четвёртом плане все попытки будут обречены на провал.

Во втором тесте варварам достаточно захватить города 3 и 5.

E. Любитель кроссвордов

дп Строки хэши *3200

Олег Петрович любит кроссворды и каждый четверг покупает в газетном киоске свой любимый журнал с кроссвордами и разными словесными головоломками. В последнем выпуске Олег Петрович обнаружил интересную головоломку, за решение которой в журнале обещали ценный приз. Ниже мы приводим её формальное описание.

Поле для головоломки состоит из двух рядов по n клеток в каждом. Каждая клетка содержит ровно одну строчную английскую букву. Нужно найти и вычеркнуть на этом поле некоторое данное слово w, состоящее из k строчных английских букв. Решением головоломки является последовательность клеток поля c1, ..., ck, такая что:

  • Для всех i от 1 до k буква, записанная в клетке ci, совпадает с буквой wi;
  • Все клетки в последовательности попарно различны;
  • Для всех i от 1 до k - 1 клетки ci и ci + 1 имеют общую сторону.

Олег Петрович быстро нашёл решение для головоломки. Теперь ему интересно, сколько для нее существует различных решений. Олег Петрович не любит слишком большие числа, поэтому посчитайте ответ по модулю 109 + 7.

Два решения ci и c'i считаются различными, если последовательности клеток не совпадают хотя бы в одной позиции, то есть найдётся такое j от 1 до k, что cj ≠ c'j.

Входные данные

В первых двух строках записано состояние поля для головоломки. Каждая из этих строк непустая и содержит по n маленьких латинских букв.

Следующая строка оставлена пустой.

Последняя строка является непустой и содержит слово w, состоящее из строчных английских букв.

Длина каждой из строк не превосходит 2 000.

Выходные данные

Выведите одно целое число — количество решений головоломки по модулю 109 + 7.

B. Длиннохвостый еж

графы дп *1600

Под новый год Дед Мороз подарил Маше волшебную картинку и карандаш. Картинка состоит из n точек, соединённых m отрезками (отрезки могут пересекаться как угодно, это неважно). Никакие два отрезка не соединяют одну и ту же пару точек, никакой отрезок не соединяет точку саму с собой. Маша хочет нарисовать ежа, но чтобы он ожил в новогоднюю ночь, нужно, чтобы у него был раскрашенный хвост, соответствующий нескольким правилам:

  1. Раскрашивать можно только те отрезки, которые уже были на картинке;
  2. Хвост должен быть непрерывным, то есть состоять из последовательности точек, такой что все пары соседних точек соединены раскрашенным отрезком;
  3. Номера точек от начала хвоста к его концу должны строго возрастать.

Назовём длиной хвоста количество точек в нём. Помимо хвоста, Маша собирается нарисовать ежу колючки, для этого она раскрасит все отрезки, одним из концов которых является последняя точка хвоста (точка хвоста с максимальным номером). Красотой ежа Маша называет количество колючек, умноженное на длину хвоста. Маша хочет нарисовать самого красивого ежа. Помогите ей посчитать, на что она может рассчитывать.

Обратите внимание, что, согласно Машиному определению ежа, один и тот же раскрашенный отрезок может быть одновременно и колючкой, и частью хвоста (всё-таки Маша ещё маленькая девочка). Для уточнения посмотрите на картинку к первому примеру.

Входные данные

В первой строке входных данных записаны два числа n и m (2 ≤ n ≤ 100 000, 1 ≤ m ≤ 200 000) — количество точек и отрезков на подаренной Маше картинке соответственно.

В следующих m строках содержится по два числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) — номера точек, которые соединяет данный отрезок. Гарантируется, что никакие два отрезка не соединяют одну и ту же пару точек.

Выходные данные

Выведите максимально возможную красоту ежа.

Примечание

На рисунке изображён первый пример. Красным обозначены отрезки, составляющие ежа. Хвост состоит из последовательности точек 1, 2 и 5. Колючками являются отрезки между парами точек (2, 5), (3, 5) и (4, 5). Таким образом, красота ежа равняется 3·3 = 9.

C. Беговой трек

Деревья дп жадные алгоритмы Строки *2000

На планете AMI-1511 живёт мальчик Айрат. У каждого из жителей этой планеты есть свое хобби, в частности, Айрат любит бегать, причём не просто так — он мечтает превратить бег в настоящее искусство.

Для начала Айрат хочет сконструировать беговой трек с полотном t. Полотно для трека на AMI-1511 — последовательность из цветных блоков, где каждый блок обозначается строчной английской буквой. Таким образом, любое полотно представляется как строка некоторой длины. К сожалению, блоки отсутствуют в свободной продаже.

Айрат нашёл в магазине неограниченное количество полотен для трека s, а ещё у него есть ножницы и клей. Айрат может купить некоторое количество полотен s, после чего вырезать из каждого ровно один непрерывный кусок (подстроку) и приклеить его в конец своего полотна, при этом он может развернуть новый кусок перед приклеиванием. Помогите Айрату посчитать, сколько минимум полотен s ему нужно купить, какие куски из них вырезать и в каком порядке склеить, чтобы получить желанное полотно t.

Входные данные

Первая строка входных данных содержит строку s — полотна, имеющиеся в магазине. Вторая строка содержит строку t — полотно бегового трека, которое хочет создать Айрат. Обе строки непусты, состоят только из строчных английских букв, а их длина не превосходит 2100.

Выходные данные

В первой строке выведите минимальное число полотен n или -1, если собрать желанное полотно не представляется возможным.

Если ответ не -1, то в следующих n строках выведите по два числа xi и yi — номера крайних блоков в вырезаемом куске. xi ≤ yi означает, что кусок приклеивается в исходном порядке, а xi > yi — что в развёрнутом. Куски выводите в том порядке, в котором их следует склеивать, чтобы получить строку t.

Примечание

В первом примере строка "cbaabc" = "cba" + "abc".

Во втором примере: "ayrat" = "a" + "yr" + "at".

D. Гамильтоново остовное дерево

Деревья дп жадные алгоритмы Паросочетания поиск в глубину и подобное *2200

Группа из n городов связана сетью дорог. Первоначально между любой парой городов есть двунаправленная дорога, таким образом суммарное количество дорог равно . Чтобы проехать по любой из этих дорог, требуется ровно y секунд.

Остовным деревом называется такое подмножество дорог размера n - 1, что между любой парой городов можно проехать, используя только эти дороги.

Было выбрано некоторое остовное дерево. После этого время проезда по каждой дороге остовного дерева было изменено с y на x. Обратите внимание, не гарантируется, что x меньше y.

Вы хотели бы посетить все города по одному разу, используя кратчайший путь. Вам даны числа n, x, y и описание выбранного остовного дерева. Определите минимальное время, необходимое, чтобы посетить каждый город ровно один раз, если разрешается начать маршрут в любом городе и закончить также в любом городе.

Входные данные

В первой строке входных данных записаны три целых числа n, x и y (2 ≤ n ≤ 200 000, 1 ≤ x, y ≤ 109).

Каждая из следующих n - 1 строк содержит описание одной дороги остовного дерева. В i-й из этих строк записаны два целых числа ui и vi (1 ≤ ui, vi ≤ n) — индексы городов, соединённых i-й дорогой. Гарантируется, что эти дороги образуют остовное дерево.

Выходные данные

Выведите единственное целое число — минимальное количество секунд, которое придётся потратить на путь, проходящий через каждый город ровно один раз.

Примечание

В первом примере дороги в остовном дереве требуют 2 секунд, в то время как на другие дороги уходит 3 секунды. Один из примеров оптимального пути: .

Во втором примере нам дано такое же остовное дерево, но дороги в нём требуют 3 секунд, в то время как остальные дороги требуют 2 секунд. Один из примеров оптимального пути: .

G. Слизни объединяются

дп математика матрицы Теория вероятностей *3300

Ваш друг подарил вам на день рождения бесконечное количество слизней толщины 1 и 2, и вы решили поиграть, используя этих слизней.

Вы разбиваете подоконник на n ячеек и выбираете некоторое целое число p, которое будет использоваться в игре. Затем, до тех пор пока в последней ячейке нет слизня, выполняется следующая последовательность действий:

  1. С вероятностью выбирается слизень толщины 1, а с вероятностью выбирается слизень толщины 2. Выбранный слизень помещается в ячейку номер n.
  2. Вы последовательно перемещаете нового слизня влево, то есть в направлении ячейки с номером 1. Если он сталкивается с другим слизнем, который при этом имеет одинаковую с ним толщину v, то они объединяются в одного слизня толщины v + 1. Так продолжается до тех пор, пока слизень не дойдет до конца доски или не столкнётся со слизнем, толщина которого отлична от его значения.

Вы играли в эту игру несколько раз, и она вам наскучила. Теперь вы хотите для данных значений n и p вычислить математическое ожидание суммы значений толщины всех слизней на подоконнике после завершения игры.

Входные данные

В первой строке входа будет записано два целых числа n, p (1 ≤ n ≤ 109, 1 ≤ p < 109).

Выходные данные

Выведите математическое ожидание суммарной толщины всех слизней на доске после завершения игры. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 4.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере подоконник разбит на две ячейки, при этом с вероятностью 0.5 мы добавляем слизня толщины 1, а с вероятностью 0.5 — толщины 2.

В конце игры подоконник может выглядеть как 1 2 с вероятностью 0.25, 2 1 с вероятностью 0.375, 3 2 с вероятностью 0.1875, 3 1 с вероятностью 0.1875. Таким образом математическое ожидание равно (1 + 2)·0.25 + (2 + 1)·0.375 + (3 + 2)·0.1875 + (3 + 1)·0.1875 = 3.5625.

E. Вселенское Зло

дп Потоки *2700

В результате таинственных экспериментов Пинки и Брейна в Большом Адронном Коллайдере открылись порталы — чёрные дыры — в параллельное измерение, откуда сразу же Вселенское Зло протянуло свои зловещие щупальца. Брейн быстро оценил ситуацию и понял, что, чем больше щупалец выберется на свободу, тем выше его шансы повелевать миром.

Конструкция Коллайдера представляет собой квадратную сетку, свёрнутую в цилиндр, и состоящую из n строк и m столбцов такую, какая показана на рисунке ниже:

В данном примере n = 4, m = 5. Пунктирными линиями обозначены коридоры, которые замыкают каждый столбец в кольцо, то есть соединяют n-ную и 1-ую строки сетки.

В самом левом столбце этой сетки находятся порталы, из которых готовы вылезти щупальца Вселенского Зла. В самом правом столбце расположены выходы из сооружения. Щупальца могут выбраться только через эти выходы. Отрезки, соединяющие узлы этой сетки — это коридоры.

Брейн рад бы выпустить все щупальца, но вот незадача: из порталов может вылезти бесконечное количество щупалец, каждое щупальце обладает бесконечной длиной и некоторой толщиной, а объёмы коридоров, увы, весьма ограничены. Брейн навскидку смог оценить максимальное количество щупалец, которое может пролезть через каждый коридор.

Теперь помогите мышкам определить, какое максимальное количество щупалец Вселенского Зла выберется из Большого Адронного Коллайдера.

Входные данные

В первой строке входного файла дано два целых числа n и m (2 ≤ n ≤ 5, 2 ≤ m ≤ 105) — размеры сетки Большого Адронного Колайдера. В последующих m - 1 строках записано по n чисел: пропускные способности горизонтально расположенных коридоров. В последующих m строках записано по n чисел: пропускные способности вертикально расположенных коридоров. Коридоры описываются слева направо, сверху вниз. Каждый n-ый вертикальный коридор соединяет узлы n-ой и 1-ой строк. Пропускная способность коридора — неотрицательное целое число, не превосходящее 109.

Выходные данные

Выведите одно число — количество щупалец Вселенского Зла, которыми будут повелевать Пинки и Брейн.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

E. Мокрая Акула и блоки

дп матрицы *2000

Имеется b блоков цифр, каждый из которых состоит ровно из n цифр, представленных во входных данных. Мокрая Акула выбирает ровно одну цифру из каждого блока и объединяет их в большое число в десятичной системе счисления. К примеру, если из первого блока выбрать 1, а из второго 2, то получится целое число 12.

Затем Мокрая Акула вычисляет остаток от деления получившегося числа на x. Определите количество таких способов выбрать по одной цифре в каждом блоке, чтобы получившийся остаток был в точности равен k. Поскольку это количество может оказаться достаточно большим, то выведите его по модулю 109 + 7.

Обратите внимание, что количество способов выбрать конкретную цифру в блоке равно количеству её вхождений. Например, существует 3 способа выбрать цифру 5 из блока 356789511115.

Входные данные

В первой строке входных данных записаны четыре целых числа n, b, k и x (2 ≤ n ≤ 50 000, 1 ≤ b ≤ 109, 0 ≤ k < x ≤ 100, x ≥ 2) — количество цифр в одном блоке, количество блоков, требуемый остаток от деления на x и само число x соответственно.

В следующей строке записаны n цифр ai (1 ≤ ai ≤ 9) — содержимое каждого блока.

Выходные данные

Выведите количество способов выбрать в каждом блоке ровно одну цифру так, чтобы получившееся целое число давало остаток k при делении на x.

Примечание

Во втором примере можно получить числа 22, 26, 62 и 66, но все они не дают остаток 1 при делении на 2.

В третьем примере числа 11, 13, 21, 23, 31 и 33 дают остаток 1 по модулю 2. Каждое из этих числе можно составить единственным способом, так что ответ равен 6.

B. НОД массива

дп жадные алгоритмы теория чисел *2300

Вам дан массив ai длины n. К массиву можно последовательно применить две операции:

  • удалить некоторый подотрезок длины m < n, заплатив за это m·a монет;
  • изменить некоторые элементы массива не более чем на 1, заплатив за каждое изменение b монет.

Обратите внимание, что каждую операцию можно выполнить только по одному разу (а можно и не выполнять вовсе), то есть удалить можно только один отрезок и каждое число можно изменить (увеличить или уменьшить) не более чем на 1. Дополнительно обратите внимание, что, выполняя первую операцию, мы не можем удалить весь массив.

Какое минимальное количество монет потребуется потратить, чтобы получить массив, наибольший общий делитель элементов которого больше 1?

Входные данные

В первой строке даны целые числа n, a и b (1 ≤ n ≤ 1 000 000, 0 ≤ a, b ≤ 109) — длина массива, стоимость удаления одного элемента подотрезка в первой операции и стоимость изменения одного элемента соответственно.

Во второй строке записаны n целых чисел ai (2 ≤ ai ≤ 109) — элементы массива.

Выходные данные

Выведите единственное целое число — минимальную стоимость изменений, необходимых для получения массива, наибольший общий делитель элементов которого больше 1.

Примечание

В первом тесте оптимально удалить число 3 и заплатить за это 1 монету.

Во втором тесте нужно удалить отрезок из чисел [17, 13], а затем уменьшить число 6. Стоимость изменений равна 2·3 + 2 = 8 монетам.

C. Электрические заряды

Бинарный поиск дп *2900

Программист Саня учится в Московском физико-техническом институте (МФТИ), и для получения зачета ему нужно сдать лабораторную работу.

Лабораторная установка представляет из себя плоскость с отмеченными на ней стандартными осями координат. Физики из МФТИ зарядили оси большими электрическими зарядами: ось X положительно, а ось Y отрицательно.

Опытный лаборант отметил на этой плоскости n точек с целыми координатами (xi, yi) и остановил время. Саня, используя «атомный пинцет», должен поместить в эти точки элементарные частицы. В его распоряжении есть неограниченное число электронов (отрицательно заряженных элементарных частиц) и протонов (положительно заряженных элементарных частиц). В каждую отмеченную точку он может поставить либо электрон, либо протон. После того как все отмеченные точки будут заняты, время снова пойдет, и частицы придут в движение, а через некоторое время стабилизируются в состоянии равновесия. Задача лабораторной работы — расставить частицы так, чтобы получить как можно более компактное состояние равновесия, а именно состояние c минимальным диаметром (максимальным расстоянием между парами точек множества).

Поскольку Саня программист, то он наивно полагает, что в результате все частицы просто «упадут» в свои проекции на соответствующие оси: электроны на ось X, а протоны на ось Y. Поскольку мы тоже программисты, будем придерживаться Саниной модели, то есть после включения времени частица из точки (x, y) попадёт в точку (x, 0), если это электрон, и в точку (0, y), если это протон.

Поскольку в лаборатории высокий радиационный фон, а Саня заботится о своем ноутбуке, он не взял его с собой и теперь не может написать программу, вычисляющую минимальный возможный диаметр итогового распределения частиц. Поэтому вам придётся сделать это за него.

В качестве ответа выведите квадрат минимального возможного диаметра множества.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 100 000) — количество точек.

Каждая из последующих n строк содержит два целых числа xi и yi ( - 108 ≤ xi, yi ≤ 108) — координаты i-й точки. Гарантируется, что никакие две точки не совпадают.

Выходные данные

Выведите одно целое число — квадрат минимального возможного диаметра множества, после того как Вася расставит в заданные точки электроны и протоны и лаборант включит время.

Примечание

В первом примере Саня помещает во все точки электроны, и все частицы в итоге попадают в одну точку (1, 0).

Во втором примере Саня помещает в точку (1, 10) электрон, а в точку (10, 1) — протон. В результате получается множество из двух точек (1, 0) и (0, 1), которое имеет диаметр .

E. Преобразование последовательности

бпф дп Комбинаторика математика *3300

Определим преобразование P последовательности a1, a2, ..., an как b1, b2, ..., bn, где bi = a1 | a2 | ... | ai для всех i = 1, 2, ..., n. Символом | будем обозначать операцию побитового ИЛИ.

Вася поочередно применяет преобразование P ко всем последовательностям длины n из целых чисел от 1 до 2k - 1 включительно. Он хочет знать, для скольких последовательностей результат преобразования будет строго возрастающей последовательностью. Помогите ему посчитать это число по модулю 109 + 7.

Входные данные

В единственной строке заданы два целых числа n и k (1 ≤ n ≤ 1018, 1 ≤ k ≤ 30 000).

Выходные данные

В единственной строке выведите количество подходящих последовательностей по модулю 109 + 7.

B. Карты

дп Конструктив математика *1300

У Кэтрин есть колода из n карт, каждая карта либо красная, либо зеленая, либо синяя. Пока в колоде есть ещё хотя бы две карты, Кэтрин выполняет одно из двух действий:

  • взять две (необязательно соседние) карты различных цветов и заменить их на одну карту третьего цвета;
  • взять две (необязательно соседние) карты одного и того же цвета и заменить их на одну карту этого цвета;

Она применяет эти операции до тех пор, пока не останется ровно одна карта. Определите все возможные цвета этой последней карты.

Входные данные

Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 200) — изначальное количество карт в колоде.

Следующая строка содержит строку s длины n — цвета карт в колоде. s содержит только символы «B», «G», и «R», обозначающие синий, зелёный и красный соответственно.

Выходные данные

Выведите одну строку, содержащую от одного до трёх символов, — возможные цвета последней карты (используйте те же символы, что и во входных данных) в алфавитном порядке.

Примечание

В первом примере у Кэтрин одна красная карта и одна синяя карта, которые она может поменять только на зелёную карту.

Во втором примере у Кэтрин две зелёных карты и одна красная карта. У неё два варианта: она может обменять две зелёных карты на одну зелёную, а затем обменять новую зелёную карту и красную карту на синюю карту. Или же она может обменять зелёную и красную карты на синюю карту, затем обменять синюю карту и оставшуюся зелёную карту на красную карту.

В третьем примере у Кэтрин есть только синие карты, так что она может обменять их только на другие синие карты.

D. Протест Джерри

дп Комбинаторика Перебор Теория вероятностей *1800

Эндрю и Джерри играют в игру, а Гарри ведёт счёт. Игра состоит из трёх раундов. В каждом раунде Эндрю и Джерри по очереди вынимают по одному шару из урны, содержащей n шаров, на которых написаны различные целые числа. Затем они передают шары Гарри, который добавляет очко тому, на чьём шаре было написано большее число, и кладёт их обратно в урну. Победителем игры объявляется тот, кто выиграл хотя бы в двух раундах из трёх.

Известно, что Эндрю выиграл в раундах 1 и 2, а Джерри победил в раунде 3, так что победителем игры стал Эндрю. Однако Джерри недоволен способом определения победителя — по его словам, сумма чисел на вытянутых им шарах была строго больше суммы чисел на шарах, вытянутых Эндрю. Какова вероятность такого события?

Входные данные

В первой строке входных данных записано единственное число n (2 ≤ n ≤ 2000) — количество шаров в урне.

Во второй строке записаны n целых чисел ai (1 ≤ ai ≤ 5000) — числа, написанные на шарах. Гарантируется, что все ai различны.

Выходные данные

Выведите единственное вещественное число — вероятность того, что сумма чисел на всех шарах, вытянутых Джерри, была строго больше суммы чисел на всех шарах, вытянутых Эндрю, если известно, что Эндрю выиграл первые два раунда, а Джерри выиграл третий раунд. Ваш ответ будет считаться правильным, если его абсолютная или относительная погрешность не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере имеется всего два шара. В первых двух раундах Эндрю обязательно доставал шар с числом 2, а Джерри доставал шар с числом 1, и наоборот в последнем раунде. Таким образом, сумма на всех шарах Эндрю обязательно равна 5, а на всех шарах Джерри — 4.

Во втором примере у каждой игры могло быть три исхода: 10 - 2, 10 - 1 или 2 - 1. Чтобы выполнилось условие на сумму, Эндрю обязательно должен был оба раза победить с исходом 2 - 1, а в последнем раунде Джерри должен был достать 10. Вероятность такого события равняется .

F. Групповые проекты

дп *2400

В аудитории есть n студентов, которые работают над групповыми проектами. Студенты будут разделены на группы (группа может состоять и из одного студента), после чего каждый студент в группе будет работать над своей независимой частью проекта, а затем они объединят результаты в рамках этой группы. Известно, что i-й студент выполнит свою работу ровно за ai минут.

Если студенты в группе работают с разной скоростью, то это раздражает как тех, кто делает свою работу быстро и ждёт остальных, так и тех, кто делает её медленно и задерживает всю группу. Несбалансированностью группы называется разница между максимальным ai в группе и минимальным ai в группе. Обратите внимание, что несбалансированность группы из одного студента равна 0. Сколькими способами можно разбить студентов на группы так, чтобы суммарная несбалансированность всех групп не превосходила k?

Два разбиения считаются различными, если какие-то два студента были в одной группе в одном разбиении, но оказались в разных группах в другом разбиении.

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 200, 0 ≤ k ≤ 1000) — количество студентов и максимальная разрешённая суммарная несбалансированность соответственно.

Во второй строке записаны n целых чисел ai (1 ≤ ai ≤ 500) — i-е число равняется количеству минут, которое тратит на выполнение своей независимой части работы студент номер i.

Выходные данные

Выведите количество способов разбить студентов на группы требуемым образом. Поскольку ответ может быть достаточно большим, то выведите остаток от деления этого числа на 109 + 7.

Примечание

В первом примере возможны три разбиения:

  1. Первый и второй студенты образуют одну группу, а третий студент — другую. Итоговая несбалансированность равняется 2 + 0 = 2.
  2. Первый студент будет в группе один, а второй и третий студенты образуют другую группу. Несбалансированность равняется 0 + 1 = 1.
  3. Все три студента будут в разных группах. Несбалансированность будет равна 0.

В третьем примере суммарная несбалансированность должна быть равна 0, поэтому каждый студент должен работать индивидуально.

G. Лототроны

дп жадные алгоритмы математика Структуры данных *3100

Джонни участвует в карнавале, на котором проводится n лотерей. В ходе лотереи с номером i разыгрывается приз ценностью pi. Каждый участник покупает сколько-то лотерейных билетов, а затем произвольным образом распределяет их между n лототронами. В конце карнавала из каждого лототрона случайным образом достают один билет, и его обладатель выигрывает соответствующий приз. Один человек вполне может выиграть и несколько призов с разных лототронов.

Правила карнавальных лотерей запрещают одному участнику владеть более чем половиной билетов в лототроне, то есть никто не может положить в один лототрон больше билетов, чем все остальные участники вместе взятые. В начале лотереи организаторы кладут в каждый лототрон один билет и не извлекают его оттуда до конца карнавала.

Джонни купил t лотерейных билетов и теперь думает, как же распределить их по лототронам. Сейчас в i-м лототроне находится li билетов. Джонни наблюдает, как остальные участники лотереи время от времени меняют свои решения и перемещают по одному билету. После каждого такого перемещения Джонни хочет знать максимальное математическое ожидание выигрыша, которого он может добиться, разместив билеты оптимальным способом. Разумеется, Джонни не может использовать больше чем t билетов и нарушать правила лотереи, помещая в один лототрон больше билетов, чем все остальные участники лотереи вместе взятые.

Входные данные

В первой строке входных данных записаны числа n, t и q (1 ≤ n, t, q ≤ 200 000) — количество лототронов, количество билетов в распоряжении Джонни и количество изменений соответственно.

Во второй строке записаны n чисел pi (1 ≤ pi ≤ 1000), i-е из которых задаёт ценность приза в i-й лотерее.

В третьей строке записано n чисел li (1 ≤ li ≤ 1000) — изначальное количество билетов в каждом лототроне.

Далее следуют q строк с описанием изменений. Каждое описание состоит из двух целых чисел tk и rk (1 ≤ tk ≤ 2, 1 ≤ rk ≤ n) — тип изменения и номер лототрона. Если tk = 1, то кто-то добавляет один билет в лототрон rk, а если tk = 2, то кто-то убирает билет из лототрона rk.

Гарантируется, что после любой операции в каждом лототроне есть хотя бы 1 билет.

Выходные данные

Выведите q строк, каждая строка должна содержать одно вещественное число — максимально возможное математическое ожидание выигрыша Джонни после выполнения первых k изменений. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере у Джонни есть только один билет. Призы имеют ценность 4 и 5, а в лототронах изначально находятся 1 и 2 билета соответственно. После первого изменения в каждом лототроне лежит по 2 билета, так что если Джонни поместит свой билет во второй лототрон, то математическое ожидание выигрыша будет равно . После второго изменения во втором лототроне находится три билета, так что наиболее выгодной стратегией будет положить билет в первый лототрон — математическое ожидание выигрыша равно . После третьего изменения Джонни должен положить свой билет в первый лототрон, тогда математическое ожидание выигрыша равно .

Во втором примере у Джонни больше билетов, чем он может использовать по правилам карнавальной лотереи. Например, после первого изменения, в лототронах лежат 7, 6 и 6 билетов соответственно, так что Джонни может использовать только 19 своих билетов и выиграть каждый приз с вероятностью .

A. Уравнение с исключающим ИЛИ

дп математика *1700

Известно, что два положительных целых числа a и b в сумме дают s, а их побитовое исключающее «ИЛИ» (также известно как XOR) равно x. Сколько существует подходящих упорядоченных пар (a, b)?

Входные данные

В первой строке входных данных записаны два целых числа s и x (2 ≤ s ≤ 1012, 0 ≤ x ≤ 1012) — значения суммы и побитового исключающего «ИЛИ» соответственно.

Выходные данные

Выведите одно целое число — количество подходящих пар положительных целых чисел a и b. Если решений не существует, выведите 0.

Примечание

В первом примере подходят следующие пары: (2, 7), (3, 6), (6, 3), (7, 2).

Во втором примере решения являются только (1, 2) и (2, 1).

D. Тестирование дерева

Бинарный поиск графы Деревья дп жадные алгоритмы поиск в глубину и подобное *2600

На уроке информатики Якоб построил модель дерева из шариков и палочек. Модель соответствует некоторому дереву, состоящему из n вершин. На создание i-го шарика Якоб потратил ai минут.

Учительница будет оценивать качество модели по количеству усилий, потраченных Якобом на создание шариков. У неё нет времени рассматривать их все, поэтому она посмотрит только на k первых шариков в порядке DFS-обхода дерева. Оценкой Якоба будет минимальное ai среди k рассмотренных шаров.

У Якоба уже не хватит времени переделать модель, но он может сам выбрать корневую вершину, из которой учительница начнёт обход. Более того, для каждой вершины Якоб может переупорядочить список её соседей как захочет. Помогите Якобу определить, какую максимальную оценку он может получить.

Порядок DFS-обхода — это последовательность номеров вершин, выписанная рекурсивной процедурой DFS. Будучи вызванной от вершины v, процедура делает следующее:

  1. Напечатать v.
  2. Пройтись по списку соседей вершины v и вызвать процедуру DFS от всех из них по очереди. Не вызывать процедуру DFS от вершины u, если мы пришли в вершину v непосредственно из u.
Входные данные

В первой строке входных данных записаны два положительных целых числа n и k (2 ≤ n ≤ 200 000, 1 ≤ k ≤ n) — количество шариков в составленном Якобом дереве и количество шариков, на которые посмотрит учительница, соответственно.

Во второй строке записаны n целых чисел ai (1 ≤ ai ≤ 1 000 000), i-е из которых соответствует количеству времени, потраченному Якобом на i-ю вершину.

Далее следует n - 1 строка, описывающая дерево. В каждой из них записаны два целых числа ui и vi (1 ≤ ui, vi ≤ n) — индексы вершин, соединённых i-м ребром.

Выходные данные

Выведите одно целое число — максимальную оценку, которую может получить Якоб, если правильно выберет корневую вершину и переупорядочит списки соседей.

Примечание

В первом примере Якоб может назначить корнем вершину 2 и переупорядочить список её соседей следующим образом: 4, 1, 5. В результате этого порядок DFS-обхода станет 2, 4, 1, 3, 5, минимальное значение ai среди первых трёх вершин равняется 3.

Во втором примере любой порядок обхода будет содержать вершину 1 на первом или втором месте, поэтому Якоб не может получить оценку больше чем 1.

B. Новый скейтборд

дп *1300

Макс хочет купить новый скейтборд. Он уже посчитал сколько ему нужно денег, чтобы купить новый скейтборд. Оставив калькулятор на полу, он пошёл просить у родителей денег. В это время его маленький брат Юсуф пришёл в комнату и начал нажимать на случайные кнопки калькулятора. К сожалению Макс уже забыл сумму, посчитанную на калькуляторе. Единственное он помнит, что сумма была кратна 4-м.

Вам задана строка s состоящая из цифр (число, которое отображалось на экране калькулятора после того как Юсуф понажимал на случайные кнопки). Ваша задача определить количество подстрок кратных 4-м. Подстрока может начинаться с нуля.

Подстрокой строки называется непустая последовательность подряд идущих символов.

Например, строка 124 содержит четыре подстроки кратные 4-м: 12, 4, 24 и 124. Для строки 04 ответ равен трём: 0, 4, 04.

Рекомендуется для ввода и вывода данных использовать функции gets, scanf, printf в языке C++, поскольку они работают значительно быстрее чем getline, cin, cout. Аналогично, рекомендуется использовать классы BufferedReader, PrintWriter вместо Scanner, System.out в языке Java.

Входные данные

В единственной строке находится строка s (1 ≤ |s| ≤ 3·105). Строка s состоит только из цифр от 0 до 9.

Выходные данные

Выведите целое число a — количество подстрок строки s кратных 4-м.

Обратите внимание, что ответ может быть достаточно большим и не поместиться в 32-битном типе данных. Для сохранения числа вы можете использовать, например, тип long long в языке C++ или тип long в языке Java.

D. Волшебные числа

дп *2200

Рассмотрим десятичное представление некоторого целого числа. Будем называть число d-волшебным, если цифра d находится на всех чётных позициях десятичного представления числа и нигде больше.

Например, числа 1727374, 17, 1 являются 7-волшебными, а числа 77, 7, 123, 34, 71 не являются 7-волшебными. С другой стороны число 7 является, например, 0-волшебным, 123 является 2-волшебным, 34 является 4-волшебным, а 71 является 1-волшебным.

Вам нужно посчитать количество d-волшебных чисел в отрезке [a, b] кратных m. Поскольку ответ может быть очень большим, требуется найти его значение по модулю 109 + 7 (то есть нужно найти остаток при делении на число 109 + 7).

Входные данные

В первой строке находится пара целых числа m, d (1 ≤ m ≤ 2000, 0 ≤ d ≤ 9) — параметры описанные в условии задачи.

Во второй строке находится целое положительное число a в десятичном представлении (без лидирующих нулей).

В третьей строке находится целое положительное число b в десятичном представлении (без лидирующих нулей).

Гарантируется, что a ≤ b, а также количество цифр в числах a и b одинаково и не превосходит 2000.

Выходные данные

Выведите целое число a — остаток при делении искомого количества d-волшебных чисел кратных m в отрезке [a, b] на число 109 + 7.

Примечание

Числа из ответа к первому примеру: 16, 26, 36, 46, 56, 76, 86 и 96.

Числа из ответа ко второму примеру: 2, 4, 6 и 8.

Числа из ответа к третьему примеру: 1767, 2717, 5757, 6707, 8797 и 9747.

C. Фома Дор и скобки

дп Строки *2000

У Фомы Дора скоро день рождения, и его друг Габи решил подготовить ему подарок. Он знает, что Фома Дор без ума от правильных последовательностей из круглых скобок длины ровно n.

Последовательность круглых скобок называется правильной, если выполнены следующие условия:

  1. количество открывающих скобок в последовательности равно количеству закрывающих скобок
  2. для любого префикса последовательности количество открывающих скобок на этом префиксе не меньше количества закрывающих скобок на этом префиксе.

Габи купил строчку s длины m (m ≤ n) и хочет дополнить её до правильной скобочной последовательности длины n. Для этого он выберет какие-то последовательности скобок p и q и получит строку p + s + q, то есть припишет p в начало строки s и q в конец строки s.

Теперь ему интересно, сколько существует пар строк p и q, таких что строка p + s + q является правильной скобочной последовательностью длины n. Вычислите это значение по модулю 109 + 7.

Входные данные

В первой строке входных данных записаны два числа n и m(1 ≤ m ≤ n ≤ 100 000, n - m ≤ 2000) — любимая длина Фомы и длина строки, купленной Габи, соответственно.

Во второй строке записана строка s длины m, состоящая только из символов '(' и ')'.

Выходные данные

Выведите количество пар строк p и q, таких что строка p + s + q является правильной скобочной последовательностью. Не забудьте, что требуется только вывести остаток от деления этого числа на 109 + 7.

Примечание

В первом примере подходят четыре различные пары:

  1. p = "(", q = "))"
  2. p = "()", q = ")"
  3. p = "", q = "())"
  4. p = "", q = ")()"

Во втором примере единственным способом получить правильную последовательность будет выбрать пустые p и q.

В третьем примере никакие p и q не сделают строчку p + s + q правильной скобочной последовательностью.

D. Бабай и пирог на день рождения

дп Структуры данных *2000

Как вы знаете, на дне рождения обязательно должен быть пирог! В этот раз Бабай решил приготовить особенный пирог.

Простой пирог можно представить как цилиндр некоторого радиуса и некоторой высоты. Объём простого пирога равен объёму соответствующего цилиндра. У Бабая есь n простых пирогов, и он хочет собрать особенный пирог, поставив некоторые из них друг на друга.

Однако есть дополнительные кулинарные ограничения. Пироги пронумерованы в некотором порядке, таком что пирог с номером i может быть поставлен только на стол или на пирог с номером j, где j < i. Более того, чтобы поразить своих друзей, Бабай будет ставить пирог i на пирог j, только если объём пирога i строго больше объёма пирога j.

Бабай хочет собрать пирог максимального суммарного объёма, помогите ему в этом.

Входные данные

В первой строке входных данных записано единственно число n (1 ≤ n ≤ 100 000) — количество простых пирогов в распоряжении Бабая.

В i-й из последующих n строк записаны два целых числа ri и hi (1 ≤ ri, hi ≤ 10 000) — радиус и высота i-го просто пирога соответственно.

Выходные данные

Выведите максимальный объём пирога, который может собрать Бабай. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере оптимальным ответом будет просто выбрать пирог с номером 1.

Во втором примере максимальный объём специального пирога можно получить выбрав простые пироги 1, 2 и 4.

E. Фома Дор и дороги

Деревья дп Комбинаторика поиск в глубину и подобное Структуры данных Теория вероятностей *2300

Карта города, в котором живёт Фома Дор, представляет собой дерево (неориентированный связный граф без простых циклов), поэтому гости зовут его Древоградом. В городе n перекрёстков, соединённых n - 1 дорогой. По всем дорогам можно перемещаться в обоих направлениях.

В городе живёт m друзей Фомы Дора, i-й из них живёт рядом с перекрёстком ui, а работает рядом с перекрёстком vi. Все жители города несчастны, потому что между из домом и работой существует ровно один простой путь.

Фома Дор хочет построить ровно одну новую дорогу, которую он выберет случайно среди всех n·(n - 1) / 2 возможных дорог. Обратите внимание, что он вполне может построить новую дорогу между какой-то парой перекрёстков, уже соединённых друг с другом дорогой.

Фома знает, что каждый из его друзей будет счастлив, если после построения новой дороги будет путь из его дома до работы и обратно, который не проходит по одной дороге дважды. Формально, в графе будет существовать простой цикл, на котором лежат ui и vi.

Более того, если какой-то друг становится счастлив, то уровень его радости определяется как длина этого пути (несложно заметить, что эта длина определяется однозначно). Для каждого своего друга Фома хочет вычислить математическое ожидание значения уровня радости, то есть математическое ожидание длины цикла, если этот цикл содержит ui и vi.

Входные данные

В первой строке входных данных записаны числа n и m (2 ≤ n,  m ≤ 100 000) — количество перекрёстков в Древограде и друзей Фомы соответственно.

Далее следует n - 1 строка с описанием дорог. Каждая строка содержит два числа ai и bi (1 ≤ ai, bi ≤ n) — индексы перекрёстков, соединённых i-й дорогой.

В последних m строках описываются друзья Фомы Дора. В i-й из этих строк записаны два числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) — номер перекрёстка, где живёт i друг, и номер перекрёстка, где он работает.

Выходные данные

Для каждого друга Фомы Дора вычислите математическое ожидание его уровня радости, при условии, что он будет счастлив. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

Рассмотрим второй пример.

  1. Подходят дороги (1, 2) и (2, 3), поэтому математическое ожидание равняется
  2. Построение дорог (1, 3) и (2, 3) сделает второго друга счастливым. Как и для друга 1, ответ равен 2.5
  3. Единственный способ сделать третьего друга счастливым — это построить дорогу (2, 3), поэтому ответ равен 3

E. Игра с конфетами

битмаски дп игры поиск в глубину и подобное реализация *2000

Карлсон опять прилетел в гости к Малышу. Дома у Малыша они нашли коробку конфет и большой торт со взбитыми сливками. Карлсон сразу же предложил Малышу честно поделить найденное. А именно — сыграть с ним в игру с конфетами, которую он придумал только что. Победитель в качестве приза получит торт.

Коробка конфет имеет форму шестиугольника, внутри нее имеется 19 ячеек для конфет, в некоторых из них находятся конфеты. Игроки ходят по очереди. За ход разрешается съесть одну или несколько конфет, лежащих в соседних ячейках на одной линии, параллельной одной из сторон коробки. На картинке ниже показаны примеры допустимых и недопустимого ходов. Проигрывает игрок, который не может сделать ход.

Карлсон ходит первым — ведь это он в гостях у Малыша, а не наоборот. Игроки играют оптимальным образом. Определите, кому достанется торт.

Входные данные

Входные данные содержат 5 строк, которые содержат 19 слов, состоящих из одного символа. Слово «O» означает, что в данной ячейке находится конфета, «.» — что данная ячейка пуста. Гарантируется, что в коробке имеется хотя бы одна конфета. Смотрите примеры для более точного понимания.

Выходные данные

Если торт достанется Карлсону — выведите «Karlsson» (без кавычек), иначе выведите «Lillebror» (опять же без кавычек).

E. Мультипликативная сумма

геометрия дп Структуры данных *2600

Хотя Блейк и является начальником Криса, это никак не мешает их дружбе. Обычно по вечерам они собираются вместе в баре и обсуждают там увлекательные задачи, в которых требуется максимизировать какую-нибудь величину. В этот раз им попалась особенная задача...

Пусть дан массив a длины n. Назовём характеристикой массива число — сумму произведений i-го числа в массиве a на число i. Разрешается ровно один раз сделать следующую операцию: выбрать некоторый элемент массива и переставить его в любое место в массиве. В частности, разрешается переставить элемент в начало, в конец или поставить его обратно на ту же позицию. Необходимо получить массив с максимально возможным значением характеристики.

Входные данные

В первой строке входных данных записано одно число n (2 ≤ n ≤ 200 000) — размер массива a.

Во второй строке содержится n целых чисел ai (|ai| ≤ 1 000 000) — элементы массива a.

Выходные данные

Выведите единственное целое число — максимально возможное значение характеристики массива a, если можно переставить ровно один элемент.

Примечание

В первом примере можно удалить первый элемент из массива и вставить его перед третьим (перед числом 5), таким образом получив максимальный ответ: 3·1 + 2·2 + 4·3 + 5·4 = 39.

Во втором примере максимальный ответ можно получить, удалив пятый элемент из массива и вставив его перед третьим: 1·1 + 1·2 + 1·3 + 2·4 + 7·5 = 49.

E. Вор в магазине

бпф дп математика разделяй и властвуй *2400

Вор пробрался в магазин.

Как всегда у него с собой любимый рюкзак. В рюкзаке может поместиться k предметов. В магазине присутствует n типов товаров, причём товаров каждого типа бесконечное количество. Стоимость единицы товара i-го типа равна ai.

Вор жадный, поэтому решил набить рюкзак до отказа. Таким образом, он возьмёт с собой ровно k товаров, причём товары некоторых типов он может взять в нескольких экземплярах.

Определите всевозможные суммы стоимостей товаров, которые могут оказаться в рюкзаке вора.

Входные данные

В первой строке находится пара целых чисел n и k (1 ≤ n, k ≤ 1000) — количество типов товаров и количество предметов, которые вор украдёт.

Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 1000) — стоимости товаров по типам от 1 до n.

Выходные данные

В единственной строке выведите через пробел всевозможные суммы стоимостей товаров, которые могут оказаться в рюкзаке вора. Числа нужно выводить в порядке возрастания.

C. Синдром шпиона 2

дп реализация сортировки Строки строковые суфф. структуры Структуры данных хэши *1900

Яш хочет взломать используемый Сидхантом шифр. После долгих недель наблюдений он понял, что Сидхант шифрует предложения следующим образом:

  1. Перевести все буквы в нижний регистр.
  2. Каждое слово в предложение заменить на развёрнутое.
  3. Удалить все пробелы.

Например, если взять предложение

Kira is childish and he hates losing

и применить к нему данный шифр, то получится строка

ariksihsidlihcdnaehsetahgnisol

Сейчас у Яша есть зашифрованная строка и список слов. Помогите ему найти какое-нибудь исходное предложение, составленное только из слов, встречающихся в списке. Обратите внимание, что любое слово может быть использовано в предложении сколько угодно раз.

Входные данные

В первой строке входных данных записано число n (1 ≤ n ≤ 10 000) — длина зашифрованной строки. Вторая строка содержит саму зашифрованную строку и состоит из n строчных букв английского алфавита.

В третьей строке записано число m (1 ≤ m ≤ 100 000) — количество слов в списке. В каждой из последующих m строк записано непустое слово wi (|wi| ≤ 1 000), состоящее из строчных и заглавных букв английского алфавита. Гарантируется, что суммарная длина всех слов не превосходит 1 000 000.

Выходные данные

Выведите одну строчку, содержащую исходное предложение. Гарантируется, что хотя бы одно решение существует. Если решений несколько, то разрешается вывести любое.

D. Фибоначчиеватость

дп математика Перебор реализация хэши *2000

Яш недавно узнал о числах Фибоначчи. Он так обрадовался этому знанию, что решил называть произвольную последовательность фибоначчиеватой, если

  1. последовательность состоит хотя бы из двух элементов;
  2. f0 и f1 произвольные;
  3. fn + 2 = fn + 1 + fn при всех n ≥ 0.

Вам дана последовательность целых чисел a1, a2, ..., an. Вам требуется переставить элементы последовательности таким образом, чтобы как можно более длинный её префикс был фибоначчиеватой последовательностью.

Входные данные

В первой строке входных данных записано единственное число n (2 ≤ n ≤ 1000) — длина последовательности ai.

Во второй строке записаны n целых чисел a1, a2, ..., an (|ai| ≤ 109).

Выходные данные

Выведите количество элементов в самом длинном возможном фибоначчиеватом префиксе после перестановки элементов.

Примечание

В первом примере, если переставить элементы исходной последовательности следующим образом  - 1, 2, 1, то вся последовательность ai будет фибоначчиеватой.

Во втором примере оптимальным способом переставить элементы является , , , , 28.

F. Шоколадное веселье

графы Деревья дп поиск в глубину и подобное *2600

У Алисы и Боба есть дерево (неориентированный связный ацикличный граф). В i-й вершине дерева лежит ai шоколадок. Сперва ребята выбирают себе стартовые вершины (Алиса выбирает первой) и забирают себе все шоколадки, которые там лежат.

Затем Алиса и Боб ходят по очереди, на каждом ходу выбирая одну вершину и забирая все лежащие там шоколадки. Чтобы разнообразить процесс, они договорились, что каждый из них может выбирать только среди вершин, которые являются соседними по отношению к выбранной этим игроком вершиной на предыдущем ходу. Более того, можно выбирать только вершины, не выбранные до этого никем другим.

Если в какой-то момент времени один из игроков не может сделать ход, он просто ожидает, пока другой игрок сделает все свои ходы. Процесс заканчивается, когда ни Алиса, ни Боб не могут больше сделать ни одного хода.

Поскольку Алиса и Боб — большие сладкоежки, они хотят собрать как можно больше шоколадок. Однако они ещё и друзья, поэтому их волнует только суммарное количество шоколадок, которое они соберут вместе. Найдите это значение, если ребята действуют оптимально.

Входные данные

В первой строке входных данных записано число n (2 ≤ n ≤ 100 000) — количество вершин в дереве.

Во второй строке записаны n целых чисел ai (1 ≤ ai ≤ 109), i-е из которых определяет количество шоколадок в вершине с номером i.

Далее следует n - 1 строка, описывающая дерево. В каждой из них записаны два целых числа ui и vi (1 ≤ ui, vi ≤ n) — индексы вершин, соединённых i-м ребром.

Выходные данные

Выведите, сколько шоколадок смогут собрать Алиса и Боб, если они будут действовать оптимально.

Примечание

В первом примере Алиса начнёт в вершине 9, а Боб в вершине 8. Затем Алиса сделает ход в вершину 1, и Боб будет вынужден остаться на месте. Алиса сделает ход в вершину 7, и игра закончится.

Во втором примере они сразу выберут две вершины и заберут их них все шоколадки.

D. Бег с препятствиями

*особая задача дп жадные алгоритмы Структуры данных *1600

Спортсмен стартует из точки xstart = 0 и бежит в точку с координатой xfinish = m (на прямой). Также спортсмен умеет прыгать — для прыжка он сначала должен взять разбег длины не менее s метров (при этом на протяжении этих s метров на его пути не должно быть препятствий), а после этого он может прыгнуть на длину не более d метров. Бегать и прыгать разрешено только в направлении слева направо. Начинать и заканчивать прыжок можно только в точках с целочисленными координатами, в которых нет препятствий. Чтобы преодолеть какое-то препятствие, нужно приземлиться в точке, которая находится строго правее этого препятствия.

На пути спортсмена есть n препятствий в точках с координатами x1, x2, ..., xn. Пробегать через препятствия нельзя, их можно только перепрыгивать. Перед вами стоит задача определить, сможет ли спортсмен добраться до финишной точки.

Входные данные

В первой строке входных данных следуют четыре целых числа n, m, s и d (1 ≤ n ≤ 200 000, 2 ≤ m ≤ 109, 1 ≤ s, d ≤ 109) — количество препятствий на пути бегуна, координата финишной точки, длина разбега перед прыжком и максимальная длина прыжка соответственно.

Во второй строке следует последовательность из n целых чисел a1, a2, ..., an (1 ≤ ai ≤ m - 1) — координаты препятствий. Гарантируется, что в стартовой и финишной точке нет препятствий, а также в одной точке не может быть более одного препятствия. Координаты препятствий заданы в произвольном порядке.

Выходные данные

Если бегун не сможет добраться до финишной точки, выведите в первую строку выходных данных «IMPOSSIBLE» (без кавычек).

Если же спортсмен может добраться от старта до финиша, то выведите любой способ сделать это в следующем формате:

  • выведите строку вида «RUN X» (где «X» должно быть целым положительным числом), если очередные «X» метров спортсмен должен бежать;
  • выведите строку вида «JUMP Y» (где «Y» должно быть целым положительным числом), если спортсмен начинает прыжок и очередные «Y» метров должен находиться в полете.

Все команды «RUN» и «JUMP» должны строго чередоваться, начиная с «RUN», а также они должны быть выведены в хронологическом порядке. Не разрешается перепрыгивать финишную точку, но разрешается в ней приземляться после прыжка. Спортсмен должен остановиться, как только достигнет финиша.

D. Маленький Артёмка и случайные величины

дп математика реализация Теория вероятностей *2400

Маленький Артёмка решил изучить теорию вероятностей. Он нашёл отличный задачник и прорешал его почти полностью. Однако есть задача, с которой он никак не может справиться, поэтому просит вас помочь ему.

Имеются два игральных кубика, на которых при броске выпадают целочисленные значения от 1 до n. Для каждого кубика каждое значение выпадает с некоторой фиксированной вероятностью (разумеется, сумма этих вероятностей равна 1), при этом для разных кубиков эти вероятности могут отличаться.

Оба кубика бросаются одновременно, после чего вычисляются значения max(a, b) и min(a, b), где a равно значению, выпавшему на первом кубике, а b равно значению, выпавшему на втором кубике. Вам неизвестны вероятности выпадения конкретных значений на кубиках, но вы знаете для каждого x, с какой вероятностью max(a, b) будет равно x и с какой вероятностью min(a, b) будет равно x. Восстановите любое корректное распределение вероятностей для величин a и b. Гарантируется, что хотя бы одно подходящее распределение существует.

Входные данные

Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 100 000) — количество возможных значений на обоих кубиках.

Во второй строке записан массив из n вещественных чисел с не более чем восемью цифрами после десятичной точки  — распределение вероятности для величины max(a, b), то есть i-е из этих числе равно вероятности того, что max(ab) = i. Гарантируется, что сумма чисел в массиве равна 1. В третей строке записано распределение вероятности для min(a, b) в аналогичном формате.

Выходные данные

Выведите два описания распределений вероятности для величины a (первый кубик) на первой строке и для величины b (второй кубик) на второй строке.

Ваш ответ будет считаться правильным, если вероятность каждого значения max(a, b) и min(a, b), вычисленная по предоставленным вами распределениям, будет отличаться от указанных во входных данных не более чем на 10 - 6 по абсолютному значению. Вероятности должны быть неотрицательными вещественными числами, сумма вероятностей внутри одного распределения должна отличаться от 1 не более чем на 10 - 6.

C. Уровни и регионы

дп *2400

Радевуш играет в компьютерную игру, которая состоит из n уровней, пронумерованных от 1 до n. Уровни разбиты на k регионов (групп), каждый регион является непустым множеством последовательных уровней.

Игровой процесс состоит в повторении следующих действий:

  1. Если все уровни уже пройдены, то игра немедленно заканчивается. Иначе система определяет первый регион, в котором есть хотя бы один ещё не пройденный уровень. Обозначим этот регион за X.
  2. Создаётся пул для токенов. Каждый токен будет представлять один уровень, при этом несколько токенов могут представлять один и тот же уровень.
    • Для каждого уже пройденного уровня i из региона X система добавляет в пул ti токенов, которые будут представлять этот уровень.
    • Пусть j — это минимальный ещё не пройденный уровень (с минимальным номером) в регионе X. Система добавляет в пул tj токенов.
  3. Затем система случайно и равновероятно выбирает из пула один токен, и игрок проходит соответствующий уровень. На прохождение уровня он тратит один час, независимо от того, проходил он его до этого или нет.

Вам даны n, k и значения t1, t2, ..., tn, требуется разбить уровни на регионы. Каждый уровень должен принадлежать ровно одному региону, и каждому региону должно соответствовать непустое множество последовательных уровней. Чему равно минимальное математическое ожидание времени прохождения игры?

Входные данные

В первой строке входных данных записаны два числа n и k (1 ≤ n ≤ 200 000, 1 ≤ k ≤ min(50, n)) — количество уровней и количество регионов соответственно.

Во второй строке записаны n чисел t1, t2, ..., tn (1 ≤ ti ≤ 100 000).

Выходные данные

Выведите одно вещественное число — минимально возможное математическое ожидание времени прохождения игры, если уровни разбиты на регионы оптимальным способов. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 4.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

В первом примере мы должны разбить 4 уровня на 2 региона. Оптимальным способом будет выделить первый уровень в первый регион, а три уровня со второго по четвёртый — во второй регион.

Во втором примере оптимально будет разбить уровни на 2 региона по 3 уровня в каждом.

E. Медвежонок и уничтожение поддеревьев

Деревья дп математика Теория вероятностей *2700

Лимак — это маленький медвежонок гризли. Однажды он нападёт на страну оленей, но пока что он занимается уничтожением деревьев в компьютерной ролевой игре. Лимак начинает с дерева, состоящего из одной вершины. Эта вершина имеет индекс 1 и является корнем дерева.

Время от времени игра выбирает некоторое поддерево, и Лимак атакует его. Когда Лимак атакует поддерево, он разрушает каждое его ребро независимо с вероятностью . Штрафом Лимака после атаки на поддерево является целое число, равное высоте поддерева после атаки. Высотой поддерева называется самый длинный простой путь, начинающийся в корне поддерева и заканчивающийся в какой-нибудь вершине поддерева.

Вам требуется обрабатывать запросы двух типов.

  • 1 v обозначает запрос первого типа. В дерево добавляется новая вершина, и её родителем является вершина v. Вершина получает минимальный свободный индекс (таким образом, вершины получают номера 2, 3, ...).
  • 2 v обозначает запрос второго типа. Предположим, Лимак атакует поддерево вершины v. Чему в таком случае равно математическое ожидание штрафа, который он получит?

В запросах второго типа только предполагается, что Лимак атакует поддерево, но на самом деле никакие рёбра не разрушаются, и этот запрос никак не влияет на последующие.

Входные данные

В первой строке входных данных записано целое число q (1 ≤ q ≤ 500 000) — количество запросов.

Затем следуют q строк. В i-й из них записаны два целых числа typei и vi (1 ≤ typei ≤ 2). Если typei = 1, то vi означает предка новой вершины, а если typei = 2, то требуется вывести ответ для поддерева, корнем которого является vi.

Гарантируется, что будет хотя бы один запрос второго типа, то есть выходные данные не будут пустыми.

Также гарантируется, что к моменту поступления i-го запроса вершина vi уже существует.

Выходные данные

Для каждого запроса второго типа выведите одно вещественное число — математическое ожидание штрафа Лимака после атаки на соответствующее поддерево. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

На рисунке ниже представлен первый пример. Красными кружочками обозначены запросы второго типа.

F. Медведи и сок

meet-in-the-middle дп математика *2900

В гостинице поселились n медведей, но там есть только p спальных мест. Медведи планируют закатить большую вечеринку на несколько ночей (и дней).

Медведи любят пить сок. Они не любят вино, но не могут отличить его от сока ни по вкусу, ни по запаху.

Медведь ложится спать, только если он выпил вина, при этом он уходит спать через несколько часов после этого. Он проснётся только спустя много дней, когда вечеринка уже будет окончена.

Хозяин гостиницы Радевуш хочет предложить медведям несколько бочек с напитками. При этом ровно одна бочка будет содержать вино, а в остальных будет содержаться сок. После этого Радевуш предложит медведям определить, в какой бочке находится вино.

Каждую ночь происходит следующее (ровно в таком порядке):

  1. Каждый медведь выбирает какой-то (возможно, пустой) набор бочек. Одна и та же бочка может быть выбрана несколькими медведями.
  2. Каждый медведь выпивает по одному стакану из каждой бочки, которую он выбрал.
  3. Все медведи, пившие вино, отправляются спать (то есть те медведи, у которых в множестве выбранных бочек была бочка с вином). Они просыпаются спустя много дней, когда вся вечеринка уже окончена. Если свободных спальных мест недостаточно, то медведи автоматически проигрывают.

В конце вечеринки, если однозначно можно определить, в какой бочке находится вино, и хотя бы один медведь не спит, то медведи выигрывают (если, конечно, они не проиграли раньше, потому что кому-то не хватило спальных мест).

Радевуш хотел бы, чтобы медведи выиграли. Он рассматривает q сценариев игры. В i-м сценарии вечеринка продолжается i ночей. Далее пусть Ri обозначает максимальное количество бочек, для которого медведи точно смогут выиграть, если будут действовать оптимально. Обозначим . Вам требуется вычислить , где означает побитовое исключающее или (также известное как XOR).

Обратите внимание, что одна и та же бочка может быть выбрана несколькими медведями и все они одновременно пойдут спать, если она содержит вино.

Входные данные

В единственной строке входных данных записаны три целых числа n, p и q (1 ≤ n ≤ 109, 1 ≤ p ≤ 130, 1 ≤ q ≤ 2 000 000) — количество медведей, количество спальных мест и количество сценариев соответственно.

Выходные данные

Выведите единственное целое число, равное .

Примечание

В первом примере в гостинице находятся 5 медведей и есть только 1 спальное место. Имеем R1 = 6, R2 = 11, R3 = 16, так что ответ равен . Проанализируем стратегию для сценария с 2 днями. Всего есть R2 = 11 бочек, и 10 из них содержат сок.

  • В первую ночь i-й медведь выбирает бочку i.
    • Если одна из 5 бочек содержит вино, то соответствующий медведь отправится спать. Таким образом, медведи выигрывают, потому они теперь знают где находится вино и есть хотя бы один не спящий медведь.
    • Если никто из 5 медведей не ушёл спать, то на вторую ночь i-й медведь пьёт из бочки 5 + i.
      • Если хотя бы одна из бочек 6 – 10 содержит вино, то соответствующий медведь отправится спать, и медведи победят.
      • Если никто из медведей опять не уйдёт спать, то они точно будут знать, что вино находится в бочке 11.

Во втором примере есть только один медведь. Он не может ничего пить (то есть он выбирает пустое множество бочек каждую ночь), потому что если он уйдёт спать, то медведи сразу проигрывают. Таким образом, для любого числа дней Ri = 1 и ответ равен .

D. Репортаж Результатов Рэпа Роботов

Бинарный поиск графы дп *1800

Пока Фермер Джон строит новую ферму в незнакомой части Бовинии, Бесси решила попробовать себя в новом деле. Она стала репортёром и отвечает в местной газете за репортажи с различных IT-соревнований. Сейчас она освещает результаты Турнира Роботов-Рэперов 2016. Она быстро заметила, что в результатах матчей нет никакой случайности: робот i всегда победит робота j, если его умение читать рэп выше. Если робот i побеждает робота j, и робот j побеждает робота k, то робот i гарантированно победит робота k. Читать рэп такое тонкое искусство, что уровень этого умения у всех роботов разный.

Вам даны результаты матчей в порядке, в котором эти матчи проходили. Определите минимальное количество первых матчей, после которых Бесси уже однозначно может упорядочить роботов по уровню умения читать рэп.

Входные данные

В первой строке входных данных записаны два числа n и m (2 ≤ n ≤ 100 000, ) — количество роботов и количество матчей соответственно.

Следующие m строк описывают результаты матчей в порядке, в котором эти матчи проходили. Каждая строка содержит два индекса ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi), означающих, что робот номер ui победил робота номер vi в i-м матче. Никакая пара роботов не соревновалась дважды.

Гарантируется, что существует хотя бы один порядок роботов, удовлетворяющий всем m результатам.

Выходные данные

Выведите минимальное k, такое что результатов первых k матчей достаточно, чтобы однозначно упорядочить роботов по умению читать рэп. Если существует больше одного порядка роботов, удовлетворяющего результатам всех m матчей, выведите -1.

Примечание

В первом примере роботы могут быть упорядочены от сильнейшего к слабейшему следующим образом: (4, 2, 1, 3). Бесси может однозначно определить этот порядок, зная результаты первых четырёх матчей.

Во втором примере оба порядка (1, 3, 2) и (3, 1, 2) подойдут под результаты всех матчей.

E. Интеллектуальное развитие

дп жадные алгоритмы Строки *2200

После того как Бесси уволили из газеты за незнание алфавита, она решила пойти учиться и устроилась в Академию Филе Миньон. У неё уже наблюдается определённый прогресс: она выучила первые k букв английского алфавита.

Каждое утро Бесси идёт на учёбу вдоль дорожки, состоящей из m + n плиток. Чтобы помочь Бесси не растерять знания, профессор Муузинг нарисовал на каждой из первых m плиток одну из k первых строчных букв английского алфавита, получив строку t. Муузинг восхищён тем, какая Бесси способная ученица, поэтому разрешил ей самостоятельно заполнить буквами оставшиеся n плиток.

Пусть в итоге получится строка s (|s| = m + n), состоящая из букв, написанных на плитках в порядке от дома к академии. Для любой последовательности индексов p1 < p2 < ... < pq можно определить соответствующую подпоследовательность строки s как строку sp1sp2... spq. Две подпоследовательности считаются различными, если различаются соответствующие им строки. Бесси хочет расставить буквы на оставшихся плитках таким образом, чтобы количество различных подпоследовательностей было как можно больше. Поскольку Бесси ещё продолжает учить алфавит, ей явно потребуется ваша помощь!

Обратите внимание, что пустая подпоследовательность тоже учитывается в ответе.

Входные данные

В первой строке входных данных записаны два числа n и k (0 ≤ n ≤ 1 000 000, 1 ≤ k ≤ 26).

Во второй строке находится строка t (|t| = m, 1 ≤ m ≤ 1 000 000), состоящая из первых k строчных букв английского алфавита.

Выходные данные

Определите максимальное количество различных подпоследовательностей, которое может быть у итоговой строки, после того как Бесси заполнит оставшиеся плитки первыми k буквами английского алфавита. Поскольку это число может быть достаточно большим, выведите его по модулю 109 + 7.

Обратите внимание, что вас не просят максимизировать остаток от деления на 109 + 7! Требуется максимизировать изначальное значение, а потом вывести остаток.

Примечание

В первом примере оптимальный способ пометить буквами оставшиеся плитки даёт 8 различных подпоследовательностей: «» (пустая строка), «a», «c», «b», «ac», «ab», «cb» и «acb».

Во втором примере все плитки уже размечены буквами. Существует 10 различных подпоследовательностей: «» (пустая строка), «a», «b», «aa», «ab», «ba», «aaa», «aab», «aba» и «aaba». Обратите внимание, что некоторые строки, например «aa», могут быть прочитаны разными способами, но учитываются только один раз.

B. Просмотр фотографий

Бинарный поиск дп Перебор *1900

В телефоне Васи есть n фотографий. На экране телефона в текущей момент открыта фотография номер 1. Можно перемещаться влево и вправо на соседнюю фотографиями с помощью одного движения пальца по экрану (пролистывания). Если после первой фотографии пролистнуть влево, откроется фотография номер n. Аналогично, если с фотографии n пролистнуть вправо, то откроется фотография номер 1. На пролистывание до соседней фотографии тратится a секунд.

Про каждую фотографию известно в какой она ориентации — горизонтальной и вертикальной она находится. Телефон находится в вертикальной ориентации и не может быть повёрнут. На смену ориентации картины тратится b секунд.

У Васи есть T секунд, чтобы посмотреть фотографии. За это время он хочет посмотреть как можно больше фотографий. Если Вася видит фотографию в первый раз, то он обязательно захочет её рассмотреть, потратив на это 1 секунду, при необходимости потратив b секунд на поворот фотографии в нужную ориентацию. Если Вася видит фотографию не в первый раз, он ее просто пролистывает (секунда на просмотр не тратится, менять ориентацию фотографии тоже не требуется). Пропускать не просмотренные фотографии не разрешается.

Помогите Васе определить максимальное количество фотографий, которые он успеет просмотреть за T секунд.

Входные данные

В первой строке входных данных следуют четыре целых положительных числа n, a, b, T (1 ≤ n ≤ 5·105, 1 ≤ a, b ≤ 1000, 1 ≤ T ≤ 109) — количество фотографий, время, которое тратится на переход между соседними фотографиями, время, которое тратится на изменение ориентации фотографии и общее время, которое есть у Васи на просмотр фотографий.

Во второй строке следует строка длины n, состоящая из символов 'w' и 'h'.

Если на i-й позиции в строке стоит символ 'w', то фотографию с номером i нужно смотреть в горизонтальной ориентации.

Если на i-й позиции в строке стоит символ 'h', то фотографию с номером i нужно смотреть в вертикальной ориентации.

Выходные данные

Выведите единственное целое число — максимальное количество фотографий, которое успеет рассмотреть Вася за T секунд.

Примечание

В первом тесте из условия можно повернуть первую фотографию (3 секунды), просмотреть первую фотографию (1 секунда), сдвиуться влево (2 секунда), повернуть четвёртую фотографию (3 секунды), просмотреть четвёртую фотографию (1 секунда). На весь процесс уйдёт ровно 10 секунд.

Обратите внимание, в последнем тесте из условия времени не хватает даже на просмотр первой фотографии, при этом её нельзя пропустить.

C. Сжатие таблицы

графы дп жадные алгоритмы поиск в глубину и подобное снм *2200

Петя увлёкся алгоритмами сжатия данных. Он уже изучил форматы gz, bz, zip и несколько других. Воодушевившись новыми знаниями, Петя собрался разработать свой формат сжатия и назвать его dis.

Петя решил сжимать таблицы. У него есть таблица, состоящая из n строк и m столбцов, заполненная целыми положительными числами. Он хочет заменить значения элементов таблицы на целые положительные числа так, чтобы отношение элементов в каждой строке и каждом столбце не изменилось. То есть, если в некоторой строке исходной таблицы ai, j < ai, k, то и в сжатой таблице a'i, j < a'i, k, и если ai, j = ai, k, то a'i, j = a'i, k. Аналогично, если в некотором столбце исходной таблицы ai, j < ap, j, то и в сжатой таблице a'i, j < a'p, j, и если ai, j = ap, j, то a'i, j = a'p, j.

Поскольку большие значения требуют больше места для хранения, максимальное значение элемента получившейся матрицы должно быть как можно меньше.

В теории Петя мастер, но вот писать код он не любит. Помогите ему реализовать формат сжатия dis.

Входные данные

В первой строке входных данных содержатся два числа n и m ( — количество строк и столбцов таблицы соответственно.

В следующих n строках содержится по m целых чисел ai, j (1 ≤ ai, j ≤ 109) — значения элементов таблицы.

Выходные данные

Выведите сжатую таблицу: n строк, содержащих по m чисел.

Если существует несколько ответов, минимизирующих максимальное число, то разрешается вывести любой из них.

Примечание

В первом примере a1, 2 ≠ a2, 1, но, поскольку они не располагаются в одной строке или в одном столбце, при сжатии их можно сделать равными.

D. Канатная дорога

Бинарный поиск дп Структуры данных хэши *2600

Побывав недавно в лесу, Вася решил построить на деревьях канатную дорогу. Он хочет, чтобы дорога была как можно более длинной, но он плохо помнит высоты деревьев в лесу. К счастью, он уверен, что правильно помнит высоты всех деревьев, кроме, возможно, одного из них.

Известно, что лес состоит из n деревьев, стоящих в ряд и пронумерованных слева направо числами от 1 до n. Высота i-го дерева, по воспоминаниям Васи, равна hi. Канатная дорога длины k должна опираться на k (1 ≤ k ≤ n) деревьев i1, i2, ..., ik (i1 < i2 < ... < ik), таких что их высота возрастает, то есть, hi1 < hi2 < ... < hik.

Петя тоже был в лесу, и у него есть q предположений о том, где именно ошибается Вася. Его i-е предположение задаётся числами ai и bi, означающими, что, по мнению Пети, высота дерева с номером ai на самом деле равна bi. Обратите внимание, Петины предположения независимы между собой.

Ваша задача состоит в том, чтобы для каждого предположения Пети найти максимальную длину канатной дороги, которую можно построить с опорой на эти деревья.

Отметим, что в рамках данной задачи длиной дороги Вася считает количество опорных деревьев в ней.

Входные данные

Первая строка входных данных содержит два числа n и m (1 ≤ n, m ≤ 400 000) — количество деревьев в лесу и количество предположений Пети соответственно.

В следующей строке содержатся n целых чисел hi (1 ≤ hi ≤ 109) — высоты деревьев по предположению Васи.

Каждая из следующих m строк содержит по два целых числа ai и bi (1 ≤ ai ≤ n, 1 ≤ bi ≤ 109).

Выходные данные

Для каждого предположения Пети выведите в отдельной строке одно число — максимальную длину канатной дороги.

Примечание

Рассмотрим первый пример. Первое Петино предположение совпадает с предположением Васи. Согласно его второму предположению, высоты деревьев были (4, 2, 3, 4), третьему (1, 2, 3, 3), а по четвёртому предположению — (1, 2, 3, 5).

A. Джойстики

дп жадные алгоритмы математика реализация *1100

Друзья собрались поиграть в приставку. У них есть два джойстика и только одна зарядка. Изначально первый джойстик заряжен на a1 процентов, а второй на a2 процентов. Подключать джойстик к зарядке можно только вначале каждой минуты. За минуту игры джойстик без зарядки разряжается на 2 процента, а с зарядкой заряжается на 1 процент.

Игра продолжается пока заряд обоих джойстиков строго положителен. Таким образом, если в начале очередной минуты у какого-либо джойстика остаётся 1 процент заряда, то его необходимо подключить к зарядке или игра будет остановлена. Если у какого-то джойстика остаётся 0 процентов зарядки, то игра останавливается.

Определите максимальное время в минутах, которое может продлиться игра. Делать паузы в игре нельзя, то есть каждую минуту оба джойстика обязательно должны быть в игре. В силу особенности конструкции, каждый из джойстиков может быть заряжен более чем на 100 процентов.

Входные данные

В первой строке входных данных содержатся два целых положительных числа a1, a2 (1 ≤ a1, a2 ≤ 100) — начальный процент заряда первого и второго джойстика соответственно.

Выходные данные

Выведите единственное целое число — максимальное количество минут, которое может продолжаться игра. Игра продолжается пока какой-либо из джойстиков не разрядится.

Примечание

В первом примере игра может продолжаться 6 минут, например, при такой последовательности действий:

  • в первую минуту подключаем к зарядке первый джойстик и начинаем игру, к концу первой минуты первый джойстик будет заряжен на 4%, а второй — на 3%;
  • не меняя зарядку играем еще минуту, к концу второй минуты первый джойстик будет заряжен на 5%, а второй — на 1%;
  • перед третьей минутой переключаем зарядку на второй джойстик, после нее первый будет заряжен на 3%, второй — на 2%;
  • не меняя зарядку играем еще минуту, к концу второй минуты первый джойстик будет заряжен на 1%, а второй — на 3%;
  • перед пятой минутой переключаем зарядку на первый джойстик, после нее первый будет заряжен на 2%, второй — на 1%;
  • перед шестой минутой переключаем зарядку на второй джойстик, после нее первый будет заряжен на 0%, второй — на 2%.

Так как первый джойстик полностью разрядился, продолжать игру далее нельзя.

B. Медвежонок и сжатие

дп Перебор поиск в глубину и подобное Строки *1300

Полярный медвежонок Лимак терпеть не может длинные строки, поэтому предпочитает сжимать их. К тому же он ещё маленький и знает только первые шесть букв английского алфавита: 'a', 'b', 'c', 'd', 'e' и 'f'.

Имеется q операций сжатия строк. Операции можно применять в любом порядке и каждую можно применить произвольное количество раз. Операция с номером i задаётся строкой ai длины два и строкой bi длины один. Все строки ai различны.

Если у Лимака есть строка s, то он может применить к ней i-ю операцию, только если первые два символа этой строки совпадают со строкой ai. Применение операции заключается в отбрасывании этих двух символов и приписывании в начало строки bi. Для пояснения посмотрите примечание.

Несложно заметить, что применение любой операции уменьшает длину строки s ровно на 1. Также для некоторых наборов операций возможно существование строки, сжатие которой невозможно, потому что первые две буквы не совпадают ни с одной из строк ai.

Лимак хочет начать со строки длины n и применить n - 1 операцию, чтобы в итоге получить строку «a». Сколько существует подходящих строк, из которых можно получить «a»? Не забывайте, что Лимак может использовать только те буквы, которые ему знакомы.

Входные данные

В первой строке записаны два числа n и q (2 ≤ n ≤ 6, 1 ≤ q ≤ 36) — начальная длина строки и количество доступных операций соответственно.

В следующих q строках даны описания операций. В i-й из них записаны строки ai и bi (|ai| = 2, |bi| = 1). Гарантируется, что ai ≠ aj для всех i ≠ j и что все ai и bi состоят только из первых шести строчных букв английского алфавита.

Выходные данные

Выведите количество строк длины n, таких что Лимак сможет перевести в строку «a», используя только имеющиеся q операций.

Примечание

В первом примере существует 4 строки длины 3, из которых Лимак сможет получить строку «a»: "abb", "cab", "cca", "eea".

Для сжатия первой строки Лимаку достаточно два раза применить первую операций (замена «ab» на «a»). Первое применение превратит строку «abb» в «ab», а второе превратит «ab» в «a».

Остальные строки можно превратить в «a» следующим образом:

  • "cab" "ab" "a"
  • "cca" "ca" "a"
  • "eea" "ca" "a"

Во втором примере единственной подходящей строкой является «eb».

G. Забористое разнообразие

дп Комбинаторика теория чисел *2300

Давным-давно Василий Иванович соорудил на своей даче хороший забор. Василий Иванович называет забор хорошим, если он представляет собой ряд из n последовательно скреплённых вертикальных досок сантиметровой ширины, высота каждой из которых — целое положительное число сантиметров. Хозяин дачи прекрасно помнит, что высота i-й слева доски равна hi.

Сегодня Василий Иванович решил изменить конструкцию сооружённого забора, спилив у него сверху связную часть таким образом, чтобы забор остался хорошим. Спиленная часть должна состоять только из верхних частей досок, причём соседние части должны быть соединены между собой (иметь ненулевую длину соприкосновения до выпиливания из забора).

Вам, как любопытному соседу Василия Ивановича, предстоит посчитать количество возможных способов спилить ровно одну часть, как описано выше. Два способа спилить часть называются различными, если для оставшихся заборов существует такое i, что высоты i-х досок различаются.

Поскольку забор Василия Ивановича может быть очень высоким и длинным, найдите остаток от деления искомого количества способов на 1 000 000 007 (109 + 7).

Входные данные

В первой строке содержится число n (1 ≤ n ≤ 1 000 000) — количество досок в заборе Василия Ивановича.

Во второй строке содержатся n разделённых пробелом чисел h1, h2, ..., hn (1 ≤ hi ≤ 109), где hi равно высоте i-й слева доски забора.

Выходные данные

Выведите остаток при делении r на 1 000 000 007, где r — количество способов спилить ровно одну связную часть так, чтобы часть состояла из верхних частей досок и оставшийся забор был хорошим.

Примечание

Из забора первого примера невозможно вырезать ровно одну часть таким образом, чтобы получившийся забор остался хорошим.

Все возможные варианты получившегося забора из второго примера выглядят следующим образом (серым цветом выделена вырезаемая часть):

E. Петя и почта

дп Структуры данных *2000

Дядя маленького Пети работает почтальоном. Почтовые отделения расположены на одной кольцевой дороге, при этом возле каждого почтового отделения есть своя собственная заправочная станция. Работа Петиного дяди заключается в следующем: утром он должен выйти из дома и пойти к какому-нибудь почтовому отделению. В отделении он получает порцию писем и машину. Далее, он должен проехать на полученной машине ровно один круг по кольцевой дороге и вернуться к стартовому почтовому отделению (дядя может проехать круг в любом направлении, как против направления часовой стрелки, так и по направлению часовой стрелки). При этом, так как машина принадлежит почте города, то и заправляться бензином она должна лишь на станциях, принадлежащих почтовым отделениям.

Всего станций ровно n, и на i-ой станции машину можно заправить не более чем на ai литров бензина. При этом на каждой станции можно заправляться не более одного раза. Расстояние между 1-ой и 2-ой станцией составляет b1 километров, между 2-ой и 3-ей — b2 километров, ..., между (n - 1)-ой и n-ой — bn - 1 километров и между n-ой и 1-ой — bn километров. Высокотехнологичная машина Петиного дяди расходует лишь один литр бензина на один километр. Известно, что станции расположены так, что сумма всех ai равна сумме всех bi. Считается, что i-ая заправочная станция и i-ое почтовое отделение находятся очень близко, поэтому расстояние между ними — 0 километров.

Таким образом, становится понятно, что если стартовать с некоторых почтовых отделений, то не всегда можно проехать один круг по кольцевой дороге. Перед дядей появилась задача: узнать, на какие станции он может пойти утром, чтобы можно было проехать ровно один круг по кольцевой дороге и посетить все почтовые отделения, находящиеся на ней.

Петя посещает кружок по программированию, и он вызвался помочь дяде, но его знаний оказалось недостаточно, поэтому он просит вас помочь написать программу, которая решает поставленную задачу.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). Во второй строке записано n целых чисел ai — на сколько литров бензина можно заправить машину на i-ой станции. В третьей строке записано n целых чисел b1, b2, ..., bn — расстояния между 1-ой и 2-ой заправочными станциями, 2-ой и 3-ей, ..., n-ой и 1-ой соответственно. Сумма всех bi равняется сумме всех ai и не превосходит 109. Каждое из чисел ai, bi не меньше чем 1 и не больше чем 109.

Выходные данные

В первой строке выведите число k — количество возможных почтовых отделений, начиная с которых машина может проехать один круг по кольцевой дороге. Во второй строке выведите k чисел в порядке возрастания — номера почтовых отделений, с которых можно стартовать.

C. Сложный процесс

Бинарный поиск дп *1600

Вам задан массив a из n элементов. Каждый элемент массива равен либо 0, либо 1.

Обозначим длину наибольшего подотрезка последовательных элементов в a, состоящего только из единиц, как f(a). Вы можете поменять не более k нулей на единицы, чтобы максимизировать f(a).

Входные данные

В первой строке находится пара целых чисел n и k (1 ≤ n ≤ 3·105, 0 ≤ k ≤ n) — количество элементов в массиве a и значение параметра k.

Во второй строке находятся n целых чисел ai (0 ≤ ai ≤ 1) — элементы массива a.

Выходные данные

В первой строке выведите неотрицательное целое число z — максимальное значение f(a) после не более k изменений нулей на единицы.

Во второй строке выведите n целых чисел aj — элементы массива a после изменений.

Если существует неcколько решений, выведите любое из них.

C. Двоичная табличка

битмаски бпф дп математика Перебор разделяй и властвуй *2600

Дана таблица из n строк и m столбцов. В каждой ячейке таблицы записано число 0 или 1. За один ход разрешается выбрать произвольную строку или столбец и инвертировать все значения, то есть 0 заменить на 1, а 1 на 0. Какого минимального количества единиц в таблице можно добиться, выполняя данные действия?

Входные данные

В первой строке входных данных записаны два числа n и m (1 ≤ n ≤ 20, 1 ≤ m ≤ 100 000) — количество строк в таблице и количество столбцов соответственно.

Следующие n строк описывают строки таблицы. Все они имеют длину m и состоят только из цифр «0» и «1».

Выходные данные

Выведите одно число — минимальное возможное количество единиц после выполнения произвольной последовательности ходов.

E. Взламывать или не взламывать

дп жадные алгоритмы Перебор *3100

Рассмотрим раунд Codeforces, состоящий из трёх задач и использующий динамическую разбалловку.

Дана почти финальная таблица. Для каждого участника (включая вас) известно время, когда он сдал каждую из задач (или не сдал вовсе). Также про каждое из решений известно, можете вы его взломать или нет. Считаем, что единственные изменения до конца раунда — это ваши взломы.

Какое наивысшее место вы можете занимать в конце раунда?

Более формально: в раунде участвуют n человек, включая вас. Если некоторую задачу в конце раунда (после ваших взломов) решило k человек, то максимальный балл за эту задачу определяется следующим образом:

  1. Если n < 2k ≤ 2n, то максимальный балл — 500;
  2. Если n < 4k ≤ 2n, то максимальный балл — 1000;
  3. Если n < 8k ≤ 2n, то максимальный балл — 1500;
  4. Если n < 16k ≤ 2n, то максимальный балл — 2000;
  5. Если n < 32k ≤ 2n, то максимальный балл — 2500;
  6. Если 32k ≤ n, то максимальный балл — 3000.

Пусть максимальный балл за некоторую задачу равен s, тогда если человек не решил эту задачу (или вы взломали его решение), то он получает 0 баллов за эту задачу. Если человек решил данную задачу через t минут после начала раунда (и его решение не было взломано), то его балл за эту задачу равен .

Суммарный балл участника равен сумме его баллов по всем трём задачам плюс по 100 баллов за каждый успешный взлом (взломы делаете только вы).

Ваше место в конце раунда будет определяться как один плюс количество участников, суммарный балл которых строго больше вашего суммарного балла.

Входные данные

В первой строке входных данных задано число n (1 ≤ n ≤ 5000) — количество участников. Вы являетесь участником под номером 1.

Следующие n строк содержат по три целых числа ai, bi и ci. Здесь ai = 0 означает, что участник под номером i не решил первую задачу. 1 ≤ ai ≤ 120 означает, что участник под номером i решил первую задачу через ai минут после начала контеста, и вы не можете взломать его решение.  - 120 ≤ ai ≤  - 1 означает, что участник под номером i решил первую задачу через  - ai минут после начала контеста и вы можете взломать его решение. bi и ci описывают вторую и третью задачи в аналогичном формате.

Гарантируется, что все три числа a1, b1 и c1 неотрицательны.

Выходные данные

Выведите одно число — самое высокое место, которые Вы можете занять, взломав некоторые решения.

Примечание

Рассмотрим первый пример. Если не взламывать ни одно решение, то вы займете первое место (таблица слева). Если же взломать решение третьего участника по первой задаче (единственное, которое вы можете взломать), то максимальный балл за первую задачу изменится, и вы займете второе место (таблица справа).

C. Простые строки

дп жадные алгоритмы Строки *1300

zscoder любит простые строки! Строка t называется простой, если любая пара соседних букв различается. Например, строки ab, aba, zscoder — простые, в то время как строки aa, add не являются таковыми.

У zscoder есть строка s. Он хочет изменить в ней наименьшее количество букв, чтобы строка s стала простой. Помогите ему с этой задачей!

Входные данные

В единственной строке находится строка s (1 ≤ |s| ≤ 2·105) — строка, которая есть у zscoder. Строка s состоит только из строчных английских букв.

Выходные данные

Выведите простую строку s' — строку s после минимального количества изменений. Если существует несколько решений, можете вывести любое из них.

Обратите внимание, что строка s' также должна состоять только из строчных английских букв.

F. Четыре делителя

дп математика сортировки Структуры данных теория чисел *2400

Если число a делится на число b, то b называется делителем числа a.

К примеру, у числа 12 есть 6 положительных делителей. Это числа 1, 2, 3, 4, 6 и 12.

Определим функцию D(n) — количество чисел от 1 до n (включительно), которые имеют ровно четыре положительных делителя.

Между числами 1 и 10 только числа 6, 8 и 10 имеют четыре положительных делителя. Таким образом, D(10) = 3.

Вам задано число n. Найдите значение D(n).

Входные данные

В единственной строке находится целое число n (1 ≤ n ≤ 1011) — параметр из условия задачи.

Выходные данные

Выведите единственное целое число c — количество чисел от 1 до n (включительно) с ровно четырьмя положительными делителями.

A. Ребляндская лингвистика

дп реализация Строки *1800

В Берляндском Государственном Институте Мира и Дружбы готовят первоклассных специалистов. И вы, как один из самых талантливых людей в Берляндии, обучаетесь именно в нём. Учёба нелегка, ведь от выпускников требуются фундаментальные знания в очень многих зачастую совершенно не связанных друг с другом областях.

Например, среди прочего, вы должны хорошо знать лингвистику. И последние месяцы на этом предмете вы изучаете структуру иностранного для студентов Ребляндского языка. В этом языке слова строятся по следующей схеме. Сначала выбирается корень слова, состоящий не менее чем из пяти букв. Затем к слову приписывается несколько строк длиной 2 или 3 символа. Единственное ограничение — нельзя приписывать одну и ту же строку подряд два или более раз. Все эти строки считаются суффиксами слова (в смысле морфемы, а не последних нескольких символов, как вы, возможно, привыкли).

Одно из упражнений, которое вы встретили в своём задании, выглядит следующим образом. Вам дано слово s, и вам необходимо найти все различные строки длины 2 или 3, которые могли оказаться его суффиксами, учитывая правила построения слов в Ребляндском языке.

Две строки считаются различными, если у них разная длина или существует позиция, в которой в этих строках записаны различные символы.

В задании также разобран следующий пример: дано слово abacabaca. Его возможно получить следующими способами: , где надчеркиваниями обозначен корень слова, а «уголками» — суффиксы. Таким образом, множество возможных суффиксов для этого слова: {aca, ba, ca}.

Входные данные

В единственной строке находится строка s (5 ≤ |s| ≤ 104), состоящая из строчных букв английского алфавита.

Выходные данные

В первой строке выведите целое число k — количество различных возможных суффиксов. В следующих k строках выведите сами суффиксы.

Строки нужно выводить в лексикографическом (алфавитном) порядке.

Примечание

Первый тест разобран выше в основной части условия задачи.

Во втором примере строка имеет длину 5. Так как корень имеет длину не менее 5, то никакая строка не может быть использована в качестве суффикса.

A. Пристрастный учитель

графы дп жадные алгоритмы реализация *1800

По итогам учебного года учитель решил поощрить своих учеников — раздать им немного ирисок. Он попросил n учеников встать в ряд. Так как учитель очень пристрастен, то он руководствуется следующим правилом при раздаче ирисок.

Он смотрит на первых двух учеников и даёт больше ирисок тому из них, у которого выше оценки. Если у этих двух учеников одинаковые оценки, то они получают одинаковое количество ирисок. Процесс раздачи проходит аналогичным образом для любой пары рядом стоящих учеников, начиная с первого и заканчивая последним.

Известно, что каждый ученик получит как минимум одну ириску. Вам следует найти, сколько ирисок учитель даёт каждому ученику, таким образом, чтобы общее количество розданных ирисок было наименьшим.

Входные данные

В первой строке входного файла записано количество учеников n (2 ≤ n ≤ 1000). Во второй строке содержатся (n - 1) знаков, состоящих из "L", "R" и "=". Для каждой пары рядом стоящих учеников "L" означает, что у ученика слева оценки выше, "R" значает, что выше оценки у ученика справа, а "=" означает, что у обоих оценки одинаковые.

Выходные данные

Содержит n целых чисел, записанных через пробел — сколько ирисок получит каждый ученик в очереди, начиная с первого и заканчивая последним.

C. Последовательность мячей

дп *2600

Ваш учитель дал вам последовательность мячей A, в которой каждый мяч обозначен строчной буквой латиницы 'a'-'z'. Вам не нравится заданная последовательность, вы фанат последовательности B. Чтобы превратить последовательность A в последовательность B вы можете выполнять следующие операции.

  • Вы можете вставлять в последовательность любой мяч, обозначенный любой буквой, в любое место последовательности.
  • Вы можете удалять (изымать) любой мяч из любого места последовательности.
  • Вы можете заменить любой мяч последовательности любым другим мячом.
  • Вы можете поменять местами два соседних мяча в последовательности.

Теперь ваш учитель ввел ограничения по времени на каждую операцию, то есть операцию можно выполнить только за определенное время. Таким образом, на первую операцию требуется ti единиц времени, на вторую — td, на третью — tr, а на четвертую — te. Также дано, что te ≥ ti + td.

Найдите наименьшее время, необходимое для того, чтобы переделать последовательность A в последовательность B.

Входные данные

В первой строке входного файла записаны через пробел четыре целых числа ti, td, tr, te (0 < ti, td, tr, te ≤ 100). В следующих двух строках записаны последовательности A и B каждая на отдельной строке. Длина каждой строки находится на интервале от 1 до 4000 букв включительно.

Выходные данные

Выведите единственное целое число — наименьшее время, необходимое для того, чтобы переделать A в B.

Примечание

Во втором примере можно было удалить мяч, обозначенный 'a', из первой позиции, а затем можно было вставить ещё одну 'a' в конец последовательности, затратив шесть единиц времени. Однако, если поменять мячи местами, то тогда будет затрачено три единицы времени.

D. Оптический эксперимент

Бинарный поиск дп Структуры данных *1900

Профессор Фансак Ванду провел некоторые оптические эксперименты на лучах света. Установка для проведения эксперимента для n лучей выглядит следующим образом.

Есть прямоугольная коробка, в которой ровно n отверстий на противоположных гранях. Все лучи проникают сквозь отверстия с первой стороны и выходят из отверстий с другой стороны коробки. Ровно один луч может проникать через каждое отверстие или выходить из него. Отверстия на каждой грани лежат на одной прямой, а сами грани параллельны и симметричны друг другу.

Профессор Ванду продемонстрировал ученикам свои эксперименты. Он показал, что есть случаи, когда все лучи пересекаются всеми остальными лучами. Один любопытный ученик спросил: "Профессор, есть некоторые группы лучей, в которых все лучи в данной группе пересекают все остальные лучи в данной группе. Можем ли мы определить количество лучей в наибольшей из таких групп?".

И вот профессор Ванду в затруднении. Зная ваш интеллект, он просит вас помочь ему.

Входные данные

Первая строка содержит n (1 ≤ n ≤ 106), количество лучей. Вторая строка содержит n различных целых чисел: i-ое целое число xi (1 ≤ xi ≤ n) показывает, что xi-ый луч проходит через i-ое отверстие. Подобным образом, третья строка содержит n различных целых чисел: i-ое целое число yi (1 ≤ yi ≤ n) показывает, что yi-ый луч исходит из i-го отверстия. Все лучи пронумерованы от 1 до n.

Выходные данные

Выходные данный содержат единственное целое число — количество лучей в наибольшей группе лучей, в которой все пересекают друг друга.

Примечание

Рисунок для первого теста показан выше. В первом тесте следует вывести 3, так как лучи номер 1, 4 и 3 пересекаются друг с другом, то есть 1 пересекает 4 и 3, 3 пересекает 4 и 1, а 4 пересекает 1 и 3. Таким образом, каждый луч в данной группе пересекается другим лучом. Не существует группы, содержащей более трёх лучей, которая удовлетворяла бы вышеприведенному ограничению.

A. Мусор на переработку

геометрия дп жадные алгоритмы реализация *1800

Сегодня в Кекляндии отмечают день переработки мусора. Чтобы отпраздновать это событие, Адил и Бера решили пойти в центральный парк подбирать валяющиеся на земле бутылки и доносить их до урны.

Центральный парк можно представить как координатную плоскость. На земле лежат n бутылок, i-я из которых находится в точке с координатами (xi, yi). И Адил, и Бера в каждый момент времени могут держать в руках не более одной бутылки каждый.

Процесс уборки для каждого из них выглядит следующим образом:

  1. Определиться, продолжать ли собирать мусор или остановиться.
  2. Если решено продолжить, то выбрать какую-нибудь ещё лежащую на земле бутылку и дойти до неё.
  3. Подобрать эту бутылку и дойти с ней до урны.
  4. Вернуться к шагу 1.

Адил и Бера могут передвигаться независимо. Они могут носить бутылки одновременно, каждую бутылку может подобрать любой их них, и один из них спокойно может стоять и смотреть, как другой собирает бутылки.

Они хотят так организовать процесс сборки бутылок, чтобы суммарное пройденное расстояние (то есть расстояние, пройденное Адилом, сложенное с расстоянием, пройденным Берой) было минимальным. Разумеется, при этом все бутылки должны оказаться в урне.

Входные данные

В первой строке входных данных записаны шесть целых чисел ax, ay, bx, by, tx и ty (0 ≤ ax, ay, bx, by, tx, ty ≤ 109) — изначальные координаты Адила, Беры и урны соответственно.

Во второй строке записано единственное целое число n (1 ≤ n ≤ 100 000) — количество бутылок, валяющихся на земле.

Далее следуют n строк, каждая из которых содержит два целых числа xi и yi (0 ≤ xi, yi ≤ 109) — координаты i-й бутылки.

Гарантируется, что изначально Адил, Бера, урна и все бутылки находятся в разных точках парка.

Выходные данные

Выведите одно вещественное число — минимальное суммарное расстояние, которое придётся пройти Адилу и Бере, чтобы положить все бутылки в урну. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

Рассмотрим первый пример.

Путь Адила: .

Путь Беры: .

Длина пути Адила равняется . Длина пути Беры равняется .

D. Дороги в Юсландии

дп жадные алгоритмы Структуры данных *2900

Мэр Юсландии только что выиграл в лотерею и хочет потратить свои деньги на что-нибудь полезное для города. Например, отремонтировать все дороги.

Юсландия состоит из n перекрёстков, соединённых n - 1 двусторонней дорогой. Известно, что от любого перекрёстка можно добраться до любого другого, используя только данные дороги.

В Юсландии есть только одна компания по ремонту дорог — «РД компани». Офис компании расположен в перекрёстке с номером 1. К сожалению, нельзя просто сказать компании РД, какие дороги дороги нужно отремонтировать. Вместо этого у компании есть m сотрудников, каждый из которых может отремонтировать дороги на некотором конкретном пути. Если заплатить i-му работнику ci монет, то он отремонтирует все дороги на пути от перекрёстка ui до некоторого перекрёстка vi, который находится на пути от ui до перекрёстка 1.

Мэр просит вас нанять такое множество работников, чтобы стоимость ремонта дорог была минимальна. Разрешается, чтобы какая-нибудь дорога была отремонтирована несколько раз.

Если невозможно отремонтировать все дороги, то выведите  - 1.

Входные данные

В первой строке входных данных записаны два числа n и m (1 ≤ n, m ≤ 300 000) — количество перекрёстков и количество работников соответственно.

В каждой из следующих n - 1 строк записаны два целых числа xi и yi (1 ≤ xi, yi ≤ n) — индексы перекрёстков, соединённых i-й дорогой.

Последующие m строк описывают работников, которые могут ремонтировать дороги. Каждое описание состоит из трёх целых чисел ui, vi и ci (1 ≤ ui, vi ≤ n, 1 ≤ ci ≤ 109), это означает, что i-й работник может отремонтировать все дороги на пути от ui до vi за ci монет. Гарантируется, что vi лежит на пути между перекрёстком ui и перекрёстком номер 1. Обратите внимание, что ui и vi могут совпадать.

Выходные данные

Если отремонтировать все дороги невозможно, то выведите  - 1. В противном случае выведите одно целое число — минимальную стоимость ремонта всех дорог.

Примечание

В первом примере можно выбрать работников с индексами 1, 3, 4 и 5. Некоторые дороги будут отремонтированы больше одного раза. Итоговая стоимость будет равна 2 + 3 + 1 + 2 = 8.

E. Электрички и статистика

дп жадные алгоритмы Структуры данных *2300

Вася каждый день ездит на электричке. В Васином городе есть n остановок, причём на i-й остановке можно купить билет до любой остановки от (i + 1)-й до ai-й. На конечной остановке билеты не продаются.

Пусть ρi, j — минимальное количество билетов, которое нужно купить, чтобы добраться от i-й остановки до j-й. Вася любит собирать всякую бесполезную статистику, поэтому он просит вас найти сумму всех значений ρi, j по всем 1 ≤ i < j ≤ n.

Входные данные

В первой строке входных данных записано единственное целое число n (2 ≤ n ≤ 100 000) — количество остановок.

Во второй строке записано n - 1 целое число ai (i + 1 ≤ ai ≤ n) — означающее, что на остановке i можно купить билет на электричку до любой остановки от i + 1 до ai включительно.

Выходные данные

Выведите сумму ρi, j по всем 1 ≤ i < j ≤ n.

Примечание

В первом примере от каждой остановки до каждой можно добраться, купив один билет. Всего пар остановок 6, поэтому ответ тоже равен 6.

Во втором примере

  • ρ1, 2 = 1
  • ρ1, 3 = 2
  • ρ1, 4 = 3
  • ρ1, 5 = 3
  • ρ2, 3 = 1
  • ρ2, 4 = 2
  • ρ2, 5 = 2
  • ρ3, 4 = 1
  • ρ3, 5 = 1
  • ρ4, 5 = 1

Ответ равен 1 + 2 + 3 + 3 + 1 + 2 + 2 + 1 + 1 + 1 = 17.

C. Вася и строка

Бинарный поиск дп Строки *1500

Школьник Вася получил в подарок на день рождения строку длины n, состоящую из букв «a» и «b». Вася называет привлекательностью строки максимальную длину подстроки (последовательности соседних символов), состоящей из одинаковых символов.

Вася может поменять в исходной строке не более k символов. Какой максимальной привлекательности данной строки он сможет добиться?

Входные данные

В первой строке входных данных содержатся два числа n и k (1 ≤ n ≤ 100 000, 0 ≤ k ≤ n) — длина строки Васи и максимальное разрешённое количество изменений.

Во второй строке следует строка Васи, состоящая из букв «a» и «b».

Выходные данные

Выведите единственное целое число — максимальная привлекательность строки, которую Вася может получить, изменив в исходной строке не более k символов.

Примечание

В первом примере Вася может получить как строку «aaaa», так и строку «bbbb».

Во втором примере оптимальный ответ достигается на строке «aaaaabaa» или на строке «aabaaaaa».

D. Ваня и сокровище

графы дп кратчайшие пути Структуры данных *2300

Ваня оказался во дворце, который можно представить как таблицу из комнат размера n × m. В каждой комнате находится ровно один сундук, при этом в комнате в i-м ряду и j-м столбце находится сундук вида aij. При этом в каждом сундуке типа x ≤ p - 1 находится ключ, открывающий любой сундук типа x + 1, а все сундуки типа 1 не заперты. Сундук типа p ровно один, и в нём находится сокровище.

Ваня начинает в клетке (1, 1) (верхний левый угол). Какое минимальное расстояние ему нужно пройти, чтобы получить сокровище? Считается, что расстояние между двумя клетками (r1, c1) (то есть клетки в строке r1 и столбце c1) и (r2, c2) равно |r1 - r2| + |c1 - c2|.

Входные данные

В первой строке входных данных записаны три числа n, m и p (1 ≤ n, m ≤ 300, 1 ≤ p ≤ n·m) — размеры дворца и количество типов сундуков соответственно.

В каждой из последующих n строк находится по m целых чисел aij (1 ≤ aij ≤ p) — типы сундуков в соответствующих комнатах. Гарантируется, что для любого x от 1 до p найдётся хотя бы один сундук такого типа (то есть существуют r и c, такие что arc = x). Также гарантируется, что сундук типа p ровно один.

Выходные данные

Выведите единственное целое число — минимальное расстояние, которое потребуется преодолеть Ване, чтобы забрать сокровище из сундука типа p.

E. Ваня и шарики

Бинарный поиск дп Перебор реализация *2300

Ваня играет в игру, в которой на поле размером n × n в каждой клетке находится шарик со значением 0, 1, 2 или 3. Требуется за один ход уничтожить крест из шариков, такой что произведение значений составляющих его шариков максимально. Кресты из шариков могут быть обычные и повёрнутые. Например:


**o**
**o**
ooooo
**o**
**o**

или


o***o
*o*o*
**o**
*o*o*
o***o

Формально, крест задаётся тремя целыми числами r, c и d, такими что d ≤ r, c ≤ n - d + 1. При этом обычный крест состоит из шариков с координатами (x, y) (здесь x означает номер строки, а y — столбца), такими что выполнено |x - r|·|y - c| = 0 и |x - r| + |y - c| < d. Повёрнутый крест состоит из шариков с координатами (x, y), такими что |x - r| = |y - c| и |x - r| < d.

Ваня хочет узнать максимально возможное произведение значений шариков, образующих один крест. Поскольку ответ может быть слишком большим, Ваня хочет знать это число по модулю 109 + 7.

Входные данные

В первой строке входных данных находится число n (1 ≤ n ≤ 1000) — размерность таблицы с шариками.

В каждой из следующих n строк записано n символов «0», «1», «2» или «3», описывающих значения, записанные в шариках.

Выходные данные

Выведите самое большое возможное произведение по модулю 109 + 7. Обратите внимание, что требуется не максимизировать остаток от деления, а найти максимальное число и вывести его по модулю 109 + 7.

Примечание

В первом примере максимальное произведение достигается на повёрнутом кресте с центром в точке (3, 3) и радиусом 1: 2·2·3·3·3 = 108.

E. Очередной турнир ситхов

битмаски дп математика Теория вероятностей *2200

Всем известны правила турнира ситхов. В турнире сражаются n участников. Турнир начинается со случайного выбора двух ситхов, который проводят первый бой. Как только один из них проигрывает, его место занимает другой, случайно выбранный еще не сражавшийся ситх. Надо ли говорить, что каждый бой турнира ситхов заканчивается смертью одного из соперников? Турнир заканчивается, когда в живых остается лишь один ситх.

Джедай Иван случайно оказался в списке участников такого турнира. Однако его владение светлой стороной силы столь велико, что он способен влиять на исход выбора как участников, которые начнут турнир, так и каждого следующего участника поединка. Разумеется, он не станет упускать подвернувшийся шанс улучшить свое положение. Помогите ему рассчитать, насколько велики его шансы победить в турнире.

Входные данные

В первой строке записано единственное число n (1 ≤ n ≤ 18) — количество участников турнира ситхов.

В каждой из следующих n строк записано n вещественных чисел, образующих матрицу pij (0 ≤ pij ≤ 1). Каждый ее элемент pij равен вероятности того, что i-й участник победит j-го в поединке один на один.

Элементы на главной диагонали pii равны нулю. Для любых различных i, j выполняется pij + pji = 1. Все вероятности указаны не более чем с шестью знаками после запятой.

Джедай Иван находится в списке участников под номером 1.

Выходные данные

Выведите единственное вещественное число — вероятность, с которой Джедай Иван останется в живых по итогам турнира. Абсолютная или относительная погрешность ответа не должна превышать 10 - 6.

B. Медвежонок и башни из кубиков

Бинарный поиск дп жадные алгоритмы *2200

Маленький полярный медвежонок Лимак строит башни из блоков. Каждый блок является кубиком с целочисленной длиной стороны. У Лимака есть неограниченное количество любых блоков.

Блок со стороной a имеет объём a3. Объём башни, составленной из блоков со сторонами a1, a2, ..., ak, равен суммарному объёму всех этих блоков a13 + a23 + ... + ak3.

Лимак собирается построить башню. Сначала он просит вас назвать целое положительное число X — требуемый объём башни. Затем Лимак строит башню жадно, каждый раз выбирая самый большой блок, который можно добавить к текущей башне так, чтобы её объём не превысил X.

Лимак просит вас выбрать некоторое X, не превосходящее m, таким образом, чтобы количество блоков, использованных для постройки башни (по жадному алгоритму), было максимально возможным. Из всех таких X он просит вас выбрать максимальное.

Можете ли вы помочь Лимаку? Найдите максимальное количество блоков, которое может быть использовано при постройке башни объёма X ≤ m, и максимальное подходящее число X, для которого достигается этот результат.

Входные данные

В единственной строке входных данных записано целое число m (1 ≤ m ≤ 1015), означающее, что вы должны выбрать число X в диапазоне от 1 до m включительно.

Выходные данные

Выведите два целых числа — максимально возможное количество блоков в башне и максимальное значение X, на котором это количество блоков достигается.

Примечание

В первом примере можно получить 9 блоков, выбрав X = 23 или X = 42. Поскольку Лимак хочет максимизировать X при равном числе блоков, то он должен выбрать 42.

Рассмотрим процесс постройки башни для X = 42:

  • Лимак выберет блок со стороной 3, поскольку это самый большой блок, объём которого не превосходит 42. Останется 42 - 27 = 15.
  • Далее, Лимак выберет блок со стороной 2, после чего останется 15 - 8 = 7.
  • Наконец, можно брать только блоки со стороной 1, Лимак возьмёт 7 таких блоков.

Таким образом, башня состоит из 9 блоков суммарным объёмом 33 + 23 + 7·13 = 27 + 8 + 7 = 42.

D. Дерево полураспада

дп математика разделяй и властвуй Структуры данных Теория вероятностей *2500

В последнее время Петя очень увлекся физикой. Анна Викторовна, его учительница, заметив Петину тягу к знаниям дала ему увлекательную физическую головоломку — дерево полураспада.

Дерево полураспада представляет собой полное двоичное дерево высоты h. Высота двоичного дерева — максимум среди расстояний (в ребрах) от корня дерева до его листьев. В процессе изучения, Петя добавляет в его вершины электроны, а также вызывает случайный распад дерева с помощью синхрофазотрона. Случайным распадом называется процесс при котором вдоль пути от корня к случайному листку удаляются все ребра. Вероятности выбора листьев равны между собой. Естественно, так как казенное имущество портить ученикам воспрещается, после каждого такого распада Петя возвращает все удаленные ребра на место.

Распавшись, дерево разлагается на компоненты связности. Зарядом такой компоненты называется суммарное количество электронов в вершинах, что принадлежат ей. Потенциалом разрушенного дерева называется максимальный заряд среди его компонент связности. Каждый раз вызывая случайный распад дерева, Петя предварительно хочет знать каково математическое ожидание потенциала дерева после его разрушения.

Входные данные

Первая строка будет содержать два целых числа h и q (1 ≤ h ≤ 30, 1 ≤ q ≤ 105). Далее идут q строк в каждой из которых будет запрос одного из двух типов:

  • add v e

    В вершину с номером v Петя добавляет e электронов (1 ≤ v ≤ 2h + 1 - 1, 0 ≤ e ≤ 104). v и e — целые числа.

    Вершины в дереве нумеруются следующим образом: корень имеет номер 1, потомки вершины x имеют номера 2x и 2x + 1.

  • decay

    Петя провоцирует распад дерева.

Выходные данные

Для каждого запроса decay следует вывести математическое ожидание потенциала дерева после его разрушения. Абсолютная или относительная погрешность ответа не должна превышать 10 - 4.

C. Алёна и дерево

графы Деревья дп поиск в глубину и подобное *1600

Алёна решила сесть на диету и пошла в лес за яблоками. Внезапно она обнаружила волшебное корневое дерево с корнем в вершине 1, на каждом ребре и в каждой вершине которого записаны некоторые числа.

Девочка заметила, что некоторые вершины дерева грустят, поэтому она решила с ними поиграть. Назовем вершину v грустной, если в ее поддереве найдется вершина u, такая что dist(v, u) > au, где au — число, записанное в вершине u, а dist(v, u) — сумма чисел на ребрах на пути от v до u.

Листьями дерева называются вершины, соединенные ребром ровно с одной вершиной, а корень дерева является листом тогда и только тогда, когда дерево состоит из единственной вершины-корня.

Алёна решила удалять листья дерева до тех пор, пока все вершины не перестанут грустить. Какое минимальное количество листьев нужно удалить Алёне?

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 105) — количество вершин в дереве.

Во второй строке входных данных заданы n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109), где ai — число, записанное в вершине i.

В следующих n - 1 строках описываются ребра дерева: в i-й из этих строк записана пара чисел pi и ci (1 ≤ pi ≤ n,  - 109 ≤ ci ≤ 109), означающих, что вершины i + 1 и pi дерева соединены ребром, на котором записано число ci.

Выходные данные

Выведите минимальное количество листьев, которое требуется удалить Алёне, чтобы не осталось ни одной грустной вершины.

Примечание

Процесс удаления листьев дерева из первого примера может выглядеть так:

D. Алёна и строки

дп Строки *1900

Вернувшись из леса, Алёна начала читать книгу. Ее взгляд упал на строки s и t, длины которых равняются n и m соответственно. Как обычно, Алёне быстро наскучило читать, и она решила переключить внимание на строки s и t, которые показались ей очень похожими.

У Алёны есть любимое целое положительное число k, но, так как она еще маленькая, k не превосходит 10. Девочка хочет выбрать k непересекающихся подстрок строки s, таких что они встречаются в строке t как непересекающиеся подстроки в том же порядке, что и в строке s, а их суммарная длина максимальна.

Формально, Алёна хочет найти последовательность из k непустых строк p1, p2, p3, ..., pk, такую что:

  • строка s представима в виде конкатенации a1p1a2p2... akpkak + 1, где a1, a2, ..., ak + 1 — произвольная последовательность строк (возможно, пустых);
  • строка t представима в виде конкатенации b1p1b2p2... bkpkbk + 1, где b1, b2, ..., bk + 1 — произвольная последовательность строк (возможно, пустых);
  • сумма длин строк последовательности максимальна среди всех возможных вариантов.

Помогите Алёне справиться с непростой задачей и найти хотя бы суммарную длину строк искомой последовательности.

Подстрока строки — это непрерывная последовательность букв строки.

Входные данные

В первой строке входных данных содержатся три целых числа n, m, k (1 ≤ n, m ≤ 1000, 1 ≤ k ≤ 10) — длина строки s, длина строки t и любимое число Алёны соответственно.

Во второй строке входных данных содержится строка s, состоящая из строчных букв латинского алфавита.

В третьей строке входных данных задана строка t, состоящая из строчных букв латинского алфавита.

Выходные данные

В единственной строке выведите одно целое неотрицательное число — суммарную длину строк в искомой последовательности.

Гарантируется, что существует хотя бы одна искомая последовательность строк.

Примечание

Картинка, поясняющая второй пример из условия:

A. Разбойничьи часы

дп Комбинаторика математика Перебор *1700

Разбойники, напавшие на карету Герды, уже давным-давно успешно скрываются от королевских преследователей. Чтобы последним было сложнее догадаться о времени очередного нападения, разбойники используют собственные альтернативные часы.

Во-первых, так как королевские воины плохо разбираются в математике, разбойники используют в своих цифровых часах семеричную систему счисления. Во-вторых, они делят сутки на n часов, а час — на m минут. Личные часы каждого разбойника поделены на две части: в первой из них ровно столько разрядов, чтобы показать все возможные значения часа (от 0 до n - 1), а во второй — все возможные значения минут (от 0 до m - 1). В-третьих, если значение часа или минуты умещается в меньшее число разрядов, чем есть в соответствующей части часов, то запись дополняется нулями слева.

Обратите внимание, для записи числа 0 требуется один разряд.

Маленькой разбойнице интересно, сколько в течение дня существует таких моментов времени (то есть фиксированных значений часов и минут), что все цифры на часах в этот момент различны. Помогите ей посчитать это значение.

Входные данные

В первой строке входных данных находятся два целых числа, записанных в десятичной системе счисления, n и m (1 ≤ n, m ≤ 109) — число часов в одном дне и минут в одном часе соответственно.

Выходные данные

В первой строке выходного файла должно содержаться единственное число, записанное в десятичной системе счисления — количество пар значений часа и минуты, таких что все отображаемые на часах цифры различны.

Примечание

Для первого теста все возможные пары будут такими: (0: 1), (0: 2), (1: 0), (1: 2).

Для второго теста все возможные пары будут такими: (02: 1), (03: 1), (04: 1), (05: 1), (06: 1).

A. Разбойничьи часы

дп Комбинаторика математика Перебор *1700

Разбойники, напавшие на карету Герды, уже давным-давно успешно скрываются от королевских преследователей. Чтобы последним было сложнее догадаться о времени очередного нападения, разбойники используют собственные альтернативные часы.

Во-первых, так как королевские воины плохо разбираются в математике, разбойники используют в своих цифровых часах семеричную систему счисления. Во-вторых, они делят сутки на n часов, а час — на m минут. Личные часы каждого разбойника поделены на две части: в первой из них ровно столько разрядов, чтобы показать все возможные значения часа (от 0 до n - 1), а во второй — все возможные значения минут (от 0 до m - 1). В-третьих, если значение часа или минуты умещается в меньшее число разрядов, чем есть в соответствующей части часов, то запись дополняется нулями слева.

Обратите внимание, для записи числа 0 требуется один разряд.

Маленькой разбойнице интересно, сколько в течение дня существует таких моментов времени (то есть фиксированных значений часов и минут), что все цифры на часах в этот момент различны. Помогите ей посчитать это значение.

Входные данные

В первой строке входных данных находятся два целых числа, записанных в десятичной системе счисления, n и m (1 ≤ n, m ≤ 109) — число часов в одном дне и минут в одном часе соответственно.

Выходные данные

В первой строке выходного файла должно содержаться единственное число, записанное в десятичной системе счисления — количество пар значений часа и минуты, таких что все отображаемые на часах цифры различны.

Примечание

Для первого теста все возможные пары будут такими: (0: 1), (0: 2), (1: 0), (1: 2).

Для второго теста все возможные пары будут такими: (02: 1), (03: 1), (04: 1), (05: 1), (06: 1).

B. Кай и снежинки

Деревья дп поиск в глубину и подобное Структуры данных *1900

После того как Каю в глаз попал осколок дьявольского зеркала, его уже не трогала красота роз. Зато он начал любоваться снежинками.

Однажды в сад прилетела большая снежинка, имеющая форму корневого дерева (связного графа без циклов) на n вершинах. Корнем дерева является вершина номер 1. Кай очень заинтересовался его структурой.

После долгого изучения Каю стали интересны ответы на некоторые запросы про q вершин. А именно: для i-го запроса ему интересно, какой номер имеет центроид поддерева vi-й вершины.

Ваша задача — ответить на все запросы Кая.

Поддеревом вершины называется часть дерева, состояющая из этой вершины, а также всех её потомков. Другими словами, поддерево вершины v состоит из таких вершин u, что v обязательно присутствует на пути от u до корня дерева.

Центроидом дерева называется вершина, при удалении которой дерево развалится на компоненты связности, каждая из которых не превосходит по количеству вершин половину числа вершин исходного дерева.

Входные данные

В первой строке входных данных записаны два числа n и q (2 ≤ n ≤ 300 000, 1 ≤ q ≤ 300 000) — размер исходного дерева и количество запросов соответственно.

Во второй строке записаны n - 1 число p2, p3, ..., pn (1 ≤ pi ≤ n) — номера предков вершин с номерами от 2 до n. Вершина 1 является корнем дерева. Гарантируется, что значения pi определяют корректное дерево.

В каждой из последующих q строк записано одно целое число vi (1 ≤ vi ≤ n)  — номер вершины, в поддереве которой надо найти центроид.

Выходные данные

На каждый запрос выведите номер центроида соответствующего поддерева в отдельной строке. Если центроидов в поддереве несколько, выведите любой. Гарантируется, что у каждого поддерева заданного дерева есть хотя бы один центроид.

Примечание

Первый вопрос спрашивает о центроиде всего дерева — это вершина 3, её удаление оставит четыре компоненты связности, две размера 1 и две размера 2.

Поддерево второй вершины состоит только из неё самой, поэтому ответ 2.

Вершина 3 также является центроидом собственного поддерева.

Центроидами поддерева 5 являются вершины 5 и 6 — оба этих ответа являются корректными.

C. Значения, которые возможно набрать

дп *1900

Пари хочет купить у Ария дорогую шоколадку. У неё есть n монет, номинал i-й монеты равен ci. Шоколадка стоит k, поэтому Пари выберет некоторое подмножество монет стоимостью ровно k и отдаст его Арию.

Пари посмотрела на свои монеты и задалась следующим вопросом: после того как она отдаст Арию монеты за шоколадку, какие значения Арий сможет набрать? Пари не хочется, чтобы Арий мог набрать много разных значений. Для каждого x она хочет знать, правда ли, что существует способ заплатить Арию сумму k, так что используя эти монетки он сможет набрать данное x.

Формально, Пари хочет найти все такие x, что из какого-нибудь подмножества монет с суммой k можно выбрать подмножество монет с суммой x, то есть можно выбрать такое подмножество монет для оплаты шоколадки, что Арий сможет потом набрать сумму x.

Входные данные

В первой строке записаны два целых числа n и k (1  ≤  n, k  ≤  500) — количество монет и цена шоколадки соответственно.

В следующей строке записаны n целых чисел c1, c2, ..., cn (1 ≤ ci ≤ 500) — номиналы монет Пари.

Гарантируется, что можно набрать сумму k, используя данные монеты.

Выходные данные

В первой строке выведите единственное число q — количество подходящих x. Затем выведите в возрастающем порядке q целых чисел — суммы, которые Арий сможет набрать при каком-нибудь наборе монет, оплачивающем шоколадку.

E. Майк и геометрическая задача

геометрия дп Комбинаторика реализация Структуры данных *2000

Майк готовится к IMO, но плохо знаком с геометрией, поэтому его учитель дал ему занимательную геометрическую задачу. Пусть f([l, r]) = r - l + 1 — число целых точек в отрезке [l, r] (l ≤ r) (считаем, что ). Даны два числа n и k и n отрезков [li, ri] на оси Ox, и требуется посчитать

Другими словами, требуется посчитать сумму количеств целых точек в каждом из возможных пересечений любых k отрезков.

Так как искомое значение может быть очень большим, выведите его остаток от деления на 1000000007 (109 + 7).

Майк затрудняется решить эту задачу и нуждается в вашей помощи. Вы же не откажете ему в этом, не так ли?

Входные данные

В первой строке содержатся два целых числа n и k (1 ≤ k ≤ n ≤ 200 000) — количество отрезков и количество отрезков в рассматриваемых группах пересечений.

Затем следуют n строк, i-я из которых содержит два целых числа li, ri ( - 109 ≤ li ≤ ri ≤ 109), описывающих i-й отрезок.

Выходные данные

В единственной строке выведите одно целое число — ответ на задачу Майка по модулю 1000000007 (109 + 7).

D. Точка

дп игры *1900

Антон и Даша на переменах любят играть в различные игры на клетчатой бумаге. К 11 классу они успели поиграть во все игры такого типа и попросили программиста Вову придумать им новую игру. Вова предложил им игру под кодовым названием "Точка" со следующими правилами:

  • На клетчатой бумаге рисуется система координат. В позицию (x, y) ставится точка.
  • Ходом является перемещение точки на один из заранее выбранных векторов. Также каждый игрок может один раз за игру симметрично отобразить точку относительно прямой y = x.
  • Антон и Даша ходят по очереди. Первым ходит Антон.
  • Проигрывает тот, после чьего хода расстояние от точки до начала координат превышает d.

Помогите им определить победителя.

Входные данные

В первой строке входного файла находится 4 целых числа x, y, n, d ( - 200 ≤ x, y ≤ 200, 1 ≤ d ≤ 200, 1 ≤ n ≤ 20) — начальные координаты точки, расстояние d и количество векторов. Гарантируется, что изначально точка находится на расстоянии меньшем d от начала координат. В следующих n строках записано по 2 неотрицательных числа xi и yi (0 ≤ xi, yi ≤ 200) — координаты i-ого вектора. Гарантируется, что все векторы ненулевые и различны.

Выходные данные

Cледует вывести "Anton", если при оптимальной игре обоих игроков выигрывает Антон, и "Dasha" в противном случае.

Примечание

В первом тесте Антон ходит на вектор (1;2), и Даша проигрывает. Во втором тесте Даша своим первым ходом перемещает точку так, чтобы ее координаты стали (2;3), и Антон проигрывает, та как у него остается единственный возможный ход — отражение относительно прямой y = x, на который Даша ответит аналогичным ходом и вернет точку в позицию (2;3).

D3. Стена (сложная)

дп *2100

Количество дизайнов для стены поистине огромно! Даже по модулю 106 + 3 это всё ещё очень большое число. Учитывая, что недавно у Хайди появились неистощимые поставки кирпичей, количество вариантов для выбора стало совсем уж неприличным. Ей придётся придумать что-нибудь, чтобы урезать количество вариантов.

Хайди сформулировала критерий полезной стены:

  • В полезной стене, по крайне мере один фрагмент длиннее w кирпичей. Это должно дать зомби возможность разбить свой лоб о стену. Или,
  • в полезной стене, по крайней мере один столбец выше h кирпичей. Это даст возможность наблюдать зомби с удобной и безопасной позиции и обнаружить их заранее.

С помощью этого правила Хайди надеется сильно уменьшим количество подходящих дизайнов. Помогите ей вычислить количество бесполезных стен, которые не удовлетворяют ни одному из условий выше. Другими словами, стена является бесполезной, если каждый её фрагмент имеет ширину не больше чем w и высоту не больше чем h.

Параметр c, суммарная ширина стены, имеет такое же значение, как и в предыдущих версиях данной задачи. Обратите внимание, что количество кирпичей теперь никак не ограничено.

Выведите количество бесполезных стен по модулю 106 + 3.

Входные данные

В первой и единственной строке входных данных записаны три целых числа c, w и h (1 ≤ c ≤ 108, 1 ≤ w, h ≤ 100).

Выходные данные

Выведите количество бесполезных стен по модулю 106 + 3.

Примечание

Если ни в одном столбце нет ни одного кирпича, конструкция считается бесполезной.

F. Couple Cover

дп Перебор теория чисел *2200

"Couple Cover" — популярная игра на удачу, скоро начнётся! Два игрока должны работать сообща, чтобы построить прямоугольник. В мешке, находящемся на столе, лежит n шаров и на каждом из них записано целое число. Первый игрок случайным образом вытаскивает из мешка шар (все шары могут быть выбраны равновероятно). Число записанное на этом шаре будет шириной построенного прямоугольника в метрах. Этот шар не возвращается в мешок и второй игрок достает ещё один шар. Число записанное на этом шаре будет длиной построенного прямоугольника в метрах. Если площадь прямоугольника окажется больше или равна некоторой величины p квадратных метров, то игроки побеждают. В противном случае они проигрывают.

Организаторы игры хотят подобрать подходящее значение p так, что вероятность победы пары будет не очень большой и не очень маленькой, но они считают совсем медленно, поэтому они наняли вас, чтобы ответить на несколько запросов. Вам задан список чисел записанных на шарах и организаторы хотят узнать для нескольких значений p сколько выигрышных пар существует. Обратите внимание, что пары считаются различными, если различается первый или второй шар, и два шара с одинаковым числовым значением считаются различными.

Входные данные

В первой строе находится целое число n (1 ≤ n ≤ 106).

Во второй строке находятся n положительных целых чисел: i-е число равно ai (1 ≤ ai ≤ 3·106) — число, записанное на i-м шаре.

В следующей строке находится целое число m (1 ≤ m ≤ 106) — количество запросов.

Затем следует строка, содержащая m положительных целых чисел: j-е из них равно значению p (1 ≤ p ≤ 3·106) в j-м запросе.

Выходные данные

Для каждого запроса выведите в отдельной строке количество выигрышных пар шаров, существующих для заданного значения p.

C. PLEASE

дп Комбинаторика математика матрицы реализация *2000

Как известно, работа Барни это «PLEASE», и ему в целом нечем заняться на работе, и поэтому он решил сыграть в «чашки и ключ». В этой игре участвуют три одинаковые чашки, выставленные в ряд слева направо. Изначально ключ к сердцу Барни находится под стоящей посередине чашкой.

Затем, за один ход Барни меняет местами чашку посередине с одной из двух других чашек случайным образом (он выберет каждую с одинаковой вероятностью), так что выбранная чашка становится посередине. Игра длится n ходов, и в каждом из них Барни независимо выбирает чашку для обмена со средней на каждом ходу, а ключ всегда остается под чашкой, под которой был в самом начале.

После n-го хода Барни просит девушку указать на чашку, содержащую ключ. Девушка указывает на стоящую посередине чашку, но Барни отвлекся во время игры и не знает, находится ли там ключ или нет. Поэтому Барни просит вас сообщить ему вероятность того, что девушка указала на правильную чашку.

Число ходов n может быть очень большим, поэтому Барни не сообщил вам его. Вместо этого он дал вам массив a1, a2, ..., ak, такой, что

другими словами, n равно произведению чисел данного массива.

Из-за проблем с точностью Барни просит вас сообщить ответ в виде несократимой дроби. Другими словами, найдите ответ в виде p / q, причем , где  — наибольший общий делитель. Так как p и q могут быть очень большими, достаточно вывести остаток от деления каждого из них на 109 + 7.

Заметьте, что мы хотим, чтобы наибольший общий делитель p и q был равен 1, а не наибольший общий делитель их остатков от деления на 109 + 7.

Входные данные

В первой строке содержится единственное целое число k (1 ≤ k ≤ 105) — количество элементов в массиве, данном Барни.

Во второй строке содержатся k целых чисел a1, a2, ..., ak (1 ≤ ai ≤ 1018) — элементы массива.

Выходные данные

В единственной строке выведите строку вида x / y, где x — остаток от деления p на 109 + 7, а y — остаток от деления q на 109 + 7.

D. Леген...

дп матрицы Строки Структуры данных *2500

Последнее время Барни проводил с Норой и ему кажется, что у него есть к ней чувства. Барни хочет отправить ей текстовое сообщение и сделать ее как можно счастливее.

Исходно уровень счастья Норы равен 0. Нора обожает любовные строчки вроде «Я запал на тебя» и подобные. Нора знает всего n любовных строчек, каждая из которых состоит только из строчных букв латинского алфавита, а некоторые из них могут совпадать (в написании, но различаться в произношении или значении). Каждый раз, когда Нора встречает i-ю из известных ей любовных строчек как непрерывную подстроку сообщения Барни, ее уровень счастья увеличивается на ai. Эти подстроки могут пересекаться, к примеру, в тексте aaab она встретит строку aa дважды, а строку ab один раз.

В связи с ограничениями системы сообщений, текстовое сообщение Барни может содержать до l символов.

Барни просит вас помочь ему сделать Нору как можно счастливее, это будет леген...

Входные данные

Первая строка входных данных содержит два целых числа n и l (1 ≤ n ≤ 200, 1 ≤ l ≤ 1014) — количество любовных строчек и максимальная длина текстового сообщения Барни.

Во второй строке содержатся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 100), означающих, что уровень счастья Норы увеличивается на ai каждый раз, когда она видит i-ую любовную строчку.

Следующие n строк содержат любовные строчки. i-ая из них содержит строку si, состоящую только из строчных букв латинского алфавита. Сумма длин любовных строчек не превышает 200.

Все строки во входных данных не пустые.

Выходные данные

Выведите единственное целое число — максимально возможный уровень счастья Норы после прочтения текстового сообщения Барни.

Примечание

Оптимальный ответ в первом примере из условия — hearth, содержащий каждую любовную строчку ровно по одному разу.

Оптимальным ответом во втором примере из условия является строка artart.

A. Каникулы

дп *1400

Каникулы Васи будут длиться n дней! И Вася решил за это время улучшить свои навыки программирования, а также позаниматься спортом. Про каждый из n дней каникул Вася знает, будет ли открыт в этот день спортзал, а также будет ли в интернете в этот день проводиться контест. Для i-го дня возможны четыре варианта:

  1. в этот день закрыт спортзал и не проводится контест;
  2. в этот день закрыт спортзал и проводится контест;
  3. в этот день открыт спортзал и не проводится контест;
  4. в этот день открыт спортзал и проводится контест.

В каждый из дней Вася может либо отдыхать, либо писать контест (если он проводится в этот день), либо заниматься спортом (если открыт спортзал).

Перед вами стоит задача найти минимальное количество дней, в которые Вася будет отдыхать (то есть не будет заниматься спортом и не будет писать контест одновременно). Единственное ограничение от Васи — он не хочет два дня подряд заниматься одним и тем же видом активности, то есть он не будет заниматься спортом два дня подряд и он не будет писать контесты два дня подряд.

Входные данные

В первой строке следует целое положительное число n (1 ≤ n ≤ 100) — количество дней в каникулах Васи.

Во второй строке следует через пробел последовательность целых чисел a1, a2, ..., an (0 ≤ ai ≤ 3), где:

  • ai равно 0, если в i-й день каникул не работает спортзал и не проводится контест;
  • ai равно 1, если в i-й день каникул не работает спортзал, но проводится контест;
  • ai равно 2, если в i-й день каникул работает спортзал и не проводится контест;
  • ai равно 3, если в i-й день каникул работает спортзал и проводится контест.
Выходные данные

Выведите минимально возможное количество дней, в которые Вася будет отдыхать. Помните, что Вася отказывается:

  • заниматься спортом в какие-либо два подряд идущих дня,
  • писать контест в какие-либо два подряд идущих дня.
Примечание

В первом тестовом примере Вася может написать контест в день номер 1 и позаниматься спортом в день номер 3. Таким образом, он будет отдыхать всего два дня.

Во втором тестовом примере Вася должен писать контесты в дни с номерами 1, 3, 5 и 7, а в остальные дни заниматься спортом. Таким образом, он не будет отдыхать ни одного дня.

В третьем тестовом примере Вася может позаниматься спортом либо в день номер 1, либо в день номер 2. Он не может заниматься спортом оба дня, так как это будет противоречить его ограничению. Таким образом, он будет отдыхать один день.

E. Проверка макросов

дп Разбор выражений реализация *2600

Большинство программистов на C/C++ знают об отличных возможностях, предоставляемых директивами препроцессора #define, но также многим известны и проблемы, возникающие при их неаккуратном использовании.

В данной задаче мы рассматриваем следующую модель конструкций #define (также называемых макросами). Каждый макрос имеет свои имя и значение. Объявляется он следующим образом:

#define имя_макроса значение_макроса

После этого объявления везде, где в программе встречается слово "имя_макроса" (как отдельный токен, т.е. как подстрока, окружённая неалфавитными символами), оно заменяется на "значение_макроса". В "значение_макроса" в рамках нашей модели может быть записано только какое-либо арифметическое выражение, содержащее переменные, четыре арифметических операции, скобки, а также имя ранее объявленных макросов (в этом случае замена производится по цепочке). Процесс замены макросов на их значения называется подстановкой.

Одна из основных проблем, возникающих при использовании макросов — когда после выполнения подстановки получается арифметическое выражение, в котором из-за разных приоритетов операций может неожиданно измениться порядок вычисления.

Рассмотрим это на следующем примере. Определим такую конструкцию #define:

#define sum x + y

и пусть далее в программе считается выражение "2 * sum". После подстановки макроса получится выражение "2 * x + y", вместо интуитивно ожидаемого "2 * (x + y)".

Определим "подозрительной" ситуацию, когда после выполнения подстановки макроса порядок вычислений меняется, выходя за пределы какого-либо макроса. Соответственно, Ваша задача — по набору определений #define и заданному выражению определить, является это выражение подозрительным или нет.

Определим это более формально. Выполним обычную подстановку макросов в заданном выражении. Кроме того, выполним "безопасную" подстановку макросов в выражение: окружив значение каждого макроса скобками; после этого, пользуясь арифметическими правилами раскрытия скобок, можно опустить некоторые скобки. Если при этом можно получить выражение, полностью совпадающее с результатом обычной подстановки (посимвольно, но игнорируя пробелы), то это выражение и система макросов считаются корректными, иначе — подозрительными.

Примечание. В этом критерии операция деления рассматривается с математической точки зрения, а не в смысле языка C++ (в котором под ним подразумевается деление нацело). Например, в выражении "a*(b/c)" мы можем опустить скобки и получить выражение "a*b/c".

Входные данные

В первой строке записано единственное число n (0 ≤ n ≤ 100) — число конструкций #define в рассматриваемой программе.

Далее идут n строк, в каждой из которых записана ровно одна конструкция #define. Каждая конструкция имеет вид:

#define name expression

где

  • name — имя макроса,
  • expression — выражение, на которое будет заменяться данный макрос. Выражение — это непустая строка, составленная из чисел, названий переменных, имён ранее объявленных макросов, круглых скобок и знаков операций +-*/. Гарантируется, что выражение (до и после подстановки макросов) является корректным арифметическим выражением, в котором отсутствуют унарные операции. В выражении содержатся только целые неотрицательные числа, не превосходящие 109.

Все имена (имена конструкций #define и имена их аргументов) являются строками из латинских символов, чувствительными к регистру. Гарантируется, что имя любой переменной отлично от имени любой конструкции #define.

Далее, в последней строке записано некоторое выражение expression, для которого и требуется выполнить проверку. Это выражение непусто и удовлетворяет тем же ограничениям, что и выражения в конструкциях #define.

Во входных строках может присутствовать произвольное число пробелов в любом месте, если только эти пробелы не разрывают слово "define" или имена конструкций или переменных. В частности, до и после символа "#" может стоять произвольное число пробелов.

Длина любой строки входного файла не превосходит 100 символов.

Выходные данные

Выведите строку "OK", если выражение корректно с точки зрения критерия, описанного в условии, иначе выведите "Suspicious".

E. Информационная реформа

Деревья дп реализация *2700

Несмотря на то, что уже XXI век на дворе, СМИ в Моржландии не сильно распространены. Оповещение городов ведется с помощью гонцов которые могут путешествовать только по дорогам. Сеть дорог в Моржландии устроена так, что от каждого города до любого другого можно добраться ровно одним способом, и длины дорог равны между собой.

Решением правителя Северного Полюса было принято провести информационную реформу. Было решено выбрать несколько городов и назначить их областными центрами. На обслуживание областного центра приходится тратить k рыбликов (местная валюта) в год. Считается, что областной центр всегда имеет информацию о последних новостях.

Каждому городу, не являющемуся областным центром, было принято решение назначить областной центр, который будет отвечать за информированность этого города. В таком случае затраты на обслуживание равняются dlen рыбликам в год, где len — расстояние от города до соответствующего областного центра, измеряемое в количестве дорог, которые надо проехать.

Ваша задача минимизировать расходы на проведение реформы.

Входные данные

В первой строке заданы два целых числа n и k (1 ≤ n ≤ 180, 1 ≤ k ≤ 105).

Во второй строке записано n - 1 целых чисел di, нумерующихся с единицы (di ≤ di + 1, 0 ≤ di ≤ 105).

В следующих n - 1 строках заданы пары номеров городов соединенных дорогой.

Выходные данные

В первой строке выведите минимальное количество рыбликов, затрачиваемых на обслуживание за один год. Во второй строке выведите n чисел, где i-ое число будет обозначать номер областного центра, который был назначен i-ому городу. Если i-й город сам является областным центром, то следует вывести число i.

Если решений несколько, выведите любое.

B. Соединяя университеты

графы Деревья дп поиск в глубину и подобное *1800

Древляндия — это страна в которой n городов, соединенных n - 1 двусторонней дорогой так, что из любого города можно проехать в любой другой по дорогам.

В Древляндии 2k университетов, расположенных в разных городах.

Недавно Президент подписал указ о соединении университетов высокоскоростной сетью. Министерство образования по своему поняло этот указ, решив что для экономии усилий достаточно каждый университет соединить кабелем с некоторым другим. Формально, указ окажется выполнен!

Для того, чтобы в бюджет заложили максимальную сумму в министерстве решили так разбить университеты на пары, что суммарная длина потраченного кабеля будет максимальна. Иными словами, сумма расстояний между университетами в k парах должна быть как можно больше.

Помогите министерству найти искомую максимальную сумму расстояний. Конечно, каждый университет должен попасть ровно в одну пару. Считайте, что все дороги равны по длине между собой и имеют длины равные 1.

Входные данные

В первой строке входных данных записаны два целых числа n и k (2 ≤ n ≤ 200 000, 1 ≤ k ≤ n / 2) — количество городов в Древляндии и количество пар университетов. Считайте, что города пронумерованы от 1 до n.

Вторая строка содержит 2k различных чисел u1, u2, ..., u2k (1 ≤ ui ≤ n) — номера городов, в которых содержатся университеты.

Следующая n - 1 строка содержит описания дорог. В каждой из этих строк записана пара целых чисел xj, yj (1 ≤ xj, yj ≤ n), которая обозначает, что j-я дорога соединяет города xj и yj. Все дороги двунаправлены. Из любого города можно проехать до любого другого, двигаясь вдоль дорог.

Выходные данные

Выведите искомую максимальную сумму расстояний при делении университетов на пары.

Примечание

На рисунке ниже представлено одно из возможных оптимальных разбиений на пары для первого тестового примера. Если соединить кабелем университеты номер 1 и 6 (отмечены красным цветом) и университеты номер 2 и 5 (отмечены синим цветом), то суммарное расстояние будет равно 6, что является максимальной суммой для данного примера.

A. Наибольшее возрастание

дп жадные алгоритмы реализация *800

Вам задан массив, состоящий из n целых чисел. Перед вами стоит задача определить наибольшую длину возрастающего подмассива заданного массива.

Подмассивом называется последовательность подряд идущих элементов массива. Подмассив называется возрастающим, если каждый из его элементов строго больше предыдущего.

Входные данные

В первой строке следует целое положительное число n (1 ≤ n ≤ 105) — количество чисел.

Во второй строке следует n целых положительных чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

Выведите наибольшую длину возрастающего подмассива заданного массива.

E. Мишка и делители

дп теория чисел *2600

Вдоволь наигравшись со своим красивым массивом, Мишка решила углубиться в изучение математики. Научившись умножать и делить и изучив понятие кратности, она заинтересовалась следующей задачей.

Дано целое число k и массив целых чисел a1, a2, ..., an длины n. Необходимо найти такую непустую подпоследовательность элементов заданного массива, что произведение её элементов кратно k, а её размер минимален.

Формально, требуется найти последовательность индексов 1 ≤ i1 < i2 < ... < im ≤ n, такую, что делится на k, а m принимает наименьшее возможное значение.

Если же существует несколько таких подпоследовательностей, то следует выбрать ту из них, сумма элементов которой минимальна.

Мишка быстро справилась с этой задачей. А сможете ли Вы?

Входные данные

В первой строке входных данных содержатся два целых числа n и k (1 ≤ n ≤ 1 000, 1 ≤ k ≤ 1012).

Во второй строке входных данных содержатся n целых чисел a1,  a2,  ...,  an (1 ≤ ai ≤ 1012) — элементы массива.

Выходные данные

В первой строке выведите целое положительное число — количество элементов в искомой подпоследовательности.

Во второй строке выведите m различных целых чисел — последовательность индексов элементов исходного массива, входящих в искомую подпоследовательность.

Если искомых последовательностей несколько (то есть подпоследовательностей из наименьшего количества элементов с минимально возможной суммой элементов), то разрешается вывести любую из них.

Если таких последовательностей не существует, выведите  - 1 в единственной строке.

B. Человек-муравей

графы дп жадные алгоритмы *2500

Скотт Лэнг враждует с Дареном Кроссом. Они находятся в зале, где расположены n стульев, пронумерованных 1, 2, ..., n слева направо. Известно, что стул номер i расположен в точке с координатами xi. Скотт изначально сидит на стуле с номером s, а Кросс сидит на стуле с номером e. Скотт может с любого стула прыгнуть на любой другой (не обязательно соседний). Он хочет начать прыгать со стула номер s, посетить каждый стул ровно один раз и закончить на стуле с номером e, где сидит Кросс.

Как мы знаем, Скотт может сжаться или, наоборот, вырасти (вернуться к нормальному размеру), так что в каждый момент времени он будет либо маленьким, либо большим (нормальным). Изменять свой размер он может только сидя на стуле (но не в воздухе в процессе прыжка). Изменение размера происходит мгновенно, в то время как прыжок занимает определённое время. Прыжок со стула номер i на стул номер j занимает |xi - xj| секунд. Дополнительно некоторое время тратится на то, чтобы оттолкнуться от стула, и на приземление.

Чтобы прыгнуть на стул, расположенный левее, Скотту необходимо стать маленьким, а чтобы прыгнуть направо, требуется, наоборот, стать большим.

Прыжок с i-го стула занимает:

  • ci секунд, если Скотт маленький.
  • di секунд, если Скотт большой.

Приземление на i-й стул занимает:

  • bi секунд, если Скотт маленький.
  • ai секунд, если Скотт большой.

Другими словами, прыжок со стула i на стул j занимает:

  • |xi - xj| + ci + bj секунд, если j < i.
  • |xi - xj| + di + aj секунд, если j > i.

По данным значениям x, a, b, c, d найдите минимальное время, которое понадобится Скотту, чтобы добраться до Кросса, если он хочет посетить все стулья ровно по одному разу.

Входные данные

В первой строке входных данных записаны три целых числа n, s и e (2 ≤ n ≤ 5000, 1 ≤ s, e ≤ n, s ≠ e) — количество стульев, начальная и конечная позиция Скотта.

Во второй строке записаны n целых чисел x1, x2, ..., xn (1 ≤ x1 < x2 < ... < xn ≤ 109).

В третьей строке записаны n целых чисел a1, a2, ..., an (1 ≤ a1, a2, ..., an ≤ 109).

В четвёртой строке записаны n целых чисел b1, b2, ..., bn (1 ≤ b1, b2, ..., bn ≤ 109).

В пятой строке записаны n целых чисел c1, c2, ..., cn (1 ≤ c1, c2, ..., cn ≤ 109).

В шестой строке записаны n целых чисел d1, d2, ..., dn (1 ≤ d1, d2, ..., dn ≤ 109).

Выходные данные

Выведете минимальное количество секунд, которое придётся потратить Скотту, чтобы допрыгать до Кросса и посетить все стулья ровно по одному разу.

Примечание

В примере из условия возможным оптимальным решением является . Потраченное время равняется 17 + 24 + 23 + 20 + 33 + 22 = 139.

C. Чёрная вдова

графы дп математика реализация *2900

Наталья Романова собирается протестировать новое оружие, которое ей выдали в S.H.I.E.L.D. Чтобы определить результат эксперимента, ей требуется найти количество решений следующего уравнения:

Здесь означает логическое ИЛИ (OR), а означает логическое исключающее ИЛИ (то есть XOR), а vi, j — булевы переменные и их отрицания. Наталья называет левую часть уравнения XNF формулой. Каждое условие в скобках называется клаузой, а переменные vi, j — литералами.

На самом деле в уравнении Натальи левая часть является 2-XNF-2 формулой от переменных x1, x2, ..., xm и их отрицаний. XNF формула называется 2-XNF-2 формулой, если:

  1. ki ≤ 2 для всех 1 ≤ i ≤ n, то есть размер каждой клаузы не превосходит двух.
  2. Каждая переменная встречается в формуле суммарно (как с отрицанием, так и без него) не более чем дважды. Обратите внимание, что переменная может дважды встретиться с отрицанием и ни разу без него (или наоборот).

У Натальи есть формула от m переменных, состоящая из n клауз. Обязательно посмотрите на примеры, чтобы убедиться, что вы правильно понимаете, как задаётся формула.

Наталья больше любит практику, чем теорию, поэтому просит вас найти количество решений уравнения, чтобы уже начать стрелять. Формально, требуется найти количество способов установить значения булевых переменных x1, ..., xm в true или false (всего существует 2m способов), так что равенство будет выполнено. Поскольку это число может быть очень большим, выведите остаток от его деления на 109 + 7.

Обратите внимание, что какая-то переменная может дважды появиться в одной и той же клаузе, а может не появиться вообще ни разу (однако присвоение ей true или false всё равно даёт разные способы).

Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 100 000) — количество клауз и количество переменных соответственно.

В следующих n строках описывается формула. В i-й из них сначала следует число ki — количество литералов в i-й клаузе. Далее следуют ki ненулевых целых чисел ai, 1, ..., ai, ki. Если ai, j > 0, то vi, j равняется xai, j, в противном случае это отрицание x - ai, j (1 ≤ ki ≤ 2,  - m ≤ ai, j ≤ m, ai, j ≠ 0).

Выходные данные

Выведите ответ по модулю 1 000 000 007 (109 + 7).

Примечание

В первом примере уравнение имеет следующий вид:

Во втором примере уравнение выглядит так:

В третьем примере уравнение принимает вид:

B. Интересный напиток

Бинарный поиск дп реализация *1100

Рабочий Василий очень любит отдыхать после работы, поэтому его часто можно встретить в каком-нибудь баре. Как и все программисты, Василий очень любит напиток «Пикола», который продаётся в n различных магазинах города. Известно, что в i-м магазине бутылка напитка стоит xi монет.

Василий планирует покупать одну бутылку своего любимого напитка на протяжении q дней. Он знает, что в i-й день у него с собой будет mi монет, и теперь он хочет для каждого из дней узнать, в каком количестве магазинов он сможет купить одну бутылочку Пиколы.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 100 000) —количество магазинов в городе, продающих любимый напиток Василия.

Во второй строке входных данных содержится n чисел xi (1 ≤ xi ≤ 100 000) — цена за одну бутылку напитка в i-м магазине.

В третьей строке входных данных содержится число q (1 ≤ q ≤ 100 000) —количество дней, в течение которых Василий планирует покупать напиток.

В следующих q строках входных данных содержатся целые числа mi (1 ≤ mi ≤ 109) — количество денег, которое есть у Василия в i-й день.

Выходные данные

Выведите q целых чисел, i-е из которых должно равняться количеству магазинов, в которых Василий может купить одну бутылочку любимого напитка в день i.

Примечание

В первом запросе ни в одном магазине Василию не хватит денег.

Во втором запросе Василию хватит денег, чтобы купить напиток в магазинах под номерами 1, 2, 3 и 4.

В третьем запросе Василию хватит денег, чтобы купить напиток в магазине под номером 1.

И в последнем запросе Василий может купить свой напиток в любом магазине.

C. Сложная загадка

дп Строки *1600

Василий очень любит разные загадки. Сегодня он нашёл загадку, которую не смог решить сам, поэтому он просит вас помочь ему.

У Василия есть n строк, состоящих из строчных букв английского алфавита. Он хочет, чтобы строки располагались в лексикографическом порядке (как в словаре), но при этом не хочет менять их местами. Единственное, что Василий может делать, это разворачивать строки (первая буква становится последней, вторая предпоследней и так далее).

Чтобы развернуть i-ю строку Василию, надо потратить ci единиц энергии. Василия интересует минимальное количество энергии, которое необходимо потратить, чтобы строки шли в лексикографическом порядке.

Строка A лексикографически меньше строки B, если она короче B (|A| < |B|) и является её префиксом, либо ни одна из них не является префиксом другой, и в первой позиции, где они различаются, в строке A стоит символ с меньшим номером.

В данной задаче две одинаковые строки на соседних позициях не нарушают порядок лексикографической сортировки.

Входные данные

В первой строке входных данных записано единственное целое число n (2 ≤ n ≤ 100 000) — количество строк.

Во второй строке записаны n целых чисел ci (0 ≤ ci ≤ 109), i-е из которых равняется количеству энергии, необходимому Василию для разворота i-й строки.

Далее следуют n строк, состоящих из строчных букв английского алфавита. Суммарная длина всех строк не превышает 100 000.

Выходные данные

Если, разворачивая какие-либо из данных строк, невозможно добиться, чтобы они следовали в лексикографическом порядке, то выведите  - 1. В противном случае выведите минимальное количество энергии, которое придётся потратить Василию.

Примечание

Во втором примере можно развернуть строку 2 или строку 3. На разворот строки 3 тратится меньше энергии, поэтому правильным ответом будет развернуть её. В третьем примере обе строки не изменяются после разворота и расположены в неправильном порядке, поэтому ответом является  - 1. В четвёртом примере обе строки состоят из букв «a», но в отсортированном порядке строка «aa» должна располагаться раньше строки «aaa», поэтому ответ  - 1.

C. Центроиды

графы Деревья дп жадные алгоритмы поиск в глубину и подобное Структуры данных *2300

Деревом называется связный неориентированный граф без циклов. Вам дано дерево, состоящее из n вершин, тогда центроидом дерева называется любая вершина, такая что при её удалении размер любой компоненты связности не будет превосходить .

Вам дано дерево размера n и разрешается выполнить не более одной операции перестановки ребра. Перестановкой ребра называется удаление одного ребра из дерева (без удаления инцидентных вершин) и добавление одного нового ребра (без добавления новых вершин) таким образом, что граф остаётся деревом. Требуется для каждой вершины дерева определить, правда ли, что её можно сделать центроидом, выполнив не более одной перестановки ребра.

Входные данные

В первой строке входных данных записано целое число n (2 ≤ n ≤ 400 000) — количество вершин в дереве. Каждая из последующих n - 1 строк содержит пару номеров вершин ui и vi (1 ≤ ui, vi ≤ n), являющихся концами одного из рёбер дерева.

Выходные данные

Выведите n чисел, i-е из которых равно 1, если i-ю вершину можно сделать центроидом, выполнив не более одной перестановки ребра, и 0 в противном случае.

Примечание

В первом тестовом примере любую вершину можно сделать центроидом. Например, чтобы сделать центроидом вершину 1, нужно заменить ребро (2, 3) на ребро (1, 3).

E. Студенческий лагерь

дп математика *3100

Примерный студент МАИ Алёша получил путёвку в студенческий лагерь Алушта на берегу моря. К сожалению, рядом с лагерем наступила пора сильного бриза, и он рискует быть разрушенным!

Здание лагеря представляет собой прямоугольник высотой n + 2 бетонных блока и шириной m блоков. Каждый день бриз дует с моря, и каждый блок, кроме блоков верхнего и нижнего ряда, левее которого нет других неразрушенных блоков, разрушается с вероятностью . Аналогично каждую ночь сильный бриз дует на море, и каждый блок, кроме верхнего и нижнего ряда, правее которого нет других неразрушенных блоков, разрушается с той же вероятностью p. Обратите внимание, что верхние и нижние блоки неразрушимы, то есть всего существует n·m разрушимых блоков.

Время бурь продлится k дней и k ночей. В случае если за это время здание лагеря разделится на хотя бы две компоненты связности, оно разрушится, и Алёше придется искать другое времяпрепровождение на лето.

Найдите вероятность того, что Алёше не придётся искать новое занятие на лето, и он сможет отдохнуть в летнем лагере.

Входные данные

В первой строке входных данных заданы два целых числа n и m (1 ≤ n, m ≤ 1500), определяющие размеры разрушимой части здания.

Во второй строке заданы два целых числа a и b (1 ≤ a ≤ b ≤ 109), задающих вероятность разрушения блоков. Гарантируется, что числа a и b взаимно просты.

В третьей строке задано целое число k (0 ≤ k ≤ 100 000) — количество дней и ночей, в течение которых будет дуть сильный ветер.

Выходные данные

Пусть ответ в виде несократимой дроби равен . Выведите одно целое число, равное . Гарантируется, что при данных ограничениях .

Примечание

В первом тестовом примере каждый из четырёх блоков разрушается с вероятностью . Для того чтобы здание не разрушилось, существует 7 вариантов того, как может выглядеть здание после одного дня, если оно не потеряло связность, то есть искомая вероятность равна , а значит нужно вывести

C. Рыцари круглого стола

дп математика теория чисел *1600

За круглым столом сидят n рыцарей на одинаковом расстоянии друг от друга. Каждый из них пребывает либо в хорошем настроении, либо в плохом.

Волшебник Мерлин предсказал королю Артуру, что грядущий месяц окажется особенно удачливым, если найдется такой правильный многоугольник, что во всех его вершинах находятся рыцари в хорошем настроении. Иначе грядущий месяц сулит неудачи.

Выпуклый многоугольник называется правильным, если все его стороны равны, а так же равные все его углы. В этой задаче мы считаем правильными только многоугольники хотя бы с 3 вершинами, то есть невырожденные.

На рисунке ниже приведены примеры таких многоугольников. Зеленые точки означают рыцарей в хорошем настроении, а красные - в плохом.

Королю Артуру известны настроения всех рыцарей. Помогите ему узнать — будет следующий месяц удачливым или нет.

Входные данные

В первой строке находится число n — количество рыцарей за круглым столом (3 ≤ n ≤ 105). Во второй строке через пробел перечислены настроения всех n рыцарей в порядке обхода стола. «1» означает, что рыцарь пребывает в хорошем настроении, «0» — что в плохом.

Выходные данные

Выведите «YES» без кавычек, если следующий месяц окажется удачливым. Иначе выведите «NO».

E. Ядерный синтез

битмаски дп *2200

Среди физиков-ядерщиков популярна следующая головоломка.

В реакторе находится набор из n атомов некоторых химических элементов. Под словосочетанием «номер атома» мы будем подразумевать номер элемента этого атома в периодической таблице химических элементов.

Разрешается взять любые два различных атома и синтезировать из них один новый. При этом получается атом, номер которого равен сумме номеров исходных атомов. Операцию синтеза можно проводить несколько раз.

Целью является получение нового набора из k атомов, заданного заранее.

Сложность головоломки в том, что разрешается только сливать два атома в один, но не разделять один атом на несколько. Вам предлагается попробовать силы в решении данной головоломки.

Входные данные

В первой строке находятся два целых числа n и k (1 ≤ k ≤ n ≤ 17). Во второй строке через пробел перечислены символы элементов n атомов, которые доступны изначально. В третьей строке через пробел перечислены символы элементов k атомов, которые нужно получить. Символы элементов совпадают с символами из периодической таблицы химических элементов. Номера атомов не превышают 100 (элементы с большим номером крайне нестабильны). Некоторые атомы могут иметь одинаковые номера (то есть может быть несколько атомов одного и того же элемента). Сумма номеров изначальных атомов равна сумме номеров атомов, которые требуется получить.

Выходные данные

Если синтезировать нужные атомы невозможно, то выведите «NO» без кавычек. Иначе выведите в первой строке «YES», а в следующих k строках выведите способ получения каждого из k атомов в виде равенств. Каждое равенство имеет вид «x1+x2+...+xt->yi», где xj — символ элемента некоторого атома из начального набора, а yi — символ элемента некоторого атома из конечного набора. Каждый атом из входных данных должен встретиться в выходных данных ровно один раз. Порядок слагаемых в уравнениях, а так же порядок вывода уравнений не имеет значения. Если решений несколько — выведите любое. Чтобы лучше понять формат вывода — смотрите примеры.

Примечание

Реакции из первого примера имеют вид (слева снизу приписан номер атома):

Для того, чтобы найти периодическую таблицу химических элементов, Вы можете использовать свою любимую поисковую систему.

Набор претестов содержит каждый из первых 100 элементов периодической таблицы хотя бы по одному разу. Вы можете использовать эту информацию для проверки опечаток.

E. Генерация строки

дп поиск в глубину и подобное *2000

zscoder хочет сгенерировать файл входных данных для задачи соревнования по программированию.

Входные данные должны состоять из n букв 'a'. zscoder слишком ленив, чтобы писать генератор, поэтому он сгенерирует файл руками в текстовом редакторе.

Вначале текстовый редактор пуст. zscoder тратит x секунд, чтобы вставить или удалить букву 'a', и y секунд, чтобы скопировать и вставить содержимое всего файла (при этом количество букв 'a' в файле удваивается).

zscoder хочет найти наименьшее количество времени необходимое для создания входного файла из ровно n букв 'a'. Помогите ему определить количество времени необходимое для генерации входных данных.

Входные данные

В единственной строке находятся три целых числа n, x и y (1 ≤ n ≤ 107, 1 ≤ x, y ≤ 109) — количество букв 'a' во входном файле и параметры, описанные в условии задачи.

Выходные данные

Выведите одно целое число t — наименьшее количество времени, необходимое для генерации входных данных.

C. Покраска деревьев

дп *1700

Кодер ZS и Бабуин Крис прибыли в Удайлэнд! Они прогуливались по парку, в котором растут n деревьев. Друзья решили пошалить и покрасить деревья в парке. Деревья пронумерованы целыми числами от 1 до n слева направо.

Изначально, дерево i покрашено в цвет ci. Кодер ZS и Бабуин Крис знают только m цветов, поэтому 0 ≤ ci ≤ m, где ci = 0 означает, что дерево i еще не покрашено.

Кодер ZS и бабуин Крис решили красить только не покрашенные деревья, то есть деревья с ci = 0. Они могут покрасить каждое из них в один из m цветов от 1 до m. Покраска i-ого дерева в цвет j требует pi, j литров краски.

Друзья определяют красоту покраски деревьев как наименьшее количество групп последовательных деревьев (каждая группа содержит некоторый подотрезок деревьев), на которые можно разбить все n деревьев так, что каждая из групп содержит деревья одного цвета. К примеру, если деревья слева направо раскрашены в цвета 2, 1, 1, 1, 3, 2, 2, 3, 1, 3, красота покраски равна 7, так как можно разбить деревья на 7 групп последовательных деревьев одного цвета: {2}, {1, 1, 1}, {3}, {2, 2}, {3}, {1}, {3}.

Кодер ZS и Бабуин Крис хотят покрасить все не покрашенные деревья так, что красота покраски будет в точности равняться k. Друзьям нужна ваша помощь в определении минимального количества краски (в литрах), которая им понадобится для свершения задуманного.

Заметьте, что друзья не могут красить уже покрашенные деревья.

Входные данные

Первая строка содержит три целых числа n, m и k (1 ≤ k ≤ n ≤ 100, 1 ≤ m ≤ 100) — количество деревьев, количество цветов и красоту результата покраски соответственно.

Вторая строка содержит n целых чисел c1, c2, ..., cn (0 ≤ ci ≤ m) — исходные цвета деревьев. ci равно 0, если дерево номер i не покрашено, в противном случае цвет i-го дерева равен ci.

Далее следуют n строк. Каждая из них содержит m целых чисел. j-ое число в i-ой из них равно pi, j (1 ≤ pi, j ≤ 109) — количество литров краски, необходимое для того, чтобы покрасить i-ое дерево в цвет j. pi, j определены и для изначально покрашенных деревьев, но эти деревья все равно не могут быть покрашены.

Выходные данные

Выведите единственное целое число — минимальное количество краски, необходимое для покраски деревьев. Если корректной покраски деревьев красоты k не существует, выведите  - 1.

Примечание

В первом примере из условия покраска деревьев в цвета 2, 1, 1 минимизирует количество используемой краски, равное 2 + 3 + 5 = 10. Заметьте, что 1, 1, 1 не является корректной покраской, так как ее красота равна 1 ({1, 1, 1} является способом разбиения деревьев на одну группу деревьев одного цвета).

Во втором примере из условия все деревья покрашены, но красота покраски равна 3, поэтому правильной покраски не существует и ответ равен  - 1.

В последнем примере из условия все деревья покрашены и красота покраски равна k, поэтому краска не используется и ответ равен 0.

D. Мемори и игра

дп Комбинаторика математика *2200

Мемори и ее друг Лекс соревнуются, кто наберёт большее количество баллов в одной популярной игре. Изначально у Мемори a очков, а у Лекса b очков. За один ход и Мемори, и Лекс получают какое-то количество очков в диапазоне [ - k;k] (то есть одно целое число из множества  - k,  - k + 1,  - k + 2, ...,  - 2,  - 1, 0, 1, 2, ..., k - 1, k) и прибавляют его к своему текущему счёту. Игра состоит ровно из t раундов. Однако, Мемори и Лекс играют довольно плохо, поэтому каждый из них просто получает в каждом из раундов случайное число.

Мемори хочет знать количество различных сценариев игры, в которых у неё в конце будет строго больше очков, чем у Лекса. Два сценария игры считаются различными, если существует раунд, в котором хотя бы один из двух игроков получил разное количество очков. Таким образом, всего существует (2k + 1)2t различных сценариев игры. Поскольку ответ может быть очень большим, выведите остаток от его деления на 109 + 7.

Входные данные

В первой и единственной строке входных данных записаны четыре целых числа a, b, k и t (1 ≤ a, b ≤ 100, 1 ≤ k ≤ 1000, 1 ≤ t ≤ 100) — количество очков и Мемори, и Лекса в начале игры, а также число k и количество раундов соответственно.

Выходные данные

Выведите количество сценариев игры, интересных Мемори по модулю 1 000 000 007 (109 + 7).

Примечание

В первом примере Мемори начинает с 1, а Лекс с 2. Если Лекс получит  - 2 очка, то Мемори может получить 0, 1 или 2, чтобы победить. Если Лекс получит  - 1 очков, то Мемори для победы нужно 1 или 2. Если Лекс получит 0, то Мемори подойдёт только 2. Если же Лекс получит 1 или 2 очка, то Мемори уже не сможет победить. Таким образом, существует 3 + 2 + 1 = 6 возможных сценариев игры, в которых Мемори побеждает.

C. Соня и задача без легенды

дп сортировки *2300

Сова Соня не придумала легенду к этой задаче и просто написала вам формальное условие.

Дан массив длины n, содержащий целые положительные числа. За одну операцию можно увеличить или уменьшить на 1 любое число в массиве. Требуется сделать массив строго возрастающим за минимальное количество операций. Числа можно изменять произвольным образом, в том числе они могут стать отрицательными или равными 0.

Входные данные

Первая строка входных данных содержит единственное число n (1 ≤ n ≤ 3000) — длину массива.

Следующая строка содержит n целых чисел ai (1 ≤ ai ≤ 109).

Выходные данные

Выведите одно число — минимальное количество операций, которое потребуется применить, чтобы массив стал строго возрастающим.

Примечание

В первом примере массив после изменений будет выглядеть так:

2 3 5 6 7 9 11

|2 - 2| + |1 - 3| + |5 - 5| + |11 - 6| + |5 - 7| + |9 - 9| + |11 - 11| = 9

Во второй примере так:

1 2 3 4 5

|5 - 1| + |4 - 2| + |3 - 3| + |2 - 4| + |1 - 5| = 12

E. Тамада Соня

Бинарный поиск дп *3300

Сова Соня решила стать тамадой. Для этого она собрала своих друзей сов на даче. Соня поставила в круг m стульев и последовательно пронумеровала их от 1 до m. Таким образом, стулья i и i + 1 являются соседними для всех i от 1 до m - 1. Также соседними являются стулья 1 и m. На некоторых стульях сидят её друзья, их всего n. Никакие два друга не сидят на одном стуле. Соня придумала следующие правила:

  1. Каждый из участников убирает из игры стул, на котором он сейчас сидит.
  2. Каждый из участников выбирает направление, в котором он будет двигаться, — по часовой стрелке (возрастание номеров, из m переход в 1) или против часовой (убывание номеров, из 1 переход в m). Эти направления могут совпадать или различаться для двух произвольных сов.
  3. Каждый ход гости двигаются на одну позицию в выбранном направлении. Если там находится стул, то он убирается из игры.
  4. Игра заканчивается, когда в кругу не остаётся ни одного стула.

У всех сов есть свои дела, поэтому они хотят закончить игру как можно быстрее. Гости договариваются, кто в каком направлении идет. Их задача — за минимально возможное количество ходов завершить игру. Помогите им в этом.

Входные данные

Первая строка входных данных содержит единственное число m (1 ≤ m ≤ 109) — длину круга.

Вторая строка содержит единственное число n (1 ≤ n ≤ 100 000) — количество друзей.

Следующая строка содержит возрастающую последовательность из n чисел ai (1 ≤ ai ≤ m) — начальные позиции друзей сов.

Выходные данные

Выведите минимальное количество ходов, за которое совы могут завершить игру. В том числе ответом может быть число 0.

Примечание

В первом примере это возможно, если все совы будут двигаться по часовой стрелке, то есть в направлении возрастания номеров позиций.

Во втором примере первой сове требуется двигаться по часовой стрелке, а второй — против.

В третьем примере первая и четвертая сова должны двигаться против часовой стрелки, третья и шестая — по часовой, а вторая и пятая могут двигаться как угодно.

B. Летние приключения R3D3

дп жадные алгоритмы *2700

R3D3 прошёл стажировку в MDCS, заработал достаточно денег и отправился отдыхать на далёкий-далёкий курорт. Там он принимал солнечные ванны, пил безалкогольные коктейли и ходил на концерты популярных местных групп. Слушая группу «Белые пуговицы» и их новый хит «Пекарь Дакан», он заметил девушку-робота и сразу понял, что это любовь его жизни. Ну, или по крайне мере, этого лета. В любом случае, R3D3 оказался слишком стеснительным чтобы подойти к ней первым, поэтому он решил написать ей любовное письмо. Однако и тут его поджидала проблема, поскольку в целях обеспечения безопасности и стабильности Межгалактическая Космическая Полиция проверяла всю почту, отправляемую в данной области. Поэтому R3D3 решил изобрести собственную кодировку для алфавита.

В алфавите R3D3 n букв, и он хочет закодировать каждую из них последовательностью из «0» и «1». При этом, чтобы облегчить расшифровку, он хочет чтобы кодировка любой буквы не являлась префиксом кодировки никакой другой буквы. Поскольку недавно Межгалактическая Космическая Коммуникационная Служба ввела налоги на новоизобретённые кодировки алфавитов, R3D3 придётся заплатит определённую сумму за каждый бит в его кодировку (посмотри комментарий к тесту из примера). Он слишком влюблён чтобы мыслить ясно, поэтому просит вас помочь ему.

Вам даны стоимости c0 и c1, определяющие плату за каждое использование «0» и «1» в кодировке R3D3. Требуется придумать кодировку минимальной стоимости, удовлетворяющую при этом требованию беспрефиксности, описанному выше.

Входные данные

В первой строке входных данных записаны три целых числа n (2 ≤ n ≤ 108), c0 и c1 (0 ≤ c0, c1 ≤ 108) — количество букв в алфавите и стоимости «0» и «1» соответственно.

Выходные данные

Выведите одно целое число — минимальную стоимость кодировки алфавита.

Примечание

В примере в алфавите 4 буквы. Оптимальной кодировкой будет являться «00», «01», «10», «11». Всего использовано 4 нуля и 4 единицы, поэтому итоговая стоимость равна 4·1 + 4·2 = 12.

A. Ефим и странная оценка

дп математика реализация *1700

Ефим только что получил оценку за контрольную работу. Сначала он расстроился, увидев её, поскольку ожидал увидеть более приятный результат. Но затем он придумал хитрый план, как улучшить свой балл.

Ефим учится в необычной школе, так что оценка может выражаться очень длинным дробным числом. За одну секунду Ефим может попросить учителя округлить результат в произвольном месте после запятой (в том числе округлить до целого числа).

До конца перемены осталось t секунд, так что Ефиму нужно незамедлительно действовать. Помогите ему определить максимальный результат, который он сможет получить, потратив на это не более t секунд. Обратите внимание, что Ефим может использовать не все t секунд, в том числе он может вообще ни разу не попросить учителя округлить оценку.

В данной задаче используются классические правила округления: если выполняется округление до разряда n, то смотрят на цифру, стоящую в разряде n + 1. Если эта цифра меньше 5, то разряд n остаётся без изменений, а все последующие цифры заменяются на 0 (и отбрасываются). Если же в разряде n + 1 стоит цифра 5 или больше, то цифра в разряде n увеличивается на 1, выполняются все необходимые переносы (если требуется), все последующие разряды заменяются на 0. В конце все нули обязательно отбрасываются.

Например, если число 1.14 округлить до первого разряда после запятой, то получится 1.1, а если если округлить до целых число 1.5, то получится 2. Округление числа 1.299996121 до пятого знака после запятой даст число 1.3.

Входные данные

В первой строке входных данных содержатся два целых числа n и t (1 ≤ n ≤ 200 000, 1 ≤ t ≤ 109) — длина оценки, полученной Ефимом, и количество секунд до конца перемены соответственно.

Во второй строке записана сама оценка. Гарантируется, что оценка является положительным числом, в ней присутствует хотя бы одна цифра после запятой и её запись не заканчивается на 0.

Выходные данные

Выведите максимальный результат, который может получить Ефим. Не выводите незначащие нули.

Примечание

В первых двух примерах изначальная оценка Ефима 10.245. За первую секунду Ефим может получить 10.25, а за вторую — 10.3. Обратите внимание, что ответ 10.30 будет засчитан как неверный.

В третьем примере Ефиму невыгодно округлять полученную оценку.

D. Андрей и задача по химии

Деревья дп хэши *2900

На уроке химии Андрей узнал, что насыщенные углеводороды (алканы) вступают в реакцию радикального хлорирования. При этом образуется смесь различных хлорпроизводных. Андрей — очень любопытный мальчик, поэтому его заинтересовало, сколько существует различных монохлорпроизводных для заданного алкана. Для небольших молекул Андрей легко справился с этой задачей, но с большими молекулами у него возникли трудности, поэтому он попросил вас решить эту задачу.

Формально, вам дано дерево, состоящее из n вершин, такое что степень каждой вершины не превосходит 4. Требуется посчитать количество различных с точностью до изоморфизма деревьев, которые можно получить путем добавления к данному дереву одной вершины и одного ребра так, чтобы граф оставался деревом и степень каждой вершины не превосходила 4.

Два дерева называются изоморфными, если существует биекция f(v), такая что вершины u и v соединены ребром, если и только если вершины f(v) и f(u) соединены ребром.

Входные данные

В первой строке входных данных задано число n (1 ≤ n ≤ 100 000) — количество вершин в дереве.

В следующих n - 1 строках содержатся описания рёбер. Каждое ребро описывается двумя числами ui и vi (1 ≤ ui, vi ≤ n) — номерами вершин, соединёнными данным ребром. Гарантируется, что заданный граф является деревом, и степень каждой вершины не превышает 4.

Выходные данные

Выведите одно число — ответ на задачу.

Примечание

В первом примере к каждой вершине можно добавить новую, но при этом деревья, полученные добавлением новой вершины к вершинам 1, 3, 4 будут изоморфными, поэтому ответ 2.

Во втором примере к первой вершине добавить новую вершину нельзя так как степень вершины уже равна четырем. А все деревья, полученные добавлением новой вершины к вершинам 2, 3, 4, 5 будут изоморфными, поэтому ответ 1.

G. Проверка Фибоначчи

*особая задача дп *1000

Царь Камбис любит числа Фибоначчи. Напомним, что числа Фибоначчи определяются следующим образом: f0 = f1 = 1, а для любого i ≥ 2: fi = fi - 1 + fi - 2.

Сегодня царь решил собрать новую армию, с количеством солдат, равным n-ому числу Фибоначчи. Помогите ему вычислить это число.

Входные данные

В единственной строке записано одно целое число n (1 ≤ n ≤ 20).

Выходные данные

Выведите одно число — n-ое число Фибоначчи.

D. Слалом

дп сортировки Структуры данных *3100

Девочка Маша очень любит зимние виды спорта, и сегодня ей предстоит пройти лыжный слалом.

Трасса схематически представляет из себя клетчатый прямоугольник n × m. На поле размещены прямоугольные препятствия, занимающие некоторые клетки. Маша должна добраться из клетки с координатами (1, 1), в клетку (n, m). При этом из каждой клетки можно перейти либо на одну клетку вверх, либо на одну клетку вправо. В клетки, в которых расположены препятствия, попадать нельзя.

Таким образом, каждое препятствие можно обойти двумя способами: оно останется либо слева от траектории движения по трассе, либо справа. Маша любит разнообразие, и ей интересно, сколько существует различных способов пройти трассу. Проходы трассы считаются различными, если существует хотя бы одно препятствие, которое в одном проходе находится слева, а в другом справа от траектории Маши.

Ваша задача — помочь Маше узнать количество различных способов пройти трассу. Ответ может быть большим и Машу устроит значение по модулю 109 + 7.

На рисунках ниже разобраны тесты из условия.

Входные данные

В первой строке входных данных содержатся три натуральных числа n, m и k (3 ≤ n, m ≤ 106, 0 ≤ k ≤ 105) — размеры трассы и количество препятствий соответственно.

В следующих k строках находится по четыре натуральных числа x1, y1, x2, y2 (1 ≤ x1 ≤ x2 ≤ n, 1 ≤ y1 ≤ y2 ≤ m) — координаты левого нижнего и правого верхнего угла препятствия.

Гарантируется, что в клетках (1, 1) и (n, m) нет препятствий, и все препятствия не имеют пересечений (но могут касаться).

Выходные данные

В выходной файл выведите единственное число — остаток от деления количества различных способов пройти трассу на число 109 + 7.

C. Путешествие

графы дп *1800

Недавно Ирина поехала отдыхать в один из самых известных городов Берляндии — город Берлятов. В городе находится n достопримечательностей, пронумерованных от 1 до n, некоторые из которых соединены односторонними дорогами. Дороги в Берлятове устроены так, что циклических маршрутов между достопримечательностями не существует.

Изначально Ирина находится у достопримечательности 1, а конечный пункт её путешествия — достопримечательность n. Естественно, Ирина хочет посетить как можно больше достопримечательностей во время своего путешествия. Однако, время пребывания Ирины в Берлятове ограничено, и она может пробыть там не больше T единиц времени.

Помогите Ирине определить, какое наибольшее количество достопримечательностей она сможет посетить на своём пути от достопримечательности 1 до достопримечательности n за время, не превышающее T. Гарантируется, что существует хотя бы один маршрут от достопримечательности 1 до достопримечательности n, на прохождение которого Ирина потратит не более T единиц времени.

Входные данные

В первой строке входных данных находятся три целых числа n, m и T (2 ≤ n ≤ 5000,  1 ≤ m ≤ 5000,  1 ≤ T ≤ 109) — количество достопримечательностей, количество дорог между ними и время пребывания Ирины в Берлятове соответственно.

Следующие m строк описывают дороги в Берлятове. i-я из них содержит 3 целых числа ui, vi, ti (1 ≤ ui, vi ≤ n, ui ≠ vi, 1 ≤ ti ≤ 109), означающая, что существует дорога, ведущая от достопримечательности ui к достопримечательности vi, прохождение которой занимает у Ирины ti единиц времени. Гарантируется, что дороги не образуют циклических маршрутов.

Гарантируется, что между любыми двумя достопримечательностями существует не более одной дороги.

Выходные данные

В первой строке выведите единственное целое число k (2 ≤ k ≤ n) — максимальное количество достопримечательностей, которые Ирина сможет посетить во время своего путешествия от достопримечательности 1 к достопримечательности n за время, не превышающее T.

Во второй строке выведите k различных целых чисел — номера достопримечательностей, которые посетит Ирина на своем пути, в порядке их посещения.

Если ответов несколько, выведите любой.

E. Дорога домой

Бинарный поиск дп *2700

Как-то раз студент Данил поздно возвращался домой от трамвайной остановки по прямой дороге длины L. Остановка находится в точке x = 0, а дом Данила располагается в точке x = L. Данил идет от x = 0 к x = L с постоянной скоростью не меняя направления.

На дороге находятся n фонарей, каждый из которых освещает некоторый непрерывный отрезок дороги. Все n освещенных отрезков не имеют общих точек.

Данил очень любит петь, поэтому во время прогулки он хочет многократно спеть свою любимую песню. Так как неосвещенные участки дороги вызывают у него опасение, то он поёт только тогда, когда идет по освещенным фонарями отрезкам.

За время однократного исполнения любимой песни Данил проходит расстояние p. Данил не может начать очередное исполнение, если отрезок пути во время исполнения не является полностью освещенным. Кроме того, если Данил взял паузу между двумя исполнениями, то он не будет петь, пока не пройдет отрезок пути длины хотя бы t. Формально,

  1. Данил может начать исполнение в точке x, только если каждая точка отрезка [x, x + p] является освещенной;
  2. Если Данил закончил исполнение в точке x + p, то следующее он может начать только в точке y такой, что y = x + p или y ≥ x + p + t, и удовлетворяющей пункту 1.
Синими полукругами отмечены исполнения песни. Обратите внимание, что как только Данил взял паузу в исполнении, он не пел на протяжении пути длины не менее t.

Определите, какое наибольшее количество раз Данил сможет исполнить свою любимую песню по пути из точки x = 0 в точку x = L.

Обратите внимание, что Данил не прерывает исполнение песни, то есть, начав петь в очередной раз, он заканчивает петь, пройдя путь длины p с момента начала исполнения.

Входные данные

В первой строке входных данных содержится четыре целых числа L, n, p и t (1 ≤ L ≤ 109, 0 ≤ n ≤ 100 000, 1 ≤ p ≤ 109, 1 ≤ t ≤ 109) — длина пути Данила, количество фонарей на дороге, расстояние, которое Данил проходит во время исполнения песни и минимальная длина паузы соответственно.

Следующие n строк описывают отрезки, освещаемые фонарями. i-я из них содержит два целых числа li, ri (0 ≤ li < ri ≤ L) — границы отрезка, освещаемого i-м фонарём. Гарантируется, что никакие два отрезка не пересекаются, не вкладываются и не соприкасаются. Отрезки заданы в порядке слева направо.

Выходные данные

Выведите единственное число — наибольшее количество исполнений любимой песни Данилом на пути из точки x = 0 в точку x = L.

Примечание

Первый тест примерно соответствует картинке из условия.

E. Исследовательский зонд

дп Комбинаторика *2900

К сожалению, в этой задаче не удалось написать достаточно короткую формальную постановку, поэтому пришлось придумать легенду.

Исследовательский зонд, наконец, достиг поверхности Марса и готов выполнить свою миссию. К сожалению, из-за сбоя навигационной системы, зонд приземлился не в той точке, в которой планировалось.

Участок, на котором высадился зонд, можно представить в виде клетчатого поля, состоящего из n строк и m столбцов. Будем обозначать через (r, c) клетку, расположенную в строке r и столбце c. Из каждой клетки зонд может продолжить движение только в клетки по соседству с текущей по стороне.

Зонд высадился в клетке с координатами (1, 1) и должен отправиться в клетку с координатами (n, m). Для этого зонд выберет произвольный кратчайший маршрут, соединяющий начальную и конечную клетки. Каждый возможный маршрут зонд выберет с равной вероятностью.

В грузовом отсеке зонда находится батарея, которая понадобится зонду для проведения исследований в конечной точке его маршрута. Изначально заряд батареи равен s единицам энергии.

В некоторых клетках данного поля находятся аномалии. Каждый раз, когда зонд оказывается в клетке с аномалией, батарея теряет половину своего заряда, округлённую вниз, то есть если до попадания в аномалию заряд был равен x, то после попадания он будет равен .

Пока зонд перебирает все возможные маршруты своего путешествия, посчитайте математическое ожидание заряда батареи в момент, когда робот достигнет клетки (n, m). Если в клетках (1, 1) и (n, m) также есть аномалии, то они тоже изменяют заряд батареи.

Входные данные

Первая строка входных данных содержит четыре целых числа n, m, k и s (1 ≤ n, m ≤ 100 000, 0 ≤ k ≤ 2000, 1 ≤ s ≤ 1 000 000) — количество строк и столбцов поля, количество клеток с аномалиями и начальный заряд батареи.

Следующие k строк содержат по два числа ri и ci (1 ≤ ri ≤ n, 1 ≤ ci ≤ m) — координаты клетки, содержащей аномалию. Гарантируется, что никакая клетка не встречается во входном файле более одного раза.

Выходные данные

Ответ всегда можно представить в виде несократимой дроби . Выведите единственное число, равное P·Q - 1 по модулю 109 + 7.

Примечание

В первом примере зонд может выбрать один из шести маршрутов:

  1. , после прохождения клетки (2, 3) заряд становится равным 6.
  2. , после прохождения клетки (2, 3) заряд становится равным 6.
  3. , заряд батареи остаётся равным 11.
  4. , после прохождения клеток (2, 1) и (2, 3) заряд становится равным сначала 6, а затем 3.
  5. , после прохождения клетки (2, 1) заряд становится равным 6.
  6. , после прохождения клетки (2, 1) заряд становится равным 6.

Математическое ожидание заряда батареи в конце пути в данном случае считается по формуле: .

Таким образом, P = 19, а Q = 3.

3 - 1 по модулю 109 + 7 равно 333333336.

19·333333336 = 333333342 (mod 109 + 7)

E. Транспортировка товаров

дп жадные алгоритмы Потоки *2900

Вдоль трассы с односторонним движением расположены n городов. Города пронумерованы числами от 1 до n в порядке проезда вдоль трассы.

В i-м городе было произведено pi единиц товара и может быть продано не более чем si единиц товара.

Для каждой пары городов i и j, таких что 1 ≤ i < j ≤ n, можно не более одного раза перевезти не более чем c единиц товара из города i в город j. Заметьте, что товар можно перевозить только из города с меньшим номером в город с большим номером. Перевозить товары между городами можно в любом порядке.

Определите, какое максимальное количество произведённого товара суммарно может быть продано во всех городах после некоторой последовательности перевозок.

Входные данные

Первая строка входных данных содержит два числа n и c (1 ≤ n ≤ 10 000, 0 ≤ c ≤ 109)  — количество городов и максимальное количество товаров, которое можно перевезти между городами за один раз.

Во второй строке записаны n чисел pi (0 ≤ pi ≤ 109) — количество единиц товара, произведённого в каждом городе.

В третьей строке записаны n чисел si (0 ≤ si ≤ 109) — количество единиц товара, которое может быть продано в каждом городе.

Выходные данные

Выведите одно число — максимальное количество товара, которое может быть продано во всех городах после некоторой последовательности перевозок.

F. Равномерно ветвистые деревья

Деревья дп Комбинаторика *2700

Деревом называется связный граф без циклов.

Два дерева, состоящих из n вершин, называются изоморфными, если существует перестановка p: {1, ..., n} → {1, ..., n} такая, что ребро (u, v) присутствует в первом дереве тогда и только тогда, когда ребро (pu, pv) присутствует во втором.

Вершина дерева называется внутренней, если её степень больше либо равна двум.

Посчитайте количество различных неизоморфных деревьев, состоящих из n вершин, таких что степень каждой внутренней вершины в точности равна d. Ответ выведите по заданному простому модулю mod.

Входные данные

В единственной строке входных данных находятся три числа n, d и mod (1 ≤ n ≤ 1000, 2 ≤ d ≤ 10, 108 ≤ mod ≤ 109) — количество вершин в дереве, необходимая степень внутренних вершин и простой модуль.

Выходные данные

Выведите одно число — количество деревьев, удовлетворяющих условию задачи, взятое по модулю mod.

F. Задачи Поликарпа

Бинарный поиск дп жадные алгоритмы *2300

Поликарп — опытный участник соревнований по программированию Codehorses. Теперь он решил попробовать себя в качестве автора задач.

Он отослал координатору раундов набор из n задач. Каждая задача характеризуется своим качеством, качество i-й задачи равно ai (ai может быть положительно, отрицательно или равно нулю). Задачи отсортированы по предполагаемой сложности, которая никак не связана с качеством. Таким образом, самая простая задача имеет номер 1, а самая сложная — номер n.

В настоящий момент настроение координатора равно q. Известно, что после чтения очередной задачи его настроение изменяется на качество этой задачи, то есть после того, как координатор прочитает задачу с качеством b, к его настроению добавляется величина b. Координатор всегда читает задачи подряд от самой простой к самой сложной, порядок чтения задач изменять нельзя.

Если в какой-то момент текущее настроение координатора становится отрицательным, то он немедленно прекращает чтение и полностью отклоняет весь комплект задач.

Поликарп хочет выбросить минимальное количество задач так, чтобы настроение координатора всегда было неотрицательным. Так как Поликарп не знает точно текущее настроения координатора, то у него есть m гипотез вида «текущее настроение координатора q = bi».

Для каждой из m гипотез найдите минимальное количество задач, которое надо удалить из комплекта, чтобы при чтении оставшихся задач от самой простой к самой сложной настроение координатора всегда было больше или равно 0.

Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ n ≤ 750, 1 ≤ m ≤ 200 000) — количество задач в комплекте и количество гипотез о настроении координатора соответственно.

Во второй строке записаны n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — качество задач в комплекте в порядке увеличения сложности.

В третьей строке содержится m целых чисел b1, b2, ..., bm (0 ≤ bi ≤ 1015) — возможные значения текущего настроения координатора q.

Выходные данные

Выведите m строк, в i-й из них выведите единственное целое число — ответ на задачу для q = bi.

B. Прожекторы

дп реализация *1200

Театральная сцена представляет собой прямоугольное поле размером n × m. Директор театра выдал вам план сцены, согласно которому на ней будут располагаться актёры. На плане отмечено в каких клетках будут стоять актёры, а в каких нет.

Прожектор, установленный на сцену, будет светить в одном из четырёх направлений (если смотреть на план сцены сверху) — влево, вверх, вправо или вниз. Таким образом, под позицией прожектора понимается клетка, в которую он установлен, а также направление, в котором он светит.

Перед вами стоит задача поставить на сцену прожектор в хорошую позицию. Позиция называется хорошей, если одновременно выполняются два условия:

  • в соответствующей ей клетке нет актёра;
  • в направлении, в котором светит прожектор, находится хотя бы один актёр.

Перед вами стоит задача посчитать количество хороших позиций для установки прожектора. Две позиции установки прожектора считаются различными, если отличаются клетки расположения прожектора, или направление, в котором он светит.

Входные данные

В первой строке следует два целых положительных числа n и m (1 ≤ n, m ≤ 1000) — количество строк и количество столбцов в плане.

В следующих n строках следует по m целых чисел, каждое равно либо 0, либо 1, — описание плана. Если очередное число равно 1, то в соответствующей клетке находится актёр, а если 0, то клетка останется пустой. Гарантируется, что в плане есть хотя бы один актёр.

Выходные данные

Выведите единственное целое число — количество хороших позиций для установки прожектора.

Примечание

В первом примере хорошими позициями для установки прожектора являются:

  1. клетка (1, 1) и направление вправо;
  2. клетка (1, 1) и направление вниз;
  3. клетка (1, 3) и направление влево;
  4. клетка (1, 3) и направление вниз;
  5. клетка (1, 4) и направление влево;
  6. клетка (2, 2) и направление влево;
  7. клетка (2, 2) и направление вверх;
  8. клетка (2, 2) и направление вправо;
  9. клетка (2, 4) и направление влево.

Таким образом, в данном примере всего 9 хороших позиций.

F. Игра финансистов

дп *2500

Эта задача имеет нестандартное ограничение по памяти.

Финансистам Игорю и Жене стало скучно вечером, и они решили сыграть в игру. Для этого они приготовили n ценных бумаг, в которых содержится информация о доходе предприятия за какие-то промежутки времени. Обратите внимание, что доход может быть и положительным, и нулевым, и даже отрицательным.

Игорь и Женя выложили все бумаги в ряд и решили ходить по очереди. Игорь будет брать бумаги слева, а Женя справа. Первым ходит Игорь и берет 1 или 2 по своему выбору ценные бумаги слева. Далее, во время очередного хода игрок может взять k или k + 1 бумагу со своей стороны, если игрок, ходивший перед ним, взял ровно k бумаг. Ход пропускать не может ни один из игроков. Игра заканчивается, когда закончатся бумаги на столе, либо когда игрок не сможет сделать ход.

Перед вами стоит задача определить разность между суммой доходов бумаг, которые забрал себе Игорь, и суммой доходов бумаг, которые забрал себе Женя, если оба игрока играют оптимально. Игорь хочет максимизировать разность, а Женя — минимизировать.

Входные данные

В первой строке следует целое положительное число n (1 ≤ n ≤ 4000) — количество бумаг.

Во второй строке следует последовательность из n целых чисел a1, a2, ..., an ( - 105 ≤ ai ≤ 105), где ai равно доходу, информация о котором содержится на i-й бумаге.

Выходные данные

Выведите разность между суммой доходов бумаг, которые забрал себе Игорь, и суммой доходов бумаг, которые забрал себе Женя, если оба игрока играют оптимально. Игорь хочет максимизировать разность, а Женя — минимизировать.

Примечание

В первом примере Игорю выгодно забрать две бумаги слева, получив суммарный доход 4, тогда Женя не сможет сделать ход, так как осталась всего одна бумага, а он может взять либо 2, либо 3 на текущем ходе.

C. LionAge II

дп *1800

Вася играет в LionAge II. Ему надоело играть с глупым компьютером, поэтому он поставил себе эту популярнейшую MMORPG, чтобы сражаться со своими друзьями. Вася придумал имя своему персонажу — непустую строку s, состоящую из маленьких латинских букв. Однако, чтобы не ударить в грязь лицом перед друзьями, Вася решил изменить не более k букв имени персонажа таким образом, чтобы новое имя звучало как можно лучше. Благозвучие строки определяется следующим образом: для каждой пары соседних символов x и y (x находится в строке непосредственно перед y) к результату добавляется бонус c(x, y). Ваша задача определить, какое наибольшее благозвучие можно получить, изменив не более k букв в имени персонажа Васи.

Входные данные

В первой строке содержится имя персонажа s и целое число k (0 ≤ k ≤ 100). Длина непустой строки s не превосходит 100. Во второй строке находится число n (0 ≤ n ≤ 676) — количество пар символов, сочетание которых дает бонус к благозвучию. Далее следует n строк с описанием этих пар в формате «x y c», которое означает, что сочетание xy дает бонус c (x, y — маленькие латинские буквы,  - 1000 ≤ c ≤ 1000). Гарантируется, что никакая пара x y не встречается во входных данных дважды.

Выходные данные

Вывести единственное число — максимально возможное благозвучие нового имени персонажа.

Примечание

В первом примере самым благозвучным именем будет looser. Не трудно посчитать, что его благозвучие составит 36.

I. Olympiad in Programming and Sport

графы дп жадные алгоритмы Потоки *2000

J. Bottles

дп *1900

E. Веселая игра

дп игры *2200

Однажды после очередного написанного соревнования по программированию Петя и Гена решили поиграть в какую-нибудь игру. Так как большинство современных игр кажутся им достаточно скучными, они любят придумывать свои собственные. В доступности нашлись только стикеры и ручки, но это их не остановило.

Они придумали следующую игру. Изначально они расклеили n стикеров в ряд на стене и написали на каждом стикере своё число. Далее они стали совершать ходы по очереди, причём Петя ходит первым.

В течение каждого хода происходит следующее. Пусть на стене сейчас висит m ≥ 2 стикеров. Игрок, которых ходит в данный момент, выбирает целое число k от 2 до m и забирает k стикеров с левого конца ряда себе. После этого он клеит новый стикер с левого конца ряда и пишет на нём число, равное сумме всех чисел на стикерах, которые он забрал себе на этом ходу.

Игра заканчивается, как только на стене остаётся один-единственный стикер. Счёт игрока определяется как сумма чисел, написанных на всех стикерах, которые он забрал себе. Каждый игрок стремится максимизировать разницу между своим количеством очков и количеством очков соперника.

Конечно же, Петя и Гена вкладывают другой смысл в понятие «играть в игру», нежели мы привыкли себе думать. Они уже разобрались, как по значению n и числам, написанным на каждом из стикеров исходно, определить разницу между Петиными и Гениными очками, если они будут играть оптимально. Справитесь ли вы с той же самой задачей?

Входные данные

В первой строке находится целое число n (2 ≤ n ≤ 200 000) — количество стикеров, которые исходно висят на стене.

Во второй строке находится n чисел a1, a2, ..., an ( - 10 000 ≤ ai ≤ 10 000) — числа, написанные на стикерах в порядке слева направо.

Выходные данные

Выведите одно число — разность между количеством очков у Пети и Гены в конце игры, если они играют оптимально.

Примечание

В первом тесте из условия оптимальным ходом для Пети будет сразу взять себе все имеющиеся стикеры, в результате чего счёт Пети составит 14, а счёт Гены — 0.

Во втором тесте из условия оптимальная последовательность ходов для игроков выглядит следующим образом. На первом ходу Петя возьмёт себе первые три стикера и добавит слева от ряда стикер с числом  - 8. На втором ходу Гена возьмёт себе оставшиеся два стикера. Счёт Пети составит 1 + ( - 7) + ( - 2) =  - 8, а счёт Гены — ( - 8) + 3 =  - 5, значит разность очков Пети и Гены составит  - 3.

B. Кормен — лучший друг человека

дп жадные алгоритмы *1000

Недавно Поликарпу наконец купили собаку, которую он назвал Корменом. Теперь у Поликарпа появилось так много хлопот! Например, Кормен очень любит прогулки.

Опытным путем Поликарп установил, что псу требуется не менее k прогулок суммарно за любые два последовательных дня, чтобы чувствовать себя отлично. Например, если k = 5 и вчера Поликарп гулял с собакой 2 раза, то сегодня он должен будет погулять не менее 3-х раз.

Поликарп проанализировал все свои дела на ближайшие n дней вперед и составил последовательность из n целых чисел a1, a2, ..., an, где ai — количество прогулок с собакой, которые он совершит в i-й день, исполняя все свои дела во время них (например, ему надо сходить в магазин, выбросить мусор и так далее).

Помогите Поликарпу определить наименьшее количество прогулок сверх намеченных, которые ему нужно совершить за n дней для того, чтобы Кормен чувствовал себя отлично на протяжении всех n дней. Вы можете считать, что в день до первого и в день после n-го Поликарп выгуливал Кормена ровно по k раз.

Напишите программу, которая найдет наименьшее количество дополнительных прогулок и соответствующее расписание — последовательность целых чисел b1, b2, ..., bn (bi ≥ ai), где bi обозначает суммарное количество прогулок в i-й день.

Входные данные

В первой строке входных данных записаны два целых числа n и k (1 ≤ n, k ≤ 500) — количество дней и минимальное суммарное количество прогулок Кормена за любые два подряд идущих дня.

Во второй строке записаны целые числа a1, a2, ..., an (0 ≤ ai ≤ 500) — количество прогулок Кормена в i-й день, которые уже запланированы Поликарпом.

Выходные данные

В первую строку выведите наименьшее дополнительное количество прогулок, которые нужно совершить за n дней для того, чтобы Кормен всегда чувствовал себя отлично.

Во вторую строку выведите n целых чисел b1, b2, ..., bn, где bi — суммарное количество прогулок в i-й день в соответствии с найденным решением (ai ≤ bi для всех i от 1 до n). Если решений несколько, разрешается вывести любое из них.

C. Эпидемия в Монстрополисе

дп жадные алгоритмы Конструктив *1800

В Монстрополисе эпидемия, все монстры заболели унынием. Чтобы вылечиться, все монстры выстроились на приём к единственному врачу в городе в очередь.

Вскоре монстры проголодались и начали съедать друг друга. Один монстр может съесть другого, если его масса строго больше съедаемого, и они стоят в очереди рядом. Монстры съедают друг друга мгновенно. Никакие два монстра не съедаются одновременно. Когда монстр A съедает монстра B, то масса монстра A увеличивается на массу съеденного монстра B. В результате такого съедания длина очереди уменьшается на единицу, очередь «схлопывается» в позиции съеденного монстра. Один и тот же монстр может съесть последовательно несколько других монстров. Изначально в очереди стояло n монстров, i-й из которых имел массу ai.

Например, если массы монстров в порядке очереди были равны [1, 2, 2, 2, 1, 2] (считайте, что монстры пронумерованы от 1 до 6 слева направо), то некоторые из возможных вариантов:

  • первый монстр не может съесть второго, так как a1 = 1 не больше, чем a2 = 2;
  • второй монстр не может съесть третьего, так как a2 = 2 не больше, чем a3 = 2;
  • второй монстр не может съесть пятого, так как они не стоят рядом;
  • второй монстр может съесть первого, тогда очередь примет вид: [3, 2, 2, 1, 2].

Через некоторое время кто-то очень успешно пошутил, и все монстры вылечились. В итоге осталось k (k ≤ n) монстров, j-й из которых имеет массу bj. Обе последовательности (и a, и b) содержат массы монстров в порядке очереди от первого в очереди к последнему.

От вас требуется предложить один из возможных порядков поедания монстров монстрами, приведший к текущей очереди, или определить, что такого не могло случиться. За время до излечения всех монстров врач не совершил ни одного приема.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 500) — количество монстров в очереди изначально.

Во второй строке входных данных содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 106) — массы монстров изначально.

В третьей строке входных данных содержится целое число k (1 ≤ k ≤ n) — количество монстров в очереди после излечения.

В четвёртой строке входных данных содержится k целых чисел b1, b2, ..., bk (1 ≤ bj ≤ 5·108) — массы монстров после излечения.

Монстры перечислены в порядке их стояния в очереди от начала к концу.

Выходные данные

В случае, если ни какие действия не могли привести к конечной очереди, в единственной строке выходных данных выведите «NO» (без кавычек).

Иначе, в первой строке выходных данных выведите «YES» (без кавычек). В следующих n - k строках выведите действия в хронологическом порядке. В каждой строке выводите x — порядковый номер монстра в текущей очереди, который будет есть, и через пробел символ 'L', если монстр, стоящий x-м по порядку в очереди, ест монстра, стоящего перед ним в очереди, или 'R', в случае, когда монстр, стоящий x-м по порядку в очереди, ест монстра, стоящего за ним в очереди. После очередного съедания очередь пронумеровывается заново.

Когда один монстр съедает другого, очередь схлопывается. Если решений несколько, выведите любое из них.

Примечание

В первом примере изначально в очереди находилось n = 6 монстров, их массы в порядке очереди были [1, 2, 2, 2, 1, 2]. В результате должны остаться два монстра массами [5, 5]. Такое возможно, например, при следующей последовательности действий:

  • второй монстр съедает левого от себя (то есть первого), очередь принимает вид [3, 2, 2, 1, 2];
  • первый монстр (обратите внимание, этот тот, который на предыдущем шаге был вторым) съедает правого от себя (то есть второго), очередь принимает вид [5, 2, 1, 2];
  • четвертый монстр съедает левого от себя (то есть третьего), очередь принимает вид [5, 2, 3];
  • третий монстр съедает левого от себя (то есть второго), очередь принимает финальный вид [5, 5].

Обратите внимание, что при выводе съеданий используется нумерация монстров в их текущем порядке в очереди.

C. Антон и зельеварение

Бинарный поиск дп жадные алгоритмы *1600

Антон играет в одну очень интересную компьютерную игру, и сейчас он застрял на одном из уровней. Чтобы пройти на следующий уровень, Антону надо приготовить n зелий.

У Антона в распоряжении есть котёл, который может сварить одно зелье за х секунд. Дополнительно, имеются заклинания двух типов, которые помогают ускорить процесс приготовления зелий:

  1. Заклинания этого типа ускоряют приготовление в котле одного зелья. Всего существует m таких заклинаний, i-е из них стоит bi единиц маны и делает так, чтобы каждое зелье варилось ai секунд вместо x.
  2. Заклинания этого типа варят несколько зелий мгновенно. Всего существует k таких заклинаний, i-е из которых стоит di единиц маны и мгновенно варит ci зелий.

Антон может использовать не более одного заклинания первого вида и не более одного заклинания второго вида, при этом суммарная стоимость заклинаний не должна превышать s единиц маны. Считается, что заклинания используются мгновенно и непосредственно перед началом варки зелий.

Антон хочет как можно быстрее перейти на следующий уровень, поэтому ему интересно, за какое минимальное время можно сварить не менее n зелий.

Входные данные

В первой строке входных данных находятся три целых числа n, m, k (1 ≤ n ≤ 2·109, 1 ≤ m, k ≤ 2·105) — количество зелий, которые надо сварить, количество заклинаний первого и количество заклинаний второго типа соответственно.

Во второй строке входных данных находятся два целых числа x и s (2 ≤ x ≤ 2·109, 1 ≤ s ≤ 2·109) — время варки одного зелья и количество единиц маны соответственно.

В третьей строке даны m целых чисел ai (1 ≤ ai < x) — время, за которое будет вариться одно зелье, если использовать i-е заклинание первого вида.

В четвертой строке записаны m целых чисел bi (1 ≤ bi ≤ 2·109) — стоимость i-го заклинания первого вида в единицах маны.

В пятой строке находятся k целых чисел ci (1 ≤ ci ≤ n) — количество зелий, которое будет сварено мгновенно при использовании i-го заклинания второго типа. Гарантируется, что ci упорядочены по неубыванию, то есть ci ≤ cj, если i < j.

В шестой строке входных данных находятся k целых чисел di (1 ≤ di ≤ 2·109) — стоимость i-го заклинания второго типа в единицах маны. Гарантируется, что di упорядочены по неубыванию, то есть di ≤ dj, если i < j.

Выходные данные

В единственной строке выходных данных выведите одно число — минимальное время, которое нужно потратить, чтобы сварить n зелий.

Примечание

В первом примере выгоднее всего будет применить второе заклинание первого типа, которое стоит 10 единиц маны. В таком случае каждое зелье будет вариться 4 секунды. Также мы используем второе заклинание второго типа, чтобы мгновенно сварить 15 зелий за 80 единиц маны. Итого мы потратим 10 + 80 = 90 единиц маны, а все зелья сварятся за 4·5 = 20 секунд (так как 15 зелий мы сварили мгновенно, а оставшиеся 5 будут вариться по 4 секунды).

Во втором примере все заклинания стоят больше единиц маны, чем у нас есть, поэтому мы не можем использовать ни одно из заклинаний. Мы просто варим 20 зелий по 10 секунд каждое, и ответ равен 20·10 = 200 секунд.

E. Антон и дерево

Деревья дп поиск в глубину и подобное *2100

Антон посадил в своём саду дерево. Напоминаем, что дерево — это связный неориентированный граф, не содержащий циклов.

Вскоре дерево выросло. Каждая из его n вершин оказалась покрашена либо в чёрный, либо в белый цвет. Однако, Антону не нравятся разноцветные деревья, и поэтому он решил покрасить дерево так, чтобы оно было либо полностью белым, либо полностью чёрным.

Для изменения цвета вершин дерева Антону доступна только одна операция, обозначим её как paint(v), где v — некоторая вершина дерева. Эта операция перекрашивает в противоположный цвет все такие вершины u, что на кратчайшем пути от u до v все вершины покрашены в один цвет (при этом сами вершины u и v также учитываются). Например, дерево

после применения операции paint(3) станет следующим:

Антону стало интересно, за какое минимальное количество операций покраски ему удастся сделать так, чтобы дерево стало покрашено в один цвет. Помогите ему найти это число!

Входные данные

В первой строке входных данных находится одно целое число n (1 ≤ n ≤ 200 000) — количество вершин в дереве.

Во второй строке входных данных находятся n целых чисел colori (0 ≤ colori ≤ 1) — цвета вершин. Если colori = 0, это значит, что i-я вершина покрашена в белый цвет, если colori = 1, это значит, что i-я вершина покрашена в чёрный цвет.

В каждой из следующих n - 1 строк входных данных находится пара целых чисел ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) — рёбра дерева. Гарантируется, что все пары (ui, vi) различны, то есть граф не содержит кратных рёбер.

Выходные данные

В единственной строке выходных данных выведите единственное число — минимальное количество операций покраски, которое необходимо Антону, чтобы дерево стало либо полностью белым, либо полностью черным.

Примечание

В первом примере дерево такое же, как и на рисунке в условии. Если применить к нему сначала операцию paint(3), потом операцию paint(6), то оно будет полностью покрашено в черный цвет, поэтому ответ — 2.

Во втором примере дерево уже и так полностью покрашено в белый цвет, и к нему не придется применять ни одной операции покраски, поэтому ответ — 0.

E. Остап и дерево

Деревья дп *2500

Остап поселился в предместье Рио-де-Жанейро и сразу же начал выращивать у себя в саду дерево. Напомним, деревом называется связный неориентированный граф без циклов.

Сейчас в дереве Остапа n вершин. Он хочет покрасить некоторые вершины дерева в чёрный цвет таким образом, чтобы для любой вершины дерева u существовала хотя бы одна чёрная вершина v, удалённая от неё не более, чем на k. Расстоянием между двумя вершинами в дереве называется минимальное количество рёбер на пути между ними.

Поскольку количество способов покрасить дерево соответствующим образом может быть достаточно велико, Остап попросил вас вычислить его по модулю 109 + 7. Два способа покрасить дерево считаются различными, если существует вершина, которая покрашена в чёрный цвет в одном способе и не покрашена в другом.

Входные данные

В первой строке входных данных записаны два целых числа n и k (1 ≤ n ≤ 100, 0 ≤ k ≤ min(20, n - 1)) — количество вершин в дереве Остапа и максимально возможное расстояние до ближайшей чёрной вершины. Не пропустите случайно ограничение на значение k.

Каждая из следующих n - 1 строк содержит два числа ui и vi (1 ≤ ui, vi ≤ n) — индексы вершин, соединённых i-м ребром. Гарантируется, что заданный граф является деревом.

Выходные данные

Выведите одно целое число — остаток от деления количества способов корректно покрасить вершины дерева в чёрный цвет на 1 000 000 007 (109 + 7).

Примечание

В первом примере необходимо покрасить в чёрный цвет обе вершины дерева.

Во втором примере достаточно покрасить только одну из двух, поэтому ответ 3: покрасить только вершину 1, покрасить только вершину 2, покрасить и вершину 1, и вершину 2.

В третьем примере подходящими будут покраски следующих множеств вершин: {1, 3}, {1, 4}, {2, 3}, {2, 4}, {1, 2, 3}, {1, 2, 4}, {1, 3, 4}, {2, 3, 4}, {1, 2, 3, 4}.

E. Гоша выходит на охоту

дп математика Перебор Потоки сортировки Структуры данных Теория вероятностей *3000

Гоша выходит на охоту. Его цель — поймать как можно больше покемонов. У Гоши есть a покеболов и b ультраболов. Всего покемонов n. Они пронумерованы числами от 1 до n. Про i-го покемона Гоша знает, что если бросить в него покеболом, то с вероятностью pi данный покемон будет пойман. Если бросить в i-го покемона ультраболом, то он будет пойман с вероятностью ui. В каждого покемона можно бросить не более чем одним болом каждого типа.

Охота происходит следующим образом: Гоша сначала выбирает не более чем a покемонов, в которых он будет бросать покеболами, и не более чем b покемонов, в которых он будет бросать ультраболами. После этого Гоша бросает в выбранных покемонов выбранными болами. Если он бросает в покемона и покеболом, и ультраболом, то данный покемон будет пойман, если он будет пойман хотя бы одним из двух болов. Результаты бросков независимы.

Гоша хочет узнать, чему равно математическое ожидание количества пойманных покемонов, если он будет действовать оптимально. Иными словами, он хочет узнать максимально возможное математическое ожидание.

Входные данные

В первой строке входных данных записано три целых числа n, a и b (2 ≤ n ≤ 2000, 0 ≤ a, b ≤ n) — количество покемонов, количество покеболов и количество ультраболов.

Во второй строке записано n вещественных чисел p1, p2, ..., pn (0 ≤ pi ≤ 1), где pi — вероятность, что Гоша поймает i-го покемона, если бросит в него покеболом.

В третьей строке записано n вещественных чисел: u1, u2, ..., un (0 ≤ ui ≤ 1), где ui — вероятность, что Гоша поймает i-го покемона, если бросит в него ультраболом.

Все вероятности заданы ровно с тремя знаками после десятичного разделителя.

Выходные данные

Выведите максимально возможное математическое ожидание количества пойманных покемонов. Ответ будет считаться правильным, если его относительная или абсолютная погрешность не превышает 10 - 4.

B. Электричка

дп жадные алгоритмы игры *1500

«Заяц» и контролер играют в следующую игру.

Электричка представляет собой n вагонов, которые нумеруются натуральными числами от 1 до n в порядке от головы до хвоста. «Заяц» и контролер изначально находятся в некоторых двух различных вагонах. Электричка каждую минуту может быть в одном из двух состояний — в движении или на остановке. Каждую минуту игроки делают ходы.

Ход контролера заключается в следующем. Контролер имеет направление движения — к голове электрички или к ее хвосту. За свой ход контролер перемещается в соседний вагон в соответствии со своим направлением движения. Если по окончании своего хода контролер заходит в 1-ый или n-ый вагон, то он меняет свое направление движения на противоположное. Другими словами — контролер циклически ходит от головы электрички до хвоста и обратно в течение всего времени игры, на каждом ходу сдвигаясь на один вагон. Заметим, что у контролера есть всегда есть ровно один допустимый ход.

Ход «зайца» зависит от того, в каком состоянии находится электричка. Если электричка движется, то «заяц» может перейти в один из соседних вагонов или же никуда не перемещаться. Если электричка на остановке, то «заяц» покидает электричку (то есть теперь не находится ни в одном из вагонов электрички) и затем, если остановка не конечная, заходит в электричку снова в любой из n вагонов (не обязательно в тот, из которого он только что вышел, и не обязательно в соседний для этого вагона). Если электричка стоит на остановке несколько минут, «заяц» покидает электричку и заходит в нее каждую минуту.

Определим очередность ходов игроков. Если в данную минуту электричка находится в движении — то сначала делает ход «заяц», а затем — контролер. Если в данную минуту электричка на остановке, то сначала «заяц» выходит из электрички, затем контролер делает ход, а затем «заяц» заходит в электричку.

Если в какой-то момент времени «заяц» и контролер оказываются в одном вагоне, то выигрывает контролер: он заставляет «зайца» выплатить штраф. Если через некоторое время «заяц» доезжает до конечной остановки — выигрывает «заяц»: своим ходом он просто выходит из электрички и более в нее не возвращается.

В любой момент времени игроки знают положения друг друга. Игроки играют оптимально. В частности, если выигрывает контролер, то «заяц» играет так, чтобы проиграть как можно позже. Поскольку для контролера возможные ходы определены однозначно, то считается, что он играет оптимально всегда. Определите победителя.

Входные данные

В первой строке находятся три целых числа n, m и k — количество вагонов в электричке, начальное положение «зайца» и контролера соответственно (2 ≤ n ≤ 50, 1 ≤ m, k ≤ n, m ≠ k).

Во второй строке задано направление движения контролера. «to head» означает, что контролер движется к голове электрички, «to tail» — что контролер движется к ее хвосту. Гарантируется, что в направлении движения контролера имеется хотя бы один вагон. Вагон 1 — это голова, вагон n — хвост.

Третья строка имеет длину от 1 до 200 и состоит из символов «0» и «1». i-ый символ содержит информацию о состоянии электрички в i-ую минуту времени. «0» означает, что в данную минуту электричка движется, «1» — что электричка в данную минуту стоит на остановке. Последний символ третьей строки всегда «1» — это конечная остановка.

Выходные данные

Если выигрывает «заяц» — выведите «Stowaway» без кавычек. Иначе выведите «Controller» опять же без кавычек, затем через пробел — номер минуты, на которой «заяц» будет пойман.

B. Хрупкий амфитеатр Arpa и ценные девушки Mehrdad

дп поиск в глубину и подобное снм *1600

Просто напоминаю, некоторые девушки в стране Arpa по-настоящему красивы.

Mehrdad хочет пригласить некоторых девушек во дворец на танцы. У каждой девушки есть некоторый вес wi и некоторая красота bi. Также, у каждой девушки могут быть друзья среди других девушек. Девушек можно разделить на группы по дружбе. Две девушки x и y находятся в одной группе по дружбе, если и только если существует последовательность девушек a1, a2, ..., ak такая, что ai дружит с ai + 1 для каждого 1 ≤ i < k, а a1 = x и ak = y.

Arpa предоставил амфитеатр для вечеринки Mehrdad. Амфитеатр может выдержать суммарный вес не более w.

Mehrdad настолько жадный, что хочет пригласить некоторых девушек так, чтобы их суммарный вес не превышал w, а их суммарная красота была максимальна. При этом, из каждой группы по дружбе он может пригласить либо всех девушек, либо не более одной, иначе кто-нибудь обидится. Найдите для Mehrdad наибольшую суммарную красоту девушек, которых он может пригласить так, чтобы никто не обиделся, а суммарный вес не превысил w.

Входные данные

Первая строка содержит три целых числа n, m и w (1  ≤  n  ≤  1000, , 1 ≤ w ≤ 1000) — количество девушек, количество пар друзей среди них и максимальный суммарный вес приглашенных.

Вторая строка содержит n целых чисел w1, w2, ..., wn (1 ≤ wi ≤ 1000) — веса девушек.

Третья строка содержит n целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 106) — красоты девушек.

Следующие m строк содержат пары друзей, i-я из этих строк содержит два целых числа xi и yi (1 ≤ xi, yi ≤ n, xi ≠ yi), означающих, что девушка xi дружит с девушкой yi. Заметьте, что дружба обоюдная. Все пары (xi, yi) различны.

Выходные данные

Выведите наибольшую суммарную красоту девушек, которых Mehrdad может пригласить так, чтобы никто не обиделся, а суммарный вес не превысил w.

Примечание

В первом тесте из условия две группы по дружбе: девушки {1, 2}, а также девушка {3}. Лучший способ — пригласить всех девушек из первой группы, их суммарный вес будет равен 5, а суммарная красота — 6.

Во втором тесте из условия также две группы по дружбе: девушки {1, 2, 3}, и девушка {4}. Mehrdad не может пригласить всех девушек из первой группы, т. к. их суммарный вес 12 > 11, поэтому лучше всего пригласить первую девушку из первой группы, и единственную девушку из второй. Суммарный вес будет равен 8, а суммарная красота — 7.

D. Хлоя и приятные подарки

графы Деревья дп поиск в глубину и подобное *1800

Щедрые спонсоры олимпиады, в которой участвуют Хлоя и Владик, разрешили всем участникам выбрать себе приз самостоятельно. Так как близится Новый год, спонсоры решили нарядить новогоднюю елку своими призами.

Они взяли n подарков для участников и на каждом подарке написали его уникальный номер (целое число от 1 до n). Подарок с номером i характеризуется целым числом ai — приятностью подарка. Приятность подарка может быть как положительным, так и отрицательным числом, а так же нулем. Подарок с номером 1 отправился на вершину елки. Все остальные подарки привязываются веревкой к одному из других подарков так, что каждый подарок в итоге оказывается подвешенным к первому подарку, возможно цепочкой из веревок и других подарков. Более формально, подарки формируют корневое дерево из n вершин.

Раздача подарков происходит таким образом: очередной участник подходит к елке, выбирает любой подарок из оставшихся и отрезает веревку, которой был привязан этот подарок. Обратите внимание, что все веревки, которыми другие подарки были привязаны к подарку, выбранному участником, не отрезаются. Таким образом, участник забирает выбранный подарок, а так же все множество подарков, подвешенное к нему, возможно цепочкой из веревок и других подарков.

Наши герои, Хлоя и Владик, поделили между собой на олимпиаде первое место и они, вопреки правилам раздачи подарков, будут выходить за подарком вместе! Чтобы не поссориться, они решили выбрать себе два таких различных подарка, что множества подарков, подвешенное к ним цепочкой из веревок и других подарков, не имеют пересечения. Иначе говоря, не должно быть подарка, который был бы подвешен к подарку Хлои и подарку Владика одновременно. Из всех возможных вариантов они выберут такую пару подарков, что сумма приятностей всех подарков, которые достанутся им после того, как они отрежут веревки, максимальна.

Найдите максимальную сумму приятностей, которую могут забрать себе Хлоя и Владик. Если это по каким-то причинам невозможно, выведите Impossible.

Входные данные

В первой строке входного файла записано одно целое число n (1 ≤ n ≤ 2·105) — количество подарков.

В следующей строке записано n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — приятности подарков.

В следующих (n - 1) строке находятся по два числа. В i-й из этих строк находятся целые числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) — описание ребра дерева. Это означает, что подарки с номерами ui и vi привязаны друг к другу веревкой. Эти подарки могут идти в любом порядке: либо ui привязан к vi, либо vi привязан к ui. Гарантируется, что все подарки подвешены к первому подарку, возможно цепочкой из веревок и других подарков.

Выходные данные

Если Хлоя и Владик смогут выбрать себе подарки, не поссорившись, выведите одно число — максимальную сумму приятностей, которую они смогут забрать в таком случае.

Иначе выведите строку Impossible.

E. Владик и карты

Бинарный поиск битмаски дп Перебор *2200

Владик заскучал по дороге домой и решил сыграть в следующую игру. Он взял n карт и положил их в ряд перед собой. На каждой карте Владика написано целое положительное число, не превосходящее 8. Он решил найти самую длинную подпоследовательность карт, для которой выполняются следующие условия:

  • количество вхождений каждого числа от 1 до 8 в подпоследовательности отличается не более, чем на 1 от количества вхождений любого другого числа. Более формально, если в подпоследовательности ck карт с числом k на них, то для всех выполняется |ci - cj| ≤ 1.
  • если в подпоследовательности имеется карта с числом x, то все карты с числом x должны составлять непрерывный отрезок в этой подпоследовательности (но не обязательно быть непрерывным отрезком в исходной последовательности). Например, последовательность карт [1, 1, 2, 2] удовлетворяет данному условию, а [1, 2, 2, 1] — нет. Обратите внимание, что [1, 1, 2, 2] не удовлетворяет первому условию.

Помогите Владику и найдите максимальную длину подходящей подпоследовательности.

Входные данные

В первой строке входных данных содержится число n (1 ≤ n ≤ 1000) — количество карт в последовательности Владика.

Во второй строке входных данных содержится n целых положительных чисел, не превосходящих 8 — описание последовательности Владика.

Выходные данные

Выведите одно целое число — длину максимальной подпоследовательности, в которой выполняются все условия.

Примечание

В первом примере числа на всех карточках равны, поэтому мы не сможем взять больше, чем одну карточку, поскольку нарушим первое условие.

C. Коровоконг покупает колоду карт

битмаски дп Перебор *2400

У Коровоконга уже есть много колод карт, но в этот раз он увидел в магазине совершенно новую колоду из n красных и синих карт и сразу захотел её купить. Чтобы это сделать, придётся сыграть в игру с владельцем магазина.

Игра состоит из последовательных ходов Коровоконга, на каждом ходу он совершает ровно одно из двух действий:

  • Взять фишки. Коровоконг получает 1 красную фишку и 1 синюю фишку (таким образом, в сумме он получает 2 фишки за одно действие).
  • Покупка одной карты. Коровоконг выбирает какую-то карту и покупает её за фишки по правилам, описанным ниже.

Базовая стоимость i-й карты составляет ri красных фишек и bi голубых фишек. Допустим, у Коровоконга сейчас есть A красных карт и B синих карт, тогда покупка i-й карты потребует от Коровоконга max(ri - A, 0) красных фишек и max(bi - B, 0) синих фишек. Обратите внимание, при покупке у Коровоконга забирают соответствующее количество фишек, но сами карты всегда остаются с ним. Каждую карту можно купить ровно один раз.

По данному описанию всех карт в колоде определите минимальное количество ходов, за которое Коровоконг может купить их все.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 16).

В следующих n строках записаны параметры ci, ri и bi, где ci является символом «R» или «B», означающих красный или синий цвет карты соответственно. ri и bi (0 ≤ ri, bi ≤ 107) означают количество красных и синих фишек (соответственно) в базовой стоимости i-й карты.

Выходные данные

Выведите одно целое число, означающее минимальное количество ходов, за которое можно получить все карты колоды.

Примечание

В первом примере Коровоконгу потребуется совершить четыре хода:

  1. Взять фишки.
  2. Приобрести карту 1.
  3. Приобрести карту 2.
  4. Приобрести карту 3.
Обратите внимание, что на четвёртом ходу Коровоконг может купить карту 3, потому что у него уже есть одна красная и одна синяя карты и ему вообще не нужны фишки.

Во втором примере следующая стратегия будет одной из оптимальных:

  1. Взять фишки.
  2. Взять фишки.
  3. Приобрести карту 2.
  4. Взять фишки.
  5. Приобрести карту 3.
  6. Приобрести карту 1.
На пятом ходу, хотя у Коровоконга есть в запасе красная фишка, нет необходимости её тратить, потому что у него уже имеется красная карта.

D. Зима близко

дп жадные алгоритмы сортировки *1800

В Берляндии зима длится n дней. Про каждый из дней известен прогноз на среднюю температуру воздуха.

У Васи есть новый комплект зимней резины, на котором можно безопасно ездить не более k дней при любой средней температуре воздуха. Через k дней использования (независимо от температуры этих дней) комплект зимней резины изнашивается. Эти k дней могут идти не подряд.

Перед первым днем зимы машина Васи всё еще на летней резине. На ней можно ездить безопасно любое количество дней, для которых средняя температура воздуха неотрицательна. Ездить на летней резине в дни, для которых средняя температура воздуха отрицательна, нельзя.

Вася может переобувать свою машину с летней резины на зимнюю и наоборот в начале любого дня.

Найдите минимальное количество раз, которое Васе нужно переобуть свою машину с летней резины на зимнюю и с зимней резины на летнюю, чтобы безопасно проездить всю зиму. По окончании зимы машина может быть на любой резине.

Входные данные

В первой строке следуют два целых положительных числа n и k (1 ≤ n ≤ 2·105, 0 ≤ k ≤ n) — количество зимних дней и количество дней, которое можно ездить на зимней резине. На зимней резине можно ездить при любой температуре, но суммарно не более k дней.

Во второй строке следует последовательность из n целых чисел t1, t2, ..., tn ( - 20 ≤ ti ≤ 20) — средняя температура воздуха в i-й день зимы.

Выходные данные

Выведите минимальное количество раз, которое нужно переобуть машину с зимней резины на летнюю и с летней резины на зимнюю, чтобы безопасно проездить всю зиму. Если это невозможно, выведите -1.

Примечание

В первом примере Вася должен перед первым днем зимы поменять резину с летней на зимнюю, проездить на ней три дня, после чего переодеть резину с зимней на летнюю, так как безопасно на зимней резине можно ездить как раз три дня. Таким образом, суммарное количество смен резины равно двум.

Во втором примере Вася должен перед первым днем зимы поменять резину с летней на зимнюю, затем после первого дня зимы поменять резину с зимней на летнюю. После второго дня нужно вновь поменять резину с летней на зимнюю, и после третьего дня поменять резину с зимней на летнюю. Таким образом, суммарное количество смен резины равно четырем.

F. Игорь и интересные числа

дп Комбинаторика математика Перебор *2500

Игорь очень любит 16-ричную систему счисления и считает целое положительное число в 16-ричной системе счисления интересным, если каждая цифра и буква в нём встречается не более t раз. Например, если t = 3, то числа 13a13322, aaa, abcdef0123456789 — интересные, а числа aaaa, abababab и 1000000 — нет.

Перед вами стоит задача найти k-е по счёту интересное для Игоря число в 16-ричной системе счисления. Число не должно содержать лидирующих нулей.

Входные данные

В первой строке следует два целых числа k и t (1 ≤ k ≤ 2·109, 1 ≤ t ≤ 10) — номер искомого числа и максимальное число раз, которое может встречаться цифра или буква в интересном числе.

Можно показать, что при таких ограничениях ответ всегда существует.

Выходные данные

Выведите единственное целое число в 16-ричной системе счисления, которое является k-м по счёту интересным для Игоря числом в 16-ричной системе счисления.

Примечание

Первые 20 чисел, которые является интересными, если t = 1: 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, 10, 12, 13, 14, 15. Поэтому ответ на первый пример равен 12.

D. Максимальная сумма

Деревья дп жадные алгоритмы математика реализация Структуры данных *2000

Ахмед и Мостафа участвуют в соревнованиях по программированию уже много лет. Однажды их тренер Фегла попросил их решить одну непростую задачу. Конечно же, Ахмед справился, а Мостафа — нет.

Эта задача похожа на классическую задачу, но имеет другую структуру и ограничения.

В классической задаче дан массив целых чисел, требуется найти такой подмассив данного массива, что сумма чисел в нем максимальная возможная. Подмассив — последовательность из одного или нескольких подряд идущих элементов данного массива.

Но в данной задаче дано n маленьких массивов. Из них получается один большой массив — конкатенацией одного или нескольких экземпляров маленьких массивов (каждый маленький массив может встречаться в большом более одного раза). Большой массив задан в виде массива индексов (1-индексированных) маленьких массивов. Конкатенация должна быть выполнена в том же порядке, в котором числа записаны в массиве. После конкатенации на большом массиве решается описанная выше классическая задача.

Например, пусть маленькие массивы — {1, 6, -2}, {3, 3} и {-5, 1}. Индексы большого массива — {2, 3, 1, 3}. Так, после конкатенации большой массив будет {3, 3, -5, 1, 1, 6, -2, -5, 1}. В этом примере максимальная сумма равна 9.

Помогите Мостафе решить эту задачу.

Входные данные

В первой строке записано два целых числа n и m, где n — количество маленьких массивов (1 ≤ n ≤ 50), а m — количество индексов большого массива (1 ≤ m ≤ 250000). Далее следует n строк. Первое число в i-ой — целое число l, размер i-го маленького массива (1 ≤ l ≤ 5000). Далее следует l целых чисел, каждое из которых не меньше -1000 и не больше 1000. Последняя строка содержит m целых чисел — индексы большого массива. Вы должны конкатенировать маленькие массивы в этом порядке. Каждый индекс не меньше 1 и не больше n.

Маленькие массивы нумеруются от 1 до n в том же порядке, в котором они заданы во входных данных. Некоторые маленькие массивы могут не использоваться для построения большого массива.

Заметьте, что массив очень большой. Поэтому, если Вы попытаетесь построить его в явном виде, вы скорее всего превысите ограничения по времени и/или по памяти.

Выходные данные

Выведите одно число — наибольшую сумму на каком-либо подмассиве сформированного большого массива. Учтите, что подмассив суммирования не может быть пустым, то есть он должен включать в себя хотя бы один элемент.

Пожалуйста, не используйте спецификатор %lld для записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

D. Новый год и фейерверки

дп Перебор поиск в глубину и подобное реализация Структуры данных *1900

Одной из популярных традиций встречи нового года является запуск в небо фейерверков. Обычно фейерверк взлетает вертикально вверх в течение некоторого времени, после чего взрывается и разделяется на несколько частей, летящих в разных направлениях. Иногда эти части через некоторое время снова взрываются, также разделяясь на несколько частей и так далее.

Лимак живёт на бесконечном клетчатом поле и у него есть один фейерверк. Поведение этого фейерверка после запуска описывается рекурсией глубины n и продолжительностью каждого из уровней рекурсии t1, t2, ..., tn. Как только Лимак запустит фейерверк в какой-нибудь клетке поля, тот начнёт двигаться вверх. После прохождения t1 клеток (включая стартовую) он взрывается и разделяется на две части, каждая из которых двигается в направлении, изменённом на 45 градусов (для лучшего понимания посмотрите картинки ниже). Таким образом, одна часть будет двигаться в направлении вверх и влево, а другая в направлении вверх и вправо. Каждая из этих частей пройдёт t2 клеток, после чего также разделится на две части, каждая из которых также изменит траекторию на 45 градусов. Процесс будет продолжаться до n-го уровня рекурсии, после чего все 2n - 1 частей взорвутся и исчезнут не создавая новых частей.

После нескольких уровней рекурсивного разделения частей фейерверка может так оказаться, что две или более частей находятся в одной и той же клетке в один и тот же момент времени — такая ситуация разрешена и эти части не сталкиваются.

Перед тем как запустить данный фейерверк Лимак хочет убедиться в безопасности этого запуска. Сможете ли вы посчитать количество клеток, которые хотя бы один раз будут посещены какой-либо частью фейерверка?

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 30) — глубина рекурсии разделения фейерверка на части.

Во второй строке записаны n целых чисел t1, t2, ..., tn (1 ≤ ti ≤ 5). На i-м уровне каждая из 2i - 1 частей фейерверка пройдёт ti клеток перед тем как взорвётся.

Выходные данные

Выведите одно целое число, равное количеству клеток которые будут посещены хотя бы одной частью фейерверка хотя бы один раз.

Примечание

Рассмотрим первый пример. Рисунки ниже показывают как будет выглядеть процесс работы фейерверка после каждого уровня рекурсии. Лимак запускает фейерверк из самой нижней красной клетки. После прохождения t1 = 4 клеток (отмеченных красным) он взрывается и делится на две части (их дальнейшее движение показано зелёным). Все взрывы отмечены символом «X». На последнем рисунке присутствуют 4 красных, 4 зелёных, 8 оранжевых и 23 розовых клетки. Таким образом, итоговое количество посещённых клеток равняется 4 + 4 + 8 + 23 = 39.

Для второго примера рисунки демонстрируют ситуацию на 4, 5 и 6 уровнях рекурсии. На рисунке посередине показаны направления всех частей, которые будут двигаться на следующем уровне.

E. Новый год и старая подпоследовательность

дп матрицы разделяй и властвуй Структуры данных *2600

Строка t называется красивой, если строка «2017» встречается в t в качестве подпоследовательности, а строка «2016» не встречается в t в качестве подпоследовательности. Например, строки «203434107» и «9220617» являются красивыми, а строки «20016», «1234» и «20167» не являются красивыми.

Уродством строки называется минимальное количество символов, которые надо удалить, чтобы получить красивую строку. Если получить красивую строку удаляя символы невозможно, то её уродство равняется  - 1.

У Лимака есть строка s длины n, символы которой пронумерованы от 1 до n. Также у него есть q запросов. В i-м запросе выведите уродство подстроки (непрерывной подпоследовательности) s начинающейся с позиции номер ai и заканчивающейся в позиции номер bi (включительно).

Входные данные

В первой строке входных данных записаны два числа n и q (4 ≤ n ≤ 200 000, 1 ≤ q ≤ 200 000) — длина строки s и количество запросов соответственно.

Во второй строке записана строка s длины n. Каждый из символов этой строки является цифрой «0»–«9».

В i-й из последующих q строк записаны два целых числа ai и bi (1 ≤ ai ≤ bi ≤ n), описывающих подстроку из i-го запроса.

Выходные данные

Для каждого запроса выведите уродство соответствующей подстроки.

Примечание

Рассмотрим первый пример. Далее запись ugliness(t) означает уродство строки t.

  • В первом запросе ugliness(«20166766») = 4, потому что потребуется удалить все четыре шестёрки.
  • Во втором запросе ugliness(«2016676») = 3, поскольку потребуется удалить все три шестёрки.
  • В третьем запросе ugliness(«0166766») =  - 1, так как нельзя сделать данную строку красивый удалением какого-либо числа символов.

Во втором примере:

  • Во втором запросе ugliness(«01201666209167») = 2. Оптимальным ответом будет удалить первую цифру «2» и последнюю цифру «6», что даст строку «010166620917», которая является красивой.
  • В третьем запросе ugliness(«016662091670») = 1. Оптимальным ответом является удалить последнюю цифр «6», что даст красивую строку «01666209170».

G. Новый год и пути в двоичном дереве

битмаски дп Комбинаторика Перебор *3200

Новогоднее дерево является бесконечным полным двоичным деревом, корнем которого является вершина с номером 1. У каждой вершины v есть ровно два сына: вершина с номером (2·v) и вершина с номером (2·v + 1).

Полярные медведи очень любят украшать новогоднее дерево и Лимак конечно же не исключение. Поскольку он ещё только маленький медвежонок, ему разрешили украсить только некоторый простой путь между какой-то парой вершин. С другой стороны, ему разрешили самому выбрать какой именно путь украсить! Теперь он хочет знать количество неупорядоченных пар индексов (u, v) (u ≤ v), таких что сумма индексов на пути между u и v (включая крайние вершины) равняется s. Сможете ли вы помочь ему вычислить это количество?

Входные данные

В единственной строке входных данных записано целое число s (1 ≤ s ≤ 1015).

Выходные данные

Выведите одно целое число, равное количеству неупорядоченных пар индексов вершин, определяющих простой путь с суммой индексов равной s.

Примечание

В примере из условия существует 4 пути с суммой индексов равной 10:

A. Конфеты на Новый год

дп жадные алгоритмы математика *1000

У Деда Мороза есть n конфет, которые он хочет поскорее раздать детям на Новый год.

Перед вами стоит задача определить максимальное число детей, которые получат конфеты от Деда Мороза, если он хочет, чтобы каждый из детей, которым он даст конфеты, получил различное целое положительное количество конфет. Дед Мороз хочет раздать все n конфет, которые у него есть.

Входные данные

В единственной строке записано целое положительное число n (1 ≤ n ≤ 1000) — количество конфет у Деда Мороза.

Выходные данные

В первую строку выведите целое число k — максимальное число детей, которые получат конфеты.

Во второй строке выведите k различных целых чисел — сколько конфет получит каждый из k детей. Сумма выведенных k чисел должна быть равна n, так как Дед Мороз хочет раздать все конфеты.

Если решений несколько, выведите любое.

A. Конфеты на Новый год

дп жадные алгоритмы математика *1000

У Деда Мороза есть n конфет, которые он хочет поскорее раздать детям на Новый год.

Перед вами стоит задача определить максимальное число детей, которые получат конфеты от Деда Мороза, если он хочет, чтобы каждый из детей, которым он даст конфеты, получил различное целое положительное количество конфет. Дед Мороз хочет раздать все n конфет, которые у него есть.

Входные данные

В единственной строке записано целое положительное число n (1 ≤ n ≤ 1000) — количество конфет у Деда Мороза.

Выходные данные

В первую строку выведите целое число k — максимальное число детей, которые получат конфеты.

Во второй строке выведите k различных целых чисел — сколько конфет получит каждый из k детей. Сумма выведенных k чисел должна быть равна n, так как Дед Мороз хочет раздать все конфеты.

Если решений несколько, выведите любое.

C. Владик и чат

дп Конструктив Перебор реализация Строки *2200

Недавно Владик нашел себе новое увлечение — написание ботов для социальных сетей. Ботов он хочет писать не простых, а с использованием машинного обучения. Поэтому он собрался обучать ботов на данных.

Первым делом он решил выкачать t чатов. Владик написал скрипт, который должен был выкачать все чаты. По каким-то неизвестным причинам переписки выкачались неполными, а точнее у некоторых сообщений оказался неизвестен отправитель. Зато известно, что если пользователь отсылал несколько сообщений подряд, то они объединялись в одно. То есть нет двух подряд сообщений в одном чате с одним и тем же автором. Ещё известно, что отправитель сообщения не упоминал себя в сообщении.

Владик хочет восстановить отправителя для каждого сообщения с неизвестным отправителем, так чтобы у любых двух последовательных сообщений одного чата были разные отправители, и никакой отправитель не упоминал бы себя в своих сообщениях.

Он не придумал как это делать, поэтому просит вас помочь ему. Помогите Владику восстановить отправителей сообщений для каждого чата!

Входные данные

В первой строке входных данных находится единственное целое число t (1 ≤ t ≤ 10) — количество выкачанных чатов. Далее задано t чатов. Каждый чат задан в следующем формате.

В первой строке каждого описания записано целое число n (1 ≤ n ≤ 100) — количество пользователей в чате.

В следующей строке находятся n различных имен пользователей разделенных пробелом. Каждое имя пользователя состоит из прописных и строчных латинских букв и цифр, причем имя не может начинаться на цифру. Два имени пользователя различаются даже тогда, когда они различаются только регистром букв. Длина имени положительна и не превышает 10 символов.

В следующей строке дано целое число m (1 ≤ m ≤ 100) — количество сообщений в чате. В следующих m строках находятся сообщения в одном из следующих форматов, по одному на строке:

  • <имя отправителя>:<текст сообщения> — формат сообщения, для которого известен отправитель. Имя отправителя должно присутствовать в списке имен пользователей чата.
  • <?>:<текст сообщения> — формат сообщения, для которого неизвестен отправитель.

Текст сообщения может состоять из маленьких и больших латинских букв, цифр, '.' (точка), ',' (запятая), '!' (восклицательный знак), '?' (вопросительный знак) или ' ' (пробел). Текст сообщения не содержит пробелов в конце. Длина текста сообщения положительна и не превышает 100 символов.

Определим, что значит упоминание пользователя в сообщении. Пользователь упоминается в сообщении, если он содержится в сообщении в качестве слова. Иными словами так, что соседний слева и соседний справа от имени символы либо отсутствуют либо не равны латинской букве и цифре. Например, сообщение «Vasya, masha13 and Kate!» может содержать упоминания пользователей «Vasya», «masha13», «and» и «Kate», но не «masha».

Гарантируется, что в каждом чате, заданном во входных данных, для всех известных пользователей выполняется, что пользователь не упоминает сам себя в сообщении и нет двух подряд идущих сообщений с одним и тем же известным отправителем.

Выходные данные

Во входные данные следует вывести информацию о t чатах в следующем формате:

Если нет ни одного способа восстановить неизвестных отправителей в чате, то для такого чата следует вывести «Impossible». Иначе следует вывести m сообщений в формате:

<имя отправителя>:<текст сообщения>

Если возможных ответов несколько, следует вывести любой.

F. Польшар и Подарки

битмаски дп жадные алгоритмы *2600

Рождество! Польшар и его друзья будут дарить друг другу подарки. Всего шаров n. Каждый шар должен подарить подарок ровно одному другому шару в соответствии с некоторой перестановкой p, pi ≠ i для всех i.

К сожалению, шары забывчивы. Мы знаем, что ровно k шаров забудут принести свои подарки. Шар номер i получит подарок, если будут выполнены следующие два условия:

  1. Шар номер i должен принести свой подарок.
  2. Шар x такой, что px = i, должен принести свой подарок.

Какое минимально и максимально возможное число шаров, которые не получат свой подарок, если ровно k шаров забудут принести свой подарок?

Входные данные

В первой строке находится два целых числа n и k (2 ≤ n ≤ 106, 0 ≤ k ≤ n) — общее число шаров и число шаров, которые забудут подарки.

Во второй строке находится перестановка p целых чисел от 1 до n, где pi — номер шара, которому должен дать подарок шар номер i. Для всех i выполняется pi ≠ i.

Выходные данные

Выведите два числа — минимально и максимально возможное число шаров, которые не получат подарков, соответственно.

Примечание

В первом примере, если первый и третий шары забудут принести подарок, то они же и будут единственными, кто не получит подарка. Поэтому минимальный ответ равен 2. Однако, если первый и второй шары забудут, то только пятый шар получит подарок. Поэтому максимальный ответ равен 4.

G. Польшар и Много других шаров

бпф дп Комбинаторика математика разделяй и властвуй теория чисел *3200

Польшар стоит в ряд со многими другими шарами. Точнее, в ряд стоят ровно n шаров. Шары гордятся за свою родную землю — и хотят доказать, что она стронг.

Шары решили начать с выборов ровно m групп шаров, каждая должна состоять либо из одного шара, либо из двух рядом стоящих. Каждый шар может состоять не более чем в одной группе.

Шары хотят впечатлить своих врагов. Они просят вас посчитать количество таких разбиений на группы для каждого m, где 1 ≤ m ≤ k. Выведите отстаток от деления каждого из этих чисел на 998244353, враги все равно будут впечатлены.

Входные данные

В единственной строке находятся два целых числа n и k (1 ≤ n ≤ 109, 1 ≤ k < 215) — число шаров и максимальное число групп, соответственно.

Выходные данные

Выведите последовательность из k целых чисел. Число i должно быть равно искомому числу способов выбрать ровно i групп в соответствии с правилами Польшара.

Примечание

В первом примере можно разделить шары на группы следующим образом:

{1}, {2}, {3}, {12}, {23}.

{12}{3}, {1}{23}, {1}{2}, {1}{3}, {2}{3}.

{1}{2}{3}.

Поэтому нужно вывести 5 5 1.

B. Единая карта

Бинарный поиск дп *1600

В Байтсбурге вводится новая система оплаты общественного транспорта. Теперь будет единая карта для поездок на всем транспорте. При каждой поездке пассажир прикладывает карту к считывателю, и с него списывается сумма в соответствии с тарифом.

Тариф устроен следующим способом. Есть три вида билетов:

  1. билет на одну поездку, стоит 20 байтландских рублей,
  2. билет на 90 минут, стоит 50 байтландских рублей,
  3. билет на сутки (1440 минут), стоит 120 байтландских рублей.

Уточним, что билет на x минут, активированный во время t, действует на поездки, стартовое время которых находится в диапазоне от t до t + x - 1, включительно. Считайте, что каждая поездка занимает ровно одну минуту.

Чтобы пассажиру было проще, тариф выбирается автоматически: при совершении каждой поездки система анализирует все прошедшие поездки и текущую и выбирает набор билетов на эти поездки с минимальной суммарной стоимостью. Пусть минимальная стоимость, за которую можно совершить поездки с первой по текущую, равна a, а сумма, списанная с пассажира за все предыдущие поездки, равна b. Тогда система списывает с пассажира разницу a - b.

Вам предстоит написать программу, которая по данным о времени совершенных пассажиром поездок рассчитает сумму, которую нужно с него снять после каждой из них.

Входные данные

В первой строке ввода содержится число n (1 ≤ n ≤ 105) — число поездок, которые сделал пассажир.

В каждой из следующих n строк содержится время начала поездки ti (0 ≤ ti ≤ 109), измеренное в минутах от момента запуска системы. Все ti различны, заданы в порядке возрастания, т. е. ti + 1 > ti для всех 1 ≤ i < n.

Выходные данные

Выведите n чисел. Для каждой поездки выведите сумму, которую нужно снять с карты пассажира.

Примечание

В первом примере система работает следующим образом: первую и вторую поездку дешевле всего оплатить двумя билетами на одну поездку, поэтому с пассажира снимается по 20 рублей, после третьей поездки система понимает, что дешевле было бы купить билет на 90 минут. Этот билет стоит 50 рублей, а пассажир к этому времени уже заплатил 40 рублей, таким образом с него нужно дополнительно взять 10 рублей.

D. Война бактерий

дп Комбинаторика Перебор строковые суфф. структуры *2400

Юля проводит эксперимент в своей лаборатории. Она поместила несколько колоний светящихся бактерий в горизонтальную пробирку. Бактерии разного типа можно отличить по цвету. Юля обозначает типы бактерий маленькими латинскими буквами «a», ..., «z».

Пробирка разделена на n областей, расположенных в ряд друг за другом. В каждый момент времени любая область занята ровно одной колонией бактерий определенного типа. Таким образом, популяцию пробирки в любой момент можно описать строкой из n латинских букв.

Иногда какая-то из колоний может решить захватить другую колонию в одной из соседних областей. В этом случае атакованная колония немедленно уничтожается и заменяется колонией того же типа, что и атакующая колония, при этом атакующая колония сохраняет свой тип. Колония может атаковать только соседей внутри пробирки. Одновременно может происходить не более одного нападения.

В качестве примера рассмотрим пробирку с популяцией «babb». Для следующей атаки существует шесть вариантов:

  • первая колония атакует вторую (1 → 2), в результате популяция будет выглядеть как «bbbb»;
  • 2 → 1, результат «aabb»;
  • 2 → 3, результат «baab»;
  • 3 → 2, результат «bbbb» (в данном случае результат такой же, как и в первом варианте);
  • 3 → 4 или 4 → 3, популяция не меняется.

Предсказать последовательность нападений довольно трудно. Юля интересуется, сколько способов расположения бактерий в пробирке может получится после некоторой последовательности нападений (при этом возможно, что нападений не будет совсем). Поскольку ответ может быть большим, найдите его по модулю 109 + 7.

Входные данные

Первая строка содержит целое число n — количество областей в пробирке (1 ≤ n ≤ 5 000).

Вторая содержит n маленьких латинских букв, описывающих исходную популяцию бактерий в пробирке.

Выходные данные

Выведите одно число — ответ на задачу по модулю 109 + 7.

Примечание

В первом примере популяция не может измениться, поскольку все колонии имеют один и тот же тип.

Во втором примере возможны три конфигурации: «ab» (нападений не было), «aa» (первая колония захватила вторую) и «bb» (вторая колония захватила первую).

Для получения ответа на третий пример, помните, что могло произойти больше одного нападения.

E. Байтландские монеты

дп Комбинаторика математика *3200

В Байтландии в ходу монеты n разных видов. Для удобства расчётов, достоинство монеты вида k обязательно делит достоинство монеты k + 1, а достоинство монеты вида 1 равно 1 тугрик. Отношение достоинств монет вида k + 1 и k равно ak. Также известно, что для любого x есть не более 20 видов монет, имеющих достоинство x.

У Байтазара с собой есть ровно bk монет вида k, и сейчас ему нужно заплатить ровно m тугриков. Также известно, что Байтазар не носит с собой более 3·105 монет. Байтазар хочет узнать, сколько у него есть способов заплатить m тугриков. Способы считаются различными, если для некоторого k в способах различается количество монет вида k. Как и всех в Байтландии, Байтазара количество способов интересует исключительно по модулю 109 + 7.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 3·105) — число видов монет.

Во второй строке записано n - 1 целых чисел a1, a2, ..., an - 1 (1 ≤ ak ≤ 109) — отношения между достоинствами монет. Гарантируется, что для любого x есть не более 20 видов монет, имеющих достоинство x.

В третьей строке записано n неотрицательных целых чисел b1, b2, ..., bn — количество монет каждого вида, имеющихся у Байтазара. Гарантируется, что их сумма не превосходит 3·105.

В четвёртой строке записано одно целое число m (0 ≤ m < 1010000) — сумма в тугриках, которую Байтазар должен заплатить.

Выходные данные

В единственной строке выведите одно число — количество способов заплатить ровно m тугриков по модулю 109 + 7.

Примечание

В первом примере у Байтазара есть 4 монеты достоинства 1, и нужно заплатить 2 тугрика. Способ единственен.

Во втором примере у Байтазара есть по 4 монеты двух различных видов достоинства 1, и нужно заплатить 2 тугрика. Теперь способов 3: заплатить одну монету первого вида, одну — второго, заплатить две монеты первого вида, или заплатить две монеты второго вида.

В третьем примере достоинства монет равны 1, 3, 9.

D. Секрет фестиваля раскрыт

битмаски дп *2200

Руководители школ очарованы эволюционированием, произошедшим в специальном лагере. Поэтому им было интересно узнать секрет эволюционирования.

Организаторы лагеря дали руководителям Покеблок — последовательность из n ингредиентов. Каждый ингредиент имеет тип 0 или 1. Организаторы сказали руководителям, что чтобы покемон типа k (k ≥ 2) эволюционировал, необходимо сделать k разрезов Покеблока, получая меньшие блоки.

Пусть Покеблок это последовательность b0b1b2... bn - 1. Разрезы можно делать в n + 1 местах, то есть до b0, между b0 и b1, между b1 и b2, ..., между bn - 2 и bn - 1, и после bn - 1.

n + 1 мест для разрезов выглядит так (| означает возможный разрез):

| b0 | b1 | b2 | ... | bn - 2 | bn - 1 |

Рассмотрим набор из k разрезов. Между каждой парой соседних разрезов находится бинарная строка, составленная из типов ингредиентов. Ингредиенты перед первым разрезом и после последнего не учитываются. Поэтому всего будет ровно k - 1 бинарных строк. Каждая строка может быть прочитана как число в двоичной системе счисления. Пусть m — это максимальное число среди полученных. Если все полученные числа положительны, и среди них встречаются все числа от 1 до m, то такой набор разрезов считается корректным.

Например, пусть Покеблок имеет вид 101101001110 и мы сделали 5 разрезов:

10 | 11 | 010 | 01 | 1 | 10

Полученные 4 бинарных подстроки: 11, 010, 01 и 1, они соответствуют числам 3, 2, 1 и 1 соответственно. В данном случае m = 3, потому что это максимальное среди чисел. Все числа положительные, и встречаются все числа от 1 до m. Поэтому этот набор разрезов — корректный набор 5 разрезов.

Покемон типа k эволюционирует только если Покеблок разрезан набором из k разрезов. Возможно, существуют несколько наборов разрезов с одинаковым числом разрезов. Два корректных набора k разрезов считаются различными, если в одном наборе есть разрез, которого нет в другом наборе.

Пусть f(k) — число корректных наборов k разрезов. Найдите значение . Так как число s может быть большим, выведите остаток от деления s на 109 + 7.

Входные данные

Входные данные содержат две строки. Первая строка содержит число n (1 ≤ n ≤ 75) — длина Покеблока. Вторая строка содержит Покеблок — бинарную строку длину n.

Выходные данные

Выведите единственное число — остаток от деления s на 109 + 7.

Примечание

В первом примере корректные наборы разрезов следующие:

Размер 2: |1|011, 1|01|1, 10|1|1, 101|1|.

Размер 3: |1|01|1, |10|1|1, 10|1|1|, 1|01|1|.

Размер 4: |10|1|1|, |1|01|1|.

Поэтому, f(2) = 4, f(3) = 4 и f(4) = 2. Значит, s = 10.

Во втором примере единственный корректный набор разрезов следующий:

Размер 2: |1|0.

Поэтому, f(2) = 1 и f(3) = 0. Значит s = 1.

E. Баш играет с функциями

дп Комбинаторика Перебор теория чисел *2500

Баш решил сделать перерыв в своем пути к становлению величайшим мастером покемонов, и поиграть с функциями.

Баш определил функцию f0(n), которая равна числу способов разложить число n на два множителя p и q такие, что gcd(p, q) = 1. Другими словами, f0(n) — число упорядоченных пар натуральных чисел (p, q) таких, что p·q = n и gcd(p, q) = 1.

Но Баш почувствовал, что эту функцию слишком просто посчитать. Поэтому он определил набор функций, где fr + 1 определена как:

где (u, v) — упорядоченная пара натуральных чисел, при этом они не обязательно взаимно простые.

Теперь Баш хочет узнать некоторые значения fr(n) для различных r и n. Так как эти значения могут быть большими, он хочет узнать остаток от деления этих значений на 109 + 7. Помогите ему!

Входные данные

Первая строка содержит целое число q (1 ≤ q ≤ 106) — число значений, которые хочет знать Баш.

Каждая из следующих q строк содержит два целых числа r и n (0 ≤ r ≤ 106, 1 ≤ n ≤ 106), что значит, что Баш хочет знать значение fr(n).

Выходные данные

Выведите q чисел. Для каждой данной пары r и n выведите остаток от деления fr(n) на 109 + 7 на отдельной строке.

D. Умение переводить

дп жадные алгоритмы Конструктив математика Строки *2000

Александр учится переводить числа из десятичной системы счисления в любую другую, однако он не знает латинских букв, поэтому любую цифру он записывает только десятичным числом, то есть вместо буквы A он запишет число 10. Таким образом, переводя число 475 из десятичной системы в шестнадцатеричную, он получил 11311 (475 = 1·162 + 13·161 + 11·160). Александр жил спокойно, пока не попробовал перевести число обратно в десятичную систему счисления.

Саша помнит, что работал с небольшими числами, поэтому просит найти минимальное десятичное число, при переводе которого в систему счисления с основанием n он получил бы число k.

Входные данные

Первая строка входных данных содержит целое число n (2 ≤ n ≤ 109). Вторая строка входных данных содержит целое число k (0 ≤ k < 1060), гарантируется, что число k содержит не больше 60 символов. Все цифры во второй строке строго меньше n.

Александр гарантирует, что ответ существует и не превосходит 1018.

Число k не содержит лидирующих нулей.

Выходные данные

Выведите число x (0 ≤ x ≤ 1018) — ответ на задачу.

Примечание

В первом тесте 12 могло получится при переводе двух чисел в 13-ричную систему счисления 12 = 12·130 или 15 = 1·131 + 2·130.

E. Сломанное дерево

графы Деревья дп жадные алгоритмы поиск в глубину и подобное *2600

Вам дано дерево, состоящее из n вершин, пронумерованных числами от 1 до n, где вершина с номером один — корень дерева. У каждого ребра есть собственные вес wi и прочность pi.

Ботаник Иннокентий, единственный член жюри олимпиады по информатике, очень не любит сломанные деревья.

Дерево является сломанным, если существует такое ребро, прочность которого меньше суммы весов рёбер поддерева, в которое оно ведёт.

Разрешается уменьшать вес любого ребра на целую величину, но тогда прочность этого ребра уменьшается на ту же величину. То есть если вес ребра 10, а прочность 12, то при уменьшении веса на 7 его вес станет равным 3, а прочность станет равной 5.

Увеличивать вес ребра нельзя.

Ваша задача: уменьшая веса рёбер заданного дерева, получить дерево, которое не является сломанным, а также все рёбра в нём должны иметь положительный вес, причём суммарный вес всех рёбер должен быть наибольшим.

Очевидно, что прочность рёбер не может быть отрицательной, однако она может равняться нулю, если вес поддерева равен нулю.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 2·105) — количество вершин в дереве.

В следующих n - 1 строках содержится описание рёбер. Каждая строка содержит четыре целых числа x, y, w, p (1 ≤ x, y ≤ n, 1 ≤ w ≤ 109, 0 ≤ p ≤ 109), где x и y — вершины, которые соединяет ребро (вершина под номером x — предок вершины под номером y), w и p — вес и прочность ребра соответственно. Гарантируется, что рёбра описывают дерево с корнем в вершине 1.

Выходные данные

Если из заданного дерева нельзя получить несломанное, то выведите в единственной строке -1.

Иначе, выходные данные должны содержать n строк:

В первой строке выведите число n — количество вершин в дереве.

В следующих n - 1 строках выведите описание рёбер конечного дерева. Каждая строка должна содержать четыре целых числа x, y, w, p (1 ≤ x, y ≤ n, 1 ≤ w ≤ 109, 0 ≤ p ≤ 109), где x и y — вершины, которые соединяет ребро (вершина под номером x — предок вершины под номером y), w и p — новые вес и прочность ребра соответственно.

Выводите рёбра в том же порядке, в каком они заданы во входных данных, то есть первые два числа каждой строки должны оставаться неизменёнными.

C. Мутация

битмаски дп математика *2700

Ученые планеты Олимпия проводят очередной эксперимент в области мутации примитивных организмов. Геном организма с этой планеты может быть представлен в виде строки из первых K заглавных букв английского алфавита. Для каждой пары типов генов было установлено риск возникновения заболевания ai, j, при условии что гены этих типов стоят подряд в геноме, где i — номер первого гена (нумерация начинается с 1), j — номер второго гена. Ген 'A' имеет номер 1, 'B' имеет номер 2 и так далее. Например, a3, 2 отвечает за пару 'CB'. Риск возникновения заболевания у организма равен сумме рисков для каждой пары соседних генов в геноме и измеряется он в рискограммах.

Ученые уже получили базовый организм, из которого путем мутации могут быть получены другие организмы. Механизм мутации включает удаление всех генов определенных типов. Такое удаление дополнительно увеличивает риск возникновения заболевания, причем для каждого типа генов было определено число ti — на сколько увеличится риск заболевания организма, если все гены типа i будут удалены. Например, t4 отвечает за суммарный риск, добавляющийся при удалении всех генов типа 'D'.

Цель ученых — посчитать количество различных организмов, которые можно получить из базового описанным выше путем, причем риск возникновения заболевания у которых не превышает T рискограмм. Два организма считаются разными, если строки задающие их геномы отличаются. Геном полученного организма должен состоять хотя бы из одного гена.

Входные данные

Первая строка входного файла содержит 3 целых числа: N (1 ≤ N ≤ 200000) — длину генома начального организма, K (1 ≤ K ≤ 22) — максимальный номер буквы, которая может встречаться в геноме и T (1 ≤ T ≤ 2·109) — максимальный допустимый риск возникновения заболевания. Вторая строка содержит геном базового организма — строку длины N, состоящий только из первых K заглавных букв английского алфавита.

Третья строка содержит K чисел, t1, t2, ..., tK, где ti — дополнительное значение риска, которое добавляется при удалении всех генов типа i.

Следующие K строк содержат матрицу ai, j. i-я строка содержит K чисел.j-ое число в строке с номером i задает риск возникновения заболевания для пары генов, первый из которых соответствует i-ой букве, а второй — j-ой букве.

Все числа во входном файле целые, неотрицательные и все кроме T не превышают 109. Все риски заданы в рискограммах. Гарантируется, что наибольший возможный риск заболевания организма, который может быть получен из исходного, строго меньше 231.

Выходные данные

Единственная строка выходного файла должна содержать одно целое число — искомое количество разных организмов с риском возникновения заболевания не более T рискограммов, которые могут быть получены из базового путем описанным в условии.

Примечание

Объяснение: возможно получить такие организмы (в скобках указано риски): BACAC (11), ACAC (10), BAA (5), B (6), AA (4).

D. Плюс и XOR

дп жадные алгоритмы математика *1700

Побитовое исключающее ИЛИ (или побитовое сложение по модулю два) — это бинарная операция, действие которой эквивалентно применению логического исключающего ИЛИ к каждой паре битов, которые стоят на одинаковых позициях в двоичной записи операндов. Иными словами, если соответствующие биты операндов различны, то соответствующий двоичный разряд результата равен 1; если же биты одинаковые, то двоичный разряд результата равен 0.

Например, если X = 10910 = 11011012, а Y = 4110 = 1010012 тогда:

X xor Y  =  6810  =  10001002.

Напишите программу, которая по двум целым неотрицательным числам A и B найдет такие неотрицательные целые числа X и Y, для которых выполняются условия:

  • A  =  X + Y
  • B  =  X xor Y, где xor — побитовое исключающее или.
  • X — наименьшее среди чисел, для которых выполняются условия 1 и 2.
Входные данные

Первые две строки входного файла содержат соответственно целые числа A и B (0 ≤ A, B ≤ 264 - 1).

Выходные данные

Единственная строка выходного файла должна содержать два целых неотрицательных числа X и Y, либо единственное число  - 1, если таких пар не существует.

F. Турист

Бинарный поиск дп Структуры данных *2300

Турист путешествует пешком вдоль координатной оси Ox. Идти можно в любом из двух возможных направлений и с любой скоростью, не превышающей V, в том числе находиться на месте. Из газетных анонсов он знает, что в момент t1 в точке с координатой x1 состоится одно интересное событие, в момент t2 в точке с координатой x2 — еще одно, и т. д., до (xN, tN). Интересные события достаточно кратковременны, их можно считать мгновенными. Считается, что турист посетил событие i, если в момент ti он находился в точке с координатой xi.

Напишите программу, которая найдет максимальное количество событий, которые сможет посетить турист, для таких двух предположений: А) сначала движения (в момент времени 0) турист находится в точке 0; Б) турист может выбрать начальную точку, из которой он стартует.

Входные данные

Первая строка входного файла содержит единственное натуральное число N (1 ≤ N ≤ 100 000) — количество интересных событий. Последующие N строк содержат по два целых числа xi и ti — координату и момент времени события с номером i. Последняя (N + 2)-ая строка файла содержит единственное целое число V — значение максимальной скорости движения туриста. Все значения xi принадлежат диапазону  - 2·108 ≤ xi ≤ 2·108, все значения ti принадлежат диапазану 1 ≤ ti ≤ 2·106, значение V принадлежит диапазону 1 ≤ V ≤ 1000. Во входных данных возможны различные события, имеющие одинаковую координату x или одинаковое время t, но невозможны различные события, имеющие одинаковые x и t одновременно.

Выходные данные

Единственная строка выходного файла должна содержать два целых числа — максимально возможное количество событий, которые турист может посетить, если он начнет движение в момент 0 из точки 0, затем максимально возможное количество событий, которые турист может посетить, самостоятельно выбрав точку старта.

C. Даша и пароль

дп Перебор реализация *1500

Преодолев лестницу, Даша оказалась на занятиях. Чтобы начать заниматься, ей необходимо ввести пароль. Пароль — это строка длины n, удовлетворяющая следующим требованиям:

  • В строке присутствует как минимум одна цифра,
  • В строке присутствует как минимум одна строчная (маленькая) буква латинского алфавита,
  • В строке присутствует как минимум один из трёх перечисленных символов — '#', '*', '&'.

Учитывая, что это занятия по программированию, просто так записать пароль не получится.

Для каждого символа пароля закреплена некоторая строка длины m, на каждой из этих n строк стоит указатель на некоторый символ в этой строке. Символ номер i на экране это символ, на который указывает указатель в i-ой строке. Изначально все указатели стоят на символе с индексом 1 (все позиции в этой задаче нумеруются с единицы).

За одну операцию Даша может передвинуть указатель любой одной строки на один символ влево или вправо. Строки цикличны, то есть при сдвиге указателя, который стоит на символе с индексом 1, влево, он перемещается на символ с индексом m, а при сдвиге вправо с позиции m он переместится на позицию 1.

Вам необходимо определить минимальное количество операций, необходимых для того, чтобы строка, отображаемая на экране, стала паролем.

Входные данные

В первой строке находятся два целых числа n, m (3 ≤ n ≤ 50, 1 ≤ m ≤ 50) — длина пароля и длина строк закрепленных за символами пароля.

В каждой из следующих n строк находится строка, закрепленная за i-м символом строки-пароля, длины m, состоящая из цифр, строчных латинских букв и символов '#', '*', '&'.

Входные данные таковы, что всегда можно получить строку-пароль.

Выходные данные

Выведите одно целое число — минимальное количество операций, необходимых для того, чтобы строка, отображаемая на экране, стала паролем.

Примечание

В первом примере для получения оптимального ответа нужно передвинуть указатель третьего символа на один влево.

Во втором примере одной из возможных последовательностей действий будет:

  • сдвинуть указатель второго символа вправо.
  • сдвинуть указатель третьего символа дважды вправо.

F. Даша и фотографии

дп Перебор реализация Структуры данных *2600

Даша решила немного отдохнуть после решения задачи D и стала просматривать фотографии с прошедших олимпиад.

Назовем фотографией матрицу размера n × m, состоящую из строчных латинских букв.

Некоторые k фотографий особенно заинтересовали её, так как их можно было получить из фотографии-шаблона путем покраски прямоугольной области в некоторый цвет. Назовем такие фотографии особенными.

Более формально i-я особенная фотография получается из фотографии-шаблона путем замены всех символов на некотором прямоугольнике с левым верхним углом в клетке с координатами (ai, bi) и с правым нижним углом в клетке с координатами (ci, di) на символ ei.

Даша просит вас найти особенную фотографию, суммарное расстояние от которой до всех остальных особенных фотографий минимально. И вычислить это расстояние.

Определим расстояние между двумя фотографиями, как сумму расстояний между всеми соответствующими буквами. Расстоянием между двумя буквами является модуль разницы их позиций в алфавите. Например, расстояние между буквами 'h' и 'm' равно |8 - 13| = 5, потому что буква 'h' 8-я в алфавите, а буква 'm' — 13-я.

Входные данные

Первая строка содержит три целых числа n, m, k (1 ≤ n, m ≤ 103, 1 ≤ k ≤ 3·105) — количество строк в фотографии-шаблоне, количество столбцов и количество особенных фотографий заинтересовавших Дашу.

Следующие n строк содержат строку длины m состоящую из маленьких латинских символов — описание фотографии-шаблона.

Каждая из следующих k строк содержат описание особенной фотографии в следующем формате, «ai bi ci di ei» (1 ≤ ai ≤ ci ≤ n, 1 ≤ bi ≤ di ≤ m), где (ai, bi) — координата левого верхнего угла прямоугольника, (ci, di) — правого нижнего, а ei — маленькая латинская буква на которую происходит замена в описанном прямоугольнике фотографии-шаблона.

Выходные данные

В единственную строку выходных данных необходимо вывести минимальное суммарное расстояние от найденной особенной фотографии до всех остальных особенных фотографий.

Примечание

В первом примере фотографии выглядят так:


bba aaa
bba acc
aaa acc

Расстояние между ними равно 10.

D. Максимальный путь

дп жадные алгоритмы реализация *2300

Дана прямоугольная таблица 3 × n, в каждой клетке которой записано число. Разрешается переходить из клетки в клетку, если они имеют общую сторону.

Найдите такой путь из верхней левой в правую нижнюю клетку таблицы, чтобы никакая клетка таблицы не была посещена дважды, а сумма чисел, записанных в клетках найденного пути, была максимальной.

Входные данные

В первой строке следует целое положительное число n (1 ≤ n ≤ 105) — количество столбцов в таблице.

В следующих трёх строках следует по n целых чисел — описание таблицы, причём j-е число в i-й строке соответствует ячейке таблицы aij ( - 109 ≤ aij ≤ 109).

Выходные данные

Выведите максимальную сумму чисел на пути из левой верхней в правую нижнюю клетку таблицы. Путь не должен посещать никакую клетку дважды.

Примечание

Путь для первого примера из условия:

Путь для второго примера:

A. Тимофей и береза

графы Деревья дп поиск в глубину и подобное реализация снм *1600

Каждый Новый Год Тимофей и его друзья рубят в лесу дерево из n вершин и приносят его домой. Чтобы получше его украсить, они превращают его в березу. Береза — дерево из n вершин, каждая вершина i которого покрашена в какой-то цвет ci.

Но вот настал день рождения, и мама Тимофея попросила его вынести березу. Тимофей выносит березу так: хватает за какую-то вершину, остальные вершины опускаются вниз, и дерево становится подвешенным за вершину, за которую он схватил. После этого он идет с ним на улицу и выкидывает.

Попытавшись ухватить березу, Тимофей понял, что его раздражают разноцветные переливы. Поддерево раздражает Тимофея, если в нем есть вершины разных цветов. Он хочет найти, за какую вершину ему нужно взяться, чтобы ни одно поддерево не раздражало его. При этом он не рассматривает все дерево целиком как поддерево, потому что он не видит цвет корневой вершины.

Поддерево некоторой вершины — это подграф, содержащий эту вершину и всех ее потомков.

Определите, есть ли вершина, схватившись за которую, Тимофей не будет раздражен.

Входные данные

Первая строка содержит одно натуральное число n (2 ≤ n ≤ 105) — количество вершин в дереве.

Каждая из следующих n - 1 строк содержит два натуральных числа u и v (1 ≤ u, v ≤ n, u ≠ v), означающие, что существует ребро между вершинами u и v. Гарантируется, что данный граф является деревом.

В следующей строке содержатся n натуральных чисел c1, c2, ..., cn (1 ≤ ci ≤ 105), задающих цвета вершин.

Выходные данные

В первой строке выведите «NO», если Тимофей не может взять березу так, чтобы его ничто не раздражало.

В противном случае выведите «YES», а в следующей строке выведите номер вершины, за которую Тимофею нужно схватить березу. Если существует несколько ответов, выведите любой.

E. Складывание дерева

Деревья дп жадные алгоритмы поиск в глубину и подобное реализация *2200

Ваня хочет уменьшить дерево. Для этого он может произвольное количество раз выполнять следующую операцию. Сначала Ваня выбирает вершину v и два пути одной длины, идущих из неё и не имеющих никаких общих вершин, кроме v. Обозначим эти пути за a0 = v, a1, ..., ak и b0 = v, b1, ..., bk. Кроме того, у вершин a1, ..., ak, b1, ..., bk не должно быть других соседей, кроме соседних вершин в соответствующем пути. После этого Ваня может «наложить» один путь на другой, тем самым, фактически, удалив вершины b1, ..., bk:

Помогите Ване определить, можно ли последовательным применением этой операции получить из дерева путь. Если ответ положительный, также определите минимально возможную длину такого пути.

Входные данные

Первая строка входного файла содержит единственное целое число n — количество вершин в дереве (2 ≤ n ≤ 2·105).

Следующие n - 1 строк описывают рёбра дерева. Каждая из этих строк содержит два целых числа u и v (1 ≤ u, v ≤ n, u ≠ v), разделённых пробелом: номера концов соответствующего ребра. Гарантируется, что заданный граф является деревом.

Выходные данные

Если получить путь невозможно, выведите -1. Иначе выведите минимально возможное число ребер в пути.

Примечание

В первом примере можно получить путь из трех ребер после наложения путей 2 - 1 - 6 и 2 - 4 - 5.

Во втором примере нельзя совершить ни одной корректной операции. Например, нельзя склеить пути 1 - 3 - 4 и 1 - 5 - 6, поскольку у вершины 6 есть сосед 7, которого нет в соответствующем пути.

G. МАТЕМАТNКА

meet-in-the-middle дп математика Перебор теория чисел *3200

Если вы дошли до этой задачи, вы всё равно вряд ли станете читать легенду...

Вам дана бинарная строка и целое число . Найдите количество целых k, 0 ≤ k < N, таких что для всех i = 0, 1, ..., m - 1

Выведите ответ по модулю 109 + 7.

Входные данные

В первой строке входного файла содержится строка s, состоящая из символов 0 и 1 (1 ≤ |s| ≤ 40).

В следующей строке содержится целое число n (1 ≤ n ≤ 5·105).

В каждой из следующих n строк содержатся два разделённых пробелом целых числа pi, αi (1 ≤ pi, αi ≤ 109, pi простое). Все pi различны.

Выходные данные

Едиственное число — ответ на задачу.

C. Махмуд и сообщение

дп жадные алгоритмы Перебор Строки *1700

Махмуд написал сообщение s длины n. Он хочет послать его своему другу Моазу как подарок на день рождения, потому что тот очень любит строки. Он написал сообщение на магической бумаге, но был очень удивлен, когда увидел, что некоторые буквы исчезли после написания. А все потому, что эта магическая бумага не разрешает символу номер i латинского алфавита находится в строке длиной более чем ai. Например, если a1 = 2, то невозможно использовать символ 'a' на этой бумаге в строке длиной 3 или более. Строку «aa» возможно написать, в то время как строку «aaa» — нет.

Махмуд решил разбить сообщение не несколько подстрок, и написать каждую из них на отдельном листке магической бумаги так, чтобы каждая подстрока удовлетворяла ограничению бумаги. Сумма длин подстрок должна быть равна n, и подстроки не должны накладываться друг на друга. Например, если a1 = 2, и Махмуд хочет отправить строку «aaa», он может разбить ее на подстроки «a» и «aa» и использовать 2 магических листка, или, например, на «a», «a» и «a» и использовать 3 магических листка бумаги. Он не может разбить сообщение на «aa» и «aa», т. к. сумма длин этих строк больше, чем n. Он может разбить сообщение на единственную подстроку, если она удовлетворяет ограничениям.

Подстрока строки s — это строка, состоящая из нескольких последовательных букв из строки s, например, строки «ab», «abc» и «b» являются подстроками строки «abc», в то время как «acb» и «ac» — не являются. Любая строка является подстрокой самой себя.

Пока Махмуд думал о том, как же разбить сообщение, Ехаб сказал ему, что существует много способов сделать это. После этого Махмуд задал вам три вопроса:

  • Сколько существует способов разбить сообщение на подстроки, при условии, что все подстроки удовлетворяют ограничениям магической бумаги, сумма их длин равна n, и они не накладываются? Вы должны вычислить ответ по модулю 109 + 7.
  • Какая наибольшая длина может быть у какой-то подстроки какого-то корректного разбиения?
  • На какое минимальное число подстрок можно разбить сообщение?

Два разбиения считаются различными, если множества позиций разбиений различаются. Например, разбиения «aa|a» и «a|aa» считаются различными разбиениями сообщения «aaa».

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 103) — длина сообщения.

Вторая строка содержит сообщение s длиной n, состоящее из строчных букв латинского алфавита.

Третья строка содержит 26 целых чисел a1, a2, ..., a26 (1 ≤ ax ≤ 103) — для каждой буквы максимальная длина подстроки, в которой может встречаться эта буква.

Выходные данные

Выведите три строки.

В первой строке выведите число способов разбить сообщение на подстроки и удовлетворить всем ограничениям по модулю 109  +  7.

Во второй строке выведите наибольшую длину подстроки среди всех подстрок всех возможных разбиений.

В третьей строке выведите минимальное число подстрок, на которое можно разбить сообщение.

Примечание

В первом примере можно разбить сообщение тремя способами:

  • a|a|b
  • aa|b
  • a|ab

Самые длинные подстроки — «aa» и «ab» длины 2.

Наименьшее число подстрок — 2 в разбиениях «a|ab» и «aa|b».

Заметьте, что «aab» — некорректное разбиение, потому что буква 'a' встречается в подстроке длины 3, в то время как a1 = 2.

D. Махмуд и словарь

графы дп поиск в глубину и подобное снм Структуры данных *2000

Махмуд хочет составить новый словарь, содержащий n слов и отношения между ними. Бывает два типа отношений: синонимичность (что значит, что два слова означают одно и тоже) и антонимичность (что значит, что два слова означают противоположные вещи). Время от времени он узнает новые отношения между некоторыми словами.

Махмуд знает, что если между двумя словами есть отношение, то каждое из этих слов имеет отношения со всеми словами, которые имеют отношения к другому слову из пары. Например, если like означает то же, что и love, и love — противоположность hate, то like — тоже противоположность hate. Еще один пример: если love — противоположность hate, и hate — противоположность like, то love — то же, что и like, и так далее.

Иногда Махмуд узнает неверное отношение. Неверное отношение это такое отношение, которое делает два слова одним и тем же и противоположностями одновременно. Например, если он знает, что love — то же, что и like, и like — противоположность hate, и затем узнает, что hate — то же, что и like, то последнее отношение, конечно, неверное, потому что оно делает hate и like антонимами и синонимами одновременно.

После того, как Махмуд узнал много отношений между словами, он обеспокоился тем, что некоторые отношения могут быть неверными. Он решил рассказать о каждом отношении знакомому программисту Ехабу. Махмуд хочет знать для каждого отношения, верное оно или неверное, основываясь на отношениях, которые он узнал раньше. Если отношение неверное, то Махмуд его игнорирует и не использует его для проверки последующих отношений.

После того, как Махмуд расскажет о всех отношениях, он спросит Ехаба об отношениях между некоторыми словами, основываясь на информации, которую дал. Ехаб занят подготовкой раунда Codeforces, поэтому вы должны ему помочь.

Входные данные

В первой строке находятся три целых числа n, m и q (2 ≤ n ≤ 105, 1 ≤ m, q ≤ 105), где n — число слов в словаре, m — число отношений, которые узнал Махмуд, и q — число вопросов, которые Махмуд спросит после того, как расскажет о всех отношениях.

Вторая строка содержит n различных слов a1, a2, ..., an, состоящих из строчных букв латинского алфавита длиной не более 20 — слова в словаре.

Затем следуют m строк, каждая из них содержит целое число t (1 ≤ t ≤ 2), а за ним два различных слова xi и yi, которые встречались в словаре. Если t = 1, то xi — синоним yi, иначе xi — антоним yi.

Затем следуют q строк, каждая из них содержит два различных слова из словаря. Это те пары слов, для которых Махмуд хочет знать отношение на основе тех отношений, которые он узнал.

Все слова во входных данных состоят только из строчных букв латинского алфавита, их длина не превышает 20 символов.

Выходные данные

В начале выведите m строк, по одной на каждое отношение. Если некоторое отношение неверно (т. е. делает два слова синонимами и антонимами одновременно), выведите «NO» (без кавычек) и игнорируйте его, иначе выведите «YES» (без кавычек).

После этого выведите q строк, по одной на каждый вопрос. Если два слова синонимы, выведите 1. Если они антонимы, выведите 2. Если между ними нет отношения, выведите 3.

Обратите внимание на тесты из условия для лучшего понимания.

E. Махмуд и xor-поездка

битмаски Деревья дп Конструктив математика поиск в глубину и подобное Структуры данных *2100

Махмуд и Ехаб живут в стране, в которой n городов, пронумерованных от 1 до n, соединенных n - 1 двунаправленными дорогами. Гарантируется, что из любого города можно добраться в любой другой используя только эти дороги. Про каждый город известна некоторая величина ai.

Определим расстояние от города x до города y как xor чисел, известных про города на пути от x до y (включая как x, так и y). Другими словами, если мы выпишем все величины городов на пути от x до y в массив p длины l, то расстояние между ними будет равно , где  — операция побитовый xor.

Махмуд и Ехаб хотят выбрать два города и проехать от одного до другого. Номер города, в котором они стартуют, всегда не больше номера города, в котором они финишируют (они могут стартовать и закончить в одном и том же городе, тогда расстояние будет равно величине, известной про этот город). Они никак не могут выбрать эти два города, поэтому они попробуют каждый город как старт и каждый город с не меньшим индексом как финиш. Определите суммарное расстояние между всеми этими парами городов.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 105) — число городов в стране Махмуда и Ехаба.

Вторая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 106), которые описывают величины, известные про города. Величина ai известна про город i.

Каждая из следующих n  -  1 строк содержит два числа u и v (1  ≤  u,  v  ≤  n, u  ≠  v), означающие, что между городами u и v существует двунаправленная дорога. Гарантируется, что можно доехать от любого города до любого другого по данным дорогам.

Выходные данные

Выведите одно число — суммарное расстояние между всеми возможными парами городов.

Примечание

Операция побитовый xor принимает два целых битовых числа одинаковой длины и выполняет логическую операцию xor на каждой паре соответсвующих бит. Результат в позиции равен 1, если и только если только первый бит 1 или только второй бит 1, и результат равен 0 если оба бита 0 или оба бита 1. Больше информации о побитовом xor можно найти здесь: https://ru.wikipedia.org/wiki/Битовые_операции#.D0.98.D1.81.D0.BA.D0.BB.D1.8E.D1.87.D0.B0.D1.8E.D1.89.D0.B5.D0.B5_.D0.98.D0.9B.D0.98_.28XOR.29.

В первом тесте из примера возможные пути следующие:

  • из города 1 в него самого, расстояние 1,
  • из города 2 в него самого, расстояние 2,
  • из города 3 в него самого, расстояние 3,
  • из города 1 в город 2, расстояние ,
  • из города 1 в город 3, расстояние ,
  • из города 2 в город 3, расстояние .
Суммарное расстояние равно 1 + 2 + 3 + 3 + 0 + 1 = 10.

C. Джон Сноу и его любимое число

дп Перебор реализация сортировки *1800

Джон Сноу сражается с белыми ходоками. У него есть n рейнджеров, каждый из которых имеет свою силу. Также у Джона Сноу есть любимое число x. Каждый рейнджер может сражаться с белым ходоком, если сила этого белого ходока равна его силе. Однако он думает, что его рейнджеры слабые и нуждаются в улучшении. Джон думает, что если он возьмет побитовый XOR сил некоторых рейнджеров с его любимым числом x, то он может получить солдат с более высокой силой. Итак, он решил сделать следующую операцию k раз:

  1. Расставить всех рейнджеров в ряд в порядке возрастания сил.
  2. Взять побитовый XOR (пишется как ) силы каждого второго рейнджера в ряду, начиная с самого первого, с числом x и обновить его силу.

    Предположим, что у Джона есть 5 рейнджеров с силами [9, 7, 11, 15, 5], и он выполняет операцию 1 раз с x = 2. Сначала он упорядочивает рейнджеров в порядке их сил, [5, 7, 9, 11, 15]. Далее он делает следующее:

    1. Сила первого рейнджера обновляется значением , то есть 7.
    2. Сила второго рейнджера остается прежней, то есть равной 7.
    3. Сила третьего рейнджера обновляется значением , то есть 11.
    4. Сила четвертого рейнджера остается прежней, то есть равной 11.
    5. Сила пятого рейнджера обновляется значением , то есть 13.

    Новые силы 5 рейнджеров [7, 7, 11, 11, 13].

    Теперь Джон хочет знать максимальную и минимальную силу рейнджеров после выполнения операций, описанных выше, k раз. Он хочет вашей помощи по этой задаче. Можете ли вы помочь ему?

Входные данные

Первая строка содержит три целых числа n, k, x (1 ≤ n ≤ 105, 0 ≤ k ≤ 105, 0 ≤ x ≤ 103) — количество рейнджеров у Джона, количество раз, которое Джон выполнит операцию, описанную выше, и любимое число Джона соответственно.

Вторая строка содержит n целых чисел, обозначающих силы рейнджеров, a1, a2, ..., an (0 ≤ ai ≤ 103).

Выходные данные

Выведите два целых числа — максимальная и минимальная силы рейнджеров после выполнения k операций.

D. Джон и сферы

дп математика Теория вероятностей *2200

Джон Сноу находится в поиске некоторых сфер, необходимых для победы над белыми ходоками. Существует k различных типов сфер, и ему нужна хотя бы одна сфера каждого типа. Одна сфера каждый день появляется у основания Чардрева на севере стены. Появление сферы каждого типа равновероятно. Так как север стены полон опасностей, он хочет знать минимальное количество дней, которое он должен ждать, посылая рейнджера собирать сферы каждый день, так что вероятность получения хотя бы одной сферы каждого типа как минимум , где ε < 10 - 7.

Для того, чтобы лучше подготовиться, он хочет знать ответ для q различных значений pi. Так как он занят планированием боевой стратегии с Сэмом, он просит вашей помощи.

Входные данные

На первой строке находятся два целых числа k, q (1 ≤ k, q ≤ 1000) — количество типов сфер и количество запросов соответственно.

Каждая из следующих q строк содержит единственное целое число pi (1 ≤ pi ≤ 1000) — i-й запрос.

Выходные данные

Выведите q строк. На i-й из них выведите единственное целое число — ответ на i-й запрос.

E. Игра Камней

битмаски дп игры *2100

Сэм учит Джона игре под названием Игра Камней, чтобы заострить ум и помочь ему разработать стратегию сражения с белыми ходоками. Правила этой игры просты:

  • Игра начинается с n куч камней, пронумерованных от 1 до n. i-я куча содержит si камней.
  • Игроки делают ходы по очереди. Ход рассматривается, как удаление некоторого числа камней из кучи. Удаление 0 камней не считается ходом.
  • Игрок, который не может сделать ход, проигрывает.

Теперь Джон верит, что готов к бою, но Сэм так не думает. Чтобы доказать его аргумент, Сэм предлагает сыграть в модификацию игры.

В модифицированной игре один и тот же ход не может быть сделан больше одного раза на куче. Например, если 4 камня удалены из кучи, то 4 камня больше не могут быть удалены из этой кучи опять.

Сэм начинает игру и делает первый ход. Джон верит, что Сэм всего лишь пытается предотвратить его поход в бой. Джон хочет знать, может ли он выиграть, если оба игрока играют оптимально.

Входные данные

Первая строка входных содержит единственное целое число n (1 ≤ n ≤ 106) — количество куч.

Каждая из следующих n строк содержит единственное целое число si (1 ≤ si ≤ 60) — количество камней в i-й куче.

Выходные данные

Выведите единственную строку, содержащую «YES» (без кавычек), если Джон выиграет, иначе выведите «NO» (без кавычек).

Примечание

В первом примере Сэм удаляет все камни и Джон проигрывает.

Во втором примере следующие ходы Сэма возможны:

В каждом из этих случаев Джон может сделать последний ход и выиграть:

C. Боброжуй-0xFF

Деревья дп жадные алгоритмы поиск в глубину и подобное снм *2100

«Съел бобра — спас дерево!» — именно под таким девизом пройдёт срочный слёт экологов в городе Бобруйске.

А всё дело в том, что популяция бобров на земном шаре достигла невероятных размеров! Каждый день их количество увеличивается в разы, а они даже и не догадываются, какой ущерб приносит природе и человечеству их нездоровая любовь к древесине. Количество кислорода в атмосфере упало до 17 процентов, и, как считают лучшие умы мира, это далеко не предел.

В середине 50-х годов прошлого века группа советских учёных смогла спрогнозировать ситуацию с бобрами и разработала секретную технологию по очистке территории под таинственным названием «Боброжуй-0xFF». Теперь судьба планеты лежит на хрупких плечах всего нескольких людей, отдавших свою жизнь науке.

Прототип уже готов, теперь нужно срочно проводить его испытания в полевых условиях.

Вам дано дерево, сплошь усеянное бобрами. Дерево состоит из n вершин, в i-ой вершине расположилось ki бобров. Напомним, дерево — это связный неориентированный граф без циклов.

«Боброжуй-0xFF» работает по следующему принципу: находясь в некоторой вершине u, он может перейти к вершине v, если они соединены ребром, и съесть ровно одного бобра из тех, что находятся в вершине v. Переместиться в вершину v невозможно, если в ней не осталось бобров. «Боброжуй-0xFF» не может просто так стоять в какой-то вершине и есть там бобров. Он должен двигаться без остановок.

Почему «Боброжуй-0xFF» работает именно так? Потому что разработчики не предусмотрели место в нём для аккумулятора, а поедание бобров необходимо для перегона их массы в чистую энергию.

Гарантируется, что бобры будут находиться в шоке от происходящего, поэтому не смогут перемещаться по дереву. В свою очередь, «Боброжуй-0xFF» может перемещаться по каждой ветке в обоих направлениях сколько угодно раз, пока условия, описанные выше, выполняются.

Корень дерева находится в вершине s. Это значит, что «Боброжуй-0xFF» начинает свою миссию в вершине s и обязательно должен в неё же вернуться в конце испытания, потому что снимать его с большой высоты никто не намерен.

Определите максимальное количество бобров, которое сможет съесть «Боброжуй-0xFF», вернувшись при этом в стартовую вершину.

Входные данные

В первой строке содержится целое число n — число вершин в дереве (1 ≤ n ≤ 105). Во второй строке содержится n целых чисел ki (1 ≤ ki ≤ 105) — количество бобров на каждой вершине. В следующих n - 1 строках находятся пары целых чисел — номера вершин, соединенных ребром. Вершины нумеруются от 1 до n. В последней строке находится целое число s — номер стартовой вершины (1 ≤ s ≤ n).

Выходные данные

Нужно вывести единственное число — максимальное возможное число бобров, съеденных «Боброжуем-0xFF».

Пожалуйста, не используйте спецификатор %lld для записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

D. Ковёр-из-домино

дп реализация *2300

...И с вами снова... Теле-Майк!

Устали от однообразного интерьера? Надоела серая обыденность? Мечтаете о головокружительных изменениях вашей скромной обители? У нас есть, что предложить вам!

Этот Ковёр-из-домино всего за $99.99 изменит вашу жизнь! Вы можете постелить им пол, повесить его на стену или даже на потолок! Кроме всего прочего...

Вирус Хексадесимал, насмотревшись рекламы, захотела заполучить такой Ковёр-из-домино и обязательно сфотографироваться на его фоне. Но ясное дело — вирус никогда не согласится покупать лицензионный Ковёр! Поэтому она заказала грузовик домино и решила смастерить такой Ковёр сама.

Оригинальный Ковёр-из-домино представляет собой поле из квадратиков размера n × m. Каждый квадратик является половиной кости домино и может быть ориентирован либо вертикально, либо горизонтально, независимо от соседей. Вертикально ориентированные половинки домино выглядят так:

А горизонтально ориентированные вот так:

Отсюда можно заметить, что некоторые половинки выглядят одинаково в обоих положениях, а некоторые — по-разному.

Кости домино, которые купила Хексадесимал, представляют собой неразрезаемые фишки размера 1 × 2, которые можно класть либо вертикально, либо горизонтально. Если кость расположить вертикально, то обе её половинки должны быть вертикально ориентированными; если горизонтально, то обе половинки должны быть ориентированы горизонтально.

Ниже приведены правильные и неправильные примеры вертикально и горизонтально расположенных костей домино:

Вирус Хексадесимал собирает свой собственный Ковёр-из-домино так, что выполняются следующие условия:

  • каждая клетка ковра покрыта костью домино, т.е. нет пустых клеток;
  • все кости домино лежат строго внутри ковра и не накладываются друг на друга;
  • если есть горизонтальная кость домино, у которой левая половина лежит в столбце j, то нет горизонтальных костей домино, у которых левая половина лежит в столбце j - 1 или j + 1.

Прежде чем начать собирать свой собственный Ковёр-из-домино, вирус хочет узнать количество способов достичь намеченной цели по модулю 109 + 7.

Можете предполагать, что количество костей домино каждого вида у вируса бесконечно велико.

Входные данные

В первой строке даны два целых числа n и m, разделённые пробелом — размер Ковра-из-домино (1 ≤ n, m ≤ 250). В последующих 4n + 1 строках содержится 4m + 1 символов.

Каждый квадратик Ковра-из-домино — половина кости домино — описывается квадратом 3 × 3. Символ 'O' в этом квадрате обозначает наличие точки, символ '.' — её отсутствие.

Каждый квадрат 3 × 3 очерчен от соседних квадратов символами '#' так, как показано в примерах.

Гарантируется, что каждый квадратик описывает корректную половину кости домино.

Во всех претестах Ковры-из-домино имеют размер 2 × 2 и 4 × 4.

Выходные данные

Выведите одно число — количество способов собрать Ковёр-из-домино по модулю 109 + 7, пользуясь только стандартными костями домино размера 1 × 2.

Примечание

Пояснение к первому примеру: корректные способы собрать Ковёр-из-домино изображены ниже:

В свою очередь, следующий способ является некорректным:

C. Мишка и прыжки по дереву

Деревья дп поиск в глубину и подобное *2100

Деревом называется неориентированный ациклический связный граф. Расстоянием между двумя вершинами называется число ребер на простом пути между ними.

Лимак — маленький полярный мишка. Он живет на дереве, состоящем из n вершин, вершины дерева пронумерованы от 1 до n.

Недавно Лимак научился прыгать. Он может прыгнуть из некоторой вершины в любую вершину на расстоянии не дальше k.

Для пары вершин (s, t) определим f(s, t) как минимальное число прыжков, которое требуется Лимаку, чтобы попасть из вершины s в вершину t. Найдите сумму величин f(s, t) по всем парам вершин (s, t) таким, что s < t.

Входные данные

В первой строке содержатся два целых числа n и k (2 ≤ n ≤ 200 000, 1 ≤ k ≤ 5) — число вершин в дереве и максимальное расстояние, на которое может прыгнуть Лимак, соответственно.

Следующие n - 1 строк содержат описания ребер дерева. i-я из этих строк содержит два целых числа ai и bi (1 ≤ ai, bi ≤ n) — номера вершин, соединенных i-м ребром.

Гарантируется, что заданный граф является деревом.

Выходные данные

Выведите одно число — сумму величин f(s, t) по всем парам вершин (s, t) таким, что s < t.

Примечание

В первом примере дерево состоит из 6 вершин и показано на рисунке ниже. Лимак может прыгать в любую вершину на расстоянии не больше 2 от текущей. Например, из вершины 5 он может прыгнуть в вершины 1, 2 и 4 (а также в саму вершину 5).

Всего есть пар вершин (s, t) таких, что s < t. Для 5 из этих пар Лимаку понадобится два прыжка, это пары (1, 6), (3, 4), (3, 5), (3, 6), (5, 6). Для остальных 10 пар вершин достаточно одного прыжка. Таким образом, ответ равен 5·2 + 10·1 = 20.

В третьем примере Limak может прыгать из любой вершины в любую. Всего есть 3 пары вершин (s < t), поэтому ответ равен 3·1 = 3.

D. Мишка и компания

дп *2500

Мишка Лимак подготавливает задачи для соревнования по программированию. Принято, что в задачах не упоминаются названии компании-спонсора соревнования, поэтому Лимак собирается изменить некоторые слова, чтобы удовлетворить этому ограничению. Чтобы условие все еще можно было читать, он хочет изменить каждое слово как можно меньше.

У Лимака есть слово s, состоящее из заглавных букв латинского алфавита. За один шаг он может поменять местами две соседние буквы в слове. Например, он может преобразовать слово «ABBC» в «BABC» или «ABCB» за один шаг.

Лимак хочет за несколько шагов преобразовать слово так, чтобы в нем не встречалась подстрока «VK» (то есть, не было бы буквы «V», сразу за которой идет буква «K»). Можно показать, что это возможно сделать с любым словом s.

Какое минимальное число шагов должен сделать Лимак для этого?

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 75) — длина слова.

Во второй строке находится слово s, состоящее из заглавных букв латинского алфавита. Длина слова равна n.

Выходные данные

Выведите одно целое число — минимальное число шагов, которое должен сделать Лимак для того, чтобы получить слово без подстроки «VK».

Примечание

В первом примере начальное слово — «VKVK». Минимально возможное число шагов равно 3. Оптимальная последовательность шагов показана ниже:

  1. Поменять местами две последние буквы. Слово станет равно «VKKV».
  2. Поменять местами две первые буквы. Слово станет равно «KVKV».
  3. Поменять местами вторую и третью буквы. Слово станет равно «KKVV». Очевидно, в слове теперь нет подстроки «VK».

Во втором примере есть две оптимальные последовательности шагов. Одна из них это «BVVKV»  →  «VBVKV»  →  «VVBKV». Другая — «BVVKV»  →  «BVKVV»  →  «BKVVV».

В пятом примере можно оставить слово как есть.

E. Мишка и таблица прямоугольников

дп жадные алгоритмы *3000

У Лимака есть таблица из 2 строк и n столбцов. Ячейка j строки i содержит целое число ti, j, которое может быть положительным, отрицательным или нулем.

Непустой прямоугольник из ячеек назовем красивым, если и только если сумма чисел в его ячейках равна 0.

Лимак хочет выбрать несколько красивых прямоугольников и подарить их друзьям. Никакие два выбранных прямоугольника не могут иметь общих ячеек. Какое максимальное число красивых прямоугольников может выбрать Лимак?

Входные данные

В первой строке находится единственное целое число n (1 ≤ n ≤ 300 000) — количество столбцов в таблице.

Следующие две строки содержат числа, записанные в ячейках. i-я из этих строк содержит n целых чисел ti, 1, ti, 2, ..., ti, n ( - 109 ≤ ti, j ≤ 109).

Выходные данные

Выведите одно целое число — максимальное число непересекающихся по ячейкам красивых прямоугольников.

Примечание

В первом примере всего четыре красивых прямоугольника:

Лимак не может выбрать все их них, потому что они пересекаются. Он может выбрать максимум три прямоугольника: те, которые обведены синим на рисунке.

Во втором примере оптимально выбрать шесть красивых прямоугольников, каждый из них состоит из одной ячейки с числом 0.

В третьем примере единственный красивый прямоугольник — это вся таблица. Сумма всех чисел равна 0. Очевидно, Лимак может взять не больше одного красивого прямоугольника, поэтому ответ 1.

C. Возмутительный Контраст

графы дп Конструктив математика теория чисел *2300

Вам дано целое число m, а также список из n различных целых чисел от 0 до m - 1.

Вы хотите построить последовательность, удовлетворяющую следующим требованиям:

  • Каждый элемент последовательности — целое число от 0 до m - 1, включительно.
  • Все префиксные произведения (то есть, произведения положительного числа первых элементов последовательности) различны по модулю m.
  • Никакое префиксное произведение по модулю m не является элементом заданного списка.
  • Длина последовательности максимально возможна.

Постройте любую последовательность, удовлетворяющую описанным свойствам.

Входные данные

Первая строка содержит два целых числа n и m (0 ≤ n < m ≤ 200 000) — число элементов в заданном списке и модуль, соответственно.

Если n ненулевое, то следующая строка содержит n различных целых чисел от 0 до m - 1 — запрещенные префиксные произведения. Если n равно нулю, то второй строки нет.

Выходные данные

В первой строке выведите число k — длину построенной последовательности.

Во второй строке выведите k целых чисел — вашу последовательность.

Примечание

В первом примере префиксные произведения построенной последовательности по модулю m равны [1, 2, 3, 4, 0].

Во втором примере префиксные произведения построенной последовательности по модулю m равны [3, 7, 4, 6, 8, 0].

D. Властные Контакты

битмаски дп *2700

Вам дано n целых чисел a1, a2, ..., an. Обозначим этот список как T.

Пусть f(L) — функция, аргументом которой является непустой список чисел L.

Результатом функции является целое число, вычисленное по следующим правилам:

  • Сначала все числа из L дополняются ведущими нулями, чтобы они имели одинаковую длину, равную максимальной длине среди чисел в L.
  • Затем строится строка, где символ номер i является минимальным из i-х символов в дополненных нулями исходных числах.
  • Полученная строка понимается как число, записанное в десятичной системе счисления, которое и является результатом функции.

Например, f(10, 9) = 0, f(123, 321) = 121, f(530, 932, 81) = 30.

Определим функцию

Здесь означает подпоследовательность.

Другими словами, G(x) — сумма квадратов сумм элементов непустых подпоследовательностей T, для которых функция f возвращает x, по модулю 1 000 000 007, в конце умноженная на x. Результат последнего умножения не берется по модулю.

Вы хотите вычислить G(0), G(1), ..., G(999 999). Для уменьшения размера вывода вычислите одно число , где означает побитовое исключающее ИЛИ.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 1 000 000) — число элементов в списке T.

Вторая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 999 999) — элементы списка.

Выходные данные

Выведите единственное число — ответ на задачу.

Примечание

В первом примере ненулевые значения G равны: G(121) = 144 611 577, G(123) = 58 401 999, G(321) = 279 403 857, G(555) = 170 953 875. Побитовое исключающее ИЛИ этих чисел равно 292 711 924.

Например, , потому что функция f над последовательностями [123] и [123, 555] производит результат 123.

Во втором примере

В последнем примере , где  — биномиальный коэффициент.

D. Тленные дороги

графы дп кратчайшие пути *2700

В стране Невер n городов и очень хорошо развитая дорожная сеть. Между каждой парой городов есть ровно одна двусторонняя дорога, таким образом, всего в Невере целых дорог! При этом никакая дорога не пересекается ни с какой другой дорогой и не проходит через промежуточные города. Что-что, а туннели и мосты в Невере строить умели.

Независимая комиссия оценила каждую дорогу Невера положительным целым числом, называемым тленностью дороги. Чем ниже тленность, тем приятнее по дороге ехать.

В рамках года транспорта в Невере было решено построить музей транспорта в одном из городов страны, а в каждом другом городе установить ровно один указатель на некоторый город (не обязательно тот, в котором находится музей). Указатели должны удовлетворять следующему важному требованию: если любой неверец, живущий в городе без музея, отправится из своего родного города по указателям, то рано или поздно обязательно приедет в город с музеем.

Неверцы — невероятно положительно настроенные люди. Если неверец отправился по маршруту, состоящему из нескольких дорог, то тленностью маршрута неверец считает минимальную из тленностей дорог в этом маршруте.

Руководство Невера еще не приняло окончательное решение относительно города, в котором следует построить музей, и рассматривает все n возможных вариантов. Принципиальное значение имеет сумма тленностей маршрутов до города с музеем из всех остальных городов страны, если путники будут строго следовать установленным указателям. Руководство Невера заботится о своих жителях, поэтому они хотели бы направить указатели таким образом, чтобы минимизировать эту сумму. Помогите им определить минимальное возможное её значение при всех n вариантах строительства музея.

Входные данные

В первой строке содержится число n (2 ≤ n ≤ 2000) — количество городов в Невере.

Следующие n - 1 строк содержат описание дорожной сети. i-я из этих строк содержит n - i целых чисел. j-е число в i-й строке обозначает тленность дороги между городами i и i + j.

Все тленности дорог находятся в диапазоне от 1 до 109, включительно.

Выходные данные

Для каждого города в порядке от 1 до n выведите минимальную возможную сумму тленностей маршрутов до данного города из всех остальных городов при оптимальной установке указателей.

Примечание

Первый пример пояснен рисунком ниже. Слева направо изображены исходная дорожная сеть и оптимальные расстановки указателей при строительстве музея в городах 1, 2 и 3, соответственно. Синим цветом обозначен город с музеем, зеленым — направление указателя в каждом другом городе.

Например, при строительстве музея в городе 3 следует направить указатель в городе 1 на город 3, а указатель в городе 2 — на город 1. Тогда маршрут из города 1 до города 3 будет иметь тленность 2, а маршрут из города 2 до города 3 — тленность 1. Сумма тленностей данных маршрутов составит 3.

F. Генерация тестов

бпф дп Комбинаторика математика разделяй и властвуй теория чисел *3400

Генерация тестов — непростое дело! Часто генерации случайных больших тестов недостаточно, чтобы обеспечить полноценную проверку решений на правильность.

Например, рассмотрим задачу с одного из прошедших раундов Codeforces. Формат ее входных данных выглядит примерно так:

В первой строке записано целое число n (1 ≤ n ≤ maxn) — количество элементов в множестве. Во второй строке в возрастающем порядке записано n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ maxa) — элементы множества.

Если не обращать внимания на решение задачи, кажется, что сгенерировать хороший тест очень просто. Возьмем n = maxn, возьмем случайные различные ai от 1 до maxa, отсортируем... Далее вы поймете, что это не совсем так.

Решение задачи выглядит следующим образом. Пусть g — наибольший общий делитель a1, a2, ..., an. Пусть x = an / g - n. Тогда правильное решение выводит «Alice», если x нечетно, и «Bob», если x четно.

Рассмотрим два неверных решения задачи, отличающихся от правильного только формулой вычисления величины x.

Первое вычисляет x по формуле x = an / g (без вычитания n).

Второе вычисляет x по формуле x = an - n (без деления на g).

Будем считать тест интересным, если на нем оба неверных решения выдают ответ, отличающийся от правильного.

По данным значениям maxn, maxa и q найдите количество удовлетворяющих ограничениям интересных тестов к задаче и выведите его по модулю q.

Входные данные

Единственная строка содержит три целых числа maxn, maxa и q (1 ≤ maxn ≤ 30 000; maxn ≤ maxa ≤ 109; 104 ≤ q ≤ 105 + 129).

Выходные данные

Выведите единственное число — количество удовлетворяющих ограничениям тестов, на которых оба приведенных неверных решения выдают ответ, отличающийся от правильного, по модулю q.

Примечание

В первом примере интересные тесты выглядят следующим образом:


1 1 1 3
2 4 6 2 4 6

I. Составление строки

*особая задача дп *2300

У Степана есть набор из n строк. Также у него есть любимая строка s.

Степан хочет сделать следующее. Он будет брать какие-то строки из своего набора и выписывать их одну за другой. Возможно, что какие-то строки он возьмет более одного раза, а какие-то не возьмет вовсе.

Перед вами стоит задача определить минимальное количество строк, которые нужно взять Степану из набора и выписать таким образом, чтобы строка s встречалась как подпоследовательность в получившейся написанной строке. Каждую строку из набора нужно считать столько раз, сколько Степан брал её из набора.

Например, в строке «abcd» строки «ad», «acd», «abcd» встречаются как подпоследовательности, а строки «ba», «abdc» нет.

Входные данные

В первой строке следует целое число n (1 ≤ n ≤ 50) — количество строк в наборе Степана.

В следующих n строках следуют n непустых строк, состоящих из строчных букв латинского алфавита. Длина каждой их этих строк не превосходит 50 символов. Возможно, что некоторые строки из набора Степана одинаковы.

В следующей строке следует непустая строка s, состоящая из строчных букв латинского алфавита — любимая строка Степана. Длина этой строки не превышает 2500 символов.

Выходные данные

Выведите минимальное количество строк, которые нужно взять Степану из набора и выписать таким образом, чтобы строка s встречалась как подпоследовательность в получившейся написанной строке. Каждую строку из набора нужно считать столько раз, сколько Степан брал её из набора.

Если ответа не существует, выведите -1.

Примечание

В первом примере Степан может взять, например, третью и вторую строки из набора, выписать их, и получить в точности свою любимую строку.

Во втором примере Степан может взять, например, вторую, третью и вновь вторую строки из набора и выписать их. Тогда у него получится строка «aabaaaab», в которой как подпоследовательность содержится его любимая строка «baaab».

В третьем примере Степан никак не сможет получить свою любимую строку, так как в ней есть буква «c», которой нет ни в одной из строк набора.

J. Сериал Степана

*особая задача дп *2000

Вот и закончился сериал, который Степан смотрел уже очень долго. Всего в сериале было n серий. Про каждую из них Степан помнит либо то, что точно смотрел её, либо то, что точно не смотрел её, либо он сомневается, смотрел её или нет.

Неудовлетворенность Степана от непросмотренных серий равна максимальному количеству подряд идущих серий, которые Степан не смотрел.

Перед вами стоит задача определить по имеющимся воспоминаниям Степана, могла ли его неудовлетворенность от просмотра сериала быть равна ровно k.

Входные данные

В первой строке следуют два целых числа n и k (1 ≤ n ≤ 100, 0 ≤ k ≤ n) — количество серий в сериале и неудовлетворенность, которую нужно проверить.

Во второй строке следует последовательность, состоящая из n символов «Y», «N» и «?». Если i-й символ равен «Y», то Степан точно помнит, что смотрел серию номер i. Если i-й символ равен «N», то Степан точно помнит, что не смотрел серию номер i. Если i-й символ равен «?», то Степан точно не помнит, смотрел он серию номер i или не смотрел.

Выходные данные

Если неудовлетворенность Степана от просмотра сериала может быть равна ровно k выведите «YES» (без кавычек). В противном случае, выведите «NO» (без кавычек).

Примечание

В первом примере Степан точно помнит про все серии смотрел он их или нет. Его неудовлетворенность от просмотра сериала равна 2, так как он не смотрел две серии подряд — серию номер 3 и серию номер 4. Ответ на этот пример «YES», так как k = 2.

Во втором примере k = 1, но неудовлетворенность Степана от просмотра сериала точно больше либо равна 2 (так как он точно помнит, что не смотрел две серии подряд — номер 5 и номер 6), даже если он смотрел серии с первой до четвертой, включительно.

G. Шерлок и зашифрованные данные

битмаски дп Комбинаторика *2900

Шерлок нашел зашифрованые данные, которые, как он считает, могут помочь поймать Мориарти. Зашифрованные данные состоят из двух целых чисел l и r. Шерлок заметил, что эти числа записаны в шестнадцатеричной системе счисления.

Шерлок берет каждое целое число от l до r, и выполняет над ним следующие операции:

  1. Выписывает все различные цифры, которые присутствуют в этом числе в шестнадцатеричной записи. Например, для 101416 он выпишет 1, 0, 4.
  2. Затем он складывает соответствующие степени двойки для каждой выписанной цифры. В примере выше sum = 21 + 20 + 24 = 1910.
  3. Затем Шерлок изменяет исходное число, выполняя операцию побитового xor над исходным числом и полученной суммой. Например, . Заметьте, что xor выполняется в двоичной системе счисления.

Другой пример: для числа 1e сумма равна sum = 21 + 214. Буквами a, b, c, d, e, f обозначаются шестнадцатеричные цифры 10, 11, 12, 13, 14, 15, соответственно.

Шерлок хочет найти количество чисел в диапазоне от l до r (включительно), которые уменьшатся после выполнения описанных четырех шагов. Он хочет, чтобы вы посчитали для него ответ для q различных вариантов l и r.

Входные данные

Первая строка содержит число q (1 ≤ q ≤ 10000).

Следующие q строк содержат по два числа l и r (0 ≤ l ≤ r < 1615) в шестнадцатеричной системе счисления.

Шестнадцатеричные числа записаны цифрами от 0 до 9 и/или буквами латинского алфавита a, b, c, d, e, f.

Шестнадцатеричные числа не содержат лишних лидирующих нулей.

Выходные данные

Выведите q строк, строка i должна содержать ответ на i-й вопрос Шерлока (в десятеричной системе счисления).

Примечание

Во втором тесте из примера:

1416 = 2010

sum = 21 + 24 = 18

Это число уменьшается. Можно проверить, что это единственное число между 1 и 1e, которое уменьшается после выполнения операций.

B. Игра: Банковские карты

дп жадные алгоритмы сортировки Структуры данных *1300

После четвёртого сезона Шерлок и Мориарти осознали бессмысленность баталии, развернувшейся между ними, и решили дальше соревноваться в мирную игру «Банковские карты».

Правила у этой игры предельно просты: каждый игрок приносит свою любимую банковскую карту с n-значным номером. Далее оба игрока по очереди называют последовательные цифры из банковской карты. Если цифры не совпадают, то участник, цифра которого оказывается меньше, получает щелбан от другого игрока. Например, если n = 3 и у Шерлока номер карты 123, а у Мориарти 321, то сначала Шерлок называет число 1, а Мориарти называет число 3 и Шерлок получает щелбан. Затем и Шерлок и Мориарти называют число 2, и щелбан не получает никто. Наконец на третьем шаге, Шерлок называет 3, а Мориарти называет 1 и получает щелбан.

Шерлок, конечно, будет играть честно, но Мориарти, как настоящий злодей, подсмотрел номер карты Шерлока и теперь хочет называть цифры своей банковской карты не последовательно, а в некотором другом порядке (однако количество каждой из цифр он не изменяет). Например в случае выше, Мориарти мог бы назвать цифры в последовательности 1, 2, 3 и не получил бы щелбанов вообще, а мог назвать 2, 3 и 1 и выдать Шерлоку целых два щелбана.

Вам поручено вычислить, какое минимальное количество щелбанов Мориарти точно получит и какое максимальное число Мориарти может дать Шерлоку. Обратите внимание, что это две разные цели, и они могут достигаться при использовании разных порядков.

Входные данные

В первой строке находится одно целое число n (1 ≤ n ≤ 1000) — количество цифр в банковских картах Шерлока и Мориарти.

Во второй строке записана последовательность из n цифр — номер кредитной карточки Шерлока.

В третьей строке записана последовательность из n цифр — номер кредитной карточки Мориарти.

Выходные данные

Сначала выведите минимальное число щелбанов, которое обязательно получит Мориарти. Затем выведите максимальное число щелбанов, которое Мориарти может дать Шерлоку.

Примечание

Первый пример совпадает с примером, разобранным в условии задачи. Во втором примере Мориарти никак не сможет избежать двух щелбанов.

C. Алёна и таблички

Бинарный поиск дп жадные алгоритмы реализация Структуры данных *1600

На уроке информатики маленькая девочка Алёна осваивает редактирование таблиц в одной очень известной программе.

Сейчас у неё есть таблица из целых чисел, состоящая из n строк и m столбцов. Через ai, j будем обозначать число в i-й строке и j-м столбце. Будем говорить, что таблица отсортирована по неубыванию по j-му столбцу, если ai, j ≤ ai + 1, j для всех i от 1 до n - 1.

Учительница дала Алёне k заданий. Для каждого из заданий известны два числа l и r и требуется ответить на вопрос: если от таблицы оставить только строки с l по r включительно, то будет ли она отсортирована по неубыванию хотя бы по одному столбцу? Другими словами, существует ли такое j, что ai, j ≤ ai + 1, j для всех i от l до r - 1 включительно.

Алёна ещё слишком маленькая, чтобы справиться с заданием самостоятельно — помогите ей!

Входные данные

В первой строке входных данных записаны два целых положительных числа n и m (1 ≤ n·m ≤ 100 000) — количество строк и столбцов в таблице соответственно. Обратите внимание, что дано ограничение только на произведение этих чисел, то есть на количество элементов таблицы.

В каждой из следующих n строк записаны m целых чисел, j-e число в i-й из этих строк соответствует значению ai, j (1 ≤ ai, j ≤ 109).

В следующей строке входных данных задано число k (1 ≤ k ≤ 100 000) — количество заданий учительницы, которые нужно выполнить Алёне.

В i-й из последующих k строк числа li и ri (1 ≤ li ≤ ri ≤ n).

Выходные данные

В i-й строке выведите "Yes", если в таблице, полученной из исходной оставлением строк с li по ri включительно будет столбец, по которому она отсортирована по неубыванию, и "No" в противном случае.

Примечание

В приведенном примере таблица не отсортирована ни по одному столбцу, но, например, строки 1–3 отсортированы по столбцу 1, а строки 4–5 по столбцу 3.

E. Ханойская фабрика

дп жадные алгоритмы Перебор сортировки Структуры данных *2000

Наверняка вы слышали об известной задаче про Ханойские башни, но мало кто знает, что существует целая фабрика, производящая кольца для этой замечательной игры. Однажды на эту фабрику пришел срочный заказ от властителя Египта — Солнцеликого. Солнцеликий требует немедленно прислать ему для игры как можно более высокую башню. Работники фабрики не были готовы к такому необычному заказу, поэтому им придётся собрать какую-то башню из уже произведённых колец.

На складах фабрики находятся n колец, i-е кольцо имеет внутренний радиус ai, внешний радиус bi и высоту hi. Требуется выбрать некоторые из этих колец и упорядочить их таким образом, чтобы выполнялись следующие условия:

  • Внешние радиусы колец образовывали невозрастающую последовательность, то есть кольцо j можно поставить на кольцо i только если bj ≤ bi.
  • Кольца не должны проваливаться друг в друга, то есть кольцо j можно поставить на кольцо i только если bj > ai.
  • Суммарная высота всех использованных колец должна быть максимальна.
Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 100 000) — количество колец на складах фабрики.

В i-й из последующих n строк записаны три числа ai, bi и hi (1 ≤ ai, bi, hi ≤ 109, bi > ai) — внутренний радиус, внешний радиус и высота i-го кольца соответственно.

Выходные данные

Выведите максимальную высоту башни, которую смогут получить работники фабрики.

Примечание

В первом примере выгодно поставить друг на друга все имеющиеся кольца в порядке 3, 2, 1.

Во втором примере можно либо поставить кольцо 3 на кольцо 4 и получить башню высоты 3, либо поставить кольцо 1 на кольцо 2 и получить башню высоты 4.

E. Продажа чисел

дп сортировки *3000

Борис очень любит числа и у него даже есть небольшой магазин интересных чисел. В продаже у него есть n десятичных чисел Bi. Стоимость числа в его магазине равна сумме стоимостей цифр, из которых оно состоит. Заданы значения cd, где cd — стоимость цифры d. Естественно, Борис заинтересован в том, чтобы в его магазине были числа как можно большей стоимости.

Недавно Борису попал в руки магический артефакт A, который может позволить ему увеличить стоимость коллекции. Артефакт представляет собой строку, состоящую из цифр и символов '?'. Чтобы применить артефакт, Борис должен заменить все символы '?' на цифры так, чтобы получилась запись десятичного числа без ведущих нулей (число 0 также запрещено). После этого полученное число прибавится к каждому из чисел Bi, которые есть в коллекции Бориса. Артефакт можно использовать только один раз.

Какую максимальную суммарную стоимость коллекции может получить Борис после применения артефакта?

Входные данные

В первой строке ввода находится артефакт A, состоящий из цифр '0'–'9' и символов '?' (1 ≤ |A| ≤ 1000). В следующей строке содержится число n — количество чисел в коллекции Бориса (1 ≤ n ≤ 1000). Следующие n строк содержат целые числа Bi (1 ≤ Bi < 101000). Артефакт A не начинается с цифры '0'.

Последняя строка содержит десять целых чисел — стоимости цифр c0, c1, ..., c9 (0 ≤ ci ≤ 1000).

Выходные данные

Выведите одно целое число — максимальную возможную суммарную стоимость коллекции после применения артефакта.

Примечание

Во втором примере оптимальным выбором будет составить из артефакта число 453. После прибавления этого числа у Бориса окажутся числа 2656, 5682, 729 и 6696. Суммарная стоимость всех цифр в этих числах равна 18 + 15 + 11 + 18 = 62.

C. Игра для бобров

дп игры теория чисел *2000

Бобры Тимур и Марсель играют в следующую игру.

Имеются n бревен, каждое длиной ровно m метров. Бобры делают ходы по очереди. За свой ход бобер выбирает одно из бревен и разгрызает его на некоторое количество (больше одной) равных частей, длина каждой из которых выражается целым числом и не меньше k метров. Каждая получившаяся часть в свою очередь тоже является бревном, которое в дальнейшем может быть разгрызено любым бобром. Проигрывает бобер, который не может сделать ход. Другой бобер, соответственно, выигрывает.

Тимур ходит первым. Игроки играют оптимально. Определите победителя.

Входные данные

В первой строке находятся три целых числа n, m, k (1 ≤ n, m, k ≤ 109).

Выходные данные

Выведите «Timur», если выигрывает Тимур или «Marsel», если выигрывает Марсель. Все нужно выводить без кавычек.

Примечание

В первом примере у бобров имеется только одно бревно, длина которого 15 метров. Тимур ходит первым. Единственный ход, который он может сделать — это разгрызть бревно на 3 части длиною 5 метров каждая. После этого ход Марселя, но он уже не может разгрызть ни одно из оставшихся бревен, так как k = 4. Поэтому победителем является Тимур.

Во втором примере у бобров имеется 4 бревна длины 9 метров. Тимур не может разгрызть ни одно из них, так чтобы оставшиеся части имели длину не меньше 5 метров, поэтому сразу проигрывает.

F. Аксель и Марстон в Битландии

битмаски графы дп матрицы *2400

Два друга Аксель и Марстон вместе путешествуют по Битландии. В Битландии n городов, некоторые пары из которых соединены однонаправленными дорогами. Дороги в Битландии бывают пешеходные и велосипедные. В Битландии может быть несколько дорог между каждой парой городов, и бывают даже дороги из города в него же. Однако, никакие две дороги в Битландии не могут иметь одинаковые начало, конец и тип одновременно.

Друзья находятся в городе 1 и хотят составить маршрут путешествия. Аксель любит ходить пешком, а Марстон предпочитает велосипед. Чтобы маршрут получился разнообразным и интересным для каждого из друзей, они выбирают порядок чередования типов пройденных дорог следующим образом:

  • Маршрут начинается с пешеходной дороги.
  • Пусть известное начало маршрута записано в виде строки s из букв П (пешеходная дорога) и В (велосипедная дорога). Тогда к маршруту s дописывается строка , где означает строку s, в которой тип каждой дороги заменен на противоположный (все пешеходные дороги на велосипедные, и наоборот).

Первые несколько шагов построения маршрута будут выглядеть так: П, ПВ, ПВВП, ПВВПВППВ, ПВВПВППВВППВПВВП, и так далее.

Далее, друзья начинают движение в городе 1 по дорогам Битландии, каждый раз выбирая тип очередной дороги в соответствии с очередным символом маршрута. Если же подходящую дорогу выбрать не удается, друзья заканчивают свое путешествие и летят домой.

Помогите друзьям определить максимально возможную продолжительность своего путешествия, если они будут следовать построенной последовательности типов дорог. Если друзья могут найти путь, состоящий более, чем из 1018 дорог, вместо длины выведите -1.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n ≤ 500, 0 ≤ m ≤ 2n2) — количество городов и дорог в Битландии соответственно.

Следующие m строк описывают дороги. В i-ой из этих строк записано три целых числа vi, ui и ti (1 ≤ vi, ui ≤ n, 0 ≤ ti ≤ 1), где vi и ui — номера городов, являющихся началом и концом i-ой дороги, а ti задает тип i-ой дороги (0 — пешеходная дорога, 1 — велосипедная дорога). Гарантируется, что для каждой пары различных чисел i, j, таких что 1 ≤ i, j ≤ m, либо vi ≠ vj, либо ui ≠ uj, либо ti ≠ tj.

Выходные данные

Если друзья могут найти подходящий путь длины строго большей, чем 1018, выведите одно число -1. В противном случае выведите максимальную длину подходящего пути, то есть наибольшее количество дорог, которое могут пройти друзья.

Примечание

В первом примере путь длины 3 можно получить, пройдя один раз по дороге 1 из города 1 в город 2, после чего дважды по дороге 2 из города 2 в него же.

Во втором примере мы можем получить путь сколь угодно большой длины, сперва пройдя по дороге 1, а после этого выбирая дорогу 2 или 3 в зависимости от очередного типа дороги.

G. Андрюша и живые барьеры

дп Структуры данных *2700

Недавно Андрюша нашел удивительный игровой автомат. Он представлял из себя доску, расположенную вертикально, разбитую на квадраты. Всего на доске было w столбцов, пронумерованных от 1 до w слева направо, и h строк, пронумерованных снизу вверх от 1 до h.

Кроме того, в некоторых строках автомата были расположены перегородки. Всего перегородок было n, и i-я из них располагалась в строке ui, занимая все клетки в столбцах с li по ri. Никакие две перегородки не находились в одной строке, Андрюша это точно запомнил. Кроме того, в каждой строке была хотя бы одна клетка, в которой не было перегородки.

В любой столбец автомата можно было сверху бросить шарик. В таком случае шарик начинал падать вниз, пока не натыкался на какую-либо перегородку или не выпадал из автомата снизу. Если шарик натыкался на перегородку, то он исчезал, а вместо него возникали два шарика слева и справа от перегородки, и продолжали падать по тем же правилам. Если слева или справа от перегородки находился край доски, то оба шарика появлялись с той стороны, где нет края. При этом могло быть, что в какой-то клетке оказывались два или более шарика одновременно, это никак не влияло на их движение. В конце все шарики выпадали из автомата снизу.

Примеры того, как шарики взаимодействуют с барьерами.

Особенность автомата была в том, что иногда шарики проходили сквозь перегородки, как через свободные клетки. Это связано с тем, что перегородки были живыми и боялись шариков, падающих с большой высоты. А именно, если на перегородку номер i падал шарик, который перед этим падал более, чем si клеток (то есть шарик появился в строке с номером строго больше, чем ui + si), то перегородка пропускает этот шарик, как будто ее нет. Если шарик был брошен в автомат сверху, считайте, что он появился на высоте (h + 1).

Андрюша помнит, что он бросил по одному шарику в каждый из столбцов. Найдите для него общее количество шариков, выпавших снизу. Так как это число может быть большим, выведите остаток от деления этого числа на 109 + 7.

Входные данные

В первой строке находятся три целых числа h, w и n (1 ≤ h ≤ 109, 2 ≤ w ≤ 105, 0 ≤ n ≤ 105) — число строк, число столбцов и число перегородок в автомате.

В каждая из следующих n строк находятся четыре целых числа. В i-й из этих строк находятся числа ui, li, ri, si (1 ≤ ui ≤ h, 1 ≤ li ≤ ri ≤ w, 1 ≤ si ≤ 109) — строка, в которой находится i-я перегородка. столбцы, в которых находятся края этой перегородки, и максимальная высота, с которой перегородка не пропускает шарики. Гарантируется, что в каждой строке есть хотя бы одна клетка, в которой нет перегородки, а также то, что все ui различны.

Выходные данные

Выведите единственное число — остаток от деления суммарного числа выпавших шариков на 109 + 7.

Примечание

В первом примере один барьер: если бросить шарик во второй или третий столбец, то выпадет два шарика, иначе — один. Итого ответ 7.

Во втором примере количество выпавших шариков равно 2, 2, 4, 4, 4 при бросании шариков в столбцы слева направо соответственно.

В третьем примере количество выпавших шариков равно 1, 1, 4, 4, 4 при бросании шариков в столбцы слева направо соответственно. Обратите внимание, первый барьер пропускает шарики, падающие на него напрямую, но не пропускает те, что падают на него со второго барьера.

В четвертом примере количество выпавших шариков равно 2, 2, 6, 6, 6, 6, 6, 6, 6, 1, 2, 1, 1, 1, 1 при бросании шариков в столбцы слева направо соответственно. Случай, когда шарик брошен в седьмой столбец, рассмотрен на рисунке ниже.

Результат, если бросить шарик в седьмой столбец.

D. Антон и школа - 2

дп Комбинаторика математика теория чисел *2300

Как вы уже, наверное, знаете, Антон учится в школе. Один из школьных предметов, который изучает Антон — скобкология. На уроках скобкологии школьники обычно изучают всякие последовательности, состоящие только из круглых скобок (символов «(» и «)» (без кавычек)).

На прошлом уроке Антон изучал правильные простые скобочные последовательности (ППСП). Скобочная последовательность s длины n является ППСП, если соблюдаются следующие условия:

  • Она не является пустой (то есть n ≠ 0).
  • Длина последовательности четна.
  • Первые символов последовательности равны «(».
  • Последние символов последовательности равны «)».

Например, последовательность «((()))» является ППСП, а вот последовательности «((())» и «(()())» — нет.

На дом учитель Антона, Елена Ивановна, задала Антону такую задачу. Дана некоторая скобочная последовательность s. Необходимо найти количество ее различных подпоследовательностей таких, что они являются ППСП. Напомним, что подпоследовательностью строки s называется такая строка, которая была получена вычеркиванием из s некоторых символов. Две подпоследовательности считаются различными, если множества позиций вычеркнутых символов различаются.

Так как ответ может быть очень большим, а учителю Антона не нравятся большие числа, то она просит Антона найти ответ по модулю 109 + 7.

Антон долго думал над этой задачей, однако так и не придумал, как ее решить. Помогите Антону решить эту задачу и напишите программу, которая находит ответ на нее!

Входные данные

В единственной строке входных данных находится строка s — исходная скобочная последовательность. Эта строка состоит только из символов «(» и «)» (без кавычек). Гарантируется, что строка непуста и ее длина не превосходит 200 000.

Выходные данные

Выведите одно целое число — ответ на задачу по модулю 109 + 7.

Примечание

В первом примере возможны следующие подпоследовательности:

  • Если вычеркнуть символы на позициях 1 и 5 (нумерация начинается с единицы), то получим подпоследовательность «(())».
  • Если вычеркнуть символы на позициях 1, 2, 3 и 4, то получим подпоследовательность «()».
  • Если вычеркнуть символы на позициях 1, 2, 4 и 5, то получим подпоследовательность «()».
  • Если вычеркнуть символы на позициях 1, 2, 5 и 6, то получим подпоследовательность «()».
  • Если вычеркнуть символы на позициях 1, 3, 4 и 5, то получим подпоследовательность «()».
  • Если вычеркнуть символы на позициях 1, 3, 5 и 6, то получим подпоследовательность «()».

Остальные подпоследовательности не являются ППСП. Итого получили 6 различных подпоследовательностей, которые являются ППСП, поэтому ответ — 6.

A. Берсерк

дп игры поиск в глубину и подобное *2000

Рик и Морти играют в свою собственную версию игры Берсерк (которая не имеет ничего общего с известной игрой Берсерк). Эта игра требует много пространства, поэтому они играют в нее на компьютере.

В этой игре есть n объектов, пронумерованных от 1 до n, расположенных в круг (по часовой стрелке). Объект номер 1 является черной дырой, а все остальные объекты являются планетами. Монстр находится на одной из планет. Рик и Морти ещё не знают на какой, только то, что он изначально не в черной дыре, но Юнити сообщит им положение монстра после начала игры. Но сейчас они хотят подготовиться к каждому возможному сценарию.

У каждого есть множество чисел, каждое из которых лежит между 1 и n - 1 (включительно). Множество Рика s1, имеющее k1 элементов, и множество Морти s2, имеющее k2 элементов. Один из них ходит первый, и игроки ходят поочередно. На каждом ходу игрок должен выбрать произвольное число x из своего множества, и монстр пойдет к x-му следующему объекту от его текущей позиции (по часовой стрелке). Если после его хода монстр попал в черную дыру, игрок выигрывает.

Ваша задача для каждой позиции монстра и тому, кто играет первый, определить, кто выиграет, проиграет, либо игра будет длиться вечно. В случае, если игрок может проиграть или сделать игру бесконечной, более выгодным вариантом является бесконечная игра.

Входные данные

Первая строка входных данных содержит единственное целое число n (2 ≤ n ≤ 7000) — количество объектов в игре.

Вторая строка содержит целое число k1, за которым следует k1 различных целых чисел s1, 1, s1, 2, ..., s1, k1 — множество Рика.

Третья строка содержит целое число k2, за которым следует k2 различных целых чисел s2, 1, s2, 2, ..., s2, k2 — множество Морти.

1 ≤ ki ≤ n - 1 и 1 ≤ si, 1, si, 2, ..., si, ki ≤ n - 1 для всех 1 ≤ i ≤ 2.

Выходные данные

В первой строке выведите n - 1 слов, разделенных пробелом, где i-е слово равно «Win» (без кавычек), если в сценарии, в котором Рик начинает первым и монстр изначально на объекте номер i + 1, он выигрывает, «Lose», если он проигрывает, и «Loop», если игра никогда не закончится.

Подобным образом, во второй строке выведите n - 1 слов, разделенных пробелом, где i-е слово равно «Win» (без кавычек), если в сценарии, в котором Морти начинает первым, и монстр изначально на объекте номер i + 1, он выигрывает, «Lose», если он проигрывает, и «Loop», если игра никогда не закончится.

A. Снова функционалка

дп *1600

В Ужляндии опять что-то произошло... На улицах беспорядки... Для спасения ситуации было решено призвать знаменитых ужляндских героев — баранчика Шона и жирафика Стаса. По прибытию они обнаружили, что граждане обеспокоены незнанием крайних значений Главной Ужляндской Функции f, которая определяется следующим образом:

В этой формуле 1 ≤ l < r ≤ n, где n — размер Главного Ужлянжского Массива a, а |x| обозначает модуль числа x. Но герои прогуливали уроки математики, и поэтому они просят вашей помощи. Помогите им вычислить максимальное значение f среди всех допустимых значений l и r для заданного массива a.

Входные данные

В первой строке входного файла единственное число n (2 ≤ n ≤ 105) — размер массива a.

Во второй строке n целых чисел a1, a2, ..., an (-109 ≤ ai ≤ 109) — элементы массива.

Выходные данные

Выведите одно целое число — максимальное значение функции f.

Примечание

В первом примере максимальное значение f достигается на отрезках [1, 2] и [2, 5].

Во втором примере максимальное значение f достигается, только если отрезком является весь массив.

C. Скучные строки

дп жадные алгоритмы Строки Структуры данных хэши *1800

После того как лиса Кейл вышла из автобуса, она обнаружила, что ошиблась маршрутом. Теперь она была в каком-то странном и незнакомом городе. К счастью, ей вскоре повстречался ее друг — бобром Таро. Лиса поинтересовалась у бобра, как ей пройти к замку. Однако, бобер ответил ей лишь строкой s, которую лиса Кейл постаралась запомнить.

У Кейл — особенные отношения со строками. Например, n строк b1, b2, ... , bn она считает скучными. По этой причине ей никогда не удается запомнить строку, которая содержит хотя бы одну скучную в качестве подстроки.

Таким образом, лиса Кейл опасается, что ей не удастся запомнить строку s целиком, а получится только запомнить некоторую ее подстроку (такую, которая не содержит скучных слов). Ваша задача помочь Кейл, найдите наидлиннейшую подстроку s такую, что подстрока не содержит ни одного скучного слова.

Входные данные

Первая строка входных данных содержит s. Длина s может быть от 1 до 105 включительно.

Вторая строка содержит целое число n (1 ≤ n ≤ 10). Следующие n строк содержат b1, b2, ..., bn, где bi содержится в i-ой из рассматриваемых n строк. Длина каждой строки bi — от 1 до 10, включительно.

Каждый символ в строках s, b1, b2, ..., bn — это либо прописная или строчная буква латинского алфавита, символ подчеркивания («_») или цифра. Символы надо сравнивать с учетом регистра.

Выходные данные

В первую строку выведите два разделенных пробелом целых числа len и pos, где len — длина искомой наидлиннейшей подстроки, а pos — индекс первого (самого левого) символа из s в искомой подстроке (нумерация от 0). Число pos должно находиться в границах от 0 до |s| - len включительно, где |s| обозначает длину строки s.

Если решений несколько, то выведите любое.

Примечание

В первом примере искомой подстрокой является «traight_alon».

Во втором примере искомой подстрокой является пустая строка.

В третьем примере искомой подстрокой является либо «nagio» либо «oisii».

D. Кодовый замок

битмаски дп кратчайшие пути *2800

Наконец лиса Кейл прибыла к своему замку!

Она должна ввести код для входа в свой замок. Консоль ввода, подключенная к её замку, немного необычна.

Консоль ввода — это прямоугольник размера 1 × n, разделенный на n одинаковых квадратных панелей. Они пронумерованы от 1 до n слева направо. Каждая панель имеет состояние ON (включено) или OFF (выключено). Изначально все панели выключены. Она может войти в её замок, тогда и только тогда, когда x1-я, x2-я, ..., xk-я панели находятся во включенном состоянии, а остальные панели находятся в выключенном состоянии.

Ей дан массив a1, a2, ..., al. За каждый ход она может выполнять следующую операцию: выбрать индекс i (1 ≤ i ≤ l), выбрать последовательные ai панелей, и изменить состояния выбранных ai панелей (т.е. ON → OFF, OFF → ON).

К сожалению, она забыла как набрать код, в условиях описанных правил. Помогите определить минимальное число операций, необходимых Кейл для того, чтобы войти в замок.

Входные данные

В первой строке содержится три целых числа n, k и l (1 ≤ n ≤ 10000, 1 ≤ k ≤ 10, 1 ≤ l ≤ 100), разделенных пробелами.

Во второй строке содержится k целых чисел x1, x2, ..., xk (1 ≤ x1 < x2 < ... < xk ≤ n), разделенных пробелом.

В третьей строке содержится l целых чисел a1, a2, ..., al (1 ≤ ai ≤ n), разделенных пробелом. Возможно, что некоторые элементы последовательности a совпадают.

Выходные данные

Выведите наименьшее число ходов, необходимое для того, чтобы ввести код. Если это невозможно, выведите -1.

Примечание

Один из возможных способов ввести код в первом примере: на первом ходу выбрать 1-ую, 2-ую, 3-ую панели и изменить их состояния. На втором ходу можно выбрать 5-ую, 6-ую, 7-ую, 8-ую, 9-ую панели и изменить их состояния.

C. Поделись на три!

дп жадные алгоритмы математика теория чисел *2000

На доске записано целое положительное число n, не содержащее лишних лидирующих нулей и состоящее не более чем из 105 цифр. Необходимо стереть минимальное количество цифр таким образом, чтобы получить красивое число.

Число называется красивым, если оно записано так, что содержит хотя бы одну цифру, не содержит лишних лидирующих нулей и число делится нацело на 3. Например, 0, 99, 10110 — красивые, а 00, 03, 122 — не являются красивыми.

Напишите программу, которая по заданному числу n найдет такое красивое число, которое можно получить из заданного путем вычеркивания минимального количества цифр, или сообщит, что ответа не существует. Вычеркивать из n можно произвольный набор цифр, например, эти цифры не обязаны идти подряд.

Если невозможно получить какое-либо красивое число, то выведите -1. Если ответов несколько, то выведите любой.

Входные данные

В единственной строке задано целое положительное число n (1 ≤ n < 10100000). Заданная запись числа n не содержит лишних лидирующих нулей.

Выходные данные

Выведите единственное число — любое красивое число, полученное вычеркиванием минимального количества цифр. Если ответ не существует, то выведите  - 1.

Примечание

В первом примере для получения числа, которое делится нацело на 3, достаточно удалить только первую цифру. Однако тогда в числе будет присутствовать лишний лидирующий ноль, который недопустим. Следовательно, минимальное количество цифр, которые надо стереть, равно двум.

D. Подарки в Банкополисе

графы дп кратчайшие пути *2100

Банкополис — удивительный город, в котором все n перекрестков расположены на одной прямой, пронумерованы вдоль нее от 1 до n, и на углу каждого из них есть офис банка.

Перекрестки соединены m ориентированными велосипедными дорожками (дорожка номер i ведет от перекрестка ui к перекрестку vi), для каждой дорожки известна сложность проезда по ней.

Обычный клиент банка Олег на день рождения этого самого банка решил подарить счастье и радость его работникам. Он хочет посетить ровно k отделений банка и в каждом посещенном отделении подарить всем его работникам подарки.

Проблема в том, что Олег не хочет видеть реакцию на свои подарки, поэтому он не будет пользоваться дорожкой, проходящей мимо офиса, в котором он уже раздавал подарки (формально, дорожка номер i проходит мимо офиса на перекрестке x если и только если min(ui, vi) < x < max(ui, vi))). Конечно, в каждом офисе Олег может раздавать подарки только один раз. Передвигаться Олег будет по дорожкам, причем он хочет использовать ровно k - 1 дорожку на перемещение между офисами. Олег может начать с любого офиса и закончить поздравлять в любом офисе.

Олег хочет выбрать среди всех возможных маршрутов тот, суммарная сложность дорожек в котором минимальна. Помогите ему найти эту наименьшую возможную сложность.

Входные данные

Первая строка содержит два целых числа n и k, (1 ≤ n, k ≤ 80) — количество перекрестков в Банкополисе и количество офисов, которые хочет посетить Олег.

Вторая строка содержит одно целое число m (0 ≤ m ≤ 2000) — количество велосипедных дорожек в Банкополисе.

Следующие m строк содержат информацию о дорожках.

В i-й из этих строк содержится три целых числа ui, vi и ci (1 ≤ ui, vi ≤ n, 1 ≤ ci ≤ 1000), обозначающие перекрестки, которые соединяет i-я дорожка, и ее сложность.

Выходные данные

В единственной строке выведите минимальную суммарную сложность дорожек в маршруте, или -1, если нет подходящих Олегу маршрутов.

Примечание

В первом примере Олег посещает банки по маршруту 1 → 6 → 2 → 4.

Маршрут 1 → 6 → 2 → 7 с меньшей сложностью является некорректным потому что дорожка 2 → 7 проходит мимо офиса 6 в котором Олег уже побывал.

Во втором примере Олег посещает банки по маршруту 4 → 1 → 3.

E. Проблемы отделений

Деревья дп Конструктив поиск в глубину и подобное *2900

Раньше, когда не было интернета, у каждого банка было множество отделений по всему городу Банкополису, что вызывало множество проблем. А именно, в каждом отделении нужно было каждый день проводить инкассацию.

Однажды Олег услышал разговор двух инкассаторов одного банка. Они каждый день объезжали все отделения и офисы этого банка, причем двигались они по строго определенной схеме. Инкассаторы выезжали из центрального офиса, и каждый раз перемещались по специальной дороге либо между двумя офисами, либо между каким-то офисом и каким-то отделением, в итоге возвращаясь обратно в центральный офис. Известно, что всего отделений и офисов было было n, а специальных дорог — на одну меньше, то есть n - 1. Иными словами, система специальных дорог образовывала корневое дерево, корнем которого являлся центральный офис, все листья дерева были отделениями, а все внутренние вершины — офисами. Инкассаторы всегда объезжали офисы и отделения по одному и тому же маршруту, число дорог в котором было минимально возможным, то есть 2n - 2.

Один из инкассаторов утверждал, что между посещениями отделения a и отделения b (в таком порядке) они посещают столько же отделений, что и между посещениями отделений b и затем a. Другой инкассатор утверждал, что между посещениями отделения c и отделения d они посещают столько же отделений, что и между посещениями отделений d и затем c. Интересной особенностью разговора было то, что кратчайший путь по специальным дорогам между любой парой отделений из a, b, c и d проходил через центральный офис.

Зная схему дорог и номера отделений a, b, c и d, определите, могла ли происходить ситуация, описанная инкассаторами, или нет.

Входные данные

В первой строке находится одно целое число n (5 ≤ n ≤ 5000) — общее число отделений и офисов. Отделения и офисы пронумерованы от 1 до n, центральный офис имеет номер 1.

На следующей строке находятся четыре различных целых числа a, b, c или d (2 ≤ a, b, c, d ≤ n) — номера отделений, упомянутые в разговоре инкассаторов. Гарантируется, что все эти номера являются отделениями (то есть листьями дерева), а не офисами. Гарантируется, что кратчайший путь между любой парой из этих отделений проходит через центральный офис.

Далее следуют n - 1 чисел p2, p3, ..., pn (1 ≤ pi < i), где pi обозначает, что существует специальная дорога между i-м офисом и pi-м офисом или отделением.

Заметьте, что у отделений и офисов общая нумерация.

Гарантируется, что заданный граф является деревом. Отделениями являются листья этого дерева, а офисами — внутренние вершины.

Выходные данные

Если ситуация, описанная инкассаторами, возможна, выведите «YES». Иначе выведите «NO».

Примечание

В первом примере возможен следующий маршрут инкассаторов . Можно заметить, что между посещениями отделений a и b инкассаторы посещают столько же отделений, сколько между посещениями отделениями b и a; аналогичная ситуация с отделениями c и d (маршрут инкассаторов является бесконечным и периодичным, но порядок посещения офисов и отделений не меняется изо дня в день и всегда строго фиксирован).

Во втором примере не существует такого порядка посещения офисов и отделений, что между посещениями c и d инкассаторы заедут в столько же отделений, что между посещениями d и c, а значит, ответа не существует.

В третьем примере маршрут, удовлетворяющий условию задачи, такой: .

F. Улитка Юля

дп разделяй и властвуй Структуры данных *3000

После тяжелой работы аналитику Игорю захотелось немного спокойствия.

Он решил завести себе улитку. Для этого он купил аквариум, в середине которого стоял крошечный гладкий ствол дерева и поместил в аквариум улитку, которую он назвал Юля.

Игорь заметил, что иногда Юля пытается подняться по стволу дерева, однако не может этого сделать, так как ствол гладкий. Чтобы помочь улитке, он подвесил на это дерево нитки, прицепив нижний конец i-й нитки на высоте li над землей, а верхний — на высоте ri.

Так получилось, что верхние концы всех ниток располагаются на разной высоте, то есть все ri различны. Теперь Юля может сползать по стволу вниз, а также подниматься вверх от нижнего конца некоторой веревки до верхнего. Игорь остался доволен своей работой, и теперь, когда он хочет отвлечься от работы, он задается вопросами о возможных перемещениях улитки. А именно, его интересуют вопросы следующего вида: «Предположим, сейчас Юля сидит на стволе на высоте x. Как высоко на стволе дерева она сможет оказаться, если никогда не будет опускаться ниже высоты x и никогда не будет подниматься выше высоты y?» Обратите внимание, Юля не может сползать с веревки на ствол до того, как доберется до верха веревки, и Игоря интересует конечное положение Юли на стволе дерева.

Игорь задается различными вопросами, и не всегда может самостоятельно на них ответить. Помогите Игорю, напишите программу, которая отвечает на соответствующие вопросы.

Входные данные

Первая строка содержит одно целое число n (1  ≤  n ≤  100000) — высота ствола дерева.

Вторая строка содержит одно целое число m (1  ≤  m  ≤  100000) — количество ниток.

Следующие m строк содержат информацию о нитках.

В i-й их этих строк содержатся два целых числа li и ri (1  ≤ li ≤ ri ≤ n), обозначающие высоты, на которых закреплены верхний и нижний конец i-й нитки, соответственно. Гарантируется, что все ri различны.

Следующая строка содержит одно целое число q (1  ≤  q  ≤  100000) — количество вопросов Игоря.

Следующие q строк содержат информацию о вопросах Игоря.

В этих строках содержатся по два целых числа x и y, (1  ≤ x ≤ y ≤ n), где x — высота, где Юля начнет свой путь (и ниже которой не может спускаться), и y — высота, выше которой она забираться не может.

Выходные данные

Для каждого вопроса выведите одно целое число: максимальную высоту, на которую может подняться Юля.

Примечание

Иллюстрация к первому примеру слева, иллюстрация ко второму примеру — справа. Различные цвета веревок ничего не значат и служат лишь для ясности изображений.

G. Заменить все

дп Комбинаторика математика *3400

Аналитик Игорь недавно узнал о интересной функции в его текстовом редакторе, которая называется «Заменить все». Игорь заскучал на работе и придумал следующую задачу:

Для двух заданных строк x и y, состоящих только из латинских букв «A» и «B», пара строк (s, t) называется хорошей, если:

  • s и t состоят из только из символов «0» и «1».
  • 1 ≤ |s|, |t| ≤ n, где запись |z| обозначает длину строки z, а n — фиксированное натуральное число.
  • Если заменить все буквы «A» в строках x и y на строку s, а все буквы «B» в строках x и y — на строку t, то две получившиеся строки из x и y будут равны.

Например, если x = AAB, y = BB, а n = 4, то (01, 0101) — одна из хороших пар строк, потому что обе получившиеся после замены строки будут равны «01010101».

Назовем гибкостью пары строк x и y количество хороших пар строк (s, t). Пары считаются упорядоченными, то есть, например, пара (0, 1) и пара (1, 0) — различные.

Вам даны две строки c и d. Они состоят только из латинских букв «A», «B» и символов «?». Найдите сумму гибкостей всех таких пар строк (c', d'), что c' и d' могут быть получены из c и d соответсвенно заменой знаков вопроса на буквы «A» и «B». Ответ нужно вывести по модулю 109 + 7.

Входные данные

Первая строка содержит строку c (1 ≤ |c| ≤ 3·105).

Вторая строка содержит строку d (1 ≤ |d| ≤ 3·105).

Последняя строка содержит целое число n (1 ≤ n ≤ 3·105).

Выходные данные

Выведите одно число: ответ на задачу по модулю 109 + 7.

Примечание

В первом примере возможно получить четыре различные пары (c', d').

Если (c', d') = (AA, A), то гибкость равна 0.

Если (c', d') = (AB, A), то гибкость равна 0.

Если (c', d') = (AA, B), то гибкость равна 2, так как пары строк (1, 11), (0, 00) — единственные хорошие пары.

Если (c', d') = (AB, B), то гибкость равна 0.

Таким образом, сумма гибкостей равна 2.

Во втором примере существует 21 + 22 + ... + 210 = 2046 различных бинарных строк длины не более 10, а множество пар хороших строк в точности совпадает со множеством пар строк (s, s), где s — бинарная строка, длина которой не превосходит 10.

C. Взлом банков

Деревья дп Конструктив Структуры данных *1900

Несмотря на то, что Инзейн нашел свою кость, его хозяин Зейн еще не вернулся. Чтобы найти Зейна, Инзейну потребуется много денег, которых у него сейчас совсем нет. Чтобы стправиться с этим, он решил взломать банки.

Всего есть n банков, пронумерованных от 1 до n. Банки соединены n - 1 проводами. все банки изначально находятся в состоянии онлайн. У каждого банка есть изначальная защита: защита банка i изначально равна ai.

Определим некоторые понятия перед тем, как продолжить. Банки i и j называются соседними, если и только если между ними существует провод напрямую. Банки i и j называются полу-соседними, если и только если существует такой онлайн банк k, что банки i и k являются соседними, и банки k и j являются соседними.

Когда некоторый банк взломан, он переходит в состояние оффлайн (и никогда не возвращается в онлайн), а другие банки, которые являются соседними или полу-соседними к взломанному, увеличивают свою защиту на 1.

Вначале Инзейн выберет банк, который он взломает первым. Конечно, защита этого банка не должна превышать мощности его компьютера. После этого, он будет выбирать для взлома некоторый банк до тех пор, пока не будут взломаны все банки, но он может выбрать для взлома банк номер x если и только если все следующие условия выполнены:

  1. Банк x находится в состоянии онлайн. То есть, банк x еще не взломан.
  2. Банк x является соседним к какому-то оффлайн банку.
  3. Защита банка x не превосходит мощности компьютера Инзейна.

Определите минимальную необходимую мощность компьютера, с помощью которого Инзейн сможет взломать все банки.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 3·105) — число банков.

Вторая строка содержит n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — защиты банков.

Каждая из следующих n - 1 строк содержит два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi), что означает, что есть прямой провод между банками ui и vi.

Гарантируется, что провода соединяют банки так, что Инзейн может взломать все банки, используя компьютер некоторой мощности.

Выходные данные

Выведите одно число — минимальная мощность компьютера, с которым Инзейн сможет взломать все банки.

Примечание

В первом примере Инзейн может взломать все банки, используя компьютер мощности 5:

  • Изначально защиты банков равны [1, 2, 3, 4, 5].
  • Он взламывает банк 5, силы банков становятся равными [1, 2, 4, 5,  - ].
  • Он взламывает банк 4, силы банков становятся равными [1, 3, 5,  - ,  - ].
  • Он взламывает банк 3, силы банков становятся равными [2, 4,  - ,  - ,  - ].
  • Он взламывает банк 2, силы банков становятся равными [3,  - ,  - ,  - ,  - ].
  • Он взламывает банк 1 и достигает своей цели.

Во втором примере Инзейн может взламывать банки в порядке 4, 2, 3, 1, 5, 7 и 6. Таким образом, ему достаточно компьютера мощностью 93.

D. Посты полиции

графы Деревья дп Конструктив кратчайшие пути поиск в глубину и подобное *2100

Инзейн наконец-то нашел Зейна, и у них еще много денег! Поэтому они решили создать собственную страну.

Правление страной — непростая задача. Бандиты и террористы постоянно пытаются разрушить покой. Чтобы бороться с этим, Зейн и Инзейн разработали следующее правило: от каждого города должно быть возможно достичь пост полиции, проехав не более d километров по дорогам.

В стране n городов, пронумерованных от 1 до n, соединенных n - 1 дорогами. Все дороги имею длину 1 километр. Возможно добраться от любого города до любого другого, используя эти дороги. Кроме того, есть k постов полиции, расположенных в некоторых городах. Расположение постов полиции удовлетворяет закону, описанному выше. Заметьте, что некоторые посты могут быть расположены в одном и том же городе.

Однако, Зейн считает, что n - 1 дорога это слишком много. Страна испытывает финансовый кризис, поэтому необходимо закрыть как можно больше дорог.

Помогите Зейну определить максимальное число дорог, которое можно закрыть, не нарушая закон. Кроме того, найдите эти дороги.

Входные данные

Первая строка содержит три целых числа n, k и d (2 ≤ n ≤ 3·105, 1 ≤ k ≤ 3·105, 0 ≤ d ≤ n - 1) — число городов, число постов полиции, ограничение на расстояние в законе, соответственно.

Вторая строка содержит k целых чисел p1, p2, ..., pk (1 ≤ pi ≤ n) — города, в которых расположены посты полиции.

i-я из следующих n - 1 строк содержит два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) — города, непосредственно соединенные дорогой i.

Гарантируется, что возможно добраться от любого города до любого другого, используя эти дороги. Кроме того, от любого города можно добраться до поста полиции, проехав не более d километров.

Выходные данные

В первой строке выведите одно целое число s, означающее максимальное число дорог, которое можно закрыть.

Во второй строке выведите s различных чисел — номера дорог, для которых это верно.

Если ответов несколько, выведите любой из них.

Примечание

Во втором примере, если закрыть дорогу номер 5, то от всех городов по-прежнему можно будет достичь пост полиции, проехав не более k = 4 километров.

Во втором примере, несмотря на то, что множество дорог, которые можно закрыть, единственно, вы можете вывести 4 5 или 5 4 во второй строке.

E. Списывание на экзамене

Бинарный поиск дп *2400

Зейн и его возлюбленная назначили свидание! Однако, у девушки проблемы с экзаменом по физике, и ей нужна ваша помощь.

В экзамене n вопросов, пронумерованных от 1 до n. Вопрос i идет перед вопросом i + 1 (1 ≤ i < n). Каждый из вопросов не может быть угадан. К счастью, девушка сидит как раз мжду двумя гениями, и она решила списать.

Однако, даже гении знают ответы не на все вопросы: про каждый вопрос они либо знают ответ, либо нет. Однако, если они знают ответ, то он верный.

Чтобы не быть уличенной в списывании, девушка может бросить взгляд на ответы соседа не более p раз, каждый раз смотря на не более чем k последовательных вопросов на листе ответов одного из двух гениев. Когда девушка смотрит на ответ на какой-то из вопросов, она списывает ответ, если он есть, и ничего не делает иначе.

Помогите девушке узнать максимальное число вопросов, на которые она может ответить.

Входные данные

Первая строка содержит три целых числа n, p и k (1 ≤ n, p ≤ 1, 000, 1 ≤ k ≤ min(n, 50)) — количество вопросов, максимальное число раз, которое девушка может подсмотреть ответы, и максимальное число вопросов, ответ на которые девушка может подсмотреть за один раз, соответственно.

Вторая строка содержит одно целое число r (0 ≤ r ≤ n), означающее число вопросов, на которые ответил первый гений. Затем следует r целых чисел a1, a2, ..., ar (1 ≤ ai ≤ n) — номера вопросов, на которые есть ответ, данные в строго возрастающем порядке (то есть ai < ai + 1).

Третья строка содержит одно целое число s (0 ≤ s ≤ n), означающее число вопросов, на которые ответил второй гений. Затем следует s целых чисел b1, b2, ..., bs (1 ≤ bi ≤ n) — номера вопросов, на которые есть ответ, данные в строго возрастающем порядке (то есть, bi < bi + 1).

Выходные данные

Выведите одно целое число — максимальное число вопросов, на которые девушка может узнать ответ.

Примечание

Пусть (x, l, r) означает подглядывание ответа на все вопросы i такие, что l ≤ i ≤ r на листе ответов x-го гения.

В первом примере девушка может узнать ответы на 4 вопроса, выполнив действия (1, 1, 3) и (2, 5, 6).

Во втором примере девушка может выполнить операции (1, 3, 5), (2, 2, 4) и (2, 6, 8), чтобы узнать ответ на 7 вопросов.

B. Нечетная сумма

дп жадные алгоритмы реализация *1400

Дана последовательность из n целых чисел a1, a2, ..., an. Необходимо найти такую её подпоследовательность, что её сумма нечётна и максимальна по всем таким подпоследовательностям. Гарантируется, что в заданной последовательности найдется подпоследовательность с нечетной суммой.

Подпоследовательность — это последовательность, которую можно получить из другой последовательности путем удаления некоторых элементов, не меняя порядок оставшихся элементов.

Напишите программу, которая найдет сумму искомой подпоследовательности.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105).

Во второй строке задано n целых чисел a1, a2, ..., an ( - 104 ≤ ai ≤ 104). В данной последовательности есть хотя бы одна подпоследовательность с нечетной суммой.

Выходные данные

Выведите сумму искомой подпоследовательности.

Примечание

В первом примере сумма второго и четвертого элементов равна 3.

E. Запросы на массиве

дп Перебор Структуры данных *2000

Дан массив a из n элементов, все элементы — натуральные числа, не превышающие n.

Необходимо обработать q запросов к этому массиву. Каждый запрос задаётся двумя числами p и k. Запрос состоит из нескольких операций, каждая операция заменяет число p числом p + ap + k. Эти операции проводятся, пока p не станет больше, чем n. Для каждого запроса необходимо выяснить количество таких операций.

Входные данные

В первой строке входного файла задано единственное число n (1 ≤ n ≤ 100000).

Во второй строке задано n целых чисел — массив a (1 ≤ ai ≤ n для всех i от 1 до n).

В третьей строке задано число q — количество запросов (1 ≤ q ≤ 100000).

В следующих q строках задано по два числа p и k (1 ≤ p, k ≤ n) — описание очередного запроса.

Выходные данные

Выведите q чисел, i-е из них должно быть равно ответу на запрос под номером i.

Примечание

Разберём пример из условия:

В первом запросе после первой операции p = 3, после второй p = 5.

Во втором и третьем запросах p становится больше n уже после первой операции.

F. Мышки и норки

дп жадные алгоритмы сортировки Структуры данных *2600

Однажды Маша неожиданно вернулась домой и застала n мышей в коридоре своей квартиры. Как и положено девушке, она настолько громко закричала, что мыши в ужасе стали разбегаться по своим норкам.

Коридор можно представить числовой прямой, на которой расположены n мышей и m норок. i-я мышка изначально находится в точке xi, а j-я норка — в точке pj. Вместимость j-й норки составляет cj, то есть в эту норку может поместиться не более cj мышек.

Какой минимальный суммарный путь проделают мышки, чтобы после крика Маши все они спрятались по норкам? Если i-я мышка выберет в качестве укрытия норку j, то пройденный путь следует считать по формуле |xi - pj|.

Выведите минимальный суммарный путь мышек до норок.

Входные данные

В первой строке записаны два целых числа n, m (1 ≤ n, m ≤ 5000) — количество мышек и количество норок соответственно.

Вторая строка содержит последовательность из n целых чисел x1, x2, ..., xn ( - 109 ≤ xi ≤ 109), где xi — начальная координата i-й мышки.

Следующие m строк содержат пары целых чисел — описания норок pj, cj ( - 109 ≤ pj ≤ 109, 1 ≤ cj ≤ 5000), где pj — координата j-й норки, а cj — вместимость j-й норки (в мышках).

Выходные данные

Выведите единственное целое число — минимальный суммарный путь мышек, чтобы каждая мышка оказалась в норке. Выведите -1, если решения не существует.

B. Майк и строки

дп Перебор Строки *1300

У Майка есть n строк s1, s2, ..., sn. Каждая строка состоит из маленьких букв латинского алфавита. За один ход он может выбрать строку si, удалить первый символ и вставить его в конец этой строки. Например, если у него имеется строка «coolmike», то за один ход он может преобразовать эту строку в строку равную «oolmikec».

Теперь Майк задается вопросом: какое минимальное количество ходов необходимо сделать, чтобы все строки стали равными.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 50) — количество строк.

После этого следуют n строк, каждая из которых содержит строку. i-я строка соответствует строке si. Длины строк одинаковы. Длина каждой строки положительна и не превосходит 50.

Выходные данные

Выведите минимальное количество ходов, которое необходимо сделать, чтобы все строки стали равными, или выведите  - 1, если решения не существует.

Примечание

В первом тестовом примере оптимальным образом будет преобразовать все строки в строку «zwoxz».

C. Майк и GCD

дп жадные алгоритмы теория чисел *1700

У Майка есть последовательность A = [a1, a2, ..., an] длины n. Он считает последовательность B = [b1, b2, ..., bn] красивой, если gcd всех её элементов больше чем 1, то есть .

Майк хочет изменить последовательность, чтобы сделать её красивой. За один ход он может выбрать позицию i (1 ≤ i < n), удалить числа ai, ai + 1 и вставить числа ai - ai + 1, ai + ai + 1 на их место в таком порядке. Он хочет сделать как можно меньше ходов. Найдите минимальное количество ходов, которое необходимо сделать, чтобы последовательность A стала красивой, иначе сообщите ему, что это невозможно.

— наибольшее натуральное число d, такое что d делит bi для всех i (1 ≤ i ≤ n).

Входные данные

Первая строка входных данных содержит единственное целое число n (2 ≤ n ≤ 100 000) — длина последовательности A.

Вторая строка содержит n целых чисел, разделенных пробелами, a1, a2, ..., an (1 ≤ ai ≤ 109) — элементы последовательности A.

Выходные данные

В первой строке выведите «YES» (без кавычек), если возможно последовательность A сделать красивой, выполнением ходов, описанных выше. Или выведите «NO» (без кавычек) иначе.

Если выведенный ответ был «YES», тогда выведите минимальное количество ходов необходимое для того, чтобы сделать последовательность A красивой.

Примечание

В первом тестовом примере достаточно сделать только один ход, чтобы получить последовательность [0, 2] с .

Во втором тестовом примере gcd последовательности изначальное больше чем 1.

D. Расширение поля

meet-in-the-middle дп Перебор *2100

Одна из игр, которыми увлекается Аркадий, происходит на прямоугольном участке. В процессе игры Аркадий может покупать расширения для своего участка, каждое расширение в несколько раз увеличивает любую из двух сторон его участка. Формально, есть n расширений, i-е из них позволяет увеличить длину или ширину (по выбору Аркадия) участка в ai раз. Каждое расширение можно использовать не более одного раза, расширения можно использовать в любом порядке.

Сейчас участок Аркадия имеет размер h × w. Он хочет его расширить так, чтобы возможно было разместить на участке прямоугольное поле размером a × b (вдоль или поперек, параллельно сторонам участка). Найдите минимальное число расширений, которое будет достаточно Аркадию для достижения своей цели.

Входные данные

В первой строке следуют пять целых чисел a, b, h, w и n (1 ≤ a, b, h, w, n ≤ 100 000) — размеры поля, которое нужно разместить на участке, размеры участка, а также количество доступных расширений.

Во второй строке следует последовательность n целых чисел a1, a2, ..., an (2 ≤ ai ≤ 100 000), где ai равно количеству раз, в которое может быть увеличена сторона при применении к ней i-го расширений.

Выходные данные

Выведите минимальное число расширений, которое будет достаточно Аркадию для достижения своей цели. Если невозможно поместить поле на участок после использования всех расширений, выведите -1. Если поле изначально помещается на участок, выведите 0.

Примечание

В первом примере достаточно использовать любое из доступных расширений. Например, можно увеличить h в 5 раз, использовав второе расширение. Тогда h станет равно 10 и станет возможно поместить поле на получившийся расширенный участок.

C. Нахождение порядка

битмаски дп *2000

Девочка Лена очень любит порядок и пытается везде его искать. Как-то раз она собиралась в университет и заметила, что в комнате ужасный беспорядок — все вещи из ее сумочки разбросаны по комнате. Конечно же, она захотела их собрать в сумочку. Беда только в том, что девочка не может нести более двух вещей одновременно и не может переносить сумочку. Также если она взяла вещь, то положить ее куда-нибудь кроме сумочки она не может — ей мешает врожденное чувство идеального порядка.

Вам заданы координаты сумочки и координаты вещей в некоторой декартовой системе координат. Известно, что девочка проходит путь между двумя объектами за время равное квадрату длины отрезка соединяющего точки, в которых находятся объекты. Также известно, что изначально координаты девочки и сумочки совпадают. Требуется найти такой порядок действий, при котором девочка соберет все вещи в сумочку за минимальное время.

Входные данные

В первой строке входного файла заданы координаты сумочки xs, ys. Во второй строке задано число n (1 ≤ n ≤ 24) — количество вещей у девочки. В следующих n строках заданы координаты вещей девочки. Все координаты не превосходят по модулю 100. Координаты всех заданных во входных данных объектов различны. Все заданные числа — целые.

Выходные данные

В первую строку выведите единственное число минимальное время, требуемое девочке чтобы собрать все вещи.

Во вторую строку выведите возможный оптимальный путь Лены. Каждая вещь обозначается своим порядковым номером при задании во входных данных (от 1 до n), а позиция сумочки обозначается числом 0. Путь должен начинаться и заканчиваться в позиции сумочки. Если решений несколько, выведите любое из них.

E. Бусы

графы дп *2600

Один марсианский мальчик по имени Цорг хочет подарить своей подруге с Земли Маше бусы. Он знает, что Маша любит два цвета: синий и красный, — и как раз в магазине, куда он зашел, есть все возможные украшения с бусинами двух цветов. На каждых бусах есть маленькая застежка, если ее расстегнуть, то можно заметить, что все бусы в магазине одинаковой длины. Из-за особенностей марсианского зрения если Цорг видит одни сине-красные бусы, а потом другие, в которых на месте синих стоят красные бусины, а на месте красных — синие, он считает эти две нитки бус одинаковыми. Иными словами, для Цорга одинаковыми считаются не только те бусы, что получаются друг из друга переворотом нитки, но и те, что получаются друг из друга сменой цветов и/или переворотом ниток.

Как известно все марсиане очень аккуратны, и если марсианин видит некоторое множество предметов, то он старается упорядочить их. Красную бусину Цорг считает меньше синей. Обозначим красную бусину — 0, а синюю — 1. Из двух ниток марсианин раньше положит ту, у которой на i-ом месте нанизана красная бусина, при том, что во второй нитке на i-ом месте — синяя, а первые i - 1 бусины у них совпадают.

Сначала Цорг расстегивает все бусы и раскладывает на кучки так, что, по его мнению, в каждой из них лежат одинаковые нитки. Потом он упорядочивает каждую кучку и выбирает по одним бусам, являющимся наименьшими в данной кучке. Все остальные бусы он отдает продавцу и просит их убрать. Затем Цорг упорядочивает все оставшиеся бусы и покупает k-ые по номеру.

Все эти операции займут очень много времени у Цорга, поэтому он просит вас помочь найти бусы для Маши.

Входные данные

Во входном файле записано два целых числа n и k (2 ≤ n ≤ 50;1 ≤ k ≤ 1016) — длина бус и номер выбранной Цоргом нитки бус.

Выходные данные

В выходной файл выведите k-ые бусы, обозначая красную бусину — 0, а синюю — 1. Если искомую нитку бус выбрать невозможно, то выведите единственное число -1.

Примечание

Рассмотрим все бусы длины 4 — 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110. Цорг разобьет их на кучки: {0001, 0111, 1000, 1110}, {0010, 0100, 1011, 1101}, {0011, 1100}, {0101, 1010}, {0110, 1001}. Потом он оставляет по меньшей нитке бус из каждой кучки: 0001, 0010, 0011, 0101, 0110. Четвертая нитка — 0101.

K. Отправьте Дурака Дальше! (средняя)

Деревья дп *2100

Спасибо, что помогаете Хайди! Сегодня второе апреля, но ее снова вызвала Дженни. Шутка еще не закончилась...

Тем временем Хайди решила, что больше не доверяет своим друзьям. Во всяком случае, не слишком доверяет. Ее относительное отсутствие доверия проявляется следующим образом: в то время как ранее ей не пришлось бы посещать одного и того же человека дважды, теперь она может быть уверена лишь в том, что ее не заставят посетить одного и того же друга более чем k раз.

В случае с Дженни первое её посещение в начале учитывается. Ситуация с простой версией задачи соответствует случаю для k = 1.

Это не так плохо, как кажется, поскольку один билет на маршрут между двумя друзьями позволяет Хайди путешествовать между этой парой друзей целый день (в обоих направлениях). Другими словами, как только она платит за путешествие между парой друзей, все дальнейшие путешествия между этой парой бесплатны.

Каково максимальная сумма денег, которые Хайди может потратить на путешествия между друзьями?

Входные данные

В первой строке следует два целых числа n и k (, 1 ≤ k ≤ 105) — количество друзей и максимальное количество посещений каждого из друзей.

В следующих n - 1 строках следует по три целых числа u, v и c (0 ≤ u, v ≤ n - 1, 1 ≤ c ≤ 104), означающих, что u и v являются друзьями и стоимость путешествия между ними равна c.

Гарантируется, что дружеские связи из входных данных формируют дерево.

Выходные данные

Выведите одно целое число — максимальную сумму денег, которые Хайди может потратить на путешествия между друзьями.

Примечание

В первом пример худший сценарий для Хайди - посетить друзей в следующем порядке: 0, 1, 5, 1, 3, 1, 0, 2, 6, 2, 7, 2, 8. Обратите внимание, что ни один друг не посещается более чем 3 раза.

L. Отправьте Дурака Дальше! (сложная)

Деревья дп математика поиск в глубину и подобное *2400

Хайди в ужасе от шутки, и она сочла нереальным, что ее друзья будут специально загонять её в долги. Она ожидает, что фактически, каждый человек просто выберет случайного друга, чтобы отправить Хайди. Из этого следует, что теперь Хайди может посещать одного и того же друга произвольное количество раз. Более того, если у человека есть ровно один общий друг с Хайди (то есть он является листом дерева), тогда этот человек не отправит Хайди обратно (то есть путешествие Хайди закончится в некоторой точке).

Хайди также кажется нереальным то, что она сможет совершить свое путешествие за один день. Поэтому теперь она предполагает, что каждый раз, когда она путешествует по маршруту между двумя друзьями, ей нужно покупать новый билет. Она хочет знать математическое ожидание суммы денег, которые она потратит на путешествия.

Полагайте, что у Дженни есть по крайней мере два друга.

Входные данные

В первой строке следует целое число n (3 ≤ n ≤ 105) — количество друзей.

В следующих n - 1 строках следует по три целых числа u, v и c (0 ≤ u, v ≤ n - 1, 1 ≤ c ≤ 104), означающих что u и v являются друзьями и стоимость путешествий между ними равна c (для каждого нового путешествия между ними теперь нужно покупать новый билет).

Гарантируется, что дружеские связи из входных данных формируют дерево.

Выходные данные

Предположим, что ожидаемая стоимость путешествий записывается как несократимая дробь a / b (то есть, a и b являются взаимно простыми). Хайди просит вас вывести величину . То есть, выводимое число должно быть в пределах от 0 до 109 + 6, включительно.

Примечание

В первом примере с вероятностью 1 / 2 Хайди пойдет в 1 из 0, и с вероятностью 1 / 2 она пойдет в 2. В первом случае стоимость будет 10, а во второй она будет 20. Достигнув 1 или 2 она остановится, так 1 и 2 являются листьями дерева. Следовательно, ожидаемые расходы Хайди на путешествия составляют 10·1 / 2 + 20·1 / 2 = 15.

В третьем примере ожидаемая стоимость составляет 81 / 5. Поэтому нужно вывести число 400000019.

В ходе своих путешествий Хайди узнала интригующий факт о структуре своих дружеских связей. Она сообщает вам следующее: Таинственный определитель, о котором вы могли бы подумать, таков, что он не вызывает странных ошибок в вашем разумном решении... Мы упоминали, что Хайди - странная корова?

E. Рома и покер

графы дп *2000

По вечерам Рома любит играть в онлайн-покер на одном из популярных сайтов. Игры на этом сайте проходят в странном формате: играют всегда ровно два игрока, ставок нет, а победитель забирает у проигравшего 1 виртуальный бурль.

Прошлым вечером Рома зашёл на сайт и начал играть. Он решил, что потратит за вечер не более k виртуальных бурлей — он прекратит игру, как только количество проигрышей превысит количество выигрышей на k. Также Рома выходит из игры, если он выиграет достаточно за вечер — а именно, если количество выигрышей превысит количество проигрышей на k.

На следующее утро Рома нашёл лист, на котором была записана последовательность результатов игр. Рома точно не помнит порядок игр, и часть результатов записана слишком неразборчиво, поэтому он не может вспомнить, выиграл он или проиграл k бурлей.

Последовательность, записанная Ромой — это строка s, состоящая из символов W (Рома выиграл соответствующую игру), L (Рома проиграл), D (Рома сыграл вничью) и ? (результат игры неизвестен). Рома хочет восстановить по ней любую правильную последовательность результатов игр, заменив все символы ? на W, L или D. Последовательность результатов игр называется правильной, если выполняются следующие условия:

  • В конце игры количество выигрышей и проигрышей Ромы различаются ровно на k;
  • Нет таких партий, перед которыми количество выигрышей и проигрышей Ромы различались ровно на k.

Помогите Роме, восстановив любую последовательность, удовлетворяющую этим условиям.

Входные данные

В первой строке заданы два числа n (длина последовательности, записанной Ромой) и k (1 ≤ n, k ≤ 1000).

Во второй строке задана последовательность s из символов W, L, D и ?. В последовательности ровно n символов.

Выходные данные

Если правильной последовательности, которая может быть получена из s заменой всех символов ? на символы W, L или D, не существует, выведите NO.

Иначе выведите эту последовательность. Если таких последовательностей несколько, выведите любую из них.

D. Матожидание диаметра дерева

Бинарный поиск Деревья дп Перебор поиск в глубину и подобное сортировки *2500

Паша — прилежный студент, один из лучших друзей Моджака. Он всегда размышляет над какой-то задачей. Сегодня они разговаривали о следующей задаче.

Дан лес (ациклический неориентированный граф) из n вершин и m ребер. Также есть q запросов, на которые необходимо ответить. В каждом запросе даны две вершины v и u. Пусть V — множество вершин в компоненте связности, к которой принадлежит v, а U — множество вершин в компоненте связности, к которой принадлежит u. Добавим ребро между некоторой вершиной и некоторой вершиной и вычислим величину d получившейся компоненты. Если получившаяся компонента — дерево, то величина d равна диаметру компоненты, иначе она равна -1. Найдите математическое ожидание величины d, если вершины a и b выбираются из множеств равновероятно случайным образом.

Можете помочь Паше решить эту задачу?

Диаметром компоненты называется максимальное расстояние между парой вершин в компоненте. Расстоянием между двумя вершинами называется минимальное число ребер на пути между ними.

Заметьте, что запросы не добавляют ребер в изначальный лес.

Входные данные

Первая строка содержит три целых числа n, m и q (1 ≤ n, m, q ≤ 105) — количество вершин и ребер в графе и количество запросов.

Каждая из следующих m строк содержит два целых числа ui и vi (1 ≤ ui, vi ≤ n), что значит, что есть ребро между вершинами ui и vi.

Гарантируется, что заданный граф — лес.

Каждая из следующих q строк содержит два целых числа ui и vi (1 ≤ ui, vi ≤ n) — вершины, участвующие в i-м запросе.

Выходные данные

Для каждого запроса выведите математическое ожидание величины d в соответствии с условием задачи.

Ваш ответ будет засчитан, если его абсолютная или относительная ошибка не превосходит10 - 6. Формально, пусть ваш ответ равен a, а ответ жюри равен b. Ваш ответ будет засчитан, если .

Примечание

В первом примере вершины 1 и 3 лежат в одной компоненте, поэтому ответ на первый запрос равен -1. Во втором запросе есть два исхода: добавить ребро 1 - 2, или добавить ребро 2 - 3. В обоих случаях диаметр равен 2, поэтому ответ равен 2.

Во втором примере ответ на первый запрос равен -1. Ответ на второй запрос — среднее по трем случаям: Если добавлены ребра 1 - 2 или 1 - 3, то диаметр будет равен 3, а если добавлено ребро 1 - 4, то диаметр равен 2. Поэтому ответ равен .

F. Фальшивые слитки

графы дп Комбинаторика поиск в глубину и подобное теория чисел *3400

В Исарте люди живут вечно. Среди них есть n банд злоумышленников. В i-й банде состоят si человек, пронумерованных от 0 до si - 1. Некоторые из них однажды приняли участие в большом ограблении шахты и украли каждый по одному золотому слитку (эти люди заданы во входных данных). Это произошло 10100 лет назад и с тех пор все банды уехали далеко от городов.

Все эти годы бандиты копировали некоторые золотые слитки в соответствии с определенным планом, чтобы не быть пойманными. Они построили ориентированный граф-турнир (то есть граф, в котором между каждой парой вершин есть одно направленное ребро), вершины в котором — банды (граф задан во входных данных). В этом графе ребро из вершины u в вершину v означало, что в i-й час человек номер из банды u может послать фальшивый слиток человеку номер из банды v. Он посылает слиток, только если у него есть какой-то слиток (настоящий или фальшивый), а у получателя нет слитков. Таким образом, в каждый момент времени каждый бандит имел один или ноль слитков. Некоторые из бандитов имели настоящие слитки, некоторые — фальшивые.

В начале этого года полиции удалось найти банды, но, как всегда, поймать их она пока не может. Полиция решила открыть ювелирный магазин, чтобы бандиты попытались продать слитки. Теперь каждый бандит, у которого есть слиток (подлинный или фальшивый), попробует его продать. Если слиток подлинный, то он его без проблем продаст, а если фальшивый, то может случиться одна из двух ситуаций:

  • Бандит успешно продаст слиток.
  • Бандит будет арестован полицией.

Сила банды равна числу бандитов, которые успешно продали свой слиток. После того, как все продажи завершены, полиция арестует b банд из самых сильных. Банда с силой p состоит в самых сильных бандах, если и только если не более чем a - 1 банда имеет силу строго больше p. Рассмотрим всевозможные результаты продажи фальшивых слитков и всевозможные способы выбрать b банд из самых сильных банд. Подсчитайте, сколько различных множеств могут образовать эти b банд по модулю 109 + 7. Два множества X и Y считаются различными, если некоторая банда есть в X, но ее нет в Y.

Входные данные

Первая строка содержит три целых числа n, a и b (1 ≤ b ≤ a ≤ n ≤ 5·103) — количество банд и числа a и b из условия.

Далее следуют n строк, каждая из них содержит строку длины n из нулей и единиц. Если j-й символ i-й строки равен 1, то из вершины i в вершину j есть ребро. Гарантируется, что aii = 0, и aij + aji = 1 при i ≠ j.

Далее следуют n строк, каждая начинается с числа si (1 ≤ si ≤ 2·106) — количеству бандитов в i-й банде, и затем содержит строку из нулей и единиц длины si. j-й символ равен 0, если j-й человек i-й банды имел настоящий слиток изначально, иначе символ равен 1. Гарантируется, что сумма si не превосходит 2·106.

Выходные данные

Выведите одно число: количество различных множеств из b банд, которые полиция может арестовать по модулю 109 + 7.

E. Продажа сувениров

Бинарный поиск дп жадные алгоритмы Тернарный поиск *2300

После нескольких реформ в Берляндию стали гораздо чаще приезжать туристы, и многие жители Берляндии, смекнув, что в туристическом бизнесе можно очень неплохо заработать, решили сменить место работы. Петя, например, бросил работу в IT-фирме и стал продавать сувениры на рынке.

Как и всегда, этим утром Петя собрался на рынок. У Пети дома стоит n различных сувениров; i-й сувенир характеризуется своим весом wi и стоимостью ci. По предыдущим дням Петя понял, что, скорее всего, ему не удастся донести все сувениры до рынка. Поэтому Петя хочет выбрать такое подмножество сувениров, что суммарный вес всех сувениров из подмножества не превышает m, а суммарная стоимость максимальна.

Помогите Пете определить максимальную суммарную стоимость.

Входные данные

В первой строке записаны два числа n и m (1 ≤ n ≤ 100000, 1 ≤ m ≤ 300000) — кол-во сувениров у Пети и максимальный суммарный вес, который он сможет унести.

Далее следуют n строк, в i-й из них записаны два числа wi и ci (1 ≤ wi ≤ 3, 1 ≤ ci ≤ 109) — вес и стоимость i-го сувенира.

Выходные данные

Выведите единственное число — максимальную суммарную стоимость сувениров, которые Петя сможет донести на рынок.

G. Гимн Берляндии

дп Строки *2300

У Берляндии невероятно богатая и славная история. Чтобы повысить уровень осведомленности о ней среди молодого поколения, Король Берляндии распорядился сочинить гимн.

Несмотря на то, что в прошлом у Берляндии было огромное множество достойных побед, есть одна наиболее важная. Король желает упомянуть ее в гимне как можно большее количество раз.

Он уже сочинил немалую часть гимна, осталось лишь заполнить некоторые места, которые ему никак не удаются. Король просит вас помочь с его работой.

Гимн Берляндии — это строка s, состоящая из не более чем 105 строчных латинских букв и знаков вопроса. Самая важная победа — это строка t, состоящая из не более чем 105 строчных латинских букв. Необходимо заменить все знаки вопроса строчными латинскими буквами так, чтобы максимизировать количество вхождений строки t в s.

Обратите внимание, что вхождения строки t в s могут пересекаться. В третьем примере рассмотрен такой случай.

Входные данные

Первая строка содержит строку из строчных латинских букв и знаков вопроса s (1 ≤ |s| ≤ 105).

Вторая строка содержит строку из строчных латинских букв t (1 ≤ |t| ≤ 105).

Произведение длин строк |s|·|t| не превосходит 107.

Выходные данные

Выведите максимальное количество вхождений строки t, которое можно достичь, заменив все знаки вопроса в строке s не строчные латинские буквы.

Примечание

В первом примере полученная строка s"winlosewinwinlwinwin"

Во втором примере полученная строка s"glorytoreorand". Последняя буква в строке может быть выбрана произвольно.

В третьем примере вхождения строки t пересекаются между собой. Строка s с максимальным количеством вхождений t"abcabcab".

C. Найти машину

дп Комбинаторика разделяй и властвуй *2600

После прекрасного вечера в ресторане пришло время Нуре и Лехе ехать по домам. Хакер, как истинный джентльмен, предложил подвезти девушку к её дому. Нура, конечно же, с удовольствием согласилась. Но вот незадача: Леха никак не может найти свою машину на огромной стоянке близ ресторана. За помощью он решил обратиться к сторожу.

Формально стоянку можно представить как матрицу 109 × 109. Во всех клетках матрицы стоят машины, в каждой клетке - ровно одна машина. У всех машин есть номер, выраженный целым положительным числом. Пронумеруем столбцы и строки матрицы от 1 до 109 слева направо и сверху вниз соответственно. По стечению странных обстоятельств оказалось, что для каждой клетки (x, y) матрицы номер машины, стоящей в этой клетке, равен минимальному числу, которое еще не встречалось среди номеров машин, стоящих на клетках (i, y) и (x, j), 1 ≤ i < x, 1 ≤ j < y.

Левый верхний фрагмент 5 × 5 парковки

Леха хочет задать сторожу q запросов, которые помогут хакеру найти свою машину. В каждом запросе Леха дает сторожу пять целых чисел x1, y1, x2, y2, k. После этого сторож должен рассмотреть все клетки (x, y) матрицы, такие что x1 ≤ x ≤ x2 и y1 ≤ y ≤ y2, и если номер машины, стоящей в клетке (x, y), не превышает k, то прибавить этот номер к ответу на запрос. Для каждого запроса Леха просит сказать ему получившуюся сумму. Из-за того, что сумма может получиться достаточно большой, он просит вычислить её по модулю 109 + 7.

Однако сторожу запросы показались невыполнимыми. Помогите бедняге ответить на все запросы Лехи.

Входные данные

В первой строке находится одно целое число q (1 ≤ q ≤ 104) — число запросов, сделанных Лехой.

В следующих q строках задано по пять целых чисел x1, y1, x2, y2, k (1 ≤ x1 ≤ x2 ≤ 109, 1 ≤ y1 ≤ y2 ≤ 109, 1 ≤ k ≤ 2·109) — параметры очередного запроса Лехи.

Выходные данные

Выведите q строк — в первой строке ответ на первый запрос, во второй — на второй и так далее.

Примечание

Разберем подробнее все запросы (в каждом случае запрашиваемая подматрица выделена синим).

В первом запросе (k = 1) Леха спрашивает лишь про верхнюю левую клетку парковки. В ней находится автомобиль с номером 1 и, следовательно, ответ на этот запрос — 1.

Во втором запросе (k = 5) подходящими номерами являются 4, 1, 2, 3, 2, 1, ответом на запрос является 4 + 1 + 2 + 3 + 2 + 1 = 13.

Во третьем запросе (k = 10000) Леха спрашивает про левый верхний фрагмент 5 × 5, при том, что k достаточно велико, поэтому все номера из подматрицы удовлетворяют запросу Лехи, искомая сумма равна 93.

В четвертом запросе (k = 2) ни один из номеров автомобилей не удовлетворяет запросу Лехи, поэтому ответом на него является 0.

D. Автостопом по Прибалтике

дп Структуры данных *2900

Леха и Нура решили отправиться в путешествие по Прибалтике. Всего они хотели бы посетить n городов. Но оказалось, что достопримечательности в i-м городе доступны для посещения только в промежуток дней с li по ri.

Что же делать? Леха предложил выбрать для каждого города i день, в который они посетят этот город, то есть целое число xi, принадлежащее промежутку [li, ri]. После этого Нура должна выбрать некоторую последовательность городов, в которые поедут друзья, то есть такие номера городов id1, id2, ..., idk, что, во-первых, они идут в строго возрастающем порядке idi < idi + 1 для всех целых i от 1 до k - 1, а, во-вторых, для выбранных Нурой городов дни посещения также находятся в строго возрастающем порядке, то есть должно выполняться xidi < xidi + 1 для всех целых i от 1 до k - 1.

Помогите Лехе и Нуре выбрать такие xi для каждого города i, а также некоторую последовательность городов id1, id2, ..., idk так, чтобы они смогли посетить как можно больше городов!

Следует полагать, что Леха и Нура готовы начать путешествие в любой день.

Входные данные

В первой строке входного файла задано одно целое число n (1 ≤ n ≤ 3·105) — количество городов, которые планировали посетить Леха и Нура.

Каждая строка i из следующих n строк содержит два целых числа li, ri (1 ≤ li ≤ ri ≤ 109), означающие, что достопримечательности в i-м городе доступны для посещения в любой день .

Выходные данные

Выведите одно число — максимальное количество городов, которое могут посетить Леха и Нура.

Примечание

Рассмотрим первый пример.

Возьмем следующий план: посетим достопримечательность во втором городе в первый день, в третьем городе — в третий день, а в пятом городе — в четвертый. Это и будет оптимальным ответом.

E. По парам

графы Деревья дп поиск в глубину и подобное реализация снм *2700

В классе у Поликарпа учится n человек (включая его самого). Недавно все ученики класса писали сочинение «Мой лучший друг». Сочинение каждого ученика было посвящено одному из учеников класса — лучшему другу. Заметим, что вовсе не обязательно у ученика b лучшим другом является ученик a, если у a лучший друг — b.

А сейчас учительница ведет весь класс в музей истории спортивного программирования. Учеников ждут захватывающие истории о легендарных героях: tourist, Petr, tomek, SnapDragon — вот о ком пойдет речь!

Учительница решила разбить учеников на пары так, чтобы каждая пара состояла из ученика и его лучшего друга. Возможно, ей не удастся разбить всех учеников на пары, не беда — она хочет выделить наибольшее количество таких пар. Если существует более одного варианта сделать это, она хочет выделить пары так, чтобы пар мальчик-девочка было как можно больше. Конечно, каждый ученик должен входить не более чем в одну пару.

Входные данные

Первая строка содержит целое число n (2 ≤ n ≤ 105), n — количество учеников в классе. Далее в n строках содержится информация об учениках, по одному в строке. Каждая строка содержит два целых числа fi, si (1 ≤ fi ≤ n, fi ≠ i, 1 ≤ si ≤ 2), где fi обозначает номер лучшего друга i-го ученика, а si обозначает пол i-го ученика (если мальчик, то si = 1, а если девочка, то si = 2).

Выходные данные

В первую строку выведите два числа t, e, где t — максимальное количество образованных пар, а e — максимальное количество среди них пар вида мальчик-девочка. Далее выведите t строк, каждая из строк должна содержать пару ai, bi (1 ≤ ai, bi ≤ n) — номера учеников в i-ой паре. Пары выводите в любом порядке. Числа в парах выводите в любом порядке. Если существует несколько решений, выведите любое.

Примечание

Рисунок ниже соответствует первому примеру. На нем ромбы обозначают мальчиков, а квадраты — девочек. Стрелки ведут от ученика к его лучшему другу, жирные (не пунктирные) обозначают пары из ответа.

C. Владик и запоминающаяся поездка

дп реализация *1900

Владик очень часто ездит на поездах. Некоторые из этих поездок запоминаются ему особо хорошо, одна из таких поездок:

Владик находится на начальной станции поезда, и сейчас в него хотят зайти n человек (включая Владика). Они уже выстроились в некотором порядке, и для каждого из них известен код города ai, в который они направляются.

Начальник поезда выбирает некоторое количество непересекающихся отрезков исходной последовательности людей (отрезки не обязаны покрывать всю последовательность). Люди, находящиеся в одном и том же отрезке, будут находиться в одном и том же вагоне поезда. Отрезки выбираются так, что если в город x едет как минимум один человек, то все люди, которые направляются в город x должны будут находиться в одном вагоне. Это обозначает, что они не имеют права принадлежать разным отрезкам. Следует заметить, что все люди, которые едут в город x, либо едут в него и находятся в одном вагоне, либо вовсе не едут никуда.

Комфортность поездки в поезде с людьми на отрезке с l по r равна XORразличных кодов городов у людей на отрезке с l по r. Операция XOR также известна как исключающее побитовое ИЛИ.

Общая комфортность выбранных отрезков вычисляется как сумма комфортности каждого отдельного отрезка.

Помогите Владику узнать максимальную достижимую общую комфортность.

Входные данные

Первая строка входных данных содержит одно целое число n (1 ≤ n ≤ 5000) — количество людей.

Следующая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 5000), где ai — код города, в который направляется i-й человек.

Выходные данные

Единственная строка выходного файла должна содержать одно целое число — максимальная общая комфортность.

Примечание

В первом примере выгодное разделение следующие: [4, 4] [2, 5, 2] [3], ответ считается следующим образом: 4 + (2 xor 5) + 3 = 4 + 7 + 3 = 14

Во втором примере выгодное разделение следующие: 5 1 [3] 1 5 [2, 4, 2] 5, ответ считается следующим образом: 3 + (2 xor 4) = 3 + 6 = 9.

B. Охранник Сахир

битмаски дп Перебор *1600

Некоторые люди не выключают свет, когда уходят из помещения, что ведет к бесполезной растрате энергии. Будучи охранником в университете, Сахир ждет, пока все студенты и профессора покинут здание, а затем идет и выключает везде свет.

В здании n этажей и две лестницы слева и справа. На каждом этаже есть m комнат вдоль коридора, который соединяет левую и правую лестницы. Другими словами, здание можно представить как прямоугольник из n строк и m + 2 столбцов, где первый и последний столбец  — лестницы, а m столбцов посередине — комнаты.

Сахир сейчас стоит на первом этаже на левой лестнице. Он хочет выключить везде свет, при этом, он не хочет подниматься на этаж выше до того, как выключит весь свет на текущем этаже. Конечно, Сахир должен побывать в комнате, чтобы выключить в ней свет. Сахир тратит одну минуту на то, чтобы подняться по лестнице на один этаж или перейти в соседнюю команату/на лестницу из соседней комнаты или с лестницы на том же этаже. Выключение света в комнате, в которой Сахир находится, не отнимает у него времени. Помогите Сахиру найти минимальное время для выключения всего света в здании.

Заметьте, что Сахир не должен возвращаться на исходную позицию, а также то, что он не обязан посещать комнаты, в которых свет и так выключен.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n ≤ 15, 1 ≤ m ≤ 100) — количество этажей и количество комнат на каждом этаже, соответственно.

Следующие n строк содержат описание здания. Каждая строка содержит строку из нулей и единиц длины m + 2, описывающую один этаж (левую лестницу, затем m комнат, затем правую лестницу), где 0 означает, что свет выключен, а 1 означает, что свет включен. Этажи даны в порядке сверху вниз, в частности, последняя строка описывает первый этаж.

Первые и последние символы каждой строки описывают лестницы, поэтому они всегда равны 0.

Выходные данные

Выведите одно число — минимально возможное время, необходимое для того, чтобы выключить весь свет.

Примечание

В первом примере Сахир сначала пойдет в комнату 1 на первом этаже, а затем — в комнату 2 на втором этаже, используя любую лестницу.

Во втором примере он пойдет сначала в четвертую комнату на первом этаже, поднимется на один этаж по правой лестнице, зайдет в четвертую комнату на втором этаже, опять поднимется по правой лестнице, пойдет во вторую комнату на последнем этаже.

В третьем примере он будет проходить по всему коридору на каждом этаже, чередуя лестницы.

D. Две мелодии

дп Потоки *2600

Алиса — начинающий композитор, и сейчас она собирается написать очередной шедевр. И даже не один, а сразу два!

У Алисы есть лист с n нотами на нем. Она хочет выбрать две такие непустые непересекающиеся подпоследовательности, что обе образуют мелодии и сумма их длин максимальна.

Подпоследовательность — это последовательность, которую можно получить из другой последовательности путем удаления некоторых элементов, не меняя порядок оставшихся элементов.

Подпоследовательность образует мелодию, когда два соседних элемента либо отличаются на 1, либо сравнимы по модулю 7.

Напишите программу, которая найдет максимальную сумму длин двух таких непустых непересекающихся подпоследовательностей, что обе образуют мелодии.

Входные данные

В первой строке записано одно целое число n (2 ≤ n ≤ 5000).

Во второй строке записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 105) — ноты на листе.

Выходные данные

Выведите максимальную сумму длин двух таких непустых непересекающихся подпоследовательностей, что обе образуют мелодии.

Примечание

В первом примере подпоследовательности [1, 2] и [4, 5] дадут суммарную длину 4.

Во втором примере подпоследовательности [62, 48, 49] и [60, 61] дадут суммарную длину 5. Если выбрать первой подпоследовательностью [62, 61], то максимальная возможная длина второй мелодии будет 2, и результат будет 4, что не является максимальным ответом.

C. Пылкий поток любви

дп Перебор Строки *1600

День рождения Надеко приближается! Так как она украсила комнату для вечеринки, длинная гирлянда из бумажных гвоздик была повешена на видную часть стены. Койому, брату Надеко, она понравится!

Надеке все еще не нравится гирлянда, поэтому она решила ее снова улучшить. Гирлянда состоит из n частей, пронумерованных слева направо от 1 до n, и i-я из этих частей имеет цвет si, обозначенный строчной латинской буквой. Надеко перекрасит не более m частей в любой цвет (по-прежнему обозначенный строчной латинской буквой). После этого, она найдет все подотрезки, состоящие только из частей цвета c — любимого цвета Койоми — и будет называть длину самого большого такого подотрезка койомностью гирлянды.

Пусть, например, гирлянда имеет цвета «kooomo», а любимый цвет Койоми — «o». Среди всех подотрезков, содержащих только цвет «o», самым длинным является «ooo», его длина равна 3. Поэтому койомность этой гирлянды равна 3.

Проблема в том, что Надеко не уверена в любимом цвете Койоми, поэтому она постоянно меняет свои планы на предстоящую работу. У нее есть q планов, каждый определяется парой из числа mi и строчной буквы ci, значения которых были объяснены раньше. Вам предстоит найти максимальную койомность, достижимую после изменения гирлянды в соответствии с каждым из планов.

Входные данные

Первая строка содержит одно положительное целое число n (1 ≤ n ≤ 1 500) — длину гирлянды.

Вторая строка содержит n строчных латинских букв s1s2... sn как строку — начальные цвета частей гирлянды.

Третья строка содержит целое положительное число q (1 ≤ q ≤ 200 000) — количество планов у Надеко.

Каждая из следующих q строк описывает один план: строка i из них содержит целое число mi (1 ≤ mi ≤ n) — максимальное число частей, которое можно перекрасить, и затем строчную латинскую букву ci — возможный любимый цвет Койоми.

Выходные данные

Выведите q строк: для каждого плана выведите одно целое число на отдельной строке — максимально возможную койомность, достижимую после изменения гирлянды в соответствии с этим планом.

Примечание

В первом примере есть три плана:

  • В первом плане можно перекрасить не более чем 1 часть. Перекрасив часть цвета «y» в цвет «o», получим «kooomi», койомность которой равна 3 — максимально возможной;
  • Во втором плане можно перекрасить не более чем 4 части, получив гирлянду «oooooo», койомность которой равна 6;
  • В третьем случае можно перекрасить не более 4 частей, два способа «mmmmmi» и «kmmmmm» являются оптимальными с койомностью, равной 5.

D. Ночные танцы на дискотеке

геометрия Деревья дп жадные алгоритмы поиск в глубину и подобное *2000

Теснота на дискотеке никогда не помешает веселиться нашим друзьям, но побольше места не помешает, не правда ли?

Дискотека может быть представлена как бесконечная плоскость xy, на которой находятся n танцоров. Как только кто-то начинает двигаться, он будет перемещаться только в своей зоне движения, которая представляет из себя круг Ci с центром в (xi, yi) и радиусом ri. Никакие две границы зон не имеют более, чем одну общую точку, то есть для каждой пары (i, j) (1 ≤ i < j ≤ n) либо зоны Ci и Cj не пересекаются, либо одна лежит полностью в другой. Заметьте, что возможно такое, что две границы зон имеют ровно одну общую точку, однако, никакие два танцора не имеют совпадающие зоны.

Цукихи, один из танцоров, определяет просторность как площадь, покрытая нечетным числом зон движений танцоров. Пример показан на рисунке ниже, затемненные регионы определяют просторность, если все танцуют одновременно.

К счастью, никто не танцует всю ночь, поэтому ночь разделена на две части: до полуночи и после полуночи. Каждый танцор одну половину времени танцует, а другую — сидит с друзьями, не занимая площади. Просторность каждой половины времени вычисляется отдельно, и танцоры хотят, чтобы их сумма была максимально возможна. Следующий рисунок показывает оптимальное разделение примера выше.

Возможны различные варианты разделить танцоров на две части: кто танцует в первой половине, а кто — во второй, которые ведут к различным суммам просторности в двух половинах. Вам предстоит определить максимально возможное значение этой суммы.

Входные данные

Первая строка содержит целое чило n (1 ≤ n ≤ 1 000) — количество танцоров.

Следующие n строк описывают танцоров: в i-й строке находятся три целых числа xi, yi и ri ( - 106 ≤ xi, yi ≤ 106, 1 ≤ ri ≤ 106), описывающих зону движения в виде круга с центром в (xi, yi), радиусом ri.

Выходные данные

Выведите одно число — максимально возможную сумму просторностей двух половин ночи.

Ответ будет считаться верным, если его относительная или абсолютная ошибка не превосходит 10 - 9. Иными словами, пусть ваш ответ равен a, а ответ жюри равен b. Тогда ваш ответ будет зачтен, если .

Примечание

Первый пример соответствует рисунку из условия.

E. Неизбежный объезд

графы дп Комбинаторика кратчайшие пути *2600

Те, кто не хотят возвращаться домой из дальнего путешествия, будут поражены болезнью улитки и потеряются. Майои, переносчик болезни, не хочет, чтобы такое случалось, но не может ничем помочь до того, как найдется лекарство. Сейчас она лишь хочет узнать, насколько сложно придется потерявшемуся.

В регионе находятся n городов, пронумерованных от 1 до n, город номер 1 является столицей. Сеть дорог образована двусторонними дорогами равной длины, каждая из которых соединяет два города. Никакие две дороги не соединяют одинаковые пары городов, и никакая дорога не соединяет город сам с собой. Потерявшиеся не могут узнать, как устроена сеть, но жители могут предоставить следующую информацию:

  • Из любого города существует ровно один кратчайший (по числу дорог) путь до столицы;
  • Пусть расстояние от города i до столицы равно li. Тогда li ≥ li - 1 выполняется для всех 2 ≤ i ≤ n;
  • К городу i подходит ровно di дорог, и это число равно либо 2, либо 3.

Подсчитайте, сколько различных сетей дорог существует с заданными ограничениями и выведите ответ по модулю 109 + 7. Две сети считаются различными, если есть пара (u, v) (1 ≤ u, v ≤ n) такая, что в одной сети есть дорога между городами u и v, а в другой такой дороги нет.

Входные данные

В первой строке находится целое число n (3 ≤ n ≤ 50) — количество городов.

Во второй строке находятся n целых чисел d1, d2, ..., dn (2 ≤ di ≤ 3) — количество дорог, подходящих к городам 1, 2, ..., n, соответственно. Гарантируется, что сумма di по всем i четна.

Выходные данные

Выведите одно число — число различных графов по модулю 109 + 7.

Примечание

В первом примере следующая сеть — единственная, удовлетворяющая ограничениям. Все расстояния из столицы до городов 2, 3, 4 равны 1.

Во втором примере следующие две сети удовлетворяют условию:

C. Карен и супермаркет

Деревья дп Перебор *2400

На пути домой Карен решила зайти в супермаркет за продуктами.

Ей нужно купить много продуктов, но, так как она еще учится, ее бюджет ограничен. Она может потратить не более b долларов.

В супермаркете есть n товаров. Товар номер i может быть куплен за ci долларов. Конечно, каждый товар может быть куплен только один раз.

Супермаркет хочет расширяться, поэтому Карен получила n купонов. Если Карен купит i-й товар, то она может использовать i-й купон для того, чтобы уменьшить цену этого товара на di. Конечно, купон не может быть использован без покупки соответствующего товара.

Однако, на использование купонов накладывается ограничение. Для всех i ≥ 2, чтобы использовать купон номер i, Карен должна использовать также купон номер xi (для использования которого может понадобиться использовать другие купоны, чтобы выполнить условие).

Карен хочет узнать, сколько максимум товаров она может купить, не превысив своего бюджета b?

Входные данные

Первая строка содержит два целых числа n и b (1 ≤ n ≤ 5000, 1 ≤ b ≤ 109) — число товаров в магазине и количество денег у Карен, соответственно.

Следующие n строк описывают товары. А именно:

  • Строка номер i начинается с двух целых чисел ci и di (1 ≤ di < ci ≤ 109) — цены i-го товара и скидка при использовании купона для i-го товара, соответственно.
  • Если i ≥ 2, то далее следует еще одно целое число xi (1 ≤ xi < i), означающее, что перед тем как будет использован этот купон, необходимо использовать купон номер xi.
Выходные данные

Выведите одно целое число: количество товаров, которые Карен может купить, не превысив бюджет.

Примечание

В первом примере Карен может купить следующие 4 товара:

  • Используя первый купон для покупки первого товара за 10 - 9 = 1 доллар.
  • Используя третий купон для покупки третьего товара за 12 - 2 = 10 долларов.
  • Используя четвертый купон для покупки четвертого товара за 20 - 18 = 2 доллара.
  • Купив шестой товар за 2 доллара.

Суммарная стоимость равна 15, что не превышает бюджета. Заметьте, например, что она не может использовать купон на шестой товар, так как тогда она должна будет использовать пятый купон и купить пятый товар, что она не сделала.

Во втором примере у Карен достаточно денег, чтобы использовать все купоны для покупки всех товаров.

C. Действительно большие числа

Бинарный поиск дп математика Перебор *1600

Ивану нравится узнавать различные факты о числах, но особенно его интересуют действительно большие числа. Иван считает натуральное число x действительно большим, если разность x и суммы его цифр (в десятичной записи) не меньше s. Чтобы доказать, что эти числа обладают особыми свойствами, он хочет узнать, насколько они редкие — если быть точным, ему нужно посчитать количество действительно больших чисел, которые не превышают n.

Иван попытался посчитать всё самостоятельно, но скоро понял, что для него это слишком трудно. Поэтому он попросил вас о помощи.

Входные данные

В первой (и единственной) строке записаны два числа n и s (1 ≤ n, s ≤ 1018).

Выходные данные

Выведите одно число — количество действительно больших чисел, не превышающих n.

Примечание

В первом примере числа 10, 11 и 12действительно большие.

Во втором примере не существует действительно больших чисел, не превышающих 25 (первое действительно большое число равно 30: 30 - 3 ≥ 20).

В третьем примере 10 — единственное действительно большое число (10 - 1 ≥ 9).

D. Два из трех

дп *2000

Недавно Вася разрабатывал новый алгоритм по оптимизации приема клиентского потока и рассматривал следующую задачу.

Пусть в очереди к кассе стоят n человек, причем, каждый характеризуется положительным целым числом ai — временем обработки этого клиента. Особенность же данной конкретной кассы в том, что она способна принять двух клиентов одновременно, причем время обработки двух клиентов со временами ai и aj равно max(ai, aj). Обратите внимание, что обработка — это непрерываемый процесс, и поэтому, если два человека одновременно обслуживаются в кассе, то это значит, что они одновременно начали обрабатываться, и одновременно закончат (возможно, что одному из них придется подождать).

Вася в своем алгоритме использовал гениальную эвристику — пока в очереди больше одного человека на обработку посылаются одновременно какие-то два человека из первых трех, стоящих в начале очереди. В случае, если в очереди остается единственный клиент номер i, то он проходит в кассу, и его обслуживание занимает ai времени. Заметим, что общее количество фаз обработки будет всегда равно n / 2⌉ (операция x означает округление вверх до ближайшего целого числа).

Вася считает, что этот метод поможет справиться со столь ненавистными всем очередями, и поэтому попросил Вас разработать программу, которая определит минимальное время, за которое обработается вся очередь с помощью этого алгоритма.

Входные данные

В первой строке входного файла содержится единственное число n (1 ≤ n ≤ 1000) — количество людей в последовательности. Во второй строке через пробел записаны целые числа a1, a2, ..., an (1 ≤ ai ≤ 106). Люди занумерованы начиная от кассы к концу очереди.

Выходные данные

В первую строку выведите единственное число — минимальное время, за которое будут обработаны все n человек. Далее в n / 2⌉ строках выведите порядок, в котором будут обрабатываться клиенты. Каждая строка (кроме, возможно, последней) должна содержать два числа через пробел — номера клиентов, которые на текущем шаге пройдут на обработку. Если n — нечетно, то последняя строка должна содержать единственное число — номер последнего обработанного человека в очереди. Клиенты нумеруются начиная с 1, числа в строках разрешается выводить в любом порядке.

E. Окабэ и El Psy Kongroo

дп матрицы *2100

Окабэ любит гулять, но знает, что шпионы из Организации могут быть где угодно, поэтому он хочет узнать, по скольким различным путям он может пройти по городу. Город Окабэ состоит из всех точек (x, y) на плоскости таких, что x и y неотрицательны. Окабэ должен начать прогулку в начале координат (точке (0, 0)) и должен закончить путь в точке (k, 0). Если Окабэ сейчас находится в точке (x, y), то за один шаг он может перейти в точку (x + 1, y + 1), (x + 1, y) или (x + 1, y - 1).

Кроме того, существуют n горизонтальных отрезков, i-й из которых идет от точки x = ai до x = bi, включительно и располагается в y = ci. Гарантируется, что a1 = 0, an ≤ k ≤ bn, и ai = bi - 1 для всех 2 ≤ i ≤ n. i-й из этих отрезков заставляет Окабэ находиться только в точках с y координатой в отрезке 0 ≤ y ≤ ci, когда его x координата находится в отрезке ai ≤ x ≤ bi. Заметьте, что когда один отрезок кончается, а другой начинается, то он должен находиться под обоими отрезками одновременно.

Окабэ хочет узнать, сколько существует различных путей (последовательностей шагов) из начала координат в точку (k, 0), удовлетворяющих этим ограничениям, по модулю 109 + 7.

Входные данные

Первая строка содержит два целых числа n и k (1 ≤ n ≤ 100, 1 ≤ k ≤ 1018) — число отрезков и x координата точки назначения.

Следующие n строк содержат по три целых числа ai, bi и ci (0 ≤ ai < bi ≤ 1018, 0 ≤ ci ≤ 15) — левый и правый концы отрезка, и его y координата.

Гарантируется, что a1 = 0, an ≤ k ≤ bn, и ai = bi - 1 для всех 2 ≤ i ≤ n.

Выходные данные

Выведите число путей, удовлетворяющих ограничениям, по модулю 1000000007 (109 + 7).

Примечание

Рисунок выше соответствует первому примеру. Возможные пути следующие:

Рисунок выше соответствует второму примеру. Существует единственный способ до (3, 0). После этого возможные пути следующие:

D. Моя милая девочка Нура

дп жадные алгоритмы математика Перебор теория чисел *1800

В университете Павлополиса, где учится Нура, решили провести конкурс красоты «Мисс университета Павлополиса». Опишем подробнее процесс выбора самой красивой девушки в университете.

Конкурс проходит в несколько этапов. Пусть изначально в конкурсе участвует n девушек. Всех участниц делят на равные группы по x человек в каждой. При этом число x выбирается произвольно, то есть число x может быть различным для разных этапов конкурса. Внутри каждой группы жюри конкурса сравнивает девушек по красоте в формате «каждая с каждой». Таким образом, если в группе x девушек, то происходит сравнений. Затем из каждой группы выбирается по одной самой красивой участнице. Выбранные девушки попадают в следующий этап конкурса. То есть, если n девушек были разделены на группы, по x участниц в каждой, то в следующий этап попадут ровно участниц. Конкурс продолжается до тех пор, пока не останется ровно одна девушка, которая и будет признана «Мисс университета Павлополиса».

Но для жюри этот конкурс — очень утомительное занятие. Им хотелось бы делить девушек на группы в каждом этапе так, чтобы суммарное число попарных сравнений девушек было как можно меньше. Обозначим за f(n) минимальное суммарное количество сравнений, которые надо провести, чтобы выбрать самую красивую участницу, если к первому этапу допустить n девушек.

Организаторы конкурса — большие сумасброды. Они дают Нуре три целых числа t, l и r и просят бедную девушку посчитать значение следующего выражения: t0·f(l) + t1·f(l + 1) + ... + tr - l·f(r). Однако, так как значение этого выражения может быть достаточно велико, организаторы просят посчитать его по модулю 109 + 7. Если Нура сможет посчитать значение этого выражения, организаторы обещают ей помощь в ходе конкурса красоты. Но бедная девушка не сильна в математике, поэтому за помощью она обратилась к Лехе, а тот — прямиком к вам.

Входные данные

В первой и единственной строке задано три целых числа t, l и r (1 ≤ t < 109 + 7, 2 ≤ l ≤ r ≤ 5·106).

Выходные данные

Выведите единственное число — значение искомого выражения по модулю 109 + 7.

Примечание

Рассмотрим пример.

Необходимо найти значение .

f(2) = 1. Из двух девушек можно составить только одну группу из двух человек, в которой произойдет одно сравнение.

f(3) = 3. Из трех девушек можно составить только одну группу из трех человек, в которой произойдет три сравнения.

f(4) = 3. Четырех девушек можно разбить на две группы по две девушки в каждой. Тогда на первом этапе произойдет два сравнения, по одному в каждой из двух групп. Во второй этап выйдут две девушки, между которыми произойдёт ещё одно сравнение. Итого 2 + 1 = 3. Можно также в первом этапе оставить всех девушек в одной группе. Тогда произойдет сравнений. Очевидно, что лучше разбивать девушек на группы первым способом.

Тогда значение выражения это .

E. Обманщик

Бинарный поиск дп строковые суфф. структуры хэши *2400

В университете закончился первый семестр. Как известно, после конца первого семестра у студентов начинаются каникулы. На каникулах Нура решила вернуться в Вичкополис. В качестве скромного сувенира она привезла Лехе из Павлополиса колбасу длины m. Всем известно, что любую колбасу можно представить в виде строки из строчных латинских букв, длина которой равна длине колбасы.

Леха очень обрадовался подарку и сразу же съел колбасу. Но потом он понял, что это был достаточно нетактичный поступок, ведь колбаса была сувениром! Поэтому хакер сразу же направился в мясную лавку. К сожалению, в лавке нашлась лишь другая колбаса длины n. Однако Леха не расстроился и купил эту колбасу. Придя домой, он решил разрезать купленную колбасу на несколько частей и пронумеровать части начиная с 1 слева направо. Затем он хочет выбрать несколько частей и склеить их так, чтобы полученная колбаса была равна колбасе, которую подарила Нура. При этом хакер может склеить два куска между собой только тогда, когда номер левого меньше номера правого куска. Кроме этого, он знает, что если он склеит более x кусков, то Нура заметит, что он подменил сувенирную колбасу, и очень сильно расстроится. Конечно же Леха не хочет расстраивать девушку. Хакер просит вас узнать, удастся ли ему разрезать купленную им колбасу, а затем склеить некоторые из полученных частей так, чтобы Нура ничего не заметила.

Более формально, вам дано две строки s и t. Длина строки s равна n, длина строки t равна m. Требуется выбрать несколько попарно непересекающихся подстрок из s так, чтобы их конкатенация в том самом порядке, как эти подстроки идут в s, была равна строке t. Обозначим за f(s, t) минимальное количество подстрок, которые надо выбрать, чтобы их конкатенация была равна t. Если выбрать такие подстроки невозможно, то f(s, t) = ∞. Леха очень хочет узнать, правда ли, что f(s, t) ≤ x.

Входные данные

В первой строке находится одно целое число n (1 ≤ n ≤ 105) — длина колбасы, купленной Лехой, то есть длина строки s.

Во второй строке находится строка s длины n, состоящая из строчных букв латинского алфавита.

В третьей строке находится одно целое число m (1 ≤ m ≤ n) — длина колбасы, купленной Нурой, то есть длина строки t.

В четвертой строке находится строка t длины m, состоящая из строчных букв латинского алфавита.

В пятой строке находится одно целое число x (1 ≤ x ≤ 30) — максимальное количество кусков колбасы, которые может склеить Леха, чтобы Нура ничего не заподозрила.

Выходные данные

В единственной строке выведите «YES» (без кавычек), если Лехе удастся подделать колбасу так, чтобы Нура ничего не заметила. В противном случае следует вывести «NO» (без кавычек).

Примечание

Рассмотрим первый пример.

В оптимальном ответе Леха должен разрезать купленную им самим колбасу следующим образом: hloyaygrt = h + loy + a + y + g + rt. Затем он нумерует полученные части от 1 до 6:

  • h — номер 1
  • loy — номер 2
  • a — номер 3
  • y — номер 4
  • g — номер 5
  • rt — номер 6

После чего хакер должен склеить части с номерами 2, 4 и 6 и получить колбасу loyyrt, равную той, что подарила Нура. Таким образом, ему придётся склеить три куска. Так как x = 3, то следует вывести «YES» (без кавычек).

Во втором примере обе колбасы совпадают с колбасами из первого примера. Однако, так как x = 2, то следует вывести «NO» (без кавычек).

F. Сжатие строки

дп Строки строковые суфф. структуры хэши *2400

Иван хочет написать письмо своему другу. Письмо — строка s, состоящая из строчных латинских букв.

К сожалению, как только Иван начал писать письмо, он понял, что оно слишком длинное, и писать его целиком придётся очень долго. Поэтому он хочет написать сжатую версию строки s вместо самой строки.

Сжатая версия строки s — последовательность строк c1, s1, c2, s2, ..., ck, sk, где ci — десятичная запись числа ai (без лидирующих нулей), а si — некоторая строка из строчных латинских букв. Если Иван запишет строку s1 ровно a1 раз, потом s2 ровно a2 раз, и так далее, у него получится строка s.

Длина сжатой версии равна |c1| + |s1| + |c2| + |s2|... |ck| + |sk|. Среди всех сжатых версий Иван хочет выбрать такую, что её длина минимальна. Помогите Ивану определить минимально возможную длину.

Входные данные

В единственной строке входных данных записана строка s, состоящая из строчных латинских букв (1 ≤ |s| ≤ 8000).

Выходные данные

Выведите одно целое число — минимальную длину сжатой версии строки s.

Примечание

В первом примере Иван выберет следующую версию: c110, s1a.

Во втором примере Иван выберет следующую версию: c11, s1abcab.

В третьем примере Иван выберет следующую версию: c12, s1c, c21, s2z, c34, s3ab.

D. Числа

дп математика теория чисел *2400

В один из самых обыкновенных будних дней Валера пошел в школу (а куда же еще ему идти), где на уроке математики его любимая учительница Валерия Валерьевна рассказывала ученикам про делители. Несмотря на то, что Валера любил математику, эта тема его не слишком заинтересовала. Даже более того, она показалась ему настолько скучной, что он уснул прямо посреди урока. И только громкий звук звонка смог прервать его сладкий сон.

Разумеется, ценный материал и объяснения учительницы были упущены. Однако домашнее задание Валере, так или иначе, сделать придется. Поскольку он абсолютно не знает нового материала, сделать задание сам он не в состоянии. Поэтому он и обратился к Вам за помощью. Вы ведь все-таки его лучший друг и просто не можете отказать в помощи.

В домашнем задании Валеры всего лишь одна задача, которая хоть и формулируется очень просто, но имеет совсем не тривиальное решение. Её условие выглядит следующим образом: если рассмотреть все натуральные числа в отрезке [a;b], то требуется посчитать количество таких чисел из этого отрезка, что их наименьшим делителем будет являться некоторое число k (делитель равный единице учитывать не надо). Другими словами, необходимо посчитать количество таких чисел из отрезка [a;b], что они не делятся ни на одно число от 2 до k - 1, однако делятся на k.

Входные данные

В первой и единственной строке заданы три натуральных числа a, b, k (1 ≤ a ≤ b ≤ 2·109, 2 ≤ k ≤ 2·109).

Выходные данные

В единственной строке выведете ответ на поставленную задачу.

Примечание

Комментарии к примерам из условия:

В первом примере ответом являются числа 2, 4, 6, 8, 10.

Во втором - 15, 21.

В третьем такие числа отсутствуют.

E. Две подпоследовательности

битмаски дп *2800

На уроке информатики Валерий изучал сжатие данных. Учитель рассказал новый метод, который мы сейчас вам опишем.

Пусть {a1, a2, ..., an} — данная последовательность строк, которую необходимо сжать. Здесь и далее будем считать, что все строки имеют одинаковую длину и состоят только из символов 0 и 1. Определим функцию сжатия:

  • f(пустая последовательность) = пустая строка
  • f(s) = s.
  • f(s1, s2) = наименьшая по длине строка, у которой один из префиксов равен s1, а один из суффиксов равен s2. Например, f(001, 011) = 0011, f(111, 011) = 111011.
  • f(a1, a2, ..., an) = f(f(a1, a2, an - 1), an). Например, f(000, 000, 111) = f(f(000, 000), 111) = f(000, 111) = 000111.

Перед Валерой стоит серьезная задача — разделить данную последовательность {a1, a2, ..., an} на две подпоследовательности {b1, b2, ..., bk} и {c1, c2, ..., cm}, m + k = n, так, чтобы величина S = |f(b1, b2, ..., bk)| + |f(c1, c2, ..., cm)| приняла минимально возможное значение. Здесь |p| обозначает длину строки p.

Обратите внимание, что запрещается менять относительный порядок строк в подпоследовательностях. Разрешается делать одну из подпоследовательностей пустой. Каждый элемент исходной последовательности должен принадлежать ровно одной из получившихся подпоследовательностей. Элементы подпоследовательностей b и c не обязательно должны идти подряд в исходной последовательности a, то есть они могут чередоваться (смотрите примеры 2 и 3).

Помогите Валере найти минимальное возможное значение S.

Входные данные

В первой строке входных данных содержится целое число n — количество строк (1 ≤ n ≤ 2·105). Далее в n строках даны элементы последовательности — строки длиной от 1 до 20 символов, состоящие только из символов 0 и 1. На i + 1 строке входных данных находится i-ый член последовательности. Элементы последовательности разделены исключительно символом перевода строки. Гарантируется, что все строки имеют одинаковую длину.

Выходные данные

Выведите единственное число — минимально возможное значение S.

Примечание

Подробные ответы к тестам:

  • Оптимальный вариант: сделать одну из подпоследовательностей пустой, а вторую — равной всей данной последовательности. S = |f(01, 10, 01)| = |f(f(01, 10), 01)| = |f(010, 01)| = |0101| = 4.
  • Оптимальный вариант: b = {000, 001}, c = {111, 110}. S = |f(000, 001)| + |f(111, 110)| = |0001| + |1110| = 8.
  • Оптимальный вариант: b = {10101, 01010, 01000}, c = {11111, 10010}. S = |10101000| + |111110010| = 17.

A. Ключи от офиса

Бинарный поиск дп жадные алгоритмы Перебор сортировки *1800

На прямой есть n человек и k ключей. Каждый из людей хочет попасть в офис, который также расположен на прямой. Для этого каждому человеку нужно сначала дойти до точки, в которой находится ключ, взять его, а затем отправиться в офис. После того как человек взял ключ, больше этот ключ взять никто не сможет.

Перед вами стоит задача определить минимальное время по истечении которого все n людей смогут добраться до офиса с ключами. Считайте, что каждый из людей преодолевает единицу расстояния за 1 секунду. Если в точку с ключом одновременно придут два человека, то ключ может взять только один из них. Человек не обязан брать ключ, мимо которого проходит.

Входные данные

В первой строке следуют три целых числа n, k и p (1 ≤ n ≤ 1 000, n ≤ k ≤ 2 000, 1 ≤ p ≤ 109) — количество людей, количество ключей и позиция офиса.

Во второй строке следуют n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — позиции, в которых изначально находятся люди. Позиции заданы в произвольном порядке.

В третьей строке следуют k различных целых чисел b1, b2, ..., bk (1 ≤ bj ≤ 109) — позиции, в которых изначально находятся ключи. Позиции заданы в произвольном порядке.

Обратите внимание, что изначально в каждой точке может находиться не более одного человека и не более одного ключа. Человек и ключ могут находиться в одной точке.

Выходные данные

Выведите минимальное время в секундах по истечении которого все n людей смогут добраться до офиса с ключами.

Примечание

В первом примере человек, находящийся в точке 20 должен взять ключ, находящийся в точке 40 и дойти с ним до офиса, который находится в точке 50. На это он потратит 30 секунд. Человек, находящийся в точке 100 может взять ключ, находящийся в точке 80 и дойти с ним до офиса. На это он потратит 50 секунд. Таким образом, через 50 секунд все люди могут оказаться в офисе с ключами.

B. Кондитерская

Бинарный поиск дп разделяй и властвуй Структуры данных *2200

На днях Сластена решила опробовать себя в производстве сладостей и открыть собственную кондитерскую! Для этого она купила нужные ингредиенты и чудо-печку, которая способна выпекать несколько различных видов пирожных; и запустила производство.

Сразу же возникли проблемы: расходы на содержание кондитерской быстро начали превышать выручку от проданных пирожных. Сластена смекнула, что надо менять ценовую политику, и решила исследовать рынок сладостей. Оказалось, что чем больше в коробке различных видов пирожных (назовем это число ценностью коробки с пирожными), тем больше денег за нее готовы предложить покупатели.

Нужно срочно менять технологию производства! Но вот незадача: выбор конкретных видов пирожного печка делает сама, и Сластена никак не может повлиять на принцип ее действия. Однако, она знает, в каком порядке выйдут n пирожных из печки сегодня. Сластена сегодня должна упаковать ровно k коробок с пирожными, причем в каждую коробку она должна положить несколько (не меньше одного) пирожных, которые печка испекла подряд, так как коробка должна сразу же отправиться на прилавок.

Сластена хочет максимизировать суммарную ценность всех коробок с пирожными. Помогите ей определить эту максимальную ценность.

Входные данные

В первой строке даны числа n и k (1 ≤ n ≤ 35000, 1 ≤ k ≤ min(n, 50)) — число пирожных и количество коробок соответственно.

Во второй строке дано n чисел a1, a2, ..., an (1 ≤ ai ≤ n) — виды пирожных в порядке, в котором печка их выпекает.

Выходные данные

Выведите единственное число — максимально возможную суммарную ценность коробок с пирожными.

Примечание

В первом примере в распоряжении Сластены есть одна коробка. Оптимально расфасовать туда все доступные пирожные и получить два различных вида пирожных с суммарной ценностью 2.

Во втором примере разумно положить первые два пирожных в первую коробку, а оставшиеся — во вторую. Таким образом мы получим два и три различных вида пирожных, которые обеспечивают суммарную стоимость 5.

E. Карамельные облака

дп сортировки Структуры данных *3400

Как известно, лучшее украшение клумбы в королевстве Sweetland — ванильные кексики. Процесс их выращивания весьма сложен и требует немалых ресурсов. У Сластены есть m саженцев, и для превращения j-го саженца кексика в произведение искусства необходимо держать его под солнцем не менее kj минут.

Большую часть времени в Sweetland стоит прекрасная погода, которая лишь иногда омрачается появлением карамельных облаков, i-е из которых возникает в момент времени (минуту) li и исчезает в момент времени ri. Разумеется, солнечный свет не способен пробиться сквозь карамельный покров.

Сластена не отличается терпением, и ей хочется вырастить свое пирожное как можно быстрее. В ее распоряжении ровно C конфет — основной валюты Sweetland.

Любое облако можно полностью рассеять, заплатив за это ci конфет. Однако в соответствии с указом министерства метеорологии Sweetland, рассеивание более чем двух карамельных облаков искусственным путем строжайше запрещено и карается огромным штрафом.

В коллекции Сластены находится m саженцев. Она еще не определилась, какие из них достойны занять почетное место в королевском саду, и ей требуется ваша помощь. Для каждого саженца определите самую раннюю минуту, к которому его можно вырастить, не нарушая указ министерства метеорологии и не выходя за рамки бюджета. Обратите внимание, что Сластена находится на этапе формирования набора кексиков, поэтому каждый новый саженец рассматривается независимо от остальных.

Выращиваться кексики начинают в момент времени 0.

Входные данные

В первой строке следуют два числа n и C (0 ≤ n ≤ 3·105, 0 ≤ C ≤ 109) — число карамельных облаков и количество конфет, которыми обладает Сластена.

В следующих n строках тремя числами li, ri, ci (0 ≤ li < ri ≤ 109, 0 ≤ ci ≤ 109) задается очередное карамельное облако.

Далее следует m (1 ≤ m ≤ 3·105) — число саженцев. Каждый саженец описывается одним параметром kj (1 ≤ kj ≤ 109) — необходимым числом солнечных минут.

Выходные данные

Для каждого саженца выведите одно число — минимально возможную минуту, к которой Сластена сумеет вырастить данный ванильный кексик.

Примечание

Рассмотрим первый пример чуть подробнее. Здесь для любого k оптимально развеять облака 1 и 3. Тогда солнце не будет светить в промежутке [1..6]. Соответственно, солнечными будут являться промежутки [0..1] и [6..inf).

Во втором примере при k = 1 ничего развеивать не требуется, а при k = 5 наилучшей стратегией будет развеять облака 2 и 3. Это добавит дополнительный солнечный промежуток [4..8], который вместе с [0..1] позволяет вырастить кексик по достижении восьмой минуты.

В третьем примере два саженца кардинально различаются. Для минимизации времени выращивания первого необходимо разогнать облако 1 и получить достаточный промежуток времени [0..10], в то время как аналогичный подход даст для второго ответ 180. Однако если убрать облако 2, солнечными будут отрезки [0..3] и [7..inf), что позволит нам сократить время до 104.

C. Звёздное небо

дп реализация *1600

На небе задана декартова система координат. Там видно n звёзд, i-я имеет координаты (xi, yi), максимальную яркость c, общую для всех звёзд, и начальную яркость si (0 ≤ si ≤ c).

С течением времени звёзды мерцают. В момент времени 0 i-я звезда имеет яркость, равную начальной si. Пусть в момент времени t какая-то звезда имеет яркость x. Тогда в (t + 1)-й момент времени эта звезда будет иметь яркость x + 1, если x + 1 ≤ c, а иначе у неё будет яркость 0.

Вы хотите q раз посмотреть на небо. В i-й раз вы посмотрите в момент времени ti и увидите прямоугольник, стороны которого параллельны осям координат, левый нижний угол имеет координаты (x1i, y1i), а правый верхний — (x2i, y2i). Для каждого просмотра вы хотите узнать суммарную яркость звёзд, лежащих в просмотренном прямоугольнике.

Звезда лежит в прямоугольнике, если она лежит на его границе, либо лежит строго внутри него.

Входные данные

Первая строка содержит три целых числа n, q, c (1 ≤ n, q ≤ 105, 1 ≤ c ≤ 10) — количество звёзд, количество просмотров неба и максимальная яркость звёзд.

Следующие n строк содержат описание звёзд. i-я из этих строк содержит три целых числа xi, yi, si (1 ≤ xi, yi ≤ 100, 0 ≤ si ≤ c ≤ 10) — координаты i-й звезды и её начальная яркость.

Следующие q строк содержат описание участков неба. i-я из этих строк содержит пять целых чисел ti, x1i, y1i, x2i, y2i (0 ≤ ti ≤ 109, 1 ≤ x1i < x2i ≤ 100, 1 ≤ y1i < y2i ≤ 100) — момент времени i-го просмотра и координаты просмотренного прямоугольника.

Выходные данные

Для каждого просмотра выведите суммарную яркость просмотренных звёзд.

Примечание

Рассмотрим первый пример.

При первом просмотре видно только первую звезду. В момент времени 2 её яркость равна 3, поэтому ответ на этот запрос — 3.

При втором просмотре видно только вторую звезду. В момент времени 0 её яркость равна 0, поэтому ответ на этот запрос — 0.

При третьем просмотре видно обе звезды. В момент времени 5 яркость первой равна 2, а второй — 1, поэтому ответ на этот запрос — 3.

D. Палиндромная характеристика

дп Перебор Строки хэши *1900

Палиндромная характеристика строки s длины |s| — это последовательность из |s| целых чисел, k-е из которых равно количеству непустых подстрок строки s, являющихся k-палиндромами.

Строка является 1-палиндромом тогда и только тогда, когда она читается одинаково как слева-направо, так и справа-налево.

Строка является k-палиндромом (k > 1) тогда и только тогда, когда:

  1. Её левая половина равна правой половине.
  2. Её левая и правая половины не пусты и являются (k - 1)-палиндромами.

Левая половина строки t — это её префикс длины ⌊|t| / 2⌋, а правая — её суффикс той же длины. ⌊|t| / 2⌋ обозначает длину строки t, делённую на 2, округленную вниз.

Обратите внимание, что каждая подстрока учитывается столько раз, сколько встречается как подстрока. Так, например, в строке «aaa» подстрока «a» встречается 3 раза.

Входные данные

Первая строка содержит строку s (1 ≤ |s| ≤ 5000), состоящую из строчных латинских букв.

Выходные данные

Выведите |s| целых чисел — палиндромную характеристику строки s.

Примечание

В первом примере 1-палиндромами являются подстроки «a», «b», «b», «a», «bb», «abba», 2-палиндромом является подстрока «bb». 3- и 4-палиндромы у этой строки отсутствуют.

F. Дороги в королевстве

графы Деревья дп поиск в глубину и подобное *2500

В королестве К. есть n городов, занумерованных целыми числами от 1 до n. Города соединены n двусторонними дорогами, занумерованными целыми числами от 1 до n. i-я дорога соединяет города ui и vi и имеет длину li. Между двумя городами не бывает более одной дороги. Также не бывает дорог, которые соединяют город с самим собой.

Назовём неудобством дорог максимальное из кратчайших расстояний между всеми парами городов.

В связи с нехваткой денег было решено отказаться от одной из дорог, при этом после её удаления все города должны быть достижимы друг из друга. Вам необходимо узнать, какое минимальное неудобство дорог можно получить после отказа от одной из дорог.

Входные данные

Первая строка содержит целое число n (3 ≤ n ≤ 2·105) — количество городов и дорог.

Следующие n строк содержат описания дорог. i-я из этих строк содержит три целых числа ui, vi, li (1 ≤ ui, vi ≤ n, 1 ≤ li ≤ 109) — номера городов, которые соединяет i-я дорога, и длина i-й дороги. Никакая дорога не соединяет город сам с собой, никакие две дороги не соединяют одну и ту же пару городов.

Гарантируется, что всегда можно отказаться от одной из дорог так, чтобы все города были достижимы друг из друга.

Выходные данные

Выведите одно целое число — минимально возможное неудобство дорог после отказа от одной из дорог.

D. Круглое подмножество

дп математика *2100

Назовем круглостью числа количество нулей, которым оно оканчивается.

Задан массив из n чисел. Выберите такое подмножество из ровно k чисел, чтобы круглость произведения выбранных чисел была максимальна. Выведите полученное значение круглости.

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 200, 1 ≤ k ≤ n).

Во второй строке записаны n чисел, разделенные пробелами, a1, a2, ..., an (1 ≤ ai ≤ 1018).

Выходные данные

Выведите максимальную круглость произведения подмножества из k чисел.

Примечание

В первом примере есть три подмножества из 2 чисел. У подмножества [50, 4] произведение 200, круглость2, [4, 20] — произведение 80, круглость 1, [50, 20] — произведение 1000, круглость 3.

Во втором примере у подмножества [15, 16, 25] произведение — 6000, круглость3.

В третьем примере произведения всех подмножеств имеют круглость 0.

C. Будущий проигрыш

дп игры *2800

Алиса и Боб играют в игру со строкой символов, они ходят по очереди, первой ходит Алиса. Строка состоит из n символов, каждый из них является одним из первых k символов алфавита. На своем ходу игрок может либо произвольным образом перемешать символы в строке, либо удалить из строки ровно один символ (если в строке есть хотя бы один символ). Кроме того, результирующая строка не может совпадать ни с одной строкой, встречавщейся ранее в игре. Игрок, который не может сделать корректный ход, проигрывает.

По данным n, k, p найдите число строк длины n, состоящих из первых k символов алфавита таких, что Алиса выиграет, если и Алиса, и Боб играют оптимально. Выведите это число по простому модулю p.

Входные данные

Первая строка содержит три целых числа n, k, p (1 ≤ n ≤ 250 000, 1 ≤ k ≤ 26, 108 ≤ p ≤ 109 + 100, p простое).

Выходные данные

Выведите одно целое число — число выигрышных для Алисы строк по модулю p.

Примечание

Выигрышными для Алисы являются 14 строк. Среди них строки «bbaa» и «baaa». Алиса проиграет на строках «aaaa» или «bbbb».

E. Выпуклый контур

дп *2300

Вам дан строго выпуклый многоугольник из n вершин. Гарантируется, что никакие три точки не лежат на одной прямой. Вы хотите пройти максимальный путь по многоугольнику без самопересечений, который посещает каждую из вершин не более одного раза.

Конкретнее, ваш путь должен представлять из себя последовательность различных точек, вы пройдете по отрезкам прямых, соединяющих соседние по порядку точки. Эти отрезки не могут касаться или пересекаться, кроме как в точках вашей последовательности.

По данному многоугольнику найдите максимальный по длине путь такой, который посещает каждую из вершин не более одного раза.

Входные данные

Первая строка содержит целое число n (2 ≤ n ≤ 2 500) — количество точек.

Следующие n строк содержат по два целых числа xi, yi (|xi|, |yi| ≤ 109), обозначающих координаты i-й вешины многоугольника.

Гарантируется, что задан строго выпуклый многоугольник в порядке обхода по часовой стрелке.

Выходные данные

Выведите одно вещественное число, обозначающее длину максимального по длине пути, посещающего каждую из вершин не более одного раза.

Ваш ответ будет считаться корректным, если его абсолютная или относительная ошибка составляет не более 10 - 9. А именно, если ваш ответ равен a, а ответ жюри равен b, ваш ответ будет зачтен, если .

Примечание

Один из оптимальных путей — пройти по вершинам 0,1,3,2 в таком порядке.

C. Путешествие

графы Деревья дп поиск в глубину и подобное Теория вероятностей *1500

В Семи Королевствах n городов и n - 1 дорога, каждая дорога соединяет два города, и возможно достичь каждый город из каждого, передвигаясь по дорогам.

Теон и Яра Грейджой начинают путешествовать на лошади по дорогам из первого города. Из-за тумана они не видят, куда лошадь их везет. Когда лошадь входит в город (в том числе в первый), она направляется в один из городов, соединенных с ним. Но это странная лошадь, поэтому она пойдет только в город, в котором до этого не была. Она идет равновероятно в каждый из таких городов и останавливается, если таких городов нет.

Пусть длина каждой дороги 1. Путешествие начинается в городе 1. Чему равно математическое ожидание длины их путешествия? Формально, математическое ожидание — это ожидаемое (то есть среднее) значение. Подробнее можно прочесть по ссылке https://ru.wikipedia.org/wiki/Математическое_ожидание.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 100000) — количество городов.

Далее следует n - 1 строк. i-я из них содержит два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) — номера городов, соединенных i-й дорогой.

Гарантируется, что возможно достичь каждый город из каждого, передвигаясь по дорогам.

Выходные данные

Выведите одно число — математическое ожидание длины путешествия. Путешествие начинается в городе 1.

Ваш ответ будет считаться правильным, если его абсолютная или относительная точность не превосходит 10 - 6.

А именно, если ваш ответ равен a, а ответ жюри равен b, то ваш ответ будет зачтен, если .

Примечание

В первом примере путешествие может закончиться в городах 3 или 4 с равной вероятностью. Расстояние до городов 3 и 4 равно 1 и 2, соответственно, поэтому матожидание длины равно 1.5.

Во втором примере путешествие может закончиться в городах 4 или 5. Расстояние до обоих городов 2, поэтому матожидание равно 2.

D. Зима пришла

дп Комбинаторика математика теория чисел *2200

Зима пришла на Севере и белые ходоки близко. Армия Джона Сноу состоит из n солдат. Пока остальная часть мира сражается за Железный трон, он собирается подготовиться к атаке белых ходоков.

Он придумал метод оценки силы своей армии. Пусть сила i-го солдата ai. Для некоторого k он называет i1, i2, ..., ik кланом, если i1 < i2 < i3 < ... < ik и gcd(ai1, ai2, ..., aik) > 1. Он считает силой этого клана k·gcd(ai1, ai2, ..., aik). Тогда сила армии равна сумме сил всех кланов в армии.

Ваша задача - найти силу его армии. Так как это число может быть очень большим, выведите его по модулю 1000000007 (109 + 7).

Наибольшим общим делителем (greatest common divisor, gcd) последовательности целых чисел называется наибольшее целое число такое, что каждый элемент последовательности делится на это число.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 200000) — размер армии.

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1000000) — силы солдат в армии.

Выходные данные

Выведите одно число — силу армии Джона Сноу по модулю 1000000007 (109 + 7).

Примечание

В первом примере кланы — {1}, {2}, {1, 2}, так что ответ 1·3 + 1·3 + 2·3 = 12

B. Леха и другая игра про графы

графы дп Конструктив поиск в глубину и подобное Структуры данных *2100

Лехе надоело играть с полным графом, который ему подарили в прошлый раз. Теперь он проходит компьютерную игру, где на каждом уровне ему сначала выдается связный неориентированный граф из n вершин и m ребер. Граф может содержать кратные ребра, но не содержит петель. Далее для каждой вершины задается число di, которое может равняться 0, 1 или  - 1. Чтобы пройти уровень, нужно найти любое «хорошее» подмножество ребер графа или сообщить, что его не существует. Подмножество называется «хорошим», если оставив в исходном графе только ребра из него, то для каждой вершины i будет верно, что di =  - 1 или ее степень по модулю 2 равна di. Леха хотел бы поскорее пройти игру до конца и похвастаться своим друзьям, поэтому он просит Вашей помощи.

Входные данные

Первая строка содержит два целых числа n, m (1 ≤ n ≤ 3·105, n - 1 ≤ m ≤ 3·105) — число вершин и ребер соответственно.

Вторая строка содержит n целых чисел d1, d2, ..., dn ( - 1 ≤ di ≤ 1) — значения на вершинах.

Каждая из следующих m строк содержит два целых числа u и v (1 ≤ u, v ≤ n) — описание ребер. Гарантируется, что граф во входных данных является связным.

Выходные данные

Выведите  - 1 в единственной строке, если решения не существует. Иначе в первой строке выведите целое число k — количество рёбер в ответе. В следующих k строках номера ребер в подмножестве. Ребра нумеруются в порядке ввода, начиная с 1.

Примечание

В первом примере у нас есть одна вершина без рёбер. Её степень 0 и получить 1 не получится.

C. На скамейке

дп Комбинаторика *2500

Год назад на скамейке в общественном парке Леха нашёл массив из n чисел. Леха считает, что перестановка p называется правильной если для всех 1 ≤ i < n выполняется условие, что api·api + 1 не является квадратом целого числа. Леха хочет найти количество правильных перестановок по модулю 109 + 7.

Входные данные

В первой строке содержится единственное число n (1 ≤ n ≤ 300) — количество чисел в массиве.

В следующей строке содержится n чисел a1, a2, ... , an (1 ≤ ai ≤ 109) — найденный массив.

Выходные данные

Выведите одно число — количество правильных перестановок по модулю 109 + 7.

Примечание

Разберём 1-й пример:

[1, 2, 4] — хорошая перестановка, так как 2 и 8 не являются квадратами целого числа.

[1, 4, 2] — плохая, так как 4 является квадратом 2.

[2, 1, 4] — плохая, так как 4 является квадратом 2.

[2, 4, 1] — плохая, так как 4 является квадратом 2.

[4, 1, 2] — плохая, так как 4 является квадратом 2.

[4, 2, 1] — хорошая перестановка, так как 8 и 2 не являются квадратами целого числа.

D. Экзамен по вождению

дп жадные алгоритмы Структуры данных *1800

Поликарп только что попробовал сдать экзамен по вождению. Он проехал по прямой дороге, на которой были установлены знаки четырех типов:

  • ограничение скорости: этот знак характеризуется целым положительным числом — максимальной скоростью машины после знака (очередной знак этого типа отменяет ограничения предыдущего такого знака);
  • обгон разрешен: этот знак обозначает, что машина может обгонять другую после того как проехала этот знак;
  • отмена ограничения скорости: этот знак отменяет ограничение скорости, если оно было (то есть после этого знака можно ехать с произвольной скоростью);
  • обгон запрещен: после этого знака машина не может обгонять другую.

Поликарп проезжает знаки последовательно, очередной знак перекрывает действие всех предыдущих знаков для соответствующего ограничения (скорость/обгон). Возможно, что два или больше знаков «обгон запрещён» идут подряд, и ни одного знака «обгон разрешён» не стоит между ними. Это также выполняется для знаков «отмена ограничения скорости» и «обгон разрешён».

В начале поездки обгон разрешен, ограничения на максимальную скорость нет.

Вам задана последовательность событий в хронологическом порядке — события, которые происходили с Поликарпом по дороге. События бывают следующих типов:

  1. Поликарп изменил скорость машины на заданную (это событие характеризуется целым положительным числом);
  2. машина Поликарпа обогнала другую машину;
  3. машина Поликарпа проехала знак «ограничение скорости» (это событие характеризуется целым положительным числом);
  4. машина Поликарпа проехала знак «обгон разрешен»;
  5. машина Поликарпа проехала знак «отмена ограничения скорости»;
  6. машина Поликарпа проехала знак «обгон запрещен».

Гарантируется, что первое событие в хронологическом порядке — это событие типа 1 (Поликарп изменил скорость машины на заданную).

После экзамена в случае нарушений Поликарп может сказать инструктору, что он просто не заметил некоторые из знаков. Какое наименьшее количество знаков может не заметить Поликарп, чтобы с его точки зрения он проехал без нарушений?

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 2·105) — количество событий.

Каждая из следующих n строк начинается с целого числа t (1 ≤ t ≤ 6) — тип события.

После запросов первого и третьего типа следует целое число s (1 ≤ s ≤ 300). Если это запрос первого типа, то это число — новая скорость Поликарпа; если это запрос третьего типа, то это число — новое ограничение скорости.

Гарантируется, что первое событие в хронологическом порядке — это событие типа 1 (Поликарп изменил скорость машины на заданную).

Выходные данные

Выведите наименьшее количество знаков, которое может не заметить Поликарп, чтобы с его точки зрения он проехал без нарушений.

Примечание

В первом примере Поликарп должен не заметить знак «ограничение скорости» с числом 70 и знак «ограничение скорости» с числом 120.

Во втором примере Поликарп не совершил ни одного нарушения.

В третьем примере Поликарп должен не заметить ни одного знака «обгон запрещен», которые идут после знака «обгон разрешен».

F. Охранники на складе

битмаски дп *2500

Поликарп — директор магазина в столице Берляндии. Недавно уровень преступности в столице возрос, поэтому Поликарп озаботился охраной склада своего магазина.

Склад можно представить как матрицу из n строк и m столбцов. Каждый элемент матрицы — либо . (пустая клетка), либо x (стена).

Поликарп хочет нанять некоторое количество охранников (возможно, ни одного) на склад. Каждый охранник будет стоять в какой-то клетке и наблюдать за клетками справа и снизу от него (до ближайшей стены). Формально, если охранник стоит в клетке (x0, y0), то он охраняет клетку (x1, y1), если выполняются все следующие условия:

  • (x1, y1) — пустая клетка;
  • либо x0 = x1 и y0 ≤ y1, либо x0 ≤ x1 и y0 = y1;
  • между клетками (x0, y0) и (x1, y1) нет стен. Между этими клетками могут быть охранники, т. е. охранники могут "смотреть" друг сквозь друга.

Охранники могут стоять только в пустых клетках (и охранять только пустые клетки). План охраны — некоторое множество клеток, в которых должны стоять охранники (естественно, два плана различны, если существует клетка, которая присутствует только в одном из планов). Поликарп называет план подходящим, если существует не более чем одна пустая клетка, которую никто не охраняет.

Поликарп хочет узнать количество подходящих планов. Так как оно может быть очень большим, выведите его по модулю 109 + 7.

Входные данные

В первой строке записаны два числа n и m — длина и ширина склада (1 ≤ n, m ≤ 250, 1 ≤ nm ≤ 250).

Затем следуют n строк, i-я из которых содержит m символов и соответствует i-й строке матрицы. Каждый символ — либо ., либо x.

Выходные данные

Выведите количество подходящих планов по модулю 109 + 7.

Примечание

В первом примере есть три возможных плана: один охранник в клетке (1, 1), один охранник в клетке (1, 3), и два охранника в обеих клетках.

C. Четыре отрезка

дп Перебор Структуры данных *1800

Задан массив из n целых чисел. Пусть sum(l, r) — сумма чисел на индексах с l по r не включительно (l-й элемент учитывается, r-й элемент не учитывается). Индексы l и r таковы, что 0 ≤ l ≤ r ≤ n. Индексы в массиве нумеруются с 0.

Например, если массив a = [ - 5, 3, 9, 4], то sum(0, 1) =  - 5, sum(0, 2) =  - 2, sum(1, 4) = 16, и sum(i, i) = 0 для всех i от 0 до 4.

Выберите три индекса delim0, delim1, delim2 (0 ≤ delim0 ≤ delim1 ≤ delim2 ≤ n) и поделите массив таким образом, чтобы величина res = sum(0, delim0) - sum(delim0, delim1) + sum(delim1, delim2) - sum(delim2, n) была максимальна.

Обратите внимание, что некоторые значения sum(l, r) могут соответствовать пустым отрезкам (если l = r для соответствующего отрезка).

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 5000).

Во второй строке записаны n целых чисел a0, a1, ..., an - 1 ( - 109 ≤ ai ≤ 109).

Выходные данные

Выведите три таких индекса, что величина res — максимальна. Если существует несколько ответов, выведите любой из них.

E. Пакманы

Бинарный поиск дп *1800

Игровое поле представляет собой клетчатую полоску 1 × n. В некоторых клетках находятся пакманы, в некоторых клетках — звёздочки, остальные клетки пусты.

Пакман может перемещаться в соседнюю клетку за 1 единицу времени. Если в клетке находится звёздочка, то пакман в момент перемещения в эту клетку съедает звёздочку. Пакман съедает звездочку мгновенно.

В начальный момент времени все пакманы начинают двигаться. Каждый из пакманов может неограниченное количество раз менять направление движения, но не должен выходить за пределы игрового поля. Пакманы не создают помех движению других пакманов; в одной клетке может находиться произвольное количество пакманов, движущихся в произвольных направлениях.

Ваша задача — определить минимально возможное время, за которое пакманы смогут съесть все звёздочки.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 105) — длина игрового поля.

Во второй строке содержится описание игрового поля, состоящее из n символов. Если на позиции i записан символ '.', то клетка i — пуста. Если на позиции i записан символ '*', то в клетке i находится звёздочка. Если же на позиции i записан символ 'P', в клетке i находится пакман.

Гарантируется, что на игровом поле есть хотя бы один пакман и хотя бы одна звёздочка.

Выходные данные

Выведите минимальное время, за которое пакманы смогут съесть все звёздочки.

Примечание

В первом примере пакман, находящийся на позиции 4, отправится влево и съест звёздочку на позиции 1. На это у него уйдёт 3 единицы времени. За эти же 3 единицы времени пакман, находящийся на позиции 6, успеет съесть обе соседние с ним звёздочки. Например, сначала он может пойти влево и съесть звёздочку на позиции 5, затратив 1 единицу времени, а потом из позиции 5 пойти вправо и съесть звёздочку на позиции 7, затратив на это ещё 2 единицы времени. Таким образом, за 3 единицы времени пакманы съедят все звёздочки на игровом поле.

Во втором примере пакман, находящийся на позиции 4, пойдёт влево и спустя 2 единицы времени уже съест звёздочки на позициях 3 и 2. Пакманы же, находящиеся на позициях 5 и 8, будут двигаться вправо и в течение 2 единиц времени съедят звёздочки на позициях 7 и 10, соответственно. Таким образом, пакманам достаточно 2 единиц времени для поедания всех звёздочек на игровом поле.

D. Shake It!

графы дп Комбинаторика Потоки *2900

Открывая тайную дверь, раскрой нескончаемый переменчивый сказочный мир.

Назовем миром неориентированный граф G, во множестве вершин которого V(G) есть две особые вершины s(G) и t(G). Начальный мир имеет множество вершин {s(G), t(G)} и ребро между ними.

С начальным миром произошло n изменений. В каждом изменении была добавлена новая вершина w во множество V(G), выбрано существующее ребро (u, v), и добавлены два новых ребра (u, w) и (v, w) во множество ребер E(G). Обратите внимание, некоторые ребра могут быть выбраны в более, чем одном изменении.

Известно, что в итоговом графе минимальный s-t разрез равен m, то есть, нужно удалить хотя бы m ребер, чтобы s(G) и t(G) оказались в разных компонентах связности.

Найдите число непохожих миров, которые могли получиться, по модулю 109 + 7. Два мира называются похожими, если они изоморфны и есть изоморфизм, который не переобозначает вершины s и t. Формально, два мира G и H считаются похожими, если между их множествами вершин существует биекция такая, что:

  • f(s(G)) = s(H);
  • f(t(G)) = t(H);
  • Две вершины u и v в графе G соседние в G, если и только если f(u) и f(v) соседние в H.
Входные данные

Единственная строка содержит два целых числа n и m (1 ≤ n, m ≤ 50) — количество выполненных операций и минимальный разрез, соответственно.

Выходные данные

Выведите одно число — число непохожих миров, которые могли получиться, по модулю 109 + 7.

Примечание

В первом примере следующие 6 миров попарно непохожи и удовлетворяют всем ограничениям, s(G) обозначена зеленым, t(G) обозначена синим, один из минимальных разрезов обозначен голубым.

Во втором примере следующие 3 мира удовлетворяют ограничениям.

E. Days of Floral Colours

бпф дп Комбинаторика математика разделяй и властвуй *3400

Цветочные Часы находятся рядом с Зеркальным Озером много лет. Неспособные показывать время, они напоминают людям о его течении и о старых добрых днях.

На окружности Цветочных Часов находятся 2n цветков, пронумерованных от 1 до 2n по часовой стрелке, каждый цветок имеет один из возможных n цветов. Есть ровно два цветка каждого цвета, расстояние между которыми либо не больше, чем 2, либо равняется n. Кроме того, если цветки u и v имеют одинаковый цвет, то цветок, расположенный напротив u, и цветок, расположенный напротив v, тоже имеют одинаковый цвет: симметрия — это прекрасно!

Формально, расстояние между двумя цветками равно 1 плюс количество цветков на меньшей дуге между ними. Ниже показано возможная раскраска цветов при n = 6, которое описывает все возможные случаи.

Красотой раскраски называется произведение длин отрезков цветков, разделенных всеми цветами такими, что противоположный цветок имеет тот же цвет. Другими словами, чтобы вычислить красоту, нужно удалить из круга все цветки, которые имеют тот же цвет, что и цветок напротив них. Тогда красота равна произведению длин всех оставшихся отрезков. Обратите внимание, отрезки длины 0 тоже считаются. Если цветков, которые имеют тот же цвет, что и цветок напротив них, нет, то красота равна 0. Например, красота раскраски выше равна 1 × 3 × 1 × 3 = 9: отрезками являются {2}, {4, 5, 6}, {8} и {10, 11, 12}.

Возможно большое число различных раскрасок, удовлетворяющих всем ограничениям. Найдите сумму всех красот по всем возможным раскраскам по модулю 998 244 353. Две раскраски различны, если существует пара (u, v) (1 ≤ u, v ≤ 2n) такая, что цветы u и v имеют один цвет в одной из них, но не имеют один цвет в другой.

Входные данные

Единственная строка содержит одно целое число n (3 ≤ n ≤ 50 000) — количество цветов на Цветочных Часах.

Выходные данные

Выведите одно целое число — сумму красот по всем возможным раскраскам цветом по модулю 998 244 353.

Примечание

При n = 3, следующие шесть раскрасок каждая имеет красоту, равную 2 × 2 = 4.

Много других раскрасок, имею красоту, равную 0, например, изображенная на рисунке слева. Раскраска на рисунке справа некорректна, так как не выполняется условие симметричности.

C. Арпа и игра с Можтабой

битмаски дп игры *2200

Можтаба и Арпа играют в игру. У них есть список из n чисел.

На каждом ходу игрок может выбрать целое число pk (где p простое, а k — положительное целое) такое, что pk делит хотя бы одно число в списке. Затем для каждого числа в списке, делящегося на pk, обозначим его x, игрок удалит из списка число x и добавит в список. Игрок, который не может сделать корректного выбора числа p и k проигрывает.

Можтаба начинает, и игроки по-очереди делают ходы. Определите, кто выиграет, если оба игрока играют оптимально.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 100) — число элементов с списке.

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — элементы списка.

Выходные данные

Если выиграет Можтаба, выведите «Mojtaba», иначе выведите «Arpa» (без кавычек).

Вы можете вывести каждую из букв в любом регистре (строчную или заглавную).

Примечание

В первом примере Можтаба сразу не может сделать ход.

Во втором примере Можтаба выберет p = 17 и k = 1, и список примет вид [1, 1, 1, 1].

В третьем примере если Можтаба выберет p = 17 и k = 1, то Арпа выберет p = 17 и k = 1 и выиграет, а если Можтаба выберет p = 17 и k = 2, то Арпа выберет p = 17 и k = 1 и выиграет.

D. Построение турнира

графы дп жадные алгоритмы Конструктив математика *2800

Иван читает книгу про турниры. Ваня уже знает, что турнир это ориентированный граф с ровно одним ребром между каждой парой вершин. Так же он знает, что очки вершины это число ребер, исходящих из нее.

Кроме определений, Иван узнал про критерий Ландау: существует турнир с последовательностью очков d1 ≤ d2 ≤ ... ≤ dn тогда и только тогда, когда для всех 1 ≤ k < n и .

Теперь Ваня хочет решить следующую задачу: пусть есть множество чисел S = {a1, a2, ..., am}, существует ли турнир с данным множеством очков? Иными словами, существует ли турнир с последовательностью очков d1, d2, ..., dn, такой, что если убрать повторяющиеся числа, то получим множество {a1, a2, ..., am}?

Если ответ существует, найдите турним с минимальным числом вершин.

Входные данные

Первая строка содержит число m (1 ≤ m ≤ 31).

Следующая строка содержит m различных чисел a1, a2, ..., am (0 ≤ ai ≤ 30) — элементы множества S. Гарантируется, что элементы множества различны.

Выходные данные

Если ответа не существует, выведите одну строку «=(» (без кавычек).

Иначе, выведите число n — число вершин в ответе.

После этого выведите n строк из n символов каждая — матрицу смежности турнира. j-й элемент i-й строки должен быть равен 1, если в турнире ребро между вершинами i и j направлено в сторону вершины j, и 0 иначе. Главная диагональ должна содержать только нули.

B. Страны - нейросети

дп матрицы *2000

Из-за современной популярности глубокого обучения новые страны становятся похожими на нейросети. Это означает, что их строят глубоко с большим количеством уровней, на каждом уровне может находиться много городов. Так же у них есть ровно один вход и ровно один выход. Есть ровно L уровней, на каждом N городов. Давайте посмотрим на два соседних уровня L1 и L2. Каждый город из уровня L1 соединён с каждым городом из уровня L2 со стоимостью путешествия cij для , и для каждой пары соседних уровней эта стоимость одинакова (они просто копировали уровни, как всегда). Также стоимость проезда в каждый город L2 одинакова для всех городов из L1, то есть cij одинаково для и фиксированного j.

Доктор Ж. хочет ускорить его расчёты для этой страны и для этого он просит вас найти количество путей между точками входа и выхода, таких, что суммарная стоимость проезда будет делиться на заданное число M.

Входные данные

Первая строка ввода содержит N (1 ≤ N ≤ 106) –– число стран в слое, L (2 ≤ L ≤ 105) – число уровней, и M (2 ≤ M ≤ 100).

Вторая, третья и четвёртые строки содержат N целых чисел, 0 ≤ cost ≤ M обозначающих цену проезда от точки входа до первого уровня, цены проезда между соседними уровнями, как описано выше, и цены проезда от последнего уровня до точки выхода.

Выходные данные

Выведите одно число, число путей, которые может выбрать доктор Ж. так, чтобы полная стоимость проезда делилась бы на M, по модулю 109 + 7.

Примечание

Это страна с 3 уровнями, на каждом уровне по 2 города. Пути , и - единственные с полной стоимостью проезда, делящейся на 13. Обратите внимание, что все входящие в город рёбра имеют одинаковую стоимость и то, что они одинаковы для всех уровней.

E. Казино и путешествия

дп *2100

Джон только что купил новую машину и планирует поездку по стране. В стране N городов, некоторые из них соединены двусторонними дорогами. В стране N - 1 дорог и из каждого города можно попасть в любой другой город. Города пронумерованы от 1 до N.

Сначала Джон выбирает, из какого города он начнёт своё путешествие. После этого он проводит один день в городе, после чего он едет к случайно выбранному городу, к которому есть прямая дорога из нынешнего местоположения Джона и который он ещё не посещал. Он делает так, пока следование данным правилам не становится невозможным.

Чтобы выбрать город, с которого он начнёт своё путешествие, он обращается к своему другу Джеку за советом. Джек хочет попасть в большой игорный бизнес, поэтому он хочет открыть казино в некоторых городах (не больше 1 в каждом городе, может не открыть ни одного нигде). Джек знает Джона достаточно хорошо, чтобы знать, что при своём посещении города с казино Джон зайдёт в него ровно один раз перед тем, как продолжить путешествие.

Также он знает, что если Джон зайдёт в казино с хорошим настроением, он выйдет из него с плохим, и наоборот. Так как Джек — друг Джона, он хочет, чтобы по окончанию путешествия Джон был в хорошем настроении. В начале путешествия Джон в хорошем настроении.

Сколькими способами Джек может выбрать начальный город для Джона и города, в которых он построит казино так, чтобы вне зависимости от того, как Джон будет путешествовать, он окажется в хорошем настроении по окончании путешествия? Выведите ответ по модулю 109 + 7.

Входные данные

В первой строке находится одно положительное целое число N (1 ≤ N ≤ 100000) — число городов в стране.

В следующих N - 1 строках содержатся два числа a,  b (1 ≤ a, b ≤ N), разделённые пробелом, означающие, что города a и b соединены двусторонней дорогой.

Выходные данные

Выведите одно число — ответ на задачу по модулю 109 + 7.

Примечание

Пример 1: Если Джек выберет город 1 как стартовый город Джона, то он может либо построить 0 казино, и Джон всегда будет в хорошем настроение, или построить казино в обоих городах, тогда Джон посетит казино в городе 1, перейдет в плохое настроение, затем пойдет в город 2, зайдет в казино там и получит хорошее настроение, и завершит свое путешествие, так как он не может пойти назад в город 1. Если Джек выберет город 2 как стартовый, то все симметрично, поэтому ответ 4.

Пример 2: Если Джек скажет Джону начать в город 1, он может построить казино либо в 0, либо в 2 городах (всего 4 возможности). Если он скажет ему начать в городе 2, то путешествие Джона будет либо проходить через города 2 и 1, либо 2 и 3. Тогда Джек должен либо не строить казино, либо построить их везде. С другими вариантами есть шанс, что Джон останется в плохом настроении. Старт из города 3 симметричен со стартом с городом 1, поэтому всего есть 4 + 2 + 4 = 10 вариантов.

H. Боб и сцены

геометрия дп *3000

Жители BubbleLand празднуют свое 10-летие, поэтому они решили организовать большой музыкальный фестиваль. Перед Бобом стояла задача пригласить N известных исполнителей на фестиваль. Однако, он был слишком занят расстановкой сцен, поэтому он забыл разослать письма с приглашениями вовремя, и сейчас он нашел только K свободных исполнителей. Теперь сцен больше, чем исполнителей, поэтому некоторые из сцен останутся пустыми. Боб не хочет, чтобы жители BubbleLand заметили пустые сцены и поняли, что он был безответственным.

Боб решил выбрать ровно K сцен, формирующих выпуклое множество, закрыть ребра этого выпуклого множества большими рекламными щитами и провести фестиваль внутри. Щиты скроют пустые сцены, находящиеся снаружи, от жителей, но кроме этого, Бобу еще надо сделать так, чтобы внутри не осталось ни одной пустой сцены.

Так как придет много людей, он хочет сделать площадь фестиваля максимально возможной. Помогите ему вычислить максимальную площадь, которую он может получить, выполнив все ограничения. Если это вообще невозможно, то ответ равен 0.00.

Входные данные

Первая строка содержит два целых числа N (3 ≤ N ≤ 200) и K (3 ≤ K ≤ min(N, 50)), разделенные пробелами, описывающих число сцен и число исполнителей, соответственно.

Каждая из следующих N строк содержит два целых числа Xi и Yi (0 ≤ Xi, Yi ≤ 106), описывающие координаты очередной сцены. Не существует трех сцен, лежащих на одной прямой.

Выходные данные

Выведите одну строку с одним числом, округленным до ровно двух знаков после запятой: максимально возможную площадь фестиваля. Округление производится таким образом, что 0.5 и более округляется вверх, все остальное округляется вниз.

Примечание

Пояснение к примеру: из всех возможных выпуклых многоугольников с 4 вершинами и без других точек внутри наибольший имеет координаты вершин (0, 0), (2, 1), (4, 4) и (1, 5).

D. Миша и зарядные станции

Бинарный поиск дп жадные алгоритмы *2400

Миша купил себе новый электромобиль и использует его каждый день для перемещения по городу. Поскольку Миша старается не перенапрягаться, каждый день он ездит только на одну из двух работ.

День Миши начинается с того, что он заряжает с утра электромобиль ровно настолько, чтобы ему хватило заряда для поездки на день. Если Миша едет на первую работу, стоимость зарядки составляет 1000 бурлей, а если на вторую, то 2000 бурлей.

На зарядной станции, где заряжается Миша, действует система бонусных карт. На бонусной карте может находиться некоторое неотрицательное количество бонусных бурлей. Каждый раз, когда покупатель оплачивает покупку стоимостью x бурлей, он может любую часть стоимости покупки в y (0 ≤ y ≤ x) бурлей, которая не превосходит баланса на бонусной карте, оплатить бонусными бурлями. В таком случае он платит x - y бурлей наличными, а сумма на бонусной карте уменьшается на y бонусных бурлей.

А если покупатель полностью расплатился наличными (то есть, y = 0), то 10% от суммы покупки возвращается на бонусную карту, то есть, счёт на бонусной карте увеличится на бонусных бурлей. Изначально баланс карты составляет 0 бонусных бурлей.

Миша распланировал первые n дней пользования картой и знает, сколько стоит зарядка в каждый из этих дней. Помогите Мише определить какое минимальное количество бурлей ему придётся потратить наличными при оптимальном использовании бонусной карты. Считайте, что Миша в состоянии в любой день оплатить любую часть стоимости наличными. Тратить все бонусные бурли с бонусной карты к концу рассматриваемого периода не обязательно.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 300 000) — число дней, которые распланировал Миша.

В следующей строке содержатся n чисел a1, a2, ..., an (ai = 1000 или ai = 2000), где ai обозначает стоимость зарядки в i-й день.

Выходные данные

Выведите единственное число — ответ на задачу.

Примечание

В первом тестовом примере Мише выгодно заплатить за первые два дня наличными, потратив 3000 бурлей, и получить 300 бонусных бурлей. После этого он может заплатить только 700 бурлей за третий день, покрыв оставшуюся часть стоимости бонусными бурлями.

Во втором тестовом примере Мише выгодно первые пять дней платить полную стоимость, в результате чего накопить 1000 бонусных бурлей, которыми можно расплатиться в последний день, ничего не доплачивая.

B. Кольцо Марвала Мракса

дп Перебор Структуры данных *1500

Профессор Дамблдор помогает Гарри уничтожать крестражи. Он отправился в Дом Мраксов, так как догадывался, что там может находиться крестраж. Профессор заметил кольцо Марвала Мракса и определил, что это крестраж. Несмотря на то, что профессор Дамблдор уничтожил его, он оказался проклят. Профессор Снегг помогает Дамблдору снять проклятие. Для этого он собирается дать Дамблдору ровно x капель зелья, которое он приготовил.

Значение x вычисляется как максимум p·ai + q·aj + r·ak для данных p, q, r и массива a1, a2, ... an при условии, что 1 ≤ i ≤ j ≤ k ≤ n. Помогите Снеггу определить x. Учтите, что x может быть отрицательным, в таком случае Снегг не сможет спасти Дамблдора.

Входные данные

В первой строке находятся 4 целых числа n, p, q, r ( - 109 ≤ p, q, r ≤ 109, 1 ≤ n ≤ 105).

Во второй строке заданы n целых чисел a1, a2, ... an ( - 109 ≤ ai ≤ 109), разделённых пробелами.

Выходные данные

Выведите максимальное значение выражения p·ai + q·aj + r·ak с учётом 1 ≤ i ≤ j ≤ k ≤ n.

Примечание

В первом примере можно выбрать i = j = k = 5, получив ответ 1·5 + 2·5 + 3·5 = 30.

Во втором примере можно выбрать i = j = 1, k = 5, получив ответ 12.

C. Чаша Пенелоппы Пуффендуй

Деревья дп *2000

Гарри, Рон и Гермиона обнаружили, что чаша Пенелоппы Пуффендуй является крестражем. В результате встречи с Белатриссой Лестрейндж Гермиона узнала, что чаша находится в семейном хранилище Лейстренджей в банке Гринготтс.

Волшебный банк представляет собой дерево из n хранилищ, каждое из которых имеет тип, определяемый целым числом от 1 до m. Деревом называется неориентированный связный граф без циклов.

Хранилища с идеальной охраной имеют тип k, все хранилища с типом k имеют идеальную охрану.

В банке может быть не более x хранилищ с идеальной охраной.

Кроме того, если хранилище имеет идеальную охрану, все соседние хранилища не имеют идеальной охраны, а их тип строго меньше k.

Гарри хочет рассмотреть все возможные варианты устройства банка. Он знает расположение хранилищ, поэтому его интересует количество возможных вариантов назначить хранилищам типы, чтобы все условия выполнялись.

Входные данные

В первой строке содержатся два целых числа n и m — количество хранилищ и количество различных типов хранилищ, соответственно (1 ≤ n ≤ 105, 1 ≤ m ≤ 109).

В следующей n - 1 строке содержатся пары целых чисел ui и vi (1 ≤ ui, vi ≤ n), описывающее i-е ребро, которое соединяет хранилища ui и vi. Гарантируется, что заданный граф является деревом.

В последней строке содержатся два целых числа k и x (1 ≤ k ≤ m, 1 ≤ x ≤ 10) — тип хранилищ с идеальной охраной и максимальное количество таких хранилищ.

Выходные данные

Выведите единственное число — количество способов назначить хранилищам типы для выполнения всех условий по модулю 109 + 7.

Примечание

В примере 1, не может быть хранилищ с идеальной охраной, так тип хранилища с идеальной охраной равен 1, что значит, что соседние хранилища должны иметь тип меньше чем 1, что невозможно. Поэтому единственно возможный вариант — когда все хранилища имеют тип 2.

E. Медальон Салазара Слизерина

битмаски дп *2200

Гарри узнал от Дамблдора, что медальон Салазара Слизерина является крестражем. Этот медальон раньше находился в доме 12 на площади Гриммо, доме матери Сириуса Блэка. Он был украден оттуда и теперь находится в Министерстве Магии в офисе Долорес Амбридж, бывшей преподавателя Защиты от Темных искусств.

Гарри, Рон и Гермиона проникли в Министерство. Когда они добрались в офис Амбридж, они увидели кодовый замок, который требует их сосчитать количество магических чисел от l до r включительно.

Гарри помнит со времен занятий у Амбридж, что она определяет магическое число как число, которое, будучи переведенным в систему счисления с основанием b, имело четное число каждой из цифр от 0 до b - 1 в записи без ведущих нулей.

Вам нужно ответить на q запросов замка. Каждый запрос задается тремя целыми числами bi, li и ri — основание и отрезок, для которых вам нужно посчитать количество магических чисел.

Входные данные

Первая строка содержит одно целое число q (1 ≤ q ≤ 105) — число запросов.

Каждая из следующих q строк содержит три целых числа bi, li, ri (2 ≤ bi ≤ 10, 1 ≤ li ≤ ri ≤ 1018).

Выходные данные

Выведите q строк, на каждой выведите одно целое число — ответ на очередной запрос.

Примечание

В примере 1 для первого запроса переведя числа от 4 до 9 в систему счисления по основанию 2, мы получим:

  • 4 = 1002,
  • 5 = 1012,
  • 6 = 1102,
  • 7 = 1112,
  • 8 = 10002,
  • 9 = 10012.

Среди них только 9 в системе счисления по основанию 2 имеет четное число 1 и 0. Поэтому ответ равен 1.

G. Гарри против Волан-де-Морта

графы Деревья дп поиск в глубину и подобное *3300

После того, как Гарри уничтожил все крестражи Волан-де-Морта, началась их решающая битва. Они кидают друг в друга заклинания, исходящие из волшебных палочек, и заклинания сталкиваются.

Битва происходит в Хогвартсе, который можно представить в виде дерева. В Хогвартсе есть n локаций, соединённых n - 1 двунаправленной дорогой.

Рону, наблюдающему за битвой между Гарри и Волан-де-Мортом, стало интересно, сколько существует троек локаций (u, v, w), таких что если Гарри находится в локации u, а Волан-де-Морт в локации v, их заклинания могут столкнуться в локации w. Это возможно только если u, v и w попарно различны и существуют путь из u в w и путь из v в w, не проходящие по одной и той же дороге.

В хаосе битвы в Хогвартсе стали появляться новые дороги. Вам необходимо вычислять величину, интересующую Рона, после каждого добавления дороги.

Формально, задано дерево из n вершин и n - 1 ребер. q новых рёбер добавляются между вершинами дерева. После каждого добавления необходимо вычислять число троек вершин (u, v, w), таких что u, v и w попарно различны и существуют два пути, один из которых между вершинами u и w, а другой — между v и w, такие, что у них нет общих рёбер.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 105) — количество локаций в Хогвартсе.

В каждой из следующих n - 1 строках содержатся два целых числа u и v (1 ≤ u, v ≤ n), показывающие наличие дороги между локациями u и v. Гарантируется, что данный граф является деревом.

В следующей строке задано целое число q (1 ≤ q ≤ 105) — количество новых дорог, добавляемых в граф.

В каждой из следующих q строк содержатся два целых числа u и v, обозначающие новую добавленную дорогу (1 ≤ u, v ≤ n).

Обратите внимание, некоторые новые дороги могут соединять те же локации, что и ранее существующие дороги, или соединять локацию саму с собой.

Выходные данные

В первой строке выведите число троек до всех добавлений.

После этого выведите q строк, в каждой из которых выведите число ansi, показывающее число троек после i-го запроса о добавлении дороги.

Примечание

В первом примере для изначального дерева только (1, 3, 2) и (3, 1, 2) являются возможными тройками локаций (u, v, w).

После добавления ребра из 2 в 3, возможны тройки локаций (1, 3, 2), (3, 1, 2), (1, 2, 3) и (2, 1, 3).

B. Похожие слова

Деревья дп Строки хэши *2300

Назовем словом непустую последовательность, состоящую из строчных букв латинского алфавита. Префиксом слова x называется слово y, которое можно получить из x удалением нуля или более последних букв x.

Назовем два слова похожими, если одно из них можно получить из другого, удалив в нем первую букву.

Дано множество слов S. Требуется найти размер максимального множества непустых слов X, удовлетворяющего следующим условиям:

  • каждое слово из X является префиксом некоторого слова из S;
  • в X нет двух похожих слов.
Входные данные

Входные данные содержат несколько тестов. Первая строка входных данных содержит число t — количество тестов. Далее следуют описания тестов.

Первая строка каждого описания содержит целое число n — количество слов в множестве S (1 ≤ n ≤ 106). В каждой из следующих n строк содержится по одному непустому слову — элементы множества S. Все слова в S различны.

Гарантируется, что суммарная длина всех слов во входных данных не превосходит 106.

Выходные данные

Для каждого теста выведите на отдельной строке число m — размер максимального искомого множества X.

C. Одиннадцатилетие

дп Комбинаторика математика *2400

На одиннадцатый день рождения Боре подарили n карточек с числами. На i-й карточке написано число ai. Боря хочет выложить карточки в один ряд так, чтобы получилось одно большое число. Например, если у Бори есть карточки с числами 1, 31 и 12, и он выложит их в этом порядке, он получит число 13112.

В свои 11 он уже знает, что всего существует n! способов вызложить карточки, но сегодня его интересуют только те способы, в результате которых, он получит число, которое делится на одиннадцать. Так, приведенный выше способ подходит, поскольку 13112 = 1192 × 11, а вот если он выложит карточки в последовательности 31, 1, 12, то он получит число 31112, которое не делится на 11, этот способ Боре не подходит. Помогите Боре посчитать количество таких способов.

Даже если на двух карточках написаны одинаковые числа, Боря считает способы, которые отличаются обменом этих двух карточек, различными, например, если у Бори есть две карточки с числом 1, то он может выложить их на стол двумя способами.

Помогите Боре, найдите число подходящих способов выложить карточки. Поскольку это количество может быть слишком большим, требуется вывести остаток от его деления на 998244353.

Входные данные

Входные данные содержат несколько тестов. Первая строка входных данных содержит число t — количество тестов (1 ≤ t ≤ 100). Далее следуют описания тестов.

Каждый тест описывается двумя строками.

Первая из них содержит целое число n (1 ≤ n ≤ 2000) — количество карточек, которое подарили Боре.

Вторая строка содержит n чисел ai (1 ≤ ai ≤ 109) — числа, которые записаны на карточках.

Гарантируется, что суммарное количество карточек во всех тестах одних входных данных не превышает 2000.

Выходные данные

Для каждого теста в отдельной строке выведите остаток от деления на 998244353 количества способов выложить карточки таким образом, чтобы получившееся число делилось на 11.

D. Кактусомания

Деревья дп *2400

Маша очень любит кактусы. В детстве Маша посадила дерево, и сейчас оно стало достаточно большим. Маша хочет из своего дерева сделать самый красивый кактус.

Напомним, что дерево — это неориентированный связный граф, в котором нет циклов. А кактус — это неориентированный связный граф, через каждую вершину которого проходит не более одного простого цикла.

У Маши есть дополнительные ребра, которые она может добавить к дереву. Для каждого ребра Маша знает, какие вершины оно должно соединять, и красоту этого ребра. Маша может добавить некоторые из этих ребер к дереву, если после их добавления получившийся граф будет кактусом. Красота полученного графа равна сумме всех значений красоты добавленных ребер.

Помогите Маше выяснить, какую максимальную красоту итогового кактуса Маша может получить.

Входные данные

В первой строке записаны два целых числа n и m — число вершин в дереве и число имеющихся у Маши дополнительных ребер, соответственно (3 ≤ n ≤ 2·105; 0 ≤ m ≤ 2·105).

Пусть Машино дерево имеет корень в вершине 1. В следующей строке записано n - 1 целых чисел: p2, p3, ..., pn, где pi — номер родителя вершины i в дереве — первая вершина на пути от вершины i до корня (1 ≤ pi < i).

В следующих m строках задано по три целых числа ui, vi и ci — вершины, которые могут быть соединены дополнительным ребром, которые Маша может добавить к дереву, и красоту этого ребра (1 ≤ ui, vi ≤ n; ui ≠ vi; 1 ≤ ci ≤ 104).

Гарантируется, что ни одно из дополнительных ребер не совпадает с ребром дерева.

Выходные данные

Выведите одно целое число — максимально возможную суммарную красоту кактуса, которую Маша может получить.

C. Возможно, вы имели в виду...

дп жадные алгоритмы реализация *1500

Текстовый редактор Beroffice имеет широкие возможности по работе с текстами. Одна из возможностей — автоматический поиск опечаток и формирование предложения по их исправлению.

При наборе текста в Beroffice используются только строчные буквы английского алфавита (то есть 26 букв от a до z). При наборе слова Beroffice предполагает, что слово набрано с опечаткой, если встречаются три или более согласные буквы подряд. Единственное исключение — если блок подряд идущих согласных букв состоит из одинаковых букв, то этот блок (даже если его длина больше или равна трём) не считается опечаткой. Формально, слово набрано с опечаткой, если в слове существует блок не менее чем из трёх согласных подряд и эти согласные — не одна и та же буква.

Например:

  • следующие слова набраны с опечатками: «hellno», «hackcerrs» и «backtothefutttture»;
  • следующие слова набраны без опечаток: «helllllooooo», «tobeornottobe» и «oooooo».

Редактор Beroffice при обнаружении слова с опечаткой вставляет минимальное количество пробелов в слово (разделяя его на несколько слов) так, что каждое из получившихся слов набрано без опечаток.

Реализуйте эту функциональность редактора Beroffice. Считайте гласными только буквы 'a', 'e', 'i', 'o' и 'u'. Все остальные буквы следует считать согласными.

Входные данные

В единственной строке входных данных содержится непустое слово, состоящее из строчных букв английского алфавита. Длина слова — от 1 до 3000 букв.

Выходные данные

Выведите заданное слово без изменений, если оно не содержит опечаток. Если слово содержит хотя бы одну опечатку, то вставьте в него наименьшее количество пробелов так, что каждое из получившихся слов не содержит опечаток. Если решений несколько, то выведите любое из них.

C. Правило торта

дп игры *1500

Вы, наверное, слышали про задачу о дележе торта. Если два человека хотят справедливо разделить кусок торта, то один человек должен разрезать кусок пополам, а другой — выбрать, кому достанется какая половина. У Алисы и Боба есть несколько кусочков пирога, и, вместо того, чтобы разрезать каждый кусочек пополам, они договорились, что каждый кусочек будет съеден одним человеком.

Они решили разделить кусочки следующим образом. Сначала они определили порядок, в котором кусочки будут распределены. У них есть специальная фишка, называемая «решающий», изначально она находится у Боба. Пока не все кусочки распределены, тот, у кого находится фишка, дает очередной кусочек пирога по своему усмотрению одному участнику дележа, а фишку — другому. Так продолжается, пока все кусочки не будут распределены.

Так как все кусочки превосходного качества, каждый участник хочет максимизировать суммарный размер кусочков пирога, которые достанутся ему. Предполагая, что оба участника принимают решения оптимально, сколько пирога получит каждый?

Входные данные

В первой строке находится одно целое число N (1 ≤ N ≤ 50) — количество кусочков пирога.

На следующей строке находятся N целых чисел — размеры кусочков (каждый размер лежит в пределах от 1 до 100000 включительно) в том порядке, в котором они будут распределены.

Выходные данные

Выведите два целых числа. Сначала выведите суммарный размер кусочков, которые достанутся Алисе, а затем суммарный размер кусочков, которые достанутся Бобу, если оба участника действуют оптимально.

Примечание

В первом примере Боб должен взять кусок размера 141 себе и отдать фишку Алисе. Затем Алиса отдаст кусочек размера 592 Бобу, а фишку оставит себе, чтобы забрать себе кусочек размера 653.

D. Сумасшествие третьего месяца

Деревья дп Теория вероятностей *2100

Приближается ежегодное школьное соревнование по спортболу, по причинам копирайта назовем его «Сумасшествие третьего месяца». Всего будут участвовать 2N команд, пронумерованных от 1 до 2N. В турнире будет N раундов, в каждом раунде половина команд будет выбывать. Первый раунд будет состоять из 2N - 1 игр, пронумерованных с 1. В игре номер i команда i - 1 сыграет с командой i. Проигравший выбывает, а победитель проходит в следующий раунд (ничьих не бывает). В каждом последующем раунде вдвое меньше игр, чем в предыдущем, и в игре номер i играет победитель игры номер i - 1 предыдущего раунда против победителя игры номер i предыдущего раунда.

Каждый год в офисе проходит соревнование по построению лучшей турнирной сетки. Турнирная сетка — это набор предсказаний победителя в каждой игре. Для игр первого раунда можно любую из двух команд выбрать победителем, а для игр из более поздних раундов необходимо, чтобы предсказанный победитель был также предсказанным победителем в предыдущем раунде. Заметьте, что турнирная сетка строится перед тем, как начнутся игры. Правильные предсказания в первом раунде дают составителю 1 очко, а правильные предсказания в каждом последующем раунде дают в два раза больше очков, чем в предыдущем. Таким образом, правильное предсказание в финале дает 2N - 1 очков.

Для каждой пары команд среди участников вы оценили вероятность победы каждой игры, если эти команды сыграют между собой. Теперь вы хотите построить турнирную сетку с максимальным математическим ожиданием суммарного количества очков.

Входные данные

Первая строка содержит одно целое число N (2 ≤ N ≤ 6).

Далее следуют 2N строк, каждая содержит 2N целых чисел. j-е число в i-й строке равно вероятности того, что команда i выиграет команду j, кроме случая i = j, в котором это значение будет равно 0. Гарантируется, что сумма i-го числа в j-й строке и j-го числа в i-й строке в точности равна 100.

Выходные данные

Выведите максимально возможное математическое ожидание суммарного числа очков среди всех возможных турнирных сеток. Ваш ответ должен быть правильным с абсолютной или относительной точностью 10 - 9.

Формально, пусть ваш ответ равен a, а ответ жюри равен b. Ваш ответ будет считаться правильным, если .

Примечание

В первом примере вы должны выбрать команды 1 и 4 как победителей в раунде 1, и команду 1 как победителя в раунде 2. Обратите внимание, победитель в раунде 2 должен быть победителем в раунде 1.

C. Генная инженерия

Деревья дп строковые суфф. структуры *2500

«Многомерные пространства нынче не в моде, а вот генные алгоритмы — очень даже», — подумал физик Воль и переквалифицировался в биоинформатика. Исследуя любезно предоставленные ему результаты секвенирования, он столкнулся со следующей задачей, касающейся цепочек ДНК. Далее мы будем считать, что цепочка ДНК — это произвольная строка, состоящая из заглавных букв «A», «C», «G» и «T» (разумеется, это упрощенная интерпретация).

Пусть есть длинная цепочка ДНК w и набор s1, s2, ..., sm коротких цепочек. Будем говорить, что набор фильтрует w, если цепочками набора можно покрыть w. Естественно, подстроки для разных позиций могут пересекаться между собой и даже накрывать друг друга. Формально это условие означает следующее: пусть строка w имеет длину |w|, ее символы пронумерованы от 1 до |w|, и для каждой позиции i в строке w найдется такая пара индексов l, r (1 ≤ l ≤ i ≤ r ≤ |w|), что подстрока w[l ... r] является элементом набора s1, s2, ..., sm.

Воль заметил, что цепочек фиксированной длины, фильтрующихся конкретным набором, может быть очень много, и как посчитать их количество — не знает. Помогите физику! Ваша задача — для заданной длины n и набора {si} найти количество различных цепочек ДНК длины n, фильтрующихся данных набором.

Ответ может быть очень большим, поэтому выведите его по модулю 1000000009.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n ≤ 1000, 1 ≤ m ≤ 10) — длина искомых цепочек и количество строк в наборе соответственно.

В каждой из следующих m строк содержится соответствующая цепочка из набора si, задаваемая непустой строкой длины не больше 10, состоящей из заглавных букв «A», «C», «G», «T». Среди заданного набора строк могут быть одинаковые.

Выходные данные

Выведите единственное целое число: ответ по модулю 1000000009 (109 + 9).

Примечание

В первом примере строка должна фильтроваться символом «A». Ясно, что такая строка единственна: «AA».

Во втором примере существуют ровно две различные строки, удовлетворяющие условию (см. картинки).

E. Пожар

дп сортировки *2000

У Поликарпа беда — пожар! Время спасать самое ценное. Поликарп оценил, что на спасение вещи i ему потребуется ti секунд времени. Кроме того, для каждой вещи он оценил величину di — время, через которое вещь i сгорит и больше не будет представлять какую-либо ценность. В частности, если ti ≥ di, то вещь i спасти невозможно.

Зная ценность pi каждой из вещей, найдите такой набор вещей, что Поликарп сможет спасти все эти вещи, и при этом суммарная ценность спасённых вещей будет максимальной. Спасение вещей происходит последовательно. Например, если он спасает сначала вещь a, а потом b, то вещь a будет спасена через ta секунд, а вещь b через ta + tb секунд.

Входные данные

В первой строке следует целое число n (1 ≤ n ≤ 100) — количество вещей Поликарпа.

В следующих n строках следуют по три целых числа ti, di, pi (1 ≤ ti ≤ 20, 1 ≤ di ≤ 2 000, 1 ≤ pi ≤ 20) — время, необходимое для спасения вещи i, время, через которое сгорит вещь i, и ценность вещи i.

Выходные данные

В первую строку выведите максимальную возможную суммарную ценность набора спасенных вещей. Во вторую строку выведите целое число m — количество вещей в искомом наборе. В третью строку выведите m различных целых чисел — номера спасенных вещей в порядке их спасения. Вещи нумеруются, начиная с единицы, в том же порядке, в котором они заданы во входных данных. Если ответов несколько, разрешается вывести любой из них.

Примечание

В первом примере Поликарп успеет спасти любые две вещи, но, чтобы максимизировать ценность спасённых вещей, он должен спасти вторую и третью вещь. Например, он может сначала спасти третью вещь через 3 секунды, а затем ещё через 2 секунды спасти вторую вещь. Таким образом, суммарная ценность спасённых вещей будет равна 6 + 5 = 11.

Во втором примере Поликарп успеет спасти только первую вещь, так как даже если он сразу начнёт спасать вторую вещь, то к тому моменту, когда ему удастся её спасти (через 3 секунды), она уже полностью сгорит.

C. Пройди быстрее

Бинарный поиск дп *2400

Вы хотите поставить рекорд в вашей любимой компьютерной игре. Игра состоит из N уровней, чтобы выиграть, вы должны пройти их друг за другом. Вы обычно проходите каждый уровень так быстро, как можете. но иногда вы проходите его медленнее. А именно, вы проходите i-й уровень либо за Fi секунд, либо за Si секунд, при этом Fi < Si, при этом с вероятностью Pi процентов вы пройдете его за Fi секунд. После прохождения уровня вы можете либо продолжить игру, перейдя на следующий уровень, либо сбросить прогресс и начать с первого уровня заново. Оба решения и действия вы совершаете мгновенно.

Ваша цель — пройти все уровни один за другим суммарно не более чем за R секунд. Вы хотите минимизировать ожидаемое время игры до момента, когда вы достигнете эту цель. Если вы будете продолжать и сбрасывать прогресс оптимально, чему равно математическое ожидаемое время игры?

Входные данные

Первая строка содержит два целых числа N и R  — число уровней и число секунд, за которое вы хотите пройти игру, соответственно.

Далее следуют N строк. Строка i содержит целые числа Fi, Si, Pi (1 ≤ Fi < Si ≤ 100, 80 ≤ Pi ≤ 99) — время быстрого прохождения уровня i, время медленного прохождения уровня i, и вероятность (в процентах) прохождения уровня i быстро.

Выходные данные

Выведите математическое ожидание времени игры. Ваш ответ будет считаться правильным, если его абсолютная или относительная точность не превосходит 10 - 9.

Формально, если ваш ответ равен a, а ответ жюри равен b, то ваш ответ будет считаться правильным, если .

Примечание

В первом примере вам никогда не надо начинать сначала. С вероятностью 81% вы закончите игру за 2 секунды, и с вероятностью 19% — за 8 секунд. И то и другое вас устроит. Ожидаемое время игры равно 0.81·2 + 0.19·8 = 3.14.

Во втором примере вы должны сбрасывать после первого уровня, если прошли его медленно. В среднем у вас будет 0.25 медленных попыток перед быстрой попыткой. Затем безразлично, закончите ли вы второй уровень быстро или медленно. Ожидаемое время равно 0.25·30 + 20 + 0.85·3 + 0.15·9 = 31.4.

E. Шестнадцатеричная дислексия

битмаски графы дп Перебор *3300

Копирование больших шестнадцатеричных строк (то есть чисел в системе счисления по основанию 16) вручную может вызывать много ошибок, но это не останавливает людей. Вы обнаружили ошибку в программе, которая, скорее всего, была вызвана ошибкой при копировании такой строки. Вы думаете, что тот, кто копировал строку, не изменил ни одной цифры, и не изменил длину, но, возможно, перепутал порядок цифр. Например, если исходная строка была 0abc, то, возможно, она была изменена в a0cb или 0bca, но не в abc или 0abb.

К сожалению, у вас нет доступа ни к изначальной строке, ни к скопированной, но вы знаете длину этих строк и модуль их разницы (как чисел). Вам будет дана эта разница как шестнадцатеричная строка S, которая дополнена ведущими нулями до длины изначальной (и скопированной) строки. Определите наименьшее возможное численное значение исходной строки.

Входные данные

В единственной строке содержится шестнадцатеричная строка S, записанная только цифрами от 0 до 9 и строчными латинскими буквами от a до f, длиной не более 14. Как минимум одна из цифр не равна нулю.

Выходные данные

Если описанное невозможно, выведите «NO» (без кавычек).

Иначе выведите минимальную шестнадцатеричную строку, соответствующую минимально возможному исходному числу, включая все ведущие нули, дополняющие его до нужной длины. Выводите число в том же формате, что и во входных данных.

Примечание

Численное значение шестнадцатеричной строки вычисляется как сумма произведений каждой из цифр на последовательные степени числа 16, начиная с самой правой цифры, которая умножается на 160. Шестнадцатеричные цифры, большие 9, обозначаются строчными буквами: a = 10, b = 11, c = 12, d = 13, e = 14, f = 15.

Например, численное значение 0f1e равно 0·163 + 15·162 + 1·161 + 14·160 = 3870, численное значение 00f1 равно 0·163 + 0·162 + 15·161 + 1·160 = 241, численное значение 100f равно 1·163 + 0·162 + 0·161 + 15·160 = 4111. Так как 3870 + 241 = 4111 и 00f1 — перестановка 100f, то 00f1 — корректный ответ на второй пример.

C. Кволы

битмаски дп Конструктив Перебор *1500

Снарк и Филипп готовят задачи на предстоящие кволы. У них есть банк из n задач, они хотят выбрать из него любое непустое подмножество задач.

На кволах будет участвовать k опытных команд. Для каждой задачи известно, для каких из этих команд эта задача баян, то есть, про каждую задачу и каждую команду известно, знает ли эта команда эту задачу, или нет.

Определите, можно ли выбрать подмножество задач так, чтобы каждая из команд не знала хотя бы половину задач.

Входные данные

Первая строка содержит два целых числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ 4) — число задач и число опытных команд на кволах. Следующие n строк содержат по k чисел, каждое из которых либо 0, либо 1. j-е число в i-й строке равно 1, если j-я команда знает i-ю задачу, и 0 иначе.

Выходные данные

Выведите «YES» (без кавычек), если можно выбрать непустой набор задач, удовлетворяющий ограничениям, и «NO» в противном случае.

Вы можете выводить каждую букву как заглавной, так и строчной («YeS» и «yes» можно вывести вместо «YES»).

Примечание

В первом примере нельзя выбрать набор задач, так как первая команда знает все задачи.

Во втором примере можно взять первую и третью задачи.

D. Огромные строки

битмаски дп Перебор реализация Строки *2200

Дано n строк s1, s2, ..., sn, состоящих из символов 0 и 1. Далее m раз создается новая строка как конкатенация уже имеющихся. Формально, на i-м шаге конкатенация saisbi записывается в новую строку sn + i (нумерация шагов ведется с 1). После каждой операции вам нужно найти максимальное положительное целое число k такое, что в полученной строке встречаются все возможные строки из 0 и 1 длины k (а таких различных строк 2k) как подстроки. Если такого k не существует, выведите 0.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 100) — количество строк. Следующие n строк содержат строки s1, s2, ..., sn (1 ≤ |si| ≤ 100) по одной в строке. Суммарная длина строк не превосходит 100.

Следующая строка содержит число m (1 ≤ m ≤ 100) — количество операций. За ней следуют m строк, содержащих по два целых числа ai и bi (1 ≤ ai, bi ≤ n + i - 1) — номера строк, образующих новую строку sn + i.

Выходные данные

Выведите m строк, содержащие по одному целому числу — ответы на запросы после операций.

Примечание

В первой операции создается строка "0110". Для k = 1 две возможные бинарные строки длины k — это "0" и "1", они обе являются подстроками новой строки. Для k = 2 и больше существуют строки длины k, не встречающиеся в получившейся строке (для k = 2 такая строка — это "00"). Поэтому ответ равен 1.

Во второй операции создается строка "01100". Теперь присутствуют все строки длины k = 2.

В третьей операции создается строка "1111111111". В ней нет нулей, поэтому ответ равен 0.

E. Полицейский и дерево

графы Деревья дп *2700

Дано дерево (связный неориентированный граф без циклов), его вершины пронумерованы от 1 до n, длина i-го ребра wi. В вершине s стоит полицейский, также в вершинах x1, x2, ..., xm (xj ≠ s) расположены m преступников.

Полицейский ходит по ребрам со скоростью 1, преступники могут перемещаться со сколь угодно большой скоростью. Если преступник в какой-то момент находится в одной точке с полицейским, его мгновенно ловят. Определите время, за которое можно поймать всех преступников, если преступники и полицейский действуют оптимально (т.е. преступники максимизируют это время, а полицейский — минимизирует). В любой момент времени все знают текущие положения всех остальных людей.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 50) — количество вершин в дереве. Следующие n - 1 строк содержат по три целых числа ui, vi, wi (1 ≤ ui, vi ≤ n, 1 ≤ wi ≤ 50), описывающие ребра и их длины. Гарантируется, что заданный граф — дерево.

Следующая строка содержит целое число s (1 ≤ s ≤ n) — номер вершины, где изначально находится полицейский.

Следующая строка содержит целое число m (1 ≤ m ≤ 50) — количество преступников. В следующей строке записано m целых чисел x1, x2, ..., xm (1 ≤ xj ≤ n, xj ≠ s) — номера вершин, где изначально расположены преступники. xj не обязательно различны.

Выходные данные

Если полицейский не сможет поймать всех преступников, выведите в единственную строку «Terrorists win» (без кавычек).

Иначе выведите одно число — время, за которое полицейский поймает всех преступников.

Примечание

В первом примере один из оптимальных сценариев такой. Преступник 2 перемещается в вершину 3, а преступник 4 — в вершину 4. Полицейский идет в вершину 4 и ловит двух преступников. После этого преступник 1 перемещается в вершину 2. Полицейский идет в вершину 3 и ловит преступника 2, потом идет в вершину 2 и ловит оставшегося преступника.

F. Очередная задача минимизации

дп разделяй и властвуй *2500

Дан массив из n чисел a1... an. Стоимостью подотрезка элементов в массиве назовем количество неупорядоченных пар различных позиций внутри подотрезка, содержащих одинаковые элементы. Разбейте массив на k непересекающихся непустых подотрезков таких, что сумма их стоимостей минимальна. Каждый элемент массива должен попасть ровно в один подотрезок.

Входные данные

Первая строка содержит два целых числа n и k (2 ≤ n ≤ 105, 2 ≤ k ≤ min (n, 20))  — размер массива и количество отрезков, на которые надо его разбить.

Следующая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ n)  — элементы массива.

Выходные данные

Выведите одно число  — минимальную стоимость разбиения массива на подотрезки.

Примечание

В первом примере оптимально разбить последовательность на три подпоследовательности: [1], [1, 3], [3, 3, 2, 1]. Стоимости равны 0, 0 и 1, поэтому ответ равен 1.

Во втором примере оптимально разбить подпоследовательность на две половины. Стоимость каждой половины равна 4.

В третьем примере оптимально разбить следующим образом: [1, 2, 2, 2, 1], [2, 1, 1, 1, 2], [2, 1, 1]. Стоимости равны 4, 4, 1.

C. Интригующая одержимость

дп Комбинаторика математика *1800

— Это не игра, а долг союзников справедливости, Нии-тян!

— Не союзников, а самого правосудия, Онии-тян!

Возьмитесь за руки и идите куда угодно, быстрее скорости мысли! На этот раз Сёстры Огня Карен и Цукихи направляются туда, где они ещё не были, — на окружённые водой острова!

Есть три группы островов, покрашенные в красный, голубой и фиолетовый цвета. Группы состоят из a, b и c островов, соответственно.

Мосты были построены между некоторыми парами островов. Возможно, что все пары островов соединены мостами или же нет ни одного моста. Мост соединяет два различных острова и имеет длину 1. По мосту можно перемещаться в обе стороны. Для каждой пары различных островов одного цвета должно быть выполнено, что расстояние между ними по мостам не менее 3 или же невозможно добраться с одного острова до другого по мостам.

Сёстры Огня готовы к любым неожиданностям, но они также хотят проверить ваше мужество. От вас требуется узнать количество различных способов построить мосты между островами, чтобы они удовлетворяли данным ограничениям по модулю 998 244 353. Два способа считаются различными, если существует пара островов, такая, что между этими островами есть мост в одном способе и нет в другом.

Входные данные

В первой строке входного файла содержатся три целых числа a, b и c (1 ≤ a, b, c ≤ 5 000) — число островов в красной, голубой и фиолетовых группах, соответственно.

Выходные данные

Выведите одно число — количество способов построить мосты по модулю 998 244 353.

Примечание

В первом примере могут быть построены 3 моста и любое их подмножество будет корректным способом. Поэтому ответ равен 23 = 8.

Во втором примере два корректных способа постройки мостов изображены на картинке сверху, а два некорректных способа — на картинке снизу.

C. Интересная игра

дп игры математика *2000

Два лучших друга Сережа и Гена играют в игру.

Изначально на столе находится одна кучка из n камней. За один ход нужно взять одну кучку и разбить ее на произвольное число кучек размерами a1 > a2 > ... > ak > 0 камней так, что a1 - a2 = a2 - a3 = ... = ak - 1 - ak = 1. Естественно, количество кучек k должно быть не меньше двух.

Друзья делают ходы по очереди. Проигрывает тот, кто не может сделать ход. Начинает Сережа. Кто выиграет при оптимальной игре обоих?

Входные данные

В единственной строке записано одно целое число n (1 ≤ n ≤ 105).

Выходные данные

Если выигрывает Сережа, выведите k — минимальное число кучек, на которое он может разбить исходную первым ходом при выигрышной стратегии.

Если выигрывает Гена, выведите «-1» (без кавычек).

D. Красивая дорога

графы Деревья дп поиск в глубину и подобное реализация снм сортировки *2300

Давным давно где-то в Азии в одной стране шли междоусобные войны.

Каждый из n городов хотел захватить власть, поэтому иногда один город собирал армию и отправлял ее в поход против другого города.

Прокладывание дорог было делом трудным, поэтому их в стране было мало, а именно n - 1. Также из любого города до любого другого можно было добраться по этим дорогам.

Даже во время войны жители Востока остаются людьми духовно богатыми и ценящими красоту природы. И, дабы оставить на века память о своем великом походе, на дороге, на которой в пути армия провела больше всего времени, сажали одно красивое дерево. Жители Востока любят природу, поэтому если таких дорог было несколько, то по одному дереву сажалось на каждой.

Недавно, когда были обнаружены летописи той войны, выяснилось, что каждый город напал на каждый ровно по одному разу. Всего было ровно n(n - 1) походов. Всем стало интересно, какая дорога после тех войн стала самой красивой, то есть на какой дороге посадили больше всего красивых деревьев.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 105) — количество городов. Следующие n - 1 строк содержат по три целых числа: номера городов ai, bi (1 ≤ ai, bi ≤ n), соединяемых i-ой дорогой и количество дней di, затрачиваемое армией на переход по ней (1 ≤ di ≤ 109). Длины некоторых дорог могут совпадать.

Выходные данные

В первой строке выведите два числа — количество красивых деревьев на самой красивой дороге и количество самых красивых дорог. Во второй строке выведите список самых красивых дорог, в порядке возрастания номеров. Дороги пронумерованы от 1 до n - 1 в том порядке, в котором они даны во входных данных.

Пожалуйста, не используйте спецификатор %lld для записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

C. Максимальное разбиение

дп жадные алгоритмы математика теория чисел *1300

Вам задано некоторое количество запросов. В i-м запросе дано положительное целое число ni. Надо представить ni в виде суммы максимального количества составных слагаемых и вывести это количество, либо вывести -1, если такое представление невозможно.

Составными называются натуральные числа большие 1, не являющиеся простыми, то есть, имеющие натуральные делители, отличные от 1 и самого числа.

Входные данные

В первой строке дано число q (1 ≤ q ≤ 105) — количество запросов

Далее идет q строк. В (i + 1)-й строке дано число ni (1 ≤ ni ≤ 109) — i-й запрос.

Выходные данные

Для каждого запроса выведите максимальное количество слагаемых в корректном разбиении на составные слагаемые или -1, если такого разбиения не существует.

Примечание

12 = 4 + 4 + 4 = 4 + 8 = 6 + 6 = 12, но в первом разбиении больше количество слагаемых

8 = 4 + 4, 6 нельзя разбить на меньшие составные слагаемые.

1, 2, 3 меньше любого составного числа, поэтому для них не существует корректных разбиений.

B. Сбалансированная подстрока

дп реализация *1500

Задана строка s, состоящая только из символов 0 и 1. Подстрока [l, r] в s — это строка slsl + 1sl + 2... sr, ее длина равна r - l + 1. Подстрока называется сбалансированной, если количество нулей (0) в ней совпадает с количеством единиц.

Найдите длину наидлиннейшей сбалансированной подстроки s.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 100000) — длина строки s.

Вторая строка — строка s длиной ровно n. В s содержатся только символы 0 и 1.

Выходные данные

Если в s нет ни одной непустой сбалансированной подстроки, то выведите 0. Иначе выведите длину наидлиннейшей сбалансированной подстроки.

Примечание

В первом примере можно выбрать подстроку [3, 6]. Она сбалансирована, длина — 4. Также можно выбрать подстроку [2, 5].

Во втором примере нет ни одной непустой сбалансированной подстроки.

E. Награждение победителей

дп Перебор Структуры данных *2300

На днях Алексей закончил проведение соревнования по программированию для студентов из Берляндии. n студентов приняли участие в соревновании, i-й решил ai задач. Теперь необходимо наградить некоторых участников. Алексей может вручать студентам дипломы трех степеней. Каждый студент или получит один диплом какой-либо степени, или не получит диплома совсем. Пусть cntx — количество студентов, награжденные дипломом степени x (1 ≤ x ≤ 3). Должны соблюдаться следующие условия:

  • Для каждого x (1 ≤ x ≤ 3) cntx > 0;
  • Для любых двух степеней x и y cntx ≤ 2·cnty.

Конечно, есть множество способов распределить дипломы. Пусть bi — степень диплома, который получит i-й студент (или  - 1, если i-й студент останется без диплома). Также для любого x такого, что 1 ≤ x ≤ 3, пусть cx — максимальное количество задач, решенных студентом, получившим диплом степени x, а dx — минимальное количество задач, решенных студентом, получившим диплом степени x. Алексей хочет раздать дипломы таким образом, чтобы:

  1. Если студент i решил больше задач, чем студент j, то он должен быть награжден не хуже студента j (невозможно, чтобы студент j получил диплом, а i — нет, и невозможно, чтобы оба получили диплом и bj < bi);
  2. d1 - c2 должно быть максимально;
  3. Среди всех способов максимизировать предыдущее выражение d2 - c3 должно быть максимально;
  4. Среди всех способов удовлетворить предыдущие условия d3 - c - 1 должно быть максимально, где c - 1 — максимальное количество задач, решенных студентом, не получившим диплома (или 0, если все студенты получили диплом).

Помогите Алексею найти способ наградить участников!

Входные данные

В первой строке записано одно целое число n (3 ≤ n ≤ 3000).

Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 5000).

Выходные данные

Выведите n чисел. i-е число должно равняться степени диплома, который получит i-й участник (или  - 1, если он не получит никакого диплома).

Если существует несколько оптимальных решений, выведите любое из них. Гарантируется, что ответ всегда существует.

E. Курьерский клуб

Бинарный поиск дп Структуры данных *2600

Петя и Вася устроились работать курьерами. В течение очередного рабочего дня им нужно доставить пакеты в n различных точек на прямой. Согласно внутренним правилам компании, доставка пакетов должна быть произведена строго в определённом порядке. Исходно Петя находится в точке с координатой s1, Вася находится в точке с координатой s2, а клиенты находятся в точках x1, x2, ..., xn в порядке требуемого посещения.

Ребята заранее договариваются, кто из них доставит пакет для какого из клиентов, после чего они действуют следующим образом. Когда пакет для i-го клиента доставлен, тот из ребят, кто доставляет пакет для (i + 1)-го клиента, отправляется в путь (это может быть как тот же из них, кто только что приехал в точку xi, так и другой). Тот из друзей, который не занят в доставке текущего пакета, стоит на месте.

Для связи друг с другом ребятам выдали рации. Рации довольно плохо работают на больших расстояниях, поэтому Петя и Вася хотят распределить заказы так, чтобы максимальное расстояние между ними в течение дня было как можно меньше. Помогите Пете и Васе минимизировать максимальное расстояние между ними, соблюдая все правила доставки.

Входные данные

В первой строке даны три целых числа n, s1, s2 (1 ≤ n ≤ 100 000, 0 ≤ s1, s2 ≤ 109) — количество точек доставки и начальные положения Пети и Васи.

Во второй строке расположены n целых чисел x1, x2, ..., xn — координаты клиентов (0 ≤ xi ≤ 109), указанные в том порядке, в котором следует выполнять доставку.

Гарантируется, что среди чисел s1, s2, x1, ..., xn нет двух одинаковых.

Выходные данные

Выведите единственное целое число — минимальное возможное максимальное расстояние между ребятами в процессе доставки.

Примечание

В первом примере изначальное расстояние между курьерами равно 10. Эта величина и будет ответом, например, Петя может выполнить обе доставки, а Вася останется в начальной точке.

Во втором примере оптимально можно действовать, например, так: Вася доставляет пакет первому клиенту, Петя — второму и, наконец, Вася выполняет доставку пакета третьему клиенту. При таком порядке доставки расстояние между курьерами никогда не превзойдет 1.

В третьем примере есть только два возможных варианта: если доставку единственного пакета осуществляет Петя, то максимальное расстояние между ними будет 5 - 2 = 3. Если же пакет повезёт Вася, то максимальное расстояние составит 4 - 2 = 2. Последний способ является оптимальным.

B. Никита и строка

дп Перебор *1500

Однажды Никита нашел строку, состоящую только из символов «a» и «b».

Никита считает, что строка красивая, если её можно разрезать на 3 строки (возможно, нулевой длины) так, что, не меняя порядок, 1-я и 3-я состоят только из букв «a», а 2-я только из букв «b».

Никита хочет сделать строку красивой, выкинув из нее некоторые символы (или не выкидывая их вовсе), но не меняя их порядок. Какой наибольшей длины строку он сможет получить?

Входные данные

В первой строке содержится непустая строка, длиной не более 5 000, состоящая только из строчных букв латинского алфавита «a» и «b».

Выходные данные

Выведете одно число — максимально возможную длину получившейся красивой строки.

Примечание

В первом примере строка уже красивая.

Во втором примере нужно убрать одну из букв «b», чтобы строка стала красивой.

E. Числа на доске

дп Комбинаторика *3300

На доске написана последовательность из n целых чисел. Скоро к доске подойдёт Саша и начнёт делать следующую операцию: пусть x и y — два подряд идущих числа (x перед y), тогда он может их стереть и на их месте написать число x + 2y. Он делает такие операции, пока на доске не останется одно число. Саша очень любит большие числа и получит самое большое возможное число.

Никита хочет успеть к доске раньше Саши и стереть часть чисел. У него есть q вариантов, в варианте i он стирает все числа левее позиции li и все числа правее позиции ri, то есть на доске остаются все числа от li-го до ri-го включительно. Для каждого из вариантов ему интересно, какое число в итоге получится у Саши. Так как ответ может быть большим, выведите его по модулю 109 + 7.

Входные данные

В первой строке содержатся числа n и q (1 ≤ n, q ≤ 105) — количество чисел на доске и вариантов у Никиты, соответственно.

Следующая строка содержит n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — последовательность чисел на доске.

Следующие q строк содержат по два числа li и ri (1 ≤ li ≤ ri ≤ n), описывающие варианты Никиты.

Выходные данные

Для каждого варианта Никиты выведите остаток от деления максимального числа, которое может получить Саша, на 109 + 7.

Примечание

Во втором примере Никита ничего не стирает. Саша первым действием сотрёт числа 1 и 2 и напишет 5. Потом он сотрёт 5 и -3 и получит -1. Остаток от деления -1 на 109 + 7 равен 109 + 6.

D. Packmen Strike Back

Бинарный поиск дп математика *2500

Game field is represented by a line of n square cells. In some cells there are packmen, in some cells there are asterisks and the rest of the cells are empty. Packmen eat asterisks.

Before the game starts you can choose a movement direction, left or right, for each packman. Once the game begins all the packmen simultaneously start moving according their directions. A packman can't change the given direction.

Once a packman enters a cell containing an asterisk, packman immediately eats the asterisk. Once the packman leaves the cell it becomes empty. Each packman moves at speed 1 cell per second. If a packman enters a border cell, the packman stops. Packmen do not interfere with the movement of other packmen; in one cell there can be any number of packmen moving in any directions.

Your task is to assign a direction to each packman so that they eat the maximal number of asterisks. If there are multiple ways to assign directions to eat the maximal number of asterisks, you should choose the way which minimizes the time to do that.

Input

The first line contains integer number n (2 ≤ n ≤ 1 000 000) — the number of cells in the game field.

The second line contains n characters. If the i-th character is '.', the i-th cell is empty. If the i-th character is '*', the i-th cell contains an asterisk. If the i-th character is 'P', the i-th cell contains a packman.

The field contains at least one asterisk and at least one packman.

Output

Print two integer numbers — the maximal number of asterisks packmen can eat and the minimal time to do it.

Note

In the first example the leftmost packman should move to the right, the rightmost packman should move to the left. All the asterisks will be eaten, the last asterisk will be eaten after 4 seconds.

I. Photo Processing

Бинарный поиск дп *1900

Evlampiy has found one more cool application to process photos. However the application has certain limitations.

Each photo i has a contrast vi. In order for the processing to be truly of high quality, the application must receive at least k photos with contrasts which differ as little as possible.

Evlampiy already knows the contrast vi for each of his n photos. Now he wants to split the photos into groups, so that each group contains at least k photos. As a result, each photo must belong to exactly one group.

He considers a processing time of the j-th group to be the difference between the maximum and minimum values of vi in the group. Because of multithreading the processing time of a division into groups is the maximum processing time among all groups.

Split n photos into groups in a such way that the processing time of the division is the minimum possible, i.e. that the the maximum processing time over all groups as least as possible.

Input

The first line contains two integers n and k (1 ≤ k ≤ n ≤ 3·105) — number of photos and minimum size of a group.

The second line contains n integers v1, v2, ..., vn (1 ≤ vi ≤ 109), where vi is the contrast of the i-th photo.

Output

Print the minimal processing time of the division into groups.

Note

In the first example the photos should be split into 2 groups: [40, 50] and [110, 120, 130]. The processing time of the first group is 10, and the processing time of the second group is 20. Maximum among 10 and 20 is 20. It is impossible to split the photos into groups in a such way that the processing time of division is less than 20.

In the second example the photos should be split into four groups, each containing one photo. So the minimal possible processing time of a division is 0.

E. Максимум в массиве

дп Комбинаторика математика *2400

Как-то раз Петя решал очень интересную задачу. Однако, какие бы оптимизации Петя ни применял, его решение всё равно получало вердикт Time limit exceeded. После тщательного анализа кода он обнаружил, что проблема заключается в его функции поиска максимума в массиве из n положительных чисел, которая работала слишком долго. В отчаянии Петя решил добавить весьма неожиданное отсечение с параметром k, после чего функция приняла следующий вид:


int fast_max(int n, int a[]) {
int ans = 0;
int offset = 0;
for (int i = 0; i < n; ++i)
if (ans < a[i]) {
ans = a[i];
offset = 0;
} else {
offset = offset + 1;
if (offset == k)
return ans;
}
return ans;
}

Таким образом, функция последовательно перебирает элементы массива, поддерживая текущий максимум, при этом если после k последовательных итераций этот максимум не изменился, то текущий максимум возвращается как ответ.

Теперь Пете стало интересно, как часто его функция даёт неверный ответ. Он просит вас посчитать количество перестановок чисел от 1 до n таких, что результат работы его функции на этих перестановках не равен n. Так как ответ может быть большим, выведите его по модулю 109 + 7.

Входные данные

В единственной строке находятся два целых числа n и k (1 ≤ n, k ≤ 106), разделённые пробелом — размер перестановок и параметр k соответственно.

Выходные данные

Выведите количество перестановок, на которых функция Пети выдаёт неправильный ответ, взятое по модулю 109 + 7.

Примечание

Искомые перестановки из второго примера:

[4, 1, 2, 3, 5], [4, 1, 3, 2, 5], [4, 2, 1, 3, 5], [4, 2, 3, 1, 5], [4, 3, 1, 2, 5], [4, 3, 2, 1, 5].

D. Почти тождественные перестановки

дп Комбинаторика математика *1600

Перестановка p размера n — такой массив, что каждое целое число от 1 до n встречается ровно один раз в этом массиве.

Будем называть почти тождественными такие перестановки, что для каждой из них существует как минимум n - k индексов i (1 ≤ i ≤ n), таких, что pi = i.

Вам необходимо подсчитать количество почти тождественных перестановок для заданных n и k.

Входные данные

В первой строке записаны два числа — n и k (4 ≤ n ≤ 1000, 1 ≤ k ≤ 4).

Выходные данные

Выведите число почти тождественных перестановок для заданных n и k.

F. Соедини вершины

графы дп *2500

На плоскости отмечены n точек. Точки расположены таким образом, чтобы они образуют правильный многоугольник (отмеченные точки — его вершины, и они пронумерованы по обходу против часовой стрелки). Вам необходимо провести n - 1 отрезков, каждый должен соединять две отмеченные точки, так, чтобы любая точка была достижима из любой другой по некоторому пути из отрезков.

Однако есть некоторые ограничения. Во-первых, некоторые пары точек не могут быть соединены отрезком напрямую. Во-вторых, проведенные отрезки могут касаться только в какой-либо из отмеченных точек (то есть, если на рисунке отрезки пересекаются, и их пересечение не является одной из отмеченных точек, то рисунок некорректный).

Сколько существует способов соединить все вершины, используя n - 1 отрезок? Два способа считаются различными, когда есть такая пара вершин, между которыми есть отрезок в первом способе, но нет во втором. Так как ответ может быть велик, выведите его по модулю 109 + 7.

Входные данные

В первой строке записано одно целое число n (3 ≤ n ≤ 500) — количество отмеченных точек.

Затем идут n строк, в каждой по n элементов. ai, j (j-й элемент строки i) равен 1, если точки i и j можно соединить отрезком напрямую (иначе ai, j = 0). Гарантируется, что для любой пары точек ai, j = aj, i, и для любой точки ai, i = 0.

Выходные данные

Выведите количество способов соединить точки по модулю 109 + 7.

E. Модуль, модуль и еще раз модуль

Бинарный поиск дп математика *3000

Вам дана последовательность целых чисел a1, a2, ..., an. Пусть , а для всех 1 ≤ i < n. В данных определениях операция означает взятие остатка от деления. Найдите максимальное значение f(x, 1) среди всех неотрицательных целых x.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 200000) — длину последовательности.

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1013) — элементы последовательности.

Выходные данные

Выведите одно целое число — максимальное значение f(x, 1) среди всех неотрицательных целых значений x.

Примечание

В первом примере можно выбрать, например, x = 19.

Во втором примере можно выбрать, например, x = 3 или x = 2.

B. Библиотека виджетов

графы дп Разбор выражений реализация *2300

Вася пишет свою собственную библиотеку для построения графического пользовательского интерфейса. Свое детище Вася назвал VTK (VasyaToolKit). Одним из интересных аспектов данной библиотеки является упаковка виджетов друг в друга.

Виджетом называется некоторый элемент графического интерфейса. Каждый виджет имеет ширину и высоту, и занимает некоторый прямоугольник на экране. В Васиной библиотеке любой виджет имеет тип Widget. Далее для простоты мы будем отождествлять виджет и его тип.

Типы HBox и VBox — производные от типа Widget, поэтому тоже являются типами Widget. Виджеты HBox и VBox — особенные. Они могут хранить в себе другие виджеты. Оба эти виджета с помощью метода pack() могут вложить непосредственно в себя какой либо другой виджет. Виджеты типов HBox и VBox могут хранить в себе несколько других виджетов, в том числе несколько одинаковых — они просто будут отображены несколько раз. В результате выполнения метода pack() сохраняется только ссылка на вложенный виджет, то есть при изменении вложенного виджета, его изображение в виджете, в который он вложен, тоже изменится.

Будем считать, что виджет a вложен в виджет b если существует цепочка виджетов a = c1, c2, ..., ck = b, k ≥ 2, для которых ci вложен непосредственно в ci + 1 для любого 1 ≤ i < k. В Васиной библиотеке не допускается ситуация, что виджет a вложен в виджет a (то есть в себя) — при попытке вложить виджеты друг в друга таким образом сразу же выдается ошибка.

Также виджеты HBox и VBox имеют параметры border и spacing, которые задаются методами set_border() и set_spacing() соответственно. По умолчанию оба этих параметра равны 0.

На картинке выше видно каким образом виджеты упаковываются в HBox и VBox. При этом HBox и VBox автоматически меняют свой размер в зависимости от размеров вложенных виджетов. Сами HBox и VBox отличаются только тем, что в HBox виджеты упаковываются по горизонтали, а в VBox — по вертикали. При этом параметр spacing задает расстояние между соседними виджетами, а border — рамку вокруг всех вложенных виджетов нужной ширины. Вложенные виджеты располагаются ровно в том порядке, в котором для них был вызван метод pack(). Если внутри HBox или VBox нет ни одного вложенного виджета, то их размеры равны 0 × 0 вне зависимости от параметров border и spacing.

Построение всех виджетов идет с помощью скриптового языка VasyaScript. Описание этого языка вы найдете в описании входных данных.

Для контрольной проверки верности своего кода Вася просит написать вас программу, вычисляющую размеры всех виджетов по исходному коду на языке VasyaScript.

Входные данные

В первой строке находится целое число n — количество инструкций (1 ≤ n ≤ 100). В последующих n строках располагаются инструкции на языке VasyaScript по одной инструкции на строку. Ниже приведен список возможных инструкций.

  • «Widget [name]([x],[y])» — создание нового виджета [name] типа Widget шириной [x] единиц и высотой [y] единиц.
  • «HBox [name]» — создать новый виджет [name] типа HBox.
  • «VBox [name]» — создать новый виджет [name] типа VBox.
  • «[name1].pack([name2])» — упаковать виджет [name2] в виджет [name1]. При этом виджет [name1] должен иметь тип HBox или VBox.
  • «[name].set_border([x])» — установить виджету [name] параметр border в [x] единиц. Виджет [name] должен иметь тип HBox или VBox.
  • «[name].set_spacing([x])» — установить виджету [name] параметр spacing в [x] единиц. Виджет [name] должен иметь тип HBox или VBox.

Все инструкции записаны без пробелов в начале и в конце строки, слова внутри инструкции разделены ровно одним пробелом. Непосредственно перед числами и непосредственно после них пробелов нет.

Регистр букв имеет значение, то есть, например «wiDget x» — некорректная инструкция. Во входных данных регистр букв соблюден.

Все названия виджетов состоят из малых латинских букв и имеют длину от 1 до 10 символов включительно. Названия всех виджетов попарно различны. Все числа в скрипте целые от 0 до 100 включительно.

Гарантируется, что приведенный скрипт корректен, то есть все действия с виджетами происходят после их создания и никакой виджет не вложен сам в себя. Гарантируется, что в скрипте создается хотя бы один виджет.

Выходные данные

Для каждого виджета в отдельной строке выведите через пробел его название, ширину и высоту. Строки должны быть упорядочены лексикографически по названию виджета.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

Примечание

В первом примере виджеты располагаются следующим образом:

A. Гордыня

дп жадные алгоритмы математика Перебор теория чисел *1500

Вам дан массив a длиной n, вы можете выполнять определенные операции над ним. Каждая операция выгладит следующим образом: выберите два соседних элемента из a, пусть это будут x и y, и замените один из них величиной gcd(x, y), где gcd обозначает наибольший общий делитель.

Какое минимальное число операций необходимо, чтобы сделать все элементы массива равными 1?

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 2000) — количество элементов в массиве.

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — элементы массива.

Выходные данные

Выведите -1, если невозможно сделать все элементы массива равными 1. Иначе выведите минимальное число операций, необходимых для того, чтобы сделать все числа равными 1.

Примечание

В первом примере можно изменить все числа на 1, используя следующие 5 шагов:

  • [2, 2, 3, 4, 6].
  • [2, 1, 3, 4, 6]
  • [2, 1, 3, 1, 6]
  • [2, 1, 1, 1, 6]
  • [1, 1, 1, 1, 6]
  • [1, 1, 1, 1, 1]

Можно доказать, что нельзя достичь того же меньше, чем за 5 операций.

D. Лень

Деревья дп Паросочетания поиск в глубину и подобное *3100

Лень — это плохо, не так ли? Поэтому мы решили приготовить задачу, чтобы наказать ленивых.

Вам дано дерево, вы должны посчитать количество способов убрать одно ребро, а затем добавить одно ребро так, чтобы получившийся граф был деревом, и в нем существовало совершенное паросочетание. Два способа считаются различными, если удаленные или добавленные ребра не совпадают. Добавленное ребро может совпадать с удаленным.

Совершенным паросочетанием называется подмножество ребер такое, что каждая вершина графа является концом ровно одного ребра.

Входные данные

Первая строка содержит одно целое число n (2 ≤ n ≤ 5·105) — количество вершин в дереве.

Каждая из следующих n - 1 строк содержит два целых числа a и b (1 ≤ a, b ≤ n) — концы ребер. Гарантируется, что заданный граф является деревом.

Выходные данные

Выведите одно целое число — ответ на задачу.

Примечание

В первом примере имеются 8 вариантов:

  • ребро между 2 и 3 заменить на ребро между 1 и 3,
  • ребро между 2 и 3 заменить на ребро между 1 и 4,
  • ребро между 2 и 3 заменить на ребро между 2 и 3,
  • ребро между 2 и 3 заменить на ребро между 2 и 4,
  • ребро между 1 и 2 заменить на ребро между 1 и 2,
  • ребро между 1 и 2 заменить на ребро между 1 и 4,
  • ребро между 3 и 4 заменить на ребро между 1 и 4,
  • ребро между 3 и 4 заменить на ребро между 3 и 4.

    D. Кредитная карта

    дп жадные алгоритмы реализация Структуры данных *1900

    Недавно Люба приобрела себе кредитную карту и начала активно ей пользоваться. Рассмотрим отрезок из n подряд идущих дней.

    Изначально на кредитной карте Любы находится 0 единиц денежных средств.

    В i-й день вечером происходит денежная операция на сумму ai. Если ai > 0, то на счёт Любы зачисляется ai денежных средств. Если ai < 0, то со счёта списывается ai денежных средств. Если же ai = 0, то в этот день проверяется состояние счёта на предмет задолженности.

    Люба может прийти в банк в любой из n дней утром и положить дополнительно на счёт какое-либо положительное количество денег. Но из-за лимита она не может допустить, чтобы в какой-либо момент количество денежных средств на карте превышало d.

    Может случиться, что количество денег на карте Любы превысит d после какой-либо вечерней транзакции. В этом случае ответ равен «-1».

    Люба не хочет превысить этот лимит. Также она не хочет, чтобы в какой-либо из дней проверки (в те дни, когда ai = 0) на её кредитной карте был отрицательный баланс. Также для Любы дорога до банка занимает очень много времени, поэтому ей нужно узнать минимальное количество дней, когда ей необходимо будет прийти в банк и положить дополнительные деньги на карту, либо узнать, что заданным ограничениям удовлетворить невозможно. Помогите ей с этим!

    Входные данные

    В первой строке задано два целых числа n, d (1 ≤ n ≤ 105, 1 ≤ d ≤ 109) — количество дней в рассматриваемом отрезке времени и ограничение на количество денег.

    Во второй строке задано n целых чисел a1, a2, ... an ( - 104 ≤ ai ≤ 104), где ai описывает операцию в i-й день.

    Выходные данные

    В единственной строке выведите «-1» (без кавычек), если Люба не сможет класть деньги на карту так, чтобы удовлетворить всем вышеописанным ограничениям, либо же минимальное количество дней, необходимое для этого.

    E. Подсчет массивов

    дп Комбинаторика математика теория чисел *2000

    Вам заданы два целых положительных числа x и y. Массив F называется y-факторизацией числа x тогда и только тогда, когда выполняется следующие условия:

    • В массиве F ровно y элементов, все они являются целыми числами;
    • .

    Посчитайте количество попарно различных массивов, являющихся y-факторизациями числа x. Два массива A и B считаются различными, если существует хотя бы одна позиция i (1 ≤ i ≤ y) такая, что Ai ≠ Bi. Так как ответ может быть очень большим, выведите его по модулю 109 + 7.

    Входные данные

    В первой строке записано одно целое число q (1 ≤ q ≤ 105) — количество запросов.

    Затем идут q строк, в каждой записаны по два целых числа xi и yi (1 ≤ xi, yi ≤ 106). Каждая из этих строк представляет собой один запрос.

    Выходные данные

    Выведите q целых чисел. i-е число должно быть ровно количеству yi-факторизаций числа xi по модулю 109 + 7.

    Примечание

    Во втором запросе из примере есть 6 y-факторизаций:

    • { - 4,  - 1};
    • { - 2,  - 2};
    • { - 1,  - 4};
    • {1, 4};
    • {2, 2};
    • {4, 1}.

    A. QAQ

    дп Перебор *800

    «QAQ» — смайлик, используемый для выражения плача. Представьте, что «Q» — это глаза со слезами, а «A» — рот.

    Алмаз дал Борту строку, состоящую только из заглавных букв латинского алфавита длины n. В строке содержится большое число «QAQ» (Алмаз так мил!).

    Борт хочет узнать, сколько подпоследовательностей «QAQ» встречаются в строке, которую дал Алмаз. Обратите внимание, буквы «QAQ» не обязательно должны идти непосредственно друг за другом, но порядок букв должен быть соблюден.

    Входные данные

    Единственная строка содержит строку длины n (1 ≤ n ≤ 100). Гарантируется, что эта строка содержит только заглавные буквы латинского алфавита.

    Выходные данные

    Выведите одно целое число — количество подпоследовательностей «QAQ» в строке.

    Примечание

    В первом примере 4 подпоследовательностей «QAQ»: «QAQAQYSYIOIWIN», «QAQAQYSYIOIWIN», «QAQAQYSYIOIWIN», «QAQAQYSYIOIWIN».

    E. Ральф и грибы

    графы дп *2100

    Ральф идет в Грибной лес собирать грибы.

    В Грибном лесу m ориентированных дорожек, соединяющих n деревьев. На каждой дорожке растут грибы. Когда Ральф проходит по дорожке, он собирает все грибы на этой дорожке. Однако, в Грибном лесу такая плодородная почва, что грибы растут с фантастической скоростью. Новые грибы вырастают, как только Ральф заканчивает собирать грибы на дорожке. А именно, после того, как Ральф проходит по дорожке в i-й раз, вырастает на i грибов меньше, чем было до этого прохода. Таким образом, если на дорожке изначально было x грибов, то Ральф соберет x грибов в первый проход, x - 1 гриб во второй, x - 1 - 2 гриба в третий и так далее. Однако, количество грибов не может стать меньше 0.

    Например, пусть изначально на дорожке росло 9 грибов. Тогда количество грибов, которое соберет Ральф, равно 9, 8, 6 и 3 для проходов с первого по четвертый. Начиная с пятого прохода и далее Ральф ничего не сможет собрать с этой дорожки (но все еще может по ней ходить).

    Ральф решил начать от дерева s. Какое максимальное количество грибов он может собрать, передвигаясь только по описанным дорожкам?

    Входные данные

    Первая строка содержит два целых числа n и m (1 ≤ n ≤ 106, 0 ≤ m ≤ 106) — количество деревьев и количество ориентированных дорожек в Грибном лесу, соответственно.

    Каждая из следующих m строк содержит три целых числа x, y и w (1 ≤ x, y ≤ n, 0 ≤ w ≤ 108), описывающих дорожку, которая ведет от дерева x к дереву y с w грибами изначально. Возможны дорожки, которые ведут от дерева к нему же, а также несколько дорожек, соединяющих одну и ту же пару деревьев.

    Последняя строка содержит одно целое число s (1 ≤ s ≤ n) — начальную позицию Ральфа.

    Выходные данные

    Выведите одно целое число — максимальное число грибов, которое может собрать Ральф на своем пути.

    Примечание

    В первом примере Ральф может три раза пройти по кругу и собрать 4 + 4 + 3 + 3 + 1 + 1 = 16 грибов. После этого не будет грибов, которые Ральф может собрать.

    Во втором примере Ральф может пойти к дереву 3 и собрать 8 грибов на дорожке от дерева 1 до дерева 3.

    C. Квадратные подмножества

    битмаски дп Комбинаторика математика *2000

    Как и Вася, Петя опоздал на пару. Преподаватель также дал ему дополнительное задание. Для некоторого массива a необходимо вычислить количество различных способов выбрать некоторое непустое подмножество его элементов так, чтобы их произведение было равно квадрату некоторого натурального числа.

    Два способа считаются различными если различаются множества индексов элементов, выбранных в первом и во втором способах.

    Так как ответ может быть очень большим, необходимо вычислить лишь остаток от деления ответа на 109 + 7.

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 105) — размер массива.

    Вторая строка содержит n целых чисел ai (1 ≤ ai ≤ 70) — элементы массива.

    Выходные данные

    Выведите одно целое число — остаток от деления искомого количества способов на 109 + 7.

    Примечание

    В первом тесте произведение чисел выбираемых любым возможным способом равно 1. Так как 1 = 12, ответ равен 24 - 1 = 15.

    Во втором тесте можно получить произведение равное 16 одним способом и произведение равное 4 шестью способами. Поэтому ответ равен 6 + 1 = 7.

    D. Сколько деревьев?

    дп Комбинаторика разделяй и властвуй *1900

    В одном старом-старом текстовом файле была записана Великая Мудрость. Эта Мудрость была настолько Великой, что расшифровать её не мог никто, даже Фонг, старейший из обитателей Мэйнфрейма. Но кое-что оттуда он сумел узнать. Например то, что Юзер запускает игры ради удовольствия — и тогда на город опускаются ужасные Игровые Кубы, несущие смерть тем модулям, которые не смогут в неё выиграть...

    Конечно, с появлением в Мэйнфрейме стража Боба многие модули перестали бояться Игровых Кубов. Ведь Боб (раз он ещё живой) ни разу не проиграл Юзеру, а он всегда лезет в Игровые Кубы, в силу того, что его так запрограммировали.

    Однако, бывают неприятные ситуации, когда Игровой Куб опускается на Затерянные Углы. Ведь именно там живёт злобный вирус Хексадесимал, которая... Ну... Очень странная. И очень любит поиграть. Вот и получается, что волей-неволей Бобу приходится сперва играть с ней, а потом ещё и с Юзером.

    В этот раз она придумала следующее развлечение: Боб должен прыгать через двоичные деревья поиска с n вершинами. Напомним, что двоичное дерево поиска — это такое двоичное дерево, у которого каждой вершине сопоставлен некоторый ключ, и для каждой вершины выполняется правило: ключ в текущем корне больше всех ключей в левом поддереве, но меньше всех ключей в правом поддереве. Все ключи — различные натуральные числа от 1 до n. У каждой вершины такого дерева может быть от нуля (в случае, когда вершина является листом) до двух потомков.

    В игре Хексадесимал все деревья различны, но высотой не менее h. В данной задаче под высотой подразумеватся максимальное количество вершин, лежащих на пути от корня к самому удалённому листу, включая корень и сам лист. Когда Боб перепрыгивает через дерево, дерево исчезает. Боб получит доступ к Кубу тогда, когда деревьев не останется. Он знает, сколько деревьев ему придётся перепрыгнуть в худшем случае. А Вы?

    Входные данные

    Входные данные содержат два натуральных числа n и h (n ≤ 35, h ≤ n), записанные через пробел.

    Выходные данные

    Одно число — ответ на задачу. Гарантируется, что оно не превышает 9·1018.

    D. Необычные последовательности

    битмаски дп Комбинаторика математика теория чисел *2000

    Найдите количество различных последовательностей из строго положительных целых чисел a1, a2, ..., an (1 ≤ ai) таких, что gcd(a1, a2, ..., an) = x и . Так как ответ может быть большим, выведите остаток от его деления на 109 + 7.

    gcd здесь обозначает наибольший общий делитель.

    Входные данные

    В первой строке следуют два целых положительных числа x и y (1 ≤ x, y ≤ 109).

    Выходные данные

    Выведите количество искомых последовательностей по модулю 109 + 7.

    Примечание

    В первом примере подходят последовательности: (3, 3, 3), (3, 6), (6, 3).

    Во втором примере не подходит ни одна последовательность.

    E. Максимальные вопросы

    дп Строки Структуры данных *2100

    У мальчика Васи в блокноте были записаны две строки s длины n и t длины m, состоящие из букв «a» и «b» латинского алфавита. Причем Вася знает, что строка t имеет вид «abab...», то есть на нечетных позициях строки стоит буква «a», а на четных — «b».

    Вдруг утром Вася обнаружил, что кто-то испортил его строку s. Некоторые буквы s были заменены на символ «?».

    Назовем последовательность позиций i, i + 1, ..., i + m - 1 вхождением строки t в s, если 1 ≤ i ≤ n - m + 1 и t1 = si, t2 = si + 1, ..., tm = si + m - 1.

    Мальчик оценивает красоту строки s, как максимальное количество непересекающихся вхождений строки t в нее. Вася может заменить некоторые из символов «?» на «a» или «b» (символы на разных позициях можно заменять на разные буквы). Вася хочет произвести замены так, чтобы красота строки s была максимально возможной. Из всех таких вариантов он хочет заменить как можно меньше символов «?». Найдите, сколько замен он должен сделать.

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 105) — длину строки s.

    Вторая строка входных данных содержит строку s длины n, состоящую только из букв «a» и «b» латинского алфавита, а также символов «?».

    Третья строка содержит целое число m (1 ≤ m ≤ 105) — длину строки t. Сама строка t содержит «a» на нечетных позициях, и «b» на четных.

    Выходные данные

    Выведите единственное целое число — минимальное количество замен, которое должен сделать Вася, чтобы сделать красоту строки s максимально возможной.

    Примечание

    В первом примере строка t имеет вид «a». Единственный оптимальный вариант — заменить все символы «?» на «a».

    Во втором примере используя две замены можно получить строку «aba?aba??». Больше двух вхождений получить нельзя.

    F. Замена подматриц

    битмаски дп *2200

    Вам дана матрица f, состоящая из 4 строк и n столбцов. Любой элемент матрицы — либо звездочка (*), либо точка (.).

    Над матрицей можно произвольное число раз производить следующую операцию: выбрать квадратную подматрицу f размера k × k (где 1 ≤ k ≤ 4) и заменить каждый элемент в выбранной подматрице на точку. Выбор подматрицы размера k × k стоит ak монет.

    Какое минимальное количество монет необходимо потратить, чтобы заменить все звездочки на точки?

    Входные данные

    В первой строке записано одно целое число n (4 ≤ n ≤ 1000) — количество столбцов в f.

    Во второй строке записаны 4 целых числа a1, a2, a3, a4 (1 ≤ ai ≤ 1000) — цена замены квадратных подматриц размеров 1 × 1, 2 × 2, 3 × 3 и 4 × 4, соответственно.

    Затем идет четыре строки, в каждой по n символов, обозначающие строки матрицы f. Любой символ — либо точка, либо звездочка.

    Выходные данные

    Выведите одно целое число — минимальное количество монет, требующихся для замены всех звездочек на точки.

    Примечание

    В первом примере можно потратить 8 монет для замены подматрицы 3 × 3 в верхнем левом углу и 1 монету для замены подматрицы 1 × 1 в нижнем правом углу.

    Во втором примере лучшим вариантом будет заменить подматрицу 4 × 4 из столбцов 2 – 5 и подматрицу 2 × 2 из строк 2 – 3 и столбцов 6 – 7.

    В третьем примере можно выбрать подматрицу 3 × 3 в верхнем левом углу и подматрицу 3 × 3 из строк 2 – 4 и столбцов 2 – 4.

    E. Перевороты

    дп Строки строковые суфф. структуры *3300

    В Берляндии ураган и это стихийное бедствие не обошло стороной предместье Строксвиль. Вы мчитесь в него, чтобы проверить, всё ли в порядке с вашей любимой строкой. Ураган немного потрепал её, перевернув несколько её непересекающихся подстрок. У вас сохранилась фотография строки до урагана и вы хотите привести её в исходное состояние, перевернув обратно наименьшее возможное число её подстрок, но для этого сперва нужно определиться, какие подстроки нужно перевернуть.

    У вас есть строка s  — исходное состояние вашей строки и строка t  — то, какой она стала после того, как ураган перевернул некоторые её подстроки. Ваша задача выбрать k непересекающихся подстрок строки t таких что если их развернуть, вы получите строку s и число k при этом наименьшее возможное.

    Входные данные

    В первой строке входа вам дана строка s, во второй  — строка t. Обе строки имеют одинаковую длину и состоят из строчных английских букв. 1 ≤ |s| = |t| ≤ 5·105

    Выходные данные

    В первой строке выведите число k  — наименьшее возможное число подстрок, которые надо перевернуть. В следующих k строках выведите по два числа li, ri в каждой, обозначающие, что нужно перевернуть строку с li по ri символы (строки 1-индексированные). Указанные подстроки не должны пересекаться. Если вариантов ответа несколько, выведите любой. Если решения не существует, выведите -1.

    E. Перевороты

    дп Строки строковые суфф. структуры *3300

    В Берляндии ураган и это стихийное бедствие не обошло стороной предместье Строксвиль. Вы мчитесь в него, чтобы проверить, всё ли в порядке с вашей любимой строкой. Ураган немного потрепал её, перевернув несколько её непересекающихся подстрок. У вас сохранилась фотография строки до урагана и вы хотите привести её в исходное состояние, перевернув обратно наименьшее возможное число её подстрок, но для этого сперва нужно определиться, какие подстроки нужно перевернуть.

    У вас есть строка s  — исходное состояние вашей строки и строка t  — то, какой она стала после того, как ураган перевернул некоторые её подстроки. Ваша задача выбрать k непересекающихся подстрок строки t таких что если их развернуть, вы получите строку s и число k при этом наименьшее возможное.

    Входные данные

    В первой строке входа вам дана строка s, во второй  — строка t. Обе строки имеют одинаковую длину и состоят из строчных английских букв. 1 ≤ |s| = |t| ≤ 5·105

    Выходные данные

    В первой строке выведите число k  — наименьшее возможное число подстрок, которые надо перевернуть. В следующих k строках выведите по два числа li, ri в каждой, обозначающие, что нужно перевернуть строку с li по ri символы (строки 1-индексированные). Указанные подстроки не должны пересекаться. Если вариантов ответа несколько, выведите любой. Если решения не существует, выведите -1.

    E. Перевороты

    дп Строки строковые суфф. структуры *3300

    В Берляндии ураган и это стихийное бедствие не обошло стороной предместье Строксвиль. Вы мчитесь в него, чтобы проверить, всё ли в порядке с вашей любимой строкой. Ураган немного потрепал её, перевернув несколько её непересекающихся подстрок. У вас сохранилась фотография строки до урагана и вы хотите привести её в исходное состояние, перевернув обратно наименьшее возможное число её подстрок, но для этого сперва нужно определиться, какие подстроки нужно перевернуть.

    У вас есть строка s  — исходное состояние вашей строки и строка t  — то, какой она стала после того, как ураган перевернул некоторые её подстроки. Ваша задача выбрать k непересекающихся подстрок строки t таких что если их развернуть, вы получите строку s и число k при этом наименьшее возможное.

    Входные данные

    В первой строке входа вам дана строка s, во второй  — строка t. Обе строки имеют одинаковую длину и состоят из строчных английских букв. 1 ≤ |s| = |t| ≤ 5·105

    Выходные данные

    В первой строке выведите число k  — наименьшее возможное число подстрок, которые надо перевернуть. В следующих k строках выведите по два числа li, ri в каждой, обозначающие, что нужно перевернуть строку с li по ri символы (строки 1-индексированные). Указанные подстроки не должны пересекаться. Если вариантов ответа несколько, выведите любой. Если решения не существует, выведите -1.

    E. Перевороты

    дп Строки строковые суфф. структуры *3300

    В Берляндии ураган и это стихийное бедствие не обошло стороной предместье Строксвиль. Вы мчитесь в него, чтобы проверить, всё ли в порядке с вашей любимой строкой. Ураган немного потрепал её, перевернув несколько её непересекающихся подстрок. У вас сохранилась фотография строки до урагана и вы хотите привести её в исходное состояние, перевернув обратно наименьшее возможное число её подстрок, но для этого сперва нужно определиться, какие подстроки нужно перевернуть.

    У вас есть строка s  — исходное состояние вашей строки и строка t  — то, какой она стала после того, как ураган перевернул некоторые её подстроки. Ваша задача выбрать k непересекающихся подстрок строки t таких что если их развернуть, вы получите строку s и число k при этом наименьшее возможное.

    Входные данные

    В первой строке входа вам дана строка s, во второй  — строка t. Обе строки имеют одинаковую длину и состоят из строчных английских букв. 1 ≤ |s| = |t| ≤ 5·105

    Выходные данные

    В первой строке выведите число k  — наименьшее возможное число подстрок, которые надо перевернуть. В следующих k строках выведите по два числа li, ri в каждой, обозначающие, что нужно перевернуть строку с li по ri символы (строки 1-индексированные). Указанные подстроки не должны пересекаться. Если вариантов ответа несколько, выведите любой. Если решения не существует, выведите -1.

    E. Перевороты

    дп Строки строковые суфф. структуры *3300

    В Берляндии ураган и это стихийное бедствие не обошло стороной предместье Строксвиль. Вы мчитесь в него, чтобы проверить, всё ли в порядке с вашей любимой строкой. Ураган немного потрепал её, перевернув несколько её непересекающихся подстрок. У вас сохранилась фотография строки до урагана и вы хотите привести её в исходное состояние, перевернув обратно наименьшее возможное число её подстрок, но для этого сперва нужно определиться, какие подстроки нужно перевернуть.

    У вас есть строка s  — исходное состояние вашей строки и строка t  — то, какой она стала после того, как ураган перевернул некоторые её подстроки. Ваша задача выбрать k непересекающихся подстрок строки t таких что если их развернуть, вы получите строку s и число k при этом наименьшее возможное.

    Входные данные

    В первой строке входа вам дана строка s, во второй  — строка t. Обе строки имеют одинаковую длину и состоят из строчных английских букв. 1 ≤ |s| = |t| ≤ 5·105

    Выходные данные

    В первой строке выведите число k  — наименьшее возможное число подстрок, которые надо перевернуть. В следующих k строках выведите по два числа li, ri в каждой, обозначающие, что нужно перевернуть строку с li по ri символы (строки 1-индексированные). Указанные подстроки не должны пересекаться. Если вариантов ответа несколько, выведите любой. Если решения не существует, выведите -1.

    E. Перевороты

    дп Строки строковые суфф. структуры *3300

    В Берляндии ураган и это стихийное бедствие не обошло стороной предместье Строксвиль. Вы мчитесь в него, чтобы проверить, всё ли в порядке с вашей любимой строкой. Ураган немного потрепал её, перевернув несколько её непересекающихся подстрок. У вас сохранилась фотография строки до урагана и вы хотите привести её в исходное состояние, перевернув обратно наименьшее возможное число её подстрок, но для этого сперва нужно определиться, какие подстроки нужно перевернуть.

    У вас есть строка s  — исходное состояние вашей строки и строка t  — то, какой она стала после того, как ураган перевернул некоторые её подстроки. Ваша задача выбрать k непересекающихся подстрок строки t таких что если их развернуть, вы получите строку s и число k при этом наименьшее возможное.

    Входные данные

    В первой строке входа вам дана строка s, во второй  — строка t. Обе строки имеют одинаковую длину и состоят из строчных английских букв. 1 ≤ |s| = |t| ≤ 5·105

    Выходные данные

    В первой строке выведите число k  — наименьшее возможное число подстрок, которые надо перевернуть. В следующих k строках выведите по два числа li, ri в каждой, обозначающие, что нужно перевернуть строку с li по ri символы (строки 1-индексированные). Указанные подстроки не должны пересекаться. Если вариантов ответа несколько, выведите любой. Если решения не существует, выведите -1.

    E. Перевороты

    дп Строки строковые суфф. структуры *3300

    В Берляндии ураган и это стихийное бедствие не обошло стороной предместье Строксвиль. Вы мчитесь в него, чтобы проверить, всё ли в порядке с вашей любимой строкой. Ураган немного потрепал её, перевернув несколько её непересекающихся подстрок. У вас сохранилась фотография строки до урагана и вы хотите привести её в исходное состояние, перевернув обратно наименьшее возможное число её подстрок, но для этого сперва нужно определиться, какие подстроки нужно перевернуть.

    У вас есть строка s  — исходное состояние вашей строки и строка t  — то, какой она стала после того, как ураган перевернул некоторые её подстроки. Ваша задача выбрать k непересекающихся подстрок строки t таких что если их развернуть, вы получите строку s и число k при этом наименьшее возможное.

    Входные данные

    В первой строке входа вам дана строка s, во второй  — строка t. Обе строки имеют одинаковую длину и состоят из строчных английских букв. 1 ≤ |s| = |t| ≤ 5·105

    Выходные данные

    В первой строке выведите число k  — наименьшее возможное число подстрок, которые надо перевернуть. В следующих k строках выведите по два числа li, ri в каждой, обозначающие, что нужно перевернуть строку с li по ri символы (строки 1-индексированные). Указанные подстроки не должны пересекаться. Если вариантов ответа несколько, выведите любой. Если решения не существует, выведите -1.

    D. Новый год и произвольный порядок

    дп математика Теория вероятностей *2200

    Вам даны три целых числа k, pa и pb.

    Вы будете строить последовательность в соответствии со следующим алгоритмом. Изначально у вас есть пустая последовательность. Раз в секунду вы делаете следующее. С вероятностью pa / (pa + pb) вы добавляете «a» в конец последовательности. Иначе (с вероятностью pb / (pa + pb)) вы добавляете «b» в конец последовательности.

    Вы останавливаетесь, как только в вашей последовательности есть хотя бы k подпоследовательностей «ab». Определите математическое ожидание числа подпоследовательностей «ab» в итоговой строке. Можно показать, что это число может быть выражено как P / Q, где P и Q — взаимно простые целые числа, а . Выведите значение .

    Входные данные

    Первая строка содержит три целых числа k, pa, pb (1 ≤ k ≤ 1 000, 1 ≤ pa, pb ≤ 1 000 000).

    Выходные данные

    Выведите одно целое число — ответ на задачу.

    Примечание

    В первом примере мы будем добавлять к последовательности букву, пока не получим хотя бы одну подпоследовательность «ab». Среди прочего, мы можем получить последовательность «ab» с вероятностью 1/4, «bbab» с вероятностью 1/16, и «aab» с вероятностью 1/8. Обратите внимание, невозможно получить строку «aabab», так как мы бы остановились, как только получили префикс «aab».

    Математическое ожидание числа подпоследовательностей «ab» равно 2.

    Во втором примере ответ равен .

    E. Новый год и перечисление подходящих

    битмаски дп Комбинаторика математика *2500

    Вам дано целое число m.

    Пусть M = 2m - 1.

    Вам дано множество из n целых чисел, обозначим его за T. Эти целые числа будут даны в двоичной системе счисления как n бинарных строк длины m.

    Множество целых чисел S называется «хорошим», если следующие условия выполняются.

    1. Если , то .
    2. Если , то
    3. Все элементы S меньше либо равны M.

    Здесь и обозначают побитовые операции исключающее ИЛИ и И, соответственно.

    Вычислите количество хороших множеств S по модулю 109 + 7.

    Входные данные

    Первая строка содержит два целых числа m и n (1 ≤ m ≤ 1 000, 1 ≤ n ≤ min(2m, 50)).

    Следующие n строк содержат элементы T. Каждая строка содержит ровно одну строку длины m из нулей и единиц. Все элементы T различны.

    Выходные данные

    Выведите одно число: количество хороших множеств по модулю 109 + 7.

    Примечание

    Пример хорошего множества S: {00000, 00101, 00010, 00111, 11000, 11010, 11101, 11111}.

    G. Новый год и правильный порядок

    дп математика *2800

    Обозначим за S(n) число, которое получается, если переставить цифры числа n в порядке возрастания. Например, S(1) = 1, S(5) = 5, S(50394) = 3459, S(353535) = 333555.

    Вам дано число X, вычислите по модулю 109 + 7.

    Входные данные

    Первая строка содержит одно целое число X (1 ≤ X ≤ 10700).

    Выходные данные

    Выведите одно целое число: ответ на задачу.

    Примечание

    Первые несколько значений S равны 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 12. Сумма этих величин равна 195.

    C. Отступы в Python

    дп *1800

    В языке программирования Python блоки кода не выделяются ключевыми словами begin/end или фигурными скобками. Вместо этого используются отступы.

    Мы рассмотрим очень упрощенный вариант Python, с двумя типами инструкций.

    Простые инструкции записываются в одной строке, по одной инструкции на строку. Примером такой инструкции является присваивание.

    Циклы являются составными инструкциями: они содержат одну или несколько других инструкций. Цикл состоит из заголовка, записанного в отдельной строке и начинающегося с префикса "for", и тела цикла. Тело цикла — блок инструкций, записанных с отступом на один уровень дальше, чем заголовок цикла. Тело цикла может содержать оба типа инструкций, и не может быть пустым.

    Вам дана последовательность инструкций, записанных без отступов. Найдите количество способов, которыми можно расставить отступы так, чтобы получить валидную программу.

    Входные данные

    Первая строка входных данных содержит одно число N (1 ≤ N ≤ 5000) — количество инструкций в программе. Следующие N строк описывают программу, по одной инструкции на строку. Каждая строка состоит из одного символа: "f" (цикл) или "s" (простая инструкция). Гарантируется, что последняя строка программы — "s".

    Выходные данные

    Выведите одно число — количество способов, которыми можно расставить отступы в заданной последовательности инструкций, чтобы получить валидную программу, по модулю 109 + 7.

    Примечание

    В первом примере есть ровно один способ расставить отступы: второй цикл должен быть частью тела первого цикла.


    simple statement
    for statement
    for statement
    simple statement

    Во втором примере расставить отступы можно двумя способами: второй цикл может быть либо частью тела первого, либо следующей за ним инструкцией.


    for statement
    simple statement
    for statement
    simple statement

    или


    for statement
    simple statement
    for statement
    simple statement

    E. Сопроцессор

    графы дп жадные алгоритмы поиск в глубину и подобное *1900

    Вам дана программа, состоящая из набора задач. Задачи организованы в ориентированный ациклический граф зависимостей: каждая задача может зависеть от результатов выполнения одной или нескольких других задач, и в графе нет ориентированных циклических зависимостей между задачами. Задача может быть выполнена только после завершения всех задач, от которых она зависит.

    Некоторые задачи в графе должны выполняться на сопроцессоре, остальные — только на главном процессоре. За один вызов сопроцессора вы можете передать ему список задач, которые должны выполниться на нем. Для каждой задачи из списка все задачи, от которых она зависит, должны быть либо уже выполнены на момент вызова сопроцессора, либо находиться в этом же списке. Главный процессор начинает выполнение программы и автоматически получает результаты выполнения задач от сопроцессора.

    Найдите минимальное количество вызовов сопроцессора, необходимых для выполнения программы.

    Входные данные

    Первая строка входных данных содержит два целых числа, разделенных пробелом: N (1 ≤ N ≤ 105) — общее количество задач и M (0 ≤ M ≤ 105) — общее количество зависимостей между задачами.

    Вторая строка содержит N целых чисел , разделенных пробелами. Если Ei = 0, задача i должна выполняться на главном процессоре, иначе — на сопроцессоре.

    Следующие M строк описывают зависимости между задачами. Каждая строка содержит два целых числа, разделенных пробелами, T1 и T2 и означает, что задача T1 зависит от задачи T2 (T1 ≠ T2). Задачи пронумерованы от 0 до N - 1. Все M пар (T1, T2) различны. Гарантируется, что циклических зависимостей между задачами нет.

    Выходные данные

    Выведите одно число — минимальное количество вызовов сопроцессора, необходимых для выполнения программы.

    Примечание

    В первом примере задачи 1 и 3 должны выполняться на сопроцессоре. Граф зависимостей линейный, и задачи должны выполняться в порядке 3 -> 2 -> 1 -> 0. Необходимо два вызова сопроцессора: за первый вызов выполняется задача 3, затем выполняется задача 2 на главном процессоре, за второй вызов выполняется задача 1 и наконец выполняется задача 0 на главном процессоре.

    Во втором примере задачи 0, 1 и 2 должны выполняться на сопроцессоре. У задач 1 и 2 нет зависимостей, а задача 0 зависит только от задач 1 и 2, поэтому все три задачи 0, 1 и 2 можно выполнить за один вызов сопроцессора. После этого задача 3 выполняется на главном процессоре.

    A. Путь домой

    дп жадные алгоритмы поиск в глубину и подобное реализация *800

    Лягушка живет на координатной прямой Ox и должна добраться домой в точку n из точки 1. Она может прыгать вправо на расстояние не более чем d. Таким образом, после прыжка из x она перемещается в точку x + a, где a — целое число от 1 до d.

    Для каждой точки от 1 до n известно, есть ли в ней лилия. Лягушка может прыгать только по лилиям. Гарантируется, что в точках 1 и n лилии обязательно есть.

    Определите минимальное количество прыжков, которые нужны сделать лягушке, чтобы попасть из точки 1 домой в точку n. Считайте, что изначально лягушка находится в точке 1. Если лягушка не может добраться домой, то выведите -1.

    Входные данные

    В первой строке записаны два целых числа n и d (2 ≤ n ≤ 100, 1 ≤ d ≤ n - 1) — точка, в которую лягушка хочет попасть, и максимальная длина прыжка лягушки.

    Во второй строке записана строка s длины n, состоящая из нулей и единиц. Если очередной символ строки s равен нулю, то в соответствующей точке нет лилии, в противном случае, в соответствующей точке лилия есть. Гарантируется, что первый и последний символы строки s равны единице.

    Выходные данные

    Если лягушка не сможет попасть домой, выведите -1.

    В противном случае, выведите минимальное количество прыжков, которые нужно сделать лягушке, чтобы попасть из точки 1 в точку n.

    Примечание

    В первом примере лягушка может добраться до дома за два прыжка: первый прыжок из точки 1 в точку 4 (длина прыжка равна трём), а второй прыжок из точки 4 в точку 8 (длина прыжка равна четырём).

    Во втором примере лягушка не сможет добраться до дома, так как ей нужно для этого прыгнуть на расстояние три, а максимальная длина её прыжка равна двум.

    C. Лимонад для вечеринки

    битмаски дп жадные алгоритмы *1600

    Какая же новогодняя вечеринка обходится без лимонада! Вы, как обычно, ожидаете много гостей, и покупка лимонада уже стала приятной необходимостью.

    Ваш любимый магазин продает лимонад в бутылках n различных объемов по разным ценам. Бутылка типа i имеет объем 2i - 1 литров и стоит ci рублей. Количество бутылок каждого типа в магазине можно считать бесконечным.

    Вы хотите купить не менее L литров лимонада. Во сколько рублей вам это обойдется?

    Входные данные

    Первая строка содержит два целых числа n и L (1 ≤ n ≤ 30; 1 ≤ L ≤ 109) — количество типов бутылок в магазине и необходимое количество литров лимонада, соответственно.

    Вторая строка содержит n целых чисел c1, c2, ..., cn (1 ≤ ci ≤ 109) — стоимости бутылок различных объемов.

    Выходные данные

    Выведите единственное число — минимальное количество рублей, которое придется потратить, чтобы купить не менее L литров лимонада.

    Примечание

    В первом примере вам следует купить бутылку объемом 8 литров за 90 рублей и две бутылки объемом 2 литра за 30 рублей каждую. В сумме вы получите 12 литров лимонада всего за 150 рублей.

    Во втором примере, хоть вам и нужно всего 3 литра, дешевле всего купить одну восьмилитровую бутылку по акции за 10 рублей.

    В третьем примере выгоднее всего купить три литровые бутылки по 10 рублей каждая, получив требуемые три литра за 30 рублей.

    E. Логическое выражение

    битмаски дп кратчайшие пути *2400

    Вам дана булева функция от трех переменных, заданная своей таблицей истинности. Требуется построить минимальное по длине выражение, равное этой функции. Выражение может содержать:

    • Операцию И ('&', ASCII код 38)
    • Операцию ИЛИ ('|', ASCII код 124)
    • Операцию НЕ ('!', ASCII код 33)
    • Переменные x, y и z (ASCII коды 120-122)
    • Круглые скобки ('(', ASCII код 40, и ')', ASCII код 41)

    Если выражений несколько, требуется найти лексикографически минимальное.

    Операции имеют стандартный приоритет: самый большой приоритет у НЕ, затем идет И, а самый маленький приоритет у ИЛИ. Формально, выражение должно удовлетворять следующей грамматике:

    E ::= E '|' T | T

    T ::= T '&' F | F

    F ::= '!' F | '(' E ')' | 'x' | 'y' | 'z'

    Входные данные

    В первой строке дано одно целое число n — количество функций, для которых нужно найти ответ (1 ≤ n ≤ 10 000).

    В следующих n строках дано описание функций, в i-й строке дана строка длины 8, состоящая из символов 0 и 1 — таблица истинности i-й функции. Символ на позиции j (0 ≤ j < 8) означает, что должна возвращать функция, если ей на вход подать , и .

    Выходные данные

    Выведите n строк, в i-й должно содержаться выражение минимальной длины, равное i-й функции. Если выражений минимальной длины несколько, нужно вывести лексикографически минимальное. Выражения должны удовлетворять грамматике из условия и не должны содержать пробельных символов.

    Примечание

    Таблица истинности для второй функции:

    F. Сильносвязный турнир

    графы дп математика Теория вероятностей *2800

    В городе Нормгород проходит шахматный турнир. n игроков были приглашены для участия в нём. Турнир проходит по следующим правилам:

    1. Каждый игрок играет с каждым другим одну партию, ничьих не бывает;
    2. После этого организаторы строят полный ориентированный граф, вершинами которого являются игроки. Для каждой пары игроков в графе есть одно ребро, начало которое идет от победителя игры между ними к проигравшему;
    3. После этого граф конденсируется. Так как исходный граф полный, то его конденсация — ацикличный полный ориентированный граф, в котором есть единственный гамильтонов путь из компонент сильной связности исходного графа A1 → A2 → ... → Ak;
    4. Игроки из первой компоненты сильной связности A1 занимают первые мест, игроки из компоненты A2 занимают следующие мест, и так далее;
    5. Для того, чтобы определить, кто какое место занял внутри каждой компоненты сильной связности, все шаги с 1 по 5 повторяются рекурсивно для каждой компоненты, то есть, для всех i = 1, 2, ..., k все игроки из компоненты Ai снова играют друг с другом партию, и так далее.
    6. Если компонента сильной связности состоит из одного человека, то ему больше не с кем играть, его место уже однозначно определено, и процесс останавливается.

    Игроки пронумерованы числами от 1 до n. Нумерация была выполнена по результатам прошлого турнира. Известно, что игрок с номером i побеждает игрока с номером j с вероятностью p при i < j.

    Вам поручено помочь с организацией турнира. Найдите математическое ожидание суммарного количества партий, сыгранных всеми игроками.

    Можно показать, что ответ может быть выражен как , где P и Q — взаимно простые целые числа, а . Выведите значение P·Q - 1 по модулю 998244353.

    Если вы не знакомы с понятиями теории графов, используемыми выше, вы можете ознакомиться с ними по ссылке.

    Входные данные

    В первой строке содержится целое число n (2 ≤ n ≤ 2000) — количество игроков.

    Во второй строке даны два целых числа a и b (1 ≤ a < b ≤ 100) — числитель и знаменатель дроби .

    Выходные данные

    В единственной строке выведите математическое ожидание суммарного количества партий в игре в формате, приведенном выше.

    Примечание

    В первом примере математическое ожидание равно 4.

    Во втором примере математическое ожидание равно .

    В третьем примере математическое ожидание равно .

    C. Комивояжёр и специальные числа

    дп Комбинаторика Перебор *1800

    Комивояжёр проводит много времени в пути, поэтому часто скучает. Чтобы скоротать время, он любит производить операции с числами. Одна из таких операций заключается в том, что он берёт натуральное число x и уменьшает его до количества бит, которые установлены в 1 в двоичной записи числа x. Например, для числа 13 верно, что 1310 = 11012, значит, в нём есть 3 единичных бита, поэтому за одну операцию 13 уменьшится до 3.

    Он называет число специальным если минимальное количество операций, требуемых для уменьшения этого числа до 1 равно k.

    Комивояжёру интересно, сколько существует специальных чисел, не превосходящих n. Помогите ему.

    Так как ответ может быть большим, выведите его по модулю 109 + 7.

    Входные данные

    В первой строке содержится целое число n (1 ≤ n < 21000).

    Во второй строке содержится целое число k (0 ≤ k ≤ 1000).

    Учтите, что n задано в двоичной системе счисления без ведущих нулей.

    Выходные данные

    Выведите одно целое число — количество специальных чисел, не превосходящих n, по модулю 109 + 7.

    Примечание

    В первом тестовом примере тремя специальными числами являются 3, 5 и 6. За одну операцию они уменьшаются до 2 (потому что в каждом из чисел 3, 5 и 6 два единичных бита), а затем до 1 (потому что в числе 2 один единичный бит) после применения ещё одной операции.

    G. Сумма Фибоначчи

    битмаски бпф дп математика разделяй и властвуй *2600

    Дан массив s, состоящий из n неотрицательных целых чисел.

    Набор из 5 чисел (a, b, c, d, e) назовём корректным если:

    • 1 ≤ a, b, c, d, e ≤ n
    • (sa | sb) & sc & (sd ^ se) = 2i для некоторого целого i.
    • sa & sb = 0

    Здесь '|' обозначает побитовое ИЛИ, '&' обозначает побитовое И, '^' обозначает побитовое исключающее ИЛИ.

    Найдите сумму f(sa|sb) * f(sc) * f(sd^se) по всем корректным наборам (a, b, c, d, e), где f(i) обозначает i-е число Фибоначчи (f(0) = 0, f(1) = 1, f(i) = f(i - 1) + f(i - 2)).

    Так как ответ может быть очень большим выведите его остаток от деления на 109 + 7.

    Входные данные

    В первой строке содержится целое число n (1 ≤ n ≤ 106).

    Во второй строке содержатся n целых чисел si (0 ≤ si < 217).

    Выходные данные

    Выведите требуемую сумму по модулю 109 + 7.

    H. Деревянная игра Эмбера и Шторма

    Деревья дп игры Комбинаторика *3400

    Эмбер и Шторм играют в игру. Вначале, Эмбер выбирает помеченное дерево T на n вершинах, такое что степень каждой вершины не превосходит d. Затем Шторм выбирает две различные вершины u и v в этом дереве и выписывает номера вершин на пути из u в v как последовательность a1, a2... ak. Наконец Эмбер выбирает произвольный индекс i (1 ≤ i < k) и выполняет одну из следующих операций ровно один раз:

    • перевернуть подотрезок [i + 1, k] и прибавить ai ко всем числам на нём. После этого последовательность приобретает вид a1, ... ai, ak + ai, ak - 1 + ai, ... ai + 1 + ai
    • Заменить все числа на подотрезке [i + 1, k] на противоположные и прибавить ai к ним. После этого последователньость приобретает вид a1, ... ai,  - ai + 1 + ai,  - ai + 2 + ai, ... - ak + ai

    Эмбер выигрывает, если после произведённой операции массив монотонно возрастает или убывает, иначе выигрывает Шторм.

    Игра может быть представлена набором (T, u, v, i, op), где op — это «перевернуть» или «выполнить отрицаение» в зависимости от действия, которое Эмбер выполнил на последнем шаге. Найдите количество наборов, которые могут образоваться в результате оптимальной игры Эмбера и Шторма. Если они играют оптимально и у игрока есть несколько ходов, которые гарантируют победу, игрок может воспользоваться любым из них. Также если у игрока нет ни одного хода, гарантирующего победу, он может воспользоваться любым ходом.

    Выведите ответ по модулю m.

    Входные данные

    В первой строке задано три целых числа n, d и m (2 ≤ n ≤ 200, 1 ≤ d < n, 1 ≤ m ≤ 2·109).

    Выходные данные

    Выведите единственное число — количество возможных наборов по модулю m.

    Примечание

    В первом тестовом примере существует только одно возможное дерево. Можно выбрать два пути: из 1 в 2 и из 2 в 1. Для обоих путей i может быть равно только 1, а op может принимать оба возможных значения. Поэтому ответ равен 4.

    Во втором тестовом примере подходящих деревьев нет.

    В третьем тестовом примере есть три возможных дерева.

    C. Переставь цифры

    дп жадные алгоритмы *1700

    Даны два натуральных числа a и b. Вам необходимо переставить цифры числа a таким образом, чтобы получилось наибольшее возможное число, не превосходящее b. Никакое из входных или выходных чисел не может начинаться с нуля.

    Допустимо оставить число a без изменений.

    Входные данные

    В первой строке входных данных записано натуральное число a (1 ≤ a ≤ 1018). Во второй строке записано натуральное число b (1 ≤ b ≤ 1018). Числа не содержат лидирующих нулей. Гарантируется, что ответ существует.

    Выходные данные

    Выведите наибольшее число, не превосходящее b, полученное перестановкой цифр числа a. Ответ не может начинаться с нуля. Гарантируется, что такое число существует.

    Число в выводе должно иметь в точности ту же длину, что и число a. Оно должно являться перестановкой цифр числа a.

    A. Монстр

    дп жадные алгоритмы математика реализация *1800

    Уилл застрял в Обратной стороне, но он все еще может общаться со своей мамой, Джойс, используя гирлянду (он может включать и выключать ее силой мысли). Он не может напрямую сказать маме, где он, потому что монстр, который унес его на Обратную сторону, узнает и спрячет его в другое место.

    Поэтому он придумал задачу, чтобы сообщить маме свои координаты. Его координаты будут ответом на эту задачу.

    Строка, состоящая только из скобок ('(' и ')'), называется скобочной последовательностью. Некоторые скобочные последовательности называются правильными скобочными последовательностями. Более формально:

    • Пустая строка является правильной скобочной последовательностью.
    • Если s является правильной скобочной последовательностью, то (s) тоже является правильной скобочной последовательностью.
    • Если s и t являются правильной скобочной последовательностью, то st (конкатенация s и t) тоже является правильной скобочной последовательностью.

    Строка, состоящая из скобок и знаков вопроса ('?') называется красивой, если и только если есть способ заменить каждый из знаков вопроса на '(' или ')' так, чтобы получившаяся строка была непустой правильной скобочной последовательностью.

    Уилл сообщил маме строку s, состоящую из скобок и знаков вопроса (используя код Морзе и гирлянду), его координаты равны числу пар чисел (l, r) таких, что 1 ≤ l ≤ r ≤ |s|, а строка slsl + 1... sr является красивой, где si — i-й символ строки s.

    Джойс ничего не знает о скобочных последовательностях, поэтому она просит у вас помощи.

    Входные данные

    Первая и единственная строка содержит строку s, состоящую из символов '(', ')' и '?' (2 ≤ |s| ≤ 5000).

    Выходные данные

    Выведите ответ на задачу в единственной строке.

    Примечание

    В первом примере следующие подстроки s являются красивыми:

    1. «(?», которая может быть преобразована в «()».
    2. «?)», которая может быть преобразована в «()».
    3. «((?)», которая может быть преобразована в «(())».
    4. «(?))», которая может быть преобразована в «(())».

    Во втором примере следующие подстроки s являются красивыми:

    1. «??», которая может быть преобразована в «()».
    2. «()».
    3. «??()», которая может быть преобразована в «()()».
    4. «?()?», которая может быть преобразована в «(())».
    5. «??», которая может быть преобразована в «()».
    6. «()??», которая может быть преобразована в «()()».
    7. «??()??», которая может быть преобразована в «()()()».

    B. Безумная Макс

    графы дп игры поиск в глубину и подобное *1700

    Как мы все знаем, Макс лучше всех играет в компьютерные игры. Ее друзья настолько ей завидуют, что придумали игру в реальном мире, чтобы показать, что она не во всех играх лучшая. Игра проходит на ориентированном ациклическом графе с n вершинами и m ребрами. На каждом ребре написан символ — строчная латинская буква.

    Играют Макс и Лукас. Первой ходит Макс, потом ходит Лукас, затем снова Макс и так далее. У каждого игрока есть камешек, изначально расположенный в некоторой вершине. Каждый игрок в свой ход должен передвинуть свой камешек вдоль одного ребра (игрок может передвинуть камешек из вершины v в вершину u, если есть ребро из вершины v в u). Если игрок передвигает камешек из вершины v в вершину u, то «символом» этого раунда называется символ, написанный на ребре из v в u. Есть одно дополнительное правило: ASCII код символа раунда i должен быть не меньше, чем ASCII код символа раунда i - 1 (для i > 1). Раунды нумеруются для всех игроков вместе, иными словами, Макс ходит в нечетных раундах, в Лукас — в четных. Игрок, который не может сделать ход, проигрывает. Камешки могут находиться в одной вершине в одно и то же время.

    Поскольку игра занимает некоторое время, а Лукас и Макс должны найти Дарта, у них нет времени для игр. Они спрашивают у вас, кто выиграет, если оба будут играть оптимально?

    Вам необходимо определить победителя в игре для всех возможных начальных позиций камешков.

    Входные данные

    Первая строка содержит два целых числа n и m (2 ≤ n ≤ 100, ).

    Следующие m строк содержат ребра. Каждая строка содержит два целых числа v, u и строчную латинскую букву c (1 ≤ v, u ≤ n, v ≠ u), которые означают, что есть ребро из вершины v в u, и на нем написана буква c. Между каждой парой вершин есть не более одного ребра. Гарантируется, что в графе нет циклов.

    Выходные данные

    Выведите n строк, в каждой по n символов. j-й символ в i-й строке должен быть «A», если Макс побеждает в игре, где ее камешек изначально в вершине i, а камешек Лукаса — в вершине j, и «B» иначе.

    Примечание

    Граф из первого примера показан на рисунке ниже:

    Граф из второго примера показан на рисунке ниже:

    C. Головастик

    дп Комбинаторика матрицы *2900

    Как все знают, Дарт — это некое существо с Обратной стороны. Для простоты, мы называем их головастиками. Дарт и x - 1 других головастиков играют в игру. В ряд выложены n камней, пронумерованных от 1 до n слева направо. На одном камне одновременно может сидеть не более 1 головастика. Изначально головастики сидят на первых x камнях (по одному головастику на камне).

    Дарт и его друзья хотят оказаться на последних x камнях. Каждую секунду самый левый головастик должен прыгнуть направо. Головастик может прыгнуть не более, чем на k камней; более конкретно, головастик может прыгнуть с камня i на камни i + 1, i + 2, ... i + k. Головастик не может прыгнуть на уже занятый камень. Прыжок на расстояние i отнимает ci единиц энергии у головастика.

    Кроме того, q камней являются специальными. Каждый раз, когда головастик попадает на специальный камень p, у него отнимается wp единиц энергии (в дополнении к энергии, затраченной на прыжок). wp может быть отрицательным, в таком случае головастик получает |wp| единиц энергии.

    Головастики хотят потратить как можно меньше энергии суммарно (эта величина может быть отрицательной).

    Так как они просто головастики, они просят вас посчитать, какую минимальную сумму изменений энергии они могут потратить.

    Входные данные

    В первой строке находятся четыре целых числа, x, k, n и q (1 ≤ x ≤ k ≤ 8, k ≤ n ≤ 108, 0 ≤ q ≤ min(25, n - x)) — количество головастиков, максимальная длины прыжка, количество камней и количество специальных камней, соответственно.

    Следующая строка содержит k целых чисел c1, c2, ... ck (1 ≤ ci ≤ 109) — энергии, затрачиваемые на прыжки.

    Следующие q строк содержат описания специальных камней. Каждая строка содержит два целых числа p и wp (x + 1 ≤ p ≤ n, |wp| ≤ 109) Все величины p различны.

    Выходные данные

    Выведите минимально возможное количество единиц энергии, которое нужно потратить головастикам.

    D. Очень странные деревья

    Деревья дп математика матрицы *2600

    Сознание Уилла связано с сознанием монстра с Обратной стороны, поэтому Уиллу известно все, о чем думает монстр. Неожиданно Уилл начал рисовать без остановок, страницу за страницей. Его мама Джойс и шериф Хоппер сложили все рисунки вместе и поняли, что это помеченное дерево!

    Деревом называется связный ациклический граф. В дереве Уилла n вершин. Джойс и Хоппер не знают, что означает это дерево, поэтому они решили его исследовать, а также исследовать похожие деревья. Для каждого k такого, что 0 ≤ k ≤ n - 1, они собираются исследовать все такие помеченные деревья из n вершин, у которых ровно k ребер совпадают с ребрами дерева Уилла. Два помеченных дерева различны, если и только если существует пара вершин (v, u) такая, что в одном дереве существует ребро между вершинами v и u, а в другом — нет.

    Хоппер и Джойс хотят узнать, сколько работы им предстоит, поэтому они просят вас посчитать для каждого k число помеченных деревьев из n вершин, у которых ровно k ребер совпадают с ребрами в дереве Уилла. Так как ответ может быть большим, выведите ответы по модулю 1000000007 = 109 + 7.

    Входные данные

    Первая строка содержит одно целое число n (2 ≤ n ≤ 100) — размер дерева.

    Следующие n - 1 строк содержат ребра в дереве Уилла. Каждая строка содержит два целых числа v и u (1 ≤ v, u ≤ n, v ≠ u) — концы очередного ребра. Гарантируется, что заданный граф является деревом.

    Выходные данные

    Выведите n целых чисел на одной строке. i-е из этих чисел должно быть равно числу помеченных деревьев из n вершин таких, что ровно i - 1 ребро совпадает с ребрами в дереве Уилла, по модулю 1000 000 007 = 109 + 7.

    B. Прекрасное число

    Бинарный поиск дп Перебор реализация теория чисел *1100

    Будем называть положительное целое число прекрасным, если и только если сумма его цифр равна \(10\). Вам дано целое число \(k\), найдите \(k\)-е по величине прекрасное положительное целое число.

    Входные данные

    Единственная строка содержит одно целое число \(k\) (\(1 \leq k \leq 10\,000\)).

    Выходные данные

    Выведите \(k\)-е по величине прекрасное число.

    Примечание

    Первое прекрасное число равно \(19\), а второе — \(28\).

    D. Подстрока

    графы дп поиск в глубину и подобное *1700

    Дан граф из \(n\) вершин и \(m\) ориентированных ребер. В каждой вершине записана некоторая строчная латинская буква. Определим величину пути как наибольшее количество раз, которое какая-то буква встречалась на этом пути. Например, если буквы на пути образуют строку «abaca», то величина этого пути равна \(3\). Ваша задача — найти путь с наибольшей величиной.

    Входные данные

    Первая строка содержит два целых числа \(n, m\) (\(1 \leq n, m \leq 300\,000\)), означающих, что в графе \(n\) вершин и \(m\) ориентированных ребер.

    Вторая строка содержит строку \(s\), состоящую только из строчных латинских букв. Символ номер \(i\) — это буква, записанная в вершине номер \(i\).

    Далее следуют \(m\) строк. Каждая из этих строк содержит два целых числа \(x, y\) (\(1 \leq x, y \leq n\)), описывающих ориентированное ребро из \(x\) в \(y\). Обратите внимание, \(x\) может быть равно \(y\), и могут быть несколько ребер между \(x\) и \(y\). Кроме того, граф может быть несвязным.

    Выходные данные

    Выведите одно число — максимальную величину пути. Если существуют пути со сколь угодно большой величиной, выведите -1.

    Примечание

    В первом примере путь с максимальной величиной — это \(1 \to 3 \to 4 \to 5\). Величина этих путей равна \(3\), т. к. буква «a» встречается \(3\) раза.

    D. Емкости

    дп жадные алгоритмы реализация *2400

    Чтобы содержать свое поле в идеальном состоянии, Пете необходимо иногда поливать его. Чтобы полить поле, Пете необходимо ровно V мл воды.

    Также у Пети есть N емкостей, i-я первоначально заполнена на ai мл. Емкости достаточно большие и любая из них позволяет хранить в себе любой объем воды.

    Чтобы переливать воду между емкостями, у Пети имеется ковш объемом K мл. Данным ковшом можно зачерпывать воду из одной емкости и выливать в какую-то емкость (нельзя зачерпнуть воду одновременно из нескольких емкостей, и выливать ее необходимо полностью). При этом зачерпнуть можно min(v, K), где v — текущий объем воды в выбранной емкости.

    Можно ли с помощью данного ковша получить в одной из емкостей объем, строго равный V? Если возможно, выведите необходимую последовательность операций. Если способов получить искомый объем несколько — выведите любой.

    Входные данные

    В первой строке заданы 3 целых числа: N (2 ≤ N ≤ 5000), K (1 ≤ K ≤ 5000) и V (0 ≤ V ≤ 109) — количество емкостей, объем ковша и требуемый объем воды в емкости, соответственно.

    В следующей строке задано N целых чисел ai (0 ≤ ai ≤ 105), где ai — первоначальный объем воды в i-й емкости.

    Выходные данные

    Если невозможно получить объем V, выведите NO.

    В противном случае выведите в первой строке YES, а далее со следующей строки операции в следующем формате:

    В каждой строке по 3 числа — описание очередной сжатой операции: «cnt x y» (1 ≤ cnt ≤ 109, 1 ≤ x, y ≤ N), где x — номер емкости, откуда надо черпать, y — номер емкости, куда выливать, а cnt — количество операций «перелить воду из емкости x в емкость y».

    Количество строк со сжатыми операциями не должно превышать N + 5.

    E. Птички

    дп *2200

    Помимо плюшевых игрушек, Имп также обожает маленьких желтых птичек!

    Для призыва птичек требуется очень сильное колдунство. На аллее в парке в ряд расположены n деревьев, на каждом из которых находится по одному птичьему гнезду. В i-м гнезде живет ci птичек; чтобы призвать одну птичку из этого гнезда, нужно стоять под этим деревом и потратить costi единиц маны. Однако, за каждую призванную птичку Имп поднимает свой максимальный уровень маны на B единиц. Имп призывает птиц по одной, из i-го гнезда он может призвать от 0 до ci птиц.

    Изначально Имп находится у первого дерева и имеет запас маны, равный W, его максимальный уровень маны тоже равен W. Имп может двигаться только вперед, при перемещении между соседними деревьями уровень маны Импа восстанавливается на X (но не может превысить максимальное значение). Двигаясь исключительно вперед, каково максимальное количество птичек, которое может призвать Имп?

    Входные данные

    В первой строчке заданы четыре числа n, W, B, X (1 ≤ n ≤ 103, 0 ≤ W, B, X ≤ 109) — число деревьев, начальный запас маны, бонус к максимальному количеству маны за призыв одной птички и количество восполняемой при передвижении маны, соответственно.

    Во второй строке заданы n чисел c1, c2, ..., cn (0 ≤ ci ≤ 104), где ci — количество птичек, обитающих в i-м гнезде. Гарантируется, что .

    В третьей строке заданы n чисел cost1, cost2, ..., costn (0 ≤ costi ≤ 109), где costi — стоимость призыва одной птички из i-го гнезда.

    Выходные данные

    Выведите одно число — максимальное количество птичек, которое можно призвать.

    Примечание

    В первом примере стартовый запас маны Импа равен 12 (совпадает с максимальным значением 12). После того, как он призовет двух птичек из первого гнезда, он потеряет 8 единиц маны, но максимальный запас не увеличится (т.к B = 0). После этого ваша мана будет равняться 4 из 12; во время перемещения вы восстановите 4 единицы маны, в итоге ко второму дереву Имп подойдет, имея 8 единиц маны из 12 максимально возможных. Теперь разумно взять 4 птички из второго гнезда, потратив на это 8 маны. Итоговый ответ — 6.

    Во втором примере стартовый запас маны Импа равняется 1000. Оптимальным выбором будет взять всех птичек из четвертого гнезда. Обратите внимание, что на пути от первого гнезда до четвертого мана восстанавливаться не будет, потому что она изначально полна.

    F. Делимость

    дп жадные алгоритмы Конструктив теория чисел *2400

    Имп очень благодарен вам за оказанную помощь. Впрочем, если вы решите последнюю задачу, его радость возрастет многократно.

    Определим для некоторого множества как число таких пар a, b во множестве , что:
    • a строго меньше b;
    • a делит b без остатка.

    Необходимо найти такое множество , которое является подмножеством множества {1, 2, ..., n} (т. е. множества всех положительных целых чисел, не превосходящих n), что .

    Входные данные

    В единственной строчке заданы два числа n и k .

    Выходные данные

    Если ответ не существует, выведите одно слово «No».

    В противном случае в первой строке выведите «Yes», во второй — число m, размер множества , а в третьей строке — m чисел, составляющих множество . Если возможных ответов несколько, выведите любой.

    Для лучшего понимания формата вывода смотрите примеры.

    Примечание

    Во втором примере подходящими парами являются (1, 2), (1, 4), (1, 5), (1, 6), (2, 4), (2, 6). Таким образом, .

    В третьем примере подходящими парами являются (2, 4), (4, 8), (2, 8). Таким образом, .

    C. Речная загадка

    дп жадные алгоритмы Структуры данных *1700

    Аркадий решил пронаблюдать за рекой в течение n последовательных дней. Уровень воды в реке в каждый из этих дней равен некоторому вещественному значению.

    Аркадий каждый день ходит к реке и делает отметку текущего уровня воды на берегу. Если отметка существует до этого, новая отметка не создается. Вода не смывает отметки. Аркадий выписал, сколько отметок было строго над уровнем воды в каждый из дней, в i-й день это количество равнялось mi.

    Определим di как количество отметок строго под уровнем воды в i-й день. Определите минимально возможную сумму величин di по всем дням. Изначально (перед первым днем) на берегу нет отметок.

    Входные данные

    На первой строке находится одно целое число n (1 ≤ n ≤ 105) — количество дней.

    Вторая строка содержит n целых чисел m1, m2, ..., mn (0 ≤ mi < i) — количество отметок строго над уровнем воды в каждый из дней.

    Выходные данные

    Выведите одно целое число — минимально возможную сумму количества отметок строго под уровнем воды по всем дням.

    Примечание

    Рисунок ниже показывает оптимальный случай в первом примере.

    Обратите внимание: в день 3 должна быть создана новая отметка, иначе в день 4 не будет 3 отметки над уровнем воды. Суммарное количество отметок под водой в этом случае равно 0 + 0 + 2 + 0 + 3 + 1 = 6.

    Рисунок ниже показывает оптимальный случай во втором примере.

    E. Гардероб

    дп жадные алгоритмы *2700

    Оля хочет заказать шкаф. В нем будет n ящиков высотой a1, a2, ..., an, стоящих друг на друге в некотором порядке. Таким образом, каждый ящик можно представить в виде вертикального отрезка длины ai, и все отрезки вместе должны составить отрезок от 0 до без перекрытий.

    Некоторые из ящики важные (в таком случае bi = 1), остальные нет (тогда bi = 0). Оля считает, что удобство шкафа равняется количеству важных ящиков таких, что их нижняя граница находится на высоте от l до r включительно.

    По данной информации о высотах ящиков и их важности найдите максимально возможное удобство шкафа, если ящики можно переставлять местами произвольным образом.

    Входные данные

    В первой строке находятся три целых числа n, l и r (1 ≤ n ≤ 10 000, 0 ≤ l ≤ r ≤ 10 000) — количество ящиков, нижняя и верхняя границы отрезка, куда должен попасть важный ящик, чтобы быть учтенным при подсчете удобства шкафа.

    Во второй строке находятся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 10 000) — высоты ящиков. Гарантируется, что суммарная высота всех ящиков (т. е. высота шкафа) не превосходит 10 000: Оля не сможет достать до ящиков выше.

    Во второй строке находятся n целых чисел b1, b2, ..., bn (0 ≤ bi ≤ 1), где bi равно 1, если ящик номер i важный, и 0 иначе.

    Выходные данные

    Выведите одно целое число — максимально возможное удобство шкафа.

    Примечание

    В первом примере можно, например, сначала поставить неважный ящик высоты 2, затем важные ящики высотой 1, 3 и 2 в таком порядке, затем — оставшиеся неважные ящики. В таком случае удобство равно 2, потому что нижние края важных ящиков размера 3 и 2 попадают в отрезок [3, 6].

    Во втором примере нужно обязательно поставить невысокий ящик под высокий.

    F. Минимальная разница подмножеств

    дп *3200

    Будем называть положительное целое число x k-красивым целым числом, если и только если возможно разбить мультимножество его цифр в десятичном представлении на два подмножества так, чтобы разница между суммой цифр в этих множествах была меньше либо равна k. Каждая цифра должна принадлежать ровно одному подмножеству послу разбиения.

    Мы подготовили для вас n запросов. Каждый запрос описывается тремя целыми числами l, r и k, которые означают, что вы должны вычислить количество k-красивых целых чисел x в пределах от l до r (включительно).

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 5·104) — количество запросов.

    Каждая из следующих n строк описывает один запрос и содержит три целых числа l, r и k (1 ≤ l ≤ r ≤ 1018, 0 ≤ k ≤ 9).

    Выходные данные

    Для каждого запроса выведите одно целое число — ответ на этот запрос.

    Примечание

    Если 1 ≤ x ≤ 9, то число x является k-красивым если и только если x ≤ k.

    Если 10 ≤ x ≤ 99, то число x = 10a + b является k-красивым если и только если |a - b| ≤ k, где a и b — целые числа от 0 до 9 включительно.

    100 является k-красивым только и только если k ≥ 1.

    B. Переписка с другом

    *особая задача дп *1400

    Иногда вспоминаешь старого друга и начинаешь вспоминать все, что с ним связано. Хорошо, что есть социальные сети: они хранят вашу переписку с самого знакомства, и можно с легкостью прочитать, о чем же вы спорили 10 лет назад.

    Формально, ваша переписка — упорядоченная по времени последовательность сообщений, пронумерованных от 1 до n, где n — общее количество сообщений в переписке.

    Каждое сообщение может содержать ссылку на более раннее сообщение, на которое оно является ответом. При открытии сообщения с номером x или при переходе по ссылке на сообщение с номером x диалог показывается так, что видны k сообщений до этого сообщения, само сообщение x и k сообщений после этого сообщения. Если до или после текущего сообщения было менее k сообщений, то все они отображаются.

    Изучая старую переписку, вы всегда читаете все сообщения, показанные на экране, а затем переходите по ссылке в текущем сообщении x (в которое пришли по ссылке), если такая есть, и читаете дальше.

    Определите количество различных сообщений, которые вы прочтете, если начинать читать переписку, открыв диалог на сообщении t, для каждого t от 1 до n. Считайте ответ для каждого случая независимо. Если начинать читать с сообщения номер x, то на экране изначально показаны k сообщений до сообщения x, само сообщение x и k сообщений после. Сообщения, прочитанные несколько раз, считаются за одно.

    Входные данные

    В первой строке следуют два целых числа n и k (1 ≤ n ≤ 105, 0 ≤ k ≤ n) — количество сообщений в переписке и количество сообщений, которые видны сверху и снизу от текущего.

    Во второй строке следует последовательность целых чисел a1, a2, ..., an (0 ≤ ai < i), где ai равно нулю, если из сообщения i нет ссылки в предыдущее сообщение, либо ai равно номеру сообщения, в которое можно перейти по ссылке из сообщения i. Все сообщения перечислены в хронологическом порядке. Гарантируется, что если в сообщении с номером x есть ссылка, то она ведёт в сообщение с номером меньшим, чем x.

    Выходные данные

    Выведите n целых чисел, где i-е число должно быть равно количеству различных сообщений, которые можно прочитать, если начинать читать с i-го сообщения и переходить по ссылкам до тех пор, пока это возможно.

    Примечание

    Если начинать с шестого сообщения в первом примере, то вы прочитаете шестое сообщение, затем второе, затем первое и закончите, т. к. из первого сообщения нет ссылки.

    Если начинать с шестого сообщения во втором примере, то вы сначала прочтете пятое, шестое и седьмое сообщение, затем перейдете по ссылке в пятое сообщение и прочтете четвертое, пятое и шестое сообщение, затем перейдете по ссылке в четвертое сообщение и прочитаете третье, четвертое и пятое сообщение, наконец, перейдете по ссылке в третье сообщение и прочитаете второе, третье и четвертое сообщение. Больше переходить по ссылкам вы не будете, так как из третьего сообщения ссылки нет. Итого вы прочтете все сообщения со второго по седьмое, таких шесть.

    D. Флаги

    дп математика матрицы *2500

    Будучи первокурсником, Игорь К., как и все остальные, по строгому указанию преподавателя решал олимпиадные задачи по программированию. Однажды его внимание привлекла задача "Флаги" на сайте Timmy's Online Judge. В ней требовалось найти количество трехцветных флагов, удовлетворяющих условию... впрочем, это неважно. Игорь К. быстро подобрал формулу и получил заветный Accepted.

    Однако преподавателя это не сильно впечатлило. Он решил, что задача, представленная на Timmy's Online Judge, очень скучная и простая: всего три возможных цвета полос, всего два ограничения. Он поставил перед Игорем К. усложненную задачу, и тот не смог ее решить. Мы, конечно, умолчим о том, что преподаватель сам не смог ее решить.

    А вы сможете?

    Флаги состоят из одной или нескольких параллельных полос одинаковой ширины. Полосы могут быть одного из следующих четырех цветов: белого, черного, красного или желтого. Требуется найти количество различных флагов с числом полос от L до R, если:

    • в флаге не может быть полос одного цвета, расположенных рядом;
    • в флаге не может быть полос белого и желтого цветов, расположенных рядом;
    • в флаге не может быть полос красного и черного цветов, расположенных рядом;
    • в флаге не может быть сочетания полос черного, белого и красного цветов, расположенных подряд в этом или обратном порядке;
    • симметричные флаги (как, например, WB и BW, где буквами W и B обозначены белый и черный цвета) считаются одинаковыми.
    Входные данные

    В единственной строке записаны два целых числа L и R (1 ≤ L ≤ R ≤ 109) — нижняя и верхняя границы количества полос на флаге.

    Выходные данные

    Выведите единственное число — количество различных флагов, удовлетворяющих условию задачи и имеющих от L до R полос, по модулю 1000000007.

    Примечание

    В первом тесте существуют такие флаги (они перечислены в лексикографическом порядке, буквами B, R, W, Y обозначены соответственно черный, красный, белый и желтый цвета):

    3 полосы: BWB, BYB, BYR, RWR, RYR, WBW, WBY, WRW, WRY, YBY, YRY (всего 11 флагов).

    4 полосы: BWBW, BWBY, BYBW, BYBY, BYRW, BYRY, RWRW, RWRY, RYBW, RYBY, RYRW, RYRY (12 флагов).

    Поэтому ответ на тест 1 равен 11 + 12 = 23.

    E. Лостборн

    дп математика теория чисел *2600

    Игорь К. очень любит многопользовательскую ролевую игру WineAge II. Кто знает, возможно, именно в ней причина его не слишком успешной учебы в университете. Как и любой играющий в нее человек, он заинтересован в том, чтобы экипировка и оружие его персонажа были как можно лучше.

    Однажды, в очередной раз читая форум этой игры, он наткнулся на очень интересный факт. Оказывается, каждое оружие в игре характеризуется k различными числами: a1, ..., ak. Они называются показателями удара и по задумке разработчиков игры являются попарно взаимно простыми.

    Урон, наносящийся при ударе, зависит не только от характеристик оружия, но и от показателя силы персонажа. Так, если сила персонажа равна n, то наносимый урон будет вычисляться как количество чисел на отрезке , которые не делятся ни на один из показателей удара ai.

    Недавно, выполнив очередной квест, Игорь К. нашел новый меч Лостборн. Он хочет знать, сколько урона он будет наносить своим противникам, используя его.

    Входные данные

    В первой строке записаны два целых числа: n и k (1 ≤ n ≤ 1013, 1 ≤ k ≤ 100) — показатель силы персонажа Игоря К. и количество показателей удара.

    В следующей строке через пробел перечислены k целых чисел ai (1 ≤ ai ≤ 1000) — показатели удара меча Лостборн. k заданных чисел являются попарно взаимно простыми.

    Выходные данные

    Выведите единственное число — урон, который будет наносить персонаж Игоря К. при применении своего нового оружия.

    Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

    C. Федя не врёт!

    дп Структуры данных *1900

    Мальчик Федя очень любит рисовать. Больше всего он любит рисовать отрезки с целочисленными координатами внутри своего любимого отрезка [1;m]. Однажды Федя нарисовал несколько отрезков внутри своего любимого отрезка и заметил одну интересную особенность: не существует точки, принадлежащей сразу всем отрезкам. Заметив это, Федя очень обрадовался и захотел похвастаться об этом своему другу Саше.

    Саша знает, что Федя любит прихвастнуть, поэтому с осторожностью относится к его заявлениям, никогда не доверяя на слово. Федя хочет доказать, что иногда ему всё же можно верить, поэтому он решил убедить Сашу в том, что на его рисунке действительно не существует точки, принадлежащей всем отрезкам. Но Федя – весьма ленивый человек, поэтому он не хочет сообщать Саше координаты концов каждого отрезка. Более того, ему лень говорить Саше, сколько отрезков он нарисовал.Вместо этого он предложил Саше задать несколько вопросов вида: «Скольким отрезкам принадлежит точка с целочисленной координатой xi?», пообещав дать на них честные ответы.

    Ребята очень ценят своё время, поэтому они просят вас посчитать, какое максимальное количество вопросов Саша может задать Феде, что располагая только этими Федиными ответами, Саша всё ещё не может быть полностью уверен в том, что Федя его не обманул. Учтите, что Саша не знает, сколько отрезков нарисовал Федя. Разумеется, Саша смышлёный малый и не будет спрашивать дважды про одну и ту же точку.

    Входные данные

    В первой строке входных данных находятся два целых числа n и m (1 ≤ n, m ≤ 100 000) — количество отрезков, которые есть на Федином рисунке и максимальная координата точки, которую можно выбрать в наборе.

    В i-й из следующих n строк записаны два целых числа li и ri (1 ≤ li ≤ ri ≤ m) — левая и правая границы i-го отрезка на рисунке. Обратите внимание, что левая и правая границы отрезка могут совпадать.

    Гарантируется, что не существует точки, принадлежащей сразу всем нарисованным отрезкам.

    Выходные данные

    В единственной строке выходного файла выведите число k — размер максимального множества пар (xi, cnt(xi)), где все xi – различны, 1 ≤ xi ≤ m, а cnt(xi) — количество отрезков, которым принадлежит точка с координатой xi, такого что, зная только это множество пар (и не зная число n), нельзя гарантированно утверждать, что в исходном рисунке не существует точки, принадлежащей всем отрезкам.

    Примечание

    В первом тесте из условия Саша никогда не сможет поверить Феде на слово, потому что зная, что даже зная cnt(xi) для каждой точки из отрезка [1;4], он не может быть уверенным, что Федя на самом не нарисовал один отрезок [1;4].

    Во втором тесте из условия Саша может назвать максимум 5 точек, например: 1, 2, 3, 5, 6. Но уже зная информацию о том, сколько отрезков накрывают каждую из целочисленных точек на отрезке [1;6], Саша может быть уверен в том, что в изначальном рисунке не было точки, принадлежащей всем отрезкам.

    E. Выставка монет

    дп математика Структуры данных *2900

    Аркадий и Кирилл пришли на выставку редких монет. Все монеты расположены в один ряд и пронумерованы слева направо от 1 до k, причем некоторые монеты лежат вверх аверсом (главной стороной), а некоторые — вверх реверсом (другой стороной).

    Аркадий и Кирилл сделали несколько фотографий монет каждый, причем на каждой фотографии изображены верхние стороны нескольких подряд идущих монет. Аркадий интересуется аверсами, поэтому на каждом снимке, который сделал он, есть хотя бы одна монета, лежащая аверсом вверх. Кирилл, наоборот, интересуется реверсами, поэтому на каждом его снимке есть хотя бы одна монета, лежащая вверх реверсом.

    Теперь снимки утеряны, и ребята лишь помнят границы отрезков монет, попавших на каждый из снимков. По данной информации о снимках вычислите остаток от деления на 109 + 7 количества способов выбрать для каждой монеты сторону, которой она будет лежать вверх, так, чтобы на каждом снимке Аркадия была бы хотя бы одна монета вверх аверсом, а на каждом снимке Кирилла была хотя бы одна монета вверх реверсом.

    Входные данные

    Первая строка содержит три целых числа k, n и m (1 ≤ k ≤ 109, 0 ≤ n, m ≤ 105) — общее число монет, количество снимков Аркадия и Кирилла, соответственно.

    Следующие n строк содержат описания снимков Аркадия, по одному в строке. Каждая из этих строк содержит два целых числа l и r (1 ≤ l ≤ r ≤ k), означающие, что среди монет с l-й по r-ю должна быть хотя бы одна вверх аверсом.

    Следующие m строк содержат описания снимков Кирилла, по одному в строке. Каждая из этих строк содержит два целых числа l и r (1 ≤ l ≤ r ≤ k), означающие, что среди монет с l-й по r-ю должна быть хотя бы одна вверх реверсом.

    Выходные данные

    Выведите одно целое число — количество способов выбрать для каждой монеты, какой стороной она будет лежать вверх, по модулю 109 + 7 = 1000000007.

    Примечание

    В первом примере возможны следующие расположения монет («А» — аверс, «Р» — реверс):

    • АРААР,
    • АРАРА,
    • АРАРР,
    • РРААР,
    • РРАРА,
    • РРАРР,
    • АРРАР,
    • АРРРА.

    Во втором примере данная информация противоречива: согласно снимкам, вторая монета должна лежать одновременно аверсом и реверсом вверх, что невозможно. Значит, ответ равен 0.

    D. Дерево

    Бинарный поиск Деревья дп *2200

    Дана вершина дерева с номером 1 и весом 0. Обозначим за cnt количество вершин в дереве в любой момент (изначально cnt равно 1). Необходио обработать Q запросов, каждый из которых имеет один из двух типов:

    • Добавить новую вершину (с номером cnt + 1) и весом W и провести ребро между вершиной R и этой вершиной.
    • Выведите максимальную длину последовательности вершин такой, что она
      1. Начинается с вершины R.
      2. Каждая следующая вершина является предком предыдущей вершины
      3. Сумма весов вершин в последовательности не превосходит X.
      4. Для любой пары i, j вершин, которые являются соседними в последовательности и вершина i является предком вершины j, выполнено w[i] ≥ w[j], а также не существует вершины k на простом пути из i в j такой, что w[k] ≥ w[j]

    Дерево подвешено за вершину 1 в любой момент.

    Учтите, что запросы заданы в зашифрованном виде.

    Входные данные

    В первой строке задано количество запросов Q (1 ≤ Q ≤ 400000).

    Обозначим за last ответ на предыдущий запрос типа 2 (изначально last равно 0).

    Каждая из следующих Q строк содержит описание запроса в одном из следующих форматов:

    • 1 p q (1 ≤ p, q ≤ 1018): Это запрос первого типа, где и . Гарантируется, что 1 ≤ R ≤ cnt и 0 ≤ W ≤ 109.
    • 2 p q (1 ≤ p, q ≤ 1018): Это запрос второго типа, где и . Гарантируется, что 1 ≤ R ≤ cnt и 0 ≤ X ≤ 1015.

    обозначает побитовый XOR чисел a и b.

    Гарантируется, что есть хотя бы один запрос второго типа.

    Выходные данные

    Для каждого запроса второго типа выведите ответ на него в отдельной строке.

    Примечание

    В первом тестовом примере,

    last = 0

    - Запрос 1: 1 1 1, Вершина 2 с весом 1 подвешивается к вершине 1.

    - Запрос 2: 2 2 0, Никакая последовательность вершин, начинающаяся с вершины 2, не имеет сумму весов не более 0. last = 0

    - Запрос 3: 2 2 1, Ответ равен 1, так как требуемая последователньость равна {2}. last = 1

    - Запрос 4: 1 2 1, Вершина 3 с весом 1 подвешивается к вершине 2.

    - Запрос 5: 2 3 1, Ответ равен 1, так как требуемая последовательность равна {3}. Вершина 2 не может быть добавлена к последовательности, так как сумма весов должна быть не более 1. last = 1

    - Запрос 6: 2 3 3, Ответ равен 2, так как требуемая последовательность будет равна {3, 2}. last = 2

    E. Командная работа

    дп Комбинаторика математика *2400

    У вас в подчинении находится команда из N людей. Для определённой задачи вы можете выбрать непустое множество людей. Стоимость множества из x людей равна xk.

    Найдите сумму стоимостей по всем непустым подмножествам людей.

    Входные данные

    В единственной строке содержатся два целых числа N (1 ≤ N ≤ 109), обозначающее количество людей в подчинении и число k (1 ≤ k ≤ 5000).

    Выходные данные

    Выведите сумму стоимостей по всем непустым подмножествам по модулю 109 + 7.

    Примечание

    В перовом тестовом примере есть одно непустое подмножество {1} со стоимостью 11 = 1.

    Во втором тестовом примере есть семь непустых подмножеств:

    - {1} со стоимостью 12 = 1

    - {2} со стоимостью 12 = 1

    - {1, 2} со стоимостью 22 = 4

    - {3} со стоимостью 12 = 1

    - {1, 3} со стоимостью 22 = 4

    - {2, 3} со стоимостью 22 = 4

    - {1, 2, 3} со стоимостью 32 = 9

    Их суммарная стоимость равна 1 + 1 + 4 + 1 + 4 + 4 + 9 = 24.

    F. Сбежать через лист

    геометрия дп Структуры данных *2700

    Дано дерево на n вершинах (пронумерованных от 1 до n) с корнем в вершине 1. В вершине i записаны два числа: ai и bi.

    Вы можете прыгнуть из вершины в любую вершину в её поддереве. Стоимость такого прыжка из вершины x в вершину y равна произведению ax и by. Суммарная стоимость пути между вершинами, состоящего из нескольких прыжков равна сумме стоимостей прыжков в нём. Для каждой вершины посчитайте минимальную стоимость пути от неё до какого-либо листа. Обратите внимание, что корень дерева не является листом, даже если имеет степень 1.

    Учтите, что нельзя совершать прыжок из вершины в ту же вершину.

    Входные данные

    В первой строке содержится целое число n (2 ≤ n ≤ 105) — количество вершин в дереве.

    Во второй строке через пробел заданы n целых чисел a1,  a2,  ...,  an( - 105  ≤  ai  ≤  105).

    Во третьей строке через пробел заданы n целых чисел b1,  b2,  ...,  bn( - 105  ≤  bi  ≤  105).

    В следующих n  -  1 строках содержатся пары целых чисел ui и vi (1 ≤ ui,  vi ≤  n), разделённых пробелом, обозначающие ребро между вершинами ui и vi в дереве.

    Выходные данные

    Выведите n целых чисел через пробел, i-е из которых обозначает минимальную стоимость, чтобы добраться от вершины с номером i до какого-либо листа.

    Примечание

    В первом тестовом примере вершина 3 сама является листом, поэтому ответ равен 0. Для вершины 2 прыжок в вершину 3 стоит a2 × b3 = 50. Для вершины 1 прыжок в вершину 3 стоит a1 × b3 = 10.

    Во втором тестовом примере вершины 3 и 4 являются листьями, поэтому ответ для них равен 0. Для вершины 2 прыжок в вершину 4 стоит a2 × b4 = 100. Для вершины 1 необходимо сначала прыгнуть в вершину 2 прыжком стоимостью a1 × b2 =  - 400, а затем прыгнуть из 2 в 4 за a2 × b4 = 100.

    G. Палиндромное разбиение

    дп Строки строковые суфф. структуры *2900

    Дана строка s, найдите число способов разбить s на подстроки так, что если в разбиении содержится k подстрок (p1, p2, p3, ..., pk), то pi = pk - i + 1 для всех i (1 ≤ i ≤ k) и k чётно.

    Так как число таких разбиений может быть велико, выведите ответ по модулю 109 + 7.

    Входные данные

    В единственной строке содержится строка s (2 ≤ |s| ≤ 106) чётной длины, состоящая из строчных букв английского алфавита.

    Выходные данные

    Выведите одно целое число — количество требуемых разбиений по модулю 109 + 7.

    Примечание

    В первом тестовом примере единственным корректным разбиением является ab|cd|cd|ab.

    Во втором тестовом примере корректными разбиениями являются ab|b|ab|ab|ab|ab|b|ab, ab|b|abab|abab|b|ab и abbab|ab|ab|abbab.

    A. Извилистые движения

    дп *1800

    Драконы символизируют мудрость, силу и богатство. На Китайский Новый год люди сооружают драконов из палок бамбука и ткани, поднимают их на палках, и перемещают палки вверх и вниз, чтобы изобразить летящего дракона.

    Человек, держащий свой шест низко, может обозначаться как 1, а человек, держащий шест высоко — как 2. Таким образом ряд людей может быть представлен как последовательность a1, a2, ..., an, состоящая из единиц и двоек.

    Маленький Томми тоже в этом ряду. Он хочет выбрать некоторый интервал [l, r] (1 ≤ l ≤ r ≤ n) и развернуть подотрезок al, al + 1, ..., ar так, чтобы длина наибольшей неубывающей подпоследовательности в получившейся последовательности была максимальной возможной.

    Неубывающая подпоследовательность это такая последовательность индексов p1, p2, ..., pk, что p1 < p2 < ... < pk и ap1 ≤ ap2 ≤ ... ≤ apk. Число k называется длиной подпоследовательности.

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 2000) — длину последовательности.

    Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 2, i = 1, 2, ..., n) — исходная последовательность.

    Выходные данные

    Выведите одно целое число — максимально возможную длину максимальной неубывающей подпоследовательности в получившейся последовательности.

    Примечание

    В первом примере после переворота подотрезка [2, 3] последовательность станет равна [1, 1, 2, 2], поэтому длина наибольшей неубывающей подпоследовательности равна 4.

    Во втором примере после переворота подотрезка [3, 7] последовательность станет равна [1, 1, 1, 1, 2, 2, 2, 2, 2, 1], и длина наибольшей неубывающей подпоследовательности равна 9.

    E. Важнейшее объединение

    дп Конструктив *3200

    В гостях хорошо, а дома лучше. Именно поэтому встреча Китайского Нового года всей семьей — такая важная и обязательная традиция.

    После праздничного ужина Маленький Томми предложил семье сложную логическую игру. Вот ее краткие правила:

    1. Изначально перед вами последовательность из n неотрицательных целых чисел p1, p2, ..., pn. По правилам все числа в этой последовательности должны оставаться неотрицательными на протяжении всей игры.
    2. Вы можете выбрать два соседних положительных целых числа в этой последовательности pi и pi + 1 (1 ≤ i < n) и затем уменьшить их на минимум среди них (т. е. min(pi, pi + 1)), стоимость операции равна величине уменьшения, т. е. min(pi, pi + 1). Назовем такую операцию понижением.
    3. Игра оканчивается, как только не останется ни одной пары соседних положительных чисел. Ваша задача — довести игру до конца за минимальную суммарную стоимость операций.

    Легко видеть, что игра закончится не более чем за n - 1 понижений. Выведите свое решение этой головоломки с минимальной стоимостью.

    Входные данные

    Первая строка содержит одно целое число n (1 ≤ n ≤ 3·105).

    Вторая строка содержит n целых чисел p1, p2, ..., pn (0 ≤ pi ≤ 109, i = 1, 2, ..., n).

    Выходные данные

    В первой строке выведите одно целое число — число понижений в вашем решении m (0 ≤ m ≤ n - 1).

    В следующие m строк выведите понижения по порядку. В каждой из этих m строк выведите одно целое число i (1 ≤ i < n), показывающее, что вы будете производить понижение чисел pi и pi + 1.

    Если существует несколько решений, минимизирующих стоимость, выведите любое из них.

    Примечание

    В первом примере одно из оптимальных решений следующее: , итоговая стоимость 1 + 1 = 2.

    Во втором примере одно из оптимальных решений следующее: , итоговая стоимость 1 + 1 + 1 = 3.

    E. Фафа и древняя математика

    Деревья дп поиск в глубину и подобное *2300

    Известно, что древние Египтяне были сильными математиками. Древнеегипетский математик Ахмес любил писать некие арифметические выражения на листе папируса, которые он называл Ахмесовы арифметические выражения.

    Ахмесово арифметическое выражение можно определить как:

    • «d» является Ахмесовым арифметическим выражением, где d — это положительное число, состоящее из одной цифры;
    • «(E1opE2)» является Ахмесовым арифметическим выражением, где E1 и E2 — корректные Ахмесовы арифметические выражения (без пробелов) и op это плюс ( + ) или минус ( - ).
    Например 5, (1-1) и ((1+(2-3))-5) — корректные Ахмесовы арифметические выражения.

    Во время своей поездки в Египет, Фафа нашел кусочек папирусной бумаги, на которой было написано одно из корректных Ахмесовых арифметических выражений. Кусочек папируса очень состарился и все операции стерлись, оставив только числа и скобки. Так как Фафа любит математику, он решил бросить себе вызов следующей задачей.

    Дано количество операций плюс и минус в исходном выражении, найдите максимальное возможное значение выражения, поставив плюсы и минусы вместо стертых операций.

    Входные данные

    Первая строка содержит строку E (1 ≤ |E| ≤ 104) — корректное Ахмесово арифметическое выражение. Все операции стерлись и заменились на «?».

    Вторая строка содержит два разделенных пробелами числа P и M (0 ≤ min(P, M) ≤ 100) — количество операций плюс и минус, соответственно.

    Гарантируется, что P + M =  количество стертых операций.

    Выходные данные

    Выведите одну строку, содержащую ответ на задачу.

    Примечание
    • Ответом на первый тест из условия будет (1 + 1)  =  2.
    • Ответом на второй тест из условия будет (2 + (1 - 2))  =  1.
    • Ответом на третий тест из условия будет ((1 - (5 - 7)) + ((6 + 2) + 7))  =  18.
    • Ответом на четвертый тест из условия будет ((1 + (5 + 7)) - ((6 - 2) - 7))  =  16.

    F. Удаляем подстроки

    битмаски дп жадные алгоритмы *2700

    Дана строка s, изначально состоящая из n строчных латинских букв. Над ней производятся k операций, где . В i-ю операцию необходимо удалить некоторую подстроку длиной ровно 2i - 1 из s.

    Выведите лексикографически минимальную строку, которую возможно получить после выполнения k операций.

    Входные данные

    Единственная строка содержит строку s из n строчных латинских букв (1 ≤ n ≤ 5000).

    Выходные данные

    Выведите лексикографически минимальную строку, которую можно получить после выполнения k операций.

    Примечание

    Возможные операции в примерах:

    1. adcbca adcba aba;
    2. abacabadabacaba abcabadabacaba aabadabacaba aabacaba.

    F. Котлета

    дп Структуры данных *2400

    Аркадий хочет обедать. Он только что вернулся из магазина, где приобрел полуфабрикат — котлету, которую осталось только поджарить. Надпись на упаковке гласит, что котлету нужно жарить на сковороде на умеренном огне ровно 2n секунд, причем сначала нужно ровно n секунд жарить котлету на одной стороне, а затем ровно n секунд — на другой. Аркадий уже нашел сковороду и зажег умеренный огонь, но тут осознал, что, возможно, у него не получится перевернуть котлету ровно через n секунд после начала готовки.

    Аркадий слишком занят расстановкой по порядку наборов стикеров в своем любимом мессенджере, и может отвлечься на переворот котлеты только в определенные моменты времени. А именно, есть k промежутков времени, в которые он может это сделать, i-й из них — это отрезок времени с li секунд от начала готовки до ri секунд до начала готовки, включительно. Аркадий решил, что не обязательно переворачивать котлету ровно в середине готовки, вместо этого, он перевернет ее несколько раз таким образом, чтобы суммарно котлета провела n секунд на одной стороне и n секунд на другой.

    Помогите Аркадию, узнайте, может ли он выполнить свой план, если он может переворачивать котлету только в указанные отрезки времени, и если да, то какое минимальное число раз ему придется перевернуть котлету.

    Входные данные

    Первая строка содержит два целых числа n и k (1 ≤ n ≤ 100 000, 1 ≤ k ≤ 100) — число секунд, которое котлета должна жариться с каждой из сторон, и число промежутков времени, когда Аркадий может ее переворачивать.

    Следующие k строк содержат описания этих промежутков. Каждая строка содержит два целых числа li и ri (0 ≤ li ≤ ri ≤ 2·n), что означает, что Аркадий может перевернуть котлету в любой момент времени, начиная с li секунд от начала готовки и заканчивая ri секундами от начала готовки, включительно. В частности, если li = ri, то Аркадий может перевернуть котлету в момент времени li = ri. Гарантируется, что li > ri - 1 для всех 2 ≤ i ≤ k.

    Выходные данные

    Выведите в единственную строку «Hungry», если Аркадий не может пожарить котлету ровно n секунд на одной стороне и ровно n секунд на другой.

    В противном случае, выведите в первую строку «Full», а во вторую — минимальное количество раз, которое ему необходимо перевернуть котлету.

    Примечание

    В первом примере котлету нужно перевернуть в моменты времени 3 секунды после начала и 13 секунд после начала.

    Во втором примере котлету можно перевернуть, как и написано на упаковке, через 10 секунд после начала.

    B. Наша Таня громко плачет

    дп жадные алгоритмы *1400

    Сейчас она на самом деле не плачет. Но заплачет, если вы не решите эту задачу.

    Даны числа n, k, A, B. Есть число x, которое изначально равно n. Вы можете выполнять 2 типа операций:

    1. Уменьшить x на 1, заплатив A монет.
    2. Поделить x на k, заплатив B монет. Эту операцию можно выполнять, только если x делится на k.
    Какое минимальное количество монет необходимо заплатить для того, чтобы получить x = 1?
    Входные данные

    В первой строке содержится целое число n (1 ≤ n ≤ 2·109).

    Во второй строке содержится целое число k (1 ≤ k ≤ 2·109).

    В третьей строке содержится целое число A (1 ≤ A ≤ 2·109).

    В четвёртой строке содержится целое число B (1 ≤ B ≤ 2·109).

    Выходные данные

    Выведите единственное число — минимальное количество монет, которое необходимо заплатить для того, чтобы получить x = 1.

    Примечание

    В первом тестовом примере оптимальная стратегия такова:

    • Уменьшить x на 1 (9 → 8) за 3 монеты.
    • Уменьшить x в 2 раза (8 → 4) за 1 монету.
    • Уменьшить x в 2 раза (4 → 2) за 1 монету.
    • Уменьшить x в 2 раза (2 → 1) за 1 монету.

    Суммарная стоимость — 6 монет.

    Во втором тестовом примере оптимальная стратегия — 4 раза уменьшить x на 1, потратив 8 монеты.

    E. Кэшбэк

    дп жадные алгоритмы математика Структуры данных *2000

    Вам, как лучшему Врейс-Кингу, в нижнем магазине «Мир» в центре Винницы предлагаются скидки.

    Дан массив a длины n и целое число c.

    Стоимость массива b длины k это сумма его элементов, за исключением минимальных. Например, стоимость массива [3, 1, 6, 5, 2] при c = 2 это 3 + 6 + 5 = 14.

    Среди всех разбиений a на последовательные подмассивы, найдите минимально возможную сумму стоимостей этих подмассивов.

    Входные данные

    В первой строке находится два числа n и c (1 ≤ n, c ≤ 100 000).

    Следующая строка содержит n чисел ai (1 ≤ ai ≤ 109) — элементы массива a.

    Выходные данные

    Выведите единственное число — минимально возможную сумму стоимостей подмассивов некого разбиения a.

    Примечание

    В первом примере любое разбиение на подмассивы даст сумму 6.

    Во втором тестовом примере одним из оптимальных разбиений является [1, 1], [10, 10, 10, 10, 10, 10, 9, 10, 10, 10] со стоимостями 2 и 90 соответственно.

    В третьем тестовом примере одним из оптимальных разбиений является [2, 3], [6, 4, 5, 7], [1] со стоимостями 3, 13 и 1 соответственно.

    В четвертом тестовом примере одним из оптимальных разбиений является [1], [3, 4, 5, 5, 3, 4], [1] со стоимостями 1, 21 и 1 соответственно.

    D. Расписание

    дп *1800

    Иван учится в Берляндском Государственном Университете (БГУ). В берляндской неделе n дней, в каждый из них у Ивана могут быть занятия в университете.

    В одном дне m рабочих часов, каждое занятие в университете длится ровно час. Если в какой-то день первое занятие у Ивана в течение i-го часа, а последнее — в течение j-го, то он тратит ровно j - i + 1 час в университете в этот день. Если в какой-либо день нет занятий, то Иван остается дома и проводит 0 часов в университете, соответственно.

    Иван не любит много времени проводить в университете, поэтому он решил пропустить некоторые занятия. Он не может пропустить больше, чем k занятий за неделю. Сначала Иван решает, какие занятия он посетит, а какие пропустит. Дальше в каждый день приходит в университет перед первым занятием, которое он решил не пропускать, и уходит после последнего, которое он собрался посетить. Если Иван решил пропускать все занятия в какой-то день, то он не идет в университет вообще.

    По заданным n, m, k и расписанию Ивана определите, какое минимальное количество часов он может провести в университете за неделю, если он не может пропустить больше k занятий.

    Входные данные

    В первой строке записаны три целых числа n, m и k (1 ≤ n, m ≤ 500, 0 ≤ k ≤ 500) — количество дней в берляндской неделе, количество рабочих часов в каждый день и количество занятий, которые Иван может пропустить, соответственно.

    Затем следуют n строк, i-я содержит бинарную строку длины m. Если j-й символ i-й строки равен 1, то у Ивана есть занятие в i-й день в течение j-го часа (и если равен 0, то занятия нет).

    Выходные данные

    Выведите минимальное количество часов, которые Ивану придется провести в университете, если он не может пропустить больше k занятий.

    Примечание

    В первом примере Иван может пропустить любое из двух занятий в первый день, поэтому он потратит 1 час в первый день и 4 часа во второй.

    Во втором примере Иван не может пропустить ни одного занятия, поэтому он потратит 4 часа в оба дня.

    F. Фибоначчиевы подпоследовательности

    дп Комбинаторика матрицы *2400

    Дана бинарная строка s (каждый символ в строке равен либо 0, либо 1).

    Определим стоимость строки t как количество вхождений s в t. Например, если s равна 11 и t равна 111011, то стоимость t равна 3.

    Определим также фибоначчиевы строки следующим образом:

    • F(0) равна 0;
    • F(1) равна 1;
    • F(i) = F(i - 1) + F(i - 2) для i > 1, где  +  означает конкатенацию двух строк.

    Ваша задача — посчитать сумму стоимостей всех подпоследовательностей строки F(x). Так как ответ может быть очень большим, выведите его по модулю 109 + 7.

    Входные данные

    В первой строке записаны два целых числа n и x (1 ≤ n ≤ 100, 0 ≤ x ≤ 100) — длина строки s и номер требуемой фибоначчиевой строки, соответственно.

    Во второй строке содержится s — строка, состоящая из n символов. Каждый из этих символов равен либо 0, либо 1.

    Выходные данные

    Выведите одно целое число — сумма стоимостей всех подпоследовательностей строки F(x) по модулю 109 + 7.

    G. Почти возрастающий массив

    дп Структуры данных *2500

    Назовем массив почти возрастающим, если можно удалить не более одного элемента таким образом, что массив станет строго возрастающим (то есть, каждый следующий элемент будет строго больше предыдущего).

    Задан массив a, состоящий из n элементов. Разрешается заменить элемент на любой позиции на произвольное целое число (эту операцию можно производить произвольное число раз). Какое минимальное количество раз надо проделать данную операцию, чтобы сделать массив почти возрастающим?

    Входные данные

    В первой строке записано одно целое число n (2 ≤ n ≤ 200000) — количество элементов в a.

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — массив a.

    Выходные данные

    Выведите минимальное количество операций по замене элемента, которое необходимо произвести, чтобы сделать a почти возрастающим.

    B. Счастливые числа

    дп жадные алгоритмы *1800

    Петя любит счастливые числа. Всем известно, что счастливыми являются натуральные числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

    Очень счастливыми называются счастливые числа, в которых содержится одинаковое количество цифр 4 и 7. Например, числа 47, 7744, 474477 являются очень счастливыми числами, а 4, 744, 467 — не являются.

    Однажды Пете встретилось натуральное число n. Найдите наименьшее очень счастливое число, которое не меньше n.

    Входные данные

    В единственной строке задано натуральное число n (1 ≤ n ≤ 10100000). Это число не содержит лидирующих нулей.

    Выходные данные

    В единственной строке выведите наименьшее очень счастливое число, которое больше или равно n.

    D. Конные скачки

    дп математика *2500

    Петя очень любит конные скачки. В скачках принимают участие лошади с номерами от l до r включительно. Петя хочет оценить вероятность выигрыша, для этого ему зачем-то нужно найти количество почти счастливых номеров лошадей. Номер называется почти счастливым, если в нем есть хотя бы две счастливые цифры, расстояние между которыми не превосходит k. От львовских ребят Петя узнал, что счастливые цифры — это цифры 4 и 7. Расстояние между цифрами — это модуль разности между их позициями в числе. Например, при k = 2 номера 412395497, 404, 4070400000070004007 являются почти счастливыми, а номера 4, 4123954997, 4007000040070004007 — не являются.

    Петя подготовил t отрезков [li, ri] и придумал общее для всех отрезков число k. Ваша задача — найти для каждого отрезка количество почти счастливых чисел в нем по модулю 1000000007 (109 + 7).

    Входные данные

    В первой строке задано два целых числа t и k (1 ≤ t, k ≤ 1000) — количество тестов и расстояние между цифрами соответственно. В следующих t строках заданы пары целых чисел li и ri (1 ≤ l ≤ r ≤ 101000). Все числа заданы без лидирующих нулей. Числа в строках разделены ровно одним пробелом.

    Выходные данные

    Выведите t строк. В каждой из их выведите одно число — ответ для соответствующего теста по модулю 1000000007 (109 + 7).

    Примечание

    В первом примере имеется четыре почти счастливых числа: 44, 47, 74, 77.

    Во втором примере только 74 и 77 попадают в данный отрезок.

    E. Счастливая страна

    графы дп снм *2500

    Петя любит счастливые числа. Всем известно, что счастливыми являются натуральные числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

    Однажды Петя заснул. Ему приснилось, что он оказался президентом какой-то островной страны. Эта страна представляет собой острова, соединенные двусторонними дорогами. Между некоторыми островами не существует пути по дорогам, даже через промежуточные острова, поэтому страна разделена на несколько областей. Более формально: каждый остров находится ровно в одной области, между любыми двумя островами из одной области существует путь, между любыми двумя островами из разных областей не существует пути. Область называется счастливой, если количество островов в ней является счастливым числом.

    Как настоящий президент, первым делом Петя решил построить себе президентский дворец. Будучи фанатом счастливых чисел, Петя хочет разместить свой дворец в одной из счастливых областей. Однако, таких областей в стране изначально может не быть. В этом случае Петя может строить дополнительные дороги между различными областями, тем самым объединяя эти области. Найдите, какое минимальное количество дорог нужно построить, чтобы появилась счастливая область.

    Входные данные

    В первой строке задано два целых числа n и m (1 ≤ n, m ≤ 105) — количество островов и количество дорог соответственно. В следующих m строках описываются дороги. Каждая дорога задана номерами островов, которые она соединяет: двумя целыми числами u и v (1 ≤ u, v ≤ n). Некоторые дороги могут соединять остров сам с собой, между парой островов может быть больше одной дороги. Числа в строках разделены ровно одним пробелом.

    Выходные данные

    Если решения не существует, выведите одно число «-1» (без кавычек). Иначе в первой строке выведите минимальное количество дорог r, которое нужно построить, чтобы получилась счастливая область.

    F. Задача о бегуне

    дп матрицы сортировки *2100

    Вы бежите по прямоугольному полю. Поле может быть представлено, как матрица, состоящая из 3 строк и m столбцов. (i, j) обозначает ячейку в i-й строке в j-м столбце.

    Вы начинаете в (2, 1) и хотите закончить путь в (2, m). Из ячейки (i, j) можно переходить в ячейки:

    • (i - 1, j + 1) — только при i > 1,
    • (i, j + 1), или
    • (i + 1, j + 1) — только при i < 3.

    Однако, на вашем пути есть n препятствий. k-е препятствие определяется тремя целыми числами ak, lk и rk, и запрещает посещать ячейки (ak, j) такие, что lk ≤ j ≤ rk.

    Посчитайте количество различных путей из (2, 1) в (2, m) и выведите его по модулю 109 + 7.

    Входные данные

    В первой строке записаны два целых числа n и m (1 ≤ n ≤ 104, 3 ≤ m ≤ 1018) — количество препятствий и количество столбцов в матрице соответственно.

    Затем идут n строк, в каждой записано по три целых числа ak, lk и rk (1 ≤ ak ≤ 3, 2 ≤ lk ≤ rk ≤ m - 1), определяющие препятствие, блокирующее ячейки (ak, j) такие, что lk ≤ j ≤ rk. Некоторые клетки могут быть заблокированы несколькими препятствиями.

    Выходные данные

    Выведите количество различных путей из (2, 1) в (2, m) по модулю 109 + 7. Если невозможно добраться из (2, 1) в (2, m), то количество путей равно 0.

    H. Подсчет путей

    дп Комбинаторика *2500

    Задано корневое дерево. Определим d(x) как высоту вершины x: высота корня равна 1, высоты любой другой вершины x равна d(y) + 1, где y — предок вершины x.

    У данного дерева есть следующее свойство: каждая вершина x с d(x) = i имеет ровно ai детей. Максимальная возможная глубина вершины равна n, an = 0.

    Определим fk как количество неупорядоченных пар вершин в дереве таких, что количество ребер на простом пути между ними равно k.

    Посчитайте fk по модулю 109 + 7 для всех 1 ≤ k ≤ 2n - 2.

    Входные данные

    В первой строке записано одно целое число n (2  ≤  n  ≤  5 000) — максимальная глубина вершины.

    Во второй строке записаны n - 1 целых чисел a1,  a2,  ...,  an - 1 (2 ≤  ai  ≤ 109), где ai — количество детей у каждой вершины x такой, что d(x) = i. Так как an = 0, оно не задается во входных данных.

    Выходные данные

    Выведите 2n - 2 чисел. В k-й строке выведите fk по модулю 109 + 7.

    Примечание

    Дерево из первого примера:

    F. Кучи

    Деревья дп *2600

    Дано дерево на n вершинах с корнем в вершине 1.

    Скажем, что в вершине u содержится k-ичная куча глубины m, если выполняется следующее:

    • При m = 1 вершина u сама является k-ичной кучей глубины 1.
    • При m > 1 вершина u является k-ичной кучей глубины m, если хотя бы k из ее детей являются k-ичными кучами глубины не менее m - 1.

    Определим dpk(u) как максимальную глубину k-ичной кучи по всем вершинам в поддереве u (включая u). Требуется посчитать значение .

    Входные данные

    В первой строке задано число вершин n (2 ≤ n ≤ 3·105).

    Следующие n - 1 строк содержат по два числа u, v, описывающие вершины, соединенные i-м ребром.

    Гарантируется, что заданная конфигурация образует дерево.

    Выходные данные

    В единственной строке выведите одно число — ответ на задачу.

    Примечание

    Рассмотрим первый пример.

    Для k ≥ 3 все значения dpk будут равны 1.

    При k = 2 dpk равняется 2 при и 1 в противном случае.

    При k = 1 значения dpk равны (3, 1, 2, 1).

    Таким образом, сумма равняется 4·1 + 4·1 + 2·2 + 2·1 + 3 + 1 + 2 + 1 = 21.

    C2. Encryption (medium)

    дп *2000

    Heidi has now broken the first level of encryption of the Death Star plans, and is staring at the screen presenting her with the description of the next code she has to enter. It looks surprisingly similar to the first one – seems like the Empire engineers were quite lazy...

    Heidi is once again given a sequence A, but now she is also given two integers k and p. She needs to find out what the encryption key S is.

    Let X be a sequence of integers, and p a positive integer. We define the score of X to be the sum of the elements of X modulo p.

    Heidi is given a sequence A that consists of N integers, and also given integers k and p. Her goal is to split A into k part such that:

    • Each part contains at least 1 element of A, and each part consists of contiguous elements of A.
    • No two parts overlap.
    • The total sum S of the scores of those parts is maximized.

    Output the sum S – the encryption code.

    Input

    The first line of the input contains three space-separated integer N, k and p (k ≤ N ≤ 20 000, 2 ≤ k ≤ 50, 2 ≤ p ≤ 100) – the number of elements in A, the number of parts A should be split into, and the modulo for computing scores, respectively.

    The second line contains N space-separated integers that are the elements of A. Each integer is from the interval [1, 1 000 000].

    Output

    Output the number S as described in the problem statement.

    Note

    In the first example, if the input sequence is split as (3, 4), (7), (2), the total score would be . It is easy to see that this score is maximum.

    In the second example, one possible way to obtain score 37 is to make the following split: (16, 3, 24), (13, 9), (8), (7), (5, 12, 12).

    C3. Encryption (hard)

    дп Структуры данных *2500

    Heidi is now just one code away from breaking the encryption of the Death Star plans. The screen that should be presenting her with the description of the next code looks almost like the previous one, though who would have thought that the evil Empire engineers would fill this small screen with several million digits! It is just ridiculous to think that anyone would read them all...

    Heidi is once again given a sequence A and two integers k and p. She needs to find out what the encryption key S is.

    Let X be a sequence of integers, and p a positive integer. We define the score of X to be the sum of the elements of X modulo p.

    Heidi is given a sequence A that consists of N integers, and also given integers k and p. Her goal is to split A into k parts such that:

    • Each part contains at least 1 element of A, and each part consists of contiguous elements of A.
    • No two parts overlap.
    • The total sum S of the scores of those parts is minimized (not maximized!).

    Output the sum S, which is the encryption code.

    Input

    The first line of the input contains three space-separated integers N, k and p (k ≤ N ≤ 500 000, 2 ≤ k ≤ 100, 2 ≤ p ≤ 100) – the number of elements in A, the number of parts A should be split into, and the modulo for computing scores, respectively.

    The second line contains N space-separated integers that are the elements of A. Each integer is from the interval [1, 1 000 000].

    Output

    Output the number S as described in the problem statement.

    Note

    In the first example, if the input sequence is split as (3), (4, 7), (2), the total score would be . It is easy to see that this score is the smallest possible.

    In the second example, one possible way to obtain score 13 is to make the following split: (16, 3), (24), (13), (9, 8), (7, 5, 12, 12).

    E2. Guard Duty (medium)

    Бинарный поиск дп жадные алгоритмы сортировки *2200

    Princess Heidi decided to give orders to all her K Rebel ship commanders in person. Unfortunately, she is currently travelling through hyperspace, and will leave it only at N specific moments t1, t2, ..., tN. The meetings with commanders must therefore start and stop at those times. Namely, each commander will board her ship at some time ti and disembark at some later time tj. Of course, Heidi needs to meet with all commanders, and no two meetings can be held during the same time. Two commanders cannot even meet at the beginnings/endings of the hyperspace jumps, because too many ships in one position could give out their coordinates to the enemy.

    Your task is to find minimum time that Princess Heidi has to spend on meetings, with her schedule satisfying the conditions above.

    Input

    The first line contains two integers K, N (2 ≤ 2K ≤ N ≤ 500000, K ≤ 5000). The second line contains N distinct integers t1, t2, ..., tN (1 ≤ ti ≤ 109) representing the times when Heidi leaves hyperspace.

    Output

    Output only one integer: the minimum time spent on meetings.

    Note

    In the first example, there are five valid schedules: [1, 4], [6, 7] with total time 4, [1, 4], [6, 12] with total time 9, [1, 4], [7, 12] with total time 8, [1, 6], [7, 12] with total time 10, and [4, 6], [7, 12] with total time 7. So the answer is 4.

    In the second example, there is only 1 valid schedule: [1, 2], [3, 4], [5, 6].

    For the third example, one possible schedule with total time 6 is: [1, 3], [4, 5], [14, 15], [23, 25].

    E. Махмуд, Эхаб, исключащее ИЛИ и минимальное остовное дерево

    битмаски графы дп математика реализация *1900

    Эхаб интересуется побитовым исключающим ИЛИ и особыми графами, поэтому Махмуд предложил ему задачу про оба его интереса сразу. У Махмуда есть полный граф, состоящий из n вершин, пронумерованных с 0 до n - 1. Для любых 0 ≤ u < v < n, вес ненаправленного ребра между вершинами u и v равен (где  — операция побитового исключающего ИЛИ). Можете ли вы найти вес минимального остовного дерева данного графа?

    Прочитать про полные графы можно в https://ru.wikipedia.org/wiki/Полный_граф.

    Прочитать про минимальное остовное дерево можно в https://ru.wikipedia.org/wiki/Минимальное_остовное_дерево.

    Вес минимального остовного дерева равен весу всех рёбер, включённых в него.

    Входные данные

    В единственной строке содержится одно целое число n (2 ≤ n ≤ 1012) — число вершин в графе.

    Выходные данные

    В единственной строке содержится одно целое число x — вес минимального остовного дерева данного графа.

    Примечание

    В первом примере: Вес минимального остовного дерева равен 1+2+1=4.

    F. Махмуд, Эхаб и ещё одна задача про исключающее ИЛИ

    битмаски дп математика матрицы *2400

    У Эхаба есть массив a из n целых чисел. Он любит операцию побитового исключающего ИЛИ, а ещё он любит надоедать Махмуду, поэтому он придумал для него задачу. Он дал Махмуду q запросов. В каждом из них он дал Махмуду два целых числа l и x и попросил его найти число подпоследовательностей первых l элементов массива таких, что побитовое исключающее ИЛИ всех этих чисел будет равно x. Можете ли вы помочь Махмуду ответить на запросы?

    Подпоследовательность может содержать не соседние элементы.

    Входные данные

    Первая строка содержит целые числа n и q (1 ≤ n, q ≤ 105) — число элементов в массиве и число запросов.

    В следующей строке содержится n целых чисел a1, a2, ..., an (0 ≤ ai < 220) — элементы массива.

    В каждой из следующих q строк содержатся целые числа l и x (1 ≤ l ≤ n, 0 ≤ x < 220) — запросы Эхаба.

    Выходные данные

    Для каждого запроса, выведите ответ по модулю 109 + 7 в новой строке.

    Примечание

    Побитовое исключающее ИЛИ всех чисел пустого множества равно 0, а побитовое исключающее ИЛИ всех чисел множества из одного элемента равно этому элементу.

    E. Знакопеременное дерево

    Деревья дп Комбинаторика поиск в глубину и подобное разделяй и властвуй Теория вероятностей *2300

    Вам дано дерево с \(n\) вершинами, пронумерованными с \(1\) до \(n\). В вершине \(i\) записано значение \(V_i\).

    Если простой путь от вершины \(u_1\) до вершины \(u_m\) состоит из \(m\) вершин, а именно из \(u_1 \rightarrow u_2 \rightarrow u_3 \rightarrow \dots u_{m-1} \rightarrow u_{m}\), то знакопеременная сумма для этого пути \(A(u_{1},u_{m})\) определяется как \(A(u_{1},u_{m}) = \sum\limits_{i=1}^{m} (-1)^{i+1} \cdot V_{u_{i}}\). Путь может содержать \(0\) рёбер, т. е. \(u_{1}=u_{m}\).

    Вычислите сумму знакопеременных сумм для всех различных простых путей в дереве. Обратите внимание, пути ориентированны: два пути считаются различными, если у них различное начало или различный конец. Так как ответ может быть большим, выведите остаток от деления его на \(10^{9}+7\).

    Входные данные

    В первой строке содержится целое число \(n\) \((2 \leq n \leq 2\cdot10^{5} )\) — число вершин в дереве.

    Во второй строке содержатся \(n\) целых чисел \(V_1, V_2, \ldots, V_n\) (\(-10^9\leq V_i \leq 10^9\)) — значения, записанные в вершинах.

    В каждой из следующих \(n-1\) строк содержатся два целых числа \(u\) и \(v\) \((1\leq u, v\leq n, u \neq v)\), разделённых пробелом, означающих, что в дереве есть ребро, соединяющее вершины \(u\) и \(v\). Гарантируется, что заданный граф является деревом.

    Выходные данные

    Выведите сумму знакопеременных сумм по всем различным простым путям в дереве по модулю \(10^{9}+7\).

    Примечание

    Рассмотрим первый пример.

    Знакопеременная сумма для простого пути из вершины \(1\) в вершину \(2\): \(1 \rightarrow 2\) равна \(A(1,2) = 1 \cdot (-4)+(-1) \cdot 1 = -5\).

    Знакопеременная сумма для простого пути из вершины \(1\) в вершину \(3\): \(1 \rightarrow 3\) равна \(A(1,3) = 1 \cdot (-4)+(-1) \cdot 5 = -9\).

    Знакопеременная сумма для простого пути из вершины \(2\) в вершину \(4\): \(2 \rightarrow 1 \rightarrow 4\) равна \(A(2,4) = 1 \cdot (1)+(-1) \cdot (-4)+1 \cdot (-2) = 3\).

    Простой путь из вершины \(1\) в вершину \(1\) содержит только вершину \(1\), поэтому \(A(1,1) = 1 \cdot (-4) = -4\).

    Аналогично, \(A(2, 1) = 5\), \(A(3, 1) = 9\), \(A(4, 2) = 3\), \(A(1, 4) = -2\), \(A(4, 1) = 2\), \(A(2, 2) = 1\), \(A(3, 3) = 5\), \(A(4, 4) = -2\), \(A(3, 4) = 7\), \(A(4, 3) = 7\), \(A(2, 3) = 10\), \(A(3, 2) = 10\). Поэтому ответ равен \((-5) + (-9) + 3 + (-4) + 5 + 9 + 3 + (-2) + 2 + 1 + 5 + (-2) + 7 + 7 + 10 + 10 = 40\).

    F. Прогулка

    графы дп Структуры данных *2100

    Вам дан ориентированный граф с n вершинами и m рёбер, каждое из которых имеет определённый вес.

    В нём могут быть кратные рёбра и петли, кроме того, граф может быть несвязным.

    Вам нужно выбрать путь (возможно, проходящий по одному и тому же ребру или вершине несколько раз) такой, что веса рёбер в пути находятся в строго возрастающем порядке, а кроме того, все ребра пути идут в том же порядке, в котором они находились во входных данных. Найдите максимально возможное количество ребер в таком пути.

    Обратите внимание, ребра пути не обязательно должны идти последовательно во входных данных.

    Входные данные

    В первой строке содержатся два целых числа n и m (1 ≤ n ≤ 100000,1 ≤ m ≤ 100000) — число вершин и рёбер в графе соответственно.

    После этого следует m строк, в i-й из которых содержится три целых числа, разделённых пробелами — ai, bi и wi (1 ≤ ai, bi ≤ n, 0 ≤ wi ≤ 100000), обозначающих, что есть ребро от вершины ai до вершины bi с весом wi.

    Выходные данные

    Выведите одно целое число в одной строке — максимальное количество рёбер в пути.

    Примечание

    Ответ на первый пример — 2: .

    Заметим, что нельзя выбрать путь , потому что ребро появляется в вводе раньше, чем два других ребра, и поэтому его нельзя выбрать после того, как было выбрано какое-то из двух других рёбер.

    Во втором примере оптимально выбрать 1-е, 3-е и 5-е ребра, чтобы получить оптимальный ответ: .

    G. Бандитский блюз

    бпф дп Комбинаторика математика *2900

    Джапате, путешествуя через леса Мала, увидел N мешков с золотом, лежащих в ряд. У каждого мешка есть своя масса, отличная от масс других мешков, от 1 до N. Джапате может унести с собой только один мешок с золотом, поэтому он использует стратегию для выбора мешка: изначально он стартует с пустым мешком (массы 0), после чего начинает идти вдоль ряда мешков, и если он видит, что текущий мешок тяжелее мешка в его руках, он подбирает текущий мешок.

    Джапате понял, что если он пойдёт слева направо, то он подберёт A мешков, а если он пойдёт справа налево, он подберёт B мешков.

    Теперь ему интересно, сколько существует таких перестановок мешков, в которых он подбирает A мешков, идя слева направо и B мешков, идя справа налево, используя вышеупомянутую стратегию.

    Так как ответ может быть крайне велик, выведите его по модулю 998244353.

    Входные данные

    В единственной строке ввода содержится три целых числа, разделённых пробелами — N (1 ≤ N ≤ 105), A и B (0 ≤ A, B ≤ N)

    Выходные данные

    Выведите одно целое число — число подходящих перестановок по модулю 998244353.

    Примечание

    В примере 1 единственная возможная перестановка — [1]

    В примерах 2 и 3 возможны всего две перестановки размера 2:{[1, 2], [2, 1]}. Величины a и b для первой перестановки равны 2 и 1 соответственно, а для второй перестановки эти величины равны 1 и 2 соответственно.

    В примере 4 из 120 возможных перестановок [1, 2, 3, 4, 5] всего 22 удовлетворяют заданным в примере a и b.

    B. Сон на лекции

    дп реализация Структуры данных *1200

    Вы со своим другом Мишкой сидите на лекции по математическому анализу. Лекция длится n минут. Лектор рассказывает ai теорем в течение i-й минуты.

    Хотя Мишке очень нравится математический анализ, иногда очень трудно не засыпать во время лекции. Вам задан массив t поведения Мишки. Если он спит в течение i-й минуты лекции, то ti равняется 0, иначе оно равняется 1. Когда Мишка не спит, он записывает все теоремы, которые слышит — ai теорем в течение i-й минуты. Иначе он не записывает ничего.

    Вы знаете некоторую секретную технику, при помощи которой можно заставить не спать Мишку в течение k минут подряд. Но вы можете использовать её только один раз. Вы можете начать использовать её в любую минуту с 1 по n - k + 1. Если вы используете её в минуту i, Мишка не будет спать во все такие минуты j, что , и будет записывать все лекции, которые расскажет лектор.

    Ваша задача состоит в том, чтобы посчитать, какое максимальное количество теорем Мишка сможет записать, если вы используете секретную технику, чтобы заставить его не спать, только один раз.

    Входные данные

    Первая строка входных данных содержит два целых числа n и k (1 ≤ k ≤ n ≤ 105) — длительность лекции в минутах и количество минут, на которое вы можете заставить Мишку не спать.

    Вторая строка входных данных содержит n целых чисел a1, a2, ... an (1 ≤ ai ≤ 104) — количество теорем, которые лектор рассказывает в течение i-й минуты.

    Третья строка входных данных содержит n целых чисел t1, t2, ... tn (0 ≤ ti ≤ 1) — тип поведения Мишки во время i-й минуты лекции.

    Выходные данные

    Выведите единственное целое число — максимальное количество теорем, которое Мишка сможет записать, если вы используете секретную технику, чтобы заставить его не спать, только один раз.

    Примечание

    В примере лучше всего использовать секретную технику в начале третьей минуты. Тогда количество теорем, которое Мишка сможет записать, будет равно 16.

    B. Уничтожение дерева

    Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное *2000

    Дано дерево (граф состоящий из n вершин, соединенных n - 1 ребрами, в котором от каждой вершины можно добраться до каждой, двигаясь только по ребрам).

    Вершину можно уничтожить если из нее выходит четное число ребер, при этом уничтожаются все ребра, выходящие из нее.

    Требуется уничтожить все вершины в дереве, либо сказать, что это невозможно.

    Входные данные

    В первой строке задано целое число n (1 ≤ n ≤ 2·105) — количество вершин в дереве.

    Во второй строке заданы n целых чисел p1, p2, ..., pn (0 ≤ pi ≤ n). Если pi ≠ 0, то существует ребро между вершинами с номерами i и pi. Гарантируется, что задано дерево.

    Выходные данные

    Если уничтожить все вершины возможно, выведите «YES» (без кавычек), иначе выведите «NO» (без кавычек).

    Если возможно уничтожить все вершины, в следующих n строках выведите номера вершин в порядке, в котором их надо уничтожать. Если существует несколько способов удалить все вершины, выведите любой.

    Примечание

    В первом примере сначала нужно уничтожить вершину с номером 1 (при ее уничтожении удалятся ребра (1, 2) и (1, 4)), затем 2-ю (удаляются ребра (2, 3) и (2, 5)). После этого в дереве не остается ребер, поэтому оставшиеся вершины можно уничтожать в любом порядке.

    E. Короткий код

    Деревья дп жадные алгоритмы Строки Структуры данных *2200

    Код Аркадия содержит \(n\) переменных. Каждая переменная имеет уникальное имя, состоящее только из английских строчных (маленьких) букв. Однажды Аркадий решил укоротить свой код.

    Он хочет заменить имя каждой переменной его непустым префиксом таким образом, что новые имена останутся попарно различными (но новое имя какой-либо переменной может совпадать со старым именем этой или другой переменной). Среди всех таких возможных замен он хочет найти такую, для которой суммарная длина названий переменных будет минимальной.

    Строка \(a\) является префиксом строки \(b\), если вы можете удалить несколько (возможно, ни одного) символа с конца строки \(b\) и получить \(a\).

    Найдите минимальную возможную суммарную длину новых имён.

    Входные данные

    В первой строке содержится одно целое число \(n\) (\(1 \le n \le 10^5\)) — число переменных в коде Аркадия.

    Следующие \(n\) строк содержат названия переменных по одному на строку. Каждое название не является пустой строкой и содержит только лишь строчные (маленькие) английские буквы. Суммарная длина всех этих строк не больше \(10^5\). Все названия переменных различны.

    Выходные данные

    Выведите одно целое число — минимально возможную суммарную длину новых названий переменных.

    Примечание

    В первом примере одним из наилучших вариантов будет сокращение имён в порядке их ввода до "cod", "co", "c".

    Во втором примере можно укоротить последнее имя до "aac" и первое имя до "a" без изменения других имён переменных.

    F. Последовательная подпоследовательность

    дп *1700

    Вам задан массив целых чисел длины \(n\).

    Вам необходимо выбрать такую подпоследовательность этого массива максимальной длины, что эта подпоследовательность является возрастающей последовательностью подряд идущих целых чисел. Иными словами подпоследовательность должна иметь вид \([x, x + 1, \dots, x + k - 1]\) для некоторого \(x\) и длины \(k\).

    Подпоследовательность массива может быть получена при помощи удаления некоторого (возможно, нулевого) количества элементов из массива. Можно удалять элементы, которые не идут подряд. Оставшиеся элементы должны сохранить свой порядок. Например, для массива \([5, 3, 1, 2, 4]\) следующие массивы являются подпоследовательностями: \([3]\), \([5, 3, 1, 2, 4]\), \([5, 1, 4]\), а массив \([1, 3]\) не является.

    Входные данные

    Первая строка входных данных содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массива. Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — сам массив.

    Выходные данные

    В первой строке выведите \(k\) — максимальную длину подпоследовательности заданного массива, которая образует возрастающую последовательность подряд идущих целых чисел.

    Во второй строке выведите последовательность индексов любой подпоследовательности заданного массива максимальной длины, которая образует возрастающую последовательность подряд идущих целых чисел.

    Примечание

    Все возможные правильные ответы для первого тестового примера (как последовательности индексов):

    • \([1, 3, 5, 6]\)
    • \([2, 3, 5, 6]\)

    Все возможные правильные ответы для второго тестового примера :

    • \([1, 4]\)
    • \([2, 5]\)
    • \([3, 6]\)

    Все возможные правильные ответы для третьего тестового примера :

    • \([1]\)
    • \([2]\)
    • \([3]\)
    • \([4]\)

    Все возможные правильные ответы для четвертого тестового примера:

    • \([1, 2, 3, 7, 8, 9]\)

    D. Куро, НОД, побитовое исключающее ИЛИ, сумма и все-все-все

    Бинарный поиск битмаски Деревья дп жадные алгоритмы математика Перебор снм Строки Структуры данных теория чисел *2200

    Куро играет в обучающую игру про числа. Основные математические операции в этой игре — наибольший общий делитель, побитовое исключающее ИЛИ и сумма двух чисел. Куро так любит эту игру, что проходит уровень за уровнем изо дня в день.

    К сожалению, Куро уезжает в отпуск и будет неспособна продолжить череду решений. Поскольку Кэти — надёжный человек, Куро попросил её прийти к нему домой в этот день и поиграть за него.

    Изначально дан пустой массив \(a\). Игр состоит из \(q\) запросов двух разных типов. Запросы первого типа просят Кэти добавить число \(u_i\) в массив \(a\). Запросы второго типа просят Кэти найти такое число \(v\), принадлежащее массиву \(a\), что \(k_i \mid GCD(x_i, v)\), \(x_i + v \leq s_i\), и \(x_i \oplus v\) максимально, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ, \(GCD(c, d)\) обозначает наибольший общий делитель целых чисел \(c\) и \(d\), а \(y \mid x\) означает, что \(x\) делится на \(y\), или же вывести -1, если таких чисел в массиве нет.

    Поскольку вы программист, Кэти просит вас написать программу, которая будет автоматически и точно выполнять внутриигровые запросы, чтобы выполнить поручения Куро. Давайте поможем ей!

    Входные данные

    В первой строке содержится одно целое число \(q\) (\(2 \leq q \leq 10^{5}\)) — число внутриигровых запросов.

    Далее следует \(q\) строк, каждая из которых начинается с целого числа \(t_i\) — типа запроса:

    • Если \(t_i = 1\), далее следует целое число \(u_i\) (\(1 \leq u_i \leq 10^{5}\)) — вам необходимо лобавить \(u_i\) в массив \(a\).
    • Если \(t_i = 2\), далее следует три целых числа \(x_i\), \(k_i\) и \(s_i\) (\(1 \leq x_i, k_i, s_i \leq 10^{5}\)). Это означает, что вам необходимо найти такое число \(v\), принадлежащее массиву \(a\), что \(k_i \mid GCD(x_i, v)\), \(x_i + v \leq s_i\), а \(x_i \oplus v\) максимально, где \(\oplus\) обозначает побитовое исключающее ИЛИ, или вывести -1, если таких чисел в массиве нет.

    Гарантируется, что первый запрос имеет тип \(1\) и что существует хотя бы один запрос типа \(2\).

    Выходные данные

    Для каждого запроса типа \(2\) выведите запрашиваемое число \(v\) или -1, если таких чисел не найдено, в отдельной строке.

    Примечание

    В первом примере необходимо выполнить пять запросов:

    • Первый запрос просит вас добавить \(1\) в \(a\). Теперь \(a\) — \(\left\{1\right\}\).
    • Второй запрос просит вас добавить \(2\) в \(a\). Теперь \(a\) — \(\left\{1, 2\right\}\).
    • Третий запрос просит вас найти ответ с \(x = 1\), \(k = 1\) и \(s = 3\). И \(1\), и \(2\) удовлетворяют условиям на \(v\), так как \(1 \mid GCD(1, v)\) и \(1 + v \leq 3\). Поскольку \(2 \oplus 1 = 3 > 1 \oplus 1 = 0\), ответом на этот запрос будет \(2\).
    • Четвёртый запрос просит вас найти ответ с \(x = 1\), \(k = 1\) и \(s = 2\). Только \(v = 1\) удовлетворяет условия \(1 \mid GCD(1, v)\) и \(1 + v \leq 2\), поэтому ответом на этот запрос будет \(1\).
    • Пятый запрос просит вас найти ответ с \(x = 1\), \(k = 1\) и \(s = 1\). В \(a\) нет удовлетворяющих условиям элементов, поэтому мы выводим -1 как ответ на этот запрос.

    E. Куро и Топологическая четность

    дп *2400

    Куро только что выиграл соревнование «Самый умный кот». Три друзья решили отпраздновать эту победу, поиграв в различные игры.

    Куро попросил Кэти придумать игру, для которой нужны только бумага, карандаш, ножницы и много стрелок (считайте, что стрелок бесконечно много). Кэти тут же придумала игру и назвала ее Топологическая четность.

    На бумаге рисуют \(n\) прямоугольников, пронумерованных от \(1\) до \(n\). Широ раскрашивает некоторые прямоугольники в некоторые цвета. А именно, \(i\)-й прямоугольник раскрашивается в цвет \(c_{i}\), где \(c_{i} = 0\) означает черный цвет, \(c_{i} = 1\) — белый, а \(c_{i} = -1\) означает, что этот прямоугольник не покрашен.

    Правила игры просты. Игроки могут добавлять стрелки между различными прямоугольниками, причем каждая стрелка должна начинаться в прямоугольнике с меньшим номером, чем прямоугольник, в котором она заканчивается. Кроме того, игроки должны выбрать цвет (\(0\) или \(1\)) для каждого еще не покрашенного прямоугольника. Между двумя прямоугольниками должно быть не более одной стрелки. Результатом игры будет количество путей из прямоугольников чередующихся цветов. Например, пути, составляющие цвета \([1 \to 0 \to 1 \to 0]\), \([0 \to 1 \to 0 \to 1]\), \([1]\), \([0]\) будут посчитаны. Из прямоугольника \(x\) можно перейти в прямоугольник \(y\), если и только если есть стрелка из \(x\) в \(y\).

    Куро понравилась игра, но он придумал, как сделать ее еще лучше. Он любит играть с четностью чисел. Его любимая четность равна \(p\), где \(p = 0\) обозначает «четное», а \(p = 1\) — «нечетное». Он хочет расставить стрелки и покрасить оставшиеся прямоугольники так, чтобы результат игры имел четность \(p\).

    Так как может существовать много вариантов так расставить стрелки и выбрать цвета, посчитайте количество способов сделать это по модулю \(10^{9} + 7\).

    Входные данные

    Первая строка содержит два целых числа \(n\) и \(p\) (\(1 \leq n \leq 50\), \(0 \leq p \leq 1\)) — количество прямоугольников и любимая четность Куро.

    Вторая строка содержит \(n\) целых чисел \(c_{1}, c_{2}, ..., c_{n}\) (\(-1 \leq c_{i} \leq 1\)) — цвета прямоугольников.

    Выходные данные

    Выведите одно число — число способов расставить стрелки и выбрать оставшиеся цвета так, чтобы число путей с чередующимися цветами имело такую же четность, как и \(p\).

    Примечание

    В первом примере есть \(6\) способов покрасить кусочки и нарисовать стрелки, они показаны на рисунке ниже. Результаты игр в верхней строке равны \(3, 3, 5\), во второй — \(5, 3, 3\), слева направо.

    E. Помогите Крокодилу Гене

    дп игры математика Теория вероятностей *2700

    Крокодил Гена и Чебурашка (как вы, наверное, догадались, тоже обитатели Тридевятого царства, Тридесятого государства) решили сыграть в карточную игру под названием ЕОИгра. Правила очень просты: изначально у Крокодила Гены в руках m карт, у Чебурашки — n карт (игроки не видят карты друг друга), и еще одна карта лежит на столе рубашкой вверх, так что оба игрока тоже не видят ее. Таким образом, всего в начале игры m + n + 1 карта, и игроки знают состав колоды и свои карты (но не знают, какая карта лежит на столе, а какие –– в руках у другого игрока). Игроки ходят по очереди, начинает Крокодил Гена. Своим ходом игрок может:

    • Попытаться угадать карту, которая лежит на столе. В случае если он угадывает — игра заканчивается, и он считается победителем. Если он не угадывает — игра также заканчивается, но победителем считается его соперник.
    • Назвать любую карту из колоды. В случае если у соперника есть такая карта — он обязан показать ее и вывести из игры. Если же у него нет такой карты — он сообщает об этом.
    Недавно Чебурашка стал принимать какие-то желтые таблеточки, и постоянно выигрывать у Крокодила Гены. Теперь Крокодил Гена хочет определить свои шансы на победу в случае, если и он тоже начнет принимать эти таблеточки.

    Помогите Крокодилу Гене в предположении, что таблеточки качественные, и после них оба игрока начинают играть оптимальным образом.

    Входные данные

    В первой строке через пробел записаны целые числа m и n (0 ≤ m, n ≤ 1000).

    Выходные данные

    Выведите через пробел вероятности победы Крокодила Гены и Чебурашки соответственно, с абсолютной погрешностью не более 10 - 9.

    D. Идеальные группы

    дп математика теория чисел *2100

    SaMer написал лучший тест всех времён и народов для одной из его задач. В этой задаче требуется для данного массива целых чисел найти минимальное число групп, на которое можно разбить данный массив так, что произведение любых двух чисел в одной группе — точный квадрат.

    Каждое целое число должно находиться ровно в одной группе, однако числа в группе не обязательно должны быть последовательными в массиве.

    SaMer хочет создать больше тестов из того теста, который у него уже есть. Его тест является массивом \(A\) из \(n\) целых чисел и ему необходимо найти число подмассивов \(A\), состоящих из чисел, идущих в изначальном массиве последовательно, таких, что ответ на задачу для подмассива будет равен \(k\), для всех \(k\) от \(1\) до \(n\) включительно.

    Входные данные

    В первой строке содержится одно целое число \(n\) (\(1 \leq n \leq 5000\)) — размер массива.

    Во второй строке содержится \(n\) целых чисел \(a_1\),\(a_2\),\(\dots\),\(a_n\) (\(-10^8 \leq a_i \leq 10^8\)) — значения чисел в массиве.

    Выходные данные

    Выведите \(n\) целых чисел, разделённых пробелами, \(k\)-е из которых должно быть равно числу подмассивов \(A\), состоящих из чисел, идущих в изначальном массиве последовательно, ответ для которых на задачу равен \(k\).

    F. От кактуса до дерева

    графы Деревья дп *2900

    Вам дан специальный связный неориентированный граф, в котором каждая вершина принадлежит максимум к одному простому циклу.

    Ваша задача — убрать из этого графа столько рёбер, сколько необходимо, чтобы превратить этот граф в дерево (связный граф без циклов).

    Для каждой вершины независимо выведите максимальное расстояние от неё до листа в результирующем дереве, предполагая, что рёбра были убраны так, чтобы минимизировать данное расстояние.

    Входные данные

    В первой строке ввода содержится два целых числа \(n\) и \(m\) (\(1 \leq n \leq 5\cdot 10^5\)) — число вершин и рёбер в изначальном графе соответственно.

    В каждой из следующих \(m\) строк содержится по два целых числа \(u\) and \(v\) (\(1 \leq u,v \leq n\), \(u \ne v\)), означающих, что в графе есть ребро, соединяющее вершины \(u\) и \(v\). Каждая пара вершин соединена максимум одним ребром.

    Гарантируется, что данный вам граф связен и каждая вершина в нём принадлежит максимум к одному простому циклу.

    Выходные данные

    Выведите \(n\) целых чисел, разделённых пробелами, \(i\)-е из которых обозначает максимальное расстояние между вершиной \(i\) и листом дерева, если убранные рёбра были выбраны таким образом, что это расстояние минимально среди всех возможных вариантов убирания рёбер.

    Примечание

    В первом примере один из возможных путей минимизации максимального расстояния от вершины \(1\) — убирание отмеченных на следующем изображении рёбер:

    Обратите внимание, что для минимизации ответа для разных вершин можно убирать разные ребра.

    D. Книжные полки

    битмаски дп жадные алгоритмы *1900

    Мистер Кекс — типичный офисный работник в Байтландии.

    У него в офисе стоит одна большая книжная полка, на каждой книге на ней написана стоимость — целое положительное число.

    Он оценивает стоимость полки как сумму стоимостей книг на ней.

    Но случилось прекрасное, мистера Кекса повысили! И ему предстоит переезд в новый офис.

    Он узнал, что в его новом офисе будет не одна книжная полка, а \(k\) полок, и решил, что будет оценивать красоту \(k\) полок как побитовое И стоимостей всех полок.

    Также он решил, что не будет тратить время на перестановку книг, поэтому на первую полку он поместит сколько-то первых книг, на вторую сколько-то следующих, и так далее. Конечно, на каждую полку он поместит хотя бы одну книгу. Таким образом, он хочет расставить имеющиеся у него книги по \(k\) полкам так, чтобы красота этих полок была максимальна. Вычислите для него эту максимально возможную красоту.

    Входные данные

    В первой строке расположены два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 50\)) — количество книг на полке в старом офисе мистера Кекса и количество полок в новом.

    Во второй строке расположены \(n\) целых чисел \(a_1, a_2, \ldots a_n\), (\(0 < a_i < 2^{50}\)) — стоимости книг в том порядке, в котором они сейчас стоят на полке.

    Выходные данные

    Выведите максимально возможную красоту \(k\) полок в новом офисе мистера Кекса.

    Примечание

    В первом тестовом примере можно воспользоваться следующим разбиением книг на полки:

    \(\)(9 + 14 + 28 + 1 + 7) \& (13 + 15) \& (29 + 2) \& (31) = 24.\(\)

    Во втором тестовом примере можно воспользоваться следующим разбиением книг на полки:

    \(\)(3 + 14 + 15 + 92) \& (65) \& (35 + 89) = 64.\(\)

    E. Прибавления на отрезках

    битмаски дп разделяй и властвуй Структуры данных *2200

    Гриша пришел на контест и увидел там следующую задачу.

    Дан массив длины \(n\), изначально состоящий из нулей. Элементы массива пронумерованы от \(1\) до \(n\). К массиву было применено \(q\) операций. \(i\)-я операция задается тремя целыми числами \(l_i\), \(r_i\) и \(x_i\) (\(1 \leq l_i \leq r_i \leq n\)), (\(1 \leq x_i \leq n\)) и означает, что к элементам с номерами \(l_i, l_i + 1, \ldots, r_i\) прибавили число \(x_i\). Требуется найти максимум в массиве после применения всех этих операций.

    Но Гриша не из глупых! Он решил эту задачу очень быстро.

    Однако что-то в нем переклинило, и он задумался: «интересно, а какие значения может принять максимум в массиве после применения некоторого подмножества данных операций?».

    Помогите Грише, найдите все такие целые числа \(y\) от \(1\) до \(n\), что после применения некоторого (возможно, пустого) подмножества данных операций максимум в массиве равен \(y\).

    Входные данные

    В первой строке находятся два целых числа \(n\) и \(q\) (\(1 \leq n, q \leq 10^{4}\)) — длина массива и количество запросов в исходной задаче.

    В следующих \(q\) строках описаны запросы, по одному в строке. \(i\)-я из этих строк содержит три целых числа \(l_i\), \(r_i\) и \(x_i\) (\(1 \leq l_i \leq r_i \leq n\), \(1 \leq x_i \leq n\)), что обозначает запрос на добавление числа \(x_i\) на отрезке с \(l_i\)-го по \(r_i\)-й элемент включительно.

    Выходные данные

    В первую строку выведите единственное число \(k\), обозначающее количество возможных целых чисел от \(1\) до \(n\), которым может быть равен максимум в массиве после применения некоторого (возможно, пустого) подмножества данных операций.

    В следующей строке выведите через пробел все \(k\) чисел от \(1\) до \(n\) — возможные значения максимума. Выводите эти числа в возрастающем порядке.

    Примечание

    Если в первом тестовом примере оставить только первый запрос, то максимум будет равен \(1\). Если оставить только второй запрос, то максимум будет равен \(2\). Если оставить первые два запроса, то максимум будет равен \(3\). Если оставить только третий запрос, то максимум будет равен \(4\). Но если оставить третий запрос и еще какой-то, максимум будет больше \(n\), поэтому его выводить не требуется.

    Во втором тестовом примере, оставив только первый запрос, можно получить \(1\). Оставив только второй, можно получить \(2\). А если оставить все запросы, максимум будет равен \(3\).

    В третьем тестовом примере можно получить максимумы так:

    • Можно получить максимум \(2\) оставив запросы: \((1)\).
    • Можно получить максимум \(3\) оставив запросы: \((2)\).
    • Можно получить максимум \(5\) оставив запросы: \((1, 2)\).
    • Можно получить максимум \(6\) оставив запросы: \((3)\).
    • Можно получить максимум \(8\) оставив запросы: \((1, 3)\).
    • Можно получить максимум \(9\) оставив запросы: \((2, 3)\).

    H. K путей

    бпф дп Комбинаторика математика Структуры данных *3100

    Дано дерево из \(n\) вершин. Требуется выбрать \(k\) (не обязательно различных) простых путей так, чтобы все ребра дерева можно было разбить на три множества: ребра, которые не принадлежит ни одному из путей, ребра, которые принадлежат ровно одному из этих пути, и ребра, которые принадлежат всем путям, причем последнее множество должно содержать хотя бы одно ребро.

    Посчитайте количество способов так выбрать \(k\) путей по модулю \(998244353\).

    Пути пронумерованы, иными словами, два способа считаются различными, если существует такое \(i\) (\(1 \leq i \leq k\)) и ребро, которое присутствует в \(i\)-м пути в одном способе и отсутствует в другом.

    Входные данные

    В первой строке даны два целых числа \(n\) и \(k\) (\(1 \leq n, k \leq 10^{5}\)) — число вершин в дереве и необходимое число путей.

    В следующих \(n - 1\) строках содержится описание ребер дерева. В каждой строке находятся два целых числа \(a\) и \(b\) (\(1 \le a, b \le n\), \(a \ne b\)) — концы очередного ребра. Гарантируется, что заданные ребра образуют дерево.

    Выходные данные

    Выведите количество способов выбрать \(k\) пронумерованных не обязательно различных простых путей так, чтобы по каждому ребру дерева проходило либо ни одного пути, либо проходил один путь, либо \(k\), и пересечение всех путей было непустым.

    Так как ответ может быть большим, выведите его по модулю \(998244353\).

    Примечание

    В первом примере подходят следующие последовательности путей:

    • \(((1,2), (1,2))\),
    • \(((1,2), (1,3))\),
    • \(((1,3), (1,2))\),
    • \(((1,3), (1,3))\),
    • \(((1,3), (2,3))\),
    • \(((2,3), (1,3))\),
    • \(((2,3), (2,3))\).

    Во втором примере \(k=1\), поэтому подходят все \(n \cdot (n - 1) / 2 = 5 \cdot 4 / 2 = 10\) путей.

    В третьем примере ответ \(\geq 998244353\), поэтому он был взят по модулю \(998244353\), не забудьте про это!

    C. Удали их всех!

    графы Деревья дп жадные алгоритмы поиск в глубину и подобное *1500

    Дано дерево из \(n\) вершин.

    Необходимо ответить на следующий вопрос: какое максимальное количество ребер можно удалить из дерева так, чтобы все получившиеся компоненты связности содержали в себе четное количество вершин?

    Входные данные

    В первой строке задано число вершин \(n\) (\(1 \le n \le 10^5\)).

    Следующие \(n - 1\) строк содержат по два числа \(u\), \(v\) (\(1 \le u, v \le n\)), описывающие вершины, соединенные \(i\)-м ребром.

    Гарантируется, что заданная конфигурация образует дерево.

    Выходные данные

    Выведите единственное число \(k\) — максимальное количество ребер, которое можно удалить, чтобы все компоненты связности имели четное число вершин, или \(-1\), если нельзя удалить ребра так, чтобы все компоненты связности имели четное число вершин.

    Примечание

    В первом тестовом примере можно удалить ребро, соединяющее вершины \(1\) и \(4\), тогда граф распадется на две компоненты связности, в каждой из которых по две вершины.

    Во втором тестовом примере нельзя удалить ребра так, чтобы все компоненты связности имели четное число вершин, поэтому ответ \(-1\).

    B. XOR-пирамида

    дп *1800

    Для массива \(b\) длины \(m\) определим функцию \(f\):

    \( f(b) = \begin{cases} b[1] & \quad \text{если } m = 1 \\ f(b[1] \oplus b[2],b[2] \oplus b[3],\dots,b[m-1] \oplus b[m]) & \quad \text{в остальных случаях,} \end{cases} \)

    где \(\oplus\) — операция побитового исключающего ИЛИ.

    К примеру, \(f(1,2,4,8)=f(1\oplus2,2\oplus4,4\oplus8)=f(3,6,12)=f(3\oplus6,6\oplus12)=f(5,10)=f(5\oplus10)=f(15)=15\)

    Вам дан массив \(a\) и несколько запросов. Каждый запрос — пара целых чисел \(l\) и \(r\). В качестве ответа на запрос вам нужно вывести максимальное значение функции \(f\) по всем непрерывным подотрезкам массива \(a_l, a_{l+1}, \ldots, a_r\).

    Входные данные

    Первая строка содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — число элементов в массиве \(a\).

    Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2^{30}-1\)) — элементы массива.

    Третья строка содержит одно целое число \(q\) (\(1 \le q \le 100\,000\)) — количество запросов.

    Каждая из следующих \(q\) строк содержит запрос — два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)).

    Выходные данные

    Выведите \(q\) строк — ответы на запросы.

    Примечание

    В первом примере оптимально в обоих запросах взять отрезок целиком.

    Во втором примере оптимальный отрезок для первого запроса — \([3,6]\), для второго — \([2,5]\), для третьего — \([3,4]\), для четвертого — \([1,2]\).

    C. Лифт

    графы дп кратчайшие пути *2400

    Вы работаете в большом офисе, которое представляет из себя 9-этажное здание с одним лифтом, вмещающим 4 человека. В ваши обязанности входит управлять этим лифтом.

    Сегодня вы опоздали на работу, и у лифта уже выстроились очереди на разных этажах. Про каждого человека известно, на каком этаже он сейчас находится и на какой этаж хочет попасть. Также известен порядок, в котором люди подходили к лифту.

    По правилам компании, если сотрудник подошел к лифту раньше другого, то он должен оказаться внутри лифта раньше (даже если они находятся на разных этажах). Выходить сотрудники могут в любом порядке.

    У лифта есть две команды:

    • Проехать на один этаж вверх/вниз. На перемещение тратится 1 секунда.
    • Открыть двери на этаже. После этого все сотрудники, которым нужно выйти на этом этаже выйдут из лифта. После этого сотрудники, находящиеся на этаже, начнут заходить в лифт в порядке очереди, пока это не противоречит правилам и в лифте достаточно места. Люди заходят и выходят последовательно, каждый тратит 1 секунду на вход или выход.

    Изначально лифт находится на 1 этаже.

    Вам интересно, сколько нужно времени, чтобы доставить всех сотрудников на нужные этажи. Не обязательно возвращать лифт на 1 этаж.

    Входные данные

    В первой строке дано целое число n (1 ≤ n ≤ 2000) — число сотрудников в очереди.

    i-я из следующих n строк содержит два целых числа ai и bi (1 ≤ ai, bi ≤ 9, ai ≠ bi) — этаж, на котором находится сотрудник, и этаж, на который он хочет попасть.

    Сотрудники даны в порядке, в котором они подходили к лифту.

    Выходные данные

    Выведите одно целое число — минимальное время в секундах.

    Примечание
    Пояснение к первому примеру t = 0

    t = 2

    t = 3

    t = 5

    t = 6

    t = 7

    t = 9

    t = 10

    E. Коробки с карандашами

    Бинарный поиск дп жадные алгоритмы Структуры данных *2100

    На день рождения Мишка получил в подарок разноцветные карандаши! К сожалению, он живет в монохромном мире, где все одного и того же цвета, и имеет смысл исключительно насыщенность цвета. Эту упаковку можно представить в виде последовательности a1, a2, ..., an из n целых чисел — насышенность цвета каждого карандаша. Теперь Мишка хочет навести порядок в этой упаковке. Для этого он подготовил бесконечное количество пустых коробок. Он хочет их заполнить таким образом, чтобы:

    • Каждый карандаш лежал ровно в одной коробке;
    • В каждой непустой коробке лежало не меньше k карандашей;
    • Если карандаши i и j лежат в одной и той же коробке, то |ai - aj| ≤ d, где |x| означает модуль числа x. Обратите внимание, что обратное условие может не выполняться, могут быть такие карандаши i и j, что |ai - aj| ≤ d и они лежат в различных коробках.

    Помогите Мишке определить, можно ли распределить все карандаши по коробкам. Выведите "YES", если существует такое распределение. Иначе выведите "NO".

    Входные данные

    В первой строке записаны три целых числа n, k и d (1 ≤ k ≤ n ≤ 5·105, 0 ≤ d ≤ 109) — количество карандашей, минимальный размер любой непустой коробки и максимальная разница в насыщенности какой-либо пары карандашей, лежащих в одной коробке, соответственно.

    Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — насыщенности цветов каждого карандаша.

    Выходные данные

    Выведите "YES", если можно распределить все карандаши по коробкам так, чтобы все условия выполнялись. Иначе выведите "NO".

    Примечание

    В первом примере можно разделить все карандаши на 2 коробки по 3 карандаша любым образом. Также можно положить все карандаши в одну коробку, разница в насыщенности между любой парой карандашей в ней не будет превосходить 10.

    Во втором примере можно разделить карандаши насыщенностей [4, 5, 3, 4] на 2 коробки размера 2 и положить оставшиеся в еще одну коробку.

    C. Три табло

    дп Перебор реализация *1400

    Середина 2018-го года и на границе Краснокаменска, что в Забайкальском крае, Мария Степановна хочет арендовать три электронных табло для обращения внимания жителей на важную проблему.

    Вдоль дороги в один ряд стоят \(n\) электронных табло, причем на \(i\)-м табло текст может отображаться только со шрифтом размера \(s_i\). Мария Степановна хочет арендовать три таких табло с индексами \(i < j < k\), что размер шрифта строго увеличиваются при проезде в определенную сторону, а именно, должно выполняться \(s_i < s_j < s_k\).

    Стоимость аренды \(i\)-го табло равна \(c_i\). Определите, какую минимальную стоимость должна заплатить Мария Степановна.

    Входные данные

    В первой строке находится одно целое число \(n\) (\(3 \le n \le 3\,000\)) — число электронных табло.

    Во второй строке находятся \(n\) целых чисел \(s_1, s_2, \ldots, s_n\) (\(1 \le s_i \le 10^9\)) — размеры шрифтов на табло при движении вдоль дороги.

    В третьей строке находятся \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 10^8\)) — стоимости аренды табло.

    Выходные данные

    Если не существует трех подходящих табло, выведите -1. В противном случае, выведите одно целое число — минимальную стоимость аренды трех табло с индексами \(i < j < k\) таких, что \(s_i < s_j < s_k\).

    Примечание

    В первом примере можно, например, выбрать табло \(1\), \(4\) и \(5\), так как \(s_1 < s_4 < s_5\) (\(2 < 4 < 10\)), а суммарная стоимость равна \(40 + 10 + 40 = 90\).

    Во втором примере невозможно выбрать подходящую тройку табло, поэтому ответ -1.

    F. Дожди и зонтики

    дп *2100

    Поликарп живет на координатной прямой в точке \(x = 0\). Он отправился в гости к своему другу, который живет в точке \(x = a\). Поликарп двигается только слева направо, преодолевает одну единицу длины за одну секунду.

    В настоящий момент идет дождь, поэтому некоторые участки его пути находятся под дождем. Формально: дождь льет на \(n\) непересекающихся отрезках, \(i\)-й отрезок под дождем имеет вид \([l_i, r_i]\) (\(0 \le l_i < r_i \le a\)).

    На координатной прямой есть \(m\) зонтиков, \(i\)-й зонтик расположен в точке \(x_i\) (\(0 \le x_i \le a\)) и имеет массу \(p_i\). В начале своего путешествия Поликарп не несет ни одного зонтика.

    По пути из \(x = 0\) в \(x = a\) Поликарп может подбирать и оставлять зонтики. Как подбор, так и сброс зонтика осуществляется мгновенно. Поликарп может нести произвольное количество зонтиков одновременно. Так как Поликарп не хочет промокнуть, то при перемещении из \(x\) в \(x + 1\) он должен обязательно нести хотя бы один зонтик, если отрезок \([x, x + 1]\) находится под дождем (то есть существует такое \(i\), что \(l_i \le x\) и \(x + 1 \le r_i\)).

    Написанное выше условие — единственное требование к маршруту Поликарпа. Например, допустимо дойти без зонтика до точки, в которой начинается дождь, подобрать в этой точке зонтик и продолжить путь уже под зонтиком. Например, Поликарп может сменить зонтик, находясь под дождем — подобрать новый зонтик и одновременно оставить старый, находясь в промежуточной точке участка под дождем.

    При каждом перемещении на единицу вправо к усталости Поликарпа прибавляется суммарная масса всех зонтиков, которые он несет.

    Сможет ли Поликарп добраться из точки \(x = 0\) в точку \(x = a\)? В случае положительного ответа найдите наименьшую суммарную усталость, с которой Поликарп придет в точку \(x = a\), если будет подбирать и оставлять зонтики оптимальным образом.

    Входные данные

    В первой строке входных данных записано три целых числа \(a\), \(n\) и \(m\) (\(1 \le a, m \le 2000, 1 \le n \le \lceil\frac{a}{2}\rceil\)) — точка, в которой живет друг Поликарпа, количество отрезков, в которых идет дождь и количество зонтиков.

    В следующих \(n\) строках записано по два целых числа \(l_i\) и \(r_i\) (\(0 \le l_i < r_i \le a\)) — границы \(i\)-го отрезка, на котором льет дождь. Гарантируется, что никакая пара отрезков не пересекается. Иными словами, для любой пары отрезков \(i\) и \(j\) либо \(r_i < l_j\), либо \(r_j < l_i\).

    В следующих \(m\) строках записано по два целых числа \(x_i\) и \(p_i\) (\(0 \le x_i \le a\), \(1 \le p_i \le 10^5\)) — расположение и масса \(i\)-го зонтика соответственно.

    Выходные данные

    Выведите «-1» (без кавычек), если Поликарп не сможет добраться из точки \(x = 0\) в точку \(x = a\). Иначе выведите одно целое число — наименьшую суммарную усталость, с которой Поликарп придет в точку \(x = a\), если будет подбирать и оставлять зонтики оптимальным образом.

    Примечание

    В первом тестовом примере единственная возможная стратегия — взять четвертый зонтик в точке \(x = 1\) и идти с ним до точки \(x = 7\) (суммарная усталость в точке \(x = 7\) будет равна \(12\)), оставить его, пройти от \(x = 7\) до \(x = 8\) без зонтика, взять третий зонтик в точке \(x = 8\) и идти с ним до конца (суммарная усталость в точке \(x = 10\) будет равна \(14\)).

    Во втором тестовом примере единственная возможная стратегия — взять первый зонтик, пройти с ним до точки \(x = 9\), выбросить его и завершить путь без зонтика.

    E. Ночной транс

    геометрия дп матрицы Теория вероятностей *2700

    Под легким прохладным бризом на воде появляется рябь.

    — Вода приходит и уходит, но не исчезает насовсем. Луна убывает и прибывает, но остается того же размера.

    — Все приходящее. Все также вечно.

    Канно не видит большого смысла в словах Мино, но, наверное, сейчас стоит просто насладиться легким бризом и ночным небом — неиссякаемыми дарами природы.

    Глядя в звездное небо, Канно погружается в спокойный сон.

    На плоскости отмечено множество \(S\) из \(n\) точек.

    Канно начинает из некоторой точки плоскости \(P\), которою может выбрать самостоятельно. \(P\) не добавляется в \(S\), если, конечно, изначально не принадлежит \(S\). Затем следующая последовательность операций (вместе называющихся шагом) повторяется несколько раз:

    1. Выбирается прямая \(l\) такая, что она проходит через как минимум две точки из \(S\) и через текущую позицию Канно. Если таких прямых несколько, из них с равной вероятностью выбирается одна.
    2. Канно переходит в одну из точек из множества \(S\) на прямой \(l\). Точка назначения выбирается равновероятно из всех возможных, включая текущую позицию Канно, если она, конечно, принадлежит \(S\).

    Вам даны \(q\) запросов, каждый из них состоит из двух целых чисел \((t_i, m_i)\). Для каждого запроса выведите максимально возможную вероятность для Канно оказаться в \(t_i\)-й точке множества \(S\) после \(m_i\) шагов при выборе оптимальной стартовой точки \(P\). Обратите внимание, в соответствии с правилом 1 \(P\) должна принадлежать как минимум одной прямой, которая проходит через две точки из \(S\).

    Входные данные

    Первая строка содержит одно целое положительное число \(n\) (\(2 \leq n \leq 200\)) — количество точек в \(S\).

    \(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^4 \leq x_i, y_i \leq 10^4\)) — координаты \(i\)-й точки множества \(S\). Гарантируется, что для всех \(1 \leq i \lt j \leq n\) выполняется \((x_i, y_i) \neq (x_j, y_j)\).

    Следующая строка содержит одно целое число \(q\) (\(1 \leq q \leq 200\)) — количество запросов.

    Каждая из следующих \(q\) строк содержит два целых числа \(t\) и \(m\) (\(1 \leq t_i \leq n\), \(1 \leq m_i \leq 10^4\)) — номер точки финиша и количество шагов, соответственно.

    Выходные данные

    Выведите \(q\) строк, каждая из которых содержит одно вещественное число. \(i\)-е из этих чисел должно быть равно максимально возможной вероятности оказаться в точке \(t_i\) после \(m_i\) шагов при оптимальном выборе начальной точки \(P\).

    Ваш ответ будет считаться правильным, если каждое из чисел, выведенных вами, отличается от ответа жюри не более чем на \(10^{-6}\).

    Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(|a - b| \le 10^{-6}\).

    Примечание

    Точки множества \(S\) и все возможные прямые \(l\) показаны на рисунке ниже.

    В первом примере если выбрать точку \(P = (-1, -3)\), то в качестве \(l\) будет обязательно выбрана точка \(3x = y\), поэтому Канно переместится в \((0, 0)\) с вероятностью \(\frac 1 2\).

    В третьем запросе если выбрать точку \(P = (2, 2)\), то \(l\) будет выбрана с равной вероятностью между \(x + y = 4\) и \(x = y\). Тогда Канно переместится в остальные четыре точки с вероятностью \(\frac 1 2 \cdot \frac 1 3 = \frac 1 6\) для каждой точки, и останется в \((2, 2)\) с вероятностью \(\frac 1 3\).

    F. Управление потоками

    Деревья дп жадные алгоритмы поиск в глубину и подобное *2400

    Вам необходимо настроить очень сложную водораспределительную систему. Система состоит из \(n\) узлов и \(m\) труб, \(i\)-я труба соединяет узлы \(x_i\) и \(y_i\).

    Вам нужно всего лишь подобрать настройки труб. Требуется выбрать \(m\) целых чисел \(f_1\), \(f_2\), ..., \(f_m\) для того, что использовать их в качестве настроек соответствующих труб. \(i\)-я труба будет пересылать \(f_i\) единиц воды в секунду из узла \(x_i\) в узел \(y_i\) (если \(f_i\) отрицательно, то труба будет пересылать \(|f_i|\) единиц воды из узла \(y_i\) в узел \(x_i\)). Разрешается выставлять \(f_i\) значение от \(-2 \cdot 10^9\) до \(2 \cdot 10^9\).

    Для корректной работы системы необходимо также соблюдать следующие ограничения: для каждого \(i \in [1, n]\), \(i\)-му узлу присвоено число \(s_i\), означающее, что разница между входным и выходным потоками для \(i\)-го узла должна быть ровно \(s_i\) (если \(s_i\) неотрицательно, то \(i\)-й узел должен принимать \(s_i\) единиц воды; если отрицательно, то \(i\)-й узел должен отдавать \(|s_i|\) единиц воды другим узлам).

    Можно ли выбрать целые числа \(f_1\), \(f_2\), ..., \(f_m\) таким образом, чтобы все ограничения на входные и выходные потоки соблюдались?

    Входные данные

    В первой строке записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество узлов.

    Во второй строке записаны \(n\) целых чисел \(s_1, s_2, \dots, s_n\) (\(-10^4 \le s_i \le 10^4\)) — ограничения для узлов.

    В третьей строке записано одно целое число \(m\) (\(0 \le m \le 2 \cdot 10^5\)) — количество труб.

    В \(i\)-й из следующих \(m\) строк записаны два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\)) — описание \(i\)-й трубы. Гарантируется, что каждая неупорядоченная пара \((x, y)\) встретится во входных данных не более одного раза (это значит, что после первого вхождения \((x, y)\) не будет пар \((x, y)\) и \((y, x)\)). Гарантируется, что для каждой пары узлов существует некоторый путь по трубам, соединяющий их.

    Выходные данные

    Если можно выбрать целые числа \(f_1, f_2, \dots, f_m\) таким образом, что все ограничения на входные и выходные потоки соблюдаются, то выведите «Possible» в первой строке. После выведите \(m\) строк, в \(i\)-й строке должно быть записано число \(f_i\) — выбранные настройки труб. Трубы пронумерованы в порядке, в котором появляются во входных данных.

    В противном случае выведите «Impossible» в единственной строке.

    G. Подсчёт GCD

    Деревья дп разделяй и властвуй снм теория чисел *2400

    Дано дерево из \(n\) вершин. На каждой вершине дерева записано число; на \(i\)-й вершине записано число \(a_i\).

    Определим функцию \(g(x, y)\) как наибольший общий делитель всех чисел, записанных на вершинах на простом пути от вершины \(x\) до вершины \(y\) (включая эти две вершины).

    Для каждого целого числа от \(1\) до \(2 \cdot 10^5\) подсчитайте количество таких пар \((x, y)\) \((1 \le x \le y \le n)\), что \(g(x, y)\) равен этому числу.

    Входные данные

    В первой строке задано целое число \(n\) \((1 \le n \le 2 \cdot 10^5)\) — количество вершин.

    Во второй строке задано \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) \((1 \le a_i \le 2 \cdot 10^5)\) — числа, записанные на вершинах дерева.

    Затем следует \(n - 1\) строка, каждая из которых содержит два числа \(x\) и \(y\) \((1 \le x, y \le n, x \ne y)\), обозначающие ребро между вершиной \(x\) и вершиной \(y\). Гарантируется, что эти ребра задают дерево.

    Выходные данные

    Для каждого целого числа \(i\) от \(1\) до \(2 \cdot 10^5\) необходимо сделать следующее: если не существует таких пар \((x, y)\), что \(x \le y\) и \(g(x, y) = i\), не выводите ничего; иначе выведите два числа: \(i\) и количество описанных пар. Значения \(i\) нужно выводить в возрастающем порядке.

    Посмотрите примеры для лучшего понимания.

    D. Слонопотамы

    дп жадные алгоритмы *1500

    Слонопотам — фигура, состоящая из трёх клеток, образующих «уголок». Эту фигуру можно поворачивать на 90, 180 и 270 градусов, так что получаются 4 возможных положения:


    XX XX .X X.
    X. .X XX XX

    Слонопотамы — мирные фигуры, в отличие от классических шахматных фигур, они не бьют никакие клетки, два слонопотама могут стоять даже рядом друг с другом — главное, чтобы они занимали разные клетки.

    У Васи есть доска \(2\times n\) клеток, на которой он хочет разместить несколько слонопотамов. К сожалению, часть клеток доски уже заняты пешками, на эти клетки ставить другие фигуры нельзя. С другой стороны, пешки дружат со слонопотамами, поэтому тоже не бьют слонопотамов, даже если они стоят рядом.

    Зная расположение пешек на доске, подскажите Васе, какое наибольшее количество слонопотамов он может одновременно разместить на доске так, чтобы они не пересекались друг с другом и не занимали клетки с пешками.

    Входные данные

    Входной файл содержит две непустые строки, задающие доску Васи. Строки состоят только из символов «0» (ноль), обозначающих свободные клетки доски, и символов «X» (заглавная латинская буква), соответствующих клеткам, занятым пешками. Строки непустые, имеют одинаковую длину, не превышающую \(100\).

    Выходные данные

    Вывести единственное число — наибольшее количество слонопотамов, которое можно разместить на заданной доске.

    D. Вычислительная мощность

    Бинарный поиск дп жадные алгоритмы *2500

    Вам необходимо выполнить некоторое количество задач, для каждой задачи известно, сколько процессоров надо, чтобы ее выполнить, и сколько мощности она потребит.

    У вас есть достаточное количество аналоговых компьютеров, каждый с достаточным количеством процессоров для любой задачи. Каждый компьютер может выполнять не более одной задачи в каждый момент времени, и не более чем две за все время. Первая задача может быть любой, вторая задача должна потреблять строго меньше мощности чем первая. Вы планируете назначить между одной и двумя задачами на каждый компьютер так, что каждая задача будет назначена ровно на один компьютер. Затем вы запустите первую задачу на каждом компьютере, подождете, пока они все выполнятся, и запустите вторую задачу на всех компьютерах, на которых назначено две задачи.

    Если во время выполнения первых задач средняя мощность на процессор (сумма мощностей всех запущенных задач деленная на сумму занятых всеми задачами процессоров) превысит некоторую неизвестную величину, вся система взорвется после окончания вычислений, и вы не сможете выполнить вторые задачи. На вторые задачи такого ограничения нет. Найдите минимальную величину, которую не должна превышать средняя мощность на процессор, при которой возможно выполнить все задачи.

    Ввиду специфики задачи, нужно найти ответ умноженный на 1000 и округленный вверх.

    Входные данные

    Первая строка содержит одно число n (1 ≤ n ≤ 50) — количество задач.

    Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 108), где число ai задает мощность, которую потребит i-я задача.

    Третья строка содержит n целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 100) — где bi равно количеству процессоров, которые требуются для i-й задачи.

    Выходные данные

    Выведите одно число — минимальную величину, которую не должна превышать средняя мощность на процессор, при которой возможно назначить все задачи так, чтобы система не взорвалась после первого раунда, умноженную на 1000 и округленную вверх.

    Примечание

    В первом примере оптимальная стратегия запустить каждую задачу на отдельном компьютере, получив среднюю мощность на процессор в первом (и единственном) раунде 9.

    Во втором примере можно запустить задачи с потреблением мощности 10 и 9 на одном компьютере, задачи с потреблением 10 и 8 на втором, и задачи с потреблением 9 и 8 на третьем, получая среднюю нагрузку в первом раунде (10 + 10 + 9) / (10 + 10 + 5) = 1.16.

    F. Зарплаты в комуупании

    Деревья дп Комбинаторика математика *2700

    Аллен выпустился из Муусского техмулогоческого института (MIT) и основал стартап! Аллен — президент стартапа. Он нанял \(n-1\) работника, у каждого из которых есть один непосредственный начальник. Если \(u\) является начальником \(v\), а \(v\) является начальником \(w\), то \(u\) является начальником \(w\). Кроме того, нет таких \(u\) и \(v\), что \(u\) является начальником \(v\) и \(v\) является начальником \(u\). У Аллена нет начальников. Аллен — сотрудник номер \(1\), все остальные пронумерованы от \(2\) до \(n\).

    Наконец, Аллен должен назначить каждому в компании, включая себя, зарплату. Из-за бюджетных ограничений зарплата каждого из сотрудников должна быть между \(1\) и \(D\) включительно. Кроме того, никто не может получать больше, чем его начальник.

    Помогите Аллену найти количество способов назначить сотрудникам зарплаты. Эта величина может быть достаточно большой, поэтому выведите ее по модулю \(10^9 + 7\).

    Входные данные

    Первая строка содержит два целых числа \(n\) и \(D\) (\(1 \le n \le 3000\), \(1 \le D \le 10^9\)).

    Каждая из следующих \(n-1\) строк содержит одно целое число, где \(i\)-я строка содержит целое число \(p_i\) (\(1 \le p_i \le i\)). \(p_i\) обозначает номер непосредственного начальника сотрудника номер \(i+1\).

    Выходные данные

    Выведите одно целое число: количество способов назначить зарплаты по модулю \(10^9 + 7\).

    Примечание

    В первом примере сотрудники с номерами 2 и 3 подчиняются непосредственно Аллену. Три зарплаты по порядку могут быть \((1,1,1)\), \((2,1,1)\), \((2,1,2)\), \((2,2,1)\) или \((2,2,2)\).

    Во втором примере сотрудник 2 подчиняется Аллену, а сотрудник 3 подчиняется сотруднику 2. Возможные зарплаты равны \((1,1,1)\), \((2,1,1)\), \((2,2,1)\), \((2,2,2)\), \((3,1,1)\), \((3,2,1)\), \((3,2,2)\), \((3,3,1)\), \((3,3,2)\), \((3,3,3)\).

    A. Выиграть в лотерею

    дп жадные алгоритмы *800

    У Аллена много денег, а именно, на счету в банке у него \(n\) долларов. По соображениям безопасности он хочет снять всю сумму наличными, мы не будет здесь описывать эти соображения. Номиналы долларовых купюр равны \(1\), \(5\), \(10\), \(20\), \(100\). Какое минимальное число купюр должен получить Аллен после того, как снимет все деньги?

    Входные данные

    Первая и единственная строка содержит одно целое число \(n\) (\(1 \le n \le 10^9\)).

    Выходные данные

    Выведите минимальное число купюр, которые должен получить Аллен.

    Примечание

    В первом примере Аллен может получить одну \(100\)-долларовую купюру, одну купюру в \(20\) долларов и одну купюру в \(5\) долларов. Нельзя получить \(125\) долларов с помощью одной или двух купюр.

    Во втором примере Аллен может получить две \(20\)-долларовые купюры и три купюры в \(1\) доллар.

    В третьем примере Аллен может снять \(100000000\) (десять миллионов!) \(100\)-долларовых купюр.

    B. Римские цифры

    дп жадные алгоритмы Комбинаторика математика Перебор *2000

    Рассмотрим систему счисления, основанную на упрощенных римских цифрах. Есть цифры I, V, X, L соответствующие значениям \(1\), \(5\), \(10\) и \(50\) соответственно. Другие римские цифры использовать нельзя.

    Числа в такой системе счисления записываются как последовательности из одной или более цифр. Определим значение записи просто как сумму всех цифр в ней.

    Например, запись XXXV соответствует числу \(35\), а запись IXI — числу \(12\).

    Заметим, что это отличается от традиционной римской системы счисления — например, любая последовательность цифр является корректной, а также порядок цифр не имеет значения (например, запись IX означает \(11\), а не \(9\)).

    Несложно заметить, что одно и то же число можно выразить несколькими способами. Вычислите сколько существует различных чисел, которые можно записать используя хотя бы одну запись из ровно \(n\) римских римских цифр I, V, X и L.

    Входные данные

    В единственной строке входного файла дано целое число \(n\) (\(1 \le n \le 10^9\)) — число римских цифр в записи чисел.

    Выходные данные

    Выведите одно число — количество различных чисел, которые можно выразить используя ровно \(n\) римских цифр I, V, X и L.

    Примечание

    В первом примере есть ровно \(4\) различных числа, которые можно получить — I, V, X и L.

    Во втором примере можно получить числа \(2\) (II), \(6\) (VI), \(10\) (VV), \(11\) (XI), \(15\) (XV), \(20\) (XX), \(51\) (IL), \(55\) (VL), \(60\) (XL) и \(100\) (LL).

    B. Распил

    дп жадные алгоритмы сортировки *1200

    Существует достаточно много вещей, которые можно распилить — деревья, гантели (которые золотые), бюджетные средства. В этой задаче вам предстоит распилить последовательность целых чисел.

    Вам дана последовательность целых чисел, содержащая одинаковое количество чётных и нечётных чисел. Требуется в условиях ограниченного бюджета провести максимальное число разрезов, которые разделят на последовательность на непустые отрезки, на каждом из которых количество чётных чисел равно количеству нечётных чисел.

    Разрезы разделяют последовательность на непрерывные подряд идущие отрезки. Вы можете думать о разрезе, как о вертикальном разделителе между парой соседних элементов. Таким образом, после разрезов каждый элемент принадлежит ровно одному отрезку. Например, возможен случай: \([4, 1, 2, 3, 4, 5, 4, 4, 5, 5]\) \(\to\) два разреза \(\to\) \([4, 1 | 2, 3, 4, 5 | 4, 4, 5, 5]\). После разрезов на каждом отрезке количество четных элементов должно быть равно количеству нечётных.

    Стоимость разреза между числами \(x\) и \(y\) составляет \(|x - y|\) биткоинов. Найдите максимальное количество разрезов, которые можно сделать, потратив при этом не более \(B\) биткоинов.

    Входные данные

    Первая строка содержит целое число \(n\) (\(2 \le n \le 100\)) и целое число \(B\) (\(1 \le B \le 100\)) — размер последовательности и количество биткоинов, которое у вас есть.

    Вторая строка содержит \(n\) чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 100\)) — элементы последовательности. Последовательность содержит одинаковое количество чётных и нечётных элементов.

    Выходные данные

    Выведите одно число — максимальное количество разрезов, которые можно провести, потратив не более \(B\) биткоинов.

    Примечание

    В первом примере следует разрезать между числом \(2\) и \(5\), стоимость разреза составит \(3\) биткоина.

    Во втором примере нельзя сделать ни одного разреза вне зависимости от числа биткоинов.

    В третьем примере последовательность следует разрезать между числами \(2\) и \(3\) и между числами \(4\) и \(5\). Суммарная стоимость составляет \(1 + 1 = 2\) биткоина.

    F. Карты и радость

    дп *2000

    За карточным столом сидят \(n\) игроков. У каждого из них есть свое любимое число. Любимое число \(j\)-го игрока равно \(f_j\).

    На столе перед игроками лежит \(k \cdot n\) карт, на карте с номером \(i\) записано число \(c_i\). Также известен массив \(h_1, h_2, \dots, h_k\), смысл которого будет объяснён ниже.

    Игроки должны каким-то образом разобрать все карты так, чтобы каждому из них досталось ровно \(k\) карт. После того, как игроки разберут все карты, каждый из них подсчитает количество своих карт, на которых записано его любимое число. Радость игрока составит \(h_t\), где \(t\) — количество карт игрока, содержащих его любимое число. Если ни одна карта игрока не содержит его любимое число (то есть его \(t=0\)), то радость игрока равна \(0\).

    Выведите возможную максимальную суммарную радость игроков после раздачи всех карт. Обратите внимание, что задана одна последовательность \(h_1, \dots, h_k\) на всех игроков.

    Входные данные

    В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le n \le 500, 1 \le k \le 10\)) — количество игроков и количество карт, которое должен получить каждый из игроков.

    Во второй строке записаны \(k \cdot n\) целых чисел \(c_1, c_2, \dots, c_{k \cdot n}\) (\(1 \le c_i \le 10^5\)) — числа, записанные на картах.

    В третьей строке записаны \(n\) целых чисел \(f_1, f_2, \dots, f_n\) (\(1 \le f_j \le 10^5\)) — любимые числа каждого из игроков.

    В четвертой строке записаны \(k\) целых чисел \(h_1, h_2, \dots, h_k\) (\(1 \le h_t \le 10^5\)), где \(h_t\) — радость игрока (для всех игроков это значение одинаково), если он получит ровно \(t\) карт, на которых записано его любимое число. Гарантируется, что для любого \(t \in [2..k]\) верно, что \(h_{t - 1} < h_t\).

    Выходные данные

    Выведите одно целое число — максимальную суммарную радость всех игроков после оптимальной раздачи карт.

    Примечание

    В первом тестовом примере выгоднее всего распределить карты следующим образом:

    • Игрок номер \(1\) получает карты с числами \([1, 3, 8]\);
    • Игрок номер \(2\) получает карты с числами \([2, 2, 8]\);
    • Игрок номер \(3\) получает карты с числами \([2, 2, 8]\);
    • Игрок номер \(4\) получает карты с числами \([5, 5, 5]\).

    Таким образом, ответ будет равен \(2 + 6 + 6 + 7 = 21\).

    Во втором тестовом примере никто не получит ни одной карты с любимым числом, поэтому ответ равен \(0\).

    Зелье от морской болезни

    Бинарный поиск реализация дп *1100

    Шкипер Баг ужасно страдает от морской болезни. Единственное спасение — зелье «Штиль», которое продаётся в лавках на островах архипелага. На n островах цены разные: в i-м порту бутылка стоит xi дублонов.

    Каждый раз, когда «Нулевой указатель» заходит в порт, у Шкипера Бага с собой разная сумма — зависит от того, не украл ли корабельный кот монеты из кармана. Всего таких заходов будет q. Для каждого захода Шкипер Баг хочет заранее знать: в скольких портах архипелага он смог бы купить зелье, имея столько дублонов?

    Формат входных данных
    Первая строка: n (1≤n≤100 000) — количество портов.
    Вторая строка: n чисел  xi​ (1≤xi≤100 000) — цены на зелье.
    Третья строка: q (1≤q≤100 000) — количество заходов в порт.
    Следующие q строк: число mi​ (1≤mi≤109) — дублоны Шкипера Бага при i-м заходе.

    Формат выходных данных
    q чисел — для каждого захода количество портов, где хватит денег.


    Примечание: 
    При 1 дублоне ни одна лавка недоступна. При 8 — можно купить в 4 лавках (цены 2, 3, 4, 7). При 3 — только одна лавка (цена 2). При 100 дублонах — все пять.

    Великая Цепь Курсов

    дп *1700

    Штурманский журнал «Нулевого указателя» содержит n записей о курсах корабля — каждая запись это целое число (градусы поворота за день). Капитан Архипов считает, что самый красивый маршрут — это когда курсы идут строго последовательными целыми числами: x, x+1, x+2, … Он называет это Великой Цепью.

    Найдите наидлиннейшую подпоследовательность записей (не обязательно подряд), которая образует Великую Цепь. Выведите её длину и номера записей в журнале. Если существует несколько подпоследовательностей максимальной длины — можно вывести любую.

    «И не вздумай вывести только длину», — добавил Архипов, не отрываясь от чая.


    Формат входных данных

    Первая строка: n (1 ≤ n ≤ 200 000).

    Вторая строка: n чисел ai (1 ≤ ai ≤ 109) — курсы по дням.


    Формат выходных данных

    Первая строка: длина наибольшей Великой Цепи.

    Вторая строка: номера записей в порядке возрастания (нумерация с 1).

     

    Примечание: Журнал: 5 3 1 2 4 1 3 (7 записей).

    Записи №3, 4, 5, 7 имеют курсы 1, 2, 3, 4 — они идут подряд с шагом 1, образуя Великую Цепь длиной 4.

    Например, записи №1, 2, 7 дают курсы 5, 3, 3 — не подходят (не последовательные).

    Записи №6, 4, 5 дают 1, 2, 4 — тоже не подходят (пропущено 3).

    Если существует несколько подпоследовательностей максимальной длины — можно вывести любую.

    Ёлочная гирлянда

    Строки дп жадные алгоритмы *1300

    Ёлочная гирлянда состоит из n лампочек, пронумерованных от 1 до n. Каждая лампочка либо горит (обозначим «1»), либо не горит («0»). Текущее состояние гирлянды задано строкой a.

    Монтажник Егор хочет, чтобы гирлянда выглядела по-праздничному — в виде строки b (тоже из нулей и единиц, той же длины n). Менять строку b нельзя — это «образец».

    С гирляндой a Егор может выполнять две операции:

    • Переключить одну лампочку. Выбрать позицию i (1 ≤ i ≤ n) и поменять её состояние (0 → 1 или 1 → 0). Стоимость такой операции — 1 рубль.
    • Поменять местами две лампочки. Выбрать две позиции i и j (1 ≤ i, j ≤ n) и поменять состояния этих лампочек местами. Стоимость такой операции — |i - j| рублей, то есть расстояние между позициями.

    Помогите Егору найти минимальную суммарную стоимость, с которой можно превратить гирлянду a в гирлянду b.
     

    Формат входных данных

    В первой строке — целое число n (1 ≤ n ≤ 106) — количество лампочек в гирлянде.

    Во второй строке — строка a длины n, состоящая только из символов «0» и «1», — текущее состояние гирлянды.

    В третьей строке — строка b длины n, состоящая только из символов «0» и «1», — желаемое состояние гирлянды.
     

    Формат выходных данных

    Одно целое число — минимальная суммарная стоимость, которую нужно заплатить, чтобы превратить a в b.

    Бинарная сила

    дп Динамическое программирование на поддеревьях графы

    Вы играете в игру «Бинарная Сила» и управляете персонажем, у которого есть 𝑑 = 2𝑛 навыков, пронумерованных 1 до 𝑑. Эти навыки расположены на листьях полного двоичного дерева высоты 𝑛, изначально все навыки имеют уровень 1. Пример такого дерева для 𝑛 = 3 приведен на иллюстрации ниже.



    После этого вы начинаете прокачивать навыки следующим образом.
    • Навыки прокачиваются посредством заполнения двоичного дерева снизу вверх.
    • Для очередной вершины дерева вы должны выбрать и записать в нее один из двух навыков, записанных в
    непосредственных детях этой вершины (на рисунке из детей в родителя ведут стрелки).
    • Уровнем навыка считается число вершин, в которых выбран этот навык.
    Пример корректного распределения навыков по дереву для 𝑛 = 3 приведен ниже.


    В этом примере первый навык имеет уровень 4, седьмой – уровень 3, четвертый и пятый – уровень 2, а второй, третий, шестой и восьмой не были прокачаны ни разу, поэтому остались на уровне 1.
    Кроме прокачки персонажа, в игре есть 𝑚 различных квестов, с помощью которых можно получать монетки. Квесты активируются после того, как все дерево навыков было заполнено.
    Квесты бывают трех типов:
    1. «𝑙𝑒𝑠𝑠 𝑥𝑖 𝑘𝑖 𝑠𝑖» – вы получите 𝑠𝑖 монет, если уровень навыка с номером 𝑥𝑖 окажется строго меньше 𝑘𝑖 .
    2. «𝑒𝑥𝑎𝑐𝑡 𝑥𝑖 𝑘𝑖 𝑠𝑖» – вы получите 𝑠𝑖 монет, если уровень навыка с номером 𝑥𝑖 окажется равен 𝑘𝑖 .
    3. «𝑙𝑒𝑠𝑠 𝑥𝑖 𝑘𝑖 𝑠𝑖» – вы получите 𝑠𝑖 монет, если уровень навыка с номером 𝑥𝑖 окажется строго больше 𝑘𝑖 .
    Так как монеты – очень ценный ресурс в игре «Бинарная Сила», вы хотите узнать максимальное количество монет, которое возможно получить с помощью имеющихся квестов после улучшения всех навыков.

    Формат входных данных
    Каждый тест состоит из нескольких независимых наборов входных данных. Первая строка содержит одно целое число 𝑡 – количество наборов входных данных (1 ≤ 𝑡 ≤ 104). Далее следует описание наборов входных данных.
    Каждый набор начинается со строки, содержащей два целых числа 𝑛 и 𝑚 – высоту дерева навыков и количество квестов соответственно (1 ≤ 𝑛 ≤ 15; 0 ≤ 𝑚 ≤ 50 000). Число навыков при этом равно 𝑑 = 2𝑛.
    Далее следуют 𝑚 строк, 𝑖-я из которых содержит четыре целых числа 𝑡𝑖, 𝑥𝑖, 𝑘𝑖, 𝑠𝑖 – тип квеста и его описание (1 ≤ 𝑡𝑖 ≤ 3; 1 ≤ 𝑥𝑖 ≤ 𝑑; 1 ≤ 𝑘𝑖 ≤ 𝑛; 1 ≤ 𝑠𝑖 ≤ 109). Типы квестов следуют в том же порядке, в котором они перечислены в условии: 𝑡𝑖=1 соответствует квесту типа «𝑙𝑒𝑠𝑠», 𝑡𝑖 = 2 – квесту типа «𝑒𝑥𝑎𝑐𝑡» и 𝑡𝑖 = 3 – квесту типа «𝑚𝑜𝑟𝑒».
    Гарантируется, что сумма 𝑑 по всем наборам входных данных не превосходит 216 и сумма 𝑚 по всем наборам входных данных не превосходит 50 000

    Формат выходных данных
    Для каждого набора выходных данных в отдельной строке выведите единственное число – максимальное количество монет, которые можно заработать.
     

    Why Did the Cow Cross the Road II

    дп

    Фермер Джон продолжает исследование перехода коровами дороги на его ферме, описанной в предыдущей задаче. Он выяснил, что взаимодействие между некоторыми парами пород приемлемо, если они дружественные, а это характеризуется номерами пород следующим образом: Породы \(a\) и \(b\) дружественные, если \(|a - b| \leq 4\), и недружественные в противном случае. Коровы могут наведываться в поля коров других пород, только если они дружественные.

    По заданным порядкам \(N\) полей на обоих сторонах дороги (опять же ровно одно поле для каждой породы на каждой стороне), определите максимальное количество "зебр", которые можно нарисовать через дорогу, таких, что никакие две "зебры" не пересекаются, и каждая "зебра" соединяет пару полей "дружественных" пород коров. Каждое поле может принадлежать не более чем одной зебре, поэтому зебры не могут встречаться в конечных точках.

    ФОРМАТ ВВОДА (файл nocross.in):

    Первая строка ввода содержит \(N\) (\(1 \leq N \leq 100,000\)). Следующие \(N\) строк описывают порядок, по номерам пород, полей на первой стороне дороги. Каждая порода коровы - это целое число в интервале \(1 \ldots N\). Последние \(N\) строк описываю порядок, по номерам пород, на другой стороне дороги. Каждый номер породы появится ровно один раз в каждом порядке.

    ФОРМАТ ВЫВОДА (файл nocross.out):

    Выведите максимальное количество непересекающихся "дружественных зебр", которые ФЖ может нарисовать через дорогу.

    Circular Barn

    дп жадные алгоритмы

    У Фермера Джона круглый амбар. Амбар состоит из кольца из \(n\) комнат, пронумерованных \(1 \ldots n\) по периметру (\(3 \leq n \leq 1,000\)). Каждая комната имеет двери в две соседние комнаты и одну дверь во внешний мир.

    ФД хочет разместить ровно \(r_i\) коров в комнате \(i\) (\(1 \leq r_i \leq 1,000,000\)). Он планирует открыть \(k\) внешних дверей (\(1 \leq k \leq 7\)), через которые коровы будут входить в амбар. Каждая корова затем идёт по часовой стрелке, пока не добредёт до нужной комнаты. ФД хочет открыть двери так, чтобы все коровы вместе прошли как можно меньшее расстояние. Коровы предварительно могут собраться как им выгоднее перед этими незакрытыми дверями (эти перемещения не входят в общее расстояние, учитываемое в задаче). Определите минимальное суммарное расстояние, которое придётся пройти коровам, если ФД наилучшим образом выберет какие \(k\) открыть.

    ФОРМАТ ВВОДА (файл cbarn.in):

    Первая строка ввода содержит \(n\) и \(k\). Последующие \(n\) строк содержат \(r_1 \ldots r_n\).

    ФОРМАТ ВВОДА (файл cbarn.out):

    Выведите минимальное суммарное расстояние пройденное коровами.

    Circular Barn Revisited

    дп жадные алгоритмы

    У Фермера Джона круглый амбар. Амбар состоит из кольца из \(n\) комнат, пронумерованных \(1 \ldots n\) по периметру (\(3 \leq n \leq 100\)). Каждая комната имеет двери в две соседние комнаты и одну дверь во внешний мир.

    ФД хочет разместить ровно \(r_i\) коров в комнате \(i\) (\(1 \leq r_i \leq 1,000,000\)). Он планирует открыть \(k\) внешних дверей (\(1 \leq k \leq 7\)), через которые коровы будут входить в амбар. Каждая корова затем идёт по часовой стрелке, пока не добредёт до нужной комнаты. ФД хочет открыть двери так, чтобы все коровы вместе прошли как можно меньшее расстояние. Коровы предварительно могут собраться как им выгоднее перед этими незакрытыми дверями (эти перемещения не входят в общее расстояние, учитываемое в задаче). Определите минимальное суммарное расстояние, которое придётся пройти коровам, если ФД наилучшим образом выберет какие \(k\) открыть.

    ФОРМАТ ВВОДА (файл cbarn2.in):

    Первая строка ввода содержит \(n\) и \(k\). Последующие \(n\) строк содержат \(r_1 \ldots r_n\).

    ФОРМАТ ВВОДА (файл cbarn2.out):

    Выведите минимальное суммарное расстояние пройденное коровами.

    Cow Hopscotch (Gold)

    дп

    Фермер Джон придумал игру для своих коров

    Она играется на решётке R*C (2 <= R <= 750, 2 <= C <= 750), где каждый квадрат помечен целым числом от 1 до K (1 <= K <= R*C). Коровы выполняют последовательность прыжков, начиная в левом верхнем квадрате и заканчивая в правом нижнем квадрате и прыжок является корректным если и только если:

    1) Вы прыгаете на квадрат c другим числом

    2) Квадрат, куда Вы прыгаете, как минимум на одну строку ниже квадрата, в котором Вы сейчас стоите

    3) Квадрат, в который Вы прыгаете как минимум на одну колонку правее квадрата, в котором Вы сейчас стоите

    Пожалуйста, помогите коровам вычислить количество возможных различных последовательностей корректных прыжков из левого верхнего квадрата в правый нижний.

    Формат входных данных

    Первая строка ввода содержит целые числа R, C, K. Каждая из следующих R строк содержит C целых чисел, каждое в интервале 1..K.

    Формат выходных данных

    Выведите количество различных способов пропрыгать из левого верхнего угла в правый нижний, по модулю 1000000007.

    Moovie Mooving

    дп

    Беси хочет смотреть кино L (1 <= L <= 100,000,000) минут
    подряд без перерывов. У неё есть выбор из N (1 <= N <= 20)
    фильмов, каждый из которых имеет определённую длительность
    и множество показов(сеансов) в течение дня. Беси может войти
    на фильм и уйти из него в течение одного из этих сеансов,
    однако не хочет даже посещать один и тот же фильм дважды и
    она не может остаться на фильме после завершения сеанса,
    который она только что смотрела, даже если другой сеанс
    этого фильма перекрывает этот.

    Помогите Беси определить, может ли она достичь своей цели
    смотреть фильмы непрерывно с момента времени 0 до момента времени L.
    Если да. то выведите минимальное количество фильмов, которые
    она должна посмотреть, чтобы достичь своей цели.

    Формат входных данных

    Первая строка ввода содержит N и L.

    Следующие N строк каждая описывают фильмы. Они начинаются с
    целой длительности фильма D (1 <= D <= L) и количества сеансов C
    (1 <= C <= 1000). оставшиеся C целых чисел той же строки, каждое
    в диапазоне 0..L, определяют времена начала сеансов этого фильма.
    Времена начала сеансов различны, в интервале 0..L и даны в порядке
    возрастания.

    Формат выходных данных

    Одно целое число, указывающее минимальное количество сеансов,
    которые Беси должна посмотреть, чтобы достичь своей цели. Если
    это невозможно, выведите -1.

    Примечание

    Беси должна придти на первый сеанс 4-го фильма с момента времени 0
    по момент времени 20. Затем она смотрит первый фильм с момента 20
    до момента 65. А затем она смотрит второй фильм с момента времени
    65 до момента времени 100.

    Team Building

    Динамическое программирование дп

    Каждый год, Фермер Джон привозит \(N\) своих коров соревноваться на ярмарку. Его главный соперник Фермер Пауль привозит своих \(M\) коров (\(1 \leq N \leq 1000, 1 \leq M \leq 1000\)).

    Каждая из этих \(N + M\) коров получает индивидуальную оценку. Однако в текущем году финальное соревнование будет ограничено командой из \(K\) коров (\(1 \leq K \leq 10\)). Поэтому ФД и ФП отбирают по \(K\) коров. Затем они разбиваются на пары: лучшая корова ФД становится в пару с лучшей коровой ФП, вторая корова ФД, становится в пару со второй коровой ФП и т.д. ФД выиграет, если в каждой из этих пар его корова будет иметь более высокую оценку.

    Помогите ФД посчитать количество различных способов которыми ФД и ФП могут отобрать своих коров так, чтобы ФД выиграл в соревновании. Точнее, каждая считается каждая различная пара (\(K\) коров от ФД, и \(K\) коров от ФП). Выведите ответ по модулю 1,000,000,009.

    ФОРМАТ ВВОДА (файл team.in):

    Первая строка ввода содержит \(N\), \(M\), \(K\). Значение \(K\) будет не более чем \(N\) и \(M\).

    Следующая строка содержит оценки \(N\) коров ФД.

    Следующая строка содержит оценки \(M\) коров ФП.

    ФОРМАТ ВЫВОДА (файл team.out):

    Выведите количеаство способов, которыми ФД и ФП могут отобрать свои команды, чтобы победил ФД. Выводите это число по модулю 1,000,000,009.

    Robotic Cow Herd

    дп жадные алгоритмы

    Бесси надеется обмануть Фермера Джона, построив стадо из \(K\) (\(1 \leq K \leq 100,000\)) реалистичных робо-коров.

    Но построить робо-корову - дело непростое. Имеется \(N\) (\(1 \leq n \leq 100,000\)) индивидуальных позиций на роботе, в которых должны размещаться микроконтроллеры. Один микроконтроллер должен разместится в одном месте. Для каждого из этих мест Бесси может выбрать микроконтроллер из различных моделей, которые отличаются по цене.

    Для стада робо-коров, чтобы не вызвать подозрений у ФД. никакие два робота не должны вести себя одинаково. Поэтому никакие два робота не должны иметь совпадающие множества микроконтроллеров. То есть для люой пары роботов, должно быть как минимум одно место, в котором два робота имеют различные модели микроконтроллеров. Гарантируется, что всегда имеется достаточное количество моделей микроконтроллеров, чтоыб можно было вполнить это условие.

    Беси хочет сделать своё стадо как можно дешевле. Помогите ей определить минимальную стоимость сделать это.

    ФОРМАТ ВВОДА (файл roboherd.in):

    Первая строка ввода содержит \(N\) и \(K\) разделённые одним пробелом.

    Следующие \(N\) строк содержат описание различных микроконтроллеров доступных для каждого месте. \(i\)-ая такая строка начинается с \(M_i\) (\(1 \leq M_i \leq 10\)), определяющего количество моделей микроконтроллеров доступных для места \(i\). Затем следуют \(M_i\) разделённых одиночными пробелами целых чисел \(P_{i,j}\), определяющих стоимость этих моделей (\(1 \le P_{i,j} \le 100,000,000\)).

    ФОРМАТ ВЫВОДА (файл roboherd.out):

    Выведите одну строку - минимальную стоимость сконструировать \(K\) роботов.

    Lazy Sort

    Жадный алгоритм дп

    У Фермера Джона есть \(N\) коров (\(2 \leq N \leq 5\cdot 10^6\)) и пытается заставить их отсортировать неотрицательный целочисленный массив \(A\) длины \(N\), полагаясь на их лень. У него много тяжелых коробок, поэтому он выстраивает коров одну за другой, где корова \(i+1\) находится за коровой \(i\), и дает \(a_i\) коробок корове \(i\) (\(0\le a_i\)).

    Коровы по своей природе ленивы, поэтому они всегда ищут способ передать свою работу кому-то другому. От коровы \(1\) до \(N-1\) по порядку каждая корова смотрит на корову позади себя. Если у коровы \(i\) строго больше коробок, чем у коровы \(i+1\), корова \(i\) считает, что это «несправедливо» и отдает одну из своих коробок корове \(i+1\). Этот процесс повторяется, пока каждая корова не будет удовлетворена.

    Фермер Джон пометил количество ящиков \(b_i\), которое каждая корова \(i\) держит и создал массив \(B\) из этих величин. Если \(B = sorted(A)\) тогда ФД счастлив. К несчастью. ФД забыл все кроме \(Q\) величин массива \(A\). (\(2 \leq Q \leq \min(N, 100)\)). К счастью, эти величины включают количество ящиков, которое он собирается дать первой и последней корове. Каждое число, которое помнит ФД задано в виде \(c_i \; v_i\), представляющее, что \(a_{c_i}=v_i\). (\(1 \leq c_i \leq N\), \(1\le v_i\le 10^9\)). Определите количество различных способов, которыми могут быть заполнены пропущенные величины так чтобы ФД был счастливым. ответ выводите по модулю \(10^9+7\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит два разделённых пробелом целых числа \(N\) и \(Q\) представляющие количество коров и запросов соответственно.

    Следующие \(Q\) строк содержат два разделённых пробелом целых числа \(c_i \; v_i\) представляющих что корова \(c_i\) изначально держит \(v_i\) ящиков. Гарантируется, что \(c_1 = 1\), \(c_Q = N\), и \(c_i < c_{i+1}\) (порядок коров строго возрастающий).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите количество способов по модулю \(10^9+7\), которыми могут быть назначены значения \(a_i\), так, что ФД будет счастлив после того, как коровы выполнят ленивую сортировку. Гарантируется существование как минимум одного такого назначения.

    Moo Decomposition

    дп Рекуррентные последовательности разделяй и властвуй

    Вам дана длинная строка \(S\) из символов M и O и целое число \(K \geq 1\). Посчитайте количество способов разбить \(S\) на подпоследовательности так, что каждая подпоследовательность MOOOO....O с ровно \(K\) O, по модулю \(10^9+7\).

    Поскольку строка очень длинная, Вам она не дана точно. Вместо этого Вам дано целое число \(L\) (\(1 \leq L \leq 10^{18}\)), и строка \(T\) длины \(N\) (\(1 \leq N \leq 10^6\)). Строка \(S\) есть конкатенация \(L\) копий строки \(T\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(K\), \(N\), \(L\).

    Вторая строка содержит строку \(T\) длины \(N\). Каждый символ или M или O.

    Гарантируется, что количество декомпозиций \(S\) не равно 0.

    ФОРМАТ ВВОДА (на экран / stdout):

    Выведите количество разбиений строки \(S\), по модулю modulo \(10^9+7\).

    Median Heap

    дп

    **Замечание: время на тест для этой задачи 4 сек, в два раза большеЮ чем по умолчанию.**

    У Фермера Джона есть двоичное дерево с \(N\) вершинами, пронумерованными от \(1\) до \(N\) (\(1 \leq N < 2\cdot 10^5\) и \(N\) нечетное). Для \(i>1\), родитель вершины \(i\) есть \(\lfloor i/2\rfloor\). Каждая вершина имеет начальное числовое значение \(a_i\), и стоимость \(c_i\) изменить начальное значение на любую другую целую величину (\(0\le a_i,c_i\le 10^9\)).

    ФД должен найти апроксимацию медианы на этом дереве и разработать умный алгоритм, который это сделает.

    Он начинает с последней вершины \(N\) и обрабатывает дерево в обратном порядке. На каждом шаге алгоритма если вершина не медианная из и имеет двух потомков, ФД обменивает значения в текущей вершине и потомке, который будет медианой. В конце этого алгоритма значение в вершине \(1\) и есть медианная аппроксимация.

    Также у ФД есть список из \(Q\) \((1 \leq Q \leq 2\cdot 10^5)\) независимых запросов, которые указывают целевое значение \(m\) (\(0\le m\le 10^9\)). Для каждого запроса ФД сначала изменяет некоторые начальные значения в вершинах, и затем выполняет вышеописанный алгоритм медианной аппроксимации. Для каждого запроса определите минимальную возможную суммарную стоимость, чтобы этот алгоритм давал результат \(m\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(N\).

    Каждая из следующих \(N\) строк содержит два целых числа \(a_i\) и \(c_i\).

    Следующая строка содержит \(Q\).

    Каждая из следующих \(Q\) содержит целевое значение \(m\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите \(Q\) строк, минимально возможную стоимость, обеспечивающую ответ \(m\) как результат работы описанного алгоритма.

    Cow Checkups

    дп реализация

    **Замечание: мы не рекомендуем использовать для решения этой задачи язык программирования Питон, чтобы получить полный балл по этой задаче. **

    \(N\) (\(1 \leq N \leq 7500\)) коров Фермера Джона стоят в ряд. Корова \(1\) стоит в начале этого ряда, а корова \(N\) - в конце. \(i\)-ая корова имеет разновидность \(a_i\) (\(1 \leq a_i \leq N\)).

    ФД везет своих коров на осмотр в местную больницу для крупного рогатого скота. Однако ветеринар, специализирующийся на коровах, очень придирчив и хочет провести осмотр \(i\)-ой коровы в очереди, только если она относится к виду \(b_i\) (\(1 \leq b_i \leq N\)).

    ФД ленивый и не хочет полностью переупорядочивать его коров. Он выполняет следующую операцию ровно один раз.

    • Выбирает два числа \(l\) и \(r\) такие, что \(1 \leq l \le r \leq N\). Реверсирует порядок коров между \(l\)-ой и \(r\)-ой коровами включительно.

    ФД хочет измерить насколько эффективен его подход. Для каждого \(c=0 \ldots N\), помогите ФД помогите ФД определить количество различных операций (\(l,r\)) таких, что ровно \(c\) коров будут проверены ветеринаром. Две операции (\(l_1,r_1\)) и (\(l_2,r_2\)) считаются различными, если \(l_1 \neq l_2\) или \(r_1 \neq r_2\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит целое число \(N\).

    Вторая строка содержит \(a_1, a_2, \ldots, a_N\).

    Третья строка содержит \(b_1, b_2, \ldots, b_N\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите \(N+1\) строку, где \(i\)-ая строка содержит количество различных операций (\(l,r\)), которые обеспечат, что ровно \(i-1\) корова будет проверена.

    Cow Checkups

    дп

    **Замечание: мы не рекомендуем использовать для решения этой задачи язык программирования Питон, чтобы получить полный балл по этой задаче. **

    \(N\) (\(1 \leq N \leq 7500\)) коров Фермера Джона стоят в ряд. Корова \(1\) стоит в начале этого ряда, а корова \(N\) - в конце. \(i\)-ая корова имеет разновидность \(a_i\) (\(1 \leq a_i \leq N\)).

    ФД везет своих коров на осмотр в местную больницу для крупного рогатого скота. Однако ветеринар, специализирующийся на коровах, очень придирчив и хочет провести осмотр \(i\)-ой коровы в очереди, только если она относится к виду \(b_i\) (\(1 \leq b_i \leq N\)).

    ФД ленивый и не хочет полностью переупорядочивать его коров. Он выполняет следующую операцию ровно один раз.

    • Выбирает два числа \(l\) и \(r\) такие, что \(1 \leq l \le r \leq N\). Реверсирует порядок коров между \(l\)-ой и \(r\)-ой коровами включительно.

    ФД хочет измерить насколько эффективен его подход. Для каждого \(c=0 \ldots N\), помогите ФД помогите ФД определить количество различных операций (\(l,r\)) таких, что ровно \(c\) коров будут проверены ветеринаром. Две операции (\(l_1,r_1\)) и (\(l_2,r_2\)) считаются различными, если \(l_1 \neq l_2\) или \(r_1 \neq r_2\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит целое число \(N\).

    Вторая строка содержит \(a_1, a_2, \ldots, a_N\).

    Третья строка содержит \(b_1, b_2, \ldots, b_N\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите \(N+1\) строку, где \(i\)-ая строка содержит количество различных операций (\(l,r\)), которые обеспечат, что ровно \(i-1\) корова будет проверена.

    Min Max Subarrays

    дп

    **Замечание: Время на тест 3 сек, в 1.5 больше чем по умолчанию .**

    Вам дан целочисленный массив длины \(N\): \(a_1,a_2,\dots,a_N\) (\(2\le N\le 10^6, 1\le a_i\le N\)). Выведите сумму ответов для подзадачи ниже по всем \(N(N+1)/2\) непрерывным подмассивам массива \(a\).

    По заданному непустому списку целых чисел чередуйте следующие операции (начиная с первой операции) пока в списке останется ровно одно число.

    1. Замените два последовательных целых числа на их минимум.
    2. Замените два последовательных целых числа на их максимум.

    Определите максимально возможное значение оставшегося числа.

    Например,

    [4, 10, 3] -> [4, 3] -> [4]
    [3, 4, 10] -> [3, 10] -> [10]
    

    В первом массиве, \((10, 3)\) заменяется на \(\min(10, 3)=3\) и \((4, 3)\) заменяется на \(\max(4, 3)=4\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(N\).

    Вторая строка содержит \(a_1,a_2,\dots,a_N\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Сумма ответов на подзадачу по всем подмассивам.

    Activating Robots

    дп

    Вы одиночный робот, находящийся изначально в точке \(0\) на окружности с периметром \(L\) (\(1 \le L \le 10^9\)). Вы можете двигаться на \(1\) за секунду по или против часовой стрелки. Все движения в этой задаче непрерывны.

    Ваша цель - разместить ровно \(R-1\) роботов так, чтобы в конце каждые два последовательных робота были на расстоянии \(L/R\) друг от друга (\(2\le R\le 20\), \(L\) делится нацело \(R\)). Всего имеется \(N\) (\(1\le N\le 10^5\)) точек активации, \(i\)-ая из которых расположена на расстоянии \(a_i\) против часовой стрелки от \(0\) (\(0\le a_i<L\)). Если в текущий момент Вы находитесь в точке активации, Вы можете поместить робота в эту точку. Все роботы (включая оригинального) двигаются против часовой стрелки со скоростью \(1\) единица за \(K\) секунд (\(1\leq K\leq 10^6\)).

    Вычислите минимальное время, которое необходимо, чтобы достичь цель.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(L\), \(R\), \(N\), and \(K\).

    Следующая строка содержит \(N\) разделённых одиночными пробелами целых чисел \(a_1,a_2,\dots,a_N\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Минимальное время, требуемое чтобы достичь цели.

    Merging Cells

    дп

    Замечание: ограничение по памяти для этой задачи 512 Мбт, в два раза больше, чем по умолчанию **

    Беси играет в известную он-лайн-игру, в которой имеется множество ячеек разных меток и размеров. Ячейки поедают другие до тех пор, пока не останется одна - победитель.

    Имеется \(N\) (\(2\le N\le 5000\)) ячеек в строке, помеченных \(1\dots N\) слева направо. Их начальные размеры \(s_1,s_2,\dots,s_N\) (\(1\le s_i\le 10^5\)). Пока есть более чем две соседние ячейки, равновероятно выбирается пара соседних ячеек и сливается в одну ячейку по следующим правилам:

    Если ячейка с меткой \(a\) и размером \(c_a\) сливается с ячейкой с меткой \(b\) размером \(c_b\), результирующая ячейка имеет размер \(c_a+c_b\) и метку, равную метке большей ячейки и большей метке в случае равенства ячеек. Формально метка вычисляется так $\begin{cases} a & ca > cb \\ b & ca < cb \\ \max(a,b) & ca = cb \end{cases}.$

    Для каждой метки \(i\) в интервале \(1\dots N\) вероятность того, что финальная ячейка имеет метку \(i\) может быть выражена в виде \(\frac{a_i}{b_i}\) где \(b_i\not\equiv 0\pmod{10^9+7}\). выведите \(a_ib_i^{-1}\pmod{10^9+7}\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит число \(N\).

    Следующая строка содержит \(s_1,s_2,\dots, s_N\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Вероятности того что финальная ячейка имеет метку \(i\) (по модулю \(10^9+7\)) для каждого \(i\) в интервале \(1\dots N\) - на отдельной строке

    Island Vacation

    графы дп

    Беси проводит каникулы на сети из \(N\) (\(2\le N\le 10^4\)) островов помеченных \(1\dots N\) соединённых \(M\) двунаправленными мостами, каждый из которых соединяет два острова (\(N-1\le M\le 3/2(N-1)\)). Гарантируется, что эти мосты формируют простой граф (в частности, нет двух мостов, которые соединяют одну и ту же пару островов, и нет моста из острова в себя же).

    Также гарантируется, ни один мост не лежит более чем в одном простом цикле. Цикл называется простым, если он не содержит повторяющиеся острова.

    Беси начинает на острове \(1\) и путешествует в соответствии со следующей процедурой:

    1. Если нет мостов, ведущих в соседние острова, по которым она ещё не ездила, она завершает путешествие.
    2. Иначе, с вероятностью \(p_i\pmod{10^9+7}\) она завершает путешествие.
    3. Иначе, из всех мостов на соседние острова, по которым она ещё не перемещалась, она равновероятно выбирает один и перемещается по нему.

    Для каждого острова выведите вероятность, что она закончит своё путешествие именно на этом острове по модулю \(10^9+7\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит количество независимых подтестов \(T\) (\(1\le T\le 10\)). Последовательные подтесты разделены пустой строкой.

    Каждый подтест имеет следующую структуру:

    Первая строка содержит \(N\) и \(M\), где \(N\) - количество островов, \(M\) - количество мостов. Гарантируется, что сумма \(N\) по всем подтестам не превысит \(10^4\).

    Вторая строка содержит \(p_1, p_2,\dots, p_N\) (\(0\le p_i<10^9+7\)).

    Следующие \(M\) строк описывают мосты. \(i\)-ая строка содержит целые числа \(u_i\) и \(v_i\) (\(1\le u_i<v_i\le N\)), обозначающие, что \(i\)-ый мост соединяет острова \(u_i\) и \(v_i\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Для каждого подтеста выведите на отдельной строке вероятности по модулю \(10^9+7\) завершения путешествия на каждом острове от \(1\) to \(N\), разделённые одиночными пробелами.

    Cowmpetency

    дп

    Фермер Джон нанимает нового вожака стада для своих коров. Для этого он проинтервьюировал \(N\) (\(2 \leq N \leq 10^9\)) коров. Каждому он назначил "уровень компетенции" - число не более \(C\) (\(1 \leq C \leq 10^4\)).

    Потому что он провёл много интервью, ФД забыл все эти уровни компетенции. Однако он запомнил \(Q\) (\(1 \leq Q \leq \min(N - 1, 100)\)) пар чисел \((a_i, h_i)\) где \(h_i\) - номер первой коровы, с уровнем компетенции строго большим чем у коров от \(1\) до \(a_i\) (\(1 \leq a_i < h_i \leq N\)).

    ФД сказал Вам \(Q\) пар \((a_i, h_i)\). Помогите ему посчитать сколько последовательностей уровней компетенции соответствуют этой информации. Поскольку число очень большое, выводите его по модулю \(10^9 + 7\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(N\), \(Q\), \(C\).

    Каждая из следующих \(Q\) строк содержит пару \((a_i, h_i)\). Гарантируется, что все \(a_j\) различны.

    ФОРМАТВЫВОДА (на экран / stdout):

    Количество по модулю \(10^9+7\) последовательностей компетенций, соответствующих информации ФД.

    Minimum Sum of Maximums

    дп

    У Беси есть \(N\) (\(2\le N\le 300\)) плиток, выложенных в ряд с подписанными на них некрасивыми числами \(a_1, a_2, \dots, a_N\) в указанном порядке (\(1\le a_i\le 10^6\)). \(K\) (\(0\le K\le \min(N,6)\)) из плиток зафиксированы на месте, а именно те плитки, которые имеют индексы \(x_1,\dots, x_K\) (\(1\le x_1 < x_2<\dots< x_K\le N\)).

    Беси хочет минимизировать общую некрасивость плиток, которая определяется как сумма максимумов некрасивостей каждой пары последовательных плиток, то есть \(\sum_{i=1}^{N-1}\max(a_i,a_{i+1})\). Ей разрешено выполнять следующую операцию произвольное количество раз: выбрать две плитки, обе из которых не зафиксированы на месте и поменять их местами.

    Определите минимально возможную некрасивость, которую Беси может достичь, если она выполнит эти операции оптимально.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(N\) и \(K\).

    Следующая строка содержит числа \(a_1,\dots,a_N\).

    Следующая строка содержит \(K\) индексов \(x_1,\dots,x_K\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите минимально возможную общую некрасивость.

    Infinite Adventure

    графы Двоичные подьемы дп

    **Замечание: Память на тест 512MB, в два раза больше, чем по умолчанию.**

    Беси планирует бесконечное путешествие в стране с \(N\) (\(1\leq N \leq 10^5\)) городами. В каждом городе есть портал и время зацикливания \(T_i\). Все \(T_i\). являются степенями двойки и \(T_1 + \cdots + T_N \leq 10^5\). Если Вы войдёте в портал города \(i\) в день \(t\), Вы немедленно выйдете из портала в городе \(c_{i, t\bmod{T_i}}\).

    У Беси есть \(Q\) (\(1\leq Q \leq 5\cdot 10^4\)) планов её путешествия, каждый из которых есть тройка чисел \((v, t, \Delta)\). В каждом плане она начинает в городе \(v\) в день \(t\). Затем она делает следующее \(\Delta\) раз. Она входит в портал текущего города, затем ждёт один день. Для каждого из её планов она хочет узнать, в каком городе она закончит путешествие.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит два разделённых одиночным пробелом целых числа: \(N\), количество городов и \(Q\), количество запросов.

    Вторая строка содержит \(N\) разделённых одиночными пробелами целых чисел: \(T_1, T_2, \ldots, T_N\) (\(1\leq T_i\), \(T_i\) степень \(2\), и \(T_1 + \cdots + T_N \leq 10^5\)).

    Для \(i = 1, 2, \ldots, N\), строка \(i+2\) содержит \(T_i\) разделённых одиночными пробелами положительных целых чисел, а именно \(c_{i, 0}, \ldots, c_{i, T_i-1}\) (\(1\leq c_{i, t} \leq N\)).

    Для \(j = 1, 2, \ldots, Q\), строка \(j+N+2\) содержит три разделённых одиночными пробелами положительных целых числа, \(v_j, t_j, \Delta_j\) (\(1\leq v_j \leq N\), \(1\leq t_j \leq 10^{18}\), \(1\leq \Delta_j \leq 10^{18}\)) представляющих \(j\)-ый запрос.

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите \(Q\) строк. \(j\)-ая строка должна содержать ответ на \(j\)-ый запрос.

    Interstellar Intervals

    дп

    Сейчас \(3000\)-ый год,и Беси - первая корова в космосе. Во время своего путешествия между звёздами, она обнаружила числовую прямую с \(N\) (\(2 \leq N \leq 5 \cdot 10^5\)) точками, пронумерованными от \(1\) до \(N\). Все точки изначально белые. Она может выполнять следующую операцию любое количество раз.

    • Выбрать позицию \(i\) среди чисел на числовой прямой и положительное целое число \(x\). Затем покрасить все точки в интервале \([i, i + x - 1]\) в красный цвет и все точки в интервале \([i + x, i + 2x - 1]\) в синий цвет. Все выбранные интервалы должны быть не соединёнными (т.е. в интервале \([i, i + 2x - 1]\) не может быть точек ранее покрашенных в красный или синий цвет). Весь интервал должен попадать целиком в числовую прямую (т.е. \(1 \leq i \leq i + 2x - 1 \leq N\)).

    Фермер Джон даёт Беси строку \(s\) длины \(N\), состоящую из символов \(R\), \(B\), \(X\). Строка представляет предпочитаемую ФД раскраску для каждой точки: \(s_i=R\) означает, что \(i\)-ая точка должна быть выкрашена в красный цвет, \(s_i = B\) означает, что \(i\)-ая точка должна быть выкрашена в синий цвет, а \(s_i = X\) означает, что нет ограничений на цвет \(i\)-ой точки.

    Помогите Беси посчитать количество различных способов раскрасить числовую прямую выполнив ограничения ФД. Два способа раскрашивания считаются различными, если хотя бы в одной соответствующей точке они имеют различный цвет. Поскольку это число может быть очень большое, выведите его по модулю \(10^9+7\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит целое число \(N\).

    Следующая строка содержит строку \(s\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите количество различных способов по модулю \(10^9+7\) для числовой прямой быть раскрашенной с выполнением условий ФД.

    Pareidolia

    дп

    **Примечание. Ограничение по времени для этой задачи – 4 секунды, что в 2 раза больше, чем по умолчанию.**

    Парейдолия – это явление, при котором ваши глаза склонны видеть в изображениях знакомые узоры, которых на самом деле не существует — например, видение лица в облаке. Поскольку фермер Джон постоянно находится рядом с коровами, он часто видит коровьи узоры в повседневных предметах. Например, если он смотрит на строка "bqessiyexbesszieb", глаза фермера Джона игнорируют некоторые буквы и все, что он видит, это «bessiebessie».

    Дана строка \(s\), пусть \(B(s)\) представляет собой максимальное количество повторяющихся копий слова «bessie» которые можно получить, удалив ноль или более символов из \(s\). В приведенном выше примере \(B(\)"bqessiyexbesszieb"\() = 2\).

    Вычисление \(B(s)\) – интересная задача, но фермеру Джону интересно решение еще более интересной задачи: дана строка длины \(t\) не более \(3\cdot 10^5\), состоящих только из символов a-z, вычислить сумму \(B(s)\) по всем непрерывным подстрокам \(s\) строки \(t\).

    ФОРМАТ ВВОДА (ввод поступает с терминала/стандартного ввода):

    Вход состоит из непустой строки длины не более \(3\cdot 10^5\), все символы являются строчными английскими буквами.

    ФОРМАТ ВЫВОДА (вывод на терминал / стандартный вывод):

    Выведите единственное число — общее количество слов «bessie», которое можно сделать во всех подстроках входной строки.

    Pareidolia

    дп Дерево отрезков, RSQ, RMQ реализация

    **Примечание. Ограничение по времени для этой задачи составляет 4 секунды, что в два раза больше, чем по умолчанию. Ограничение по памяти для этой задачи составляет 512 МБ, вдвое больше, чем по умолчанию.**

    Парейдолия – это явление, при котором ваши глаза склонны видеть в изображениях знакомые узоры, которых на самом деле не существует — например, видение лица в облаке. Поскольку фермер Джон постоянно находится рядом с коровами, он часто видит коровьи узоры в повседневных предметах. Например, если он смотрит на строка "bqessiyexbesszieb", глаза фермера Джона игнорируют некоторые буквы и все, что он видит, это «bessiebessie».

    Дана строка \(s\), пусть \(B(s)\) представляет собой максимальное количество повторяющихся копий. из «bessie» можно получить, удалив ноль или более символов из \(s\). В приведенном выше примере \(B(\)"bqessiyexbesszieb"\() = 2\). Кроме того, учитывая строка \(t\), пусть \(A(t)\) представляет собой сумму \(B(s)\) по всем непрерывным подстроки \(s\) строки \(t\).

    У фермера Джона есть строка \(t\) длины не более \(2\cdot 10^5\), состоящая только из символов a-z. Пожалуйста, рассчитайте \(A(t)\) и как \(A(t)\) изменится после \(U\) (\(1\le U\le 2\cdot 10^5\)) обновлений, каждое из которых изменяет символ \(t\). Обновления являются кумулятивными.

    ФОРМАТ ВВОДА (ввод поступает с терминала/стандартного ввода):

    Первая строка ввода содержит \(t\).

    Следующая строка содержит \(U\), за которыми следуют строки по \(U\), каждая из которых содержит позицию \(p\) (\(1\le p\le N\)) и символ \(c\) в диапазоне от a до z, что означает, что \(p\)-й символ \(t\) заменяется на \(c\).

    ФОРМАТ ВЫВОДА (вывод на терминал / стандартный вывод):

    Выведите \(U+1\) строк — общее количество «bessie», которое можно сделать во всех подстроках \(t\) перед любыми обновлениями и после каждого обновления.

    Mana Collection

    дп

    **Замечание: Время на тест для этой задачи 5s, в 2.5 больше чем по умолчанию. Ограничение по памяти в этой задаче 512MB, в два раза больше чем по умолчанию.**

    У Беси есть \(N\) (\(1\le N\le 18\)) бассейнов маны, \(i\)-ый из которых аккумулирует \(m_i\) маны в секунду (\(1\le m_i\le 10^8\)). Бассейны соединены набором \(M\) (\(0\le M\le N(N-1)\)) двунаправленных ребер \((a_i,b_i,t_i)\), обозначающих, что из бассейна \(a_i\) она может перебраться в бассейн \(b_i\) за \(t_i\) секунд (\(1\le a_i, b_i\le N\), \(a_i\neq b_i\), \(1\le t_i\le 10^9\)). Когда Беси находится в бассейне, она может собрать все маны, сохранённые в этом бассейне, опустошая его. В момент времени \(0\) все бассейны с маной пусты. Беси может выбрать с какого бассейна стартовать.

    Ответьте на \(Q\) (\(1\le Q\le 2\cdot 10^5\)) запросов, каждый указан двумя целыми числами \(s\) и \(e\) (\(1\le s\le 10^9\), \(1\le e\le N\)). Для каждого запроса определите максимальное количество маны, которую Беси может собрать за \(s\) секунд, оказавшись в бассейне \(e\) в конце \(s\)-ой секунды.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(N\) и \(M\).

    Следующая строка содержит \(m_1,m_2,\dots, m_N\).

    Следующие \(M\) строк содержат \(a_i,b_i,t_i\). Никакая упорядоченная пара (ai,bi)$ не появится на вводе более одного раза.

    Следующая строка содержит \(Q\).

    Следующие \(Q\) содержат по два целых числа \(s\) и \(e\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    \(Q\) строк, по одной для каждого запроса

    Piling Papers

    дп

    Фермер Джон выписал \(N\) (\(1\le N\le 300\)) цифр на кусках бумаги. Для каждого \(i\in [1,N]\), \(i\)-ый кусок бумаги содержит цифру \(a_i\) (\(1 \leq a_i \leq 9\)).

    У коров есть два любимых целых числа \(A\) и \(B\) (\(1\le A\le B< 10^{18}\)) и они хотят, чтобы Вы ответили на \(Q\) (\(1\le Q\le 5\cdot 10^4\)) вопросов. Для \(i\)-го вопроса коровы должны идти слева направо по кускам бумаги \(l_i\dots r_i\) (\(1\le l_i\le r_i\le N\)), поддерживая изначально пустую кучу кусков бумаги. Для каждого куска бумаги, они или добавляют его в вершину кучи, или в дно кучи или никуда. В конце они читают цифры на кусках бумаги из кучи, сверху ко дну формируя целое число. Среди всех \(3^{r_i-l_i+1}\) способов для коров сделать выбор в этом процессе, посчитайте количество способов таких, что результат будет целым числом в интервале \([A,B]\) включительно и выведите это число по модулю \(10^9+7\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка ввода содержит три разделённых одиночными пробелами целых числа \(N\), \(A\), \(B\).

    Вторая строка содержит \(N\) разделённых одиночными пробелами цифр \(a_1, a_2, \dots, a_N\).

    Третья строка содержит целое число \(Q\), количество запросов.

    Каждая их следующих \(Q\) строк содержит два разделённых пробелами целых числа \(l_i\) и \(r_i\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Для каждого запроса одна строка содержит ответ.

    Fertilizing Pastures

    Деревья графы дп

    Имеется \(N\) пастбищ (\(2 \le N \le 2\cdot 10^5\)), соединённых \(N-1\) дорогой, так что ои образуют дерево. Перемещение по каждой дороге занимает одну секунду. В начале на каждом пастбище 0 травы, трава на \(i\)-ом пастбище растёт со скоростью \(a_i\) (\(1\le a_i\le 10^8\)) единиц в секунду. Фермер Джон вначале находится в пастбище 1 и должен удобрить траву на каждом пастбище. Если он посещает пастбище, в котором \(x\) единиц травы, он должен потратить \(x\) единиц удобрений. Удобрять требуется только при первом посещении пастбища и удобрение пастбища занимает 0 единиц времени.

    Ввод содержит дополнительный параметр \(T\in \{0,1\}\).

    • Если \(T=0\), ФД должен завершить путь в пастбище 1.
    • Если \(T=1\), ФД может завершить путь в любом пастбище.

    Вычислите минимальное количество времени, которое требуется ФД, чтобы удобрить все пастбища и минимальное количество удобрений, которое потребуется, чтобы закончить в этот момент времени.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка ввода содержит \(N\) и \(T\).

    Затем для каждого \(i\) от \(2\) до \(N\), имеется строка содержащая \(p_i\) и \(a_i\), означающая что есть дорога соединяющая пастбища \(p_i\) и \(i\). Гарантируется, что \(1\le p_i<i\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Минимальное количество времени и минимальное количество удобрений, разделённые одиночным пробелом.

    Up Down Subsequence

    дп

    У Фермера Джона имеется \(N\) коров (\(2 \leq N \leq 3\cdot 10^5\)), последовательно пронумерованных 1 \ldots N$, упорядоченных в соответствии с перестановкой \(p_1,p_2,\ldots,p_N\) of \(1\ldots N\). Также дана строка длины \(N-1\), состоящая из символов U и D.

    Определите максимальное \(K\le N-1\) такое, что существует подпоследовательность subsequence \(a_0,a_1,\ldots,a_{K}\) чисел \(p\) таких, что для всех \(1\le j\le K\), \(a_{j - 1} < a_j\) если j-ый символ в строке есть U, и \(a_{j - 1} > a_j\), если \(j\)-ый символ в строке есть D.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(N\).

    Вторая строка содержит перестановку \(p_1,p_2,\ldots,p_N\).

    Последняя строка содержит строку.

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите максимально возможное значение \(K\).

    Revisited

    дп

    Беси играет в такую игру. Игра начинается с последовательности из \(N\) (\(2\le N\le 262,144\)) положительных целых чисел \(a_1,a_2,\ldots,a_N\), каждое в интервале \(1\ldots 10^6\). За один ход Беси может взять два соседних числа и заменить их на число, большее, чем максимум из этих двух чисел (например, соседнюю пару \((5,7)\) на \(8\)). Игра заканчивается после \(N-1\) ходов, после которых остаётся только одно число. Цель игры - минимизировать это финальное число.

    Ваша задача сыграть оптимально не только для \(a\), но и для всех непрерывных подпоследовательностей \(a\).

    Выведите сумму минимально возможных финальных чисел для всех \(\frac{N(N+1)}{2}\) непрерывных подпоследовательностей \(a\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(N\).

    Следующая строка содержит \(N\) разделённых одиночными пробелами целых чисел, задающих входную последовательность.

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Одна срока, содержащая сумму.

    262144 Revisited

    дп

    Беси играет в такую игру. Игра начинается с последовательности из \(N\) (\(2\le N\le 262,144\)) положительных целых чисел \(a_1,a_2,\ldots,a_N\), каждое в интервале \(1\ldots 10^6\). За один ход Беси может взять два соседних числа и заменить их на число, большее, чем максимум из этих двух чисел (например, соседнюю пару \((5,7)\) на \(8\)). Игра заканчивается после \(N-1\) ходов, после которых остаётся только одно число. Цель игры - минимизировать это финальное число.

    Ваша задача сыграть оптимально не только для \(a\), но и для всех непрерывных подпоследовательностей \(a\).

    Выведите сумму минимально возможных финальных чисел для всех \(\frac{N(N+1)}{2}\) непрерывных подпоследовательностей \(a\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(N\).

    Следующая строка содержит \(N\) разделённых одиночными пробелами целых чисел, задающих входную последовательность.

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Одна срока, содержащая сумму.

    Pair Programming

    дп

    Программа состоит из последовательности инструкций, каждая из которых имеет одну из следующих форм:

    1. \(\times d\), где \(d\) это цифра в интервале \([0,9]\)
    2. \(+s\), где \(s\) это строка, обозначающая имя переменной. В программе все переменные различны.

    Результат выполнения программы определяется как выражение - результат выполнения всех инструкций в порядке ввода , начиная с \(0\). Например, результаты выполнения программы \([\times 3,+x,+y,\times 2,+z]\) есть выражение \((0\times 3+x+y)\times 2+z=2\times x+2\times y+z\). При выполнении различные программы могут формировать одни и те же выражения. Например, исполнение программы \([+w,\times 0,+y,+x,\times 2,+z, \times 1]\) также в результате даёт выражение \(2\times x+2\times y+z\).

    У Беси и Эльзы есть по программе из \(N\) (\(1\le N\le 2000\)) инструкций. Они объединяют инструкции этих программ, чтобы получить новую программу длиной \(2N\). Заметим, что всего имеется \(\frac{(2N)!}{N!\times N!}\) способов объединить программы, но но не все из этих программ дадут различные результаты.

    Вычислите количество различных выражений, которые могут быть получены исполнением объединённых программ Беси и Эльзы по модулю \(10^9+7\).

    Каждый ввод состоит из \(T\) (\(1\le T\le 10\)) тестов, которые требуется решать независимо. Гарантируется, что сумма \(N\) во всех \(T\) тестах не превысит \(2000\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка ввода содержит \(T\), количество тестов.

    Первая строка каждого теста содержит число \(N\).

    Вторая строка каждого теста содержит программу Беси, представленную строкой длины \(N\). Каждый символ или цифра \(d\in [0,9]\), представляющая инструкцию типа 1, или символ \(+\), представляющий инструкцию типа 2.

    Третья строка каждого теста содержит программу Эльзы, в том же формате как и у Беси.

    Внутри теста, имена переменных среди всех инструкций различны. Заметим, что реальные имена не вводятся, поскольку они не влияют на результат.

    ФОРМАТ ВЫВОДА (НА ЭКРАН / stdout):

    Количество различных выражений, которые могут быть произведены исполнением перемешанных программ Беси и Эльзы по модулю \(10^9+7\).

    Alchemy

    дп

    Беси изучает, как трансформируются металлы. У неё есть \(a_i\) (\(0 \le a_i \le 10^4\)) единиц металла \(i\) (\(1 \le i \le N \le 100\)). Беси знает \(K\) (\(1\le K<N\)) способов комбинирования одной единицы каждого из нескольких металлов, чтобы сделать одну единицу металла с большим номером, чем у всех исходных металлов. Гарантируется, что для каждого металла Беси знает не более одного способа комбинирования.

    Вычислите максимальное количество единиц металла \(N\), которое может получить Беси после некоторой серии трансформаций.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит число \(N\).

    Вторая строка содержит \(N\) целых чисел \(a_i\).

    Третья строка содержит целое число \(K\).

    Каждая из последующих \(K\) строк начинается с двух целых чисел \(L\) и \(M\) (\(M\ge 1\)), за которыми следуют \(M\) целых чисел. Эти \(M\) чисел представляют металлы в способе комбинирования металлов, чтобы получить одну единицу металла \(L\). Гарантируется, что \(L\) больше чем каждое из этих \(M\) чисел.

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите максимальное количество единиц металла \(N\), которое может получить Беси после серии из 0 или более трансформаций.

    Counting Haybales

    дп

    У Фермера Джона есть \(N\) (\(1\leq N \leq 5000\)) стогов из тюков сена. Для каждого \(i\in [1,N]\), \(i\)-ый стог имеет высоту \(h_i\) (\(1\le h_i\le 10^9\)) тюков. Беси может выполнять следующую операцию:

    • Если высоты соседних стогов сена отличаются ровно на 1, она может переместить верхний тюк сена с более высокого стога на менее высокий.

    Сколько конфигураций по модулю \(10^9+7\) можно получить после выполнения данной операции конечное число раз? Две конфигурации рассматриваются как одна и та же если для всех \(i\) каждый стог сена содержит одно и тоже количество тюков в обоих стогах.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка ввода содержит \(T\) (\(1\le T\le 10\)), количество независимых тестов каждый из которых должен быть решён правильно.

    Каждый тест состоит из \(N\), и последовательности \(N\) высот. Гарантируется, что сумма всех \(N\) во всех \(T\) тестах не превысит \(5000\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите \(T\) строк по одной для каждого теста.

    Phone Numbers

    дп битмаски реализация

    Беси купила новый телефон. Кнопки на нём расположены так:

    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\).

    Redistributing Gifts

    битмаски дп графы

    У Фермера Джона есть \(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):

    Для каждой строки пород выведите количество перестановок, соответствующих ей на отдельной строке.

    Palindromes

    дп

    \(N\) (\(1 \le N \le 7500\)) коров Фермера Джона выстроились в ряд для фотографирования.

    Коровы хотят, чтобы ФД сделал \(\frac{N(N+1)}{2}\) групповых фоток по одной для каждой непрерывной подпоследовательности коров.

    Однако ФД имеет свои соображения как выстроить коров. В частности, он отказывается делать фотку подпоследовательности коров, если она не формирует палиндром, это означает, что порода \(i\)-ой коровы от левого конца фотки должна совпадать с породой \(i\)-ой коровы от начала фотки, для всех положительных \(i\) меньше либо равных длины подпоследовательности. Каждая корова имеет породу Guernsey или Holstein.

    Для каждой из \(\frac{N(N+1)}{2}\) непрерывных подпоследовательностей построения посчитайте минимальное количество транспозиций, с помощью которых можно реорганизовать эту подпоследовательность в палиндром или \(-1\), если это сделать невозможно. Одна транспозиция заключается во взятии двух соседних коров подпоследовательности и обмене их. Вывод - сумма всех таких количеств.

    Заметим, что количество транспозиций необходимо вычислить независимо для каждой непрерывной подпоследовательности (коровы возвращаются на начальные позиции между фотками).

    Формт ввода (с клавиатуры / stdin):

    Ряд представленный из символов G и H длины \(N\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Сумма вышеописанных количеств по всем \(\frac{N(N+1)}{2}\) непрерывным подпоследовательностям.

    Breakdown

    кратчайшие пути дп графы

    **Обратите внимание: время на тест для этой задачи 3сек, на 50% больше чем по умолчанию. **

    Ферма Джона может быть представлена как ориентированный взвешенный граф, с дорогами (дугами), соединяющими различные вершины и вес каждой дуги есть время, которое требуется чтобы проехать по этой дороге. Каждый день Беси любит путешествовать из амбара (вершина \(1\)) в поле (вершина \(N\)), используя ровно \(K\) дорог и хочет добраться до поля как можно быстрее при этих ограничениях. Однако, в некоторой точке, прекращается поддержка дорог и они начинают ломаться одна за другой, становясь непроходимыми. Помогите Беси определить кратчайший путь от амбара до поля во все моменты времени.

    Формально, мы начинаем с полного взвешенного ориентированного графа из \(N\) вершин (\(1\le N\le 300\)) и \(N^2\) дуг: одна дуга для каждой пары \((i, j)\) \(1 \le i, j \le N\), заметим, что имеется \(N\) петель (дуг из \(i\) в \(i\)). После каждого удаления выведите минимальный вес из всех путей из \(1\) в \(N\), проходящих ровно \(K\) (необязательно различных) дуг \(2\le K\le 8\)). Заметим, что после \(i\)-го удаленя в графе остаётся \(N^2-i\) дуг.

    Вес пути определяется как сумма весов всех дуг в пути. Заметим, что путь может содержать множество вхождений одних и тех же дуг, и одних и тех же вершин, включая \(1\) и \(N\).

    ФОРМАТ ВВОДА (с клаватуры / stdin):

    Первая строка содержит \(N\) и \(K\).

    Следющие \(N\) строк содержат по \(N\) целых чисел каждая. \(j\)-ое целое \(i\)-ой строки есть \(w_{ij}\) (\(1\le w_{ij}\le 10^8\)).

    Затем следуют \(N^2\) дополнительных строк, каждая содержит два целых числа \(i\) и \(j\) (\(1\le i,j\le N\)). Каждая пара целых чисел появляется ровно один раз.

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Ровно \(N^2\) строк, минимальный вес \(K\)-пути после каждого удаления. Если \(K\)-путь не существует, выведите \(-1\).

    Bribing Friends

    дп Жадный алгоритм жадные алгоритмы

    Беси хочет посмотреть Bovine Genomics: The Documentary, но она не хочет идти одна. К сожалению, её друзья не очень хотят идти с ней. Ей нужно чем то их привлечь. У неё есть два инструмента : mooney и мороженое.

    У Беси \(N\) (\(1 \le N \le 2000\)) друзей. Однако они разные! Друг \(i\) имеет счёт популярности \(P_i\) (\(1 \le P_i \le 2000\)), и Беси хочет максимизировать сумму популярности друзей, которые пойдут с ней. Друг \(i\) пойдёт с ней только если она даст ему \(C_i\) (\(1 \le C_i \le 2000\)) "moonies". Друг \(i\) также может сделать скидку в \(1\) "mooney", если она даст ему \(X_i\) (\(1 \le X_i \le 2000\)) мороженых. Беси может получить сколько угодно скидок.

    У Беси есть \(A\) moonies и \(B\) мороженых (\(0 \le A, B \le 2000\)). Помогите ей определить максимальную сумму популярностей, которую она может добиться, если потратит mooney и мороженое оптмально.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Строка \(1\) содержит три числа \(N\), \(A\), \(B\), представляющих количества друзей, mooney и мороженых, которые есть у Беси соответственно.

    Каждая из последующих \(N\) строк содержит три числа \(P_i\), \(C_i\), \(X_i\), представляющих популярность (\(P_i\)), mooney, за которые он согласится пойти, количество мороженых для скидки в \(1\) mooney для друга \(i\) (\(X_i\)).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите максимальную сумму популярностей друзей Беси, в предположении что она оптимально потратит moonie и мороженые.

    Dance Mooves

    графы дп

    Коровы Фермера Джона танцуют.

    Сначала все \(N\) коров (\(2\le N\le 10^5\)) стоят в ряд, корова \(i\) стоит на позиции \(i\). Последовательность перемещений в танце задаётся \(K\) (\(1\le K\le 2\cdot 10^5\)) парами позиций \((a_1,b_1), (a_2,b_2), \ldots, (a_{K},b_{K})\). В каждую минуту \(i = 1 \ldots K\) танца, коровы в позициях \(a_i\) и \(b_i\) меняются позициями. Аналогичные \(K\) обменов произойдут в минуты \(K+1 \ldots 2K\), затем в минуты \(2K+1 \ldots 3K\), и т.д. до истечения \(M\) минут (\(1\le M\le 10^{18}\)) Другими словами

    • В минуту \(1\), коровы в позициях \(a_1\) и \(b_1\) меняются позициями.
    • В минуту \(2\), коровы в позициях \(a_2\) и \(b_2\) меняются позициями.
    • ...
    • В минуту \(K\), коровы в позициях \(a_{K}\) и \(b_{K}\) меняются позициями.
    • В минуту \(K+1\), коровы в позициях \(a_{1}\) и \(b_{1}\) меняются позициями.
    • В минуту \(K+2\), коровы в позициях \(a_{2}\) и \(b_{2}\) меняются позициями.
    • и т.д. ...

    Для каждой коровы определите количество уникальных позиций, которые она занимала во время танца.

    Замечание: время на тест удвоено.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит целые числа \(N\), \(K\), \(M\). Каждая из последующих \(K\) строк содержит \((a_1,b_1) \ldots (a_K, b_K)\) (\(1\le a_i<b_i\le N\)).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Выведите \(N\) строк. \(i\)-ая строк содержит количество уникальных позиций, которые занимала корова \(i\).

    Paired Up

    дп

    \(N\) (\(1\le N\le 5000\)) коров стоят в ряд на прямой, каждая из них имеет породу Holstein или Guernsey. Порода \(i\)-ой коровы задаётся значением \(b_i\in \{H,G\}\), Положение \(i\)-ой коровы задаётся величиной \(x_i\) (\(0 \leq x_i \leq 10^9\)), а вес \(i\)-ой коровы задаётся величиной \(y_i\) (\(1 \leq y_i \leq 10^5\)).

    По сигналу Фермера Джона некоторые из коров образуют пары так, что

    • Каждая пара состоит из коров пород Holstein \(h\) и Guernsey \(g\) чьи положения не более чем на \(K\) друг от друга (\(1\le K\le 10^9\)); то есть, \(|x_h-x_g|\le K\).
    • Каждая корова или часть какой то пары, или не входит ни в какую пару.
    • Разбиение на пары является максимальным если никакие из оставшихся коров не могут образовать пару.

    Определите диапазон возможных сумм весов коров не попавших в пары, а именно

    • Если \(T=1\), вычислите минимально возможную сумму весов неспаренных коров.
    • Если \(T=2\), вычислите максимально возможную сумму весов неспаренных коров.

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка ввода содержит \(T\), \(N\), \(K\).

    Далее следуют \(N\) строк, \(i\)-ая из которых содержит числа \(b_i,x_i,y_i\). Гарантируется, что \(0\le x_1< x_2< \cdots< x_N\le 10^9\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Минимальную или максимальную возможную сумму весов неспаренных коров.

    HILO

    дп

    Беси знает число \(x+0.5\), где \(x\) некоторое целое число между \(0\) и \(N\), включительно (\(1\le N\le 5000\)).

    Эльза старается угадать это число. Она может задавать вопросы вида \(i\) больше или меньше?" для некоторого \(i\) от \(1\) до \(N\) включительно. Беси отвечает "HI!" если \(i\) больше чем \(x+0.5\), и "LO!", если \(i\) меньше чем \(x+0.5\).

    Эльза работает в соответствии со следующей стратегией. Она создала список из \(N\) чисел, где каждое число от \(1\) до \(N\) встречается ровно один раз (другими словами, этот список является перестановкой размера \(N\).). Затем она идёт по этому списку называя числа для угадывания из него по порядку. Однако она пропускает все бесполезные запросы. Так если Эльза должна спросить число \(i\) а ранее она спрашивала число \(j < i\) такое, что Беси ответила "HI!", Эльза не спрашивает \(i\), а переходит к следующему числу в списке. Аналогично, если она ранее спрашивала про число \(j > i\), на которое Беси ответила "LO!", Эльза также пропускает это число \(i\) и переходит к следующему в списке. Можно доказать, что используя эту стратегию, Эльзая всегда уникально определит \(x\) вне зависимости от перестановки, которую она создаст.

    Если мы сконкатенируем все ответы Беси "HI" или "LO" в одну строку \(S\), количество раз которое Беси ответит "HILO" есть количество подстрок длины \(4\) в строке \(S\), которые равны "HILO".

    Беси знает, что Эльза использует эту стратегию и даже уже выбрала число \(x\), однако она не знает, какую перестановку использует Эльза. Ваша задача - вычислить сумму количеств раз, которые Беси скажет "HILO" для всех перестановок, которые Эльза может использовать - по модулю \(10^9+7\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Единственная строка ввода содержит \(N\) и \(x\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Общее количество подстрок HILO по модулю \(10^9+7\).

    Sprinklers 2_ Return of the Alfalfa

    дп Динамическое программирование

    У Фермера Джона есть маленькое поле в виде решётки \(N\) by \(N\) (\(1 \le N \le 2000\)). Где \(j\)-ый квадрат слева в \(i\)-ой строке сверху обозначается \((i,j)\) для всех \(1 \le i,j \le N\). ФД хочет посадить на своём поле пшеницу и люцерну, а для их поливки установить специальные разбрызгиватели.

    Разбрызгиватель для пшеницы в квадрате \((I,J)\) разбрызгивает на все квадраты ниже и слева: то есть, квадраты \((i,j)\) с \(I \le i\) и \(j \le J\).

    Разбрызгиватель для люцерны в квадрате \((I,J)\) разбрызгивает на все квадраты вверху и справа: то есть, квадраты \((i,j)\) с \(i \le I\) b \(J \le j\).

    На квадрате до которого достаёт один или более разбрызгиватель для пшеницы может расти пшеница, на квадрате до которого достаёт один или более разбрызгиватель для люцерны может расти люцерна. На квадрате, до которого достают оба типа разбрызгивателей (или ни одного типа разбрызгивателей) не может расти ничего.

    Помогите ФД определить количество способов (по модулю \(10^9 + 7\)) установить разбрызгиватели на своём поле, не более одного на квадрат, так, что каждый квадрат будет доставаться только одним типом разбрызгивателя (каждый квадрат будет фертильным).

    Некоторые квадраты уже занят коровами, это не запрещает квадрату быть фертильным, но в них не могут быть установлены разбрызгиватели.

    ФОРМАТ ВВОДА (файл sprinklers2.in):

    Первая строка ввода содержит одно целое число \(N.\)

    Для каждого h \(1\le i\le N,\) \(i+1\)-ая строка содержит строку длиной \(N\) обозначающую \(i\)-ую строку решётки. Каждый символ строки один из следующих: 'W' (корова), или '.' (свободный квадрат).

    ФОРМАТ ВЫВОДА (файл sprinklers2.out):

    Выведите остаток отделения на \(10^9+7\) количества способов установить разбрызгиватели.

    Exercise

    дп

    И снова об утренней зарядке для коров.

    \(N\) коров (\(1\le N\le 7500\)) фермера Джона стоят в ряд. \(i\)-ая слева корова имеет метку \(i\) для всех \(1\le i\le N\). ФД говорит им повторять следующий шаг до тех по пока коровы не вернутся в исходное положение.

    • По заданной перестановке \(A\) длины \(N\), коровы изменяют свой порядок \(i\)-ая корова слева до изменений становится \(A_i\)-ой коровой слева после изменения.

    Например, если \(A=(1,2,3,4,5)\) тогда коровы выполнят один шаг и сразу вернутся в исходное положение. If \(A=(2,3,1,5,4)\), то коровы выполнят 6 шагов прежде чем вернутся в исходное положение. Порядок коров слева направо после каждого шага будет таким:

    • 0 шаг: \((1,2,3,4,5)\)
    • 1 шаг: \((3,1,2,5,4)\)
    • 2 шаг: \((2,3,1,4,5)\)
    • 3 шаг: \((1,2,3,5,4)\)
    • 4 шаг: \((3,1,2,4,5)\)
    • 5 шаг: \((2,3,1,5,4)\)
    • 6 шаг: \((1,2,3,4,5)\)

    Вычислите произведение количеств шагов, которые требуются для всех возможных \(N!\) перестановок \(A\) длины \(N\).

    Поскольку этот ответ может быть очень большим, выведите ответ по модулю \(M\) (\(10^8\le M\le 10^9+7\), \(M\) - простое).

    Контестанты, использующие C++, могут найти полезным следующий код KACTL Известный как Barrett reduction, он позволяет Вам вычислить \(a \% b\) в несколько раз быстрее, чем обычно. где \(b>1\) постоянная величина, но не известная во время компиляции. (К несчастью, мы не позаботились о такой оптимизации для Java).

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef unsigned long long ull;
    typedef __uint128t L;
    struct FastMod {
    	ull b, m;
    	FastMod(ull b) : b(b), m(ull((L(1) << 64) / b)) {}
    	ull reduce(ull a) {
    		ull q = (ull)((L(m) * a) >> 64);
    		ull r = a - q * b; // can be proven that 0 <= r < 2*b
    		return r >= b ? r - b : r;
    	}
    };
    FastMod F(2);
    
    int main() {
    	int M = 1000000007; F = FastMod(M);
    	ull x = 10ULL*M+3; 
    	cout << x << " " << F.reduce(x) << "\n"; // 10000000073 3
    }
    

    ФОРМАТ ВВОДА (файл exercise.in):

    Первая строка содержит \(N\) и \(M\).

    ФОРМАТ ВЫВОДА (файл exercise.out):

    Одно целое число

    Exercise

    дп Комбинаторика теория чисел

    Фермер Джон проводит утреннюю зарядку с коровами.

    \(N\) коров (\(1\le N\le 10^4\)) стоят в ряд. \(i\)-ая корова слева имеет метку \(i\) для каждого \(1\le i\le N\). ФД говорит коровам повторять следующие действия до тех пор, пока коровы не вернуться к тому же порядку, с которого начинали:

    • По заданной перестановке \(A\) длины \(N\), коровы изменяют их порядок так, что \(i\)-ая корова слева до изменения становится \(A_i\) коровой слева после изменения

    Например, если \(A=(1,2,3,4,5)\) тогда коровы выполнят один шаг. Если \(A=(2,3,1,5,4)\), тогда коровы выполнят 6 шагов. Порядок коров слева направо после каждого из шагов будет таким:

    • 0 шаг: \((1,2,3,4,5)\)
    • 1 шаг: \((3,1,2,5,4)\)
    • 2 шаг: \((2,3,1,4,5)\)
    • 3 шаг: \((1,2,3,5,4)\)
    • 4 шаг: \((3,1,2,4,5)\)
    • 5 шаг: \((2,3,1,5,4)\)
    • 6 шаг: \((1,2,3,4,5)\)

    Определите сумму всех положительных целых чисел \(K\) таких, что существует перестановка длины \(N\), которая требует от коров выполнить ровно \(K\) шагов.

    Поскольку это число может быть очень большим, выведите ответ по модулю \(M\) (\(10^8\le M\le 10^9+7\), \(M\) - простое).

    ФОРМАТ ВВОДА (файл exercise.in):

    Первая строка содержит \(N\) и \(M\).

    ФОРМАТ ВЫВОДА (файл exercise.out):

    Одно целое число

    Non-Decreasing Subsequences

    дп

    Рассмотрим последовательность \(A_1,A_2,\ldots,A_N\) длины \(N\) \((1\le N\le 5\cdot 10^4)\), состоящую только из целых чисел в диапазоне \(1\ldots K\) \((1\le K\le 20).\) Вам даны \(Q\) (\(1\le Q\le 2\cdot 10^5\)) запросов вида \([L_i,R_i]\) \((1\le L_i\le R_i\le N).\) Для каждого запроса вычислите количество неубывающих подпоследовательностей \(A_{L_i},A_{L_i+1}\ldots, A_{R_i}\) по модулю \(10^9+7\).

    Неубывающая подпоследовательность of \(A_L,\ldots,A_R\) есть коллекция индексов \((j_1,j_2,\ldots, j_x)\) таких что \(L\le j_1<j_2<\cdots<j_x\le R\) и \(A_{j_1}\le A_{j_2}\le \cdots \le A_{j_x}.\) Не забудьте рассмотреть пустую последовательность!

    ОЦЕНИВАНИЕ:

    • В тестах 2-3 \(N\le 1000\).
    • В тестах 4-6 \(K\le 5.\)
    • В тестах 7-9 \(Q\le 10^5.\)
    • В тестах 10-12 нет дополнительных ограничений.

    ФОРМАТ ВВОДА (файл nondec.in):

    Первая строка содержит два разделённых пробелом целых числа \(N\) и \(K\).

    Вторая строка содержит \(N\) разделённых пробелом целых числа \(A_1,A_2,\ldots, A_N\).

    Третья строка содержит целое число \(Q.\)

    Каждая из последующих \(Q\) строк содержит два разделённых пробелом целых числа \(L_i\) и \(R_i.\)

    ФОРМАТ ВЫВОДА (файл nondec.out):

    Для каждого запроса \([L_i,R_i],\) Вы должны в отдельной строке вывести количество неубывающих подпоследовательностей \(A_{L_i},A_{L_i+1}\ldots, A_{R_i}\) по модулю \(10^9+7\).

    Cave Paintings

    дп

    Беси стала художницей. Её текущая работа - решётка высоты \(N\) такая, что каждая строка решётки содержит ровно \(M\) квадратов (\(1\le N,M\le 1000\)). Каждый квадрат или пустой или заполнен скалой или наполнен водой. Беси уже нарисовала квадраты заполненные скалой включая всю границу рисунка. Теперь она хочет заполнить водой некоторые квадраты так, чтобы если бы картина стала реальностью, не было бы движения воды. Определим высоту квадрата в \(i\)-ой строке от вершины как \(N+1-i\). Беси хочет, чтобы её рисунок удовлетворял следующим ограничениям:

    Предположим, что квадрат \(a\) заполнен водой. Тогда если существует путь из квадрата \(a\) в квадрат \(b\) используя только пустые квадраты и квадраты с водой которые не выше чем \(a\), такой что каждые два соседних квадрата имеют общую сторону, тогда квадрат \(b\) тоже заполнен водой.

    Определите количество различных рисунков, которые может сделать Беси по модулю \(10^9+7\). Беси может заполнить водой любое количество квадратов от 0 до всех включительно.

    ОЦЕНИВАНИЕ:

    • В тестах 1-5 \(N,M\le 10.\)
    • В тестах 6-15 нет дополнительных орраничений.

    ФОРМАТ ВВОДА (файл cave.in):

    Первая строка ввода содержит два разделённых пробелом целых числа \(N\) и \(M\).

    Каждая из последующих \(N\) строк ввода содержит \(M\) символов. Каждый символ есть '.' или '#', представляющие пустой квадрат и скалу, соответственно. Первая и последняя строки, а также первый и последний столбцы содержат только '#'.

    ФОРМАТ ВЫВОДА (файл cave.out):

    Одно целое число: количество рисунков, удовлетворяющих условию по модулю \(10^9+7\).

    Time is Mooney

    дп

    Беси проводит своё путешествие в Бовинии, где имеется \(N\) городов (\(2\le N\le 1000\)) городов помеченных числами \(1\ldots N\), соединённых \(M\) (\(1\le M\le 2000\)) однонаправленными дорогами. Каждый раз, когда Беси посещает город \(i,\) Беси зарабатывает \(m_i\) денег. (\(0\le m_i\le 1000\)). Начиная с города 1, Беси хочет так посетить города, чтобы заработать как можно больше денег и вернуться город 1. \(m_1=0.\)

    Перемещение между двумя городами по дороге занимает один день. Во время путешествия приходиться тратиться. Чтобы путешествовать \(T\) дней требуется потратить \(C\cdot T^2\) денег, где (\(1\le C\le 1000\)).

    Какое максимальное количество денег Беси может заработать в одном путешествии? Заметим, что для Беси может оказаться оптимальным не посещать никакой город кроме первого и в этом случае ответ будет 0.

    ФОРМАТ ВВОДА (файл time.in):

    Первая строка содержит три целых числа \(N\), \(M\), и \(C\).

    Вторая строка содержит \(N\) целых чисел \(m_1,m_2,\ldots m_N\).

    Каждая из следующих \(M\) строк содержит два разделённых пробелом целых числа \(a\) и \(b\) \(a\neq b\)) обозначающих однонаправленную дорогу из города \(a\) в город \(b\).

    ФОРМАТ ВЫВОДА (файл time.out):

    Единственная строка с ответом.

    Farmer John Solves 3SUM

    дп

    Фермер Джон верит, что он сделал великое открытие в проектировании алгортимов: он открыл почти линейный алгоритм для известной проблемы 3SUM, про которую никто не знает решение, работающее быстрее, чем за квадратичное время. Одна из формулировок проблемы 3SUM такова: задан массив целых чисел \(s_1,\dots,s_m\) требуется посчитать количество таких неупорядоченных троек с различными индексами \(i,j,k\) такими, что \(s_i + s_j + s_k = 0\).

    Чтобы проверить алгоритм ФД, Беси подготовила массив \(A\) из \(N\) целых чисел (\(1 \leq N \leq 5000\)). Беси также спросит \(Q\) раз (\(1 \leq Q \leq 10^5\)), пару индексов \(1 \leq a_i \leq b_i \leq N\). Для каждого такого вопроса ФД должен решить проблему 3SUM на подмассиве \(A[a_i \dots b_i]\).

    ФД просит Вас пройти тест Беси.

    ОЦЕНИВАНИЕ:

    • В тестах 2-4 \(N\le 500.\)
    • В тестах 5-7 \(N\le 2000.\)
    • В тестах 8-15 нет дополнительных ограничений.

    ФОРМАТ ВВОДА (файл threesum.in):

    Первая строка содержит два разделённых пробелом целых числа \(N\) и \(Q\). Вторая строка содержит разделённые одиночными пробелами элементы \(A_1,\dots,A_N\) массива \(A\). Каждая из последующих \(Q\) строк содержит два положительных целых числа \(a_i\) и \(b_i\), представляющих вопрос.

    Гарантируется, \(-10^6 \leq A_i \leq 10^6\) для каждого элемента массива \(A_i\).

    ФОРМАТ ВЫВОДА (файл threesum.out):

    Вывод должен содержать \(Q\) строк. Каждая строка \(i\) содержит одно целое число --- ответ на \(i\)-ый вопрос. Заметим, что Вы должны использовать 64-ные целые числа, чтобы избежать переполнения.

    Help Yourself

    дп

    Беси даны \(N\) (\(1\le N\le 10^5\)) отрезков на прямой. \(i\)-ый отрезок содержит все вещественные числа \(x\) такие, что \(l_i\le x\le r_i\).

    Определите объединение множества отрезков, то есть такое множество все \(x\) которые содержатся как минимум в одном отрезке. Определите сложность множества отрезков как количество связных регионов, представленных в этом объединении, возведённую в степень \(K\) (\(2\le K\le 10\)).

    Беси хочет вычислить сумму сложностей всех \(2^N\) подмножеств заданного множества из \(N\) отрезков, по модулю \(10^9+7\).

    Помогите Беси!

    ОЦЕНИВАНИЕ

    • В тесте 2 \(N\le 16\).
    • В тестах 3-5 \(N\le 1000\), \(K=2\).
    • В тестах 6-8 \(N\le 1000\).
    • Для каждого \(T\in [9,16],\) для тест \(T\) выполняется \(K=3+(T-9)\).

    ФОРМАТ ВВОДА (файл help.in):

    Первая строка ввода содержит \(N\) и \(K\).

    Каждая из последующих \(N\) строк содержит два целых числа \(l_i\) и \(r_i\). Гарантируется, что \(l_i< r_i\) и все \(l_i,r_i\) - различные целые числа в интервале \(1 \ldots 2N.\)

    ФОРМАТ ВЫВОДА (файл help.out):

    Выведите ответ по модулю \(10^9+7\).

    Spaceship

    дп

    Корова Беси похищена инопланетянами и сейчас находится внутри их корабля. В корабле \(N\) \((1\le N\le 60)\) комнат, помеченных \(1\ldots N\). Каждые две комнаты соединяет одна дверь. Может быть также дверь, которая ведёт из комнаты в неё же саму. Однако никакие две двери не имеют общими начальную и конечную комнаты. У Беси есть пульт с клавишами пронумерованными \(1\ldots K\) \((1 \le K \le 60)\).

    Инопланетяне отпустят Беси, если она сможет выполнить странное задание. Сначала они выбирают две комнаты, \(s\) и \(t\) \((1 \le s, t \le N)\), и два числа \(b_s\) и \(b_t\) \((1 \le b_s, b_t \le K)\). Они помещают Беси в комнату \(s\) и сразу нажимают клавишу \(b_s\). Затем Беси продолжает навигацию по кораблю, нажимая клавиши на пульте. Имеется несколько правил, которым Беси должна следовать:

    • В каждой комнате после нажатия ровно одной клавиши, она должна выбрать или выйти через дверь в другую комнату (возможно ту же самую) или остановиться.
    • Когда Беси нажимает клавишу, она больше не может нажать ту же клавишу опять, пока не нажмёт клавишу с бОльшим номером. Другими словами, нажатие клавиши с номером \(x\) делает эту клавишу недоступной для использования, пока все клавиши с номерами \(<x\) будут сброшены и опять доступны для использования.
    • Если Беси нажмёт неверно клавишу, она останется у инопланетян.

    Беси догадалась, что только если она остановится в комнате \(t\), последняя клавиша, которую она нажала, была \(b_t\) и она не нажала неверных клавиш.

    Беси беспокоится, что не сможет выполнить задание. Для \(Q\) \((1\le Q\le 60)\) запросов, каждый из которых состоит из выбора Беси \(s, t, b_s\), \(b_t\), Беси хочет узнать количество последовательностей комнат и нажатых клавиш, которые приведут к её освобождению. Выведите свой ответ по модулю \(10^9 + 7\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(N,K,Q\).

    Каждая их последующих \(N\) строк содержит \(N\) битов (каждый 0 или 1). \(j\)-ое число в \(i\)-ой строке равно 1 если существует дверь из комнаты \(i\) в комнату \(j\), и 0, если такой двери не существует.

    Далее следует \(Q\) строк, каждая содержит четыре целых числа \(b_s\), \(s\), \(b_t\), \(t\), обозначающих стартовую клавишу, стартовую комнату, финальную клавишу, финальную комнату, соответственно.

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Количество последовательностей для каждого из \(Q\) запросов по модулю \(10^9+7\) на отдельных строках.

    Sleeping Cows

    дп

    У Фермера Джона есть \(N\) \((1 \le N \le 3000)\) коров различных размеров. Изначально он построил для каждой коровы персональный амбар, но сейчас некоторые из коров переросли свои амбары. Точнее, ФД изначально построил \(N\) амбаров с размерами \(t_1,t_2,\ldots,t_N\), а коровы сейчас имеют размеры \(s_1,s_2,\ldots,s_N\) (\(1\le s_i,t_i\le 10^9\)).

    Каждую ночь коровы ищут амбар для ночевки. Корова \(i\) может спать в амбаре \(j\) если и только если, она помещается в амбар, то есть (\(s_i\le t_j\)). В каждом амбаре может ночевать только одна корова.

    Мы говорим, что соответствие коров амбарам максимально если и только если корова, назначенная амбару, помещается в него, и каждая из не назначенных коров не помещается ни в один из оставшихся свободными амбаров.

    Вычислите количество максимальных соответствий по модулю \(10^9 + 7\).

    ФОРМАТ ВВОДА (с клавиатуры / stdin):

    Первая строка содержит \(N\).

    Вторая строка содержит \(N\) разделённых пробелами целых чисел \(s_1,s_2,\ldots,s_N\).

    Третья строка содержит \(N\) разделённых пробелами целых чисел \(t_1,t_2,\ldots,t_N\).

    ФОРМАТ ВЫВОДА (на экран / stdout):

    Количество максимальных соответствий по модулю \(10^9 + 7\).

    Train Tracking 2

    дп жадные алгоритмы

    Каждый день скоростной поезд проносится мимо фермы. У него имеется \(N\) вагонов (\(1 \leq N \leq 10^5\)), помеченных положительным целым числом от 1 до \(10^9\); различные вагоны могут иметь одинаковые метки.

    Обычно Беси наблюдает как едет поезд, отслеживая метки вагонов. Однако сегодня туман, и Беси не видит метки. К счастью, она приобрела скользящее окно минимумов последовательности меток. В частности, у неё есть положительное целое число \(K\), и \(N-K+1\) положительных целых чисел \(c_1,\dots,c_{N+1-K}\), где \(c_i\) - минимальная метка среди вагонов \(i, i+1, \dots, i+K-1\).

    Помогите Беси вычислить количество способов назначить метку каждому вагону соответствующую показаниям "скользящего окна минимумов". Поскольку это число может быть очень большим, выведите ответ по модулю \(10^9 + 7\).

    Гарантируется, что существует, как минимум, один способ так назначить метки.

    ФОРМАТ ВВОДА (файл tracking2.in):

    Первая строка содержит два разделённых пробелом целых числа \(N\) и \(K\). Следующие строки содержать минимумы скользящего окна \(c_1,\dots,c_{N+1-K}\), по одному в строке.

    ФОРМАТ ВЫВОДА (файл tracking2.out):

    Одно целое число: количество способов по модулю \(10^9 + 7\), назначить положительные целые, не превышающие \(10^9\) каждому вагону, так что минимальная метка среди вагонов \(i, i+1, \dots, i+K-1\) есть \(c_i\) для всех \(1 \leq i \leq N-K+1\).

    Cow Poetry

    дп Комбинаторика жадные алгоритмы

    Беси хочет написать собственную поэму.

    Беси знает \(N\) (\(1 \leq N \leq 5000\)) слов и хочет организовать их в поэму. Она определила длину в слогах каждого слова, кроме того она распределила их в "классы рифм". Каждое слово рифмуется только с другими словами из этого же класса рифм.

    Каждая из поэм Беси включает \(M\) строк (\(1 \leq M \leq 10^5\)) и каждая строка должна состоять из \(K\) (\(1 \leq K \leq 5000\)) слогов. Более того, поэм Беси должна соответствовать специфической схеме рифм.

    Беси хочет узнать, сколько различных поэм она может написать, которые удовлетворяют указанным ограничениям.

    ФОРМАТ ВВОДА (файл poetry.in):

    Первая строка ввода содержит \(N\), \(M\), \(K\).

    Каждая из следующих \(N\) строк содержит два числа \(s_i\) (\(1 \leq s_i \leq K\)) и \(c_i\) (\(1 \leq c_i \leq N\)). Они обозначают, что Беси знает слово с длиной (в слогах) \(s_i\) и класса рифмы \(c_i\).

    Последние \(M\) строк описывают желаемую схему рифмы Беси и каждая содержит одну большую букву \(e_i\). Все строки соответствующие \(e_i\) должны заканчиваться словами одного и того же кдасса рифм. Строки с различными значениями \(e_i\) не обязательно заканчиваются словами с различными классами рифм.

    ФОРМАТ ВЫВОДА (файл poetry.out):

    Выведите количество поэм, которые может Беси написать, удовлетворяющих все заданным ограничениям. Поскольку это число может быть очень велико, выводите ответ по модулю 1,000,000,007.

    Mowing Mischief

    дп

    Элла и Белла приехали на ферму.

    Они решили скосить как можно больше травы. Травяное пастбище представляет из себя квадрат \(T \times T\). Левый нижний угол квадрата имеет координаты \((0,0)\), а правый верхний угол имеет координаты \((T,T)\). Поэтому квадрат содержит \((T+1)^2\) точек решётки. (точки с целочисленными координатами).

    Элла и Белла обе планируют начать в точке \((0,0)\) и двигаться с постоянной единичной скоростью в точку \((T, T)\), каждая держит в руках очень острую проволоку. Трава в области, которую прошла эта проволока, будет срезана. Елла и Белла имеют разные пути, но они состоят из шагов вверх и вправо, от одной точки решётки к другой точке решётки.

    Бесси беспокоится, что будет скошено слишком много травы, поэтому она придумала хитроумный план ограничить пути Эллы и Беллы. Имеется \(N\) вкуснейших цветков, \((1 \leq N \leq 2 \cdot 10^5\)) разбросанных по пастбищу, каждый размещён в различной точке решётки. Беси выбрала множество из \(S\) цветков, и потребовала от Беллы и Эллы, чтобы они обязательно посетили точки цветков. То есть, путь Эллы должен пройти через эти \(S\) точек, также как и путь Беллы. Бесси выбрала \(S\) как максимально возможное среди всех подмножеств цветков, которое можно посетить на пути из \((0,0)\) в \((T,T)\), двигаясь только вверх или вправо.

    Элла и Белла стараются максимизировать количество травы, которую они выкосят, посетив указанные \(S\) цветков. Помогите Беси выбрать \(S\) таким, чтобы количество выкошенной травы было минимально возможным.

    ФОРМАТ ВВОДА (файл mowing.in):

    Первая строка содержит \(N\) и \(T\) (\(1 \leq T \leq 10^6\)). Каждая из последующих \(N\) строк содержит целоечисленные координаты цветка \((x_i, y_i)\). Гарантируется, что \(1 \leq x_i, y_i \leq T-1\) для всех \(i\) и что никакие два цветка не лежат на одной горизонтали или вертикали.

    Не меньше чем в 20% тестов гарантируется \(N \leq 3200\).

    ФОРМАТ ВЫВОДА (файл mowing.out):

    Одно число, минимальное количество травы, которое будет выкошено.

    Tree Depth

    дп разделяй и властвуй математика

    На Новый год Фермер Джон решил подарить своим коровам праздничное двоичное дерево поиска (BST)

    Чтобы сгенерировать это BST, ФД начинает с перестановки \(a=\{a_1,a_2,\ldots,a_N\}\) целых чисел \(1\ldots N\), где \(N\le 300\). Затем он выполняет следующий псевдокод с аргументами \(1\) and \(N\).

    generate(l,r):
      if l > r, return empty subtree;
      x = argminl <= i <= r ai; // index of min ai in {al,...,ar}
      return a BST with x as the root, 
        generate(l,x-1) as the left subtree,
        generate(x+1,r) as the right subtree;
    

    Например, перестановка \(\{3,2,5,1,4\}\) сгенерирует такое BST

        4
       / \
      2   5
     / \ 
    1   3
    

    Пусть \(d_i(a)\) обозначает глубину вершины \(i\) в дереве, соотвествующем \(a\), то есть количество вершин на пути из \(a_i\) к корню. В примере выше, \(d_4(a)=1, d_2(a)=d_5(a)=2,\) and \(d_1(a)=d_3(a)=3\).

    Количество инверсий \(a\) равно количеству пар целых чисел \((i,j)\), таких что \(1\le i<j\le N\) и \(a_i>a_j\). Коровы знают, что \(a\), которую ФД использовал для генерации BST, имеет ровно \(K\) инверсий \((0\le K\le \frac{N(N-1)}{2})\). Среди всех перестановок \(a\), удовлетворяющих этому условию, вычислите Остаток, когда \(\sum_ad_i(a)\) поделено на \(M\) для каждого \(1\le i\le N\).

    ФОРМАТ ВВОДА (файл treedepth.in):

    Единственная строка ввода содержит три разделённых одиночными пробелами целых числа: \(N, K\), \(M\), за которыми идёт перевод строки. \(M\) будет простым числом в интервале \([10^8,10^9+9]\).

    ФОРМАТ ВЫВОДА (файл treedepth.out):

    Выведите \(N\) разделённых одиночными пробелами целых чисел, обозначающих \(\sum_ad_i(a)\pmod{M}\) для каждого \(1\le i\le N.\)

    ОЦЕНИВАНИЕ (по группам) :

    • Тесты 3-4 удовлетворяют \(N\le 8.\)
    • Тесты 5-7 удовлетворяют \(N\le 20.\)
    • Тесты 8-10 удовлетворяют \(N\le 50.\)

    Greedy Pie Eaters

    дп

    У Фермера Джона \(M\) коров, последовательно пронумерованных \(1 \ldots M\), кушают траву. В качестве подарка коровам ФД испёк \(N\) пирогов (\(1 \leq N \leq 300\)), помеченных \(1 \ldots N\). Корова \(i\) наслаждается пирогами с метками в интервале \([l_i, r_i]\) (от \(l_i\) до \(r_i\) включительно), и никакие две коровы не имеют точности совпадающие интервалы пирогов. Корова \(i\) имеет вес \(w_i\), который является целым числом в интервале \(1 \ldots 10^6\).

    ФД может выбрать последовательность коров \(c_1,c_2,\ldots, c_K,\) после чего выбранные коровы будут кушать по очереди в указанном порядке. К несчастью, коровы не умеют делиться. Когда настаёт очередь кушать коровы \(c_i\), она съедает все куски, которыми она наслаждается, то есть все оставшиеся куски в интервале \([l_{c_i},r_{c_i}]\). ФД хочет избежать неловкой ситуации, когда наступает очередь кушать коровы, но все куски, которыми она наслаждается, уже съедены. Поэтому он хочет вычислить наибольший возможный суммарный вес (\(w_{c_1}+w_{c_2}+\ldots+w_{c_K}\)) последовательности \(c_1,c_2,\ldots, c_K\) для которой каждая корова съест хотя бы один кусок.

    ОЦЕНИВАНИЕ:

    • Тесты 2-5 удовлетворяют \(N\le 50\) and \(M\le 20\).
    • тесты 6-9 удовлетворяют \(N\le 50\).

    ФОРМАТ ВВОДА (файл pieaters.in):

    Первая строка ввода содержит два целых числа \(N\) и \(M\) \(\left(1\le M\le \frac{N(N+1)}{2}\right)\).

    Каждая из последующих \(M\) строк описывает корову целыми числами \(w_i, l_i\), \(r_i\).

    ФОРМАТ ВЫВОДА (файл pieaters.out):

    Выведите максимально возможный суммарный вес корректной последовательности.

    Moortal Cowmbat

    дп

    Беси уже долго играет в популярную игру Moortal Cowmbat. Однако недавно разработчики выпустили обновление игры, которое заставило Беси изменить свой стиль игры.

    Игра использует \(M\) клавиш, помеченных первыми \(M\) маленькими латинскими буквами (\(1 \leq M \leq 26\)). Любимая комбинация ходов Беси в этой игре это строка \(S\) длиной \(N\) (\(1 \leq N \leq 10^5\)), описывающая нажатые клавиши. Однако в связи с обновлением игры каждая комбинация теперь должна состоять из серий "полос", где "полоса" определяется как серия нажатий одной и той же клавиши не менее \(K\) раз подряд (\(1 \leq K \leq N\)). Беси хочет модифицировать её любимую комбинацию такой же длины \(N\), на сделанную из полос клавиш, удовлетворяющих введённым правилам.

    \(a_{ij}\) дней требуется Беси, чтобы научиться нажимать клавишу \(j\) вместо клавиши \(i\) в любом месте её комбинации (то есть это стоит \(a_{ij}\) - изменить один символ в строке \(S\) c \(i\) на \(j\)). Заметим, что может так оказаться, что выгоднее (меньше дней) переключиться на использование с \(i\) на промежуточную клавишу \(k\) и затем с \(k\) на \(j\), чем непосредственно переключаться с \(i\) на \(j\) (или, обобщая, может быть путь изменений, начинающийся с \(i\) и заканчивающийся в \(j\), который обеспечивает более выгодную стоимость (меньшее количество дней), чем непосредственное переключение с клавиши \(i\) на клавишу \(j\)).

    Помогите Беси определить минимально возможное количество дней, которое требуется ей, чтобы создать комбинацию, удовлетворяющую новым ограничениям.

    ОЦЕНИВАНИЕ:

    • Тесты 2-4 удовлетворяют \(N\le 1000, K\le 50\).
    • тесты 5-8 удовлетворяют \(N\le 30,000, K\le 50\).

    ФОРМАТ ВВОДА (файл cowmbat.in):

    Первая строка ввода содержит \(N\), \(M\) и \(K\). Вторая строка содержит \(S\), а последние \(M\) строк содержат матрицу \(M\times M\) значений \(a_{ij}\), где \(a_{ij}\) - целое число в интервале \(0 \ldots 1000\) и \(a_{ii} = 0\) для всех \(i\).

    ФОРМАТ ВЫВОДА (файл cowmbat.out):

    Выведите одно целое число, представляющее минимальное количество дней, которое требуется Беси для изменения её комбинации так, чтобы она стала удовлетворять новым ограничениям.

    Talent Show

    дп

    Фермер Джон привёл \(N\) своих коров, последовательно пронумерованных \(1 \ldots N\), на ярмарку, где проводится соревнование талантливых коров. Его \(i\)-ая корова имеет вес \(w_i\) уровень таланта \(t_i\) - оба целые числа.

    Сразу по прибытии ФД был удивлён новыми правилами соревнования:

    (i) Должна участвовать группа коров весом не менее \(W\)

    (ii) Группа с наибольшим коэффициентом отношения таланта к весу побеждает.

    ФД заметил, что все его коровы вместе весят не менее \(W\), поэтому он легко удовлетворит условие (i). Помогите ему определить наивысший коэффициент отношения таланта к весу для любой из его команд.

    ФОРМАТ ВВОДА (файл talent.in):

    Первая строка ввода содержит \(N\) (\(1 \leq N \leq 250\)) и \(W\) (\(1 \leq W \leq 1000\)). Каждая из следующих \(N\) строк описывает корову двумя целыми числами \(w_i\) (\(1 \leq w_i \leq 10^6\)) и \(t_i\) (\(1 \leq t_i \leq 10^3\)).

    ФОРМАТ ВЫВОДА (файл talent.out):

    Определите наибольший возможный коэффициент отношения таланта к весу для групп ФД весом не менее \(W\). Если Ваш ответ \(A\), выведите целую часть от \(1000A\), чтобы ответ получился целым числом. Дробная часть результата отбрасывается, с округлением вниз до целого, если число не целое.

    Stamp Painting

    дп

    У Беси есть полоса холста длиной \(N\) единиц(\(1 \leq N \leq 10^6\)), которую она собирается раскрасить. У неё есть \(M\) резиновых штампов различных цветов (\(1 \leq M \leq 10^6\)), каждый штамп имеет \(K\) в ширину (\(1 \leq K \leq 10^6\)). Она хочет точно узнать, сколько различных рисунков она может создать, используя свои штампы в некотором порядке.

    Чтобы использовать штамп, он должен занять ровно \(K\) соседних единиц холста. Штамп не может выходить за концы холста, и не может покрывать часть единицы. Однажды размещённый, штамп закрашивает \(K\) покрытых единиц своим цветом. Любой штамп может быть использован множество раз, один раз или даже не использован ни разу. Но к моменту завершения работы Беси, каждая единица холста должна быть закрашена как минимум один раз.

    Помогите Беси оперделить количество различных рисунков, которые она может нарисовать по модулю \(10^9 + 7\). Два рисунка, которые выглядят идентично, но были нарисованы различными штамповыми операциями, засчитываются как один и тот же рисунок.

    Как минимум в 75% тестов, \(N,K \leq 10^3\).

    ФОРМАТ ВВОДА (файл spainting.in):

    Первая строка ввода содержит три целых числа \(N\), \(M\), \(K\). Гарантируется, что \(K \leq N\).

    ФОРМАТ ВЫВОДА (файл spainting.out):

    Одно целое число, количество различных раскрашиваний по модулю \(10^9 + 7\).

    Balance Beam

    дп

    Для того, чтобы заработать денег на новое стойло, корова Беси начала давать представление в местном цирке, демонстрируя свои свои замечательные возможности балансировать ходя вперёд и назад по высоко подвешенному бревну.

    Количество заработанных денег зависит от того, где она спрыгнет с бревна. Бревно имеет позиции, помеченные \(0, 1, \ldots, N+1\) слева направо. Если Беси достигнет точки \(0\) или \(N+1\), она упадёт с бревна и не получит деньги.

    Если Беси находится в позиции \(k\), она может сделать что-то из следующего:

    1. Бросить монету. Если она увидит хвост("орёл"), она идёт в позицию \(k-1\), а если она увидит голову("решка"), она идёт в позицию \(k + 1\) (т.е с вероятностью \(\frac{1}{2}\) в обоих случаях).

    2. Спрыгнуть с бревна и получить плату \(f(k)\) \((0 \leq f(k) \leq 10^9)\).

    Беси поняла, что она не может гарантировать конкретный доход, поскольку её движение управляется случайным выбрасыванием монеты. Однако, основываясь на позиции, где она начинает, она хочет определить какой будет её ожидаемая выплата, если она сделает оптимальную последовательность решений ("оптимальную" означает, что решения приведут к наибольшей возможной ожидаемой выплате.) Например, её стратегия заработать выплату \(10\) с вероятностью \(1/2\), \(8\) с вероятностью \(1/4\), или \(0\) с вероятностью \(1/4\) приведёт к тому что её ожидаемая выплата будет взвешенной средней величиной \(10(1/2) + 8(1/4) + 0(1/4) = 7\).

    ФОРМАТ ВВОДА (файл balance.in):

    Первая строка ввода содержит \(N\) (\(2 \leq N \leq 10^5\)). Каждая из оставшихся \(N\) строк содержит \(f(1) \ldots f(N)\).

    ФОРМАТ ВЫВОДА (файл balance.out):

    Выведите \(N\) строк. В строке \(i\), выведите \(10^5\) умножить на ожидаемую оплату если Беси стартует в позиции \(i\) и будет играть оптимально, округлённую до ближайшего целого числа.

    Palindromic Paths (Bronze)

    дп

    Ферма Джона представлена решёткой из \(N \times N\) полей(\(2 \le N \le 18\)), каждое из которых помечено буквой алфавита. Например,

    
    ABCD
    
    BXZX
    
    CDXB
    
    WCBA
    
    

    Каждый день корова Беси идёт с левого верхнего угла в правый нижний, двигаясь либо на одну клетку вправо, либо на одну клетку вниз. Беси записывает строку, которая получается в результате её маршрута, построенную из букв, по которым она прошла. Он будет очень расстроена, если в результате построенная строка окажется палиндромом (читается одинаково от начала к концу и от конца к началу), поскольку она запутается в каком направлении она шла.

    Пожалуйста, помогите Беси определить количество различных палиндромов, которые она сможет сформировать во время своего путешествия. Различные способы формировать один и тот же палиндром следует учитывать только один раз. Например, в примере выше имеется несколько способов сформировать палиндром ABXZXBA, однако существует всего 4 различных палиндрома, которые Беси может сформировать ABCDCBA, ABCWCBA, ABXZXBA, ABXDXBA.

    ФОРМАТ ВВОДА (файл palpath.in):

    Первая строка ввода содержит \(N\), а последующие \(N\) строк содержат \(N\) описание поля. Каждая строка содержит по \(N\) символов в диапазоне A..Z.

    ФОРМАТ ВЫВОДА (файл palpath.out):

    Выведите количество различных палиндромов, которые Беси может сформировать.

    Fair Photography

    дп


    N (1 <= N <= 100,000) коров Фермера Джона стоят в различных позициях вдоль длинной изгороди. I-ая корова находится на позиции xi (целое число в интервале 0...1,000,000,000) и имеет породу bi (целое число в интервале 1..8). Никакие две коровы не занимают одну и ту же позицию.
    ФД хочет сделать фотографию непрерывного интервала коров, но так чтобы все породы коровы были представлены одинаковым количеством коров. Например, фото из 27 коров породы 1 и 27 коров породы 3 – подходит, фото из 27 коров породы 1 и 27 коров породы 3 – подходит и 27 коров породы 4 тоже подходит, а 9 породы 1 и 10 породы 3 не подходит. ФД также хочет чтобs по крайнеq мере K (K>=2) пород из 8 имеющихся были представлены на фото. Помогите ФД определить фот максимального размера, которое удовлетворяет требованиям ФД. Размер фото – это разница между максимальной и минимальной позициями коров на фото.
    Если не существует фото, удовлетворяющего всем ограничениям, выведите -1.
    PROBLEM NAME: fairphoto
    Формат ввода:
    * Строка 1: N и K разделённые одним пробелом
    * Строки 2..N+1: Каждая строка содержит описание одной коровы двумя целыми числами, разделёнными одним пробелом: xi и ID-породы


    Примечание
    ID пород: 1 2 3 - 1 1 2 3 1 - ... - 1 Местоположения: 1 2 3 4 5 6 7 8 9 10 ... 99 100
    Формат вывода:
    * Строка 1: Одно целое число, указывающее максимальный размер подходящего фото. Если таких фото нет, выведите -1.


    Примечание
    В интервале от x = 2 до x = 8 имеется по 2 коровы каждой из пород 1, 2,3. В интервале от 9 до 100 есть 2 коровы породы 1, но поскольку K=2, этот интервал не подходит.

    Secret Code

    дп

    Problem 3: Secret Code [Brian Dean and Lewin Gan]
    У Фермера Джона есть секретное сообщение, которое он хочет зашифровать от своих коров. Сообщение – это строка, которая содержит не менее двух символов A..Z.
    Чтобы зашифровать его, ФД применяет последовательность «операций» к нему. Операция, применённая к строке S, сначала сокращает S, удалив из неё некоторое количество символов сначала (но не все) или некоторое количество символов с конца (но не все), после чего добавляет исходную строку в начало или конец. Например, одна операция, применённая к строке ABC может дать 8 возможных строк:
    AABC ABABC BCABC CABC ABCA ABCAB ABCBC ABCC
    По заданной зашифрованной строке подсчитайте количество возможных способов создать такую строку применив одну или более операций к некоторой исходной строке. Операции считаются различными, даже если результат их выполнения одна и та же строка. Например, имеются 4 различных способа получить строку AAA из строки AA, соответствующих 4 возможным операциям, описанным выше.
    Выведите ответ по модулю 2014.
    PROBLEM NAME: scode
    Формат входных данных
    * Строка 1: строка с длиной не более 100.
    Формат выходных данных
    * Line 1: Количество различных способов, которыми ФД может получить эту строку, применяя одну или более последовательных операций к строке с длиной не менее 2, выведенное по модулю 2014. Если не существует таких способов, выводите 0.
    Примечание
    Имеется 8 способов получить строку ABABA: 1. Начиная с ABA -> AB+ABA 2. Начиная с ABA -> ABA+BA 3. Начиная с AB -> AB+A -> AB+ABA 4. Начиная с AB -> AB+A -> ABA+AB 5. Начиная с BA -> A+BA -> AB+ABA 6. Начиная с BA -> A+BA -> ABA+AB 7. Начиная с ABAB -> ABAB+A 8. Начиная с BABA -> A+BABA

    Secret Code

    дп

    Problem 3: Secret Code [Brian Dean and Lewin Gan]
    У Фермера Джона есть секретное сообщение, которое он хочет зашифровать от своих коров. Сообщение – это строка, которая содержит не менее двух символов A..Z.
    Чтобы зашифровать его, ФД применяет последовательность «операций» к нему. Операция, применённая к строке S, сначала сокращает S, удалив её первый символ или её последний символ, после чего добавляет исходную строку в начало или конец. Например, одна операция, применённая к строке ABCD может дать 4 возможных строки:
    BCDABCD ABCABCD ABCDABC ABCDBCD
    По заданной зашифрованной строке подсчитайте количество возможных способов создать такую строку применив одну или более операций к некоторой исходной строке. Операции считаются различными, даже если результат их выполнения одна и та же строка. Например, имеются 4 различных способа получить строку AAA из строки AA, соответствующих 4 возможным операциям, описанным выше.
    PROBLEM NAME: scode
    Формат входных данных
    * Строка 1: строка с длиной не более 100.
    Формат выходных данных
    * Line 1: Количество различных способов, которыми ФД может получить эту строку, применяя одну или более последовательных операций к строке с длиной не менее 2. Если не существует таких способов, выводите 0.
    Примечание
    Имеется 6 способов получить строку ABABA: 1. Начиная с ABA -> AB+ABA 2. Начиная с ABA -> ABA+BA 3. Начиная с AB -> AB+A -> AB+ABA 4. Начиная с AB -> AB+A -> ABA+AB 5. Начиная с BA -> A+BA -> AB+ABA 6. Начиная с BA -> A+BA -> ABA+AB

    Figure Eight

    дп


    Коровы ФД недавно нашли огромный кусок мрамора, в котором есть некоторое количество несовершенств. Для их описания мы представим кусок мрамора квадратной решеткой N*N (5<=N<=300), где символ '*' указывает несовершенство, а символ '.' указывает совершенный фрагмент мрамора.
    Коровы хотят выгравировать число 8 на этом куске мрамора. И им нужна помощь в оптимальном расположении гравировки, которая должна удовлетворять следующим условиям (указывающим корректность рисунка цифры 8):
    * Цифра 8 состоит из двух прямоугольников, верхнего и нижнего. * Внутри каждого прямоугольника должна быть хотя бы она ячейка. * Нижняя сторона верхнего прямоугольника - подмножество верхней стороны нижнего прямоугольника * Цифру 8 можно гравировать только на совершенных фрагментах мрамора.
    Эстетический счет рисунка цифры 8 равен произведению областей, окруженных обоими прямоугольниками. Коровы хотят максимизировать это число.
    Пусть, например, дан такой кусок мрамора:
    ............... ............... ...*******..... .*....*.......* .*......*....*. ....*.......... ...*...****.... ............... ..**.*..*..*... ...*...**.*.... *..*...*....... ............... .....*..*...... .........*..... ...............
    Оптимальная гравировка цифры 8 такова:
    ..88888888888.. ..8.........8.. ..8*******..8.. .*8...*.....8.* .*8.....*...8*. ..8.*.......8.. ..8*...****.8.. .88888888888888 .8**.*..*..*..8 .8.*...**.*...8 *8.*...*......8 .8............8 .8...*..*.....8 .8.......*....8 .88888888888888
    Верхний прямоугольник имеет область 6x9=54, а нижний 12x6=72. Итого эстетический счет 54*72 = 3888.

    PROBLEM NAME: eight
    Формат входных данных
    * Строка 1: Одно целое число N, указывающее длину стороны куска мрамора
    * Строки 2..N+1: Каждая строка описывает строку куска мрамора, и содержит N символов, каждый из которых либо '*' (несовершенство) или '.' (безупречная секция).
    Формат выходных данных
    * Строка 1: Максимальный эстетический счет, который может быть получен не используя для гравировки никакие несовершенные квадраты мрамора. Если невозможно выгравировать 8 при таких ограничениях, выведите -1.

    Haywire

    Перебор битмаски дп


    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 единиц длины провода.

    No Change

    дп


    Фермер Джон на рынке. У него в кармане K монет (1<=K<=16), каждая в диапазоне 1..100,000,000. ФД хочет сделать серию из N покупок (1 <= N <= 100,000), причём i-ая покупка имеет стоимость c(i) (1 <= c(i) <= 10,000). Во время выполнения последовательности покупок, ФД может периодически останавливаться и платить за все покупки выполненные с момента последней оплаты (конечно монета должна быть достаточно большой для этого). Покупки всегда делаются одной монетой, но у продавцов нет сдачи. Поэтому, если монета больше, чем количество денег, которое он должен заплатить, то разница теряется.
    Определите максимальное количество денег, с которым ФД может закончить покупку всех N покупок в заданной последовательности. Выведите -1, если ФД не может сделать все покупки.
    PROBLEM NAME: nochange
    Формат входных данных
    * Строка 1: Два целых числа, K и N.
    * Строки 2..1+K: Каждая строка содержит количество денег на соответствующей монете ФД
    * Строки 2+K..1+N+K: Эти N строк содержат стоимости покупок ФД


    Формат выходных данных
    * Строка 1: Максимальное количество денег, которое окажется у фермера в окнце покупок, или -1 если ФД не сможет выполнить все покупки.
    Примечание
    ФД потратит монету с ценностью 10 на первые две покупки, и затем монету с ценностью 15 на оставшиеся покупки. У него останется монета с ценностью12.

    Route Design

    дп


    Беси открыла агентство путешествий вдоль реки Амазонка. Имеется несколько туристических мест на обоих сторонах реки, для каждого некоторое целое число задает насколько это место интересно туристам.
    Туристические места соединены маршрутами через реку. Иными словами, нет маршрутов, соединяющих туристические места по одной стороне реки.
    Беси хочет найти такую последовательность посещения туристических мест чтобы максимизировать сумму значений ассоциированных с каждым посещенным местом и чтобы никакие два маршрута в этой последовательности не пересекались.
    Два маршрута (a <-> x) и (b <-> y) пересекаются тогда и только тогда, когда (a < b и y < x) или ((b < a и x < y) или (a = b and x = y).
    Помогите Беси найти такой маршрут. Беси может начинать и заканчивать маршрут в любом месте и на любой стороне реки.

    PROBLEM NAME: route
    Формат входных данных
    * Строка 1: Три разделенных пробелом целых числа N (1 <= N <= 40,000), M (1 <=M <= 40,000), и R (0 <= R <= 100,000) указывающих соответственно количество мест на левой стороне реки, количество мест на правой стороне реки и количество маршрутов.
    * Строки 2..N+1: (i+1)-ая строка содержит одно целое число, Li (0 <= Li <= 40,000), указывающее число i-го места на левой стороне реки
    * Строки N+2..N+M+1: (i+N+1)-ая строка содержит одно целое число, Ri (0 <= Ri <= 40,000), указывающее число i-го места на правой стороне реки
    * Строки N+M+2..N+M+R+1: Каждая строка содержит два целых числа разделенных пробелом I (1 <= I <= N) и J (1 <= J <= M) указывающих двунаправленный маршрут между местом I на левой стороне реки и местом J на правой стороне реки.

    Формат выходных данных
    * Строка 1: Одно целое число, указывающее максимальную сумму значений включенных в тур.


    Примечание
    Оптимальный тур начинается в месте 1 на левой стороне, затем в место 1 на правой стороне и затем сайт 3 слева. Соответсвующие значения 1 2 5 дают сумму 8.

    Balanced Cow Breeds

    дп


    Фермер Джон обычно помечает своих коров круглой меткой, но сейчас его пометочная машина сломалась, и он решил помечать коров отметкой в форме скобок. У него есть две породы коров Holsteins и Guernseys. Каждую породу он помечает меткой в виде скобки. В зависимости от того, В какую сторону корова смотрит, скобка может выглядеть как левая или как правая.
    N коров фермера Джона стоят в ряд, каждая смотрит в произвольном направлении, поэтому мы получаем строку скобок длиной N. Глядя на нее, ФД обнаружил, что если смотреть слева направо, то только для коров Holsteins (в порядке, в котором они появились в последовательности), Получится сбалансированная последовательность скобок, однако то же самое верно и для Guernseys! Чтобы выяснить, насколько это редкое событие, Помогите ФД вычислить количество различных способов, которыми можно назначить породы этим N коровам, чтобы выполнялось такое свойство.
    Есть несколько способов определить сбалансированную строку. Один из них такой: Строка должна иметь одинаковое количество левых и правых скобок. И для любого префикса строки количество левых скобок должно быть не меньше, чем количество правых скобок.
    Например, следующие последовательности скобок сбалансированные:
    () (()) ()(()())
    А эти - нет.
    )( ())( ((())))
    PROBLEM NAME: bbreeds
    Формат входных данных
    * Строка 1: Строка скобок длины N (1 <= N <= 1000).
    Формат выходных данных
    * Строка 1: Одно целое число - количество способов назначить породы так, чтобы Holsteins формировали сбалансированную последовательность скобок и аналогично Guernseys. Поскольку ответ может быть очень большим, выведите остаток от его деления на 2012. Корректным считается использование только одного типа породы.
    Примечание Вот корректные назначения пород (()) HHHH
    (()) GGGG
    (()) HGGH
    (()) GHHG
    (()) HGHG
    (()) GHGH

    Balanced Cow Breeds

    дп


    Фермер Джон обычно помечает своих коров круглой меткой, но сейчас его пометочная машина сломалась, и он решил помечать коров отметкой в форме скобок. У него есть две породы коров Holsteins и Guernseys. Каждую породу он помечает меткой в виде скобки. В зависимости от того, В какую сторону корова смотрит, скобка может выглядеть как левая или как правая.
    N коров фермера Джона стоят в ряд, каждая смотрит в произвольном направлении, поэтому мы получаем строку скобок длиной N. Глядя на нее, ФД обнаружил, что если смотреть слева направо, то только для коров Holsteins (в порядке, в котором они появились в последовательности), Получится сбалансированная последовательность скобок, однако то же самое верно и для Guernseys! Чтобы выяснить, насколько это редкое событие, Помогите ФД вычислить количество различных способов, которыми можно назначить породы этим N коровам, чтобы выполнялось такое свойство.
    Есть несколько способов определить сбалансированную строку. Один из них такой: Строка должна иметь одинаковое количество левых и правых скобок. И для любого префикса строки количество левых скобок должно быть не меньше, чем количество правых скобок.
    Например, следующие последовательности скобок сбалансированные:
    () (()) ()(()())
    А эти - нет.
    )( ())( ((())))
    PROBLEM NAME: bbreeds
    Формат входных данных
    * Строка 1: Строка скобок длины N (1 <= N <= 1000).
    Формат выходных данных
    * Строка 1: Одно целое число - количество способов назначить породы так, чтобы Holsteins формировали сбалансированную последовательность скобок и аналогично Guernseys. Поскольку ответ может быть очень большим, выведите остаток от его деления на 2012. Корректным считается использование только одного типа породы.
    Примечание Вот корректные назначения пород (()) HHHH
    (()) GGGG
    (()) HGGH
    (()) GHHG
    (()) HGHG
    (()) GHGH

    Bale Share

    дп


    Фермер Джон только что получил N (1 <= N <= 20) упаковок сена, упаковка I имеет размер Si (1 <= Si <= 100). Он хочет разделить упаковки между тремя амбарами как можно более справедливо.
    Под справедливостью он понимает минимальную разницу между максимальными значениями. То есть, если B1, B2, B3 - суммарные размеры всех упаковок, в амбарах 1 2 и 3 соответственно (где B1>=B2>=B3), то ФД хочет чтобы B1 был самым минимальным из всех возможных.
    Например пусть есть 8 упаковок с размерами:
    2 4 5 8 9 14 15 20
    Справедливое решение есть:
    Амбар 1: 2 9 15 B1 = 26 Амбар 2: 4 8 14 B2 = 26 Амбар 3: 5 20 B3 = 25
    Пожалуйста, помогите ФД определить B1 справедливого распределения.
    PROBLEM NAME: baleshare
    Формат входных данных
    * Строка 1: Количество упаковок, N.
    * Строки 2..1+N: Строка i+1 содержит Si, размер i-ой упаковки.
    Формат выходных данных
    * Строка 1: Выведите значение B1 справедливого распределения упаковок

    Cow Run

    дп


    Фермер Джон и Беси придумали новую игру для коров. Коровы бегут по круглой дорожке длиной M (2 <= M <= 1 000 000 000), начиная с с одной и той же позиции. Игра проходит в N (1<=N<14) раундов с использованием колоды из 8N карт, на каждой из которых написано число Xi (0 <= Xi < M).
    На каждом раунде ФД перемещает верхние 8 карт в отдельную кучку и выбирает или верхние 4 или нижние 4 для Беси. Затем Беси из них выбирает или верхние 2 или нижние 2 карты. После этого ФД называет число X_top, которое написано на верхней карте и коровы бегут расстояние R * X_top, где R - это общее расстояние, которое коровы пробежали до сих пор, затем Беси называет число X_bottom, которое было написано на нижней карте и коровы бегут расстояние X_bottom.
    ФД беспокоиться, чтобы коровы не сильно устали и могли вернуться домой. Если коровы убегут больше чем на расстояние K (0<=K<=floor(M/2)) от стартовой позиции, то они не смогут вернуться домой.
    Гарантируется, что если ФД играет корректно, он всегда может обеспечить чтобы коровы вернулись домой, вне зависимости от ходов, которые делает Беси. Для каждого раунда Ваша задача - определить, какую половину карт должен выбирать ФД, чтобы вне зависимости от ходов Беси, коровы всегда могли вернуться домой. Беси делает ход, описанный на вводе, а Вы должны продолжить в следующий раунд. Заметим, что несмотря на то, что ходы Беси заданы на входе, Вы должны определить ходы для ФД, которые будут работать вне зависимости от выбора Беси и эти ходы были эффективны, как если бы ФД не знал ходы Беси.
    PROBLEM NAME: cowrun
    Формат входных данных
    * Строка 1: три разделенных пробелами целых числа N, M, K
    * Строка 2: N символов. Если i-ый символ есть 'T', значит Беси выберет верхние две карты в этом раунде, иначе если i-ый символ есть 'B', это значит что Беси выберет две нижние карты на этом раунде.
    * Строки 3..2+N: каждая строка содержит 8 целых чисел, представляющих 8 карт, которые будут использованы в этом раунде, сверху вниз.
    Формат выходных данных
    * Строка 1: Строка из N символов, где i-ый символ есть 'T' если ФД должен выбрать верхние 4 карты и 'B', если ФД должен выбрать нижние 4 карты в i-ом раунде. Если существует несколько способов, чтобы коровы вернулись домой, выберите лексикографически наименьший (строка, ему соответствующая должна быть наименьшей в алфавитном порядке).
    Примечание
    Коровы должны закончить точно в том месте, где начали, чтобы они могли вернуться домой. Заметим, что ФД не принимает во внимание ходы Беси, иначе он мог выбрать нижнюю половину оба раза.

    Umbrellas for Cows

    дп


    Сегодня - дождь.! N (1 <= N <= 5,000) коров Фермера Джона, пронумерованные от 1 до N не хотят мокнуть. Но они стоят в стойлах без крыш. Сойла расположены на прямой, с X_координатой от 1 до M (1 <= M <= 100,000). Корова i расположена в стойле с координатой Xi (1<=Xi<=M) . Никакие две коровы не стоят в одном стойле.
    Для того, чтобы защитить коров от дождя, ФД хочет купить им зонтики. Один зонтик, который расположен от координаты Xi до координаты Xj (Xi<=Xj) имеет ширину (Xj-Xi+1). CW (1 <= CW <= 1,000,000) - цена зонтика шириной W. Необязательно, что более широкий зонтик стоит дороже более узкого.
    Помогите ФД определить минимальную сумму, которую ФД должен потратить на покупку зонтиков, чтобы защитить от дождя всех своих коров.
    PROBLEM NAME: umbrella
    Формат входных данных
    * Строка 1: Два разделенных пробелами целых числа: N M.
    * Строки 2..N+1: Строка i+1 содержит одно целое число: Xi.
    * Строки N+2..N+M+1: Строка N+j+1 содержит одно целое число: Cj.
    Формат выходных данных
    * Строка 1: Одно целое число - минимальная стоимость покупки зонтиков для покрытия всех коров.


    Примечание
    При покупке зонтиков с размерами 4, 1 и 2, можно покрыть всех коров и это будет стоить 9 (4+2+3=9)
    UUUUUUUUUU U UUUU C C C C C C |--|--|--|--|--|--|--|--|--|--|--| 1 2 3 4 5 6 7 8 9 10 11 12
    C представляет корову, U представляет часть зонтика.

    E. Сортируем перестановки

    дп битмаски разделяй и властвуй

    Пусть у вас есть перестановка a1, a2, ..., an, состоящая из чисел от 1 до n. Предположим, что за одну секунду можно выбрать набор непересекающихся пар (u1, v1), (u2, v2), ..., (uk, vk) и одновременно поменять местами aui и avi для всех i (1 ≤ ui < vi ≤ n). Пары не должны пересекаться, то есть все 2k чисел ui, vj должны быть различны.

    Вы хотите отсортировать заданную перестановку по возрастанию как можно быстрее с помощью описанных операций. Вычислите количество способов, которыми это можно сделать. Два способа различны тогда и только тогда, когда существует такой момент времени t, что в этих способах в этот момент времени выбраны два различных множества пар (порядок пар не имеет значения). Если заданная перестановка уже отсортирована, на ее сортировку не требуется времени. Таким образом, количество способов сортировки равно 1.

    Для того, чтобы усложнить задачу, мы выкинули k чисел из перестановки. Теперь ровно k чисел перестановки a1, a2, ..., an еще не определены. Для каждого возможного способа расставить выкинутые числа в перестановке a, нужно посчитать описанное количество способов сортировки и вывести сумму этих значений по модулю 1000000007 (109 + 7).

    Входные данные

    В первой строке записано два целых числа n (1 ≤ n ≤ 105) и k (0 ≤ k ≤ 12). Во второй строке записана перестановка a1, ..., an (0 ≤ ai ≤ n). Если число еще не определено, вместо него записан 0. В перестановке ровно k нулей. Все числа ai, которые не равны нулю, различны.

    Выходные данные

    Выведите общую сумму количества способов по модулю 1000000007 (109 + 7).

    Туристический маршрут

    графы дп

    Школьники приехали на экскурсию в новый город и решили осмотреть его достопримечательности. Представим город в виде прямоугольной сетки \(n \times m\), в некоторых клетках которой могут находиться достопримечательности.

    Друзья начинают свой путь в клетке \((1, 1)\), они хотят дойти до клетки \((n,m)\), а затем вернуться обратно. В городе есть \(k\) достопримечательностей, они расположены в клетках \((x_1, y_1), \ldots, (x_k, y_k)\), друзья обязательно хотят посетить их все.

    image

    За одну минуту можно перейти из клетки \((a, b)\) в клетку \((c, d)\), если они являются соседними по стороне, то есть выполняется равенство \(|a - c| + |b - d| = 1\). Легко видеть, что на маршрут необходимо потратить хотя бы \(2n+2m-4\) минут, будем рассматривать только такие маршруты.

    Будем называть маршрут интересным, если выполняются следующие условия:

    • для того, чтобы пройти маршрут, друзья потратят ровно \(2n+2m-4\) минут;

    • маршрут проходит через каждую клетку не более одного раза.

    • маршрут проходит через все клетки, которые содержат достопримечательности.

    Помогите школьникам понять, сколько существует различных интересных маршрутов. Так как это число может оказаться достаточно большим, то выведите его остаток при делении на \(10^9+7\).

    В первой строке указаны числа \(n\), \(m\) и \(k\) (\(3 \le n,m \le 10^6\), \(0 \le k \le 2\,000\)).

    В последующих \(k\) строках указано по паре чисел \(x_i\), \(y_i\) (\(1 \le x_i \le n\), \(1 \le y_i \le m\)), гарантируется, что все пары \((x_i, y_i)\) различны. То есть для любой пары индексов \((i, j)\) (\(1 \le i < j \le n\)) верно одно из двух: \(x_i \neq x_j\) или \(y_i \neq y_j\).

    Выведите единственное число — остаток от деления числа интересных маршрутов на \(10^9+7\).

    Примечание

    Ниже изображены все интересные маршруты для первого теста.

    image
    Клетки с достопримечательностями обозначены звездочкой.

    Тройка

    дп Жадный алгоритм

    Арсений очень любит пользоваться городским транспортом. В городе, где он живёт, существует карта <<Тройка>>, позволяющая оплачивать проезд при помощи тарифа <<Кошелёк>>. Есть два вида тарифа:

    • <<Единый>> (57 рублей) — одна поездка на любом виде транспорта;

    • <<90 минут>> (85 рублей) — не более одной поездки на метро и любое количество поездок на наземном транспорте в течение не более 90 минут с момента начала первой поездки (между началом поездки и началом первой поездки должно пройти не более 90 минут).

    Так как Арсений коллекционирует карты <<Тройка>>, у него их очень много, поэтому он может использовать неограниченное количество билетов одновременно.

    У него есть планы на ближайшие \(n\) поездок. Помогите мальчику узнать, какое минимальное количество денег он должен потратить для реализации своих планов.

    Формат входных данных
    Первая строка входных данных содержит целое число \(n\) — количество поездок, которые были запланированы, \(1 \le n \le 10^5\).

    Следующие \(n\) строк содержат два значения, разделённые пробелом. Сначала указан вид транспорта: заглавная английская буква <<B>>, если Арсений будет использовать наземный транспорт, или заглавная английская буква <<M>>, если он воспользуется метро. Затем указано время начала поездки в формате ЧЧ:ММ (в виде двузначного количества часов и затем двузначного количества минут).

    Поездки указаны в порядке их совершения, но они могут занимать несколько последовательных дней. Если время, записанное в какой-то строке, меньше, чем время в предыдущей строке, то данная поездка была совершена на следующий день. При этом гарантируется, что в каждый день Арсений совершит хотя бы одну поездку.

    Также гарантируется, что разница времени совершения двух поездок составляет не менее 10 минут.

    Формат выходных данных
    Программа должна вывести одно целое число — сколько денег потратит Арсений, если будет максимально эффективно использовать карты.

    Примечание
    В первом примере все три поездки могут быть оплачены одним тарифом <<90 минут>> за \(85\) рублей.

    Во втором примере нужно одним билетом <<90 минут>> за \(85\) рублей оплатить первую (23:59), вторую (00:29) и четвёртую (01:29) поездки. Третью поездку (00:59) нельзя оплатить тем же билетом, потому что в тарифе <<90 минут>> может быть не более одной поездки на метро, для этой поездки придётся использовать отдельный билет за 57 рублей.

    В третьем примере первую поездку (22:00) нужно оплатить отдельным билетом за 57 рублей, а следующие три поездки (23:00, 23:50, 00:30) — билетом <<90 минут>>.

    Фонари

    Дерево отрезков, RSQ, RMQ дп

    Улицу Подводный канал освещают \(n\) фонарей, пронумерованных вдоль улицы от 1 до \(n\). Один или несколько подряд стоящих фонарей назовём сегментом. Таким образом, общее количество сегментов \(\frac{n(n+1)}{2}\). Сегмент считается исправным, если лампочки во всех фонарях этого сегмента исправны.

    С фонарями регулярно происходят события одного из двух типов:

    в каком-то сегменте из-за скачков напряжения все лампочки одновременно перегорают;

    Архиэнерго выбирает некоторый сегмент и посылает ремонтников, чтобы заменить на нем все перегоревшие лампочки на исправные.

    После каждого события мэрия города требует от Архиэнерго предоставить отчёт о количестве исправных сегментов. Для улучшения показателей работы ремонтники включают в отчёт все сегменты, которые исправны сейчас или были исправны когда-либо ранее.

    Требуется написать программу, определяющую количество сегментов после каждого события, которые исправны в этот момент или были исправны когда-либо до этого события.

    Входные данные
    В первой строке входных данных содержатся два числа \(n\) и \(q\) — количество фонарей и количество произошедших событий. Следующая строка входных данных состоит из \(n\) символов 0 и 1, описывающих начальное состояние фонарей, где 1 обозначает фонарь с исправной лампочкой, а 0 — с перегоревшей.

    В каждой из последующих \(q\) строк содержатся описания событий в виде трёх чисел \(l_i, r_i\) и \(c_i\), которые означают, что после этого события все лампочки в фонарях с номерами \(l_i, l_i+1, \ldots, r_i\):

    • перегорают при \(c_i = 0\)
    • становятся исправными при \(c_i = 1\).

    В описаниях всех событий \(1 \le l_i \le r_i \le n\), а \(c_i\) принимает значение \(0\) или \(1\).

    Выходные данные
    В первой строке выходных данных выведите единственное число "— количество исправных сегментов в начальном состоянии. Затем по одному в строке выведите \(q\) чисел: для каждого из произошедших событий выведите количество сегментов, указываемых в отчёте после этого события.

    Скобки(3)

    Динамическое программирование по подстрокам дп Динамическое программирование: один параметр

    Определим правильные скобочные выражения так:

    Пустое выражение - правильное.
    Если выражение S правильное, то (S) и [S] также правильные.
    Если выражения A и B правильные, то и выражение AB - правильное.
    Дана последовательность скобок "(", ")", "[" и "]". Требуется найти самое короткое правильное выражение, в котором данная последовательность является подпоследовательностью, то есть такое, из которого можно вычеркнуть некоторые символы (возможно, ноль) и получить исходную последовательность, не меняя порядок оставшихся.

    Ограничения: исходная последовательность содержит не более 100 скобок.

    Входные данные
    В первой строке находятся символы (, ), [ и ] без пробелов.

    Выходные данные
    Выводится искомая последовательность скобок без пробелов.

    Примеры
    Входные данные Выходные данные
    1 ([(] ()[()]
    2 ( ()

    Палиндромы

    Динамическое программирование по подстрокам дп

    Непустая строка, содержащая некоторое слово, называется палиндромом, если это слово одинаково читается как слева направо, так и справа налево. Пусть дана строка, в которой записано слово S, состоящее из N прописных букв латинского алфавита. Вычёркиванием из этого слова некоторого набора символов можно получить строку, которая будет палиндромом. Требуется найти количество способов вычёркивания из данного слова некоторого (возможно, пустого) набора символов таких, что полученная в результате строка являлась палиндромом. Способы, различающиеся порядком вычёркивания символов, считаются одинаковыми.

    Ограничения: 1 <= N <= 60.

    Входные данные
    В первой строке записано слово S.

    Выходные данные
    Вывести одно целое число - количество способов вычёркивания.

    Планировка кухни

    дп Задача о рюкзаке "Длинная" арифметика

    Крупная межгалактическая сеть мебельных магазинов Galactic-Мебель недавно вышла на рынок мебели для кухонь в звездной системе LoST-2007. В этой звездной системе во всех квартирах кухни имеют форму прямоугольника размером a на b метров. При этом вдоль одной из стен принято ставить стол, в смежной с ней стене находится окно. Таким образом, для размещения различных кухонных шкафчиков остается угол со сторонами a и b метров.

    Для экономии места в этой звездной системе принято ставить шкафчики вплотную друг к другу и к углу кухни. Кроме этого, сами шкафчики встраиваются внутрь стены, то есть вдоль стены расположены только их дверцы.

    В звездной системе LoST-2007 используется n типов кухонных шкафчиков. Каждый тип шкафчиков характеризуется своей шириной wi, при этом на кухне должен присутствовать ровно один экземпляр каждого типа шкафчиков.

    Недавно директор маркетингового отдела Galactic-Мебель заметил, что он может предложить клиентам несколько вариантов расположения шкафчиков на кухне. Различными считаются варианты, которые отличаются расположением хотя бы одного шкафчика. При этом шкафчики различных типов могут иметь одинаковую ширину, однако отличаются внешней отделкой. Так что даже размещения, которые отличаются лишь позициями шкафчиков с равной шириной, считаются различными. Например, пусть a = 3, b = 4 и есть два типа шкафчиков, шириной 1 и 2, соответственно.


    Тогда возможно шесть планировок кухни. Возможные планировки показаны на рисунке.

    Требуется по заданным размерам кухни и шкафчиков найти число различных планировок.

    Входные данные
    Первая строка содержит три целых числа: a, b и n (1 ≤ a ≤ 300, 1 ≤ b ≤ 300, 1 ≤ n ≤ 100). Каждая из следующих n строк содержит целое число wi (1 ≤ wi ≤ 300) — ширину соответствующего шкафчика.

    Выходные данные
    Выведите количество различных планировок кухни.

    Последовательность

    дп Динамическое программирование реализация

    Последовательность чисел монотонно убывающая если для любого i элемента (кроме последнего )выполняется Ai > Ai+1. Последовательность чисел монотонно возрастающая если для любого i элемента (кроме последнего )выполняется Ai < Ai+1. Последовательность монотонная если она или монотонно убывающая или монотонно возрастающая. Дана последовательность Ai из n чисел. Каждый элемент последовательности можно увеличивать или уменьшать. Требуется изменить последовательность так что бы в ней содержалось K монотонных непересекающихся последовательностей. (один элемент тоже последовательность). Т.к. преобразований бесконечно много то нужно найти такое преобразование чтобы сумма разностей по модулю конечного значения Ai и начального значения Ai была минимальна.

    Входные данные
    В первой строчке n,k n- количество элементов в последовательности, k сколько должно быть монотонных последовательностей. Во второй строчке n чисел через пробел - сама последовательность(каждое число по модулю меньше 20,000,000)

    Выходные данные
    Одно число, ответ на задачу.

    Монетки

    игры дп Простые игры

    Два участника олимпиады играют в следующую игру. Участники по очереди бросают монетки (одну или больше) в хитрый ящик. Если в ящике находится в точности X1, или X2, ..., или Xn монеток, то они, кроме одной, отдаются участнику, сделавшему последний ход. Оставшаяся монетка "исчезает" из игры. Игра заканчивается, если у одного из участников игры не осталось монеток. При этом монетки из ящика (все до одной) отдаются другому участнику(он является победителем игры). Определить наибольшее количество монеток, которое может выиграть первый участник при наилучшей игре второго. Если первый участник не может выиграть, то результатом является число 0.

    Входные данные
    В первой строке входного файла два числа 0 < S,T <= 50 (число монеток у первого и второго игроков). Во второй строке N (0 <= N <= 50) - число хитрых состояний ящика. В третьей строке целые числа X1, X2,..., Xn, 0 < X1 <= X2 <= ... <= Xn <= 100.

    Выходные данные
    Вывести число монеток у первого участника или 0.

    Здоровое питание

    дп Дерево отрезков, RSQ, RMQ реализация

    План студенческого городка некоторого университета представляет собой квадрат \(n \times n\), в каждой клетке которого расположено здание. Здания соединены переходами, если они расположены в клетках, имеющих общую сторону. В левом верхнем углу квадрата расположено студенческое общежитие. В правом нижнем углу расположен учебный корпус.

    В каждом из зданий, включая общежитие и учебный корпус, расположен автомат, торгующий ровно одним продуктом, например, только кофе или только пирожками с мясом. Студенты каждый день ходят из общежития в учебный корпус по переходам, выбирая один из кратчайших путей.

    Руководство университета заинтересовалось разнообразием питания студентов, покупающих продукты в автоматах по ходу движения. Для каждого автомата \(A_{i,j}\) планируется найти кратчайший путь из общежития в учебный корпус, проходящий через этот автомат и содержащий как можно больше автоматов, торгующих тем же самым продуктом, что и автомат \(A_{i,j}\). Количество таких автоматов на этом пути называется избыточностью автомата \(A_{i,j}\). При этом автомат \(A_{1,1}\) находится в общежитии, а автомат \(A_{n,n}\) — в учебном корпусе.

    Требуется написать программу, которая по информации о продуктах, продаваемых автоматами, для каждого из чисел в диапазоне от \(1\) до \(2n - 1\) определяет число автоматов с таким значением избыточности.

    Формат входных данных
    Первая строка содержит целое число \(n\) (\(2 \leqslant n \leqslant 1500\)). Следующие \(n\) строк содержат по \(n\) чисел в каждой. В \(i\)-й из этих строк \(j\)-е число соответствует номеру продукта, продающегося в автомате \(A_{i,j}\). Номера продуктов находятся в диапазоне от \(1\) до \(n^2\).

    Формат выходных данных
    Строка должна содержать \((2n-1)\) целых чисел — количество автоматов с избыточностями \(1, 2, \ldots, 2n - 1\) соответственно.

    Игра после сессии

    дп Динамическое программирование

    После того как Данил сдал всю сессию на 10 из 10, он решил расслабиться и поиграть в компьютерные игры. Его ноутбук был очень старым, поэтому Данил смог запустить только одну игру, в которой паркурист Похпид прыгает по крышам небоскребов.

    На каждом уровне игры генерируется новый проспект из небоскребов, где каждая высотка задается уникальной положительной координатой относительно начала проспекта. После этого Похпид выбирает здание, с которого он начинает свой путь, при этом он может прыгать только на здание, координата которого больше текущей. Трудность этой игры заключается в том, что после каждого прыжка Похпид устает и уже не может прыгать также далеко как раньше. Формально говоря, на каждом уровне генерируется \(n\) зданий, координаты которых равны \(a_1, a_2, \ldots, a_n\). Игрок выбирает стартовый небоскреб и с него может прыгнуть на любое здание, которое находится правее, при этом длина первого прыжка может быть любой. Для всех последующих прыжков должно быть выполнено условие: если сейчас игрок находится на здании с координатой \(a_i\), а до этого был на позиции \(a_j\), то он может перепрыгнуть на здание с координатой \(a_k\), если \(a_i - a_j > a_k - a_i\).

    Так как Данил любит делать все по максимуму, он решил на каждом уровне посетить максимально возможное количество зданий. Помогите ему с этой задачей и для каждого уровня найдите максимальное количество небоскребов, которое можно посетить.

    Формат входных данных
    В первой строке входных данных дается число уровней \(t\) \((1 \leq t \leq 1000)\).

    В следующих строках каждый уровень задается числом зданий \(n\) \((1 \leq n \leq 5\,000)\) в одной строке и позициями этих зданий \(a_1, a_2, \ldots, a_n\) \((0 \leq a_i \leq 10 ^ {18}, \, a_i \neq a_j\) если \(i \neq j)\) в следующей строке. Гарантируется, что сумма \(n\) по всем уровням не превосходит \(30\,000\).

    Формат выходных данных
    Для каждого уровня нужно вывести в отдельной строке максимальное количество небоскребов, которое может посетить Даня.

    Решения, работающие при \(n \leq 10\) и \(t = 1\) будут получать не меньше 25% баллов.

    Решения, работающие при \(n \leq 100\) и \(t \leq 10\) будут получать не меньше 50% баллов.

    Решения, работающие при \(n \leq 2500\) и \(t \leq 10\) будут получать не меньше 75% баллов.

    Замечание

    В первом примере оптимальный выбор небоскребов \(3, 5, 4, 1\) их координаты соответственно будут равны \(3, 6, 8, 9\).

    Во втором примере ответы для уровней получаются выбором следующих 3 наборов индексов соответственно:
    1) \(2, 1, 3\)
    2) \(3, 2, 8, 7, 5\)
    3) \(5, 1, 4, 2\)

    Модульный граф

    кратчайшие пути графы дп

    Дан связный неориентированный граф из \(n\) вершин. Изначально в \(i\)-й вершине (\(1 \leq i \leq n\)) записано целое положительное число \(a_i\). Боб хочет за минимальное время попасть из вершины с номером \(1\) в вершину с номером \(n\). Время, которое требуется, чтобы пройти по ребру, соединяющему вершины \(u\) и \(v\), составляет \(|a_u - a_v|\).

    Перед тем, как начать обход, Боб может поменять значение \(a_i\) в не более чем \(k\) вершинах. За какое минимальное время можно попасть из \(1\) в \(n\), поменяв значения оптимальным образом?

    Формат входных данных
    В первой строке входных данных записаны три целых числа \(n, m, k\) (\(2 \leq n \leq 2000, 1 \leq m \leq 2000, 0 \leq k \leq 10\)) — количество вершин графа, количество ребер и параметр \(k\) соответственно.

    В следующей строке содержится \(n\) целых чисел \(a_i\) (\(0 \leq a_i \leq 10^9\)) — начальные значения в вершинах.

    В следующих \(m\) строках содержатся пары чисел \(u_i, v_i\) (\(1 \leq u_i, v_i \leq n\)) — вершины, соединенные \(i\)-м ребром. Гарантируется, что граф связный, в нем нет петель и кратных ребер.

    Формат выходных данных
    В единственной строке выходных данных выведите ответ на задачу.

    Примечание

    В первом тестовом примере одним из оптимальных способов получения ответа может быть изменение значения в вершине с номером \(2\) с числа \(15\) на число \(3\). В таком случае путь \(1 \rightarrow 2 \rightarrow 5 \rightarrow 6\) будет иметь стоимость \(|1 - 3| + |3 - 4| + |4 - 10| = 9\).

    Второй пример отличается от первого лишь значением \(k\). Во втором примере можно поменять значения записанные в вершинах с номерами \(2, 3, 6\) на \(1\). Тогда стоимостью пути станет \(|1 - 1| + |1 - 1| + |1 - 1| + |1 - 1| = 0\).

    Не подпоследовательность

    Динамическое программирование дп

    Последовательность \(X = [x_1, x_2, \ldots, x_t]\) является подпоследовательностью последовательности \(Y = [y_1, y_2, \ldots, y_s]\), если можно удалить некоторые (возможно ни одного) элементы \(Y\), чтобы получить \(X\). Иначе говоря, существует последовательность индексов \(1 \le i_1 < i_2 < \ldots < i_t \le s\), что \(x_j = y_{i_j}\) для всех \(j\) от \(1\) до \(s\). Например, последовательность \([1, 2, 3, 2]\) является подпоследовательностью последовательности \([\mathbf{1}, 1, \mathbf{2}, 2, 1, \mathbf{3}, \mathbf{2}, 1]\), а последовательность \([1, 2, 3, 1, 2]\) "— нет.

    Рассмотрим две последовательности \(A = [a_1, a_2, \ldots, a_m]\) и \(B = [b_1, b_2, \ldots, b_n]\), состоящие из целых чисел от \(1\) до \(k\).

    Требуется найти минимальную по длине последовательность \(C = [c_1, c_2, \ldots, c_p]\), которая не являлась бы подпоследовательностью ни \(A\) ни \(B\). Элементы последовательности \(C\) также должны являться целыми числами от \(1\) до \(k\).

    Формат входных данных
    Первая строка ввода содержит число \(k\) — максимальное значение элемента последовательности (\(1 \le k \le 5\,000\)).

    Вторая строка содержит число \(m\) — длину последовательности \(A\) (\(1 \le m \le 5\,000\)). Третья строка содержит \(m\) целых чисел от \(1\) до \(k\) — последовательность \(A\).

    Четвертая строка содержит число \(n\) — длину последовательности \(B\) (\(1 \le n \le 5\,000\)). Пятая строка содержит \(n\) целых чисел от \(1\) до \(k\) — последовательность \(B\).

    Формат выходных данных
    На первой строке выведите \(p\) — длину искомой последовательности. На второй строке выведите последовательность \(C\). Если оптимальных ответов несколько, выведите любой из них.

     

    Нетривиальные разложения

    дп теория чисел реализация

    Рома, Саша и Алиса решили модернизировать знаменитый алгоритм шифрования RSA. Они считают, что ограничение на модуль \(n\), используемый в RSA, должно быть произведением двух различных простых чисел, избыточно. Вместо этого они планируют использовать \(n\), которое представляет собой произведение степеней \(k\) двух различных простых чисел: \(n = p^kq^k\).

    Будем называть нетривиальным разложение числа \(n\) на множители, такое, что множителей хотя бы два, и каждый из них строго больше \(1\). Оказалось, что в случае \(n = p^kq^k\) у числа \(n\) может быть несколько различных нетривиальных разложений на множители. Например, \(100 = 2^2 5^2\) имеет восемь нетривиальных разложений: \(100 = 2\cdot 50\), \(100 = 2\cdot2\cdot25\), \(100 = 2\cdot2\cdot5\cdot5\), \(100=2\cdot5\cdot10\), \(100 = 4\cdot25\), \(100=4\cdot5\cdot5\), \(100=5\cdot20\) и \(100=10\cdot10\).

    Теперь ребята задаются вопросом: пусть \(n = p^kq^k\), сколько существует различных нетривиальных разложений \(n\) на множители?

    Формат входных данных
    На вход подается одно целое число \(n\) (\(6 \le n \le 10^{18}\), гарантируется, что \(n=p^kq^k\) для двух различных \(p\) и \(q\) для целого \(k > 0\)).

    Формат выходных данных
    Выведите одно число "— количество нетривиальных разложений \(n\) на множители.

    Выбор столицы

    графы Деревья дп

    Дано неориентированное дерево "— связный граф из \(n\) вершин без циклов, и число \(k\). Зафиксируем некоторую вершину \(s\) дерева и назовем ее столицей.

    Ориентируем ребра дерева в направлении от столицы. Иными словами, ориентируем ребро \((u, v)\) в направлении \(u \to v\), если при подвешивании дерева за вершину \(s\) вершина \(u\) является родителем вершины \(v\). Заметим, что при таком ориентировании ребер каждая вершина достижима из столицы.

    Определим расстояние до вершины \(v\) графа как минимальное количество ребер на пути из \(s\) в \(v\). Назовем доступностью вершины \(s\) максимальное из расстояний до всех вершин.

    Разрешается добавить в дерево не более \(k\) дополнительных ориентированных ребер.

    Для каждой вершины \(s\) дерева определите, какой минимальной доступности можно достичь, если выбрать вершину \(s\) в качестве столицы.

    Обратите внимание, что в некоторых подзадачах требуется вывести ответ только для первой вершины.

    Формат входных данных
    Первая строка содержит три целых числа \(n\), \(k\) и \(t\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le k \le n - 1\), \(n \cdot k \le 2 \cdot 10^5\), \(0 \le t \le 1\)) — количество вершин дерева, ограничение на максимальное количество добавленных ребер и число \(t\), равное \(0\), если нужно вывести ответ только для вершины с номером \(1\), и равное \(1\) иначе.

    Каждая из следующих \(n - 1\) строк содержит два целых числа \(u_i, v_i\) (\(1 \le u_i, v_i \le n\)) — ребра дерева.

    Гарантируется, что заданные ребра образуют дерево.

    Формат выходных данных

    В случае, если \(t = 0\), выведите единственное целое число: минимальную доступность, которую можно достичь, выбрав вершину с номером \(1\) в качестве столицы, и добавив не более \(k\) дополнительных ориентированных ребер.

    В случае, если \(t = 1\), выведите \(n\) чисел: \(i\)-е число равняется минимальной доступности, которую можно достичь, выбрав вершину \(i\) в качестве столицы, и добавив не более \(k\) дополнительных ориентированных ребер.

    На рисунке приведены иллюстрации к первому примеру. Пунктирными линиями обозначены добавленные ребра. Для вершин \(1\) и \(2\) минимальная доступность равняется \(1\), а для вершин \(3\), \(4\) и \(5\) минимальная доступность равняется 2.

    image

    Убрать циклы

    битмаски дп графы

    Мальчик Коля любит графы, но не любит циклы. У Коли есть несколько ориентированных не обязательно связных
    графов. Графы могут содержать параллельные ребра, но не содержат петли. К сожалению, некоторые из них могут содержать
    циклы.
    Коля хочет развернуть некоторые ребра в каждом графе, чтобы избавиться от циклов. Разворотом ребра будем считать
    замену ребра из вершины a в вершину b на противоположное ребро, которое будет направлено из вершины b в вершину a. При
    этом Коля хочет развернуть наименьшее число ребер в каждом графе, чтобы получившиеся графы не содержали циклов.
    Помогите Коле узнать, какое наименьшее число ребер ему нужно развернуть в каждом графе.

    Входные данные
    В первой строке входных данных содержится число t - число графов (1≤t≤8).
    В первой строке описания каждого графа дано два числа n и m - число вершин и число ребер соответственно
    (2≤n≤10, 1≤m≤1000).
    В следующих m строках содержатся пары чисел ai, bi - описание ребер графа (1≤ ai, bi ≤ n, ai ≠ bi).
    Для удобства, описания графов разделены пустыми строками. Пустой строки после последнего графа нет.
    Гарантируется, что суммарное число вершин во всех графах не превосходит 50.

    Выходные данные
    Для каждого графа выведите одно число в отдельной строке - наименьшее число ребер, которые нужно развернуть, чтобы полученный граф не содержал циклов.
     

    Примеры
    Входные данные Выходные данные
    1 4
    2 2
    1 2
    2 1

    4 2
    1 4
    4 3

    3 3
    1 2
    2 3
    3 1

    3 5
    1 2
    2 3
    3 1
    2 3
    1 3
    1
    0
    1
    1


    Замечание
    В первом графе нужно развернуть одно из ребер, чтобы убрать цикл. Во втором графе циклов изначально нет, так что
    ничего разворачивать не надо. В третьем графе можно развернуть любое ребро, чтобы убрать цикл. В четвертом графе нужно
    развернуть ребро (3,1) или ребро (1,2), чтобы новый граф не содержал циклов.

    Capybara. Канатная дорога

    дп Динамическое программирование

    Побывав недавно в лесу, Вася решил построить на деревьях канатную дорогу. Он хочет, чтобы дорога была как можно более длинной, но он плохо помнит высоты деревьев в лесу. К счастью, он уверен, что правильно помнит высоты всех деревьев, кроме, возможно, одного из них.

    Известно, что лес состоит из n деревьев, стоящих в ряд и пронумерованных слева направо числами от 1 до n. Высота i-го дерева, по воспоминаниям Васи, равна hi. Канатная дорога длины k должна опираться на k (1 <= k <= n) деревьев i1, i2, . . . , ik (i1 < i2 < . . . < ik), таких что их высота возрастает, то есть, hi1 < hi2 < . . . < hik.
    Петя тоже был в лесу, и у него есть q предположений о том, где именно ошибается Вася. Его i-е предположение задаётся числами ai и bi , означающими, что, по мнению Пети, высота дерева
    с номером ai на самом деле равна bi . Обратите внимание, Петины предположения независимы между собой.

    Ваша задача состоит в том, чтобы для каждого предположения Пети найти максимальную длину канатной дороги, которую можно построить с опорой на эти деревья.
    Отметим, что в рамках данной задачи длиной дороги Вася считает количество опорных деревьев в ней.
     
    Формат входных данных
    Первая строка входных данных содержит два числа n и m (1 <= n, m <= 400 000) — количество деревьев в лесу и количество предположений Пети соответственно.
    В следующей строке содержатся n целых чисел hi (1 <= hi <= 109 ) — высоты деревьев по предположению Васи.

    Каждая из следующих m строк содержит по два целых числа ai и bi (1 <= ai <= n, 1 <= bi <= 109 ).

    Формат выходных данных
    Для каждого предположения Пети выведите в отдельной строке одно число — максимальную длину канатной дороги.

    Ввод Вывод
    4 4
    1 2 3 4
    1 1
    1 4
    4 3
    4 5
    4
    3
    3
    4
    4 2
    1 3 2 6
    3 5
    2 4
    4
    3
    Замечание
    Рассмотрим первый пример. Первое Петино предположение совпадает с предположением Васи.
    Согласно его второму предположению, высоты деревьев были (4, 2, 3, 4), третьему (1, 2, 3, 3), а по четвёртому предположению — (1, 2, 3, 5).